import React, { FC, useState, useEffect, useCallback, } from 'react'; import { useTranslation } from 'react-i18next'; import AppContainer from '~/client/services/AppContainer'; import { withUnstatedContainers } from '../UnstatedUtils'; import { toastSuccess, toastError } from '~/client/util/apiNotification'; type Props = { appContainer: AppContainer, }; type SubscribeRule = { name: string, isEnabled: boolean, } const subscribeRulesMenuItems = [ { name: 'PAGE_CREATE', description: 'in_app_notification_settings.default_subscribe_rules.page_create', }, ]; const InAppNotificationSettings: FC = (props: Props) => { const { appContainer } = props; const { t } = useTranslation(); const [subscribeRules, setSubscribeRules] = useState([]); const initializeInAppNotificationSettings = useCallback(async() => { const { data } = await appContainer.apiv3Get('/personal-setting/in-app-notification-settings'); const retrievedRules: SubscribeRule[] = data?.subscribeRules; if (retrievedRules != null && retrievedRules.length > 0) { setSubscribeRules(retrievedRules); } else { const createRulesFormList = (rule: {name: string}) => ( { name: rule.name, isEnabled: false, } ); const initializedSubscribeRules = subscribeRulesMenuItems.map(rule => createRulesFormList(rule)); setSubscribeRules(initializedSubscribeRules); } }, [appContainer]); const isCheckedRule = (ruleName: string) => ( subscribeRules.find(stateRule => ( stateRule.name === ruleName ))?.isEnabled || false ); const ruleCheckboxHandler = (isChecked: boolean, ruleName: string) => { setSubscribeRules(prevState => ( prevState.filter(rule => rule.name !== ruleName).concat({ name: ruleName, isEnabled: isChecked }) )); }; const updateSettingsHandler = async() => { try { const { data } = await appContainer.apiv3Put('/personal-setting/in-app-notification-settings', { subscribeRules }); setSubscribeRules(data.subscribeRules); toastSuccess(t('toaster.update_successed', { target: 'InAppNotification Settings' })); } catch (err) { toastError(err); } }; useEffect(() => { initializeInAppNotificationSettings(); }, [initializeInAppNotificationSettings]); return ( <>

{t('in_app_notification_settings.subscribe_settings')}

{subscribeRulesMenuItems.map(rule => (
ruleCheckboxHandler(e.target.checked, rule.name)} />

{t(rule.description)}

))}
); }; const InAppNotificationSettingWrapper = withUnstatedContainers(InAppNotificationSettings, [AppContainer]); export default InAppNotificationSettingWrapper;