Skip to content
Snippets Groups Projects
Commit ac1b65eb authored by Florent Poittevin's avatar Florent Poittevin
Browse files

refactor: move complexity in solidify for sub resource update

- for funding agencies with org unit
- for deposit with author
parent 65dc34cd
No related branches found
No related tags found
1 merge request!85Fpo/806 refactor relation 2 tiers and composition
...@@ -60,6 +60,10 @@ export class AdminFundingAgenciesFormPresentational extends SharedAbstractFormPr ...@@ -60,6 +60,10 @@ export class AdminFundingAgenciesFormPresentational extends SharedAbstractFormPr
} }
protected treatmentBeforeSubmit(fundingAgency: FundingAgencyExtended): FundingAgencyExtended { protected treatmentBeforeSubmit(fundingAgency: FundingAgencyExtended): FundingAgencyExtended {
fundingAgency.organizationalUnits = [];
this.form.get(this.formDefinition.organizationalUnits).value.forEach(resId => {
fundingAgency.organizationalUnits.push({resId: resId});
});
return fundingAgency; return fundingAgency;
} }
} }
......
...@@ -2,7 +2,10 @@ import { ...@@ -2,7 +2,10 @@ import {
AdminFundingAgenciesAction, AdminFundingAgenciesAction,
adminFundingAgenciesActionNameSpace, adminFundingAgenciesActionNameSpace,
} from "@admin/funding-agencies/stores/admin-funding-agencies.action"; } from "@admin/funding-agencies/stores/admin-funding-agencies.action";
import {adminFundingAgenciesOrgUnitActionNameSpace} from "@admin/funding-agencies/stores/organizational-unit/admin-organizational-unit-preservation-policy.action"; import {
AdminFundingAgenciesOrgUnitAction,
adminFundingAgenciesOrgUnitActionNameSpace,
} from "@admin/funding-agencies/stores/organizational-unit/admin-organizational-unit-preservation-policy.action";
import { import {
AdminFundingAgenciesOrganizationalUnitState, AdminFundingAgenciesOrganizationalUnitState,
AdminFundingAgenciesOrganizationalUnitStateModel, AdminFundingAgenciesOrganizationalUnitStateModel,
...@@ -26,8 +29,6 @@ import {Observable} from "rxjs"; ...@@ -26,8 +29,6 @@ import {Observable} from "rxjs";
import {tap} from "rxjs/operators"; import {tap} from "rxjs/operators";
import { import {
ApiService, ApiService,
AssociationActionHelper,
ChangeModeEnum,
defaultResourceStateInitValue, defaultResourceStateInitValue,
NotificationService, NotificationService,
OverrideDefaultAction, OverrideDefaultAction,
...@@ -97,10 +98,14 @@ export class AdminFundingAgenciesState extends ResourceState<FundingAgencyExtend ...@@ -97,10 +98,14 @@ export class AdminFundingAgenciesState extends ResourceState<FundingAgencyExtend
return super.internalCreate(ctx, action) return super.internalCreate(ctx, action)
.pipe( .pipe(
tap(model => { tap(model => {
const oldOrgUnit = []; this.updateSubResource(model, action, ctx)
const newOrgUnit = action.modelFormControlEvent.model[LocalModelAttributeEnum.organizationalUnits]; .subscribe(success => {
const updateSubResourceAction = AssociationActionHelper.update(adminFundingAgenciesOrgUnitActionNameSpace, model.resId, oldOrgUnit, newOrgUnit); if (success) {
StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, adminFundingAgenciesActionNameSpace, adminFundingAgenciesOrgUnitActionNameSpace); ctx.dispatch(new AdminFundingAgenciesAction.CreateSuccess(action, model));
} else {
ctx.dispatch(new AdminFundingAgenciesAction.CreateFail(action));
}
});
}), }),
); );
} }
...@@ -111,14 +116,31 @@ export class AdminFundingAgenciesState extends ResourceState<FundingAgencyExtend ...@@ -111,14 +116,31 @@ export class AdminFundingAgenciesState extends ResourceState<FundingAgencyExtend
return super.internalUpdate(ctx, action) return super.internalUpdate(ctx, action)
.pipe( .pipe(
tap(model => { tap(model => {
const oldOrgUnit = _.map(ctx.getState().admin_fundingAgencies_organizationalUnit.selected, LocalModelAttributeEnum.resId); this.updateSubResource(model, action, ctx)
const newOrgUnit = action.modelFormControlEvent.model[LocalModelAttributeEnum.organizationalUnits]; .subscribe(success => {
const updateSubResourceAction = AssociationActionHelper.update(adminFundingAgenciesOrgUnitActionNameSpace, model.resId, oldOrgUnit, newOrgUnit); if (success) {
StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, adminFundingAgenciesActionNameSpace, adminFundingAgenciesOrgUnitActionNameSpace); ctx.dispatch(new AdminFundingAgenciesAction.UpdateSuccess(action, model));
} else {
ctx.dispatch(new AdminFundingAgenciesAction.UpdateFail(action));
}
});
}), }),
); );
} }
private updateSubResource(model: FundingAgencyExtended, action: AdminFundingAgenciesAction.Create | AdminFundingAgenciesAction.Update, ctx: StateContext<AdminFundingAgenciesStateModel>): Observable<boolean> {
const fundingAgencyId = model.resId;
const newOrgUnit = action.modelFormControlEvent.model.organizationalUnits.map(o => o.resId);
return StoreUtil.dispatchParallelActionAndWaitForSubActionsCompletion(ctx, [{
action: new AdminFundingAgenciesOrgUnitAction.Update(fundingAgencyId, newOrgUnit),
subActionCompletions: [
this.actions$.pipe(ofActionCompleted(AdminFundingAgenciesOrgUnitAction.UpdateSuccess)),
this.actions$.pipe(ofActionCompleted(AdminFundingAgenciesOrgUnitAction.UpdateFail)),
],
}]);
}
@OverrideDefaultAction() @OverrideDefaultAction()
@Action(AdminFundingAgenciesAction.Delete) @Action(AdminFundingAgenciesAction.Delete)
delete(ctx: StateContext<AdminFundingAgenciesStateModel>, action: AdminFundingAgenciesAction.Delete): Observable<FundingAgencyExtended> | any { delete(ctx: StateContext<AdminFundingAgenciesStateModel>, action: AdminFundingAgenciesAction.Delete): Observable<FundingAgencyExtended> | any {
......
...@@ -2,5 +2,5 @@ import {FundingAgency} from "@app/generated-api"; ...@@ -2,5 +2,5 @@ import {FundingAgency} from "@app/generated-api";
import {OrganizationalUnitExtended} from "./organizational-unit-extended.model"; import {OrganizationalUnitExtended} from "./organizational-unit-extended.model";
export interface FundingAgencyExtended extends FundingAgency { export interface FundingAgencyExtended extends FundingAgency {
organizationalUnits: OrganizationalUnitExtended[]; organizationalUnits?: OrganizationalUnitExtended[];
} }
...@@ -5,8 +5,8 @@ import { ...@@ -5,8 +5,8 @@ import {
} from "@app/generated-api"; } from "@app/generated-api";
export interface OrganizationalUnitExtended extends OrganizationalUnit { export interface OrganizationalUnitExtended extends OrganizationalUnit {
defaultSubmissionPolicy: SubmissionPolicy; defaultSubmissionPolicy?: SubmissionPolicy;
defaultPreservationPolicy: PreservationPolicy; defaultPreservationPolicy?: PreservationPolicy;
submissionPolicies: SubmissionPolicy[]; submissionPolicies?: SubmissionPolicy[];
preservationPolicies: PreservationPolicy[]; preservationPolicies?: PreservationPolicy[];
} }
...@@ -21,7 +21,7 @@ import { ...@@ -21,7 +21,7 @@ import {
DepositPeopleState, DepositPeopleState,
DepositPersonStateModel, DepositPersonStateModel,
} from "@app/features/deposit/stores/people/deposit-people.state"; } from "@app/features/deposit/stores/people/deposit-people.state";
import {depositPersonActionNameSpace} from "@app/features/deposit/stores/people/deposit-person.action"; import {DepositPersonAction} from "@app/features/deposit/stores/people/deposit-person.action";
import {Deposit} from "@app/generated-api"; import {Deposit} from "@app/generated-api";
import {ApiActionEnum} from "@app/shared/enums/api-action.enum"; import {ApiActionEnum} from "@app/shared/enums/api-action.enum";
import {PreIngestResourceApiEnum} from "@app/shared/enums/api.enum"; import {PreIngestResourceApiEnum} from "@app/shared/enums/api.enum";
...@@ -39,6 +39,7 @@ import {Navigate} from "@ngxs/router-plugin"; ...@@ -39,6 +39,7 @@ import {Navigate} from "@ngxs/router-plugin";
import { import {
Action, Action,
Actions, Actions,
ofActionCompleted,
State, State,
StateContext, StateContext,
Store, Store,
...@@ -48,7 +49,6 @@ import { ...@@ -48,7 +49,6 @@ import {
defaultDlcmResourceStateInitValue, defaultDlcmResourceStateInitValue,
DlcmResourceState, DlcmResourceState,
} from "@shared/stores/dlcm-resource/dlcm-resource.state"; } from "@shared/stores/dlcm-resource/dlcm-resource.state";
import _ from "lodash";
import {Observable} from "rxjs"; import {Observable} from "rxjs";
import { import {
catchError, catchError,
...@@ -57,8 +57,6 @@ import { ...@@ -57,8 +57,6 @@ import {
} from "rxjs/operators"; } from "rxjs/operators";
import { import {
ApiService, ApiService,
AssociationRemoteActionHelper,
ChangeModeEnum,
CompositionActionHelper, CompositionActionHelper,
ErrorDto, ErrorDto,
HttpStatus, HttpStatus,
...@@ -149,10 +147,18 @@ export class DepositState extends DlcmResourceState<DepositExtended> { ...@@ -149,10 +147,18 @@ export class DepositState extends DlcmResourceState<DepositExtended> {
return super.internalCreate(ctx, action) return super.internalCreate(ctx, action)
.pipe( .pipe(
tap(model => { tap(model => {
const oldAuthors = []; this.updateSubResource(model, action, ctx)
const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors]; .subscribe(success => {
const updateSubResourceAction = AssociationRemoteActionHelper.update(depositPersonActionNameSpace, model.resId, oldAuthors, newAuthors); if (success) {
StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace); ctx.dispatch(new DepositAction.CreateSuccess(action, model));
} else {
ctx.dispatch(new DepositAction.CreateFail(action));
}
});
// const oldAuthors = [];
// const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors];
// const updateSubResourceAction = AssociationRemoteActionHelper.update(depositPersonActionNameSpace, model.resId, oldAuthors, newAuthors);
// StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace);
}), }),
); );
} }
...@@ -163,14 +169,36 @@ export class DepositState extends DlcmResourceState<DepositExtended> { ...@@ -163,14 +169,36 @@ export class DepositState extends DlcmResourceState<DepositExtended> {
return super.internalUpdate(ctx, action) return super.internalUpdate(ctx, action)
.pipe( .pipe(
tap(model => { tap(model => {
const oldAuthors = _.map(ctx.getState().deposit_person.selected, LocalModelAttributeEnum.resId); this.updateSubResource(model, action, ctx)
const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors]; .subscribe(success => {
const updateSubResourceAction = AssociationRemoteActionHelper.update(depositPersonActionNameSpace, action.modelFormControlEvent.model.resId, oldAuthors, newAuthors); if (success) {
StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace); ctx.dispatch(new DepositAction.UpdateSuccess(action, model));
} else {
ctx.dispatch(new DepositAction.UpdateFail(action));
}
});
// const oldAuthors = _.map(ctx.getState().deposit_person.selected, LocalModelAttributeEnum.resId);
// const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors];
// const updateSubResourceAction = AssociationRemoteActionHelper.update(depositPersonActionNameSpace, action.modelFormControlEvent.model.resId, oldAuthors, newAuthors);
// StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace);
}), }),
); );
} }
private updateSubResource(model: DepositExtended, action: DepositAction.Create | DepositAction.Update, ctx: StateContext<DepositStateModel>): Observable<boolean> {
const depositId = model.resId;
const newAuthors: string[] = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors];
return StoreUtil.dispatchParallelActionAndWaitForSubActionsCompletion(ctx, [{
action: new DepositPersonAction.Update(depositId, newAuthors),
subActionCompletions: [
this.actions$.pipe(ofActionCompleted(DepositPersonAction.UpdateSuccess)),
this.actions$.pipe(ofActionCompleted(DepositPersonAction.UpdateFail)),
],
}]);
}
@Action(DepositAction.Submit) @Action(DepositAction.Submit)
submit(ctx: StateContext<DepositStateModel>, action: DepositAction.Submit): Observable<DepositExtended> { submit(ctx: StateContext<DepositStateModel>, action: DepositAction.Submit): Observable<DepositExtended> {
let submissionWithApproval = false; let submissionWithApproval = false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment