//@ts-check
/**
* @template M, S
* @typedef {import("./load_new_data_pipeline_worker.d.ts.js").LoadNewDataPipelineBuildArgs<M, S>} LoadNewDataPipelineBuildArgs
*/
const { default: BaseDataPipelineWorker } = require("../base/base_data_pipeline_worker.js");
/**
* @template M
* @extends {BaseDataPipelineWorker<M>}
*/
class LoadNewDataPipelineWorker extends BaseDataPipelineWorker{
/**
* @type {import("./load_new_data_pipeline_worker.d.ts.js").LoadNewDataPipelineWorkerInstance<M>['loadNewData']}
*/
loadNewData(args){
args.mutationStateUpdate = (mutationState, id, APIScope, model, modelIDCb) => {
args.loadNewMutationStateCb(mutationState, model, modelIDCb);
};
this.startPipelineBuild({
myBuildArgs: args,
buildDefinitionParams: {
buildID: null
},
targetDFAInfo: {
dfaGroupKey: "pipelineMutationSuccessDFA"
},
failStartCb: () => {
const err = "Failed to start load new data pipeline for build ID " + args.buildID;
console.error(err);
args.loadNewCompleteCb(null, err);
},
completeCb: (finalArgs) => {
args.loadNewCompleteCb(finalArgs?.processedData?.data, finalArgs.err);
}
});
}
/**
* Should there be no support for build only since it makes no sense. UI and data not really needed
* @type {import("./load_new_data_pipeline_worker.d.ts.js").LoadNewDataPipelineWorkerInstance<M>['cancelNewDataLoad']}
*/
cancelNewDataLoad(modelID, scope, cancelAll, buildOnlyCancel){
/**
*
* @param {LoadNewDataPipelineBuildArgs<M, keyof DataManagerInstance<M>['masterWorkingModel']['scopedOptions']['apis']> & BaseDataPipelineBuildArgs<M, keyof DataManagerInstance<M>['masterWorkingModel']['scopedOptions']['apis']>} cancelArgs
*/
const startCancelPipelineBuild = (cancelArgs) => {
if(buildOnlyCancel){
cancelArgs.cancelBuildOnly_ByPassNonNetwork = true;
}
this.startPipelineBuild({
myBuildArgs: cancelArgs,
buildDefinitionParams: {
buildID: null,
},
targetDFAInfo: {
dfaGroupKey: "pipelineMutationCancelledDFA",
},
failStartCb: () => {
const err = "Failed to start cancel load new data pipeline for build ID " + cancelArgs.buildID;
console.error(err);
cancelArgs.loadNewCompleteCb(null, err);
},
completeCb: (finalArgs) => {
cancelArgs.loadNewCompleteCb(finalArgs.processedData?.data, finalArgs.err);
}
});
}
if(cancelAll){
//Loop through all running builds
const runningBuildsCopy = this.runningBuilds.copy();
const length = runningBuildsCopy.size();
for(let i = 0; i < length; i++){
startCancelPipelineBuild(runningBuildsCopy.pop().buildArgs);
}
} else {
let origInfo = null;
if(modelID){
origInfo = this.runningBuilds.find((info) => info.buildArgs.modelID_s === modelID && info.buildArgs.scope === scope);
} else {
origInfo = this.runningBuilds.find((info) => info.buildID === this.buildPipelineBuildID(null, null));
}
if(origInfo){
startCancelPipelineBuild(origInfo.buildArgs);
} else {
console.error("Can't cancel load new for " + modelID + " " + scope);
}
}
}
}
if(false){
/**
* @type {import("./load_new_data_pipeline_worker.d.ts.js").LoadNewDataPipelineWorkerConstructor<*>}
*/
const workerTest = LoadNewDataPipelineWorker;
}
export default LoadNewDataPipelineWorker;