diff --git a/src/app/enums/index.ts b/src/app/enums/index.ts index 05852d8845598ebd06b285236acba93e300fdb0f..14b5cd7143f005693cc35526c22b092c97d407e0 100644 --- a/src/app/enums/index.ts +++ b/src/app/enums/index.ts @@ -350,6 +350,12 @@ export namespace Enums { export const TypeEnum = { FORMLY: "FORMLY" as TypeEnum, }; + export const LanguageEnumTranslate: KeyValue[] = [ + { + key: TypeEnum.FORMLY, + value: MARK_AS_TRANSLATABLE("formDescription.typeEnum.formly"), + }, + ]; } export namespace Language { diff --git a/src/app/features/admin/admin.module.ts b/src/app/features/admin/admin.module.ts index fa6ba6e8d3b5f73526438f5c1a07fb20a864fe98..76611c9c63bf81ce55399376c123b725fa73e9b8 100644 --- a/src/app/features/admin/admin.module.ts +++ b/src/app/features/admin/admin.module.ts @@ -9,6 +9,7 @@ import {AdminNotificationState} from "@admin/notification/stores/admin-notificat import {AdminNotificationStatusHistoryState} from "@admin/notification/stores/status-history/admin-notification-status-history.state"; import {AdminOaiSetState} from "@admin/oai-set/stores/admin-oai-set.state"; import {AdminOAuth2ClientState} from "@admin/oauth2-client/stores/admin-oauth2-client.state"; +import {AdminOrganizationalUnitAdditionalFieldsFormState} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; import {AdminOrganizationalUnitState} from "@admin/organizational-unit/stores/admin-organizational-unit.state"; import {AdminOrganizationalUnitDisseminationPolicyState} from "@admin/organizational-unit/stores/dissemination-policy/admin-organizational-unit-dissemination-policy.state"; import {AdminOrganizationalUnitFundingAgencyState} from "@admin/organizational-unit/stores/funding-agency/admin-organizational-unit-funding-agency.state"; diff --git a/src/app/features/admin/organizational-unit/admin-organizational-unit-routing.module.ts b/src/app/features/admin/organizational-unit/admin-organizational-unit-routing.module.ts index 43c8c2222adc70d6b525fae7b8d835e162e49c24..b2a1d017e84737fb4deb944667ed75f39703f081 100644 --- a/src/app/features/admin/organizational-unit/admin-organizational-unit-routing.module.ts +++ b/src/app/features/admin/organizational-unit/admin-organizational-unit-routing.module.ts @@ -1,6 +1,8 @@ +import {AdminOrganizationalUnitAdditionalFieldsListRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable"; import {AdminOrganizationalUnitCreateRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-create/admin-organizational-unit-create.routable"; +import {AdminOrganizationalUnitDetailEditRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable"; import {AdminOrganizationalUnitListRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-list/admin-organizational-unit-list.routable"; -import {AdminOrganizationalUnitDetailEditRoutable} from "@admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable"; +import {AdminOrganizationalUnitMetadataRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable"; import {AdminOrganizationalUnitState} from "@admin/organizational-unit/stores/admin-organizational-unit.state"; import {NgModule} from "@angular/core"; import { @@ -14,8 +16,6 @@ import { } from "@shared/enums/routes.enum"; import {CanDeactivateGuard} from "@shared/services/can-deactivate-guard.service"; import {MARK_AS_TRANSLATABLE} from "solidify-frontend"; -import {AdminOrgUnitAdditionalFieldsFormListRoutable} from "@admin/organizational-unit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form-list.routable"; -import {AdminOrgUnitTabsRoutable} from "@admin/organizational-unit/components/routables/admin-orgunit-tabs/admin-orgunit-tabs.routable"; const routes: Routes = [ { @@ -25,39 +25,40 @@ const routes: Routes = [ }, { path: AdminRoutesEnum.organizationalUnitDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId, - redirectTo: AdminRoutesEnum.organizationalUnitDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId + AppRoutesEnum.separator + AdminRoutesEnum.organizationalUnitDetail, + redirectTo: AdminRoutesEnum.organizationalUnitDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId + AppRoutesEnum.separator + AdminRoutesEnum.organizationalUnitData, pathMatch: "full", }, { path: AdminRoutesEnum.organizationalUnitDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId, - component: AdminOrgUnitTabsRoutable, + component: AdminOrganizationalUnitDetailEditRoutable, data: { breadcrumbMemoizedSelector: AdminOrganizationalUnitState.currentTitle, }, children: [ { - path: AdminRoutesEnum.organizationalUnitDetail, - component: AdminOrganizationalUnitDetailEditRoutable, + path: AdminRoutesEnum.organizationalUnitData, + component: AdminOrganizationalUnitMetadataRoutable, data: { - breadcrumb: MARK_AS_TRANSLATABLE("breadcrumb.admin.organizationalUnit.edit"), + breadcrumb: MARK_AS_TRANSLATABLE("breadcrumb.admin.organizationalUnit.detail"), }, + children: [ + { + path: AdminRoutesEnum.organizationalUnitEdit, + data: { + breadcrumb: MARK_AS_TRANSLATABLE("breadcrumb.admin.organizationalUnit.edit"), + }, + canDeactivate: [CanDeactivateGuard], + }, + ], }, { path: AdminRoutesEnum.organizationalUnitAdditionalFieldsForm, - component: AdminOrgUnitAdditionalFieldsFormListRoutable, + component: AdminOrganizationalUnitAdditionalFieldsListRoutable, data: { breadcrumb: MARK_AS_TRANSLATABLE("breadcrumb.admin.organizationalUnit.additionalFieldsForm.list"), }, - children: [ - { - path: AppRoutesEnum.paramId, - data: { - breadcrumb: MARK_AS_TRANSLATABLE("breadcrumb.admin.organizationalUnit.additionalFieldsForm.edit"), - }, - } - ] - } - ] + }, + ], }, { path: AdminRoutesEnum.organizationalUnitCreate, @@ -67,7 +68,6 @@ const routes: Routes = [ }, canDeactivate: [CanDeactivateGuard], }, - ]; @NgModule({ diff --git a/src/app/features/admin/organizational-unit/admin-organizational-unit.module.ts b/src/app/features/admin/organizational-unit/admin-organizational-unit.module.ts index ddf7d241ab41b99259b1bdaa681c7a2bf2e10a04..be4951a0f8c3b8ace2ae850dab7ad31a45636db2 100644 --- a/src/app/features/admin/organizational-unit/admin-organizational-unit.module.ts +++ b/src/app/features/admin/organizational-unit/admin-organizational-unit.module.ts @@ -1,9 +1,15 @@ import {AdminOrganizationalUnitRoutingModule} from "@admin/organizational-unit/admin-organizational-unit-routing.module"; +import {AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog"; +import {AdminOrganizationalUnitAdditionalFieldsRenameDialog} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog"; import {AdminOrganizationalUnitDeleteDialog} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-delete/admin-organizational-unit-delete.dialog"; +import {AdminOrganizationalUnitAdditionalFieldsFormPresentational} from "@admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational"; import {AdminOrganizationalUnitFormPresentational} from "@admin/organizational-unit/components/presentationals/admin-organizational-unit-form/admin-organizational-unit-form.presentational"; +import {AdminOrganizationalUnitAdditionalFieldsListRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable"; import {AdminOrganizationalUnitCreateRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-create/admin-organizational-unit-create.routable"; +import {AdminOrganizationalUnitDetailEditRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable"; import {AdminOrganizationalUnitListRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-list/admin-organizational-unit-list.routable"; -import {AdminOrganizationalUnitDetailEditRoutable} from "@admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable"; +import {AdminOrganizationalUnitMetadataRoutable} from "@admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable"; +import {AdminOrganizationalUnitService} from "@admin/organizational-unit/services/admin-organizational-unit.service"; import {AdminOrganizationalUnitState} from "@admin/organizational-unit/stores/admin-organizational-unit.state"; import {NgModule} from "@angular/core"; import {SharedModule} from "@app/shared/shared.module"; @@ -14,13 +20,21 @@ const routables = [ AdminOrganizationalUnitCreateRoutable, AdminOrganizationalUnitDetailEditRoutable, AdminOrganizationalUnitListRoutable, + AdminOrganizationalUnitMetadataRoutable, + AdminOrganizationalUnitAdditionalFieldsListRoutable, ]; const containers = []; const dialogs = [ AdminOrganizationalUnitDeleteDialog, + AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, + AdminOrganizationalUnitAdditionalFieldsRenameDialog, ]; const presentationals = [ AdminOrganizationalUnitFormPresentational, + AdminOrganizationalUnitAdditionalFieldsFormPresentational, +]; +const services = [ + AdminOrganizationalUnitService, ]; @NgModule({ @@ -44,7 +58,9 @@ const presentationals = [ exports: [ ...routables, ], - providers: [], + providers: [ + ...services, + ], }) export class AdminOrganizationalUnitModule { } diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html new file mode 100644 index 0000000000000000000000000000000000000000..b88ffeabaf20a3171e1c234faf42df4b9b7e80e4 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.html @@ -0,0 +1,31 @@ +<dlcm-shared-base-action-dialog [titleToTranslate]="titleToTranslate | translate"> + <div [dlcmSpinner]="isLoadingObs | async"> + <dlcm-admin-organizational-unit-additional-fields-form #formPresentational + class="form" + [model]="data.additionalFieldsForm" + [readonly]="data.mode === 'detail'" + (submitChange)="update($event)" + (checkAvailableChange)="checkAvailable($event)" + (dirtyChange)="updateCanDeactivate($event)" + ></dlcm-admin-organizational-unit-additional-fields-form> + </div> +</dlcm-shared-base-action-dialog> +<div mat-dialog-actions> + <button mat-button + [mat-dialog-close]="" + [solidifyAutoFocus]="true" + > + {{'admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.button.close' | translate}} + </button> + <button *ngIf="data.mode !== 'detail'" + mat-flat-button + color="primary" + [dlcmButtonSpinner]="isLoadingObs | async" + [disabled]="formPresentational?.form?.invalid || formPresentational?.form?.pristine" + solidifyShortCuts + (onEnter)="confirm(formPresentational?.form?.value)" + (click)="confirm(formPresentational?.form?.value)" + > + {{confirmToTranslate | translate}} + </button> +</div> diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.scss b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.scss new file mode 100644 index 0000000000000000000000000000000000000000..5179569958eb11d5ee12a35e9365fd109ecc71db --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.scss @@ -0,0 +1,11 @@ +@import "../sass/abstracts/mixins"; + +:host { + .form { + display: block; + } + + .form ::ng-deep form > * { + width: 100% !important; + } +} \ No newline at end of file diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.ts b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.ts new file mode 100644 index 0000000000000000000000000000000000000000..d4da66a9dc3ff81f30170712f908d1c7d72553e1 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog.ts @@ -0,0 +1,109 @@ +import {AdminOrganizationalUnitAdditionalFieldsFormAction} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; +import {AdminOrganizationalUnitAdditionalFieldsFormState} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Inject, + OnInit, + ViewChild, +} from "@angular/core"; +import { + MAT_DIALOG_DATA, + MatDialog, + MatDialogRef, +} from "@angular/material/dialog"; +import {ActivatedRoute} from "@angular/router"; +import { + AdditionalFieldsForm, + OaiSet, +} from "@models"; +import { + Actions, + ofActionCompleted, + Store, +} from "@ngxs/store"; +import {SharedAbstractDialog} from "@shared/components/dialogs/shared-abstract/shared-abstract.dialog"; +import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational"; +import {FormControlKey} from "@shared/models/form-control-key.model"; +import {Observable} from "rxjs"; +import { + take, + tap, +} from "rxjs/operators"; +import { + isTrue, + MARK_AS_TRANSLATABLE, + MemoizedUtil, + ModelFormControlEvent, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-organizational-unit-additional-fields-detail-create-update-dialog", + templateUrl: "./admin-organizational-unit-additional-fields-detail-create-update.dialog.html", + styleUrls: ["./admin-organizational-unit-additional-fields-detail-create-update.dialog.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog extends SharedAbstractDialog implements OnInit { + isLoadingObs: Observable<boolean> = MemoizedUtil.isLoading(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); + confirmToTranslate: string; + + @ViewChild("formPresentational") + readonly formPresentational: SharedAbstractFormPresentational<OaiSet>; + + constructor(protected readonly _store: Store, + protected readonly _route: ActivatedRoute, + protected readonly _actions$: Actions, + protected readonly _changeDetector: ChangeDetectorRef, + protected readonly _dialog: MatDialog, + protected readonly _dialogRef: MatDialogRef<AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog>, + @Inject(MAT_DIALOG_DATA) readonly data: AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData) { + super(); + } + + ngOnInit(): void { + super.ngOnInit(); + + if (this.data.mode === "update") { + this.titleToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.title.update"); + this.confirmToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.button.confirm"); + } else if (this.data.mode === "detail") { + this.titleToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.title.detail"); + this.confirmToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.button.confirm"); + } else if (this.data.mode === "create") { + this.titleToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.title.create"); + this.confirmToTranslate = MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.modal.detailCreateUpdate.button.confirm"); + } + } + + update($event: ModelFormControlEvent<AdditionalFieldsForm>): void { + + } + + checkAvailable($event: FormControlKey): void { + + } + + updateCanDeactivate($event: boolean): void { + + } + + confirm(additionalFieldsForm: AdditionalFieldsForm): void { + this.subscribe(this._actions$.pipe( + ofActionCompleted(AdminOrganizationalUnitAdditionalFieldsFormAction.CreateSuccess), + take(1), + tap((result) => { + if (isTrue(result.result.successful)) { + this._dialogRef.close(); + } + }), + )); + this._store.dispatch(new AdminOrganizationalUnitAdditionalFieldsFormAction.Create(this.data.parentResId, additionalFieldsForm)); + } +} + +export interface AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData { + parentResId: string; + additionalFieldsForm: AdditionalFieldsForm; + mode: "update" | "create" | "detail"; +} diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html new file mode 100644 index 0000000000000000000000000000000000000000..38a34f184adae359fcb0160b25f70557fa75d667 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.html @@ -0,0 +1,35 @@ +<dlcm-shared-base-action-dialog [titleToTranslate]="'admin.organizationalUnit.additionalFields.modal.rename.title' | translate"> + <form [formGroup]="form" + class="form" + (ngSubmit)="onSubmit()" + > + <mat-form-field *ngIf="getFormControl(formDefinition.name) as fd"> + <input [formControl]="fd" + [solidifyValidation]="errors" + matInput + [placeholder]="'admin.organizationalUnit.additionalFields.modal.rename.name' | translate" + [required]="formValidationHelper.hasRequiredField(fd)" + > + <mat-error #errors></mat-error> + </mat-form-field> + </form> +</dlcm-shared-base-action-dialog> +<div mat-dialog-actions + class="footer" +> + <button mat-button + [mat-dialog-close]="" + cdkFocusInitial + >{{'admin.organizationalUnit.additionalFields.modal.rename.button.close' | translate}} + </button> + <button mat-flat-button + color="primary" + [dlcmButtonSpinner]="isLoadingObs | async" + [disabled]="form.invalid || form.pristine" + solidifyShortCuts + (onEnter)="onSubmit()" + (click)="onSubmit()" + >{{'admin.organizationalUnit.additionalFields.modal.rename.button.confirmChange' | translate}} + </button> +</div> + diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.scss b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.scss new file mode 100644 index 0000000000000000000000000000000000000000..fba57391f85a40ab8a5ed772d10947972896b38b --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.scss @@ -0,0 +1,10 @@ +@import "../sass/abstracts/variables"; +@import "../sass/abstracts/mixins"; + +:host { + .form { + > * { + width: 100%; + } + } +} \ No newline at end of file diff --git a/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.ts b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.ts new file mode 100644 index 0000000000000000000000000000000000000000..dddd6c297905e7aa074b4c80a41f520f2d519864 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog.ts @@ -0,0 +1,104 @@ +import {AdminOrganizationalUnitAdditionalFieldsFormAction} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; +import {AdminOrganizationalUnitAdditionalFieldsFormState} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; +import { + ChangeDetectionStrategy, + Component, + Inject, + OnInit, +} from "@angular/core"; +import { + AbstractControl, + FormBuilder, + FormGroup, +} from "@angular/forms"; +import { + MAT_DIALOG_DATA, + MatDialogRef, +} from "@angular/material/dialog"; +import {AdditionalFieldsForm} from "@models"; +import { + Actions, + ofActionCompleted, + Store, +} from "@ngxs/store"; +import {SharedAbstractContainer} from "@shared/components/containers/shared-abstract/shared-abstract.container"; +import {BaseFormDefinition} from "@shared/models/base-form-definition.model"; +import {Observable} from "rxjs"; +import { + take, + tap, +} from "rxjs/operators"; +import { + FormValidationHelper, + isTrue, + MemoizedUtil, + PropertyName, + SolidifyValidator, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-organizational-unit-additional-fields-rename-dialog", + templateUrl: "./admin-organizational-unit-additional-fields-rename.dialog.html", + styleUrls: ["./admin-organizational-unit-additional-fields-rename.dialog.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminOrganizationalUnitAdditionalFieldsRenameDialog extends SharedAbstractContainer implements OnInit { + isLoadingObs: Observable<boolean> = MemoizedUtil.isLoading(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); + + form: FormGroup; + formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); + + constructor(private readonly _store: Store, + private readonly _actions$: Actions, + private readonly _dialogRef: MatDialogRef<AdminOrganizationalUnitAdditionalFieldsRenameDialog>, + @Inject(MAT_DIALOG_DATA) public data: AdminOrganizationalUnitAdditionalFieldsRenameDialogData, + private readonly _fb: FormBuilder) { + super(); + } + + ngOnInit(): void { + super.ngOnInit(); + this.form = this._fb.group({ + [this.formDefinition.name]: [this.data.additionalFieldsForm.name, SolidifyValidator], + }); + } + + close(): void { + this._dialogRef.close(); + } + + onSubmit(): void { + this._store.dispatch(new AdminOrganizationalUnitAdditionalFieldsFormAction.Update(this.data.parentResId, { + resId: this.data.additionalFieldsForm.resId, + name: this.form.get(this.formDefinition.name).value, + })); + + this.subscribe(this._actions$.pipe( + ofActionCompleted(AdminOrganizationalUnitAdditionalFieldsFormAction.UpdateSuccess), + take(1), + tap((result) => { + if (isTrue(result.result.successful)) { + this._dialogRef.close(); + this._store.dispatch(new AdminOrganizationalUnitAdditionalFieldsFormAction.GetAll(this.data.parentResId)); + } + }), + )); + } + + getFormControl(key: string): AbstractControl { + return FormValidationHelper.getFormControl(this.form, key); + } + + get formValidationHelper(): typeof FormValidationHelper { + return FormValidationHelper; + } +} + +class FormComponentFormDefinition extends BaseFormDefinition { + @PropertyName() name: string; +} + +export interface AdminOrganizationalUnitAdditionalFieldsRenameDialogData { + parentResId: string; + additionalFieldsForm: AdditionalFieldsForm; +} diff --git a/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.html b/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.html new file mode 100644 index 0000000000000000000000000000000000000000..6c72c005d2a31389cd4150b39bf0f4d24794abe9 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.html @@ -0,0 +1,41 @@ +<form [formGroup]="form" + class="form-two-columns" + (ngSubmit)="onSubmit()" +> + <mat-form-field *ngIf="getFormControl(formDefinition.name) as fd"> + <input [formControl]="fd" + [solidifyValidation]="errors" + matInput + [placeholder]="'admin.organizationalUnit.additionalField.form.name' | translate" + [required]="formValidationHelper.hasRequiredField(fd)" + > + <mat-error #errors></mat-error> + </mat-form-field> + + <!-- <mat-form-field *ngIf="getFormControl(formDefinition.type) as fd">--> + <!-- <mat-label>{{'admin.organizationalUnit.additionalField.form.type' | translate}}</mat-label>--> + <!-- <mat-select [formControl]="fd"--> + <!-- [solidifyValidation]="errors"--> + <!-- [required]="formValidationHelper.hasRequiredField(fd)"--> + <!-- >--> + <!-- <mat-option *ngFor="let formType of listFormType"--> + <!-- [value]="formType.key"--> + <!-- >--> + <!-- {{formType.value | translate}}--> + <!-- </mat-option>--> + <!-- </mat-select>--> + <!-- <mat-error #errors></mat-error>--> + <!-- </mat-form-field>--> + <mat-form-field *ngIf="getFormControl(formDefinition.description) as fd"> + <mat-label>{{'admin.organizationalUnit.additionalField.form.description' | translate }}</mat-label> + <textarea [formControl]="fd" + [solidifyValidation]="errors" + matInput + cdkTextareaAutosize + cdkAutosizeMinRows="5" + cdkAutosizeMaxRows="10" + [required]="formValidationHelper.hasRequiredField(fd)" + ></textarea> + <mat-error #errors></mat-error> + </mat-form-field> +</form> diff --git a/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.ts b/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ffceb5a285964244a670573e6ad6eb131e5a8d7 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/presentationals/admin-organizational-unit-additional-fields-form/admin-organizational-unit-additional-fields-form.presentational.ts @@ -0,0 +1,70 @@ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ElementRef, +} from "@angular/core"; +import { + FormBuilder, + Validators, +} from "@angular/forms"; +import {BreakpointService} from "@app/shared/services/breakpoint.service"; +import {Enums} from "@enums"; +import {environment} from "@environments/environment"; +import {AdditionalFieldsForm} from "@models"; +import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational"; +import {BaseFormDefinition} from "@shared/models/base-form-definition.model"; +import { + KeyValue, + PropertyName, + SolidifyValidator, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-organizational-unit-additional-fields-form", + templateUrl: "./admin-organizational-unit-additional-fields-form.presentational.html", + styleUrls: ["../../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminOrganizationalUnitAdditionalFieldsFormPresentational extends SharedAbstractFormPresentational<AdditionalFieldsForm> { + readonly TIME_BEFORE_DISPLAY_TOOLTIP: number = environment.timeBeforeDisplayTooltipOnInput; + formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); + + listFormType: KeyValue[] = Enums.FormDescription.LanguageEnumTranslate; + + constructor(protected readonly _changeDetectorRef: ChangeDetectorRef, + protected readonly _elementRef: ElementRef, + private readonly _fb: FormBuilder, + public readonly breakpointService: BreakpointService) { + super(_changeDetectorRef, _elementRef); + } + + protected initNewForm(): void { + this.form = this._fb.group({ + [this.formDefinition.type]: [Enums.FormDescription.TypeEnum.FORMLY, [Validators.required, SolidifyValidator]], + [this.formDefinition.name]: ["", [SolidifyValidator]], + [this.formDefinition.description]: [""], + }); + + } + + protected bindFormTo(additionalFieldsForm: AdditionalFieldsForm): void { + this.form = this._fb.group({ + [this.formDefinition.type]: [additionalFieldsForm.type, [Validators.required, SolidifyValidator]], + [this.formDefinition.name]: [additionalFieldsForm.name, [SolidifyValidator]], + [this.formDefinition.description]: [additionalFieldsForm.description], + }); + } + + protected treatmentBeforeSubmit(additionalFieldsForm: AdditionalFieldsForm | any): AdditionalFieldsForm { + return additionalFieldsForm; + } +} + +class FormComponentFormDefinition extends BaseFormDefinition { + @PropertyName() type: string; + @PropertyName() name: string; + @PropertyName() description: string; + @PropertyName() creation: string; + @PropertyName() lastUpdate: string; +} diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.html b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.html similarity index 68% rename from src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.html rename to src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.html index 83c1e7a3ac90223b5280df8f0e2ee253ad275886..bc9904df7cbb24e46905827d80b3bddc34f0a7f7 100644 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.html +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.html @@ -1,16 +1,12 @@ -<div class="additional-fields-form"> - +<div class="wrapper" + [dlcmSpinner]="isLoadingObs | async" +> <dlcm-shared-data-table [columns]="columns" [datas]="additionalFieldsFormObs | async" [queryParameters]="queryParametersObs | async" + [actions]="actions" [isLoading]="isLoadingObs | async" (queryParametersChange)="onQueryParametersEvent($event)" + (selectChange)="select($event)" ></dlcm-shared-data-table> - - <div class="wrapper" - [dlcmSpinner]="isLoadingObs | async" - > - - </div> - </div> diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.scss b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.scss new file mode 100644 index 0000000000000000000000000000000000000000..8fc015250c5bb7c988390e2688794d33ff136da6 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.scss @@ -0,0 +1,7 @@ +@import "../sass/abstracts/variables"; +@import "../sass/abstracts/mixins"; + +:host { + width: 100%; + @include spinner-wrapper(); +} diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.ts b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.ts new file mode 100644 index 0000000000000000000000000000000000000000..629a7cebfe734fca86a48e148a9c686ed66f3789 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-additional-fields-list/admin-organizational-unit-additional-fields-list.routable.ts @@ -0,0 +1,135 @@ +import { + AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData, + AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, +} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog"; +import { + AdminOrganizationalUnitAdditionalFieldsRenameDialog, + AdminOrganizationalUnitAdditionalFieldsRenameDialogData, +} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-rename/admin-organizational-unit-additional-fields-rename.dialog"; +import {AdminOrganizationalUnitAdditionalFieldsFormAction} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; +import {AdminOrganizationalUnitAdditionalFieldsFormState} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, +} from "@angular/core"; +import {MatDialog} from "@angular/material/dialog"; +import {ActivatedRoute} from "@angular/router"; +import {DepositDataFile} from "@deposit/models/deposit-data-file.model"; +import {AdditionalFieldsForm} from "@models"; +import {Store} from "@ngxs/store"; +import {FieldTypeEnum} from "@shared/enums/field-type.enum"; +import {IconNameEnum} from "@shared/enums/icon-name.enum"; +import {AppRoutesEnum} from "@shared/enums/routes.enum"; +import {DataTableActions} from "@shared/models/data-table-actions.model"; +import {DataTableColumns} from "@shared/models/data-table-columns.model"; +import {Observable} from "rxjs"; +import { + CompositionState, + isNullOrUndefined, + MARK_AS_TRANSLATABLE, + MemoizedUtil, + OrderEnum, + QueryParameters, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-organizational-unit-additional-fields-list-routable", + templateUrl: "./admin-organizational-unit-additional-fields-list.routable.html", + styleUrls: ["./admin-organizational-unit-additional-fields-list.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminOrganizationalUnitAdditionalFieldsListRoutable { + isLoadingObs: Observable<boolean> = MemoizedUtil.isLoading(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); + + _orgUnitResId: string; + _resId: string; + + additionalFieldsFormObs: Observable<AdditionalFieldsForm[]> = CompositionState.list(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); + queryParametersObs: Observable<QueryParameters> = MemoizedUtil.select(this._store, AdminOrganizationalUnitAdditionalFieldsFormState, (state) => state.queryParameters); + + columns: DataTableColumns<AdditionalFieldsForm>[]; + + actions: DataTableActions<DepositDataFile>[] = [ + { + logo: IconNameEnum.edit, + callback: (additionalFieldsForm: AdditionalFieldsForm) => this.renameVersion(this._resId, additionalFieldsForm), + placeholder: current => MARK_AS_TRANSLATABLE("crud.list.action.rename"), + }, + { + logo: IconNameEnum.create, + callback: (additionalFieldsForm: AdditionalFieldsForm) => this.createNewVersionFromExistingOne(this._resId, additionalFieldsForm), + placeholder: current => MARK_AS_TRANSLATABLE("crud.list.action.createNewVersionFromExistingOne"), + }, + ]; + + constructor(protected readonly _store: Store, + protected readonly _route: ActivatedRoute, + private readonly _changeDetector: ChangeDetectorRef, + public readonly _dialog: MatDialog) { + this.retrieveResIdFromUrl(); + this.defineColumns(); + } + + protected retrieveResIdFromUrl(): void { + this._orgUnitResId = this._route.snapshot.paramMap.get(AppRoutesEnum.paramIdWithoutPrefixParam); + if (isNullOrUndefined(this._orgUnitResId)) { + this._orgUnitResId = this._route.parent.snapshot.paramMap.get(AppRoutesEnum.paramIdWithoutPrefixParam); + } + } + + onQueryParametersEvent(queryParameters: QueryParameters): void { + this._store.dispatch(new AdminOrganizationalUnitAdditionalFieldsFormAction.ChangeQueryParameters(this._orgUnitResId, queryParameters)); + this._changeDetector.detectChanges(); // Allow to display spinner the first time + } + + defineColumns(): void { + this.columns = [ + { + field: "name", + header: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.table.header.name"), + type: FieldTypeEnum.string, + order: OrderEnum.none, + isFilterable: true, + isSortable: true, + }, + { + field: "creation.when" as any, + header: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.table.header.creation.when"), + type: FieldTypeEnum.datetime, + order: OrderEnum.ascending, + isFilterable: true, + isSortable: true, + }, + ]; + } + + select(additionalFieldsForm: AdditionalFieldsForm): void { + this._dialog.open(AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, { + data: { + parentResId: this._orgUnitResId, + additionalFieldsForm: additionalFieldsForm, + mode: "detail", + } as AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData, + }); + } + + private renameVersion(_resId: string, additionalFieldsForm: AdditionalFieldsForm): void { + this._dialog.open(AdminOrganizationalUnitAdditionalFieldsRenameDialog, { + data: { + parentResId: this._orgUnitResId, + additionalFieldsForm: additionalFieldsForm, + } as AdminOrganizationalUnitAdditionalFieldsRenameDialogData, + }); + } + + private createNewVersionFromExistingOne(_resId: string, additionalFieldsForm: AdditionalFieldsForm): void { + this._dialog.open(AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, { + data: { + parentResId: this._orgUnitResId, + additionalFieldsForm: additionalFieldsForm, + mode: "update", + } as AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData, + }); + } +} diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.html b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.html new file mode 100644 index 0000000000000000000000000000000000000000..890cb1ab94f353daa850663c3903a36748194d3c --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.html @@ -0,0 +1,28 @@ +<lib-empty-container + cdkTrapFocus + solidifyShortCuts + [solidifyFocusFirstElement]="true" + (onEscape)="backToList()" +> + <dlcm-shared-banner-edit-mode [isEdit]="isEdit"></dlcm-shared-banner-edit-mode> + + + <dlcm-shared-button-toolbar-detail [mode]="isEdit ? 'edit' : 'detail'" + [formPresentational]="formPresentational" + [currentModel]="currentObs | async" + [listExtraButtons]="listExtraButtons" + [saveAvailable]="false" + (editChange)="edit()" + (deleteChange)="delete()" + (backToDetailChange)="backToDetail()" + (backToListChange)="backToList()" + > + </dlcm-shared-button-toolbar-detail> + + <dlcm-shared-tabs-container [tabs]="listTabs" + [isLoading]="isLoadingObs | async" + (tabChange)="setCurrentTab($event)" + > + <router-outlet></router-outlet> + </dlcm-shared-tabs-container> +</lib-empty-container> diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.ts b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.ts new file mode 100644 index 0000000000000000000000000000000000000000..1426979effc7b6344ac3cceb22bd9950f3d5d4a1 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-detail-edit/admin-organizational-unit-detail-edit.routable.ts @@ -0,0 +1,155 @@ +import { + AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData, + AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, +} from "@admin/organizational-unit/components/dialogs/admin-organizational-unit-additional-fields-detail-create-update/admin-organizational-unit-additional-fields-detail-create-update.dialog"; +import {AdminOrganizationalUnitService} from "@admin/organizational-unit/services/admin-organizational-unit.service"; +import {adminOrganizationalUnitActionNameSpace} from "@admin/organizational-unit/stores/admin-organizational-unit.action"; +import { + AdminOrganizationalUnitState, + AdminOrganizationalUnitStateModel, +} from "@admin/organizational-unit/stores/admin-organizational-unit.state"; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + OnInit, +} from "@angular/core"; +import {MatDialog} from "@angular/material/dialog"; +import {ActivatedRoute} from "@angular/router"; +import { + OrganizationalUnit, + PreservationPolicy, + Role, + SubmissionPolicy, +} from "@models"; +import { + Actions, + Select, + Store, +} from "@ngxs/store"; +import {Tab} from "@shared/components/containers/shared-tabs/shared-tabs.container"; +import {SharedAbstractDetailEditCommonRoutable} from "@shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable"; +import {IconNameEnum} from "@shared/enums/icon-name.enum"; +import {LocalStateEnum} from "@shared/enums/local-state.enum"; +import { + AdminRoutesEnum, + AppRoutesEnum, +} from "@shared/enums/routes.enum"; +import {ExtraButtonToolbar} from "@shared/models/extra-button-toolbar.model"; +import {sharedOrgUnitActionNameSpace} from "@shared/stores/organizational-unit/shared-organizational-unit.action"; +import {SharedPreservationPolicyState} from "@shared/stores/preservation-policy/shared-preservation-policy.state"; +import {SharedResearchDomainAction} from "@shared/stores/research-domain/shared-research-domain.action"; +import {SharedRoleState} from "@shared/stores/role/shared-role.state"; +import {SharedSubmissionPolicyState} from "@shared/stores/submission-policy/shared-submission-policy.state"; +import {Observable} from "rxjs"; +import { + MARK_AS_TRANSLATABLE, + MemoizedUtil, + Override, + OverrideProperty, + ResourceNameSpace, +} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-organizational-unit-detail-edit-routable", + templateUrl: "./admin-organizational-unit-detail-edit.routable.html", + styleUrls: ["../../../../../../shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminOrganizationalUnitDetailEditRoutable extends SharedAbstractDetailEditCommonRoutable<OrganizationalUnit, AdminOrganizationalUnitStateModel> implements OnInit { + @Select(AdminOrganizationalUnitState.isLoadingWithDependency) isLoadingWithDependencyObs: Observable<boolean>; + @Select(AdminOrganizationalUnitState.isReadyToBeDisplayed) isReadyToBeDisplayedObs: Observable<boolean>; + listSubmissionPoliciesObs: Observable<SubmissionPolicy[]> = MemoizedUtil.list(this._store, SharedSubmissionPolicyState); + listPreservationPoliciesObs: Observable<PreservationPolicy[]> = MemoizedUtil.list(this._store, SharedPreservationPolicyState); + listRoleObs: Observable<Role[]> = MemoizedUtil.list(this._store, SharedRoleState); + + @OverrideProperty() + checkAvailableResourceNameSpace: ResourceNameSpace = sharedOrgUnitActionNameSpace; + + readonly KEY_PARAM_NAME: keyof OrganizationalUnit & string = "name"; + + private currentTab: Tab; + + listTabs: Tab[] = [ + { + id: TabEnum.DATA, + suffixUrl: AdminRoutesEnum.organizationalUnitData, + icon: IconNameEnum.metadata, + titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.tab.detail"), + route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitData], + }, + { + id: TabEnum.ADDITIONAL_FIELDS_FORM, + suffixUrl: AdminRoutesEnum.organizationalUnitAdditionalFieldsForm, + icon: IconNameEnum.files, + titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.tab.additionalFieldsForm"), + route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitAdditionalFieldsForm], + }, + ]; + + private get rootUrl(): string[] { + return [AppRoutesEnum.admin, AdminRoutesEnum.organizationalUnit, AdminRoutesEnum.organizationalUnitDetail, this._resId]; + } + + listExtraButtons: ExtraButtonToolbar<OrganizationalUnit>[] = [ + { + color: "primary", + typeButton: "flat-button", + icon: IconNameEnum.save, + labelToTranslate: (current) => MARK_AS_TRANSLATABLE("app.navigation.button.save"), + order: 40, + callback: () => this._adminOrganizationalUnitService?.formPresentational?.onSubmit(), + displayCondition: () => this.isEdit, + disableCondition: () => this._adminOrganizationalUnitService?.formPresentational?.form?.pristine || this._adminOrganizationalUnitService?.formPresentational?.form?.invalid, + }, + { + color: "primary", + typeButton: "button", + icon: IconNameEnum.create, + labelToTranslate: (current) => MARK_AS_TRANSLATABLE("admin.organizationalUnit.button.createAdditionalFieldsForm"), + order: 40, + callback: () => this.createAdditionalFieldsFromScratch(this._resId), + }, + ]; + + constructor(protected readonly _store: Store, + protected readonly _route: ActivatedRoute, + protected readonly _actions$: Actions, + protected readonly _changeDetector: ChangeDetectorRef, + public readonly _dialog: MatDialog, + private readonly _adminOrganizationalUnitService: AdminOrganizationalUnitService) { + super(_store, _route, _actions$, _changeDetector, _dialog, LocalStateEnum.admin_organizationalUnit, adminOrganizationalUnitActionNameSpace, LocalStateEnum.admin); + } + + ngOnInit(): void { + super.ngOnInit(); + this._store.dispatch(new SharedResearchDomainAction.GetSource()); + } + + setCurrentTab($event: Tab): void { + this.currentTab = $event; + } + + protected getSubResourceWithParentId(id: string): void { + } + + private createAdditionalFieldsFromScratch(_resId: string): void { + this._dialog.open(AdminOrganizationalUnitAdditionalFieldsDetailCreateUpdateDialog, { + data: { + parentResId: this._resId, + additionalFieldsForm: undefined, + mode: "create", + } as AdminOrganizationalUnitAdditionalFieldsDetailCreateEditDialogData, + }); + } + + @Override() + backToDetail(): void { + super.backToDetail([...this.rootUrl, AdminRoutesEnum.organizationalUnitData]); + } +} + +enum TabEnum { + DATA = "DATA", + ADDITIONAL_FIELDS_FORM = "ADDITIONAL_FIELDS_FORM", +} diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.html b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.html new file mode 100644 index 0000000000000000000000000000000000000000..308654050d5d172c705395a0f1cc27809b912f15 --- /dev/null +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.html @@ -0,0 +1,28 @@ +<div class="wrapper" + [dlcmSpinner]="isLoadingWithDependencyObs | async" +> + <dlcm-admin-organizational-unit-form #formPresentational + [solidifyFocusFirstElement]="isEdit" + *ngIf="isReadyToBeDisplayedObs | async" + [model]="currentObs| async" + [selectedSubmissionPolicies]="selectedSubmissionPoliciesObs | async" + [selectedPreservationPolicies]="selectedPreservationPoliciesObs | async" + [selectedDisseminationPolicies]="selectedDisseminationPoliciesObs | async" + [selectedPersonRole]="selectedPersonRoleObs | async" + [selectedFundingAgencies]="selectedFundingAgenciesObs | async" + [selectedInstitutions]="selectedInstitutionsObs | async" + [listSubmissionPolicies]="listSubmissionPoliciesObs | async" + [listPreservationPolicies]="listPreservationPoliciesObs | async" + [listDisseminationPolicies]="listDisseminationPoliciesObs | async" + [researchDomainSources]="researchDomainSourcesObs | async" + [defaultPlatformLicenseId]="(systemPropertyObs | async)?.defaultLicense" + [listRole]="listRoleObs | async" + [readonly]="!isEdit" + [editAvailable]="editAvailable" + (checkAvailableChange)="checkAvailable($event)" + (submitChange)="update($event)" + (dirtyChange)="updateCanDeactivate($event)" + (navigate)="navigate($event)" + (editChange)="edit()" + ></dlcm-admin-organizational-unit-form> +</div> diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.ts b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.ts similarity index 80% rename from src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.ts rename to src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.ts index 7448bd876f4a9d126373e016feb20b6a702db58f..c574a3c5a4c185ef3503ad87c8f313c404098461 100644 --- a/src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.ts +++ b/src/app/features/admin/organizational-unit/components/routables/admin-organizational-unit-metadata/admin-organizational-unit-metadata.routable.ts @@ -1,4 +1,6 @@ import {PersonRole} from "@admin/models/person-role.model"; +import {AdminOrganizationalUnitFormPresentational} from "@admin/organizational-unit/components/presentationals/admin-organizational-unit-form/admin-organizational-unit-form.presentational"; +import {AdminOrganizationalUnitService} from "@admin/organizational-unit/services/admin-organizational-unit.service"; import {adminOrganizationalUnitActionNameSpace} from "@admin/organizational-unit/stores/admin-organizational-unit.action"; import { AdminOrganizationalUnitState, @@ -21,6 +23,7 @@ import { ChangeDetectorRef, Component, OnInit, + ViewChild, } from "@angular/core"; import {MatDialog} from "@angular/material/dialog"; import {ActivatedRoute} from "@angular/router"; @@ -35,6 +38,7 @@ import { SubmissionPolicy, SystemProperty, } from "@models"; +import {Navigate} from "@ngxs/router-plugin"; import { Actions, Select, @@ -42,6 +46,11 @@ import { } from "@ngxs/store"; import {SharedAbstractDetailEditCommonRoutable} from "@shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable"; import {LocalStateEnum} from "@shared/enums/local-state.enum"; +import { + AdminRoutesEnum, + DepositRoutesEnum, + RoutesEnum, +} from "@shared/enums/routes.enum"; import {SharedDisseminationPolicyState} from "@shared/stores/dissemination-policy/shared-dissemination-policy.state"; import {sharedOrgUnitActionNameSpace} from "@shared/stores/organizational-unit/shared-organizational-unit.action"; import {SharedPreservationPolicyState} from "@shared/stores/preservation-policy/shared-preservation-policy.state"; @@ -51,22 +60,25 @@ import {SharedRoleState} from "@shared/stores/role/shared-role.state"; import {SharedSubmissionPolicyState} from "@shared/stores/submission-policy/shared-submission-policy.state"; import {Observable} from "rxjs"; import { - MARK_AS_TRANSLATABLE, + filter, + take, + tap, +} from "rxjs/operators"; +import { + isNotNullNorUndefined, MemoizedUtil, + Override, OverrideProperty, ResourceNameSpace, } from "solidify-frontend"; -import {Tab} from "@shared/components/containers/shared-tabs/shared-tabs.container"; -import {AdminRoutesEnum, AppRoutesEnum, DepositRoutesEnum} from "@shared/enums/routes.enum"; -import {IconNameEnum} from "@shared/enums/icon-name.enum"; @Component({ selector: "dlcm-admin-organizational-unit-detail-edit-routable", - templateUrl: "./admin-organizational-unit-detail-edit.routable.html", + templateUrl: "./admin-organizational-unit-metadata.routable.html", styleUrls: ["../../../../../../shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable.scss"], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class AdminOrganizationalUnitDetailEditRoutable extends SharedAbstractDetailEditCommonRoutable<OrganizationalUnit, AdminOrganizationalUnitStateModel> implements OnInit { +export class AdminOrganizationalUnitMetadataRoutable extends SharedAbstractDetailEditCommonRoutable<OrganizationalUnit, AdminOrganizationalUnitStateModel> implements OnInit { @Select(AdminOrganizationalUnitState.isLoadingWithDependency) isLoadingWithDependencyObs: Observable<boolean>; @Select(AdminOrganizationalUnitState.isReadyToBeDisplayed) isReadyToBeDisplayedObs: Observable<boolean>; selectedSubmissionPoliciesObs: Observable<SubmissionPolicy[]> = MemoizedUtil.selected(this._store, AdminOrganizationalUnitSubmissionPolicyState); @@ -85,40 +97,32 @@ export class AdminOrganizationalUnitDetailEditRoutable extends SharedAbstractDet @OverrideProperty() checkAvailableResourceNameSpace: ResourceNameSpace = sharedOrgUnitActionNameSpace; - readonly KEY_PARAM_NAME: keyof OrganizationalUnit & string = "name"; - - private get rootUrl(): string[] { - return [AppRoutesEnum.admin, AdminRoutesEnum.organizationalUnit]; - } + @OverrideProperty() + @ViewChild("formPresentational") + readonly formPresentational: AdminOrganizationalUnitFormPresentational; - listTabs: Tab[] = [ - { - id: TabEnum.METADATA, - suffixUrl: DepositRoutesEnum.metadata, - icon: IconNameEnum.metadata, - titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.detail"), - route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitDetail, this._resId], - }, - { - id: TabEnum.ADDITIONAL_FIELDS_FORM, - suffixUrl: DepositRoutesEnum.metadata, - icon: IconNameEnum.files, - titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFieldsForm"), - route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitAdditionalFieldsForm, this._resId], - }, - ]; + readonly KEY_PARAM_NAME: keyof OrganizationalUnit & string = "name"; - constructor(protected _store: Store, - protected _route: ActivatedRoute, + constructor(protected readonly _store: Store, + protected readonly _route: ActivatedRoute, protected readonly _actions$: Actions, protected readonly _changeDetector: ChangeDetectorRef, - public _dialog: MatDialog) { + public readonly _dialog: MatDialog, + private readonly _adminOrganizationalUnitService: AdminOrganizationalUnitService) { super(_store, _route, _actions$, _changeDetector, _dialog, LocalStateEnum.admin_organizationalUnit, adminOrganizationalUnitActionNameSpace, LocalStateEnum.admin); } ngOnInit(): void { super.ngOnInit(); this._store.dispatch(new SharedResearchDomainAction.GetSource()); + + this.subscribe(this.isReadyToBeDisplayedObs.pipe( + filter(ready => ready && isNotNullNorUndefined(this.formPresentational)), + take(1), + tap(ready => { + this._adminOrganizationalUnitService.formPresentational = this.formPresentational; + })), + ); } getSubResourceWithParentId(id: string): void { @@ -129,9 +133,16 @@ export class AdminOrganizationalUnitDetailEditRoutable extends SharedAbstractDet this._store.dispatch(new AdminOrganizationalUnitFundingAgencyAction.GetAll(id)); this._store.dispatch(new AdminOrganizationalUnitInstitutionAction.GetAll(id)); } -} -enum TabEnum { - METADATA = "METADATA", - ADDITIONAL_FIELDS_FORM = "ADDITIONAL_FIELDS_FORM", -} + @Override() + edit(): void { + if (this.isEdit) { + return; + } + this._store.dispatch(new Navigate([RoutesEnum.adminOrganizationalUnitDetail, this._resId, AdminRoutesEnum.organizationalUnitData, DepositRoutesEnum.edit])); + } + + @Override() + protected cleanState(): void { + } +} \ No newline at end of file diff --git a/src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.html b/src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.html deleted file mode 100644 index 0d68ce055329653e32b0d0af1f7333c609f97388..0000000000000000000000000000000000000000 --- a/src/app/features/admin/organizational-unit/components/routables/admin-orgunit-detail-edit/admin-organizational-unit-detail-edit.routable.html +++ /dev/null @@ -1,48 +0,0 @@ -<lib-empty-container - cdkTrapFocus - solidifyShortCuts - [solidifyFocusFirstElement]="true" - (onEscape)="backToList()" -> - <dlcm-shared-banner-edit-mode [isEdit]="isEdit"></dlcm-shared-banner-edit-mode> - - - <dlcm-shared-button-toolbar-detail [mode]="isEdit ? 'edit' : 'detail'" - [formPresentational]="formPresentational" - [currentModel]="currentObs | async" - (editChange)="edit()" - (deleteChange)="delete()" - (backToDetailChange)="backToDetail()" - (backToListChange)="backToList()" - > - </dlcm-shared-button-toolbar-detail> - - <div class="wrapper" - [dlcmSpinner]="isLoadingWithDependencyObs | async" - > - <dlcm-admin-organizational-unit-form #formPresentational - [solidifyFocusFirstElement]="isEdit" - *ngIf="isReadyToBeDisplayedObs | async" - [model]="currentObs| async" - [selectedSubmissionPolicies]="selectedSubmissionPoliciesObs | async" - [selectedPreservationPolicies]="selectedPreservationPoliciesObs | async" - [selectedDisseminationPolicies]="selectedDisseminationPoliciesObs | async" - [selectedPersonRole]="selectedPersonRoleObs | async" - [selectedFundingAgencies]="selectedFundingAgenciesObs | async" - [selectedInstitutions]="selectedInstitutionsObs | async" - [listSubmissionPolicies]="listSubmissionPoliciesObs | async" - [listPreservationPolicies]="listPreservationPoliciesObs | async" - [listDisseminationPolicies]="listDisseminationPoliciesObs | async" - [researchDomainSources]="researchDomainSourcesObs | async" - [defaultPlatformLicenseId]="(systemPropertyObs | async)?.defaultLicense" - [listRole]="listRoleObs | async" - [readonly]="!isEdit" - [editAvailable]="editAvailable" - (checkAvailableChange)="checkAvailable($event)" - (submitChange)="update($event)" - (dirtyChange)="updateCanDeactivate($event)" - (navigate)="navigate($event)" - (editChange)="edit()" - ></dlcm-admin-organizational-unit-form> - </div> -</lib-empty-container> diff --git a/src/app/features/admin/organizational-unit/services/admin-organizational-unit.service.ts b/src/app/features/admin/organizational-unit/services/admin-organizational-unit.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..e9d17eaf6fffed9d35c53591407e2f07b8df5bc9 --- /dev/null +++ b/src/app/features/admin/organizational-unit/services/admin-organizational-unit.service.ts @@ -0,0 +1,9 @@ +import {AdminOrganizationalUnitFormPresentational} from "@admin/organizational-unit/components/presentationals/admin-organizational-unit-form/admin-organizational-unit-form.presentational"; +import {Injectable} from "@angular/core"; + +@Injectable({ + providedIn: "root", +}) +export class AdminOrganizationalUnitService { + public formPresentational: AdminOrganizationalUnitFormPresentational; +} diff --git a/src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts b/src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts similarity index 95% rename from src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts rename to src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts index 280943f57da625fb16dd77fe3039d1b7e6ae1003..df96ccc64ccf223a8dc7a160e84a3d47c4d11de4 100644 --- a/src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts +++ b/src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action.ts @@ -1,9 +1,11 @@ -import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; import {AdditionalFieldsForm} from "@models"; +import {LocalStateEnum} from "@shared/enums/local-state.enum"; import { - BaseAction, BaseSubAction, + BaseAction, + BaseSubAction, CompositionAction, - CompositionNameSpace, QueryParameters, + CompositionNameSpace, + QueryParameters, TypeDefaultAction, } from "solidify-frontend"; diff --git a/src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts b/src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts similarity index 70% rename from src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts rename to src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts index 3481898ac97b8766d7e5bbfb0c7b880911d38a20..8f6d6d472e56de33d5f493a59ee51491db6f3bf2 100644 --- a/src/app/features/admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts +++ b/src/app/features/admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state.ts @@ -1,35 +1,43 @@ +import { + AdminOrganizationalUnitAdditionalFieldsFormAction, + adminOrganizationalUnitAdditionalFieldsFormActionNameSpace, +} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; import {Injectable} from "@angular/core"; -import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; import {AdditionalFieldsForm} from "@models"; import { Action, Actions, - State, StateContext, + State, + StateContext, Store, } from "@ngxs/store"; import {ApiResourceNameEnum} from "@shared/enums/api-resource-name.enum"; import {AdminResourceApiEnum} from "@shared/enums/api.enum"; +import {LocalStateEnum} from "@shared/enums/local-state.enum"; +import {Observable} from "rxjs"; +import { + catchError, + tap, +} from "rxjs/operators"; import { ApiService, CompositionState, CompositionStateModel, defaultCompositionStateInitValue, - NotificationService, QueryParameters, SolidifyStateError, + MARK_AS_TRANSLATABLE, + NotificationService, + OverrideDefaultAction, + QueryParameters, + SolidifyStateError, } from "solidify-frontend"; -import {Observable} from "rxjs"; -import {catchError, tap} from "rxjs/operators"; -import GetCurrentMetadataFormSuccess = AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormSuccess; import GetCurrentMetadataFormFail = AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormFail; -import { - AdminOrganizationalUnitAdditionalFieldsFormAction, - adminOrganizationalUnitAdditionalFieldsFormActionNameSpace -} from "@admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; +import GetCurrentMetadataFormSuccess = AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormSuccess; export const defaultAdminOrganizationalUnitAdditionalFieldsFormStateModel: () => AdminOrganizationalUnitAdditionalFieldsFormStateModel = () => ({ ...defaultCompositionStateInitValue(), queryParameters: new QueryParameters(20), - loaded: false + loaded: false, }); export interface AdminOrganizationalUnitAdditionalFieldsFormStateModel extends CompositionStateModel<AdditionalFieldsForm> { @@ -61,15 +69,16 @@ export class AdminOrganizationalUnitAdditionalFieldsFormState extends Compositio @Action(AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataForm) getCurrentMetadataForm(ctx: StateContext<AdminOrganizationalUnitAdditionalFieldsFormStateModel>, action: AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataForm): Observable<AdditionalFieldsForm> { ctx.patchState({ - isLoadingCounter: ctx.getState().isLoadingCounter + 1 + isLoadingCounter: ctx.getState().isLoadingCounter + 1, }); - return this.apiService.getByIdInPath<AdditionalFieldsForm>(`${this._urlResource}/${action.parentId}/${this._resourceName}/${ApiResourceNameEnum.CURRENT_VERSION}`).pipe( - tap(result => ctx.dispatch(new GetCurrentMetadataFormSuccess(action, result))), - catchError(error => { - ctx.dispatch(new GetCurrentMetadataFormFail(action)); - throw new SolidifyStateError(this, error); - }) - ); + return this.apiService.getByIdInPath<AdditionalFieldsForm>(`${this._urlResource}/${action.parentId}/${this._resourceName}/${ApiResourceNameEnum.CURRENT_VERSION}`) + .pipe( + tap(result => ctx.dispatch(new GetCurrentMetadataFormSuccess(action, result))), + catchError(error => { + ctx.dispatch(new GetCurrentMetadataFormFail(action)); + throw new SolidifyStateError(this, error); + }), + ); } @Action(AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormSuccess) @@ -77,14 +86,21 @@ export class AdminOrganizationalUnitAdditionalFieldsFormState extends Compositio ctx.patchState({ isLoadingCounter: ctx.getState().isLoadingCounter - 1, current: action.currentForm, - loaded: true + loaded: true, }); } @Action(AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormFail) getCurrentMetadataFormFail(ctx: StateContext<AdminOrganizationalUnitAdditionalFieldsFormStateModel>, action: AdminOrganizationalUnitAdditionalFieldsFormAction.GetCurrentMetadataFormFail): void { ctx.patchState({ - isLoadingCounter: ctx.getState().isLoadingCounter - 1 + isLoadingCounter: ctx.getState().isLoadingCounter - 1, }); } + + @OverrideDefaultAction() + @Action(AdminOrganizationalUnitAdditionalFieldsFormAction.CreateSuccess) + createSuccess(ctx: StateContext<AdminOrganizationalUnitAdditionalFieldsFormStateModel>, action: AdminOrganizationalUnitAdditionalFieldsFormAction.CreateSuccess): void { + super.createSuccess(ctx, action); + this.notificationService.showError(MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFieldsForm.notification.unableToCreate")); + } } diff --git a/src/app/features/admin/organizational-unit/stores/admin-organizational-unit.state.ts b/src/app/features/admin/organizational-unit/stores/admin-organizational-unit.state.ts index 6f8c283556e50ea146f0b51822c94feaad56833d..c486659ba71c68bb4f4d79ee08f2d2c5ef298ebe 100644 --- a/src/app/features/admin/organizational-unit/stores/admin-organizational-unit.state.ts +++ b/src/app/features/admin/organizational-unit/stores/admin-organizational-unit.state.ts @@ -1,3 +1,8 @@ +import { + AdminOrganizationalUnitAdditionalFieldsFormState, + AdminOrganizationalUnitAdditionalFieldsFormStateModel, + defaultAdminOrganizationalUnitAdditionalFieldsFormStateModel, +} from "@admin/organizational-unit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; import { AdminOrganizationalUnitAction, adminOrganizationalUnitActionNameSpace, @@ -32,11 +37,6 @@ import { AdminOrganizationalUnitSubmissionPolicyState, AdminOrganizationalUnitSubmissionPolicyStateModel, } from "@admin/organizational-unit/stores/submission-policy/admin-organizational-unit-submission-policy.state"; -import { - AdminOrganizationalUnitAdditionalFieldsFormState, - AdminOrganizationalUnitAdditionalFieldsFormStateModel, - defaultAdminOrganizationalUnitAdditionalFieldsFormStateModel -} from "@admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; import {Injectable} from "@angular/core"; import {DepositStateModel} from "@deposit/stores/deposit.state"; import {OrganizationalUnit} from "@models"; @@ -51,7 +51,10 @@ import { } from "@ngxs/store"; import {AdminResourceApiEnum} from "@shared/enums/api.enum"; import {LocalStateEnum} from "@shared/enums/local-state.enum"; -import {RoutesEnum} from "@shared/enums/routes.enum"; +import { + AdminRoutesEnum, + RoutesEnum, +} from "@shared/enums/routes.enum"; import {SharedDisseminationPolicyAction} from "@shared/stores/dissemination-policy/shared-dissemination-policy.action"; import {SharedPreservationPolicyAction} from "@shared/stores/preservation-policy/shared-preservation-policy.action"; import {SharedRoleAction} from "@shared/stores/role/shared-role.action"; @@ -61,7 +64,6 @@ import {tap} from "rxjs/internal/operators/tap"; import { ApiService, defaultAssociationStateInitValue, - defaultCompositionStateInitValue, defaultRelation2TiersStateInitValue, defaultRelation3TiersStateInitValue, defaultResourceStateInitValue, @@ -100,7 +102,7 @@ export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<Or admin_organizationalUnit_personRole: {...defaultRelation3TiersStateInitValue()}, admin_organizationalUnit_fundingAgency: {...defaultAssociationStateInitValue()}, admin_organizationalUnit_institution: {...defaultAssociationStateInitValue()}, - admin_organizationalUnit_additionalFieldsForm: {...defaultAdminOrganizationalUnitAdditionalFieldsFormStateModel()} + admin_organizationalUnit_additionalFieldsForm: {...defaultAdminOrganizationalUnitAdditionalFieldsFormStateModel()}, }, children: [ AdminOrganizationalUnitSubmissionPolicyState, @@ -109,7 +111,7 @@ export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<Or AdminOrganizationalUnitPersonRoleState, AdminOrganizationalUnitFundingAgencyState, AdminOrganizationalUnitInstitutionState, - AdminOrganizationalUnitAdditionalFieldsFormState + AdminOrganizationalUnitAdditionalFieldsFormState, ], }) export class AdminOrganizationalUnitState extends ResourceState<AdminOrganizationalUnitStateModel, OrganizationalUnit> { @@ -120,8 +122,8 @@ export class AdminOrganizationalUnitState extends ResourceState<AdminOrganizatio protected actions$: Actions) { super(apiService, store, notificationService, actions$, { nameSpace: adminOrganizationalUnitActionNameSpace, - routeRedirectUrlAfterSuccessCreateAction: (resId: string) => RoutesEnum.adminOrganizationalUnitDetail + urlSeparator + resId, - routeRedirectUrlAfterSuccessUpdateAction: (resId: string) => RoutesEnum.adminOrganizationalUnitDetail + urlSeparator + resId, + routeRedirectUrlAfterSuccessCreateAction: (resId: string) => RoutesEnum.adminOrganizationalUnitDetail + urlSeparator + resId + urlSeparator + AdminRoutesEnum.organizationalUnitData, + routeRedirectUrlAfterSuccessUpdateAction: (resId: string) => RoutesEnum.adminOrganizationalUnitDetail + urlSeparator + resId + urlSeparator + AdminRoutesEnum.organizationalUnitData, routeRedirectUrlAfterSuccessDeleteAction: RoutesEnum.adminOrganizationalUnit, notificationResourceCreateSuccessTextToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.notification.resource.create"), notificationResourceDeleteSuccessTextToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.notification.resource.delete"), diff --git a/src/app/features/admin/orgunit/admin-orgunit.module.ts b/src/app/features/admin/orgunit/admin-orgunit.module.ts deleted file mode 100644 index 9d60c0fe5ae8620251cbba7bf28339593e85bcad..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/admin-orgunit.module.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {AdminOrgunitRoutingModule} from "@admin/orgunit/admin-orgunit-routing.module"; -import {AdminOrgunitDeleteDialog} from "@admin/orgunit/components/dialogs/admin-orgunit-delete/admin-orgunit-delete.dialog"; -import {AdminOrgunitFormPresentational} from "@admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational"; -import {AdminOrgunitCreateRoutable} from "@admin/orgunit/components/routables/admin-orgunit-create/admin-orgunit-create.routable"; -import {AdminOrgunitDetailEditRoutable} from "@admin/orgunit/components/routables/admin-orgunit-detail-edit/admin-orgunit-detail-edit.routable"; -import {AdminOrgunitListRoutable} from "@admin/orgunit/components/routables/admin-orgunit-list/admin-orgunit-list.routable"; -import {AdminOrganizationalUnitState} from "@admin/orgunit/stores/admin-organizational-unit.state"; -import {NgModule} from "@angular/core"; -import {SharedModule} from "@app/shared/shared.module"; -import {TranslateModule} from "@ngx-translate/core"; -import {NgxsModule} from "@ngxs/store"; -import {AdminOrgUnitAdditionalFieldsFormListRoutable} from "@admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form-list.routable"; -import {AdminOrgUnitTabsRoutable} from "@admin/orgunit/components/routables/admin-orgunit-tabs/admin-orgunit-tabs.routable"; - -const routables = [ - AdminOrgunitCreateRoutable, - AdminOrgunitDetailEditRoutable, - AdminOrgunitListRoutable, - AdminOrgUnitAdditionalFieldsFormListRoutable, - AdminOrgUnitTabsRoutable -]; -const containers = []; -const dialogs = [ - AdminOrgunitDeleteDialog, -]; -const presentationals = [ - AdminOrgunitFormPresentational, -]; - -@NgModule({ - declarations: [ - ...routables, - ...containers, - ...dialogs, - ...presentationals, - ], - imports: [ - SharedModule, - AdminOrgunitRoutingModule, - TranslateModule.forChild({}), - NgxsModule.forFeature([ - AdminOrganizationalUnitState, - ]), - ], - entryComponents: [ - ...dialogs, - ], - exports: [ - ...routables, - ], - providers: [], -}) -export class AdminOrgunitModule { -} diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form-list.routable.ts b/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form-list.routable.ts deleted file mode 100644 index f73cf460d9d07dd62f0cf470034a8ef186ea9c72..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form-list.routable.ts +++ /dev/null @@ -1,71 +0,0 @@ -import {ChangeDetectionStrategy, ChangeDetectorRef, Component} from "@angular/core"; -import {AdditionalFieldsForm} from "@models"; -import {CompositionState, isNullOrUndefined, MARK_AS_TRANSLATABLE, MemoizedUtil, OrderEnum, QueryParameters} from "solidify-frontend"; -import {FieldTypeEnum} from "@shared/enums/field-type.enum"; -import {DataTableColumns} from "@shared/models/data-table-columns.model"; -import {Store} from "@ngxs/store"; -import {Observable} from "rxjs"; -import { - AdminOrganizationalUnitAdditionalFieldsFormState, -} from "@admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.state"; -import { - AdminOrganizationalUnitAdditionalFieldsFormAction, -} from "@admin/orgunit/stores/additional-fields-form/admin-organizational-unit-additional-fields-form.action"; -import {AppRoutesEnum} from "@shared/enums/routes.enum"; -import {ActivatedRoute} from "@angular/router"; - -@Component({ - selector: "dlcm-admin-orgunit-additional-fields-form-routable", - templateUrl: "./admin-orgunit-additional-fields-form.routable.html", - styleUrls: ["./admin-orgunit-additional-fields-form.routable.scss"], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class AdminOrgUnitAdditionalFieldsFormListRoutable { - isLoadingObs: Observable<boolean> = MemoizedUtil.isLoading(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); - - _orgUnitResId: string; - _resId: string; - - additionalFieldsFormObs: Observable<AdditionalFieldsForm[]> = CompositionState.list(this._store, AdminOrganizationalUnitAdditionalFieldsFormState); - queryParametersObs: Observable<QueryParameters> = MemoizedUtil.select(this._store, AdminOrganizationalUnitAdditionalFieldsFormState, (state) => state.queryParameters); - - columns: DataTableColumns<AdditionalFieldsForm>[]; - - constructor(protected readonly _store: Store, protected readonly _route: ActivatedRoute, private readonly _changeDetector: ChangeDetectorRef) { - this.retrieveResIdFromUrl(); - this.defineColumns(); - } - - protected retrieveResIdFromUrl(): void { - this._orgUnitResId = this._route.snapshot.paramMap.get(AppRoutesEnum.paramIdWithoutPrefixParam); - if (isNullOrUndefined(this._orgUnitResId)) { - this._orgUnitResId = this._route.parent.snapshot.paramMap.get(AppRoutesEnum.paramIdWithoutPrefixParam); - } - } - - onQueryParametersEvent(queryParameters: QueryParameters): void { - this._store.dispatch(new AdminOrganizationalUnitAdditionalFieldsFormAction.ChangeQueryParameters(this._orgUnitResId, queryParameters)); - this._changeDetector.detectChanges(); // Allow to display spinner the first time - } - - defineColumns(): void { - this.columns = [ - { - field: "name", - header: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.table.header.name"), - type: FieldTypeEnum.string, - order: OrderEnum.none, - isFilterable: true, - isSortable: true, - }, - { - field: "creation.when" as any, - header: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFields.table.header.creation.when"), - type: FieldTypeEnum.datetime, - order: OrderEnum.ascending, - isFilterable: true, - isSortable: true, - }, - ]; - } -} diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.scss b/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.scss deleted file mode 100644 index b9bc65ea450fe2c81372502f895811531a324ae8..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-additional-fields-form-list/admin-orgunit-additional-fields-form.routable.scss +++ /dev/null @@ -1,3 +0,0 @@ -:host { - width: 100%; -} diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-detail-edit/admin-orgunit-detail-edit.routable.html b/src/app/features/admin/orgunit/components/routables/admin-orgunit-detail-edit/admin-orgunit-detail-edit.routable.html deleted file mode 100644 index 04c0d0e106af316005f836b9e3adf103da39f07d..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-detail-edit/admin-orgunit-detail-edit.routable.html +++ /dev/null @@ -1,49 +0,0 @@ - -<lib-empty-container - cdkTrapFocus - solidifyShortCuts - [solidifyFocusFirstElement]="true" - (onEscape)="backToList()" -> - <dlcm-shared-banner-edit-mode [isEdit]="isEdit"></dlcm-shared-banner-edit-mode> - - - <dlcm-button-toolbar-detail [mode]="isEdit ? 'edit' : 'detail'" - [formPresentational]="formPresentational" - [currentModel]="currentObs | async" - (editChange)="edit()" - (deleteChange)="delete()" - (backToDetailChange)="backToDetail()" - (backToListChange)="backToList()" - > - </dlcm-button-toolbar-detail> - - <div class="wrapper" - [dlcmSpinner]="isLoadingWithDependencyObs | async" - > - <dlcm-admin-orgunit-form #formPresentational - [solidifyFocusFirstElement]="isEdit" - *ngIf="isReadyToBeDisplayedObs | async" - [model]="currentObs| async" - [selectedSubmissionPolicies]="selectedSubmissionPoliciesObs | async" - [selectedPreservationPolicies]="selectedPreservationPoliciesObs | async" - [selectedDisseminationPolicies]="selectedDisseminationPoliciesObs | async" - [selectedPersonRole]="selectedPersonRoleObs | async" - [selectedFundingAgencies]="selectedFundingAgenciesObs | async" - [selectedInstitutions]="selectedInstitutionsObs | async" - [listSubmissionPolicies]="listSubmissionPoliciesObs | async" - [listPreservationPolicies]="listPreservationPoliciesObs | async" - [listDisseminationPolicies]="listDisseminationPoliciesObs | async" - [researchDomainSources]="researchDomainSourcesObs | async" - [defaultPlatformLicenseId]="(systemPropertyObs | async)?.defaultLicense" - [listRole]="listRoleObs | async" - [readonly]="!isEdit" - [editAvailable]="editAvailable" - (checkAvailableChange)="checkAvailable($event)" - (submitChange)="update($event)" - (dirtyChange)="updateCanDeactivate($event)" - (navigate)="navigate($event)" - (editChange)="edit()" - ></dlcm-admin-orgunit-form> - </div> -</lib-empty-container> diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.html b/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.html deleted file mode 100644 index 5315798bffdb45a6e2214f74ffb807517be4be3c..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.html +++ /dev/null @@ -1,13 +0,0 @@ - -<div> -org unit id: {{ this._resId }} -</div> - -<dlcm-shared-tabs-container [tabs]="listTabs" - [isLoading]="isLoadingObs | async" - (tabChange)="navigateToTab($event)" -></dlcm-shared-tabs-container> - -<div class="tab-content"> - <router-outlet></router-outlet> -</div> diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.scss b/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.scss deleted file mode 100644 index 5aa6f0b09cc551128023d674b4281549a6335bff..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-org-unit-tabs.routable.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import "../sass/abstracts/variables"; -@import "../sass/abstracts/mixins"; -@import "./../../../../../../shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable"; - -:host { - -} diff --git a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-orgunit-tabs.routable.ts b/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-orgunit-tabs.routable.ts deleted file mode 100644 index 65caf5ac914d35d4abeae47b1c2e7e54e547c33a..0000000000000000000000000000000000000000 --- a/src/app/features/admin/orgunit/components/routables/admin-orgunit-tabs/admin-orgunit-tabs.routable.ts +++ /dev/null @@ -1,80 +0,0 @@ -import {SharedAbstractDetailEditRoutable} from "@shared/components/routables/shared-abstract-detail-edit/shared-abstract-detail-edit.routable"; -import {OrganizationalUnit} from "@models"; -import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit} from "@angular/core"; -import {AdminOrganizationalUnitStateModel} from "@admin/orgunit/stores/admin-organizational-unit.state"; -import {Actions, Store} from "@ngxs/store"; -import {ActivatedRoute, Router} from "@angular/router"; -import {MatDialog} from "@angular/material/dialog"; -import {SecurityService} from "@shared/services/security.service"; -import {LocalStateEnum} from "@shared/enums/local-state.enum"; -import {adminOrgUnitActionNameSpace} from "@admin/orgunit/stores/admin-organizational-unit.action"; -import {Tab} from "@shared/components/containers/shared-tabs/shared-tabs.container"; -import {AdminRoutesEnum, AppRoutesEnum, DepositRoutesEnum, RoutesEnum} from "@shared/enums/routes.enum"; -import {IconNameEnum} from "@shared/enums/icon-name.enum"; -import {MARK_AS_TRANSLATABLE} from "solidify-frontend"; -import {DipTabEnum} from "@preservation/dip/enums/dip-tab.enum"; -import {DipHelper} from "@preservation/dip/helpers/dip.helper"; -import {Navigate} from "@ngxs/router-plugin"; - -@Component({ - selector: "dlcm-admin-org-unit-tabs-routable", - templateUrl: "./admin-org-unit-tabs.routable.html", - styleUrls: ["./admin-org-unit-tabs.routable.scss"], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class AdminOrgUnitTabsRoutable extends SharedAbstractDetailEditRoutable<OrganizationalUnit, AdminOrganizationalUnitStateModel> implements OnInit { - readonly KEY_PARAM_NAME: keyof OrganizationalUnit & string; - - listTabs: Tab[] = [ - { - id: TabEnum.METADATA, - suffixUrl: DepositRoutesEnum.metadata, - icon: IconNameEnum.metadata, - titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.detail"), - route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitDetail, this._resId, AdminRoutesEnum.organizationalUnitDetail], - }, - { - id: TabEnum.ADDITIONAL_FIELDS_FORM, - suffixUrl: DepositRoutesEnum.metadata, - icon: IconNameEnum.files, - titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.additionalFieldsForm"), - route: () => [...this.rootUrl, AdminRoutesEnum.organizationalUnitDetail, this._resId, AdminRoutesEnum.organizationalUnitAdditionalFieldsForm], - }, - ]; - - private get rootUrl(): string[] { - return [AppRoutesEnum.admin, AdminRoutesEnum.organizationalUnit]; - } - - constructor(protected readonly _store: Store, - protected readonly _route: ActivatedRoute, - protected readonly _actions$: Actions, - protected readonly _changeDetector: ChangeDetectorRef, - protected readonly _dialog: MatDialog, - protected readonly _router: Router, - private readonly _securityService: SecurityService) { - super(_store, _route, _actions$, _changeDetector, _dialog, LocalStateEnum.admin_organizationalUnit, adminOrgUnitActionNameSpace, LocalStateEnum.admin); - this.retrieveResIdFromUrl(); - } - - protected getSubResourceWithParentId(id: string): void { - } - - navigateToTab(tabSelected: Tab): void { - let tabRouteSelected; - if (tabSelected.id === TabEnum.METADATA) { - tabRouteSelected = AdminRoutesEnum.organizationalUnitDetail; - } - - if (tabSelected.id === TabEnum.ADDITIONAL_FIELDS_FORM) { - tabRouteSelected = AdminRoutesEnum.organizationalUnitAdditionalFieldsForm; - } - const path = [RoutesEnum.adminOrganizationalUnit, this._resId, tabRouteSelected]; - this._store.dispatch(new Navigate(path)); - } -} - -enum TabEnum { - METADATA = "METADATA", - ADDITIONAL_FIELDS_FORM = "ADDITIONAL_FIELDS_FORM", -} diff --git a/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts b/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts index 1ccc6c0d877ba98de8d0b0676e53cb3d437fcc4b..0fe38881ad31038e969cf1951b028a72f8adb43c 100644 --- a/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts +++ b/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts @@ -24,7 +24,6 @@ import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; import {AppState} from "@app/stores/app.state"; import {AppOrgUnitPersonRoleAction} from "@app/stores/organizational-unit-person-role/app-organizational-unit-person-role.action"; import {ModeDepositTabEnum} from "@deposit/enums/mode-deposit-tab.enum"; -import {DepositHelper} from "@deposit/helpers/deposit.helper"; import {DepositService} from "@deposit/services/deposit.service"; import {DepositCollectionAction} from "@deposit/stores/collection/deposit-collection.action"; import {DepositCollectionState} from "@deposit/stores/collection/deposit-collection.state"; @@ -208,10 +207,6 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable< }, ]; - get depositHelper(): typeof DepositHelper { - return DepositHelper; - } - constructor(protected readonly _store: Store, protected readonly _route: ActivatedRoute, protected readonly _actions$: Actions, diff --git a/src/app/features/deposit/components/routables/deposit-metadata/deposit-metadata.routable.ts b/src/app/features/deposit/components/routables/deposit-metadata/deposit-metadata.routable.ts index cdac4594540e30d06cf64428607977d02f44ef1d..d8a7785d9a93626d9ad5ef6473875db60f23422c 100644 --- a/src/app/features/deposit/components/routables/deposit-metadata/deposit-metadata.routable.ts +++ b/src/app/features/deposit/components/routables/deposit-metadata/deposit-metadata.routable.ts @@ -64,6 +64,7 @@ import { isNotNullNorUndefined, MemoizedUtil, Override, + OverrideProperty, } from "solidify-frontend"; @Component({ @@ -91,6 +92,7 @@ export class DepositMetadataRoutable extends SharedAbstractDetailEditRoutable<De _orgUnitResId: string; + @OverrideProperty() @ViewChild("formPresentational") readonly formPresentational: DepositFormPresentational; diff --git a/src/app/shared/enums/routes.enum.ts b/src/app/shared/enums/routes.enum.ts index 5f9e05e792b104a1f40ed77d66599f314780d2ba..7593ef9aab494729b1bf9d1c5141f432d61d1902 100644 --- a/src/app/shared/enums/routes.enum.ts +++ b/src/app/shared/enums/routes.enum.ts @@ -88,6 +88,7 @@ export enum AdminRoutesEnum { organizationalUnit = "organizational-unit", organizationalUnitCreate = "create", organizationalUnitDetail = "detail", + organizationalUnitData = "data", organizationalUnitEdit = "edit", organizationalUnitAdditionalFieldsForm = "additional-fields-form", @@ -198,7 +199,6 @@ export enum PreservationPlanningRoutesEnum { sipCollections = "collections", } - export class RoutesEnum implements RoutesEnum { static index: string = AppRoutesEnum.index; static login: string = AppRoutesEnum.login; diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 0443d6d1813225e1320fe559924de84c1237b106..611257dbb44cf6156d55ed162fb85f8511cac4e5 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -468,6 +468,52 @@ } }, "organizationalUnit": { + "additionalField": { + "form": { + "description": "Beschreibung", + "name": "Name", + "type": "Typ" + } + }, + "additionalFields": { + "modal": { + "detailCreateUpdate": { + "button": { + "close": "Schließen", + "confirm": "Bestätigen Sie" + }, + "title": { + "create": "Erstellen einer neuen zusätzlichen Metadaten-Vorlage", + "detail": "Detail eines zusätzlichen Metadatenmodells", + "update": "Erstellen einer neuen zusätzlichen Metadaten-Vorlage" + } + }, + "rename": { + "button": { + "close": "Schließen", + "confirmChange": "Bestätigen Sie" + }, + "name": "Name", + "title": "Umbenennen des zusätzlichen Metadatenmodells" + } + }, + "table": { + "header": { + "creation": { + "when": "Erstellungsdatum" + }, + "name": "Name" + } + } + }, + "additionalFieldsForm": { + "notification": { + "unableToCreate": "Die zusätzliche Metadaten-Vorlage kann nicht erstellt werden" + } + }, + "button": { + "createAdditionalFieldsForm": "Zusätzliche Metadaten erstellen" + }, "dialog": { "delete": { "cancel": "Abbrechen", @@ -540,6 +586,10 @@ } }, "refresh": "Aktualisieren Sie", + "tab": { + "additionalFieldsForm": "Zusätzliche Metadaten", + "detail": "Einzelheiten" + }, "table": { "header": { "closingDate": "Einsendeschluss", @@ -1141,8 +1191,12 @@ "root": "OAuth2-Kunden" }, "organizationalUnit": { - "create": "erstellen", - "edit": "bearbeiten", + "additionalFieldsForm": { + "list": "Liste" + }, + "create": "Crstellen", + "detail": "Einzelheiten", + "edit": "Bearbeiten", "root": "Organisatorische Einheiten" }, "person": { @@ -1260,6 +1314,7 @@ "list": { "action": { "changeDataCategory": "Datenkategorie/-typ ändern", + "createNewVersionFromExistingOne": "Erstellen Sie daraus eine neue Version", "delete": "löschen", "download": "herunterladen", "errorMessage": "Fehlermeldung anzeigen", @@ -1269,6 +1324,7 @@ "history": "Geschichte", "info": "Informationen", "move": "verschieben", + "rename": "Umbenennen", "resume": "Lebenslauf", "start": "Führen Sie aus.", "validate": "Ignorieren Sie nicht" @@ -1786,6 +1842,11 @@ }, "inEditMode": "Sie befinden sich im Bearbeitungsmodus" }, + "formDescription": { + "typeEnum": { + "formly": "Formly" + } + }, "home": { "archive": { "browsing": { diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 3249d47403006d0e112d82cb54eab983ceaa62ee..00bd8cd13bd8e2159c2c23205b23c9ae14e90b5d 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -468,6 +468,52 @@ } }, "organizationalUnit": { + "additionalField": { + "form": { + "description": "Description", + "name": "Name", + "type": "Type" + } + }, + "additionalFields": { + "modal": { + "detailCreateUpdate": { + "button": { + "close": "Close", + "confirm": "Confirm" + }, + "title": { + "create": "Creating a new additional metadata template", + "detail": "Detail of additional metadata model", + "update": "Creating a new additional metadata template" + } + }, + "rename": { + "button": { + "close": "Close", + "confirmChange": "Confirm" + }, + "name": "Name", + "title": "Renaming the additional metadata model" + } + }, + "table": { + "header": { + "creation": { + "when": "Creation date" + }, + "name": "Name" + } + } + }, + "additionalFieldsForm": { + "notification": { + "unableToCreate": "Unable to create the additional metadata template" + } + }, + "button": { + "createAdditionalFieldsForm": "Create additional metadata" + }, "dialog": { "delete": { "cancel": "Cancel", @@ -540,6 +586,10 @@ } }, "refresh": "Refresh", + "tab": { + "additionalFieldsForm": "Additional metadata", + "detail": "Detail" + }, "table": { "header": { "closingDate": "Closing", @@ -1141,7 +1191,11 @@ "root": "OAuth2 Clients" }, "organizationalUnit": { + "additionalFieldsForm": { + "list": "List" + }, "create": "Create", + "detail": "Detail", "edit": "Edit", "root": "Organizational units" }, @@ -1260,6 +1314,7 @@ "list": { "action": { "changeDataCategory": "Change Data Category/Type", + "createNewVersionFromExistingOne": "Create a new version from it", "delete": "Delete", "download": "Download", "errorMessage": "Show error message", @@ -1269,6 +1324,7 @@ "history": "History", "info": "Informations", "move": "Move", + "rename": "Rename", "resume": "Resume", "start": "Run", "validate": "Do not ignore" @@ -1786,6 +1842,11 @@ }, "inEditMode": "You are in edit mode" }, + "formDescription": { + "typeEnum": { + "formly": "Formly" + } + }, "home": { "archive": { "browsing": { diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 9ff8c15f4b36075719321d5d2f5a359befd736dd..d3f5fee0749dd62940ec6ab4af84b301de65bcbb 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -468,17 +468,52 @@ } }, "organizationalUnit": { - "additionalFieldsForm" : "Métadonnées supplémentaires", - "additionalFields" : { - "table" : { - "header" : { - "name" : "Nom", - "creation" : { - "when" : "Date de création" + "additionalField": { + "form": { + "description": "Description", + "name": "Nom", + "type": "Type" + } + }, + "additionalFields": { + "modal": { + "detailCreateUpdate": { + "button": { + "close": "Fermer", + "confirm": "Confirmer" + }, + "title": { + "create": "Création d'un nouveau modèle de métadonnées supplémentaires", + "detail": "Détail modèle de métadonnées supplémentaires", + "update": "Création d'un nouveau modèle de métadonnées supplémentaires" } + }, + "rename": { + "button": { + "close": "Fermer", + "confirmChange": "Confirmer" + }, + "name": "Nom", + "title": "Renommage du modèle de métadonnées supplémentaire" + } + }, + "table": { + "header": { + "creation": { + "when": "Date de création" + }, + "name": "Nom" } } }, + "additionalFieldsForm": { + "notification": { + "unableToCreate": "Impossible de créer le modèle de métadonnées supplémentaires" + } + }, + "button": { + "createAdditionalFieldsForm": "Créer métadonnées supplémentaires" + }, "dialog": { "delete": { "cancel": "Annuler", @@ -487,7 +522,6 @@ "title": "Confirmer suppresion" } }, - "detail" : "Détail", "form": { "closingDate": "Fermeture", "description": { @@ -552,6 +586,10 @@ } }, "refresh": "Rafraichir", + "tab": { + "additionalFieldsForm": "Métadonnées supplémentaires", + "detail": "Détail" + }, "table": { "header": { "closingDate": "Fermeture", @@ -1153,7 +1191,11 @@ "root": "Clients OAuth2" }, "organizationalUnit": { + "additionalFieldsForm": { + "list": "Liste" + }, "create": "Créer", + "detail": "Détail", "edit": "Modifier", "root": "Unités organisationelles" }, @@ -1272,6 +1314,7 @@ "list": { "action": { "changeDataCategory": "Changer Catégorie/Type de données", + "createNewVersionFromExistingOne": "Créer une nouvelle version à partir de celle-ci", "delete": "Supprimer", "download": "Télécharger", "errorMessage": "Afficher le message d'erreur", @@ -1281,6 +1324,7 @@ "history": "Historique", "info": "Informations", "move": "Déplacer", + "rename": "Renommer", "resume": "Relancer", "start": "Lancer", "validate": "Ne pas ignorer" @@ -1798,6 +1842,11 @@ }, "inEditMode": "Vous êtes en mode édition" }, + "formDescription": { + "typeEnum": { + "formly": "Formly" + } + }, "home": { "archive": { "browsing": {