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

feat: replace deposit org unit select component by searchable select component

parent 40b8d745
No related branches found
No related tags found
No related merge requests found
Showing with 44 additions and 60 deletions
......@@ -4,21 +4,18 @@
>
<div class="two-columns-wrapper">
<div class="left-part">
<mat-form-field *ngIf="getFormControl(formDefinition.organizationalUnitId) as fd">
<mat-label>{{'deposit.organizationUnit' | translate }}</mat-label>
<mat-select [solidifyValidation]="errors"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
(selectionChange)="orgUnitSelectionChange($event)"
>
<mat-option *ngFor="let orgUnit of organizationalUnits"
[value]="orgUnit.resId"
>
{{orgUnit.name}}
</mat-option>
</mat-select>
<mat-error #errors></mat-error>
</mat-form-field>
<dlcm-shared-searchable-single-select *ngIf="getFormControl(formDefinition.organizationalUnitId) as fd"
solidifyValidation
[resourceNameSpace]="appAuthorizedOrganizationalUnitNameSpace"
[state]="appAuthorizedOrganizationalUnitState"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[labelKey]="'name'"
[valueKey]="'resId'"
[placeholder]="'deposit.organizationUnit' | translate"
(valueChange)="orgUnitSelectionChange($event)"
>
</dlcm-shared-searchable-single-select>
<mat-form-field *ngIf="getFormControl(formDefinition.title) as fd">
<input [formControl]="fd"
......
......@@ -12,7 +12,6 @@ import {
FormBuilder,
Validators,
} from "@angular/forms";
import {MatSelectChange} from "@angular/material";
import {MatDialog} from "@angular/material/dialog";
import {DepositExtended} from "@app/features/deposit/models/deposits-extended.model";
import {OrganizationalUnitExtended} from "@app/features/deposit/models/organizational-unit-extended.model";
......@@ -29,6 +28,8 @@ import {LocalModelAttributeEnum} from "@app/shared/enums/model-attribute.enum";
import {BaseFormDefinition} from "@app/shared/models/base-form-definition.model";
import {sharedLicenseActionNameSpace} from "@app/shared/stores/license/shared-license.action";
import {sharedPersonActionNameSpace} from "@app/shared/stores/person/shared-person.action";
import {appAuthorizedOrganizationalUnitNameSpace} from "@app/stores/authorized-organizational-unit/app-authorized-organizational-unit.action";
import {AppAuthorizedOrganizationalUnitState} from "@app/stores/authorized-organizational-unit/app-authorized-organizational-unit.state";
import {DepositPersonDialog} from "@deposit/components/dialogs/deposit-person/deposit-person.dialog";
import {SharedSearchableMultiSelectPresentational} from "@shared/components/presentationals/shared-searchable-multi-select/shared-searchable-multi-select.presentational";
import {BreakpointService} from "@shared/services/breakpoint.service";
......@@ -78,9 +79,6 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
@Input()
listPreservationPolicies: PreservationPolicy[];
@Input()
organizationalUnits: OrganizationalUnitExtended[];
@Input()
selectedPersons: PersonExtended[];
......@@ -103,6 +101,10 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
sharedLicenseActionNameSpace: ResourceNameSpace = sharedLicenseActionNameSpace;
sharedLicenseState: typeof SharedLicenseState = SharedLicenseState;
appAuthorizedOrganizationalUnitNameSpace: ResourceNameSpace = appAuthorizedOrganizationalUnitNameSpace;
appAuthorizedOrganizationalUnitState: typeof AppAuthorizedOrganizationalUnitState = AppAuthorizedOrganizationalUnitState;
licenceCallback: (value: License) => string = (value: License) => value.openLicenseId + " (" + value.title + ")";
private readonly _orgUnitValueBS: BehaviorSubject<string | undefined> = new BehaviorSubject<string | undefined>(undefined);
......@@ -209,8 +211,8 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
return this.form.get(this.formDefinition.authors).value.includes(this.personConnected.resId);
}
orgUnitSelectionChange($event: MatSelectChange): void {
this._orgUnitValueBS.next($event.value);
orgUnitSelectionChange(orgUnitResId: string): void {
this._orgUnitValueBS.next(orgUnitResId);
let valueChange: boolean = false;
this.subscribe(this.selectedOrgUnit.pipe(
skipWhile(o => o === null || o === undefined),
......
......@@ -7,7 +7,6 @@
[languages]="languagesObs | async"
[listSubmissionPolicies]="listSubmissionPoliciesObs | async"
[listPreservationPolicies]="listPreservationPoliciesObs | async"
[organizationalUnits]="organizationalUnitsObs | async"
[personConnected]="personConnectedObs | async"
[listPersons]="listPersonObs | async"
[selectedOrgUnit]="selectedOrgUnitObs"
......
......@@ -13,7 +13,6 @@ import {
} from "@app/features/deposit/stores/deposit.state";
import {
Language,
OrganizationalUnit,
Person,
PreservationPolicy,
SubmissionPolicy,
......@@ -45,7 +44,6 @@ export class DepositCreateRoutable extends SharedAbstractCreateRoutable<DepositE
@Select((state: LocalStateModel) => state.deposit.form) formObs: Observable<FormState>;
@Select((state: LocalStateModel) => state.shared.shared_language.list) languagesObs: Observable<Language[]>;
@Select((state: LocalStateModel) => state.shared.shared_person.list) listPersonObs: Observable<Person[]>;
@Select((state: LocalStateModel) => state.application.application_authorizedOrganizationalUnit.list) organizationalUnitsObs: Observable<OrganizationalUnit[]>;
@Select((state: LocalStateModel) => state.shared.shared_organizationalUnit.shared_organizationalUnit_preservationPolicy.selected) listPreservationPoliciesObs: Observable<PreservationPolicy[]>;
@Select((state: LocalStateModel) => state.shared.shared_organizationalUnit.shared_organizationalUnit_submissionPolicy.selected) listSubmissionPoliciesObs: Observable<SubmissionPolicy[]>;
@Select((state: LocalStateModel) => state.application.application_person.current) personConnectedObs: Observable<Person>;
......
......@@ -4,7 +4,6 @@
[languages]="languagesObs | async"
[listSubmissionPolicies]="listSubmissionPoliciesObs | async"
[listPreservationPolicies]="listPreservationPoliciesObs | async"
[organizationalUnits]="organizationalUnitsObs | async"
[listPersons]="listPersonObs | async"
[selectedPersons]="selectedPersonObs | async"
[personConnected]="personConnectedObs | async"
......
......@@ -8,7 +8,6 @@ import {
import {MatDialog} from "@angular/material";
import {ActivatedRoute} from "@angular/router";
import {
AccessOrganizationalUnit,
Deposit,
Language,
Person,
......@@ -60,7 +59,6 @@ export class DepositMetadataRoutable extends SharedAbstractEditRoutable<DepositE
@Select((state: LocalStateModel) => state.application.application_person.current) personConnectedObs: Observable<Person>;
@Select((state: LocalStateModel) => state.shared.shared_language.list) languagesObs: Observable<Language[]>;
@Select((state: LocalStateModel) => state.shared.shared_person.list) listPersonObs: Observable<Person[]>;
@Select((state: LocalStateModel) => state.application.application_authorizedOrganizationalUnit.list) organizationalUnitsObs: Observable<AccessOrganizationalUnit[]>;
@Select((state: LocalStateModel) => state.deposit.deposit_dataFile.list) listDataFileObs: Observable<DepositDataFile[]>;
@Select((state: LocalStateModel) => state.deposit.deposit_person.selected) selectedPersonObs: Observable<Person[]>;
@Select((state: LocalStateModel) => state.deposit.current) currentDepositObs: Observable<Deposit>;
......
......@@ -90,4 +90,4 @@ export namespace AppAuthorizedOrganizationalUnitAction {
}
}
export const appAuthorizedOrganizationalUnit: ResourceNameSpace = AppAuthorizedOrganizationalUnitAction;
export const appAuthorizedOrganizationalUnitNameSpace: ResourceNameSpace = AppAuthorizedOrganizationalUnitAction;
import {OrganizationalUnit} from "@app/generated-api";
import {AdminResourceApiEnum} from "@app/shared/enums/api.enum";
import {appAuthorizedOrganizationalUnit} from "@app/stores/authorized-organizational-unit/app-authorized-organizational-unit.action";
import {appAuthorizedOrganizationalUnitNameSpace} from "@app/stores/authorized-organizational-unit/app-authorized-organizational-unit.action";
import {
Actions,
Selector,
State,
Store,
} from "@ngxs/store";
......@@ -14,6 +15,7 @@ import {
QueryParameters,
ResourceState,
ResourceStateModel,
StoreUtil,
} from "solidify-frontend";
import {environment} from "../../../environments/environment";
......@@ -41,7 +43,7 @@ export class AppAuthorizedOrganizationalUnitState extends ResourceState<Organiza
protected notificationService: NotificationService,
protected actions$: Actions) {
super(apiService, store, notificationService, actions$, {
nameSpace: appAuthorizedOrganizationalUnit,
nameSpace: appAuthorizedOrganizationalUnitNameSpace,
});
}
......@@ -49,34 +51,23 @@ export class AppAuthorizedOrganizationalUnitState extends ResourceState<Organiza
return AdminResourceApiEnum.authorizedOrganizationalUnits;
}
// @OverrideDefaultAction()
// @Action(AppAuthorizedOrganizationalUnitAction.GetAll)
// getAll(ctx: StateContext<ResourceStateModel<PersonExtended>>, action: AppAuthorizedOrganizationalUnitAction.GetAll): Observable<CollectionTyped<OrganizationalUnit>> {
// action.queryParameters.sort
// return super.getAll(ctx, action);
// ctx.patchState({
// isLoadingCounter: ctx.getState().isLoadingCounter + 1,
// queryParameters: StoreUtil.getQueryParametersToApply(action.queryParameters, ctx),
// });
// let url = this._urlResource;
// const searchItems = ctx.getState().queryParameters.search.searchItems;
// const fullName = searchItems.get("fullName");
// if (!isNullOrUndefined(fullName) && !isWhiteString(fullName)) {
// searchItems.set("search", `i-firstName~${fullName},i-lastName~${fullName},i-orcid~${fullName}`);
// searchItems.set("match", "any");
// searchItems.delete("fullName");
// url = this._urlResource + urlSeparator + ApiActionEnum.SEARCH;
// }
// return this.apiService.get<OrganizationalUnit>(url, ctx.getState().queryParameters)
// .pipe(
// StoreUtil.cancelUncompleted(ctx, this.actions$, [SharedPersonAction.GetAll]),
// tap((collection: CollectionTyped<PersonExtended>) => {
// ctx.dispatch(new SharedPersonAction.GetAllSuccess(action, collection));
// }),
// catchError(error => {
// ctx.dispatch(new SharedPersonAction.GetAllFail(action));
// throw error;
// }),
// );
// }
@Selector()
static list<T>(state: ResourceStateModel<T>): T[] {
return state.list;
}
@Selector()
static total<T>(state: ResourceStateModel<T>): number {
return state.total;
}
@Selector()
static current<T>(state: ResourceStateModel<T>): T {
return state.current;
}
@Selector()
static isLoading<T>(state: ResourceStateModel<T>): boolean {
return StoreUtil.isLoadingState(state);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment