import React from 'react'; import { CheckIcon } from '@radix-ui/react-icons'; import { useTranslation } from 'react-i18next'; import { useModule, useStatus } from '../../lib/react-utils'; import apiReducer, { modules } from '../../store/api/reducer'; import { PageContainer, PageHeader, PageTitle, TextBlock, Field, FlexRow, Label, Checkbox, CheckboxIndicator, InputBox, FieldNote, } from '../theme'; import SaveButton from '../components/utils/SaveButton'; import Interval from '../components/Interval'; import { useAppDispatch } from '../../store'; export default function LoyaltySettingsPage(): React.ReactElement { const { t } = useTranslation(); const [config, setConfig, loadStatus] = useModule(modules.loyaltyConfig); const dispatch = useAppDispatch(); const status = useStatus(loadStatus.save); const busy = loadStatus.load?.type !== 'success' || loadStatus.save?.type === 'pending'; const active = config?.enabled ?? false; return ( {t('pages.loyalty-settings.title')} {t('pages.loyalty-settings.subtitle')} {t('pages.loyalty-settings.note')} { void dispatch( setConfig({ ...config, enabled: !!ev, }), ); }} id="enable" > {active && }
{ e.preventDefault(); if (!(e.target as HTMLFormElement).checkValidity()) { return; } void dispatch(setConfig(config)); }} > { void dispatch( apiReducer.actions.loyaltyConfigChanged({ ...config, currency: e.target.value, }), ); }} /> {t('pages.loyalty-settings.currency-name-hint')} { const intNum = parseInt(e.target.value, 10); if (Number.isNaN(intNum)) { return; } void dispatch( apiReducer.actions.loyaltyConfigChanged({ ...config, points: { ...config.points, amount: intNum, }, }), ); }} />
{t('pages.loyalty-settings.every')}
{ void dispatch( apiReducer.actions.loyaltyConfigChanged({ ...(config ?? {}), points: { ...config?.points, interval, }, }), ); }} active={active && !busy} min={5} required={true} />
{ const intNum = parseInt(e.target.value, 10); if (Number.isNaN(intNum)) { return; } void dispatch( apiReducer.actions.loyaltyConfigChanged({ ...config, points: { ...config.points, activity_bonus: intNum, }, }), ); }} /> {t('pages.loyalty-settings.bonus-points-hint')}
); }