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'; import { GET_ANALYSIS_RESULTS_FOR_WS_ASSIGN } from '../graphql/analyses.queries'; import { parseData, keysToCamel, addListsUnique } from '../utils'; import { IAnalysisResult } from '../models/analysis'; import { IWorkSheetTemplate, IWorkSheet, IReserved } from '../models/worksheet'; import { IPageInfo } from "../models/pagination" import { useApiUtil } from '../composables' const { withClientQuery, withClientMutation } = useApiUtil() export const useWorksheetStore = defineStore('worksheet', { state: () => { return { workSheetTemplates: [], fetchingWorkSheetTemplates: false, workSheets: [], fetchingWorkSheets: false, workSheet: undefined, workSheetCount: 0, workSheetPageInfo: undefined, fetchingAnalysisResults: false, analysisResults: [], // for WS Assign analysisResultCount: 0, analysisResultPageInfo: undefined, } as { workSheetTemplates: IWorkSheetTemplate[]; fetchingWorkSheetTemplates: boolean; workSheets: IWorkSheet[]; fetchingWorkSheets: boolean; workSheet?: IWorkSheet; workSheetCount: number; workSheetPageInfo?: IPageInfo fetchingAnalysisResults?: boolean; analysisResults: IAnalysisResult[]; analysisResultCount: number; analysisResultPageInfo?: IPageInfo } }, 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, getAnalysisResults: (state) => state.analysisResults, getAnalysisResultCount: (state) => state.analysisResultCount, getAnalysisResultPageInfo: (state) => state.analysisResultPageInfo, }, actions: { // WorkSheet Templates async fetchWorkSheetTemplates(){ this.fetchingWorkSheetTemplates = true; await withClientQuery(GET_ALL_WORKSHEET_TEMPLATES, {}, "worksheetTemplateAll") .then(payload => { this.fetchingWorkSheetTemplates = false; 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; }).catch(err => this.fetchingWorkSheetTemplates = false); }, 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; this.workSheetTemplates?.push(payload); }, // WorkSheets async fetchWorkSheets(params){ this.fetchingWorkSheets = true; await withClientQuery(GET_ALL_WORKSHEETS, params, undefined) .then(payload => { this.fetchingWorkSheets = false; 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; }).catch(err => this.fetchingWorkSheets = false); }, async fetchWorksheetByUid(worksheetUid: number){ await withClientQuery(GET_WORKSHEET_BY_UID, { worksheetUid }, "worksheetByUid") .then(payload => this.workSheet = sortAnalysisResults(payload)); }, addWorksheet(payload){ payload.worksheets?.forEach(worksheet => this.workSheets?.unshift(worksheet)) }, removeWorksheet(){ this.workSheet = undefined }, async updateWorksheet(payload){ await withClientMutation(WORKSHEET_UPDATE, payload, "updateWorksheet") .then(payload => {}); }, updateWorksheetStatus(worksheet: any){ const index = this.workSheets.findIndex(x => x.uid === worksheet.uid); if(index > -1) { this.workSheets[index].state = worksheet.state; } if(this.workSheet?.uid === worksheet.uid) { this.workSheet!.state = worksheet.state; } }, backgroundProcessing(payload, worksheetUid: any, process){ payload?.forEach(result => { this.workSheet?.analysisResults.forEach((wsResult, index) => { if(wsResult?.uid == result.uid) { wsResult.status = process; } }) }) if(worksheetUid){ if(this.workSheet?.uid === worksheetUid){ this.workSheet!.state = process; } const index = this.workSheets.findIndex(x => x.uid === worksheetUid); if(index > -1) { this.workSheets[index].state = process; } } }, // 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); }, // analysis results updateWorksheetResultsStatus(payload){ payload?.forEach(result => { this.workSheet?.analysisResults.forEach((wsResult, index) => { if(wsResult?.uid == result.uid) { wsResult.status = result.status; } }) }) }, updateAnalysesResults(payload: IAnalysisResult[]){ payload?.forEach(result => { const index = this.analysisResults.findIndex(x => x.uid === result.uid); if(index > -1) { this.analysisResults[index] = { ...this.analysisResults[index], ...result}; } }) }, } }) 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); }