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

551 Submit a dataset

parent 455f4cfe
No related branches found
No related tags found
1 merge request!38551 Submit a dataset
Showing
with 305 additions and 30 deletions
<div class="button-toolbar">
<button mat-flat-button
<button mat-button
color="primary"
(click)="edit()">
{{KEY_EDIT_BUTTON | translate}}
</button>
<button mat-flat-button
<button mat-button
color="accent"
[disabled]="!(currentObs| async)"
(click)="delete()">
......
......@@ -10,10 +10,14 @@
</div>
<h1>{{'deposit.file.title.filesOfDeposit' | translate}}</h1>
<dlcm-deposit-file-tree [listDepositDataFile]="listDataFileObs | async"
<dlcm-deposit-file-tree *ngIf="(listDataFileObs | async) | isNonEmptyArray; else noFile"
[listDepositDataFile]="listDataFileObs | async"
[isLoading]="isLoadingDataFileObs | async"
[readonly]="readonly"
(resumeChange)="resume($event)"
(deleteChange)="delete($event)"
(refreshChange)="refresh()"
></dlcm-deposit-file-tree>
<ng-template #noFile>
<label>{{'deposit.file.tree.noFile' | translate}}</label>
</ng-template>
......@@ -20,6 +20,7 @@
<dlcm-deposit-file [readonly]="readonly"
[depositDataFile]="node.file"
(deleteChange)="delete($event)"
(resumeChange)="resume($event)"
class="file"
>
</dlcm-deposit-file>
......
......@@ -70,10 +70,13 @@
<mat-datepicker #collectionEndDatepicker></mat-datepicker>
</mat-form-field>
<mat-form-field>
<input [formControlName]="formDefinition.author" matInput placeholder="{{'deposit.author' | translate }}">
<mat-hint>{{'deposit.hint.author' | translate }}</mat-hint>
</mat-form-field>
<dlcm-shared-searchable-multi-select [list]="listPersons"
[formControl]="form.get(formDefinition.authors)"
[labelKey]="'fullName'"
[valueKey]="'resId'"
[placeholder]="'deposit.authors' | translate"
>
</dlcm-shared-searchable-multi-select>
<mat-form-field>
<mat-label>{{'deposit.accessLevel' | translate }}</mat-label>
......
......@@ -3,7 +3,10 @@ import {FormBuilder, Validators} from "@angular/forms";
import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model";
import {Deposits, Languages, Licenses, OrganizationalUnits, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import {Person} from "@app/shared/models/business/person.model";
import _ from "lodash";
import {DateUtil, PropertyName, SolidifyValidator} from "solidify-frontend";
import AccessEnum = Deposits.AccessEnum;
......@@ -35,6 +38,12 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
@Input()
organizationalUnits: OrganizationalUnits[];
@Input()
selectedPersons: Person[];
@Input()
listPersons: Person[];
constructor(protected readonly _changeDetectorRef: ChangeDetectorRef,
private readonly _fb: FormBuilder) {
super(_changeDetectorRef);
......@@ -49,12 +58,12 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
[this.formDefinition.publicationDate]: [""],
[this.formDefinition.collectionBegin]: [""],
[this.formDefinition.collectionEnd]: [""],
[this.formDefinition.author]: [""],
[this.formDefinition.accessLevel]: [AccessEnum.PUBLIC],
[this.formDefinition.hasEmbargo]: [false],
[this.formDefinition.licenseId]: [""],
[this.formDefinition.submissionPolicyId]: [""],
[this.formDefinition.preservationPolicyId]: [""],
[this.formDefinition.authors]: [],
});
}
......@@ -67,12 +76,12 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
[this.formDefinition.publicationDate]: [deposit.publicationDate],
[this.formDefinition.collectionBegin]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionBegin)],
[this.formDefinition.collectionEnd]: [DateUtil.convertOffsetDateTimeIso8601ToDate(deposit.collectionEnd)],
[this.formDefinition.author]: [""],
[this.formDefinition.accessLevel]: [deposit.access],
[this.formDefinition.hasEmbargo]: [deposit.hasEmbargo],
[this.formDefinition.licenseId]: [deposit.licenseId],
[this.formDefinition.submissionPolicyId]: [deposit.submissionPolicyId],
[this.formDefinition.preservationPolicyId]: [deposit.preservationPolicyId],
[this.formDefinition.authors]: [_.map(this.selectedPersons, LocalModelAttributeEnum.resId)],
});
}
......@@ -92,7 +101,7 @@ class FormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() publicationDate: string;
@PropertyName() collectionBegin: string;
@PropertyName() collectionEnd: string;
@PropertyName() author: string;
@PropertyName() authors: string;
@PropertyName() accessLevel: string;
@PropertyName() hasEmbargo: string;
@PropertyName() licenseId: string;
......
......@@ -5,4 +5,5 @@
[submissionPolicies]="submissionPoliciesObs | async"
[preservationPolicies]="preservationPoliciesObs | async"
[organizationalUnits]="organizationalUnitsObs | async"
[listPersons]="listPersonObs | async"
></dlcm-deposit-form>
......@@ -6,12 +6,13 @@ import {OrganizationalUnitModule} from "@app/features/organizational-unit/organi
import {Languages, Licenses, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
import {SharedAbstractCreateRoutable} from "@app/shared/components/routables/shared-abstract-create/shared-abstract-create.routable";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {Person} from "@app/shared/models/business/person.model";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {OrgUnitAction} from "@app/shared/stores/organizational-unit/organizational-unit.action";
import {Select, Store} from "@ngxs/store";
import {Observable} from "rxjs";
import {FormState} from "solidify-frontend";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
@Component({
selector: "dlcm-deposit-create-routable",
......@@ -26,6 +27,7 @@ export class DepositCreateRoutable extends SharedAbstractCreateRoutable<Deposits
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.submissionPolicy].list) submissionPoliciesObs: Observable<SubmissionPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.preservationPolicy].list) preservationPoliciesObs: Observable<PreservationPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.organizationalUnit].list) organizationalUnitsObs: Observable<OrganizationalUnitModule[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.person].list) listPersonObs: Observable<Person[]>;
@ViewChild("formPresentational", {static: false})
readonly formPresentational: SharedAbstractFormPresentational<DepositsExtended>;
......
<div class="button-toolbar">
<button mat-flat-button
<button *ngIf="(currentObs| async)?.status === statusEnum.INPROGRESS ||
(currentObs| async)?.status === statusEnum.INERROR"
mat-button
color="primary"
(click)="edit()">
{{KEY_EDIT_BUTTON | translate}}
</button>
<button mat-flat-button
<button *ngIf="(currentObs| async)?.status === statusEnum.INPROGRESS ||
(currentObs| async)?.status === statusEnum.INERROR"
mat-button
color="accent"
[disabled]="!(currentObs| async)"
(click)="delete()">
{{KEY_DELETE_BUTTON | translate}}
</button>
<button *ngIf="((currentObs| async)?.status === statusEnum.INPROGRESS ||
(currentObs| async)?.status === statusEnum.INERROR)
&& (listDataFileObs | async) | isNonEmptyArray"
mat-flat-button
color="primary"
[disabled]="!(currentObs| async)"
(click)="submit()">
{{'deposit.submit' | translate}}
</button>
</div>
<div class="wrapper">
......@@ -28,6 +41,8 @@
[submissionPolicies]="submissionPoliciesObs | async"
[preservationPolicies]="preservationPoliciesObs | async"
[organizationalUnits]="organizationalUnitsObs | async"
[listPersons]="listPersonObs | async"
[selectedPersons]="selectedPersonObs | async"
[readonly]="true"
></dlcm-deposit-form>
</div>
......
......@@ -4,17 +4,21 @@ import {ActivatedRoute} from "@angular/router";
import {DepositDataFile} from "@app/features/deposit/models/deposit-data-file.model";
import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model";
import {DepositDataFileAction} from "@app/features/deposit/stores/data-file/deposit-data-file.action";
import {depositActionNameSpace} from "@app/features/deposit/stores/deposit.action";
import {DepositAction, depositActionNameSpace} from "@app/features/deposit/stores/deposit.action";
import {DepositStateModel} from "@app/features/deposit/stores/deposit.state";
import {DepositPersonAction} from "@app/features/deposit/stores/person/deposit-person.action";
import {OrganizationalUnitModule} from "@app/features/organizational-unit/organizational-unit.module";
import {Languages, Licenses, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {Deposits, Languages, Licenses, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {SharedAbstractDetailRoutable} from "@app/shared/components/routables/shared-abstract-detail/shared-abstract-detail.routable";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {Person} from "@app/shared/models/business/person.model";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {OrgUnitAction} from "@app/shared/stores/organizational-unit/organizational-unit.action";
import {Select, Store} from "@ngxs/store";
import {Observable} from "rxjs";
import {TRANSLATE} from "solidify-frontend";
import {tap} from "rxjs/internal/operators/tap";
import {take} from "rxjs/operators";
import {StoreUtil, TRANSLATE} from "solidify-frontend";
@Component({
selector: "dlcm-deposit-detail-routable",
......@@ -23,17 +27,24 @@ import {TRANSLATE} from "solidify-frontend";
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DepositDetailRoutable extends SharedAbstractDetailRoutable<DepositsExtended, DepositStateModel> implements OnInit {
@Select((state: LocalStateModel) => StoreUtil.isLoadingState(state[LocalStateEnum.deposit][LocalStateEnum.deposit_person])) isLoadingPersonObs: Observable<boolean>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.language].list) languagesObs: Observable<Languages[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.license].list) licensesObs: Observable<Licenses[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.submissionPolicy].list) submissionPoliciesObs: Observable<SubmissionPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.preservationPolicy].list) preservationPoliciesObs: Observable<PreservationPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.organizationalUnit].list) organizationalUnitsObs: Observable<OrganizationalUnitModule[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.deposit].listDataFile) listDataFileObs: Observable<DepositDataFile[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.deposit][LocalStateEnum.deposit_person].selected) selectedPersonObs: Observable<Person[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.person].list) listPersonObs: Observable<Person[]>;
readonly KEY_PARAM_NAME: string = "title";
readonly KEY_DELETE_BUTTON: string = TRANSLATE("deposit.delete");
readonly KEY_EDIT_BUTTON: string = TRANSLATE("deposit.edit");
get statusEnum(): typeof Deposits.StatusEnum {
return Deposits.StatusEnum;
}
constructor(protected store: Store,
protected route: ActivatedRoute,
public dialog: MatDialog) {
......@@ -47,5 +58,13 @@ export class DepositDetailRoutable extends SharedAbstractDetailRoutable<Deposits
getSubResourceWithParentId(id: string): void {
this.store.dispatch(new DepositDataFileAction.GetAll(id));
this.store.dispatch(new DepositPersonAction.GetAll(id));
}
submit(): void {
this.currentObs.pipe(
take(1),
tap(deposit => this.store.dispatch(new DepositAction.Submit(deposit))),
).subscribe();
}
}
<mat-spinner *ngIf="(isLoadingObs | async)"></mat-spinner>
<mat-spinner *ngIf="(isLoadingObs | async) || (isLoadingPersonObs | async)"></mat-spinner>
<mat-tab-group mat-align-tabs="center"
animationDuration="0ms"
>
<mat-tab [label]="'deposit.tab.details' | translate">
<div class="tab-content">
<dlcm-deposit-form *ngIf="(currentObs | async)"
<dlcm-deposit-form *ngIf="(currentObs | async) && !(isLoadingObs | async) && !(isLoadingPersonObs | async)"
[model]="currentObs | async"
[languages]="languagesObs | async"
[licenses]="licensesObs | async"
[submissionPolicies]="submissionPoliciesObs | async"
[preservationPolicies]="preservationPoliciesObs | async"
[organizationalUnits]="organizationalUnitsObs | async"
[listPersons]="listPersonObs | async"
[selectedPersons]="selectedPersonObs | async"
(submitChange)="update($event)"
></dlcm-deposit-form>
</div>
......
......@@ -4,13 +4,16 @@ import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.m
import {DepositDataFileAction} from "@app/features/deposit/stores/data-file/deposit-data-file.action";
import {depositActionNameSpace} from "@app/features/deposit/stores/deposit.action";
import {DepositStateModel} from "@app/features/deposit/stores/deposit.state";
import {DepositPersonAction} from "@app/features/deposit/stores/person/deposit-person.action";
import {OrganizationalUnitModule} from "@app/features/organizational-unit/organizational-unit.module";
import {Languages, Licenses, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {SharedAbstractEditRoutable} from "@app/shared/components/routables/shared-abstract-edit/shared-abstract-edit.routable";
import {Person} from "@app/shared/models/business/person.model";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {OrgUnitAction} from "@app/shared/stores/organizational-unit/organizational-unit.action";
import {Select, Store} from "@ngxs/store";
import {Observable} from "rxjs";
import {StoreUtil} from "solidify-frontend";
import {LocalStateEnum} from "../../../../../shared/enums/local-state.enum";
@Component({
......@@ -20,11 +23,14 @@ import {LocalStateEnum} from "../../../../../shared/enums/local-state.enum";
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DepositEditRoutable extends SharedAbstractEditRoutable<DepositsExtended, DepositStateModel> implements OnInit {
@Select((state: LocalStateModel) => StoreUtil.isLoadingState(state[LocalStateEnum.deposit][LocalStateEnum.deposit_person])) isLoadingPersonObs: Observable<boolean>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.language].list) languagesObs: Observable<Languages[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.license].list) licensesObs: Observable<Licenses[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.submissionPolicy].list) submissionPoliciesObs: Observable<SubmissionPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.preservationPolicy].list) preservationPoliciesObs: Observable<PreservationPolicies[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.organizationalUnit].list) organizationalUnitsObs: Observable<OrganizationalUnitModule[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.deposit][LocalStateEnum.deposit_person].selected) selectedPersonObs: Observable<Person[]>;
@Select((state: LocalStateModel) => state[LocalStateEnum.shared][LocalStateEnum.person].list) listPersonObs: Observable<Person[]>;
constructor(protected store: Store,
protected route: ActivatedRoute) {
......@@ -38,5 +44,6 @@ export class DepositEditRoutable extends SharedAbstractEditRoutable<DepositsExte
getSubResourceWithParentId(id: string): void {
this.store.dispatch(new DepositDataFileAction.GetAll(id));
this.store.dispatch(new DepositPersonAction.GetAll(id));
}
}
......@@ -10,6 +10,7 @@ import {DepositListRoutable} from "@app/features/deposit/components/routables/de
import {DepositRoutingModule} from "@app/features/deposit/deposit-routing.module";
import {DepositDataFileState} from "@app/features/deposit/stores/data-file/deposit-data-file.state";
import {DepositState} from "@app/features/deposit/stores/deposit.state";
import {DepositPersonState} from "@app/features/deposit/stores/person/deposit-person.state";
import {SharedModule} from "@app/shared/shared.module";
import {TranslateModule} from "@ngx-translate/core";
import {NgxsModule} from "@ngxs/store";
......@@ -53,6 +54,7 @@ const presentationals = [
NgxsModule.forFeature([
DepositState,
DepositDataFileState,
DepositPersonState,
]),
],
entryComponents: [
......
import {Deposits, Languages, OrganizationalUnits, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {OrganizationalUnitsExtended} from "@app/features/deposit/models/organizational-unit-extended.model";
import {Deposits, Languages, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
export interface DepositsExtended extends Deposits {
organizationalUnit: OrganizationalUnits;
language: Languages;
preservationPolicy: PreservationPolicies;
submissionPolicy: SubmissionPolicies;
organizationalUnit?: OrganizationalUnitsExtended;
language?: Languages;
preservationPolicy?: PreservationPolicies;
submissionPolicy?: SubmissionPolicies;
}
import {OrganizationalUnits, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
export interface OrganizationalUnitsExtended extends OrganizationalUnits {
defaultSubmissionPolicy: SubmissionPolicies;
defaultPreservationPolicy: PreservationPolicies;
}
......@@ -91,6 +91,20 @@ export namespace DepositAction {
}
}
export class SubmitSuccess {
static readonly type: string = `[${state}] Submit Success`;
constructor(public deposit: DepositsExtended) {
}
}
export class SubmitFail {
static readonly type: string = `[${state}] Submit Fail`;
constructor() {
}
}
export class SendDataFile {
static readonly type: string = `[${state}] Upload Data File`;
......
......@@ -2,42 +2,56 @@ import {HttpErrorResponse, HttpEventType} from "@angular/common/http";
import {FileUploadStatusEnum} from "@app/features/deposit/enums/file-upload-status.enum";
import {DataFileUploadHelper} from "@app/features/deposit/helpers/data-file-upload.helper";
import {DepositDataFile} from "@app/features/deposit/models/deposit-data-file.model";
import {UploadEventModel} from "@app/features/deposit/models/upload-event.model";
import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model";
import {UploadEventModel} from "@app/features/deposit/models/upload-event.model";
import {UploadFileStatus} from "@app/features/deposit/models/upload-file-status.model";
import {depositDataFileActionNameSpace} from "@app/features/deposit/stores/data-file/deposit-data-file.action";
import {DepositDataFileState, DepositDataFileStateModel} from "@app/features/deposit/stores/data-file/deposit-data-file.state";
import {DepositAction, depositActionNameSpace} from "@app/features/deposit/stores/deposit.action";
import {depositPersonActionNameSpace} from "@app/features/deposit/stores/person/deposit-person.action";
import {DepositPersonState, DepositPersonStateModel} from "@app/features/deposit/stores/person/deposit-person.state";
import {Deposits} from "@app/generated-api";
import {ApiActionEnum} from "@app/shared/enums/api-action.enum";
import {PreIngestResourceApiEnum} from "@app/shared/enums/api.enum";
import {ErrorBackendKeyEnum} from "@app/shared/enums/error-backend-key.enum";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
import {RoutesEnum} from "@app/shared/enums/routes.enum";
import {LanguageAction} from "@app/shared/stores/language/language.action";
import {LicenseAction} from "@app/shared/stores/license/license.action";
import {PersonAction} from "@app/shared/stores/person/person.action";
import {PreservationPolicyAction} from "@app/shared/stores/preservation-policy/preservation-policy.action";
import {SubmissionPolicyAction} from "@app/shared/stores/submission-policy/submission-policy.action";
import {Navigate} from "@ngxs/router-plugin";
import {Action, Actions, State, StateContext, Store} from "@ngxs/store";
import _ from "lodash";
import {Observable} from "rxjs";
import {catchError, map} from "rxjs/operators";
import {catchError, map, tap} from "rxjs/operators";
import {
ApiService,
AssociationRemoteActionHelper,
ChangeModeEnum,
CompositionActionHelper,
defaultResourceStateInitValue,
ErrorDto,
HttpStatus,
isNullOrUndefined,
isTruthy,
NotificationService,
ObjectUtil,
OverrideDefaultAction,
ResourceApiEnum,
ResourceNameSpace,
ResourceState,
ResourceStateModel,
StoreUtil,
TRANSLATE,
} from "solidify-frontend";
import {environment} from "../../../../environments/environment";
export interface DepositStateModel extends ResourceStateModel<DepositsExtended> {
[LocalStateEnum.deposit_dataFile]: DepositDataFileStateModel;
[LocalStateEnum.deposit_person]: DepositPersonStateModel;
listDataFile: DepositDataFile[];
isLoadingDataFile: boolean;
uploadStatus: UploadFileStatus[];
......@@ -48,12 +62,14 @@ export interface DepositStateModel extends ResourceStateModel<DepositsExtended>
defaults: {
...defaultResourceStateInitValue,
[LocalStateEnum.deposit_dataFile]: null,
[LocalStateEnum.deposit_person]: null,
listDataFile: [],
isLoadingDataFile: false,
uploadStatus: [],
},
children: [
DepositDataFileState,
DepositPersonState,
],
})
export class DepositState extends ResourceState<DepositsExtended> {
......@@ -61,6 +77,7 @@ export class DepositState extends ResourceState<DepositsExtended> {
private readonly _CATEGORY_KEY: string = "category";
private readonly _TYPE_KEY: string = "type";
private readonly _FOLDER_KEY: string = "folder";
constructor(protected apiService: ApiService,
protected store: Store,
protected notificationService: NotificationService,
......@@ -91,6 +108,7 @@ export class DepositState extends ResourceState<DepositsExtended> {
new LicenseAction.GetAll(),
new PreservationPolicyAction.GetAll(),
new SubmissionPolicyAction.GetAll(),
new PersonAction.GetAll(),
new DepositAction.LoadResourceSuccess(action),
]);
}
......@@ -109,8 +127,69 @@ export class DepositState extends ResourceState<DepositsExtended> {
});
}
@OverrideDefaultAction()
@Action(DepositAction.Create)
create(ctx: StateContext<DepositStateModel>, action: DepositAction.Create): Observable<DepositsExtended> {
return super.internalCreate(ctx, action)
.pipe(
tap(model => {
const oldAuthors = [];
const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors];
const updateSubResourceAction = AssociationRemoteActionHelper.updateSubResource(depositPersonActionNameSpace, model.resId, oldAuthors, newAuthors);
StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace);
}),
);
}
@OverrideDefaultAction()
@Action(DepositAction.Update)
update(ctx: StateContext<DepositStateModel>, action: DepositAction.Update): Observable<DepositsExtended> {
return super.internalUpdate(ctx, action)
.pipe(
tap(model => {
const oldAuthors = _.map(ctx.getState()[LocalStateEnum.deposit_person].selected, LocalModelAttributeEnum.resId);
const newAuthors = action.modelFormControlEvent.model[LocalModelAttributeEnum.authors];
const updateSubResourceAction = AssociationRemoteActionHelper.updateSubResource(depositPersonActionNameSpace, action.modelFormControlEvent.model.resId, oldAuthors, newAuthors);
StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, depositActionNameSpace, depositPersonActionNameSpace);
}),
);
}
@Action(DepositAction.Submit)
submit(ctx: StateContext<DepositStateModel>, action: DepositAction.Submit): void {
submit(ctx: StateContext<DepositStateModel>, action: DepositAction.Submit): Observable<DepositsExtended> {
let submissionWithApproval = false;
let submissionPolicy = action.deposit.submissionPolicy;
if (isNullOrUndefined(submissionPolicy)) {
submissionPolicy = action.deposit.organizationalUnit.defaultSubmissionPolicy;
}
if (!isNullOrUndefined(submissionPolicy)) {
submissionWithApproval = submissionPolicy.submissionApproval;
}
const updateDeposit = {} as DepositsExtended;
if (isTruthy(submissionWithApproval)) {
updateDeposit.status = Deposits.StatusEnum.INVALIDATION;
} else {
updateDeposit.status = Deposits.StatusEnum.APPROVED;
}
return this.apiService.patchById(this._urlResource, action.deposit.resId, updateDeposit).pipe(
tap(deposit => ctx.dispatch(new DepositAction.SubmitSuccess(deposit))),
catchError(error => {
ctx.dispatch(new DepositAction.SubmitFail());
throw error;
}),
);
}
@Action(DepositAction.SubmitSuccess)
submitSuccess(ctx: StateContext<DepositStateModel>, action: DepositAction.SubmitSuccess): void {
ctx.dispatch(new Navigate([RoutesEnum.deposit]));
this.notificationService.showSuccess(TRANSLATE("deposit.notification.submit.success"), true);
}
@Action(DepositAction.SubmitFail)
submitFail(ctx: StateContext<DepositStateModel>, action: DepositAction.SubmitFail): void {
this.notificationService.showError(TRANSLATE("deposit.notification.submit.fail"), true);
}
@Action(DepositAction.SendDataFile)
......
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {Person} from "@app/shared/models/business/person.model";
import {AssociationRemoteAction, AssociationRemoteNameSpace, TypeDefaultAction} from "solidify-frontend";
const state = LocalStateEnum.deposit_person;
export namespace DepositPersonAction {
@TypeDefaultAction(state)
export class GetAll extends AssociationRemoteAction.GetAll {
}
@TypeDefaultAction(state)
export class GetAllSuccess extends AssociationRemoteAction.GetAllSuccess<Person> {
}
@TypeDefaultAction(state)
export class GetAllFail extends AssociationRemoteAction.GetAllFail {
}
@TypeDefaultAction(state)
export class Update extends AssociationRemoteAction.Update {
}
@TypeDefaultAction(state)
export class UpdateSuccess extends AssociationRemoteAction.UpdateSuccess {
}
@TypeDefaultAction(state)
export class UpdateFail extends AssociationRemoteAction.UpdateFail {
}
@TypeDefaultAction(state)
export class Create extends AssociationRemoteAction.Create {
}
@TypeDefaultAction(state)
export class CreateSuccess extends AssociationRemoteAction.CreateSuccess {
}
@TypeDefaultAction(state)
export class CreateFail extends AssociationRemoteAction.CreateFail {
}
@TypeDefaultAction(state)
export class Delete extends AssociationRemoteAction.Delete {
}
@TypeDefaultAction(state)
export class DeleteSuccess extends AssociationRemoteAction.DeleteSuccess {
}
@TypeDefaultAction(state)
export class DeleteFail extends AssociationRemoteAction.DeleteFail {
}
}
export const depositPersonActionNameSpace: AssociationRemoteNameSpace = DepositPersonAction;
import {DepositsExtended} from "@app/features/deposit/models/deposits-extended.model";
import {depositPersonActionNameSpace} from "@app/features/deposit/stores/person/deposit-person.action";
import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
import {PreIngestResourceApiEnum} from "@app/shared/enums/api.enum";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {Person} from "@app/shared/models/business/person.model";
import {Actions, State, Store} from "@ngxs/store";
import {
ApiService,
AssociationRemoteNameSpace,
AssociationRemoteState,
AssociationRemoteStateModel,
defaultAssociationRemoteStateInitValue,
NotificationService,
ResourceApiEnum,
} from "solidify-frontend";
export interface DepositPersonStateModel extends AssociationRemoteStateModel<Person> {
}
@State<DepositPersonStateModel>({
name: LocalStateEnum.deposit_person,
defaults: {
...defaultAssociationRemoteStateInitValue,
},
})
export class DepositPersonState extends AssociationRemoteState<DepositsExtended> {
constructor(protected apiService: ApiService,
protected store: Store,
protected notificationService: NotificationService,
protected actions$: Actions) {
super(apiService, store, notificationService, actions$);
}
defineUrlResource(): ResourceApiEnum {
return PreIngestResourceApiEnum.deposits;
}
defineState(): LocalStateEnum {
return LocalStateEnum.deposit;
}
defineAssociationRemoteNameSpace(): AssociationRemoteNameSpace {
return depositPersonActionNameSpace;
}
defineResourceName(): ApiResourceNameEnum {
return ApiResourceNameEnum.PERSON;
}
}
<div class="button-toolbar">
<button mat-flat-button
<button mat-button
color="primary"
(click)="edit()">
{{KEY_EDIT_BUTTON | translate}}
</button>
<button mat-flat-button
<button mat-button
color="accent"
[disabled]="!(currentObs| async)"
(click)="delete()">
......
<div class="button-toolbar">
<button mat-flat-button color="primary" (click)="create()">{{KEY_CREATE_BUTTON | translate}}</button>
<button mat-flat-button color="accent" (click)="getAll()">{{KEY_REFRESH_BUTTON | translate}}</button>
<button mat-button color="primary" (click)="create()">{{KEY_CREATE_BUTTON | translate}}</button>
<button mat-button color="accent" (click)="getAll()">{{KEY_REFRESH_BUTTON | translate}}</button>
</div>
<div class="wrapper">
......
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