refactor(ui): refactor accesses state using zustand store
This commit is contained in:
58
ui/src/stores/access/index.ts
Normal file
58
ui/src/stores/access/index.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { create } from "zustand";
|
||||
import { produce } from "immer";
|
||||
|
||||
import { type AccessModel } from "@/domain/access";
|
||||
import { list as listAccess, save as saveAccess, remove as removeAccess } from "@/repository/access";
|
||||
|
||||
export interface AccessState {
|
||||
accesses: AccessModel[];
|
||||
createAccess: (access: AccessModel) => void;
|
||||
updateAccess: (access: AccessModel) => void;
|
||||
deleteAccess: (access: AccessModel) => void;
|
||||
fetchAccesses: () => Promise<void>;
|
||||
}
|
||||
|
||||
export const useAccessStore = create<AccessState>((set) => {
|
||||
return {
|
||||
accesses: [],
|
||||
|
||||
createAccess: async (access) => {
|
||||
access = await saveAccess(access);
|
||||
|
||||
set(
|
||||
produce((state: AccessState) => {
|
||||
state.accesses.unshift(access);
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
updateAccess: async (access) => {
|
||||
access = await saveAccess(access);
|
||||
|
||||
set(
|
||||
produce((state: AccessState) => {
|
||||
const index = state.accesses.findIndex((e) => e.id === access.id);
|
||||
state.accesses[index] = access;
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
deleteAccess: async (access) => {
|
||||
await removeAccess(access);
|
||||
|
||||
set(
|
||||
produce((state: AccessState) => {
|
||||
state.accesses = state.accesses.filter((a) => a.id !== access.id);
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
fetchAccesses: async () => {
|
||||
const accesses = await listAccess();
|
||||
|
||||
set({
|
||||
accesses: accesses ?? [],
|
||||
});
|
||||
},
|
||||
};
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
import { create } from "zustand";
|
||||
import { produce } from "immer";
|
||||
|
||||
import { type EmailsSettingsContent, type Settings } from "@/domain/settings";
|
||||
import { type EmailsSettingsContent, type SettingsModel } from "@/domain/settings";
|
||||
import { get as getSettings, save as saveSettings } from "@/repository/settings";
|
||||
|
||||
export interface ContactState {
|
||||
@@ -11,7 +11,7 @@ export interface ContactState {
|
||||
}
|
||||
|
||||
export const useContactStore = create<ContactState>((set) => {
|
||||
let settings: Settings<EmailsSettingsContent>;
|
||||
let settings: SettingsModel<EmailsSettingsContent>;
|
||||
|
||||
return {
|
||||
emails: [],
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
removeBranch,
|
||||
removeNode,
|
||||
updateNode,
|
||||
Workflow,
|
||||
WorkflowModel,
|
||||
WorkflowBranchNode,
|
||||
WorkflowNode,
|
||||
WorkflowNodeType,
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
import { get as getWorkflow, save as saveWorkflow } from "@/repository/workflow";
|
||||
|
||||
export type WorkflowState = {
|
||||
workflow: Workflow;
|
||||
workflow: WorkflowModel;
|
||||
initialized: boolean;
|
||||
updateNode: (node: WorkflowNode) => void;
|
||||
addNode: (node: WorkflowNode, preId: string) => void;
|
||||
|
||||
Reference in New Issue
Block a user