From a71a00d4935b8d7788dfdef3713d1e0cb82763ef Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Mon, 15 May 2023 13:17:18 +0800 Subject: [PATCH] feat: chat layout setting --- src/app/services/server.ts | 7 ++++ src/app/slices/server.ts | 6 +++- src/routes/setting/Overview/ChatLayout.tsx | 40 ++++++++++++++++++++++ src/routes/setting/Overview/index.tsx | 28 ++++++++------- src/types/server.ts | 9 +++-- 5 files changed, 75 insertions(+), 15 deletions(-) create mode 100644 src/routes/setting/Overview/ChatLayout.tsx diff --git a/src/app/services/server.ts b/src/app/services/server.ts index 9e5f544a..9aa9c096 100644 --- a/src/app/services/server.ts +++ b/src/app/services/server.ts @@ -170,6 +170,13 @@ export const serverApi = createApi({ }), getSystemCommon: builder.query({ query: () => ({ url: `/admin/system/common` }), + transformResponse: (resp: SystemCommon) => { + let tmp = resp; + tmp.chat_layout_mode = resp.chat_layout_mode ?? "Left"; + tmp.contact_verification_enable = resp.contact_verification_enable ?? false; + tmp.max_file_expiry_mode = resp.max_file_expiry_mode ?? "Off"; + return tmp; + }, async onQueryStarted(data, { dispatch, queryFulfilled }) { try { const resp = await queryFulfilled; diff --git a/src/app/slices/server.ts b/src/app/slices/server.ts index a66885d7..f40be48d 100644 --- a/src/app/slices/server.ts +++ b/src/app/slices/server.ts @@ -22,6 +22,8 @@ const initialState: StoredServer = { }, show_user_online_status: false, webclient_auto_update: true, + contact_verification_enable: false, + chat_layout_mode: "Left" }; const serverSlice = createSlice({ @@ -44,8 +46,10 @@ const serverSlice = createSlice({ description = "", show_user_online_status = true, webclient_auto_update = true, + contact_verification_enable = false, + chat_layout_mode = "Left" } = action.payload || {}; - return { version, upgraded, name, logo, description, inviteLink, show_user_online_status, webclient_auto_update }; + return { version, upgraded, name, logo, description, inviteLink, show_user_online_status, webclient_auto_update, contact_verification_enable, chat_layout_mode }; }, updateInfo(state, action: PayloadAction>) { const values = action.payload || {}; diff --git a/src/routes/setting/Overview/ChatLayout.tsx b/src/routes/setting/Overview/ChatLayout.tsx new file mode 100644 index 00000000..9758675c --- /dev/null +++ b/src/routes/setting/Overview/ChatLayout.tsx @@ -0,0 +1,40 @@ +// import React from 'react' +import { useTranslation } from 'react-i18next'; +import { useGetSystemCommonQuery, useUpdateSystemCommonMutation } from '../../../app/services/server'; +import { useEffect } from 'react'; +import { toast } from 'react-hot-toast'; +import StyledRadio from "../../../common/component/styled/Radio"; +import { useAppSelector } from '../../../app/store'; +import SettingBlock from './SettingBlock'; +import { ChatLayout } from '../../../types/server'; +// type Props = {} + +const Index = () => { + const currStatus = useAppSelector(store => store.server.chat_layout_mode ?? "Left"); + const { t } = useTranslation("setting", { keyPrefix: "overview.chat_layout" }); + const { t: ct } = useTranslation(); + const { refetch } = useGetSystemCommonQuery(); + const [updateSetting, { isSuccess }] = useUpdateSystemCommonMutation(); + useEffect(() => { + if (isSuccess) { + refetch(); + toast.success(ct("tip.update")); + } + }, [isSuccess]); + const handleChange = (newVal: ChatLayout) => { + updateSetting({ chat_layout_mode: newVal }); + }; + // if (!loadSuccess) return null; + return ( + + + + ); +}; + +export default Index; \ No newline at end of file diff --git a/src/routes/setting/Overview/index.tsx b/src/routes/setting/Overview/index.tsx index ba236ab2..98fdd021 100644 --- a/src/routes/setting/Overview/index.tsx +++ b/src/routes/setting/Overview/index.tsx @@ -10,6 +10,8 @@ import FrontendURL from "./FrontendURL"; import DarkMode from "./DarkMode"; import ServerVersionChecker from "../../../common/component/ServerVersionChecker"; import OnlineStatus from "./OnlineStatus"; +import ChatLayout from "./ChatLayout"; +import SettingBlock from "./SettingBlock"; export default function Overview() { const { t } = useTranslation("setting"); @@ -34,9 +36,11 @@ export default function Overview() { {isAdmin && ( <> -
-

{t("overview.sign_up.title")}

-

{t("overview.sign_up.desc")}

+
+

{t("overview.title_feat")}

+

{t("overview.title_feat_desc")}

+
+ -
-
-

{t("overview.guest_mode.title")}

-

- - {t("overview.guest_mode.desc")} - -

+ + -
+ + + + + {/* + + */} diff --git a/src/types/server.ts b/src/types/server.ts index d7e68afa..b420a798 100644 --- a/src/types/server.ts +++ b/src/types/server.ts @@ -6,9 +6,14 @@ export interface Server extends SystemCommon { name: string; description: string; } +export type ChatLayout = "SelfRight" | "Left" export interface SystemCommon { - show_user_online_status: boolean, - webclient_auto_update: boolean, + show_user_online_status?: boolean, + webclient_auto_update?: boolean, + contact_verification_enable?: boolean, + chat_layout_mode?: ChatLayout, + max_file_expiry_mode?: "Off" | "Day1" | "Day7" | "Day30" | "Day90" | "Day180" + } export interface GithubAuthConfig { client_id?: string;