Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • dlcm/ui/dlcm-portal
1 result
Show changes
Showing
with 269 additions and 177 deletions
......@@ -5,9 +5,13 @@ import {
ChangeDetectorRef,
Component,
} from "@angular/core";
import {MatDialog} from "@angular/material/dialog";
import {ActivatedRoute} from "@angular/router";
import {SubmissionPolicy} from "@app/generated-api";
import {Store} from "@ngxs/store";
import {
Actions,
Store,
} from "@ngxs/store";
import {SharedAbstractListRoutable} from "@shared/components/routables/shared-abstract-list/shared-abstract-list.routable";
import {FieldTypeEnum} from "@shared/enums/field-type.enum";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
......@@ -26,11 +30,22 @@ export class AdminSubmissionPolicyListRoutable extends SharedAbstractListRoutabl
readonly KEY_CREATE_BUTTON: string = TRANSLATE("admin.submissionPolicy.button.new");
readonly KEY_REFRESH_BUTTON: string = TRANSLATE("admin.submissionPolicy.button.refresh");
readonly KEY_BACK_BUTTON: string | undefined = TRANSLATE("admin.button.goBackToAdminHome");
readonly KEY_PARAM_NAME: keyof SubmissionPolicy & string = "name";
constructor(protected readonly _store: Store,
protected readonly _changeDetector: ChangeDetectorRef,
protected readonly _route: ActivatedRoute,
protected readonly _actions$: Actions,
protected readonly _dialog: MatDialog) {
super(_store, _changeDetector, _route, _actions$, _dialog, LocalStateEnum.admin_submissionPolicy, adminSubmissionPolicyActionNameSpace, {}, LocalStateEnum.admin);
}
conditionDisplayEditButton(model: SubmissionPolicy | undefined): boolean {
return true;
}
constructor(protected store: Store,
protected _changeDetector: ChangeDetectorRef,
protected _route: ActivatedRoute) {
super(store, _changeDetector, _route, LocalStateEnum.admin_submissionPolicy, adminSubmissionPolicyActionNameSpace, {}, LocalStateEnum.admin);
conditionDisplayDeleteButton(model: SubmissionPolicy | undefined): boolean {
return true;
}
defineColumns(): void {
......
......@@ -20,6 +20,7 @@
[formControl]="fd"
[solidifyValidation]="errors"
[required]="formValidationHelper.hasRequiredField(fd)"
(blur)="checkAvailable(formDefinition.targetedUid, fd)"
>
<mat-error #errors></mat-error>
</mat-form-field>
......
......@@ -3,9 +3,10 @@
>
<dlcm-admin-user-form #formPresentational
*ngIf="isReadyToBeDisplayedInCreateModeObs | async"
(submitChange)="create($event)"
[listPersons]="listPersonObs | async"
[listOrganizationalUnit]="listOrgUnitObs | async"
(submitChange)="create($event)"
(checkAvailableChange)="checkAvailable($event)"
(dirtyChange)="updateCanDeactivate($event)"
></dlcm-admin-user-form>
</div>
......@@ -5,6 +5,7 @@ import {
} from "@admin/user/stores/admin-user.state";
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
ViewChild,
} from "@angular/core";
......@@ -13,6 +14,7 @@ import {
Person,
} from "@app/generated-api";
import {
Actions,
Select,
Store,
} from "@ngxs/store";
......@@ -38,7 +40,9 @@ export class AdminUserCreateRoutable extends SharedAbstractCreateRoutable<UserEx
@ViewChild("formPresentational", {static: false})
readonly formPresentational: SharedAbstractFormPresentational<UserExtended>;
constructor(protected store: Store) {
super(store, LocalStateEnum.admin_user, adminUserActionNameSpace, LocalStateEnum.admin);
constructor(protected readonly _store: Store,
protected readonly _actions$: Actions,
protected readonly _changeDetector: ChangeDetectorRef) {
super(_store, _actions$, _changeDetector, LocalStateEnum.admin_user, adminUserActionNameSpace, LocalStateEnum.admin);
}
}
......@@ -21,6 +21,7 @@
[listOrganizationalUnit]="listOrgUnitObs | async"
[readonly]="!isEdit"
(submitChange)="update($event)"
(checkAvailableChange)="checkAvailable($event)"
(dirtyChange)="updateCanDeactivate($event)"
></dlcm-admin-user-form>
</div>
......@@ -60,14 +60,14 @@ export class AdminUserDetailEditRoutable extends SharedAbstractDetailEditCommonR
@Select((state: LocalStateModel) => state.shared.shared_organizationalUnit.list) listOrgUnitObs: Observable<AccessOrganizationalUnit[]>;
@Select(AppState.currentUser) currentUser: Observable<UserExtended>;
readonly KEY_PARAM_NAME: string = "externalUid";
readonly KEY_PARAM_NAME: keyof UserExtended & string = "externalUid";
constructor(protected _store: Store,
protected route: ActivatedRoute,
protected _route: ActivatedRoute,
protected readonly _actions$: Actions,
protected readonly _changeDetector: ChangeDetectorRef,
public dialog: MatDialog) {
super(_store, route, _actions$, _changeDetector, dialog, LocalStateEnum.admin_user, adminUserActionNameSpace, LocalStateEnum.admin);
public _dialog: MatDialog) {
super(_store, _route, _actions$, _changeDetector, _dialog, LocalStateEnum.admin_user, adminUserActionNameSpace, LocalStateEnum.admin);
}
getSubResourceWithParentId(id: string): void {
......@@ -104,7 +104,7 @@ export class AdminUserDetailEditRoutable extends SharedAbstractDetailEditCommonR
}
private openModalConfirmEditRole(data: AdminUserEditRoleCurrentUserDialogData, model: ModelFormControlEvent<UserExtended>): void {
this.subscribe(this.dialog.open(AdminUserEditRoleCurrentUserDialog, {
this.subscribe(this._dialog.open(AdminUserEditRoleCurrentUserDialog, {
data: data,
}).afterClosed().pipe(
tap((isConfirmed: boolean | undefined) => {
......
......@@ -5,8 +5,12 @@ import {
ChangeDetectorRef,
Component,
} from "@angular/core";
import {MatDialog} from "@angular/material/dialog";
import {ActivatedRoute} from "@angular/router";
import {Store} from "@ngxs/store";
import {
Actions,
Store,
} from "@ngxs/store";
import {SharedAbstractListRoutable} from "@shared/components/routables/shared-abstract-list/shared-abstract-list.routable";
import {FieldTypeEnum} from "@shared/enums/field-type.enum";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
......@@ -26,11 +30,22 @@ export class AdminUserListRoutable extends SharedAbstractListRoutable<UserExtend
readonly KEY_CREATE_BUTTON: string = TRANSLATE("admin.user.button.new");
readonly KEY_REFRESH_BUTTON: string = TRANSLATE("admin.user.button.refresh");
readonly KEY_BACK_BUTTON: string | undefined = TRANSLATE("admin.button.goBackToAdminHome");
readonly KEY_PARAM_NAME: keyof UserExtended & string = "externalUid";
constructor(protected readonly _store: Store,
protected readonly _changeDetector: ChangeDetectorRef,
protected readonly _route: ActivatedRoute,
protected readonly _actions$: Actions,
protected readonly _dialog: MatDialog) {
super(_store, _changeDetector, _route, _actions$, _dialog, LocalStateEnum.admin_user, adminUserActionNameSpace, {}, LocalStateEnum.admin);
}
conditionDisplayEditButton(model: UserExtended | undefined): boolean {
return true;
}
constructor(protected store: Store,
protected _changeDetector: ChangeDetectorRef,
protected _route: ActivatedRoute) {
super(store, _changeDetector, _route, LocalStateEnum.admin_user, adminUserActionNameSpace, {}, LocalStateEnum.admin);
conditionDisplayDeleteButton(model: UserExtended | undefined): boolean {
return true;
}
defineColumns(): void {
......
@import "../../../../../../sass/abstracts/variables";
@import "../../../../../../sass/abstracts/mixins";
.hide {
display: none;
}
ul {
padding: 0;
li {
.label {
font-weight: bold;
padding-right: 5px;
&:after {
content: ' :';
}
}
}
}
.is-in-error {
color: $red;
}
.error-message {
color: $red;
margin-top: 20px;
}
form > mat-form-field {
width: 100%;
}
mat-panel-title {
align-items: center;
}
mat-panel-description {
justify-content: flex-end;
}
.button-add-files-wrapper {
text-align: right;
padding-top: 20px;
}
.footer {
justify-content: flex-end;
align-items: center;
}
import {OnInit} from "@angular/core";
import {
FormBuilder,
FormGroup,
Validators,
} from "@angular/forms";
import {MatDialogRef} from "@angular/material";
import {SharedAbstractContainer} from "@app/shared/components/containers/shared-abstract/shared-abstract.container";
import {DataCategoryEnum} from "@app/shared/enums/data-category.enum";
import {DataTypeEnum} from "@app/shared/enums/data-type.enum";
import {DataCategoryHelper} from "@app/shared/helpers/data-category.helper";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import {DepositFileUploadArchiveDialog} from "@deposit/components/dialogs/deposit-file-upload-archive/deposit-file-upload-archive.dialog";
import {DepositFileUploadDialog} from "@deposit/components/dialogs/deposit-file-upload/deposit-file-upload.dialog";
import {
isNullOrUndefined,
PropertyName,
} from "solidify-frontend";
export abstract class AbstractDepositFileUploadDialog extends SharedAbstractContainer implements OnInit {
form: FormGroup;
formDefinition: AbstractDepositFileUploadFormComponentFormDefinition = new AbstractDepositFileUploadFormComponentFormDefinition();
get dataCategoryHelper(): typeof DataCategoryHelper {
return DataCategoryHelper;
}
readonly REGEX_INVALID: RegExp = new RegExp("[~!@#$%^&*()`;<>?,\\[\\]\\{\\}\\\\]");
readonly files: string = "files";
constructor(protected _dialogRef: MatDialogRef<DepositFileUploadDialog | DepositFileUploadArchiveDialog>,
protected _fb: FormBuilder) {
super();
}
ngOnInit(): void {
super.ngOnInit();
this.form = this._fb.group({
[this.formDefinition.dataCategory]: [DataCategoryEnum.Primary, [Validators.required]],
[this.formDefinition.dataType]: [DataTypeEnum.Reference, [Validators.required]],
});
}
close(): void {
this._dialogRef.close();
}
abstract onFileChange(event: Event & any): void;
getDate(lastModified: number): Date {
return new Date(lastModified);
}
abstract onSubmit(): void;
getDataCategory(): DataCategoryEnum {
return this.form.get(this.formDefinition.dataCategory).value;
}
abstract delete(file: File): void;
}
export class AbstractDepositFileUploadFormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() dataCategory: string;
@PropertyName() dataType: string;
}
......@@ -5,7 +5,7 @@
<mat-expansion-panel *ngIf="archiveToUpload">
<mat-expansion-panel-header>
<mat-panel-title>
{{archiveToUpload.name}}
<span [class.is-in-error]="isFileNameInvalid()">{{archiveToUpload.name}}</span>
</mat-panel-title>
<mat-panel-description>
<button mat-icon-button
......@@ -35,6 +35,9 @@
</mat-expansion-panel>
</mat-accordion>
<div *ngIf="isFileNameInvalid()"
class="error-message">{{'deposit.file.invalid.character' | translate}}</div>
<div *ngIf="archiveToUpload | isNullOrUndefined"
class="button-add-files-wrapper"
>
......@@ -89,7 +92,7 @@
</button>
<button mat-flat-button
color="primary"
[disabled]="!form.valid || (archiveToUpload | isNullOrUndefined)"
[disabled]="!form.valid || (archiveToUpload | isNullOrUndefined) || isFileNameInvalid()"
(click)="onSubmit()"
>{{'deposit.file.modal.button.confirmUpload' | translate}}
</button>
......
@import "../../../../../../sass/abstracts/variables";
@import "../../../../../../sass/abstracts/mixins";
.hide {
display: none;
}
ul {
padding: 0;
li {
.label {
font-weight: bold;
padding-right: 5px;
&:after {
content: ' :';
}
}
}
}
form > mat-form-field {
width: 100%;
}
mat-panel-title {
align-items: center;
}
mat-panel-description {
justify-content: flex-end;
}
@import "../abstract-deposit-file-upload/abstract-deposit-file-upload.dialog";
.metadata-title {
padding-top: 20px;
}
.button-add-files-wrapper {
text-align: right;
padding-top: 20px;
}
.footer {
justify-content: flex-end;
align-items: center;
}
......@@ -15,7 +15,11 @@ import {DataCategoryEnum} from "@app/shared/enums/data-category.enum";
import {DataTypeEnum} from "@app/shared/enums/data-type.enum";
import {DataCategoryHelper} from "@app/shared/helpers/data-category.helper";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import {PropertyName} from "solidify-frontend";
import {AbstractDepositFileUploadDialog} from "@deposit/components/dialogs/abstract-deposit-file-upload/abstract-deposit-file-upload.dialog";
import {
isNullOrUndefined,
PropertyName,
} from "solidify-frontend";
@Component({
selector: "dlcm-deposit-file-upload-archive-dialog",
......@@ -23,32 +27,20 @@ import {PropertyName} from "solidify-frontend";
styleUrls: ["./deposit-file-upload-archive.dialog.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DepositFileUploadArchiveDialog extends SharedAbstractContainer implements OnInit {
form: FormGroup;
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
export class DepositFileUploadArchiveDialog extends AbstractDepositFileUploadDialog implements OnInit {
archiveToUpload: File;
get dataCategoryHelper(): typeof DataCategoryHelper {
return DataCategoryHelper;
}
readonly files: string = "files";
constructor(protected _dialogRef: MatDialogRef<DepositFileUploadArchiveDialog>,
protected _fb: FormBuilder) {
super();
super(_dialogRef, _fb);
}
ngOnInit(): void {
super.ngOnInit();
this.form = this._fb.group({
[this.formDefinition.dataCategory]: [DataCategoryEnum.Primary, [Validators.required]],
[this.formDefinition.dataType]: [DataTypeEnum.Reference, [Validators.required]],
});
}
close(): void {
this._dialogRef.close();
}
onFileChange(event: Event & any): void {
......@@ -66,10 +58,6 @@ export class DepositFileUploadArchiveDialog extends SharedAbstractContainer impl
return arrayFile;
}
getDate(lastModified: number): Date {
return new Date(lastModified);
}
onSubmit(): void {
const base = this.form.value as FileUploadWrapper;
const fileUploadWrapper = {} as FileUploadWrapper;
......@@ -78,17 +66,15 @@ export class DepositFileUploadArchiveDialog extends SharedAbstractContainer impl
this._dialogRef.close(fileUploadWrapper);
}
getDataCategory(): DataCategoryEnum {
return this.form.get(this.formDefinition.dataCategory).value;
}
delete(file: File): void {
this.archiveToUpload = undefined;
}
}
class FormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() dataCategory: string;
@PropertyName() dataType: string;
isFileNameInvalid(): boolean {
if (isNullOrUndefined(this.archiveToUpload)) {
return false;
}
const fileName = this.archiveToUpload.name;
return this.REGEX_INVALID.test(fileName);
}
}
......@@ -5,12 +5,12 @@
<mat-expansion-panel *ngFor="let file of filesToUpload">
<mat-expansion-panel-header>
<mat-panel-title>
{{file.name}}
<span [class.is-in-error]="file.isInError">{{file.file.name}}</span>
</mat-panel-title>
<mat-panel-description>
<button mat-icon-button
class="trash"
(click)="delete(file)"
(click)="delete(file.file)"
[matTooltip]="'deposit.file.tree.delete' | translate"
[matTooltipPosition]="'left'"
>
......@@ -21,20 +21,23 @@
<ul>
<li>
<span class="label">Type</span>
<span class="value">{{file.type}}</span>
<span class="value">{{file.file.type}}</span>
</li>
<li>
<span class="label">Size</span>
<span class="value">{{file.size | filesize}}</span>
<span class="value">{{file.file.size | filesize}}</span>
</li>
<li>
<span class="label">Last modified</span>
<span class="value">{{getDate(file.lastModified) | date}}</span>
<span class="value">{{getDate(file.file.lastModified) | date}}</span>
</li>
</ul>
</mat-expansion-panel>
</mat-accordion>
<div *ngIf="isCurrentFileNameInError()"
class="error-message">{{'deposit.file.invalid.character' | translate}}</div>
<div class="button-add-files-wrapper">
<button mat-button
color="accent"
......@@ -94,7 +97,7 @@
</button>
<button mat-flat-button
color="primary"
[disabled]="!form.valid || filesToUpload.length === 0"
[disabled]="!form.valid || filesToUpload.length === 0 || isCurrentFileNameInError()"
(click)="onSubmit()"
>{{'deposit.file.modal.button.confirmUpload' | translate}}
</button>
......
@import "../../../../../../sass/abstracts/variables";
@import "../../../../../../sass/abstracts/mixins";
.hide {
display: none;
}
ul {
padding: 0;
li {
.label {
font-weight: bold;
padding-right: 5px;
&:after {
content: ' :';
}
}
}
}
form > mat-form-field {
width: 100%;
}
mat-panel-title {
align-items: center;
}
mat-panel-description {
justify-content: flex-end;
}
.button-add-files-wrapper {
text-align: right;
padding-top: 20px;
}
.footer {
justify-content: flex-end;
align-items: center;
}
@import "../abstract-deposit-file-upload/abstract-deposit-file-upload.dialog";
......@@ -15,7 +15,14 @@ import {DataCategoryEnum} from "@app/shared/enums/data-category.enum";
import {DataTypeEnum} from "@app/shared/enums/data-type.enum";
import {DataCategoryHelper} from "@app/shared/helpers/data-category.helper";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import {PropertyName} from "solidify-frontend";
import {
AbstractDepositFileUploadDialog,
AbstractDepositFileUploadFormComponentFormDefinition,
} from "@deposit/components/dialogs/abstract-deposit-file-upload/abstract-deposit-file-upload.dialog";
import {
isNullOrUndefined,
PropertyName,
} from "solidify-frontend";
@Component({
selector: "dlcm-deposit-file-upload-dialog",
......@@ -23,20 +30,17 @@ import {PropertyName} from "solidify-frontend";
styleUrls: ["./deposit-file-upload.dialog.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DepositFileUploadDialog extends SharedAbstractContainer implements OnInit {
form: FormGroup;
export class DepositFileUploadDialog extends AbstractDepositFileUploadDialog implements OnInit {
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
filesToUpload: File[] = [];
filesToUpload: FileWrapper[] = [];
get dataCategoryHelper(): typeof DataCategoryHelper {
return DataCategoryHelper;
}
readonly files: string = "files";
constructor(protected _dialogRef: MatDialogRef<DepositFileUploadDialog>,
protected _fb: FormBuilder) {
super();
super(_dialogRef, _fb);
}
ngOnInit(): void {
......@@ -48,10 +52,6 @@ export class DepositFileUploadDialog extends SharedAbstractContainer implements
});
}
close(): void {
this._dialogRef.close();
}
onFileChange(event: Event & any): void {
if (event.target.files.length > 0) {
const files: FileList = event.target.files;
......@@ -72,41 +72,51 @@ export class DepositFileUploadDialog extends SharedAbstractContainer implements
const isIncluded = this.getIndexOfFile(fileToFilter) !== -1;
return !isIncluded;
});
this.filesToUpload.push(...files);
const listFileWrapper: FileWrapper[] = [];
files.forEach(f => {
listFileWrapper.push({
file: f,
isInError: this.isFileNameInvalid(f),
});
});
this.filesToUpload.push(...listFileWrapper);
}
private getIndexOfFile(file: File): number {
return this.filesToUpload.findIndex(fileAlreadyToUpload => fileAlreadyToUpload.name === file.name && fileAlreadyToUpload.type === file.type && fileAlreadyToUpload.size === file.size && fileAlreadyToUpload.lastModified === file.lastModified);
}
getDate(lastModified: number): Date {
return new Date(lastModified);
return this.filesToUpload.findIndex(fileAlreadyToUpload => fileAlreadyToUpload.file.name === file.name && fileAlreadyToUpload.file.type === file.type && fileAlreadyToUpload.file.size === file.size && fileAlreadyToUpload.file.lastModified === file.lastModified);
}
onSubmit(): void {
const base = this.form.value as FileUploadWrapper;
const listFilesUploadWrapper: FileUploadWrapper[] = [];
this.filesToUpload.forEach(f => {
this.filesToUpload.forEach((f: FileWrapper) => {
const fileUploadWrapper = {} as FileUploadWrapper;
Object.assign(fileUploadWrapper, base);
fileUploadWrapper.file = f;
fileUploadWrapper.file = f.file;
listFilesUploadWrapper.push(fileUploadWrapper);
});
this._dialogRef.close(listFilesUploadWrapper);
}
getDataCategory(): DataCategoryEnum {
return this.form.get(this.formDefinition.dataCategory).value;
}
delete(file: File): void {
this.filesToUpload.splice(this.getIndexOfFile(file), 1);
}
isFileNameInvalid(file: File): boolean {
const fileName = file.name;
return this.REGEX_INVALID.test(fileName);
}
isCurrentFileNameInError(): boolean {
return !isNullOrUndefined(this.filesToUpload.find(f => f.isInError));
}
}
class FormComponentFormDefinition extends BaseFormDefinition {
class FormComponentFormDefinition extends AbstractDepositFileUploadFormComponentFormDefinition {
@PropertyName() subDirectory: string;
@PropertyName() dataCategory: string;
@PropertyName() dataType: string;
}
class FileWrapper {
file: File;
isInError: boolean;
}
......@@ -14,7 +14,7 @@
[valueKey]="'resId'"
[placeholder]="'deposit.organizationUnit' | translate"
(valueChange)="orgUnitSelectionChange($event)"
[readonly]="readonly"
[readonly]="true"
>
</dlcm-shared-searchable-single-select>
......
......@@ -18,6 +18,7 @@ import {
Deposit,
Language,
License,
OrganizationalUnit,
Person,
PreservationPolicy,
SubmissionPolicy,
......@@ -39,6 +40,7 @@ import {
SharedPersonState,
SharedPersonStateModel,
} from "@shared/stores/person/shared-person.state";
import {UserPreferencesUtil} from "@shared/utils/user-preferences.util";
import _ from "lodash";
import {
BehaviorSubject,
......@@ -97,6 +99,9 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
@Input()
selectedOrgUnit: Observable<OrganizationalUnitExtended>;
@Input()
listAuthorizedOrgUnit: OrganizationalUnit[];
@ViewChild("authorMultiSearchableSelect", {static: false})
authorMultiSearchableSelect: SharedSearchableMultiSelectPresentational<SharedPersonStateModel, Person>;
......@@ -146,8 +151,9 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
}
protected initNewForm(): void {
const orgUnitId = UserPreferencesUtil.getPreferredOrgUnitInDepositMenu(this.listAuthorizedOrgUnit).resId;
this.form = this._fb.group({
[this.formDefinition.organizationalUnitId]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.organizationalUnitId]: [orgUnitId, [Validators.required, SolidifyValidator]],
[this.formDefinition.title]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.description]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.languageId]: [""],
......@@ -162,6 +168,8 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
[this.formDefinition.authors]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.doi]: ["", {disabled: true}],
});
this.orgUnitSelectionChange(orgUnitId);
}
protected bindFormTo(deposit: DepositExtended): void {
......
......@@ -4,6 +4,7 @@
<dlcm-deposit-form #formPresentational
*ngIf="isReadyToBeDisplayedInCreateModeObs | async"
(submitChange)="create($event)"
[listAuthorizedOrgUnit]="listAuthorizedOrgUnit"
[languages]="languagesObs | async"
[listSubmissionPolicies]="listSubmissionPoliciesObs | async"
[listPreservationPolicies]="listPreservationPoliciesObs | async"
......
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
OnDestroy,
OnInit,
......@@ -13,6 +14,7 @@ import {
} from "@app/features/deposit/stores/deposit.state";
import {
Language,
OrganizationalUnit,
Person,
PreservationPolicy,
SubmissionPolicy,
......@@ -22,7 +24,9 @@ import {SharedAbstractCreateRoutable} from "@app/shared/components/routables/sha
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {SharedOrgUnitAction} from "@app/shared/stores/organizational-unit/shared-organizational-unit.action";
import {AppAuthorizedOrganizationalUnitState} from "@app/stores/authorized-organizational-unit/app-authorized-organizational-unit.state";
import {
Actions,
Select,
Store,
} from "@ngxs/store";
......@@ -30,7 +34,10 @@ import {OrganizationalUnitExtended} from "@shared/models/business/organizational
import {SharedOrgUnitPreservationPolicyAction} from "@shared/stores/organizational-unit/preservation-policy/shared-organizational-unit-preservation-policy.action";
import {SharedOrgUnitSubmissionPolicyAction} from "@shared/stores/organizational-unit/submission-policy/shared-organizational-unit-submission-policy.action";
import {Observable} from "rxjs";
import {FormState} from "solidify-frontend";
import {
FormState,
ResourceState,
} from "solidify-frontend";
@Component({
selector: "dlcm-deposit-create-routable",
......@@ -51,9 +58,12 @@ export class DepositCreateRoutable extends SharedAbstractCreateRoutable<DepositE
@ViewChild("formPresentational", {static: false})
readonly formPresentational: SharedAbstractFormPresentational<DepositExtended>;
listAuthorizedOrgUnit: OrganizationalUnit[] = ResourceState.listSnapshot(this._store, AppAuthorizedOrganizationalUnitState);
constructor(protected store: Store) {
super(store, LocalStateEnum.deposit, depositActionNameSpace);
constructor(protected readonly _store: Store,
protected readonly _actions$: Actions,
protected readonly _changeDetector: ChangeDetectorRef) {
super(_store, _actions$, _changeDetector, LocalStateEnum.deposit, depositActionNameSpace);
}
ngOnInit(): void {
......@@ -64,13 +74,13 @@ export class DepositCreateRoutable extends SharedAbstractCreateRoutable<DepositE
}
adaptPolicies(organizationalUnitId: string): void {
this.store.dispatch(new SharedOrgUnitAction.GetById(organizationalUnitId));
this.store.dispatch(new SharedOrgUnitPreservationPolicyAction.GetAll(organizationalUnitId));
this.store.dispatch(new SharedOrgUnitSubmissionPolicyAction.GetAll(organizationalUnitId));
this._store.dispatch(new SharedOrgUnitAction.GetById(organizationalUnitId));
this._store.dispatch(new SharedOrgUnitPreservationPolicyAction.GetAll(organizationalUnitId));
this._store.dispatch(new SharedOrgUnitSubmissionPolicyAction.GetAll(organizationalUnitId));
}
ngOnDestroy(): void {
this.store.dispatch(new SharedOrgUnitPreservationPolicyAction.Clear());
this.store.dispatch(new SharedOrgUnitSubmissionPolicyAction.Clear());
this._store.dispatch(new SharedOrgUnitPreservationPolicyAction.Clear());
this._store.dispatch(new SharedOrgUnitSubmissionPolicyAction.Clear());
}
}
......@@ -38,7 +38,7 @@
>
<button mat-button
color="accent"
(click)="backToDetail()"
(click)="navigate(tabSelected, false)"
>
<mat-icon>navigate_before</mat-icon>
{{KEY_BACK_TO_DETAIL_BUTTON | translate}}
......