Initial commit
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
import { create } from 'zustand';
|
||||
import { Node, Edge } from 'reactflow';
|
||||
|
||||
interface Model {
|
||||
id: string;
|
||||
name: string;
|
||||
fields: {
|
||||
name: string;
|
||||
type: string;
|
||||
defaultValue: string;
|
||||
validation: string;
|
||||
mapping?: string;
|
||||
}[];
|
||||
}
|
||||
|
||||
interface Role {
|
||||
id: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
permissions: {
|
||||
authRequired: boolean;
|
||||
routes: string[];
|
||||
canCreateUsers?: boolean;
|
||||
canEditUsers?: boolean;
|
||||
canDeleteUsers?: boolean;
|
||||
canManageRoles?: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
interface Route {
|
||||
id: string;
|
||||
name: string;
|
||||
url: string;
|
||||
method: string;
|
||||
flowData?: {
|
||||
nodes: Node[];
|
||||
edges: Edge[];
|
||||
};
|
||||
}
|
||||
|
||||
interface Settings {
|
||||
globalKey: string;
|
||||
databaseType: string;
|
||||
authType: string;
|
||||
timezone: string;
|
||||
dbHost: string;
|
||||
dbPort: string;
|
||||
dbUser: string;
|
||||
dbPassword: string;
|
||||
dbName: string;
|
||||
}
|
||||
|
||||
interface FlowState {
|
||||
nodes: Node[];
|
||||
edges: Edge[];
|
||||
selectedNode: Node | null;
|
||||
models: Model[];
|
||||
roles: Role[];
|
||||
routes: Route[];
|
||||
settings: Settings;
|
||||
setNodes: (nodes: Node[] | ((prev: Node[]) => Node[])) => void;
|
||||
setEdges: (edges: Edge[] | ((prev: Edge[]) => Edge[])) => void;
|
||||
setSelectedNode: (node: Node | null) => void;
|
||||
updateNodeData: (nodeId: string, newData: any) => void;
|
||||
addModel: (model: Model) => void;
|
||||
updateModel: (model: Model) => void;
|
||||
addRole: (role: Role) => void;
|
||||
updateRole: (role: Role) => void;
|
||||
deleteRole: (roleId: string) => void;
|
||||
addRoute: (route: Route) => void;
|
||||
updateRoute: (route: Route) => void;
|
||||
deleteRoute: (routeId: string) => void;
|
||||
updateSettings: (settings: Settings) => void;
|
||||
}
|
||||
|
||||
export const useFlowStore = create<FlowState>((set) => ({
|
||||
nodes: [],
|
||||
edges: [],
|
||||
selectedNode: null,
|
||||
models: [],
|
||||
roles: [],
|
||||
routes: [],
|
||||
settings: {
|
||||
globalKey: '',
|
||||
databaseType: '',
|
||||
authType: 'session',
|
||||
timezone: 'UTC',
|
||||
dbHost: '',
|
||||
dbPort: '',
|
||||
dbUser: '',
|
||||
dbPassword: '',
|
||||
dbName: '',
|
||||
},
|
||||
setNodes: (nodes) => set((state) => ({
|
||||
nodes: typeof nodes === 'function' ? nodes(state.nodes) : nodes
|
||||
})),
|
||||
setEdges: (edges) => set((state) => ({
|
||||
edges: typeof edges === 'function' ? edges(state.edges) : edges
|
||||
})),
|
||||
setSelectedNode: (node) => set({ selectedNode: node }),
|
||||
updateNodeData: (nodeId, newData) =>
|
||||
set((state) => ({
|
||||
nodes: state.nodes.map((node) =>
|
||||
node.id === nodeId ? { ...node, data: { ...node.data, ...newData } } : node
|
||||
),
|
||||
})),
|
||||
addModel: (model) =>
|
||||
set((state) => ({
|
||||
models: [...state.models, model],
|
||||
})),
|
||||
updateModel: (model) =>
|
||||
set((state) => ({
|
||||
models: state.models.map((m) => (m.id === model.id ? model : m)),
|
||||
})),
|
||||
addRole: (role) =>
|
||||
set((state) => ({
|
||||
roles: [...state.roles, role],
|
||||
})),
|
||||
updateRole: (role) =>
|
||||
set((state) => ({
|
||||
roles: state.roles.map((r) => (r.id === role.id ? role : r)),
|
||||
})),
|
||||
deleteRole: (roleId) =>
|
||||
set((state) => ({
|
||||
roles: state.roles.filter((r) => r.id !== roleId),
|
||||
})),
|
||||
addRoute: (route) =>
|
||||
set((state) => ({
|
||||
routes: [...state.routes, route],
|
||||
})),
|
||||
updateRoute: (route) =>
|
||||
set((state) => ({
|
||||
routes: state.routes.map((r) => (r.id === route.id ? route : r)),
|
||||
})),
|
||||
deleteRoute: (routeId) =>
|
||||
set((state) => ({
|
||||
routes: state.routes.filter((r) => r.id !== routeId),
|
||||
})),
|
||||
updateSettings: (settings) =>
|
||||
set({ settings }),
|
||||
}));
|
||||
Reference in New Issue
Block a user