From a3373d31ba9ba4cd38f374633a37fa01516cbb68 Mon Sep 17 00:00:00 2001 From: goldd <david.gold@unige.ch> Date: Thu, 8 Aug 2019 14:22:02 +0200 Subject: [PATCH 1/2] 686 created admin license --- package-lock.json | 2 +- package.json | 4 +- .../features/admin/admin-routing.module.ts | 32 + src/app/features/admin/admin.module.ts | 20 +- .../admin-license-delete.dialog.ts | 30 + .../admin-license-form.html | 89 +++ .../admin-license-form/admin-license-form.ts | 96 +++ .../admin-home/admin-home.routable.ts | 6 + .../admin-license-create.routable.html | 3 + .../admin-license-create.routable.ts | 29 + .../admin-license-detail.routable.html | 25 + .../admin-license-detail.routable.ts | 31 + .../admin-license-edit.routable.html | 8 + .../admin-license-edit.routable.ts | 30 + .../admin-license-list.routable.ts | 37 + src/app/features/admin/stores/admin.state.ts | 4 +- .../stores/license/admin-license.action.ts | 86 +++ .../stores/license/admin-license.state.ts | 48 ++ src/app/shared/enums/license.enums.ts | 14 + src/app/shared/enums/local-state.enum.ts | 3 +- src/app/shared/enums/routes.enum.ts | 8 + src/app/shared/utils/store-dialog.util.ts | 7 +- .../shared/utils/store-route-local.util.ts | 18 +- src/assets/i18n/de.json | 642 ++++++++++-------- src/assets/i18n/en.json | 52 +- src/assets/i18n/fr.json | 132 ++-- 26 files changed, 1101 insertions(+), 355 deletions(-) create mode 100644 src/app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog.ts create mode 100644 src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.html create mode 100644 src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.ts create mode 100644 src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.html create mode 100644 src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.ts create mode 100644 src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.html create mode 100644 src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.ts create mode 100644 src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.html create mode 100644 src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.ts create mode 100644 src/app/features/admin/components/routables/admin-license-list/admin-license-list.routable.ts create mode 100644 src/app/features/admin/stores/license/admin-license.action.ts create mode 100644 src/app/features/admin/stores/license/admin-license.state.ts create mode 100644 src/app/shared/enums/license.enums.ts diff --git a/package-lock.json b/package-lock.json index 227cedc45..bfa10c204 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9329,7 +9329,7 @@ "solidify-frontend": { "version": "0.0.1", "resolved": "https://packages.dlcm.ch/repository/npm-group/solidify-frontend/-/solidify-frontend-0.0.1.tgz", - "integrity": "sha512-3BpQTUwI3nNyEKuVQbAxQL5+Mmrq2dvwJ622QXeUIrLZP37T3C5hQgKbxS13aRCnBxy2FnD7lOqb4Ry3BJWkUg==", + "integrity": "sha512-2Cc6SXorJxpU8JMot508AV+GdEllHlGEkdCt+J8BCDDbqKS25e2v9o6Zfe/dpQo7USWyU+qLmea1GcavhUxw9Q==", "requires": { "tslib": "^1.9.0" } diff --git a/package.json b/package.json index 3fb321cd9..4838c085a 100644 --- a/package.json +++ b/package.json @@ -54,9 +54,9 @@ "primeicons": "1.0.0", "primeng": "8.0.1", "rxjs": "6.5.2", + "solidify-frontend": "0.0.1", "tslib": "1.10.0", - "zone.js": "0.9.1", - "solidify-frontend": "0.0.1" + "zone.js": "0.9.1" }, "devDependencies": { "@angular-devkit/build-angular": "0.801.2", diff --git a/src/app/features/admin/admin-routing.module.ts b/src/app/features/admin/admin-routing.module.ts index 32d5e50ac..2023098c4 100644 --- a/src/app/features/admin/admin-routing.module.ts +++ b/src/app/features/admin/admin-routing.module.ts @@ -1,6 +1,10 @@ import {NgModule} from "@angular/core"; import {RouterModule, Routes} from "@angular/router"; import {AdminHomeRoutable} from "@app/features/admin/components/routables/admin-home/admin-home.routable"; +import {AdminLicenseCreateRoutable} from "@app/features/admin/components/routables/admin-license-create/admin-license-create.routable"; +import {AdminLicenseDetailRoutable} from "@app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable"; +import {AdminLicenseEditRoutable} from "@app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable"; +import {AdminLicenseListRoutable} from "@app/features/admin/components/routables/admin-license-list/admin-license-list.routable"; import {AdminSubmissionPolicyCreateRoutable} from "@app/features/admin/components/routables/admin-submission-policy-create/admin-submission-policy-create.routable"; import {AdminSubmissionPolicyDetailRoutable} from "@app/features/admin/components/routables/admin-submission-policy-detail/admin-submission-policy-detail.routable"; import {AdminSubmissionPolicyEditRoutable} from "@app/features/admin/components/routables/admin-submission-policy-edit/admin-submission-policy-edit.routable"; @@ -49,6 +53,34 @@ const routes: Routes = [ breadcrumb: TRANSLATE("breadcrumb.admin.submissionPolicy.create"), }, }, + { + path: AdminRoutesEnum.license + AppRoutesEnum.separator + AdminRoutesEnum.licenseCreate, + component: AdminLicenseCreateRoutable, + data: { + breadcrumb: TRANSLATE("breadcrumb.admin.license.create"), + }, + }, + { + path: AdminRoutesEnum.license + AppRoutesEnum.separator + AdminRoutesEnum.licenseEdit + AppRoutesEnum.separator + AppRoutesEnum.paramId, + component: AdminLicenseEditRoutable, + data: { + breadcrumb: TRANSLATE("breadcrumb.admin.license.edit"), + }, + }, + { + path: AdminRoutesEnum.license + AppRoutesEnum.separator + AdminRoutesEnum.licenseDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId, + component: AdminLicenseDetailRoutable, + data: { + breadcrumb: TRANSLATE("breadcrumb.admin.license.detail"), + }, + }, + { + path: AdminRoutesEnum.license, + component: AdminLicenseListRoutable, + data: { + breadcrumb: TRANSLATE("breadcrumb.admin.license.list"), + }, + }, { path: AdminRoutesEnum.preservationPolicy, component: AdminPreservationPolicyListRoutable, diff --git a/src/app/features/admin/admin.module.ts b/src/app/features/admin/admin.module.ts index ad7b42a96..1218ad1b1 100644 --- a/src/app/features/admin/admin.module.ts +++ b/src/app/features/admin/admin.module.ts @@ -1,12 +1,19 @@ import {NgModule} from "@angular/core"; import {AdminRoutingModule} from "@app/features/admin/admin-routing.module"; +import {AdminLicenseDeleteDialog} from "@app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog"; import {AdminSubmissionPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-submission-policy-delete/admin-submission-policy-delete.dialog"; +import {AdminLicenseForm} from "@app/features/admin/components/presentationals/admin-license-form/admin-license-form"; import {AdminSubmissionPolicyForm} from "@app/features/admin/components/presentationals/admin-submission-policy-form/admin-submission-policy-form"; import {AdminHomeRoutable} from "@app/features/admin/components/routables/admin-home/admin-home.routable"; +import {AdminLicenseCreateRoutable} from "@app/features/admin/components/routables/admin-license-create/admin-license-create.routable"; +import {AdminLicenseDetailRoutable} from "@app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable"; +import {AdminLicenseEditRoutable} from "@app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable"; +import {AdminLicenseListRoutable} from "@app/features/admin/components/routables/admin-license-list/admin-license-list.routable"; import {AdminSubmissionPolicyCreateRoutable} from "@app/features/admin/components/routables/admin-submission-policy-create/admin-submission-policy-create.routable"; import {AdminSubmissionPolicyDetailRoutable} from "@app/features/admin/components/routables/admin-submission-policy-detail/admin-submission-policy-detail.routable"; import {AdminSubmissionPolicyEditRoutable} from "@app/features/admin/components/routables/admin-submission-policy-edit/admin-submission-policy-edit.routable"; import {AdminState} from "@app/features/admin/stores/admin.state"; +import {AdminLicenseState} from "@app/features/admin/stores/license/admin-license.state"; import {AdminSubmissionPolicyState} from "@app/features/admin/stores/submission-policy/admin-submission-policy.state"; import {SharedModule} from "@app/shared/shared.module"; import {TranslateModule} from "@ngx-translate/core"; @@ -29,16 +36,22 @@ const routables = [ AdminPreservationPolicyListRoutable, AdminPreservationPolicyDetailRoutable, AdminPreservationPolicyCreateRoutable, - AdminPreservationPolicyEditRoutable + AdminPreservationPolicyEditRoutable, + AdminLicenseCreateRoutable, + AdminLicenseDetailRoutable, + AdminLicenseEditRoutable, + AdminLicenseListRoutable, ]; const containers = []; const dialogs = [ AdminSubmissionPolicyDeleteDialog, + AdminLicenseDeleteDialog, AdminPreservationPolicyDeleteDialog ]; const presentationals = [ AdminSubmissionPolicyForm, - AdminPreservationPolicyForm + AdminLicenseForm, + AdminPreservationPolicyForm, ]; @NgModule({ @@ -55,7 +68,8 @@ const presentationals = [ NgxsModule.forFeature([ AdminState, AdminSubmissionPolicyState, - AdminPreservationPolicyState + AdminPreservationPolicyState, + AdminLicenseState, ]), ], entryComponents: [ diff --git a/src/app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog.ts b/src/app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog.ts new file mode 100644 index 000000000..8f851043e --- /dev/null +++ b/src/app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog.ts @@ -0,0 +1,30 @@ +import {ChangeDetectionStrategy, Component, Inject} from "@angular/core"; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material"; +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {AdminLicenseStateModel} from "@app/features/admin/stores/license/admin-license.state"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractDeleteDialog} from "@app/shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {DeleteDialog} from "@app/shared/models/delete-dialog.model"; +import {Store} from "@ngxs/store"; +import {TRANSLATE} from "solidify-frontend"; + +@Component({ + selector: "dlcm-license-delete-dialog", + templateUrl: "../../../../../shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog.html", + styleUrls: ["../../../../../shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseDeleteDialog extends SharedAbstractDeleteDialog<Licenses, AdminLicenseStateModel> { + public readonly KEY_TITLE: string = TRANSLATE("admin.license.dialog.delete.title"); + public readonly KEY_MESSAGE: string = TRANSLATE("admin.license.dialog.delete.message"); + public readonly KEY_CONFIRM_BUTTON: string = TRANSLATE("admin.license.dialog.delete.confirm"); + public readonly KEY_CANCEL_BUTTON: string = TRANSLATE("admin.license.dialog.delete.cancel"); + + constructor(protected store: Store, + protected dialogRef: MatDialogRef<AdminLicenseDeleteDialog>, + @Inject(MAT_DIALOG_DATA) public data: DeleteDialog) { + super(store, dialogRef, data, LocalStateEnum.admin_license, adminLicenseActionNameSpace); + } + +} diff --git a/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.html b/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.html new file mode 100644 index 000000000..a80ebbea5 --- /dev/null +++ b/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.html @@ -0,0 +1,89 @@ +<form [formGroup]="form" + (ngSubmit)="onSubmit()"> + <mat-form-field> + <mat-label>{{'admin.license.form.title' | translate}}</mat-label> + <input matInput + [formControlName]="formDefinition.title" + [required]="isRequired(formDefinition.title)"> + <mat-error *ngIf="getFormControl(formDefinition.title).invalid">{{'required' | translate}}</mat-error> + <mat-error *ngFor="let error of getFormControl(formDefinition.title).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.openLicenseId' | translate}}</mat-label> + <input matInput + [formControlName]="formDefinition.openLicenseId" + [required]="isRequired(formDefinition.openLicenseId)"> + <mat-error *ngIf="getFormControl(formDefinition.openLicenseId).invalid">{{'required' | translate}}</mat-error> + <mat-error *ngFor="let error of getFormControl(formDefinition.openLicenseId).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.url' | translate}}</mat-label> + <input matInput + [formControlName]="formDefinition.url"> + <mat-error *ngFor="let error of getFormControl(formDefinition.url).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.maintainer' | translate}}</mat-label> + <input matInput + [formControlName]="formDefinition.maintainer"> + <mat-error *ngFor="let error of getFormControl(formDefinition.maintainer).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.odConformance' | translate}}</mat-label> + <mat-select [formControlName]="formDefinition.odConformance"> + <mat-option *ngFor="let odConformance of licenseOdConformanceEnum" [value]="odConformance"> + {{odConformance}} + </mat-option> + </mat-select> + <mat-error *ngFor="let error of getFormControl(formDefinition.odConformance).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.osdConformance' | translate}}</mat-label> + <mat-select [formControlName]="formDefinition.osdConformance"> + <mat-option *ngFor="let osdConformance of licenseOsdConformanceEnum" [value]="osdConformance"> + {{osdConformance}} + </mat-option> + </mat-select> + <mat-error *ngFor="let error of getFormControl(formDefinition.osdConformance).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-form-field> + <mat-label>{{'admin.license.form.status' | translate}}</mat-label> + <mat-select [formControlName]="formDefinition.status"> + <mat-option *ngFor="let status of licensesStatusEnum" [value]="status"> + {{status}} + </mat-option> + </mat-select> + <mat-error *ngFor="let error of getFormControl(formDefinition.status).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-checkbox [formControlName]="formDefinition.isGeneric">{{'admin.license.form.isGeneric' | translate }}</mat-checkbox> + + <mat-form-field> + <mat-label>{{'admin.license.form.family' | translate}}</mat-label> + <input matInput + [formControlName]="formDefinition.family"> + <mat-error *ngFor="let error of getFormControl(formDefinition.family).errors?.errorsFromBackend">{{error}}</mat-error> + </mat-form-field> + + <mat-checkbox [formControlName]="formDefinition.domainContent">{{'admin.license.form.domainContent' | translate }}</mat-checkbox> + + <mat-checkbox [formControlName]="formDefinition.domainData">{{'admin.license.form.domainData' | translate }}</mat-checkbox> + + <mat-checkbox [formControlName]="formDefinition.domainSoftware">{{'admin.license.form.domainSoftware' | translate }}</mat-checkbox> + + <div class="submit-button"> + <button *ngIf="!readonly" + mat-flat-button + color="primary" + type="submit" + [disabled]="!form.valid"> + {{'admin.license.form.submit' | translate }} + </button> + </div> +</form> diff --git a/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.ts b/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.ts new file mode 100644 index 000000000..aae50b625 --- /dev/null +++ b/src/app/features/admin/components/presentationals/admin-license-form/admin-license-form.ts @@ -0,0 +1,96 @@ +import {ChangeDetectionStrategy, ChangeDetectorRef, Component} from "@angular/core"; +import {FormBuilder, Validators} from "@angular/forms"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational"; +import {odConformanceEnum, osdConformanceEnum} from "@app/shared/enums/license.enums"; +import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model"; +import {PropertyName, SolidifyValidator} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-license-form", + templateUrl: "./admin-license-form.html", + styleUrls: ["../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseForm extends SharedAbstractFormPresentational<Licenses> { + formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); + + get licensesStatusEnum(): Licenses.StatusEnum[] { + return [Licenses.StatusEnum.Active, + Licenses.StatusEnum.Retired, + Licenses.StatusEnum.Superseded]; + } + + get licenseOdConformanceEnum(): odConformanceEnum[] { + return [odConformanceEnum.rejected, + odConformanceEnum.approved, + odConformanceEnum.not_reviewed, + odConformanceEnum.empty]; + } + + get licenseOsdConformanceEnum(): osdConformanceEnum[] { + return [osdConformanceEnum.rejected, + osdConformanceEnum.approved, + osdConformanceEnum.not_reviewed, + osdConformanceEnum.empty]; + } + + constructor(protected readonly _changeDetectorRef: ChangeDetectorRef, + private readonly _fb: FormBuilder) { + super(_changeDetectorRef); + } + + protected initNewForm(): void { + this.form = this._fb.group({ + [this.formDefinition.title]: ["", [Validators.required, SolidifyValidator]], + [this.formDefinition.openLicenseId]: ["", [Validators.required, SolidifyValidator]], + [this.formDefinition.url]: ["", [SolidifyValidator]], + [this.formDefinition.maintainer]: ["", [SolidifyValidator]], + [this.formDefinition.odConformance]: ["", [SolidifyValidator]], + [this.formDefinition.osdConformance]: ["", [SolidifyValidator]], + [this.formDefinition.status]: [Licenses.StatusEnum.Retired, [SolidifyValidator]], + [this.formDefinition.isGeneric]: [false, [SolidifyValidator]], + [this.formDefinition.family]: ["", [SolidifyValidator]], + [this.formDefinition.domainContent]: [false, [SolidifyValidator]], + [this.formDefinition.domainData]: [false, [SolidifyValidator]], + [this.formDefinition.domainSoftware]: [false, [SolidifyValidator]], + }); + } + + protected bindFormTo(licenses: Licenses): void { + this.form = this._fb.group({ + [this.formDefinition.title]: [licenses.title, [Validators.required, SolidifyValidator]], + [this.formDefinition.openLicenseId]: [licenses.openLicenseId, [Validators.required, SolidifyValidator]], + [this.formDefinition.url]: [licenses.url, [SolidifyValidator]], + [this.formDefinition.maintainer]: [licenses.maintainer, [SolidifyValidator]], + [this.formDefinition.odConformance]: [licenses.odConformance, [SolidifyValidator]], + [this.formDefinition.osdConformance]: [licenses.osdConformance, [SolidifyValidator]], + [this.formDefinition.status]: [licenses.status, [Validators.required, SolidifyValidator]], + [this.formDefinition.isGeneric]: [licenses.isGeneric, [SolidifyValidator]], + [this.formDefinition.family]: [licenses.family, [SolidifyValidator]], + [this.formDefinition.domainContent]: [licenses.domainContent, [SolidifyValidator]], + [this.formDefinition.domainData]: [licenses.domainData, [SolidifyValidator]], + [this.formDefinition.domainSoftware]: [licenses.domainSoftware, [SolidifyValidator]], + }); + } + + protected treatmentBeforeSubmit(licenses: Licenses): Licenses { + return licenses; + } + +} + +class FormComponentFormDefinition extends BaseFormDefinition { + @PropertyName() title: string; + @PropertyName() openLicenseId: string; + @PropertyName() url: string; + @PropertyName() maintainer: string; + @PropertyName() odConformance: string; + @PropertyName() osdConformance: string; + @PropertyName() status: string; + @PropertyName() isGeneric: string; + @PropertyName() family: string; + @PropertyName() domainContent: string; + @PropertyName() domainData: string; + @PropertyName() domainSoftware: string; +} diff --git a/src/app/features/admin/components/routables/admin-home/admin-home.routable.ts b/src/app/features/admin/components/routables/admin-home/admin-home.routable.ts index 3a62de645..1e20a0f96 100644 --- a/src/app/features/admin/components/routables/admin-home/admin-home.routable.ts +++ b/src/app/features/admin/components/routables/admin-home/admin-home.routable.ts @@ -20,6 +20,12 @@ export class AdminHomeRoutable extends SharedAbstractPresentational { subtitleToTranslate: TRANSLATE("admin.submissionPolicy.home.subtitle"), path: RoutesEnum.adminSubmissionPolicy, }, + { + avatarIcon: "arrow-alt-circle-down", + titleToTranslate: TRANSLATE("admin.license.home.title"), + subtitleToTranslate: TRANSLATE("admin.license.home.subtitle"), + path: RoutesEnum.adminLicense, + }, { avatarIcon: "arrow-alt-circle-down", titleToTranslate: TRANSLATE("admin.preservationPolicy.home.title"), diff --git a/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.html b/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.html new file mode 100644 index 000000000..7cdc86177 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.html @@ -0,0 +1,3 @@ +<dlcm-admin-license-form #formPresentational + (submitChange)="create($event)" +></dlcm-admin-license-form> diff --git a/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.ts b/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.ts new file mode 100644 index 000000000..89c65db76 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-create/admin-license-create.routable.ts @@ -0,0 +1,29 @@ +import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from "@angular/core"; +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {AdminLicenseStateModel} from "@app/features/admin/stores/license/admin-license.state"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational"; +import {SharedAbstractCreateRoutable} from "@app/shared/components/routables/shared-abstract-create/shared-abstract-create.routable"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {OrgUnitAction} from "@app/shared/stores/organizational-unit/organizational-unit.action"; +import {Store} from "@ngxs/store"; + +@Component({ + selector: "dlcm-admin-license-create-routable", + templateUrl: "./admin-license-create.routable.html", + styleUrls: ["../../../../../shared/components/routables/shared-abstract-create/shared-abstract-create.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseCreateRoutable extends SharedAbstractCreateRoutable<Licenses, AdminLicenseStateModel> implements OnInit { + @ViewChild("formPresentational", {static: false}) + readonly formPresentational: SharedAbstractFormPresentational<Licenses>; + + constructor(protected store: Store) { + super(store, LocalStateEnum.admin_license, adminLicenseActionNameSpace, LocalStateEnum.admin); + } + + ngOnInit(): void { + super.ngOnInit(); + this.store.dispatch(new OrgUnitAction.GetAll()); + } +} diff --git a/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.html b/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.html new file mode 100644 index 000000000..24f55ebd3 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.html @@ -0,0 +1,25 @@ +<div class="button-toolbar"> + <button mat-flat-button + color="primary" + (click)="edit()"> + {{KEY_EDIT_BUTTON | translate}} + </button> + <button mat-flat-button + color="accent" + [disabled]="!(currentObs| async)" + (click)="delete()"> + {{KEY_DELETE_BUTTON | translate}} + </button> +</div> + +<div class="wrapper"> + <div class="spinner-wrapper" *ngIf="isLoadingObs | async"> + <mat-spinner></mat-spinner> + </div> + + <dlcm-admin-license-form *ngIf="(currentObs| async) != null" + [model]="currentObs| async" + [readonly]="true" + ></dlcm-admin-license-form> + +</div> diff --git a/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.ts b/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.ts new file mode 100644 index 000000000..64f20f146 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-detail/admin-license-detail.routable.ts @@ -0,0 +1,31 @@ +import {ChangeDetectionStrategy, Component} from "@angular/core"; +import {MatDialog} from "@angular/material"; +import {ActivatedRoute} from "@angular/router"; +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {AdminLicenseStateModel} from "@app/features/admin/stores/license/admin-license.state"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractDetailRoutable} from "@app/shared/components/routables/shared-abstract-detail/shared-abstract-detail.routable"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {Store} from "@ngxs/store"; +import {TRANSLATE} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-license-detail-routable", + templateUrl: "./admin-license-detail.routable.html", + styleUrls: ["../../../../../shared/components/routables/shared-abstract-detail/shared-abstract-detail.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseDetailRoutable extends SharedAbstractDetailRoutable<Licenses, AdminLicenseStateModel> { + readonly KEY_PARAM_NAME: string = "name"; + readonly KEY_DELETE_BUTTON: string = TRANSLATE("admin.license.button.delete"); + readonly KEY_EDIT_BUTTON: string = TRANSLATE("admin.license.button.edit"); + + constructor(protected store: Store, + protected route: ActivatedRoute, + public dialog: MatDialog) { + super(store, route, dialog, LocalStateEnum.admin_license, adminLicenseActionNameSpace, LocalStateEnum.admin); + } + + getSubResourceWithParentId(id: string): void { + } +} diff --git a/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.html b/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.html new file mode 100644 index 000000000..57dc92536 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.html @@ -0,0 +1,8 @@ +<mat-spinner *ngIf="(isLoadingObs | async)"></mat-spinner> + +<div class="tab-content"> + <dlcm-admin-license-form *ngIf="(currentObs | async)" + [model]="currentObs | async" + (submitChange)="update($event)" + ></dlcm-admin-license-form> +</div> diff --git a/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.ts b/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.ts new file mode 100644 index 000000000..f6c124588 --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-edit/admin-license-edit.routable.ts @@ -0,0 +1,30 @@ +import {ChangeDetectionStrategy, Component, OnInit} from "@angular/core"; +import {ActivatedRoute} from "@angular/router"; +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {AdminLicenseStateModel} from "@app/features/admin/stores/license/admin-license.state"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractEditRoutable} from "@app/shared/components/routables/shared-abstract-edit/shared-abstract-edit.routable"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {OrgUnitAction} from "@app/shared/stores/organizational-unit/organizational-unit.action"; +import {Store} from "@ngxs/store"; + +@Component({ + selector: "dlcm-admin-license-edit-routable", + templateUrl: "./admin-license-edit.routable.html", + styleUrls: ["../../../../../shared/components/routables/shared-abstract-edit/shared-abstract-edit.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseEditRoutable extends SharedAbstractEditRoutable<Licenses, AdminLicenseStateModel> implements OnInit { + constructor(protected store: Store, + protected route: ActivatedRoute) { + super(store, route, LocalStateEnum.admin_license, adminLicenseActionNameSpace, LocalStateEnum.admin); + } + + ngOnInit(): void { + super.ngOnInit(); + this.store.dispatch(new OrgUnitAction.GetAll()); + } + + getSubResourceWithParentId(id: string): void { + } +} diff --git a/src/app/features/admin/components/routables/admin-license-list/admin-license-list.routable.ts b/src/app/features/admin/components/routables/admin-license-list/admin-license-list.routable.ts new file mode 100644 index 000000000..2b34cb91a --- /dev/null +++ b/src/app/features/admin/components/routables/admin-license-list/admin-license-list.routable.ts @@ -0,0 +1,37 @@ +import {ChangeDetectionStrategy, Component} from "@angular/core"; +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {AdminLicenseStateModel} from "@app/features/admin/stores/license/admin-license.state"; +import {Licenses} from "@app/generated-api"; +import {SharedAbstractListRoutable} from "@app/shared/components/routables/shared-abstract-list/shared-abstract-list.routable"; +import {FieldTypeEnum} from "@app/shared/enums/field-type.enum"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {Store} from "@ngxs/store"; +import {TRANSLATE} from "solidify-frontend"; + +@Component({ + selector: "dlcm-admin-license-list-routable", + templateUrl: "../../../../../shared/components/routables/shared-abstract-list/shared-abstract-list.routable.html", + styleUrls: ["../../../../../shared/components/routables/shared-abstract-list/shared-abstract-list.routable.scss"], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AdminLicenseListRoutable extends SharedAbstractListRoutable<Licenses, AdminLicenseStateModel> { + readonly KEY_CREATE_BUTTON: string = TRANSLATE("admin.license.button.new"); + readonly KEY_REFRESH_BUTTON: string = TRANSLATE("admin.license.button.refresh"); + + constructor(protected store: Store) { + super(store, LocalStateEnum.admin_license, adminLicenseActionNameSpace, LocalStateEnum.admin); + } + + defineColumns(): void { + this.columns = [ + { + field: "title", + header: TRANSLATE("admin.license.table.header.name"), + type: FieldTypeEnum.string, + order: 0, + isFilterable: true, + isSortable: true, + }, + ]; + } +} diff --git a/src/app/features/admin/stores/admin.state.ts b/src/app/features/admin/stores/admin.state.ts index bf2336baa..d6e499296 100644 --- a/src/app/features/admin/stores/admin.state.ts +++ b/src/app/features/admin/stores/admin.state.ts @@ -1,3 +1,4 @@ +import {AdminLicenseState} from "@app/features/admin/stores/license/admin-license.state"; import { AdminSubmissionPolicyState, AdminSubmissionPolicyStateModel, @@ -24,7 +25,8 @@ export interface AdminStateModel extends BaseState { }, children: [ AdminSubmissionPolicyState, - AdminPreservationPolicyState + AdminPreservationPolicyState, + AdminLicenseState, ], }) export class AdminState { diff --git a/src/app/features/admin/stores/license/admin-license.action.ts b/src/app/features/admin/stores/license/admin-license.action.ts new file mode 100644 index 000000000..637ac7c48 --- /dev/null +++ b/src/app/features/admin/stores/license/admin-license.action.ts @@ -0,0 +1,86 @@ +import {Licenses} from "@app/generated-api"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {ResourceAction, ResourceNameSpace, TypeDefaultAction} from "solidify-frontend"; + +const state = LocalStateEnum.admin_license; + +export namespace AdminLicenseAction { + @TypeDefaultAction(state) + export class LoadResource extends ResourceAction.LoadResource { + } + + @TypeDefaultAction(state) + export class LoadResourceSuccess extends ResourceAction.LoadResourceSuccess { + } + + @TypeDefaultAction(state) + export class LoadResourceFail extends ResourceAction.LoadResourceFail { + } + + @TypeDefaultAction(state) + export class ChangeQueryParameters extends ResourceAction.ChangeQueryParameters { + } + + @TypeDefaultAction(state) + export class GetAll extends ResourceAction.GetAll { + } + + @TypeDefaultAction(state) + export class GetAllSuccess extends ResourceAction.GetAllSuccess<Licenses> { + } + + @TypeDefaultAction(state) + export class GetAllFail extends ResourceAction.GetAllFail<Licenses> { + } + + @TypeDefaultAction(state) + export class GetById extends ResourceAction.GetById { + } + + @TypeDefaultAction(state) + export class GetByIdSuccess extends ResourceAction.GetByIdSuccess<Licenses> { + } + + @TypeDefaultAction(state) + export class GetByIdFail extends ResourceAction.GetByIdFail<Licenses> { + } + + @TypeDefaultAction(state) + export class Create extends ResourceAction.Create<Licenses> { + } + + @TypeDefaultAction(state) + export class CreateSuccess extends ResourceAction.CreateSuccess<Licenses> { + } + + @TypeDefaultAction(state) + export class CreateFail extends ResourceAction.CreateFail<Licenses> { + } + + @TypeDefaultAction(state) + export class Update extends ResourceAction.Update<Licenses> { + } + + @TypeDefaultAction(state) + export class UpdateSuccess extends ResourceAction.UpdateSuccess<Licenses> { + } + + @TypeDefaultAction(state) + export class UpdateFail extends ResourceAction.UpdateFail<Licenses> { + } + + @TypeDefaultAction(state) + export class Delete extends ResourceAction.Delete { + } + + @TypeDefaultAction(state) + export class DeleteSuccess extends ResourceAction.DeleteSuccess { + } + + @TypeDefaultAction(state) + export class DeleteFail extends ResourceAction.DeleteFail { + } + +} + +export const adminLicenseActionNameSpace: ResourceNameSpace = AdminLicenseAction; diff --git a/src/app/features/admin/stores/license/admin-license.state.ts b/src/app/features/admin/stores/license/admin-license.state.ts new file mode 100644 index 000000000..e2108da7f --- /dev/null +++ b/src/app/features/admin/stores/license/admin-license.state.ts @@ -0,0 +1,48 @@ +import {adminLicenseActionNameSpace} from "@app/features/admin/stores/license/admin-license.action"; +import {Licenses} from "@app/generated-api"; +import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum"; +import {AdminResourceApiEnum} from "@app/shared/enums/api.enum"; +import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; +import {RoutesEnum} from "@app/shared/enums/routes.enum"; +import {Actions, State, Store} from "@ngxs/store"; +import { + ApiService, + defaultResourceStateInitValue, NotificationService, ResourceApiEnum, ResourceNameSpace, + ResourceState, + ResourceStateModel +} from "solidify-frontend"; +import {environment} from "../../../../../environments/environment"; + +export interface AdminLicenseStateModel extends ResourceStateModel<Licenses> { +} + +@State<AdminLicenseStateModel>({ + name: LocalStateEnum.admin_license, + defaults: { + ...defaultResourceStateInitValue, + }, +}) +export class AdminLicenseState extends ResourceState<Licenses> { + constructor(protected apiService: ApiService, + protected store: Store, + protected notificationService: NotificationService, + protected actions$: Actions) { + super(apiService, store, notificationService, actions$, RoutesEnum.adminLicense, environment); + } + + defineState(): LocalStateEnum { + return LocalStateEnum.admin_license; + } + + defineResourceNameSpace(): ResourceNameSpace { + return adminLicenseActionNameSpace; + } + + defineSubResource(): ApiResourceNameEnum[] { + return []; + } + + defineUrlResource(): ResourceApiEnum { + return AdminResourceApiEnum.licenses; + } +} diff --git a/src/app/shared/enums/license.enums.ts b/src/app/shared/enums/license.enums.ts new file mode 100644 index 000000000..608ad0d38 --- /dev/null +++ b/src/app/shared/enums/license.enums.ts @@ -0,0 +1,14 @@ +export enum odConformanceEnum { + empty = "", + approved = "approved", + rejected = "rejected", + not_reviewed = "not reviewed", +} + +export enum osdConformanceEnum { + empty = "", + approved = "approved", + rejected = "rejected", + not_reviewed = "not reviewed", +} + diff --git a/src/app/shared/enums/local-state.enum.ts b/src/app/shared/enums/local-state.enum.ts index b9fb8d813..d0e3686eb 100644 --- a/src/app/shared/enums/local-state.enum.ts +++ b/src/app/shared/enums/local-state.enum.ts @@ -14,7 +14,8 @@ export enum LocalStateEnum { preservationPolicy = "preservationPolicy", submissionPolicy = "submissionPolicy", admin = "admin", - admin_submissionPolicy = "admin_submissionPolicy", admin_preservationPolicy = "admin_preservationPolicy", + admin_submissionPolicy = "admin_submissionPolicy", + admin_license = "admin_license", } diff --git a/src/app/shared/enums/routes.enum.ts b/src/app/shared/enums/routes.enum.ts index fb7e2c5e1..64f4c2ff1 100644 --- a/src/app/shared/enums/routes.enum.ts +++ b/src/app/shared/enums/routes.enum.ts @@ -39,6 +39,10 @@ export enum AdminRoutesEnum { preservationPolicyDetail = "detail", preservationPolicyCreate = "create", preservationPolicyEdit = "edit", + license = "license", + licenseCreate = "create", + licenseEdit = "edit", + licenseDetail = "detail", } export class RoutesEnum implements RoutesEnum { @@ -64,4 +68,8 @@ export class RoutesEnum implements RoutesEnum { static adminPreservationPolicyCreate: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.preservationPolicy + urlSeparator + AdminRoutesEnum.preservationPolicyCreate; static adminPreservationPolicyDetail: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.preservationPolicy + urlSeparator + AdminRoutesEnum.preservationPolicyDetail; static adminPreservationPolicyEdit: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.preservationPolicy + urlSeparator + AdminRoutesEnum.preservationPolicyEdit; + static adminLicense: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.license; + static adminLicenseCreate: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.license + urlSeparator + AdminRoutesEnum.licenseCreate; + static adminLicenseDetail: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.license + urlSeparator + AdminRoutesEnum.licenseDetail; + static adminLicenseEdit: string = AppRoutesEnum.admin + urlSeparator + AdminRoutesEnum.license + urlSeparator + AdminRoutesEnum.licenseEdit; } diff --git a/src/app/shared/utils/store-dialog.util.ts b/src/app/shared/utils/store-dialog.util.ts index 82ebb933d..cb197187d 100644 --- a/src/app/shared/utils/store-dialog.util.ts +++ b/src/app/shared/utils/store-dialog.util.ts @@ -1,4 +1,5 @@ import {Component} from "@angular/core"; +import {AdminLicenseDeleteDialog} from "@app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog"; import {AdminSubmissionPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-submission-policy-delete/admin-submission-policy-delete.dialog"; import {DepositDeleteDialog as DepositDeleteDialog} from "@app/features/deposit/components/dialogs/deposit-delete/deposit-delete.dialog"; import {OrgunitDeleteDialog as OrgUnitDeleteDialog} from "@app/features/organizational-unit/components/dialogs/orgunit-delete/orgunit-delete.dialog"; @@ -7,7 +8,7 @@ import {StringUtil} from "solidify-frontend"; import {AdminPreservationPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-preservation-policy-delete/admin-preservation-policy-delete.dialog"; export class StoreDialogUtil { - private static readonly messageNotFound: string = "There is no dialog declared for the state '{0}'."; + private static readonly messageNotFound: string = "There is no dialog for action '{0}' declared for the state '{1}'. Please add if statement into StoreDialogUtil static class."; static delete(state: LocalStateEnum): Component { if (state === LocalStateEnum.organizationalUnit) { @@ -23,5 +24,9 @@ export class StoreDialogUtil { return AdminPreservationPolicyDeleteDialog as Component; } throw Error(StringUtil.format(StoreDialogUtil.messageNotFound, state)); + if (state === LocalStateEnum.admin_license) { + return AdminLicenseDeleteDialog as Component; + } + throw Error(StringUtil.format(StoreDialogUtil.messageNotFound, "Delete", state)); } } diff --git a/src/app/shared/utils/store-route-local.util.ts b/src/app/shared/utils/store-route-local.util.ts index d975f1dfc..e099e20ca 100644 --- a/src/app/shared/utils/store-route-local.util.ts +++ b/src/app/shared/utils/store-route-local.util.ts @@ -3,7 +3,7 @@ import {StringUtil} from "solidify-frontend"; import {LocalStateEnum} from "../enums/local-state.enum"; export class StoreRouteLocalUtil { - private static readonly messageNotFound: string = "There is no route declared for the state '{0}'."; + private static readonly messageNotFound: string = "There is no route declared for '{0}' for the state '{1}'. Please add if statement into StoreRouteLocalUtil static class to manage this state."; static getDetailRoute(state: LocalStateEnum): RoutesEnum { if (state === LocalStateEnum.organizationalUnit) { @@ -19,6 +19,10 @@ export class StoreRouteLocalUtil { return RoutesEnum.adminPreservationPolicyDetail; } throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); + if (state === LocalStateEnum.admin_license) { + return RoutesEnum.adminLicenseDetail; + } + throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, "Detail", state)); } static getCreateRoute(state: LocalStateEnum): RoutesEnum { @@ -35,6 +39,10 @@ export class StoreRouteLocalUtil { return RoutesEnum.adminPreservationPolicyCreate; } throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); + if (state === LocalStateEnum.admin_license) { + return RoutesEnum.adminLicenseCreate; + } + throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, "Create", state)); } static getRootRoute(state: LocalStateEnum): RoutesEnum { @@ -51,6 +59,10 @@ export class StoreRouteLocalUtil { return RoutesEnum.adminPreservationPolicy; } throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); + if (state === LocalStateEnum.admin_license) { + return RoutesEnum.adminLicense; + } + throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, "Root", state)); } static getEditRoute(state: LocalStateEnum): RoutesEnum { @@ -67,5 +79,9 @@ export class StoreRouteLocalUtil { return RoutesEnum.adminPreservationPolicyEdit; } throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); + if (state === LocalStateEnum.admin_license) { + return RoutesEnum.adminLicenseEdit; + } + throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, "Edit", state)); } } diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 708987124..a0f9af65c 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1,70 +1,110 @@ { - "access": { - "organizationalUnitNotFound": "Unable to get data", - "search": { - "scope": { - "all": "All", - "label": "Search filter", - "private": "Private", - "public": "Public" - } - }, - "table": { - "header": { - "accessLevel": "Access Level", - "organizationalUnit": "Organizational Unit", - "title": "Title", - "yearPublicationDate": "Publication Year" - } - } - }, - "admin": { - "home": { - "button": { - "edit": "Edit" - }, - "title": "Administration" - }, - "submissionPolicy": { - "button": { - "delete": "Delete", - "edit": "Edit", - "new": "Create new submission policy", - "refresh": "Refresh" - }, - "dialog": { - "delete": { - "cancel": "Cancel", - "confirm": "Yes", - "message": "Are you sure you want to delete the submission policy '{{name}}'?", - "title": "Confirm deletion" - } - }, - "form": { - "name": "Name", - "submissionApproval": "Submission Approval", - "submit": "Submit", - "timeToKeep": "Time To Keep" - }, - "home": { - "subtitle": "Describe the submission policy for a deposit", - "title": "Submission Policy" - }, - "table": { - "header": { - "creation": { - "when": "Created" - }, - "lastUpdate": { - "when": "Last updated" - }, - "name": "Name", - "submissionApproval": "Submission Approval", - "timeToKeep": "Time To Keep" - } - } - }, - "preservationPolicy": { + "access": { + "organizationalUnitNotFound": "Unable to get data", + "search": { + "scope": { + "all": "All", + "label": "Search filter", + "private": "Private", + "public": "Public" + } + }, + "table": { + "header": { + "accessLevel": "Access Level", + "organizationalUnit": "Organizational Unit", + "title": "Title", + "yearPublicationDate": "Publication Year" + } + } + }, + "admin": { + "home": { + "button": { + "edit": "Edit" + }, + "title": "Administration" + }, + "license": { + "button": { + "delete": "Delete", + "edit": "Edit", + "new": "Create new license", + "refresh": "Refresh" + }, + "dialog": { + "delete": { + "cancel": "Cancel", + "confirm": "Confirm", + "message": "Are you sure you want to delete this license?", + "title": "Confirm Deletion" + } + }, + "form": { + "domainContent": "Domain Content", + "domainData": "Domain Data", + "domainSoftware": "Domain Software", + "family": "Family", + "isGeneric": "Is generic", + "maintainer": "Maintainer", + "odConformance": "Od Conformance", + "openLicenseId": "Open license ID", + "osdConformance": "Osd conformance", + "status": "Status", + "submit": "Submit", + "title": "Title", + "url": "URL" + }, + "home": { + "subtitle": "", + "title": "License" + }, + "table": { + "header": { + "name": "Licenses" + } + } + }, + "submissionPolicy": { + "button": { + "delete": "Delete", + "edit": "Edit", + "new": "Create new submission policy", + "refresh": "Refresh" + }, + "dialog": { + "delete": { + "cancel": "Cancel", + "confirm": "Yes", + "message": "Are you sure you want to delete the submission policy '{{name}}'?", + "title": "Confirm deletion" + } + }, + "form": { + "name": "Name", + "submissionApproval": "Submission Approval", + "submit": "Submit", + "timeToKeep": "Time To Keep" + }, + "home": { + "subtitle": "Describe the submission policy for a deposit", + "title": "Submission Policy" + }, + "table": { + "header": { + "creation": { + "when": "Created" + }, + "lastUpdate": { + "when": "Last updated" + }, + "name": "Name", + "submissionApproval": "Submission Approval", + "timeToKeep": "Time To Keep" + } + } + }, + "preservationPolicy": { "button": { "delete": "Delete", "edit": "Edit", @@ -102,247 +142,251 @@ "retention": "Retention" } } - } - }, - "app": { - "toolbar": { - "admin": "Administration", - "deposit": "Deposits", - "home": "Home", - "login": "Log in", - "logout": "Log out", - "organizationalUnit": "Organizational Units" - } - }, - "breadcrumb": { - "access": { - "detail": "Detail", - "root": "Archive", - "search": "Search" - }, - "admin": { - "root": "Admin", - "submissionPolicy": { - "create": "Create submission policy", - "detail": "Detail submission policy", - "edit": "Edit submission policy", - "list": "List submission policy" - }, - "preservationPolicy" : { + }}, + "app": { + "toolbar": { + "admin": "Administration", + "deposit": "Deposits", + "home": "Home", + "login": "Log in", + "logout": "Log out", + "organizationalUnit": "Organizational Units" + } + }, + "breadcrumb": { + "access": { + "detail": "Detail", + "root": "Archive", + "search": "Search" + }, + "admin": { + "license": { + "create": "", + "detail": "", + "edit": "", + "list": "" + }, + "root": "Admin", + "submissionPolicy": { + "create": "Create submission policy", + "detail": "Detail submission policy", + "edit": "Edit submission policy", + "list": "List submission policy" + }, + "preservationPolicy" : { "create": "Create preservation policy", "detail": "Detail preservation policy", "edit": "Edit preservation policy", "list": "List preservation policy" - } - }, - "deposit": { - "create": "Create", - "detail": "Detail", - "edit": "Edit", - "list": "List", - "root": "Deposits" - }, - "home": "Home", - "organizationalUnit": { - "create": "Create", - "detail": "Detail", - "edit": "Edit", - "list": "List", - "root": "Organizational Units" - } - }, - "deposit": { - "accessLevel": "Access Level", - "authors": "Authors", - "collectionBegin": "Data Collection Start Date", - "collectionEnd": "Data Collection End Date", - "delete": "Delete", - "description": "Description", - "dialog": { - "delete": { - "cancel": "Cancel", - "confirm": "Yes", - "message": "Are you sure you want to delete the deposit '{{name}}'?", - "title": "Confirm deletion" - } - }, - "edit": "Edit", - "file": { - "button": { - "upload": "Upload files" - }, - "detail": { - "data": { - "available": "Available", - "category": "Category", - "checksums": "Checksums", - "complianceLevel": "Compliance level", - "createDate": "Creation date", - "fileFormat": "File format", - "fileSize": "File size", - "initialPath": "Initial path", - "smartSize": "Smart size", - "status": "Status", - "statusMessage": "Status message", - "type": "Type", - "virusCheck": "Virus check" - } - }, - "details": { - "close": "Close", - "title": "Details of file \"{{name}}\"" - }, - "inProgress": { - "noFile": "There is currently no file upload in progress." - }, - "modal": { - "button": { - "addFile": "Add file to upload list", - "close": "Cancel", - "confirmUpload": "Confirm upload" - }, - "form": { - "dataCategory": "Data category", - "dataType": "Data type", - "subDirectory": "Sub directory" - }, - "title": { - "fileToUpload": "Files", - "main": "Upload files", - "metadatas": "Metadatas" - } - }, - "title": { - "filesOfDeposit": "Files in deposit", - "inProgressUpload": "In progress upload" - }, - "tree": { - "delete": "Delete", - "details": "Details", - "errorRetry": "The file is in error. Click to resume the process !", - "label": "List of files :", - "noFile": "There is currently no file for this deposit", + }}, + "deposit": { + "create": "Create", + "detail": "Detail", + "edit": "Edit", + "list": "List", + "root": "Deposits" + }, + "home": "Home", + "organizationalUnit": { + "create": "Create", + "detail": "Detail", + "edit": "Edit", + "list": "List", + "root": "Organizational Units" + } + }, + "deposit": { + "accessLevel": "Access Level", + "authors": "Authors", + "collectionBegin": "Data Collection Start Date", + "collectionEnd": "Data Collection End Date", + "delete": "Delete", + "description": "Description", + "dialog": { + "delete": { + "cancel": "Cancel", + "confirm": "Yes", + "message": "Are you sure you want to delete the deposit '{{name}}'?", + "title": "Confirm deletion" + } + }, + "edit": "Edit", + "file": { + "button": { + "upload": "Upload files" + }, + "detail": { + "data": { + "available": "Available", + "category": "Category", + "checksums": "Checksums", + "complianceLevel": "Compliance level", + "createDate": "Creation date", + "fileFormat": "File format", + "fileSize": "File size", + "initialPath": "Initial path", + "smartSize": "Smart size", + "status": "Status", + "statusMessage": "Status message", + "type": "Type", + "virusCheck": "Virus check" + } + }, + "details": { + "close": "Close", + "title": "Details of file \"{{name}}\"" + }, + "inProgress": { + "noFile": "There is currently no file upload in progress." + }, + "modal": { + "button": { + "addFile": "Add file to upload list", + "close": "Cancel", + "confirmUpload": "Confirm upload" + }, + "form": { + "dataCategory": "Data category", + "dataType": "Data type", + "subDirectory": "Sub directory" + }, + "title": { + "fileToUpload": "Files", + "main": "Upload files", + "metadatas": "Metadatas" + } + }, + "title": { + "filesOfDeposit": "Files in deposit", + "inProgressUpload": "In progress upload" + }, + "tree": { + "delete": "Delete", + "details": "Details", + "errorRetry": "The file is in error. Click to resume the process !", + "label": "List of files :", + "noFile": "There is currently no file for this deposit", "refresh": "Refresh" - }, - "upload": { - "cancel": "Cancel", - "notification": { - "error": "There was a problem with the upload of the file", - "info": { - "canceled": "The file upload has been cancelled with success" - }, - "success": "File uploaded with success" - }, - "retry": "Retry" - } - }, - "hasEmbargo": "The deposit has an embargo", - "language": "Language", - "license": "License", - "new": "Create deposit", - "notification": { + }, + "upload": { + "cancel": "Cancel", + "notification": { + "error": "There was a problem with the upload of the file", + "info": { + "canceled": "The file upload has been cancelled with success" + }, + "success": "File uploaded with success" + }, + "retry": "Retry" + } + }, + "hasEmbargo": "The deposit has an embargo", + + "language": "Language", + "license": "License", + "new": "Create deposit","notification": { "submit": { "fail": "There was an error when submitting the deposit", "success": "Deposit submitted" } }, - "organizationUnit": "Organizational Unit", - "preservationPolicy": "Preservation Policy", - "publicationDate": "Publication Date", - "refresh": "Refresh", - "submissionPolicy": "Submission Policy", - "submit": "Submit", - "tab": { - "datafiles": "Data Files", - "details": "Details" - }, - "table": { - "header": { - "creation": { - "when": "Created" - }, - "lastUpdate": { - "when": "Last updated" - }, - "publicationDate": "Publication date", - "status": "Status", - "title": "Title" - } - }, - "title": "Title" - }, - "error": { - "upload": { - "duplicateDataFiles": "You can't upload a file with the same name in the same directory" - } - }, - "homePage": { - "archive": { - "detail": { - "DOI": "DOI", - "accessLevel": "Access level", - "authors": "Authors", - "description": "Description", - "licenses": "Licenses", - "orgUnit": "Organizational unit", - "publicationYear": "Publication year", - "title": "Title" - } - } - }, - "notification": { - "resource": { - "create": "Resource created successfully", - "delete": "Resource deleted successfully", - "update": "Resource updated successfully" - } - }, - "organizationalUnit": { - "closingDate": "Closing Date", - "delete": "Delete", - "description": "Description", - "dialog": { - "delete": { - "cancel": "Cancel", - "confirm": "Yes", - "message": "Are you sure you want to delete the organizational unit '{{name}}'?", - "title": "Confirm deletion" - } - }, - "edit": "Edit", - "isEmpty": "Is Empty", - "name": "Name", - "new": "Create new organizational unit", - "open": "Open", - "openingDate": "Opening Date", - "refresh": "Refresh", - "submissionPolicy": "Submission policy", - "submit": "Submit", - "table": { - "header": { - "creation": { - "when": "Created" - }, - "description": "Description", - "name": "Name" - } - } - }, - "required": "This field is required", - "search": "Search", - "table": { - "nodata": "No data has been found", - "paginator": { - "firstPage": "First page", - "itemPerPage": "Items per page", - "lastPage": "Last page", - "nextPage": "Next page", - "ofLabel": "of", - "previousPage": "Previous page" - } - }, - "tooltip": { - "other": "other", - "others": "others" - } + "organizationUnit": "Organizational Unit", + "preservationPolicy": "Preservation Policy", + "publicationDate": "Publication Date", + "refresh": "Refresh", + "submissionPolicy": "Submission Policy", + "submit": "Submit", + "tab": { + "datafiles": "Data Files", + "details": "Details" + }, + "table": { + "header": { + "creation": { + "when": "Created" + }, + "lastUpdate": { + "when": "Last updated" + }, + "publicationDate": "Publication date", + "status": "Status", + "title": "Title" + } + }, + "title": "Title" + }, + "error": { + "upload": { + "duplicateDataFiles": "You can't upload a file with the same name in the same directory" + } + }, + "homePage": { + "archive": { + "detail": { + "DOI": "DOI", + "accessLevel": "Access level", + "authors": "Authors", + "description": "Description", + "licenses": "Licenses", + "orgUnit": "Organizational unit", + "publicationYear": "Publication year", + "title": "Title" + } + } + }, + "notification": { + "resource": { + "create": "Resource created successfully", + "delete": "Resource deleted successfully", + "update": "Resource updated successfully" + } + }, + "organizationalUnit": { + "closingDate": "Closing Date", + "delete": "Delete", + "description": "Description", + "dialog": { + "delete": { + "cancel": "Cancel", + "confirm": "Yes", + "message": "Are you sure you want to delete the organizational unit '{{name}}'?", + "title": "Confirm deletion" + } + }, + "edit": "Edit", + "isEmpty": "Is Empty", + "name": "Name", + "new": "Create new organizational unit", + "open": "Open", + "openingDate": "Opening Date", + "refresh": "Refresh", + "submissionPolicy": "Submission policy", + "submit": "Submit", + "table": { + "header": { + "creation": { + "when": "Created" + }, + "description": "Description", + "name": "Name" + } + } + }, + "required": "This field is required", + "search": "Search", + "table": { + "nodata": "No data has been found", + "paginator": { + "firstPage": "First page", + "itemPerPage": "Items per page", + "lastPage": "Last page", + "nextPage": "Next page", + "ofLabel": "of", + "previousPage": "Previous page" + } + }, + "tooltip": { + "other": "other", + "others": "others" + } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 9fb0f23de..40acac24a 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -25,7 +25,47 @@ }, "title": "Administration" }, - "submissionPolicy": { + "license": { + "button": { + "delete": "Delete", + "edit": "Edit", + "new": "Create new license", + "refresh": "Refresh" + }, + "dialog": { + "delete": { + "cancel": "Cancel", + "confirm": "Confirm", + "message": "Are you sure you want to delete this license?", + "title": "Confirm Deletion" + } + }, + "form": { + "domainContent": "Domain Content", + "domainData": "Domain Data", + "domainSoftware": "Domain Software", + "family": "Family", + "isGeneric": "Is generic", + "maintainer": "Maintainer", + "odConformance": "Od Conformance", + "openLicenseId": "Open license ID", + "osdConformance": "Osd conformance", + "status": "Status", + "submit": "Submit", + "title": "Title", + "url": "URL" + }, + "home": { + "subtitle": "", + "title": "License" + }, + "table": { + "header": { + "name": "Licenses" + } + } + }, + "submissionPolicy": { "button": { "delete": "Delete", "edit": "Edit", @@ -120,12 +160,18 @@ "search": "Search" }, "admin": { - "root": "Admin", + "license": { + "create": "Create license", + "detail": "License detail", + "edit": "Edit license", + "list": "List license" + }, + "root": "Admin", "submissionPolicy": { "create": "Create submission policy", "detail": "Detail submission policy", "edit": "Edit submission policy", - "list": "List submission policy" + "list": "List Submission policy" }, "preservationPolicy" : { "create": "Create preservation policy", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index d9bbfbb4f..f738632f4 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -25,7 +25,47 @@ }, "title": "Administration" }, - "submissionPolicy": { + "license": { + "button": { + "delete": "Supprimer", + "edit": "Modifier", + "new": "Créer licence", + "refresh": "Rafraichir" + }, + "dialog": { + "delete": { + "cancel": "Annuler", + "confirm": "Oui", + "message": "Êtes-vous sûr de vouloir supprimer cette licence?", + "title": "Confirmer suppression" + } + }, + "form": { + "domainContent": "Contenu du domaine", + "domainData": "Données de domaine", + "domainSoftware": "Logiciel de domaine", + "family": "Familles", + "isGeneric": "Est générique", + "maintainer": "Mainteneur", + "odConformance": "Confirmité od", + "openLicenseId": "Open licence ID", + "osdConformance": "Conformité osd", + "status": "Statut", + "submit": "Envoyer", + "title": "Titre", + "url": "URL" + }, + "home": { + "subtitle": "", + "title": "Licence" + }, + "table": { + "header": { + "name": "Licences" + } + } + }, + "submissionPolicy": { "button": { "delete": "Supprimer", "edit": "Modifier", @@ -37,7 +77,7 @@ "cancel": "Annuler", "confirm": "Oui", "message": "Êtes-vous sûr de vouloir supprimer la politique de soumission '{{name}}'?", - "title": "Confirmer suppresion" + "title": "Confirmer suppression" } }, "form": { @@ -120,6 +160,12 @@ "search": "Recherche" }, "admin": { + "license": { + "create": "", + "detail": "", + "edit": "", + "list": "" + }, "root": "Administration", "submissionPolicy": { "create": "Créer politique de soumission", @@ -167,9 +213,9 @@ "edit": "Modifier", "file": { "button": { - "upload": "Envoyer fichiers" - }, - "detail": { + "upload": "Envoyer fichiers" + }, + "detail": { "data": { "available": "Disponible", "category": "Catégorie", @@ -191,29 +237,29 @@ "title": "Détails du fichier \"{{name}}\"" }, "inProgress": { - "noFile": "Il n'y a pour l'instant aucun envoi de fichier en cours." - }, - "modal": { - "button": { - "addFile": "Ajouter fichiers", - "close": "Fermer", - "confirmUpload": "Confirmer envoi" - }, - "form": { - "dataCategory": "Catégorie de données", - "dataType": "Type de données", - "subDirectory": "Sous-dossier" - }, - "title": { - "fileToUpload": "Fichier à envoyer", - "main": "Envoi de fichiers", - "metadatas": "Métadonnées" - } - }, - "title": { - "filesOfDeposit": "Fichiers du dêpot", - "inProgressUpload": "Envoi en cours" - }, + "noFile": "Il n'y a pour l'instant aucun envoi de fichier en cours." + }, + "modal": { + "button": { + "addFile": "Ajouter fichiers", + "close": "Fermer", + "confirmUpload": "Confirmer envoi" + }, + "form": { + "dataCategory": "Catégorie de données", + "dataType": "Type de données", + "subDirectory": "Sous-dossier" + }, + "title": { + "fileToUpload": "Fichier à envoyer", + "main": "Envoi de fichiers", + "metadatas": "Métadonnées" + } + }, + "title": { + "filesOfDeposit": "Fichiers du dêpot", + "inProgressUpload": "Envoi en cours" + }, "tree": { "delete": "Supprimer", "details": "Détails", @@ -223,16 +269,16 @@ "refresh": "Rafraichir" }, "upload": { - "cancel": "Annuler", - "notification": { - "error": "Il y a eu un problème avec l'envoi du fichier", - "info": { - "canceled": "L'envoi du fichier a été annulé avec succès" - }, - "success": "Fichier envoyé avec succès" - }, - "retry": "Réessayer" - } + "cancel": "Annuler", + "notification": { + "error": "Il y a eu un problème avec l'envoi du fichier", + "info": { + "canceled": "L'envoi du fichier a été annulé avec succès" + }, + "success": "Fichier envoyé avec succès" + }, + "retry": "Réessayer" + } }, "hasEmbargo": "Le dépôt a un embargo", "language": "Langue", @@ -268,11 +314,11 @@ } }, "title": "Titre" - }, - "error": { - "upload": { - "duplicateDataFiles": "Vous ne pouvez pas uploader un fichier avec le même nom dans le même répertoire" - } + }, + "error": { + "upload": { + "duplicateDataFiles": "Vous ne pouvez pas uploader un fichier avec le même nom dans le même répertoire" + } }, "homePage": { "archive": { -- GitLab From 91950e7bc4b1e9f8665a96df62e1012e34550d98 Mon Sep 17 00:00:00 2001 From: Florent Poittevin <florent.poittevin@unige.ch> Date: Mon, 12 Aug 2019 10:43:24 +0200 Subject: [PATCH 2/2] fix: remove merges errors --- src/app/shared/utils/store-dialog.util.ts | 3 +-- src/app/shared/utils/store-route-local.util.ts | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/app/shared/utils/store-dialog.util.ts b/src/app/shared/utils/store-dialog.util.ts index cb197187d..a7626eed0 100644 --- a/src/app/shared/utils/store-dialog.util.ts +++ b/src/app/shared/utils/store-dialog.util.ts @@ -1,11 +1,11 @@ import {Component} from "@angular/core"; import {AdminLicenseDeleteDialog} from "@app/features/admin/components/dialogs/admin-license-delete/admin-license-delete.dialog"; +import {AdminPreservationPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-preservation-policy-delete/admin-preservation-policy-delete.dialog"; import {AdminSubmissionPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-submission-policy-delete/admin-submission-policy-delete.dialog"; import {DepositDeleteDialog as DepositDeleteDialog} from "@app/features/deposit/components/dialogs/deposit-delete/deposit-delete.dialog"; import {OrgunitDeleteDialog as OrgUnitDeleteDialog} from "@app/features/organizational-unit/components/dialogs/orgunit-delete/orgunit-delete.dialog"; import {LocalStateEnum} from "@app/shared/enums/local-state.enum"; import {StringUtil} from "solidify-frontend"; -import {AdminPreservationPolicyDeleteDialog} from "@app/features/admin/components/dialogs/admin-preservation-policy-delete/admin-preservation-policy-delete.dialog"; export class StoreDialogUtil { private static readonly messageNotFound: string = "There is no dialog for action '{0}' declared for the state '{1}'. Please add if statement into StoreDialogUtil static class."; @@ -23,7 +23,6 @@ export class StoreDialogUtil { if (state === LocalStateEnum.admin_preservationPolicy) { return AdminPreservationPolicyDeleteDialog as Component; } - throw Error(StringUtil.format(StoreDialogUtil.messageNotFound, state)); if (state === LocalStateEnum.admin_license) { return AdminLicenseDeleteDialog as Component; } diff --git a/src/app/shared/utils/store-route-local.util.ts b/src/app/shared/utils/store-route-local.util.ts index e099e20ca..4cb1ebe51 100644 --- a/src/app/shared/utils/store-route-local.util.ts +++ b/src/app/shared/utils/store-route-local.util.ts @@ -18,7 +18,6 @@ export class StoreRouteLocalUtil { if (state === LocalStateEnum.admin_preservationPolicy) { return RoutesEnum.adminPreservationPolicyDetail; } - throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); if (state === LocalStateEnum.admin_license) { return RoutesEnum.adminLicenseDetail; } @@ -38,7 +37,6 @@ export class StoreRouteLocalUtil { if (state === LocalStateEnum.admin_preservationPolicy) { return RoutesEnum.adminPreservationPolicyCreate; } - throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); if (state === LocalStateEnum.admin_license) { return RoutesEnum.adminLicenseCreate; } @@ -58,7 +56,6 @@ export class StoreRouteLocalUtil { if (state === LocalStateEnum.admin_preservationPolicy) { return RoutesEnum.adminPreservationPolicy; } - throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); if (state === LocalStateEnum.admin_license) { return RoutesEnum.adminLicense; } @@ -78,7 +75,6 @@ export class StoreRouteLocalUtil { if (state === LocalStateEnum.admin_preservationPolicy) { return RoutesEnum.adminPreservationPolicyEdit; } - throw Error(StringUtil.format(StoreRouteLocalUtil.messageNotFound, state)); if (state === LocalStateEnum.admin_license) { return RoutesEnum.adminLicenseEdit; } -- GitLab