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

190 lines
7 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 {
WORKSHEET_UPDATE
} from '../graphql/worksheet.mutations';
2022-06-19 04:29:47 +08:00
import { GET_ANALYSIS_RESULTS_FOR_WS_ASSIGN } from '../graphql/analyses.queries';
2022-04-01 04:29:09 +08:00
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
const { withClientQuery, withClientMutation } = useApiUtil()
2022-04-01 04:29:09 +08:00
export const useWorksheetStore = defineStore('worksheet', {
state: () => {
return {
workSheetTemplates: [],
2022-04-15 16:32:24 +08:00
fetchingWorkSheetTemplates: false,
2022-04-01 04:29:09 +08:00
workSheets: [],
2022-04-15 16:32:24 +08:00
fetchingWorkSheets: false,
2022-04-01 04:29:09 +08:00
workSheet: undefined,
workSheetCount: 0,
workSheetPageInfo: undefined,
2022-06-19 04:29:47 +08:00
fetchingAnalysisResults: false,
analysisResults: [], // for WS Assign
analysisResultCount: 0,
analysisResultPageInfo: undefined,
2022-04-01 04:29:09 +08:00
} as {
workSheetTemplates: IWorkSheetTemplate[];
2022-04-15 16:32:24 +08:00
fetchingWorkSheetTemplates: boolean;
2022-04-01 04:29:09 +08:00
workSheets: IWorkSheet[];
2022-04-15 16:32:24 +08:00
fetchingWorkSheets: boolean;
2022-04-01 04:29:09 +08:00
workSheet?: IWorkSheet;
workSheetCount: number;
workSheetPageInfo?: any;
2022-06-19 04:29:47 +08:00
fetchingAnalysisResults?: boolean;
analysisResults: IAnalysisResult[];
analysisResultCount: number;
analysisResultPageInfo?: any;
2022-04-01 04:29:09 +08:00
}
},
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,
2022-06-19 04:29:47 +08:00
getAnalysisResults: (state) => state.analysisResults,
getAnalysisResultCount: (state) => state.analysisResultCount,
getAnalysisResultPageInfo: (state) => state.analysisResultPageInfo,
2022-04-01 04:29:09 +08:00
},
actions: {
// WorkSheet Templates
async fetchWorkSheetTemplates(){
2022-04-15 16:32:24 +08:00
this.fetchingWorkSheetTemplates = true;
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 => {
2022-04-15 16:32:24 +08:00
this.fetchingWorkSheetTemplates = false;
2022-04-01 04:29:09 +08:00
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;
2022-04-15 16:32:24 +08:00
}).catch(err => this.fetchingWorkSheetTemplates = false);
2022-04-01 04:29:09 +08:00
},
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-15 16:32:24 +08:00
this.fetchingWorkSheets = true;
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 => {
2022-04-15 16:32:24 +08:00
this.fetchingWorkSheets = false;
2022-04-01 04:29:09 +08:00
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-15 16:32:24 +08:00
}).catch(err => this.fetchingWorkSheets = false);
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
},
async updateWorksheet(payload){
await withClientMutation(WORKSHEET_UPDATE, payload, "updateWorksheet")
.then(payload => {
});
},
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;
}
})
})
},
backgroundProcessing(payload, worksheetUid: any){
payload?.forEach(result => {
this.workSheet?.analysisResults.forEach((wsResult, index) => {
if(wsResult?.uid == result.uid) {
wsResult.status = "processing";
}
})
})
if(worksheetUid){
if(this.workSheet?.uid === worksheetUid){
this.workSheet!.state = "processing";
}
const index = this.workSheets.findIndex(x => x.uid === worksheetUid);
if(index > -1) {
this.workSheets[index].state = "processing";
}
}
},
2022-06-19 04:29:47 +08:00
// Analyses for WS Assign
async fetchForWorkSheetsAssign(params){
this.fetchingAnalysisResults = true;
await withClientQuery(GET_ANALYSIS_RESULTS_FOR_WS_ASSIGN, params, undefined)
.then(payload => {
this.fetchingAnalysisResults = false;
const page = payload.analysisResultsForWsAssign
const results = page.items;
if(params.filterAction){
this.analysisResults = [];
this.analysisResults = results;
} else {
this.analysisResults = results; // addListsUnique(this.analysisResults, results, "uid");
}
this.analysisResultCount = page?.totalCount;
this.analysisResultPageInfo = page?.pageInfo;
}).catch(err => this.fetchingAnalysisResults = false);
},
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);
}