felicity-lims/frontend/vite/src/stores/worksheet.ts

124 lines
4.4 KiB
TypeScript
Raw Normal View History

2022-04-01 04:29:09 +08:00
import { defineStore } from 'pinia'
import {
GET_ALL_WORKSHEET_TEMPLATES, GET_ALL_WORKSHEETS, GET_WORKSHEET_BY_UID
} from '../graphql/worksheet.queries';
import { parseData, keysToCamel, addListsUnique } from '../utils';
import { IAnalysisResult } from '../models/analysis';
import { IWorkSheetTemplate, IWorkSheet, IReserved } from '../models/worksheet';
2022-04-04 02:54:31 +08:00
import { useApiUtil } from '../composables'
2022-04-01 04:29:09 +08:00
2022-04-04 02:54:31 +08:00
const { withClientQuery } = useApiUtil()
2022-04-01 04:29:09 +08:00
export const useWorksheetStore = defineStore('worksheet', {
state: () => {
return {
workSheetTemplates: [],
workSheets: [],
workSheet: undefined,
workSheetCount: 0,
workSheetPageInfo: undefined,
} as {
workSheetTemplates: IWorkSheetTemplate[];
workSheets: IWorkSheet[];
workSheet?: IWorkSheet;
workSheetCount: number;
workSheetPageInfo?: any;
}
},
getters: {
getWorkSheetTemplates: (state) => state.workSheetTemplates,
getWorkSheets: (state) => sortWorksheets(state.workSheets),
getWorkSheet: (state) => state.workSheet,
getWorkSheetByUid: (state) => (uid: number) => state.workSheets?.find(ws => ws.uid === uid),
getWorkSheetCount: (state) => state.workSheetCount,
getWorkSheetPageInfo: (state) => state.workSheetPageInfo,
},
actions: {
// WorkSheet Templates
async fetchWorkSheetTemplates(){
2022-04-04 02:54:31 +08:00
await withClientQuery(GET_ALL_WORKSHEET_TEMPLATES, {}, "worksheetTemplateAll")
2022-04-01 04:29:09 +08:00
.then(payload => {
payload?.forEach((template: IWorkSheetTemplate) => {
const data: any = template.reserved;
const reserved = Object.entries(parseData(data)) as any[];
let new_res: IReserved[] = [];
reserved?.forEach(item => new_res.push(keysToCamel(item[1]) as IReserved || {}));
template.reserved = new_res;
});
this.workSheetTemplates = payload;
});
},
updateWorksheetTemplate(payload){
const index = this.workSheetTemplates.findIndex(x => x.uid === payload.uid);
const data: any = payload.reserved;
const reserved = Object.entries(parseData(data)) as any[];
let new_res: IReserved[] = [];
reserved?.forEach(item => new_res.push(item[1] as IReserved || {}));
payload.reserved = new_res;
this.workSheetTemplates[index] = payload;
},
addWorksheetTemplate(payload ){
const data: any = payload.reserved;
const reserved = Object.entries(parseData(data)) as any[];
let new_res: IReserved[] = [];
reserved?.forEach(item => new_res.push(item[1] as IReserved || {}));
payload.reserved = new_res;
2022-04-09 22:57:06 +08:00
this.workSheetTemplates?.push(payload);
2022-04-01 04:29:09 +08:00
},
// WorkSheets
async fetchWorkSheets(params){
2022-04-04 02:54:31 +08:00
await withClientQuery(GET_ALL_WORKSHEETS, params, undefined)
2022-04-01 04:29:09 +08:00
.then(payload => {
const page = payload.worksheetAll
const worksheets = page.items;
if(params.filterAction){
this.workSheets = [];
this.workSheets = worksheets;
} else {
this.workSheets = addListsUnique(this.workSheets, worksheets, "uid");
}
this.workSheetCount = page?.totalCount;
this.workSheetPageInfo = page?.pageInfo;
2022-04-01 04:29:09 +08:00
});
},
2022-04-09 22:57:06 +08:00
async fetchWorksheetByUid(worksheetUid: number){
await withClientQuery(GET_WORKSHEET_BY_UID, { worksheetUid }, "worksheetByUid")
2022-04-01 04:29:09 +08:00
.then(payload => this.workSheet = sortAnalysisResults(payload));
},
addWorksheet(payload){
2022-04-09 22:57:06 +08:00
payload.worksheets?.forEach(worksheet => this.workSheets?.unshift(worksheet))
2022-04-01 04:29:09 +08:00
},
removeWorksheet(){
this.workSheet = undefined
},
2022-04-09 22:57:06 +08:00
updateWorksheetResultsStatus(payload){
payload?.forEach(result => {
this.workSheet?.analysisResults.forEach((wsResult, index) => {
if(wsResult?.uid == result.uid) {
wsResult.status = result.status;
}
})
})
},
2022-04-01 04:29:09 +08:00
}
})
function sortAnalysisResults(ws: any): IWorkSheet {
ws.analysisResults = ws?.analysisResults?.sort((a: IAnalysisResult, b: IAnalysisResult) => {
if(a.worksheetPosition === b.worksheetPosition) {
return (a?.uid || 0) > (b?.uid || 0) ? 1 : -1;
}
return (a?.worksheetPosition || 0) > (b?.worksheetPosition || 1) ? 1 : -1
});
return ws;
}
function sortWorksheets(ws: IWorkSheet[]): IWorkSheet[] {
return ws?.sort((a: IWorkSheet, b: IWorkSheet) => (a?.uid || 0) < (b?.uid || 0) ? 1 : -1);
}