- Backend: Node.js/TypeScript with Prisma ORM - Frontend: Vite + TypeScript - Project configuration and documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
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),
|
|
}));
|