fix(ui): duplicate form names

This commit is contained in:
Fu Diwei
2024-12-20 12:06:30 +08:00
parent d143df3f9f
commit cae33cfc4f
27 changed files with 116 additions and 98 deletions

View File

@@ -5,6 +5,7 @@ import { type AccessModel } from "@/domain/access";
import { list as listAccess, save as saveAccess, remove as removeAccess } from "@/repository/access";
export interface AccessState {
initialized: boolean;
accesses: AccessModel[];
createAccess: (access: MaybeModelRecord<AccessModel>) => void;
updateAccess: (access: MaybeModelRecordWithId<AccessModel>) => void;
@@ -13,7 +14,10 @@ export interface AccessState {
}
export const useAccessStore = create<AccessState>((set) => {
let fetcher: Promise<AccessModel[]> | null = null; // 防止多次重复请求
return {
initialized: false,
accesses: [],
createAccess: async (access) => {
@@ -50,11 +54,14 @@ export const useAccessStore = create<AccessState>((set) => {
},
fetchAccesses: async () => {
const accesses = await listAccess();
fetcher ??= listAccess();
set({
accesses: accesses ?? [],
});
try {
const accesses = await fetcher;
set({ accesses: accesses ?? [], initialized: true });
} finally {
fetcher = null;
}
},
};
});

View File

@@ -1,23 +1,26 @@
import { create } from "zustand";
import { produce } from "immer";
import { type EmailsSettingsContent, type SettingsModel } from "@/domain/settings";
import { SETTINGS_NAMES, type EmailsSettingsContent, type SettingsModel } from "@/domain/settings";
import { get as getSettings, save as saveSettings } from "@/repository/settings";
export interface ContactState {
initialized: boolean;
emails: string[];
setEmails: (emails: string[]) => void;
fetchEmails: () => Promise<void>;
}
export const useContactStore = create<ContactState>((set) => {
let settings: SettingsModel<EmailsSettingsContent>;
let fetcher: Promise<SettingsModel<EmailsSettingsContent>> | null = null; // 防止多次重复请求
let settings: SettingsModel<EmailsSettingsContent>; // 记录当前设置的其他字段,保存回数据库时用
return {
initialized: false,
emails: [],
setEmails: async (emails: string[]) => {
settings ??= await getSettings<EmailsSettingsContent>("emails");
setEmails: async (emails) => {
settings ??= await getSettings<EmailsSettingsContent>(SETTINGS_NAMES.EMAILS);
settings = await saveSettings<EmailsSettingsContent>({
...settings,
content: {
@@ -29,16 +32,20 @@ export const useContactStore = create<ContactState>((set) => {
set(
produce((state: ContactState) => {
state.emails = settings.content.emails;
state.initialized = true;
})
);
},
fetchEmails: async () => {
settings = await getSettings<EmailsSettingsContent>("emails");
fetcher ??= getSettings<EmailsSettingsContent>(SETTINGS_NAMES.EMAILS);
set({
emails: settings.content.emails?.sort() ?? [],
});
try {
settings = await fetcher;
set({ emails: settings.content.emails?.sort() ?? [], initialized: true });
} finally {
fetcher = null;
}
},
};
});