Parcourir la source

create updateIsEnabled

Shun Miyazawa il y a 4 ans
Parent
commit
075232185e
1 fichiers modifiés avec 10 ajouts et 5 suppressions
  1. 10 5
      packages/app/src/components/Me/InAppNotificationSettings.tsx

+ 10 - 5
packages/app/src/components/Me/InAppNotificationSettings.tsx

@@ -3,6 +3,7 @@ import React, {
 } from 'react';
 } from 'react';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 
 
+import { pullAllBy } from 'lodash';
 import { apiv3Get, apiv3Put } from '~/client/util/apiv3-client';
 import { apiv3Get, apiv3Put } from '~/client/util/apiv3-client';
 import { toastSuccess, toastError } from '~/client/util/apiNotification';
 import { toastSuccess, toastError } from '~/client/util/apiNotification';
 
 
@@ -32,6 +33,12 @@ const isCheckedRule = (ruleName: string, subscribeRules: SubscribeRule[]) => (
   ))?.isEnabled || false
   ))?.isEnabled || false
 );
 );
 
 
+const updateIsEnabled = (subscribeRules: SubscribeRule[], ruleName: string, isChecked: boolean) => {
+  const updateTarget: SubscribeRule = { name: ruleName, isEnabled: isChecked };
+  const removeTarget = [{ name: ruleName }];
+  return pullAllBy(subscribeRules, removeTarget, 'name').concat(updateTarget);
+};
+
 
 
 const InAppNotificationSettings: FC = () => {
 const InAppNotificationSettings: FC = () => {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -46,10 +53,8 @@ const InAppNotificationSettings: FC = () => {
     }
     }
   }, []);
   }, []);
 
 
-  const ruleCheckboxHandler = (isChecked: boolean, ruleName: string) => {
-    setSubscribeRules(prevState => (
-      prevState.filter(rule => rule.name !== ruleName).concat({ name: ruleName, isEnabled: isChecked })
-    ));
+  const ruleCheckboxHandler = (ruleName: string, isChecked: boolean) => {
+    setSubscribeRules(prevState => updateIsEnabled(prevState, ruleName, isChecked));
   };
   };
 
 
   const updateSettingsHandler = useCallback(async() => {
   const updateSettingsHandler = useCallback(async() => {
@@ -83,7 +88,7 @@ const InAppNotificationSettings: FC = () => {
                 className="custom-control-input"
                 className="custom-control-input"
                 id={rule.name}
                 id={rule.name}
                 checked={isCheckedRule(rule.name, subscribeRules)}
                 checked={isCheckedRule(rule.name, subscribeRules)}
-                onChange={e => ruleCheckboxHandler(e.target.checked, rule.name)}
+                onChange={e => ruleCheckboxHandler(rule.name, e.target.checked)}
               />
               />
               <label className="custom-control-label" htmlFor={rule.name}>
               <label className="custom-control-label" htmlFor={rule.name}>
                 <strong>{rule.name}</strong>
                 <strong>{rule.name}</strong>