|
1 | 1 | import React, { useState, FormEvent, useEffect } from 'react'; |
2 | 2 | import { useTranslation } from 'react-i18next'; |
3 | 3 |
|
4 | | -import type { FormDataType } from '@/common/interface'; |
| 4 | +import type { FormDataType, NotificationConfig } from '@/common/interface'; |
5 | 5 | import { useToast } from '@/hooks'; |
6 | | -import { setNotice, getLoggedUserInfo } from '@/services'; |
| 6 | +import { useGetNotificationConfig, putNotificationConfig } from '@/services'; |
7 | 7 | import { SchemaForm, JSONSchema, UISchema, initFormData } from '@/components'; |
8 | 8 |
|
9 | 9 | const Index = () => { |
10 | 10 | const toast = useToast(); |
11 | 11 | const { t } = useTranslation('translation', { |
12 | 12 | keyPrefix: 'settings.notification', |
13 | 13 | }); |
| 14 | + const { data: configData } = useGetNotificationConfig(); |
| 15 | + |
14 | 16 | const schema: JSONSchema = { |
15 | 17 | title: t('heading'), |
16 | 18 | properties: { |
17 | | - notice_switch: { |
| 19 | + inbox: { |
| 20 | + type: 'boolean', |
| 21 | + title: t('inbox.label'), |
| 22 | + description: t('inbox.description'), |
| 23 | + enum: configData?.inbox?.map((v) => v.enable), |
| 24 | + default: configData?.inbox?.map((v) => v.enable), |
| 25 | + enumNames: configData?.inbox?.map((v) => t(v.key)), |
| 26 | + }, |
| 27 | + all_new_question: { |
| 28 | + type: 'boolean', |
| 29 | + title: t('all_new_question.label'), |
| 30 | + description: t('all_new_question.description'), |
| 31 | + enum: configData?.all_new_question?.map((v) => v.enable), |
| 32 | + default: configData?.all_new_question?.map((v) => v.enable), |
| 33 | + enumNames: configData?.all_new_question?.map((v) => t(v.key)), |
| 34 | + }, |
| 35 | + all_new_question_for_following_tags: { |
18 | 36 | type: 'boolean', |
19 | | - title: t('email.label'), |
20 | | - default: false, |
| 37 | + title: t('all_new_question_for_following_tags.label'), |
| 38 | + description: t('all_new_question_for_following_tags.description'), |
| 39 | + enum: configData?.all_new_question_for_following_tags?.map( |
| 40 | + (v) => v.enable, |
| 41 | + ), |
| 42 | + default: configData?.all_new_question_for_following_tags?.map( |
| 43 | + (v) => v.enable, |
| 44 | + ), |
| 45 | + enumNames: configData?.all_new_question_for_following_tags?.map((v) => |
| 46 | + t(v.key), |
| 47 | + ), |
21 | 48 | }, |
22 | 49 | }, |
23 | 50 | }; |
24 | 51 | const uiSchema: UISchema = { |
25 | | - notice_switch: { |
26 | | - 'ui:widget': 'switch', |
| 52 | + inbox: { |
| 53 | + 'ui:widget': 'checkbox', |
| 54 | + 'ui:options': { |
| 55 | + label: t('email'), |
| 56 | + }, |
| 57 | + }, |
| 58 | + all_new_question: { |
| 59 | + 'ui:widget': 'checkbox', |
27 | 60 | 'ui:options': { |
28 | | - label: t('email.radio'), |
| 61 | + label: t('email'), |
| 62 | + }, |
| 63 | + }, |
| 64 | + all_new_question_for_following_tags: { |
| 65 | + 'ui:widget': 'checkbox', |
| 66 | + 'ui:options': { |
| 67 | + label: t('email'), |
| 68 | + text: t('all_new_question_for_following_tags.description'), |
29 | 69 | }, |
30 | 70 | }, |
31 | 71 | }; |
32 | 72 | const [formData, setFormData] = useState<FormDataType>(initFormData(schema)); |
33 | 73 |
|
34 | | - const getProfile = () => { |
35 | | - getLoggedUserInfo().then((res) => { |
36 | | - if (res) { |
37 | | - setFormData({ |
38 | | - notice_switch: { |
39 | | - value: res.notice_status === 1, |
40 | | - isInvalid: false, |
41 | | - errorMsg: '', |
42 | | - }, |
43 | | - }); |
44 | | - } |
45 | | - }); |
46 | | - }; |
| 74 | + useEffect(() => { |
| 75 | + setFormData(initFormData(schema)); |
| 76 | + }, [configData]); |
47 | 77 |
|
48 | 78 | const handleSubmit = (event: FormEvent) => { |
49 | 79 | event.preventDefault(); |
50 | 80 | event.stopPropagation(); |
51 | | - setNotice({ |
52 | | - notice_switch: formData.notice_switch.value, |
53 | | - }).then(() => { |
| 81 | + const params = { |
| 82 | + inbox: configData?.inbox.map((v, index) => { |
| 83 | + return { enable: formData.inbox.value[index], key: v.key }; |
| 84 | + }), |
| 85 | + all_new_question: configData?.all_new_question.map((v, index) => { |
| 86 | + return { enable: formData.all_new_question.value[index], key: v.key }; |
| 87 | + }), |
| 88 | + all_new_question_for_following_tags: |
| 89 | + configData?.all_new_question_for_following_tags.map((v, index) => { |
| 90 | + return { |
| 91 | + enable: formData.all_new_question_for_following_tags.value[index], |
| 92 | + key: v.key, |
| 93 | + }; |
| 94 | + }), |
| 95 | + } as NotificationConfig; |
| 96 | + |
| 97 | + putNotificationConfig(params).then(() => { |
54 | 98 | toast.onShow({ |
55 | 99 | msg: t('update', { keyPrefix: 'toast' }), |
56 | 100 | variant: 'success', |
57 | 101 | }); |
58 | 102 | }); |
59 | 103 | }; |
60 | 104 |
|
61 | | - useEffect(() => { |
62 | | - getProfile(); |
63 | | - }, []); |
64 | 105 | const handleChange = (ud) => { |
65 | 106 | setFormData(ud); |
66 | 107 | }; |
|
0 commit comments