chore: implement i18n setting

This commit is contained in:
steven
2023-09-04 23:41:41 +08:00
parent a49a708fc5
commit 4f0a8cdc0a
27 changed files with 957 additions and 380 deletions

View File

@ -1,6 +1,6 @@
import axios from "axios";
import { create } from "zustand";
import { GetUserSettingResponse, UserSetting } from "@/types/proto/api/v2/user_setting_service_pb";
import { GetUserSettingResponse, UpdateUserSettingResponse, UserSetting } from "@/types/proto/api/v2/user_setting_service_pb";
import * as api from "../../helpers/api";
const convertResponseModelUser = (user: User): User => {
@ -28,6 +28,7 @@ interface UserState {
// User setting related actions.
fetchUserSetting: (userId: UserId) => Promise<UserSetting>;
updateUserSetting: (userSetting: UserSetting, updateMask: string[]) => Promise<UserSetting>;
getCurrentUserSetting: () => UserSetting;
}
@ -105,6 +106,23 @@ const useUserStore = create<UserState>()((set, get) => ({
set(userSettingMap);
return userSetting;
},
updateUserSetting: async (userSetting: UserSetting, updateMask: string[]) => {
const userId = userSetting.id;
const {
data: { userSetting: updatedUserSetting },
} = await axios.post<UpdateUserSettingResponse>(`api/v2/users/${userId}/settings`, {
id: userId,
userSetting,
updateMask,
});
if (!updatedUserSetting) {
throw new Error(`User setting not found for user ${userId}`);
}
const userSettingMap = get().userSettingMapById;
userSettingMap[userId] = updatedUserSetting;
set(userSettingMap);
return updatedUserSetting;
},
getCurrentUserSetting: () => {
const userSettingMap = get().userSettingMapById;
const currentUserId = get().currentUserId;