Skip to content

Commit 45eaa87

Browse files
committed
Implementation of controlled vocabularies value selectors during item editing
1 parent 439739a commit 45eaa87

7 files changed

Lines changed: 603 additions & 12 deletions

File tree

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-field-values/dso-edit-metadata-field-values.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<ds-dso-edit-metadata-value *ngFor="let mdValue of form.fields[mdField]; let idx = index" role="presentation"
44
[dso]="dso"
55
[mdValue]="mdValue"
6+
[mdField]="mdField"
67
[dsoType]="dsoType"
78
[saving$]="saving$"
89
[isOnlyValue]="form.fields[mdField].length === 1"

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-form.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ export class DsoEditMetadataValue {
7575
confirmChanges(finishEditing = false) {
7676
this.reordered = this.originalValue.place !== this.newValue.place;
7777
if (hasNoValue(this.change) || this.change === DsoEditMetadataChangeType.UPDATE) {
78-
if ((this.originalValue.value !== this.newValue.value || this.originalValue.language !== this.newValue.language)) {
78+
if (this.originalValue.value !== this.newValue.value || this.originalValue.language !== this.newValue.language
79+
|| this.originalValue.authority !== this.newValue.authority || this.originalValue.confidence !== this.newValue.confidence) {
7980
this.change = DsoEditMetadataChangeType.UPDATE;
8081
} else {
8182
this.change = undefined;
@@ -404,10 +405,13 @@ export class DsoEditMetadataForm {
404405
if (hasValue(value.change)) {
405406
if (value.change === DsoEditMetadataChangeType.UPDATE) {
406407
// Only changes to value or language are considered "replace" operations. Changes to place are considered "move", which is processed below.
407-
if (value.originalValue.value !== value.newValue.value || value.originalValue.language !== value.newValue.language) {
408+
if (value.originalValue.value !== value.newValue.value || value.originalValue.language !== value.newValue.language
409+
|| value.originalValue.authority !== value.newValue.authority || value.originalValue.confidence !== value.newValue.confidence) {
408410
replaceOperations.push(new MetadataPatchReplaceOperation(field, value.originalValue.place, {
409411
value: value.newValue.value,
410412
language: value.newValue.language,
413+
authority: value.newValue.authority,
414+
confidence: value.newValue.confidence
411415
}));
412416
}
413417
} else if (value.change === DsoEditMetadataChangeType.REMOVE) {
@@ -416,6 +420,8 @@ export class DsoEditMetadataForm {
416420
addOperations.push(new MetadataPatchAddOperation(field, {
417421
value: value.newValue.value,
418422
language: value.newValue.language,
423+
authority: value.newValue.authority,
424+
confidence: value.newValue.confidence
419425
}));
420426
} else {
421427
console.warn('Illegal metadata change state detected for', value);

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,51 @@
11
<div class="d-flex flex-row ds-value-row" *ngVar="mdValue.newValue.isVirtual as isVirtual" role="row"
22
cdkDrag (cdkDragStarted)="dragging.emit(true)" (cdkDragEnded)="dragging.emit(false)"
33
[ngClass]="{ 'ds-warning': mdValue.reordered || mdValue.change === DsoEditMetadataChangeTypeEnum.UPDATE, 'ds-danger': mdValue.change === DsoEditMetadataChangeTypeEnum.REMOVE, 'ds-success': mdValue.change === DsoEditMetadataChangeTypeEnum.ADD, 'h-100': isOnlyValue }">
4-
<div class="flex-grow-1 ds-flex-cell ds-value-cell d-flex align-items-center" *ngVar="(mdRepresentation$ | async) as mdRepresentation" role="cell">
4+
<div class="flex-grow-1 ds-flex-cell ds-value-cell d-flex flex-column" *ngVar="(mdRepresentation$ | async) as mdRepresentation" role="cell">
55
<div class="dont-break-out preserve-line-breaks" *ngIf="!mdValue.editing && !mdRepresentation">{{ mdValue.newValue.value }}</div>
6-
<textarea class="form-control" rows="5" *ngIf="mdValue.editing && !mdRepresentation" [(ngModel)]="mdValue.newValue.value"
6+
<textarea class="form-control" rows="5" *ngIf="mdValue.editing && !mdRepresentation && !(isAuthorityControlled() | async)" [(ngModel)]="mdValue.newValue.value"
77
[attr.aria-label]="(dsoType + '.edit.metadata.edit.value') | translate"
88
[dsDebounce]="300" (onDebounce)="confirm.emit(false)"></textarea>
9+
<ds-dynamic-scrollable-dropdown *ngIf="mdValue.editing && (isScrollableVocabulary() | async)"
10+
[bindId]="mdField"
11+
[group]="group"
12+
[model]="getModel() | async"
13+
(change)="onChangeAuthorityField($event)">
14+
</ds-dynamic-scrollable-dropdown>
15+
<ds-dynamic-onebox *ngIf="mdValue.editing && ((isHierarchicalVocabulary() | async) || (isSuggesterVocabulary() | async))"
16+
[group]="group"
17+
[model]="getModel() | async"
18+
(change)="onChangeAuthorityField($event)">
19+
</ds-dynamic-onebox>
20+
<div *ngIf="!isVirtual && !mdValue.editing && mdValue.newValue.authority">
21+
<span class="badge badge-light border" >
22+
<i dsAuthorityConfidenceState
23+
class="far fa-circle fa-fw p-0"
24+
aria-hidden="true"
25+
[authorityValue]="mdValue.newValue"
26+
></i>
27+
{{ dsoType + '.edit.metadata.authority.label' | translate }} {{ mdValue.newValue.authority }}
28+
</span>
29+
</div>
30+
<div class="mt-2" *ngIf=" mdValue.editing && (isAuthorityControlled() | async) && (isSuggesterVocabulary() | async)">
31+
<div class="btn-group w-75">
32+
<input class="form-control form-outline" [(ngModel)]="mdValue.newValue.authority" [disabled]="!editingAuthority"
33+
[attr.aria-label]="(dsoType + '.edit.metadata.edit.authority.key') | translate"
34+
(change)="onChangeAuthorityKey()" />
35+
<button class="btn btn-outline-secondary btn-sm ng-star-inserted" id="metadata-confirm-btn" *ngIf="!editingAuthority"
36+
[title]="dsoType + '.edit.metadata.edit.buttons.open-authority-edition' | translate"
37+
ngbTooltip="{{ dsoType + '.edit.metadata.edit.buttons.open-authority-edition' | translate }}"
38+
(click)="onChangeEditingAuthorityStatus(true)">
39+
<i class="fas fa-lock fa-fw"></i>
40+
</button>
41+
<button class="btn btn-outline-success btn-sm ng-star-inserted" id="metadata-confirm-btn" *ngIf="editingAuthority"
42+
[title]="dsoType + '.edit.metadata.edit.buttons.close-authority-edition' | translate"
43+
ngbTooltip="{{ dsoType + '.edit.metadata.edit.buttons.close-authority-edition' | translate }}"
44+
(click)="onChangeEditingAuthorityStatus(false)">
45+
<i class="fas fa-lock-open fa-fw"></i>
46+
</button>
47+
</div>
48+
</div>
949
<div class="d-flex" *ngIf="mdRepresentation">
1050
<a class="mr-2" target="_blank" [routerLink]="mdRepresentationItemRoute$ | async">{{ mdRepresentationName$ | async }}</a>
1151
<ds-themed-type-badge [object]="mdRepresentation"></ds-themed-type-badge>
@@ -45,14 +85,14 @@
4585
[disabled]="isVirtual || (!mdValue.change && mdValue.reordered) || (!mdValue.change && !mdValue.editing) || (saving$ | async)" (click)="undo.emit()">
4686
<i class="fas fa-undo-alt fa-fw"></i>
4787
</button>
88+
<button class="btn btn-outline-secondary ds-drag-handle btn-sm" data-test="metadata-drag-btn" *ngVar="(isOnlyValue || (saving$ | async)) as disabled"
89+
cdkDragHandle [cdkDragHandleDisabled]="disabled" [ngClass]="{'disabled': disabled}" [disabled]="disabled"
90+
[title]="dsoType + '.edit.metadata.edit.buttons.drag' | translate"
91+
ngbTooltip="{{ dsoType + '.edit.metadata.edit.buttons.drag' | translate }}">
92+
<i class="fas fa-grip-vertical fa-fw"></i>
93+
</button>
4894
</div>
4995
</div>
50-
<button class="btn btn-outline-secondary ds-drag-handle btn-sm" data-test="metadata-drag-btn" *ngVar="(isOnlyValue || (saving$ | async)) as disabled"
51-
cdkDragHandle [cdkDragHandleDisabled]="disabled" [ngClass]="{'disabled': disabled}" [disabled]="disabled"
52-
[title]="dsoType + '.edit.metadata.edit.buttons.drag' | translate"
53-
ngbTooltip="{{ dsoType + '.edit.metadata.edit.buttons.drag' | translate }}">
54-
<i class="fas fa-grip-vertical fa-fw"></i>
55-
</button>
5696
</div>
5797
</div>
5898
</div>

0 commit comments

Comments
 (0)