diff --git a/src/app/features/preservation/job/stores/preservation-job.action.ts b/src/app/features/preservation/job/stores/preservation-job.action.ts index 7d4da0f3c933f2237718fad72e9d24ba7f3941ec..19d79ad34b28ef78ddcc893539f5dd3111b1243a 100644 --- a/src/app/features/preservation/job/stores/preservation-job.action.ts +++ b/src/app/features/preservation/job/stores/preservation-job.action.ts @@ -170,6 +170,13 @@ export namespace PreservationJobAction { static readonly type: string = `[${state}] Start Fail`; } + export class VerifyStartSuccess extends BaseAction { + static readonly type: string = `[${state}] Start Success`; + + constructor(public resId: string) { + super(); + } + } export class VerifyStartFail extends BaseSubAction<Start> { static readonly type: string = `[${state}] Verify Start Fail`; } diff --git a/src/app/features/preservation/job/stores/preservation-job.state.ts b/src/app/features/preservation/job/stores/preservation-job.state.ts index a4281b3241b98c2ba83092cd664044e55afe3f6c..f40b3ee49c9d15ae59183eb8b1e238cdadfba92a 100644 --- a/src/app/features/preservation/job/stores/preservation-job.state.ts +++ b/src/app/features/preservation/job/stores/preservation-job.state.ts @@ -9,21 +9,37 @@ import { preservationJobActionNameSpace, } from "@app/features/preservation/job/stores/preservation-job.action"; import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; -import {Action, Actions, Selector, State, StateContext, Store,} from "@ngxs/store"; +import {environment} from "@environments/environment"; +import { + Action, + Actions, + Selector, + State, + StateContext, + Store, +} from "@ngxs/store"; import {PreservationJobExtended} from "@preservation/job/models/preservation-job-extended.model"; import {ApiActionEnum} from "@shared/enums/api-action.enum"; +import {ApiResourceNameEnum} from "@shared/enums/api-resource-name.enum"; import {PreservationPlanningResourceApiEnum} from "@shared/enums/api.enum"; +import {JobStatusEnum} from "@shared/enums/business/job-status.enum"; import {RoutesEnum} from "@shared/enums/routes.enum"; +import {JobExecution} from "@shared/models/business/job-execution.model"; import {JobRecurrence} from "@shared/models/business/job-recurrence.model"; import {JobType} from "@shared/models/business/job-type.model"; import {Observable} from "rxjs"; -import {catchError, tap,} from "rxjs/operators"; +import { + catchError, + tap, +} from "rxjs/operators"; import { ApiService, defaultResourceStateInitValue, isEmptyArray, isNullOrUndefined, + MappingObjectUtil, NotificationService, + QueryParameters, ResourceState, ResourceStateModel, SolidifyStateError, @@ -31,7 +47,6 @@ import { TRANSLATE, urlSeparator, } from "solidify-frontend"; -import {JobStatusEnum} from "@shared/enums/business/job-status.enum"; export interface PreservationJobStateModel extends ResourceStateModel<PreservationJobExtended> { listJobTypes: JobType[] | undefined; @@ -53,6 +68,7 @@ export interface PreservationJobStateModel extends ResourceStateModel<Preservati ], }) export class PreservationJobState extends ResourceState<PreservationJobStateModel, PreservationJobExtended> { + constructor(protected apiService: ApiService, protected store: Store, protected notificationService: NotificationService, @@ -136,12 +152,18 @@ export class PreservationJobState extends ResourceState<PreservationJobStateMode @Action(PreservationJobAction.VerifyBeforeStart) verifyBeforeStart(ctx: StateContext<PreservationJobStateModel>, action: PreservationJobAction.VerifyBeforeStart): Observable<any> { + ctx.patchState({ + isLoadingCounter: ctx.getState().isLoadingCounter + 1, + }); + + const JOB_EXEC_STATUS: keyof JobExecution = "status"; + const queryParameters = new QueryParameters(environment.minimalPageSizeToRetrievePaginationInfo); + MappingObjectUtil.set(queryParameters.search.searchItems, JOB_EXEC_STATUS, JobStatusEnum.IN_PROGRESS); - return this.apiService.get<PreservationJobExtended>(this._urlResource, ctx.getState().queryParameters).pipe( + return this.apiService.get<JobExecution>(this._urlResource + urlSeparator + action.resId + urlSeparator + ApiResourceNameEnum.PRES_JOB_EXECUTION, queryParameters).pipe( tap(result => { - const preservationJobExtendeds = result._data.filter(element => element.lastExecutionStatus === JobStatusEnum.IN_PROGRESS); - if(isEmptyArray(preservationJobExtendeds)){ - ctx.dispatch(new PreservationJobAction.Start(action.resId)); + if(isEmptyArray(result._data)){ + ctx.dispatch(new PreservationJobAction.VerifyBeforeStart(action.resId)); }else { ctx.dispatch(new PreservationJobAction.VerifyStartFail(action)); } @@ -186,6 +208,14 @@ export class PreservationJobState extends ResourceState<PreservationJobStateMode this.notificationService.showError(TRANSLATE("preservation.job.notification.start.fail")); } + @Action(PreservationJobAction.VerifyStartSuccess) + verifyStartSuccess(ctx: StateContext<PreservationJobStateModel>, action: PreservationJobAction.VerifyStartSuccess): void { + ctx.patchState({ + isLoadingCounter: ctx.getState().isLoadingCounter - 1, + }); + ctx.dispatch(new PreservationJobAction.Start(action.resId)); + } + @Action(PreservationJobAction.VerifyStartFail) verifyStartFail(ctx: StateContext<PreservationJobStateModel>, action: PreservationJobAction.VerifyStartFail): void { ctx.patchState({