127 lines
3.2 KiB
TypeScript
127 lines
3.2 KiB
TypeScript
import { create } from 'zustand';
|
|
import { query } from '@/modules';
|
|
import { message } from 'antd';
|
|
import { produce } from 'immer';
|
|
|
|
type PanelStore = {
|
|
id: string;
|
|
setId: (id: string) => void;
|
|
loading: boolean;
|
|
setLoading: (loading: boolean) => void;
|
|
data: any;
|
|
setData: (data: any) => void;
|
|
getPanel: (id?: string) => Promise<void>;
|
|
saveNodesEdges: (data: { nodes?: any[]; edges?: any[]; viewport?: any }) => Promise<void>;
|
|
updateNodeData: (data: any) => Promise<void>;
|
|
updateNodeDataStyle: (data: any) => Promise<any>;
|
|
};
|
|
export const usePanelStore = create<PanelStore>((set, get) => {
|
|
return {
|
|
id: '',
|
|
setId: (id) => set({ id }),
|
|
loading: false,
|
|
setLoading: (loading) => set({ loading }),
|
|
data: {},
|
|
setData: (data) => set({ data }),
|
|
getPanel: async (pid) => {
|
|
const id = pid || get().id;
|
|
if (!id) {
|
|
message.error('ID is required');
|
|
return;
|
|
}
|
|
set(
|
|
produce((state) => {
|
|
state.data = {};
|
|
state.loading = true;
|
|
}),
|
|
);
|
|
const res = await query.post({
|
|
path: 'page',
|
|
key: 'get',
|
|
id,
|
|
});
|
|
set({ loading: false });
|
|
console.log('res', res);
|
|
if (res.code === 200) {
|
|
set(
|
|
produce((state) => {
|
|
state.data = res.data;
|
|
state.id = res.data.id;
|
|
}),
|
|
);
|
|
} else {
|
|
message.error(res.message || 'Request failed');
|
|
}
|
|
},
|
|
saveNodesEdges: async ({ edges, nodes, viewport }) => {
|
|
const { id, data: panelData } = get();
|
|
const { data } = panelData || {};
|
|
const res = await query.post({
|
|
path: 'page',
|
|
key: 'update',
|
|
data: {
|
|
id,
|
|
data: {
|
|
...data.data,
|
|
edges,
|
|
nodes,
|
|
viewport,
|
|
},
|
|
},
|
|
});
|
|
if (res.code === 200) {
|
|
message.success('Success');
|
|
set(
|
|
produce((state) => {
|
|
state.data = res.data;
|
|
}),
|
|
);
|
|
} else {
|
|
message.error(res.message || 'Request failed');
|
|
}
|
|
},
|
|
updateNodeData: async (data) => {
|
|
// const { getList } = get();
|
|
const { id, data: panelData } = get();
|
|
const res = await query.post({
|
|
path: 'page',
|
|
key: 'updateNode',
|
|
data: {
|
|
id: id,
|
|
nodeData: data,
|
|
},
|
|
});
|
|
if (res.code === 200) {
|
|
message.success('Success');
|
|
// getList();
|
|
} else {
|
|
message.error(res.message || 'Request failed');
|
|
}
|
|
},
|
|
updateNodeDataStyle: async (data) => {
|
|
const { loading } = get();
|
|
if (loading) {
|
|
message.error('Request in progress, please wait');
|
|
return;
|
|
}
|
|
const loaded = message.loading('Saving...', 0);
|
|
set({ loading: true });
|
|
const res = await query.post({
|
|
path: 'page',
|
|
key: 'updateNode',
|
|
data: data,
|
|
});
|
|
loaded();
|
|
set({ loading: false });
|
|
if (res.code === 200) {
|
|
message.success('Success');
|
|
// getList();
|
|
return true;
|
|
} else {
|
|
message.error(res.message || 'Request failed');
|
|
}
|
|
return false;
|
|
},
|
|
};
|
|
});
|