Commit 227ddd46 authored by Florent Poittevin's avatar Florent Poittevin Committed by Alicia.DeDiosFuente
Browse files

649 Set default policy for submission policy

parent e6e03ded
......@@ -49,3 +49,4 @@ Thumbs.db
# target files
target
src/app/generated-api/
src/environments/version.ts
......@@ -12,12 +12,26 @@
<dlcm-shared-searchable-multi-select [list]="listSubmissionPolicies"
[formControl]="form.get(formDefinition.submissionPolicies)"
[required]="isRequired(formDefinition.submissionPolicies)"
[labelKey]="'name'"
[valueKey]="'resId'"
[placeholder]="'admin.organizationalUnit.form.submissionPolicy' | translate"
>
</dlcm-shared-searchable-multi-select>
<mat-form-field>
<mat-label>{{'admin.organizationalUnit.form.submissionPolicyDefaultValue' | translate }}</mat-label>
<mat-select [formControlName]="formDefinition.defaultSubmissionPolicy"
[required]="isRequired(formDefinition.defaultSubmissionPolicy)">
<mat-option *ngFor="let submissionPolicy of listDefaultSubmissionPolicies"
[value]="submissionPolicy.resId">
{{submissionPolicy.name}}
</mat-option>
</mat-select>
<mat-error *ngIf="getFormControl(formDefinition.defaultSubmissionPolicy).invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of getFormControl(formDefinition.defaultSubmissionPolicy).errors?.errorsFromBackend">{{error}}</mat-error>
</mat-form-field>
<mat-form-field>
<input [formControlName]="formDefinition.description"
matInput
......
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges} from "@angular/core";
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges} from "@angular/core";
import {FormBuilder, Validators} from "@angular/forms";
import {OrganizationalUnitsExtended} from "@app/features/deposit/models/organizational-unit-extended.model";
import {OrganizationalUnits, PreservationPolicies, SubmissionPolicies} from "@app/generated-api";
import {SharedAbstractFormPresentational} from "@app/shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import _ from "lodash";
import {tap} from "rxjs/operators";
import {DateUtil, PropertyName, SolidifyValidator} from "solidify-frontend";
@Component({
......@@ -13,7 +15,7 @@ import {DateUtil, PropertyName, SolidifyValidator} from "solidify-frontend";
styleUrls: ["../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentational<OrganizationalUnits> implements OnChanges {
export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentational<OrganizationalUnits> implements OnChanges, OnInit {
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
@Input()
......@@ -25,6 +27,8 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
@Input()
listPreservationPolicies: PreservationPolicies[];
listDefaultSubmissionPolicies: SubmissionPolicies[];
constructor(protected readonly _changeDetectorRef: ChangeDetectorRef,
private readonly _fb: FormBuilder) {
super(_changeDetectorRef);
......@@ -43,6 +47,20 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
}
}
ngOnInit(): void {
super.ngOnInit();
this.computeListDefaultSubmissionPolicies();
this.subscribe(this.form.get(this.formDefinition.submissionPolicies).valueChanges.pipe(
tap(v => {
this.computeListDefaultSubmissionPolicies();
if (this.listDefaultSubmissionPolicies.findIndex(s => s.resId === this.form.get(this.formDefinition.defaultSubmissionPolicy).value) === -1) {
this.form.get(this.formDefinition.defaultSubmissionPolicy).setValue(undefined);
}
}),
));
}
protected initNewForm(): void {
this.form = this._fb.group({
[this.formDefinition.name]: ["", [Validators.required, SolidifyValidator]],
......@@ -51,11 +69,13 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
[this.formDefinition.closingDate]: [""],
[this.formDefinition.isEmpty]: [false],
[this.formDefinition.open]: [false],
[this.formDefinition.submissionPolicies]: [],
[this.formDefinition.submissionPolicies]: [[], [Validators.required, SolidifyValidator]],
[this.formDefinition.defaultSubmissionPolicy]: [undefined, [Validators.required, SolidifyValidator]],
[this.formDefinition.defaultPreservationPolicy]: [],
});
}
protected bindFormTo(organizationalUnit: OrganizationalUnits): void {
protected bindFormTo(organizationalUnit: OrganizationalUnitsExtended): void {
this.form = this._fb.group({
[this.formDefinition.name]: [organizationalUnit.name, [Validators.required, SolidifyValidator]],
[this.formDefinition.description]: [organizationalUnit.description, [Validators.required, SolidifyValidator]],
......@@ -63,15 +83,22 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
[this.formDefinition.closingDate]: [organizationalUnit.closingDate],
[this.formDefinition.isEmpty]: [organizationalUnit.isEmpty],
[this.formDefinition.open]: [organizationalUnit.open],
[this.formDefinition.submissionPolicies]: [_.map(this.selectedSubmissionPolicies, LocalModelAttributeEnum.resId)],
[this.formDefinition.submissionPolicies]: [_.map(this.selectedSubmissionPolicies, LocalModelAttributeEnum.resId), [Validators.required, SolidifyValidator]],
[this.formDefinition.defaultSubmissionPolicy]: [(organizationalUnit.defaultSubmissionPolicy ? organizationalUnit.defaultSubmissionPolicy.resId : undefined), [Validators.required, SolidifyValidator]],
[this.formDefinition.defaultPreservationPolicy]: [],
});
}
protected treatmentBeforeSubmit(organizationalUnit: OrganizationalUnits): OrganizationalUnits {
protected treatmentBeforeSubmit(organizationalUnit: OrganizationalUnitsExtended | any): OrganizationalUnitsExtended {
organizationalUnit.openingDate = DateUtil.convertToLocalDateDateSimple(organizationalUnit.openingDate);
organizationalUnit.closingDate = DateUtil.convertToLocalDateDateSimple(organizationalUnit.closingDate);
organizationalUnit.defaultSubmissionPolicy = {resId: organizationalUnit[this.formDefinition.defaultSubmissionPolicy]};
return organizationalUnit;
}
computeListDefaultSubmissionPolicies(): void {
this.listDefaultSubmissionPolicies = this.listSubmissionPolicies.filter((s) => this.form.get(this.formDefinition.submissionPolicies).value.includes(s.resId));
}
}
class FormComponentFormDefinition extends BaseFormDefinition {
......@@ -82,4 +109,6 @@ class FormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() openingDate: string;
@PropertyName() submissionPolicies: string;
@PropertyName() open: string;
@PropertyName() defaultSubmissionPolicy: string;
@PropertyName() defaultPreservationPolicy: string;
}
export interface OrganizationalUnitPreservationPolicy {
defaultPolicy: boolean;
}
export interface OrganizationalUnitSubmissionPolicy {
defaultPolicy: boolean;
}
import {OrganizationalUnitsExtended} from "@app/features/deposit/models/organizational-unit-extended.model";
import {OrganizationalUnits} from "@app/generated-api";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {ResourceAction, ResourceNameSpace, TypeDefaultAction} from "solidify-frontend";
......@@ -46,27 +47,27 @@ export namespace AdminOrgUnitAction {
}
@TypeDefaultAction(state)
export class Create extends ResourceAction.Create<OrganizationalUnits> {
export class Create extends ResourceAction.Create<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
export class CreateSuccess extends ResourceAction.CreateSuccess<OrganizationalUnits> {
export class CreateSuccess extends ResourceAction.CreateSuccess<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
export class CreateFail extends ResourceAction.CreateFail<OrganizationalUnits> {
export class CreateFail extends ResourceAction.CreateFail<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
export class Update extends ResourceAction.Update<OrganizationalUnits> {
export class Update extends ResourceAction.Update<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
export class UpdateSuccess extends ResourceAction.UpdateSuccess<OrganizationalUnits> {
export class UpdateSuccess extends ResourceAction.UpdateSuccess<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
export class UpdateFail extends ResourceAction.UpdateFail<OrganizationalUnits> {
export class UpdateFail extends ResourceAction.UpdateFail<OrganizationalUnitsExtended> {
}
@TypeDefaultAction(state)
......
import {OrganizationalUnitSubmissionPolicy} from "@app/features/admin/models/organizational-unit-submission-policy.model";
import {
AdminOrgUnitAction,
adminOrgUnitActionNameSpace,
......@@ -7,8 +8,8 @@ import {
AdminOrganizationalUnitSubmissionPolicyState,
AdminOrganizationalUnitSubmissionPolicyStateModel,
} from "@app/features/admin/stores/organizational-unit/submission-policy/admin-organizational-unit-submission-policy.state";
import {OrganizationalUnitsExtended} from "@app/features/deposit/models/organizational-unit-extended.model";
import {DepositStateModel} from "@app/features/deposit/stores/deposit.state";
import {OrganizationalUnits} from "@app/generated-api";
import {AccessResourceApiEnum, AdminResourceApiEnum} from "@app/shared/enums/api.enum";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
......@@ -16,16 +17,20 @@ import {RoutesEnum} from "@app/shared/enums/routes.enum";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {SharedPreservationPolicyAction} from "@app/shared/stores/preservation-policy/shared-preservation-policy.action";
import {SharedSubmissionPolicyAction} from "@app/shared/stores/submission-policy/shared-submission-policy.action";
import {Action, Actions, State, StateContext, Store} from "@ngxs/store";
import {Action, Actions, ofActionCompleted, State, StateContext, Store} from "@ngxs/store";
import _ from "lodash";
import {Observable} from "rxjs";
import {tap} from "rxjs/internal/operators/tap";
import {
ActionSubActionCompletionsWrapper,
ApiService,
ChangeModeEnum,
defaultResourceStateInitValue,
isNotNullNorUndefined,
ModelAttributeEnum,
NotificationService,
ObjectUtil,
OverrideDefaultAction,
Relation2TiersActionHelper,
ResourceApiEnum,
......@@ -36,7 +41,7 @@ import {
} from "solidify-frontend";
import {environment} from "../../../../../environments/environment";
export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<OrganizationalUnits> {
export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<OrganizationalUnitsExtended> {
[LocalStateEnum.admin_organizationalUnit_submissionPolicy]?: AdminOrganizationalUnitSubmissionPolicyStateModel;
}
......@@ -49,7 +54,7 @@ export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<Or
AdminOrganizationalUnitSubmissionPolicyState,
],
})
export class AdminOrganizationalUnitState extends ResourceState<OrganizationalUnits> {
export class AdminOrganizationalUnitState extends ResourceState<OrganizationalUnitsExtended> {
constructor(protected apiService: ApiService,
protected store: Store,
......@@ -103,28 +108,61 @@ export class AdminOrganizationalUnitState extends ResourceState<OrganizationalUn
@OverrideDefaultAction()
@Action(AdminOrgUnitAction.Create)
create(ctx: StateContext<AdminOrganizationalUnitStateModel>, action: AdminOrgUnitAction.Create): Observable<OrganizationalUnits> {
create(ctx: StateContext<AdminOrganizationalUnitStateModel>, action: AdminOrgUnitAction.Create): Observable<OrganizationalUnitsExtended> {
const oldDefaultSubmissionPolicyId = undefined;
return super.internalCreate(ctx, action)
.pipe(
tap(model => {
const parentResId = model.resId;
const oldSubmissionPolicies = [];
const newSubmissionPolicies = action.modelFormControlEvent.model[LocalModelAttributeEnum.submissionPolicies];
const updateSubResourceAction = Relation2TiersActionHelper.updateSubResource(adminOrgUnitSubmissionPolicyActionNameSpace, model.resId, [], newSubmissionPolicies);
StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, adminOrgUnitActionNameSpace, adminOrgUnitSubmissionPolicyActionNameSpace);
const updateSubResourceAction = Relation2TiersActionHelper.update(adminOrgUnitSubmissionPolicyActionNameSpace, parentResId, oldSubmissionPolicies, newSubmissionPolicies);
const listActionSubActionCompletionsWrapper = this.getUpdateRelationActionsWrapper(action, oldDefaultSubmissionPolicyId, parentResId);
StoreUtil.updateSubResource(ChangeModeEnum.create, this.actions$, ctx, updateSubResourceAction, adminOrgUnitActionNameSpace, adminOrgUnitSubmissionPolicyActionNameSpace, ...listActionSubActionCompletionsWrapper);
}),
);
}
@OverrideDefaultAction()
@Action(AdminOrgUnitAction.Update)
update(ctx: StateContext<AdminOrganizationalUnitStateModel>, action: AdminOrgUnitAction.Update): Observable<OrganizationalUnits> {
update(ctx: StateContext<AdminOrganizationalUnitStateModel>, action: AdminOrgUnitAction.Update): Observable<OrganizationalUnitsExtended> {
const oldDefaultSubmissionPolicyId = ObjectUtil.getValue(ctx.getState().current.defaultSubmissionPolicy, ModelAttributeEnum.resId) as string;
return super.internalUpdate(ctx, action)
.pipe(
tap(model => {
const parentResId = action.modelFormControlEvent.model.resId;
const oldSubmissionPolicies = _.map(ctx.getState()[LocalStateEnum.admin_organizationalUnit_submissionPolicy].selected, LocalModelAttributeEnum.resId);
const newSubmissionPolicies = action.modelFormControlEvent.model[LocalModelAttributeEnum.submissionPolicies];
const updateSubResourceAction = Relation2TiersActionHelper.updateSubResource(adminOrgUnitSubmissionPolicyActionNameSpace, action.modelFormControlEvent.model.resId, oldSubmissionPolicies, newSubmissionPolicies);
StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, adminOrgUnitActionNameSpace, adminOrgUnitSubmissionPolicyActionNameSpace);
const updateSubResourceAction = Relation2TiersActionHelper.update(adminOrgUnitSubmissionPolicyActionNameSpace, parentResId, oldSubmissionPolicies, newSubmissionPolicies);
const listActionSubActionCompletionsWrapper = this.getUpdateRelationActionsWrapper(action, oldDefaultSubmissionPolicyId, parentResId);
StoreUtil.updateSubResource(ChangeModeEnum.update, this.actions$, ctx, updateSubResourceAction, adminOrgUnitActionNameSpace, adminOrgUnitSubmissionPolicyActionNameSpace, ...listActionSubActionCompletionsWrapper);
}),
);
}
private getUpdateRelationActionsWrapper(action: AdminOrgUnitAction.Update, oldDefaultSubmissionPolicyId: string, parentResId: string): ActionSubActionCompletionsWrapper[] {
const listActionSubActionCompletionsWrapper: ActionSubActionCompletionsWrapper[] = [];
const newDefaultSubmissionPolicyId = action.modelFormControlEvent.model.defaultSubmissionPolicy.resId;
if (oldDefaultSubmissionPolicyId !== newDefaultSubmissionPolicyId) {
if (isNotNullNorUndefined(oldDefaultSubmissionPolicyId)) {
listActionSubActionCompletionsWrapper.push({
action: Relation2TiersActionHelper.updateRelation<OrganizationalUnitSubmissionPolicy>(adminOrgUnitSubmissionPolicyActionNameSpace, parentResId, oldDefaultSubmissionPolicyId, {defaultPolicy: false} as OrganizationalUnitSubmissionPolicy),
subActionCompletions: [
this.actions$.pipe(ofActionCompleted(adminOrgUnitSubmissionPolicyActionNameSpace.UpdateRelationSuccess)),
this.actions$.pipe(ofActionCompleted(adminOrgUnitSubmissionPolicyActionNameSpace.UpdateRelationFail)),
],
});
}
if (isNotNullNorUndefined(newDefaultSubmissionPolicyId)) {
listActionSubActionCompletionsWrapper.push({
action: Relation2TiersActionHelper.updateRelation<OrganizationalUnitSubmissionPolicy>(adminOrgUnitSubmissionPolicyActionNameSpace, parentResId, newDefaultSubmissionPolicyId, {defaultPolicy: true} as OrganizationalUnitSubmissionPolicy),
subActionCompletions: [
this.actions$.pipe(ofActionCompleted(adminOrgUnitSubmissionPolicyActionNameSpace.UpdateRelationSuccess)),
this.actions$.pipe(ofActionCompleted(adminOrgUnitSubmissionPolicyActionNameSpace.UpdateRelationFail)),
],
});
}
}
return listActionSubActionCompletionsWrapper;
}
}
import {OrganizationalUnitSubmissionPolicy} from "@app/features/admin/models/organizational-unit-submission-policy.model";
import {SubmissionPolicies} from "@app/generated-api";
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {Relation2TiersAction, Relation2TiersNameSpace, TypeDefaultAction} from "solidify-frontend";
......@@ -42,6 +43,18 @@ export namespace AdminOrgUnitSubmissionPolicyAction {
export class UpdateFail extends Relation2TiersAction.UpdateFail {
}
@TypeDefaultAction(state)
export class UpdateRelation extends Relation2TiersAction.UpdateRelation<OrganizationalUnitSubmissionPolicy> {
}
@TypeDefaultAction(state)
export class UpdateRelationSuccess extends Relation2TiersAction.UpdateRelationSuccess<OrganizationalUnitSubmissionPolicy> {
}
@TypeDefaultAction(state)
export class UpdateRelationFail extends Relation2TiersAction.UpdateRelationFail<OrganizationalUnitSubmissionPolicy> {
}
@TypeDefaultAction(state)
export class Create extends Relation2TiersAction.Create {
}
......@@ -65,6 +78,18 @@ export namespace AdminOrgUnitSubmissionPolicyAction {
@TypeDefaultAction(state)
export class DeleteFail extends Relation2TiersAction.DeleteFail {
}
@TypeDefaultAction(state)
export class DeleteById extends Relation2TiersAction.DeleteById {
}
@TypeDefaultAction(state)
export class DeleteByIdSuccess extends Relation2TiersAction.DeleteByIdSuccess {
}
@TypeDefaultAction(state)
export class DeleteByIdFail extends Relation2TiersAction.DeleteByIdFail {
}
}
export const adminOrgUnitSubmissionPolicyActionNameSpace: Relation2TiersNameSpace = AdminOrgUnitSubmissionPolicyAction;
import {OrganizationalUnitSubmissionPolicy} from "@app/features/admin/models/organizational-unit-submission-policy.model";
import {adminOrgUnitSubmissionPolicyActionNameSpace} from "@app/features/admin/stores/organizational-unit/submission-policy/admin-organizational-unit-submission-policy.action";
import {SubmissionPolicies} from "@app/generated-api";
import {ApiResourceNameEnum} from "@app/shared/enums/api-resource-name.enum";
......@@ -24,7 +25,7 @@ export interface AdminOrganizationalUnitSubmissionPolicyStateModel extends Relat
...defaultRelation2TiersStateInitValue,
},
})
export class AdminOrganizationalUnitSubmissionPolicyState extends Relation2TiersState<SubmissionPolicies> {
export class AdminOrganizationalUnitSubmissionPolicyState extends Relation2TiersState<SubmissionPolicies, OrganizationalUnitSubmissionPolicy> {
constructor(protected apiService: ApiService,
protected store: Store,
......
......@@ -2,6 +2,7 @@
<mat-select [placeholder]="placeholder"
[formControl]="formControl"
(selectionChange)="selectionChange($event)"
[required]="required"
multiple>
<mat-select-trigger>
{{formControl.value ? getCorrespondingLabel(formControl.value[0]) : ''}}
......@@ -17,4 +18,6 @@
{{value[labelKey]}}
</mat-option>
</mat-select>
<mat-error *ngIf="formControl.invalid">{{'required' | translate}}</mat-error>
<mat-error *ngFor="let error of formControl.errors?.errorsFromBackend">{{error}}</mat-error>
</mat-form-field>
......@@ -35,6 +35,9 @@ export class SharedSearchableMultiSelectPresentational extends SharedAbstractPre
@Input()
formControl: FormControl;
@Input()
required: boolean;
private readonly _valueBS: BehaviorSubject<any[] | undefined> = new BehaviorSubject<any[] | undefined>(undefined);
@Output("valueChange")
......@@ -64,7 +67,7 @@ export class SharedSearchableMultiSelectPresentational extends SharedAbstractPre
}
propagateChange = (__: any) => {
}
};
registerOnChange(fn: any): void {
this.propagateChange = fn;
......
......@@ -2,30 +2,31 @@
"Description is invalid": "Description is invalid",
"URL is invalid": "URL is invalid",
"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": {
"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"},
"title": "Administration"
},
"institution": {
"button": {
"delete": "Delete",
......@@ -122,6 +123,7 @@
"open": "Open",
"openingDate": "Opening Date",
"submissionPolicy": "Submission Policy",
"submissionPolicyDefaultValue": "Default Submission Policy",
"submit": "Submit"
},
"home": {
......@@ -162,7 +164,7 @@
"submit": "Submit"
},
"home": {
"subtitle": "Describe the preservation policy for a deposit",
"subtitle": "Describe the preservation policy for a deposit",
"title": "Preservation Policy"
},
"table": {
......@@ -216,74 +218,71 @@
"submissionApproval": "Submission Approval",
"timeToKeep": "Time To Keep"
}
}
},
"user": {
"button": {
"delete": "Delete",
"edit": "Edit",
"new": "Create new User",
"refresh": "Refresh"
},
"user": {
"button": {
"delete": "Delete",
"edit": "Edit",
"new": "Create new preservation policy",
"refresh": "Refresh"
},
"dialog": {
"delete": {
"cancel": "Cancel",
"confirm": "Yes",
"message": "Are you sure you want to delete the User '{{name}}'?",
"title": "Confirm deletion"
}
},
"form": {
"externalUid": "external Uid",
"targetedUid": "targeted Uid",
"dialog": {
"delete": {
"cancel": "Cancel",
"confirm": "Yes",
"message": "Are you sure you want to delete the User '{{name}}'?",
"title": "Confirm deletion"
}
},
"form": {
"accessToken": "Access Token",
"email": "Email",
"externalUid": "external Uid",
"firstName": "First Name",
"homeOrganization": "Home Organization",
"lastName": "Last Name",
"person": "Person",
"refreshToken": "Refresh Token",
"roles": "Roles",
"submit": "Submit",
"targetedUid": "targeted Uid"
},
"home": {
"subtitle": "Describe the User",
"title": "User"
},
"table": {
"header": {
"email": "Email",
"externalUid": "External Uid",
"firstName": "First Name",
"lastName": "Last Name",
"homeOrganization": "Home Organization",
"email": "Email",
"accessToken": "Access Token",
"refreshToken": "Refresh Token",
"submit": "Submit"
},
"home": {
"subtitle": "Describe the User",
"title": "User"
},
"table": {
"header": {
"creation": {
"when": "Created"
},
"lastUpdate": {
"when": "Last updated"
},
"externalUid": "External Uid",
"targetedUid": "Targeted Uid",
"firstName": "First Name",
"lastName": "Last Name",
"homeOrganization": "Home Organization",
"email": "Email"
}
"lastName": "Last Name",
"targetedUid": "Targeted Uid"
}
}
},
"app": {
"toolbar": {
"admin": "Administration",
"deposit": "Deposits",
"home": "Home",
"login": "Log in",
"logout": "Log out",
"organizationalUnit": "Organizational Units"
}