From 2f5f2ac4ba552673401221c76e27f6494ede8b1e Mon Sep 17 00:00:00 2001 From: batmnkh2344 Date: Thu, 2 Oct 2025 16:38:12 +0800 Subject: [PATCH 1/3] chore: add timezone selector on general settings --- .../modules/app/components/SettingsRoutes.tsx | 14 +++---- .../src/modules/settings/constants/data.ts | 11 ++--- .../general/components/GeneralSettings.tsx | 40 ++++++++++++------- .../general/components/SelectTimezone.tsx | 25 ++++++++++++ .../general/hooks/useGeneralSettingsForms.tsx | 8 ++-- .../modules/settings/general/schema/index.ts | 1 + .../src/modules/types/paths/SettingsPath.ts | 2 +- .../workspace/GeneralSettingsPage.tsx | 26 +++++++----- 8 files changed, 85 insertions(+), 42 deletions(-) create mode 100644 frontend/core-ui/src/modules/settings/general/components/SelectTimezone.tsx diff --git a/frontend/core-ui/src/modules/app/components/SettingsRoutes.tsx b/frontend/core-ui/src/modules/app/components/SettingsRoutes.tsx index 5bcb8d7d95..995f3e5a69 100644 --- a/frontend/core-ui/src/modules/app/components/SettingsRoutes.tsx +++ b/frontend/core-ui/src/modules/app/components/SettingsRoutes.tsx @@ -32,11 +32,11 @@ const SettingsMailConfig = lazy(() => default: module.MailConfigPage, })), ); -// const GeneralSettings = lazy(() => -// import('~/pages/settings/workspace/GeneralSettingsPage').then((module) => ({ -// default: module.GeneralSettingsPage, -// })), -// ); +const GeneralSettings = lazy(() => + import('~/pages/settings/workspace/GeneralSettingsPage').then((module) => ({ + default: module.GeneralSettingsPage, + })), +); const TeamMemberSettings = lazy(() => import('~/pages/settings/workspace/TeamMemberPage').then((module) => ({ default: module.TeamMemberPage, @@ -123,10 +123,10 @@ export function SettingsRoutes() { path={SettingsWorkspacePath.MailConfig} element={} /> - {/* } - /> */} + /> } diff --git a/frontend/core-ui/src/modules/settings/constants/data.ts b/frontend/core-ui/src/modules/settings/constants/data.ts index fa0ca57122..0967362026 100644 --- a/frontend/core-ui/src/modules/settings/constants/data.ts +++ b/frontend/core-ui/src/modules/settings/constants/data.ts @@ -4,6 +4,7 @@ import { TSettingPath, } from '@/types/paths/SettingsPath'; import { + IconAdjustmentsAlt, IconChessKnight, IconFile, IconMail, @@ -120,6 +121,11 @@ export const SETTINGS_PATH_DATA: { [key: string]: TSettingPath[] } = { // }, ], nav: [ + { + name: 'General', + icon: IconAdjustmentsAlt, + path: SettingsWorkspacePath.General, + }, { name: 'Team member', icon: IconUsersGroup, @@ -130,11 +136,6 @@ export const SETTINGS_PATH_DATA: { [key: string]: TSettingPath[] } = { icon: IconUserCog, path: SettingsWorkspacePath.Permissions, }, - // { - // name: 'General', - // icon: IconAdjustmentsAlt, - // path: SettingsWorkspacePath.General, - // }, { name: 'File upload', icon: IconFile, diff --git a/frontend/core-ui/src/modules/settings/general/components/GeneralSettings.tsx b/frontend/core-ui/src/modules/settings/general/components/GeneralSettings.tsx index 3390db129b..adbc100e49 100644 --- a/frontend/core-ui/src/modules/settings/general/components/GeneralSettings.tsx +++ b/frontend/core-ui/src/modules/settings/general/components/GeneralSettings.tsx @@ -1,16 +1,17 @@ -import { useEffect } from 'react'; -import { useSwitchLanguage } from '~/i18n'; -import { SubmitHandler } from 'react-hook-form'; -import { Button, Form, Spinner, useToast } from 'erxes-ui'; import { useConfig } from '@/settings/file-upload/hook/useConfigs'; -import { SelectCurrency } from '@/settings/general/components/SelectCurrency'; -import { TGeneralSettingsProps } from '@/settings/general/types'; import { TConfig } from '@/settings/file-upload/types'; import { GeneralSettingsSkeleton } from '@/settings/general/components/GeneralSettingsSkeleton'; -import { useGeneralSettingsForms } from '@/settings/general/hooks/useGeneralSettingsForms'; import SelectControl from '@/settings/general/components/SelectControl'; -import { LANGUAGES } from '@/settings/general/constants/data'; +import { SelectCurrency } from '@/settings/general/components/SelectCurrency'; import { SelectMainCurrency } from '@/settings/general/components/SelectMainCurrency'; +import { SelectTimezone } from '@/settings/general/components/SelectTimezone'; +import { LANGUAGES } from '@/settings/general/constants/data'; +import { useGeneralSettingsForms } from '@/settings/general/hooks/useGeneralSettingsForms'; +import { TGeneralSettingsProps } from '@/settings/general/types'; +import { Button, Form, Spinner, useToast } from 'erxes-ui'; +import { useEffect } from 'react'; +import { SubmitHandler } from 'react-hook-form'; +import { useSwitchLanguage } from '~/i18n'; const GeneralSettings = () => { const { languages } = useSwitchLanguage(); @@ -23,19 +24,22 @@ const GeneralSettings = () => { const { configs, updateConfig, loading, isLoading } = useConfig(); const updateCurrency = (data: TGeneralSettingsProps) => { - const updatedConfigs = configs.reduce( - (acc: Record, config: TConfig) => { - const key = config.code as keyof TGeneralSettingsProps; - acc[config.code] = key in data ? data[key] : config.value; + const updatedConfigs = { + // start with all existing configs + ...configs.reduce((acc: Record, config: TConfig) => { + acc[config.code] = config.value; return acc; - }, - {} as Record, - ); + }, {} as Record), + // override/add with new data + ...data, + }; + updateConfig(updatedConfigs); }; const submitHandler: SubmitHandler = (data) => { updateCurrency(data); + handleLanguage(data.languageCode).then(() => { toast({ title: 'Updated successfully', @@ -52,8 +56,13 @@ const GeneralSettings = () => { const mainCurrency = configs?.find( (data: any) => data.code === 'mainCurrency', ); + + const timezone = configs?.find((data: any) => data.code === 'TIMEZONE'); + methods.setValue('dealCurrency', currencies?.value); methods.setValue('mainCurrency', mainCurrency?.value); + + timezone && methods.setValue('TIMEZONE', timezone?.value); } }, [configs, methods]); @@ -78,6 +87,7 @@ const GeneralSettings = () => { /> +