diff --git a/client/api/ApiDeclare.ts b/client/api/ApiDeclare.ts index 50e123b..9f9b0cd 100644 --- a/client/api/ApiDeclare.ts +++ b/client/api/ApiDeclare.ts @@ -18,6 +18,8 @@ export type CallMethod = "Chat.getInfo" | + "Chat.updateSettings" | + "Chat.createGroup" | "Chat.getIdForPrivate" | diff --git a/client/api/client_data/Chat.ts b/client/api/client_data/Chat.ts index 88e38cf..0a3dbc3 100644 --- a/client/api/client_data/Chat.ts +++ b/client/api/client_data/Chat.ts @@ -5,6 +5,7 @@ export default class Chat { declare id: string declare title: string declare avatar?: string + declare settings?: { [key: string]: unknown } [key: string]: unknown } diff --git a/client/ui/chat/ChatFragment.tsx b/client/ui/chat/ChatFragment.tsx index 8fa42b8..e7207ac 100644 --- a/client/ui/chat/ChatFragment.tsx +++ b/client/ui/chat/ChatFragment.tsx @@ -24,6 +24,7 @@ import SwitchPreference from '../preference/SwitchPreference.tsx' import SelectPreference from '../preference/SelectPreference.tsx' import TextFieldPreference from '../preference/TextFieldPreference.tsx' import Preference from '../preference/Preference.tsx' +import GroupSettings from "../../api/client_data/GroupSettings.ts" interface Args extends React.HTMLAttributes { target: string @@ -64,6 +65,7 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC } as Chat) const [tabItemSelected, setTabItemSelected] = React.useState('None') + const [groupPreferenceDefaultValue, setGroupPreferenceDefaultValue] = React.useState({}) const tabRef = React.useRef(null) const chatPanelRef = React.useRef(null) useEventListener(tabRef, 'change', () => { @@ -82,6 +84,11 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC await loadMore() setTabItemSelected("Chat") + if (re.data!.type == 'group') { + setGroupPreferenceDefaultValue(re.data!.settings as GroupSettings) + groupPreferenceStore.setter(re.data!.settings as GroupSettings) + console.log(re.data!.settings as GroupSettings) + } setTimeout(() => { chatPanelRef.current!.scrollTo({ top: 10000000000, @@ -210,9 +217,22 @@ export default function ChatFragment({ target, showReturnButton, onReturnButtonC addFile(file.type, file.name, file) } }) - - const groupPreferenceStore = new PreferenceStore() - + + const groupPreferenceStore = new PreferenceStore() + groupPreferenceStore.setOnUpdate(async (value) => { + const re = await Client.invoke("Chat.updateSettings", { + token: data.access_token, + target, + settings: value, + }) + if (checkApiSuccessOrSncakbar(re, "更新设定失败")) return + + setChatInfo(JSON.parse(JSON.stringify({ + ...chatInfo, + settings: value as object, + }))) + }) + return (
+ defaultCheckedId={groupPreferenceDefaultValue.new_member_join_method || 'disabled'} /> { groupPreferenceStore.value.new_member_join_method == 'answered_and_allowed_by_admin' && } diff --git a/server/api/ApiDeclare.ts b/server/api/ApiDeclare.ts index 3ea4484..96ee4b4 100644 --- a/server/api/ApiDeclare.ts +++ b/server/api/ApiDeclare.ts @@ -17,6 +17,8 @@ export type CallMethod = "User.getMyRecentChats" | "Chat.getInfo" | + + "Chat.updateSettings" | "Chat.createGroup" |