Initial commit: Helpdesk application setup
- Backend: Node.js/TypeScript with Prisma ORM - Frontend: Vite + TypeScript - Project configuration and documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
91
frontend/src/store/configStore.ts
Normal file
91
frontend/src/store/configStore.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { create } from 'zustand';
|
||||
import type {
|
||||
TaskStatus,
|
||||
Priority,
|
||||
EquipmentType,
|
||||
RevisionType,
|
||||
RMAStatus,
|
||||
RMASolution,
|
||||
UserRole,
|
||||
} from '@/types';
|
||||
import { settingsApi } from '@/services/settings.api';
|
||||
|
||||
interface ConfigState {
|
||||
taskStatuses: TaskStatus[];
|
||||
priorities: Priority[];
|
||||
equipmentTypes: EquipmentType[];
|
||||
revisionTypes: RevisionType[];
|
||||
rmaStatuses: RMAStatus[];
|
||||
rmaSolutions: RMASolution[];
|
||||
userRoles: UserRole[];
|
||||
isLoading: boolean;
|
||||
isLoaded: boolean;
|
||||
|
||||
fetchConfig: () => Promise<void>;
|
||||
getTaskStatusById: (id: string) => TaskStatus | undefined;
|
||||
getPriorityById: (id: string) => Priority | undefined;
|
||||
getEquipmentTypeById: (id: string) => EquipmentType | undefined;
|
||||
getRevisionTypeById: (id: string) => RevisionType | undefined;
|
||||
getRMAStatusById: (id: string) => RMAStatus | undefined;
|
||||
getRMASolutionById: (id: string) => RMASolution | undefined;
|
||||
getUserRoleById: (id: string) => UserRole | undefined;
|
||||
}
|
||||
|
||||
export const useConfigStore = create<ConfigState>((set, get) => ({
|
||||
taskStatuses: [],
|
||||
priorities: [],
|
||||
equipmentTypes: [],
|
||||
revisionTypes: [],
|
||||
rmaStatuses: [],
|
||||
rmaSolutions: [],
|
||||
userRoles: [],
|
||||
isLoading: false,
|
||||
isLoaded: false,
|
||||
|
||||
fetchConfig: async () => {
|
||||
if (get().isLoaded) return;
|
||||
|
||||
set({ isLoading: true });
|
||||
try {
|
||||
const [
|
||||
taskStatusesRes,
|
||||
prioritiesRes,
|
||||
equipmentTypesRes,
|
||||
revisionTypesRes,
|
||||
rmaStatusesRes,
|
||||
rmaSolutionsRes,
|
||||
userRolesRes,
|
||||
] = await Promise.all([
|
||||
settingsApi.getTaskStatuses(),
|
||||
settingsApi.getPriorities(),
|
||||
settingsApi.getEquipmentTypes(),
|
||||
settingsApi.getRevisionTypes(),
|
||||
settingsApi.getRMAStatuses(),
|
||||
settingsApi.getRMASolutions(),
|
||||
settingsApi.getUserRoles(),
|
||||
]);
|
||||
|
||||
set({
|
||||
taskStatuses: taskStatusesRes.data,
|
||||
priorities: prioritiesRes.data,
|
||||
equipmentTypes: equipmentTypesRes.data,
|
||||
revisionTypes: revisionTypesRes.data,
|
||||
rmaStatuses: rmaStatusesRes.data,
|
||||
rmaSolutions: rmaSolutionsRes.data,
|
||||
userRoles: userRolesRes.data,
|
||||
isLoading: false,
|
||||
isLoaded: true,
|
||||
});
|
||||
} catch {
|
||||
set({ isLoading: false });
|
||||
}
|
||||
},
|
||||
|
||||
getTaskStatusById: (id) => get().taskStatuses.find((s) => s.id === id),
|
||||
getPriorityById: (id) => get().priorities.find((p) => p.id === id),
|
||||
getEquipmentTypeById: (id) => get().equipmentTypes.find((t) => t.id === id),
|
||||
getRevisionTypeById: (id) => get().revisionTypes.find((t) => t.id === id),
|
||||
getRMAStatusById: (id) => get().rmaStatuses.find((s) => s.id === id),
|
||||
getRMASolutionById: (id) => get().rmaSolutions.find((s) => s.id === id),
|
||||
getUserRoleById: (id) => get().userRoles.find((r) => r.id === id),
|
||||
}));
|
||||
Reference in New Issue
Block a user