diff --git a/src/stores/workflow-template/index.ts b/src/stores/workflow-template/index.ts new file mode 100644 index 00000000..bf24798d --- /dev/null +++ b/src/stores/workflow-template/index.ts @@ -0,0 +1,64 @@ +import { ref } from 'vue'; +import { defineStore } from 'pinia'; +import { api } from 'src/boot/axios'; +import { PaginationResult } from 'src/types'; +import { WorkflowTemplate } from './types'; + +export const useWorkflowTemplate = defineStore('workkflow-store', () => { + const data = ref([]); + const page = ref(1); + const pageMax = ref(1); + const pageSize = ref(30); + + async function getWorkflowTemplate(id: string) { + const res = await api.get(`/workflow-template/${id}`); + + if (res.status >= 400) return null; + + return res.data; + } + + async function getWorkflowTemplateList(query?: { + page?: number; + pageSize?: number; + }) { + const res = await api.get>( + '/workflow-template', + { params: query }, + ); + + if (res.status >= 400) return null; + + return res.data; + } + + async function editWorkflowTemplate(data: WorkflowTemplate & { id: string }) { + const res = await api.put( + `/workflow-template/${data.id}`, + { + ...data, + id: undefined, + }, + ); + if (res.status >= 400) return null; + return res; + } + + async function deleteWorkflowTemplate(id: string) { + const res = await api.delete(`/workflow-template/${id}`); + if (res.status >= 400) return null; + return res; + } + + return { + data, + page, + pageSize, + pageMax, + + getWorkflowTemplate, + getWorkflowTemplateList, + editWorkflowTemplate, + deleteWorkflowTemplate, + }; +}); diff --git a/src/stores/workflow-template/types.ts b/src/stores/workflow-template/types.ts new file mode 100644 index 00000000..8643363e --- /dev/null +++ b/src/stores/workflow-template/types.ts @@ -0,0 +1,39 @@ +import { CreatedBy, Status } from '../types'; + +export type WorkflowStep = { + id: string; + order: number; + name: string; + type: string | null; + + // NOTE: for list like type only + value: string[]; + + // NOTE: for step that needs confirm + responsiblePerson: { + userId: string; + user: CreatedBy; + }[]; +}; + +export type WorkflowTemplate = { + id: string; + name: string; + step: WorkflowStep[]; + status: Status; + statusOrder: number; + createdAt: string; + createdByUserId: string | null; + updatedAt: string; + updatedByUserId: string; +}; + +export type WorkflowTemplatePayload = { + name: string; + step: { + name: string; + type?: string; + value?: string[]; + responseiblePersonId?: string[]; + }[]; +};