Skip to content

Commit 08800f4

Browse files
authored
Merge pull request #3608 from toniprieto/allow-free-text-edition
Add button to allow free-text editing in the dropdown field of Edit Item
2 parents 952611a + 67f9623 commit 08800f4

File tree

3 files changed

+45
-8
lines changed

3 files changed

+45
-8
lines changed

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,26 @@
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 }">
44
<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 && (isAuthorityControlled() | async) !== true" [(ngModel)]="mdValue.newValue.value"
6+
<textarea class="form-control" rows="5" *ngIf="mdValue.editing && !mdRepresentation && ((isAuthorityControlled() | async) !== true || (enabledFreeTextEditing && (isSuggesterVocabulary() | async) !== true))" [(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)"
9+
<ds-dynamic-scrollable-dropdown *ngIf="mdValue.editing && (isScrollableVocabulary() | async) && !enabledFreeTextEditing"
1010
[bindId]="mdField"
1111
[group]="group"
1212
[model]="getModel()"
1313
(change)="onChangeAuthorityField($event)">
1414
</ds-dynamic-scrollable-dropdown>
15-
<ds-dynamic-onebox *ngIf="mdValue.editing && ((isHierarchicalVocabulary() | async) || (isSuggesterVocabulary() | async))"
15+
<ds-dynamic-onebox *ngIf="mdValue.editing && (((isHierarchicalVocabulary() | async) && !enabledFreeTextEditing) || (isSuggesterVocabulary() | async))"
1616
[group]="group"
1717
[model]="getModel()"
1818
(change)="onChangeAuthorityField($event)">
1919
</ds-dynamic-onebox>
20+
<button class="btn btn-secondary mt-2" *ngIf="mdValue.editing && ((isScrollableVocabulary() | async) || (isHierarchicalVocabulary() | async))"
21+
[title]="enabledFreeTextEditing ? dsoType + '.edit.metadata.edit.buttons.disable-free-text-editing' : dsoType + '.edit.metadata.edit.buttons.enable-free-text-editing' | translate"
22+
(click)="toggleFreeTextEdition()">
23+
<i class="fas fa-fw" [ngClass]="enabledFreeTextEditing ? 'fa-lock' : 'fa-unlock'"></i>
24+
{{ (enabledFreeTextEditing ? dsoType + '.edit.metadata.edit.buttons.disable-free-text-editing' : dsoType + '.edit.metadata.edit.buttons.enable-free-text-editing') | translate }}
25+
</button>
2026
<div *ngIf="!isVirtual && !mdValue.editing && mdValue.newValue.authority && mdValue.newValue.confidence !== ConfidenceTypeEnum.CF_UNSET && mdValue.newValue.confidence !== ConfidenceTypeEnum.CF_NOVALUE">
2127
<span class="badge badge-light border" >
2228
<i dsAuthorityConfidenceState

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

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ export class DsoEditMetadataValueComponent implements OnInit, OnChanges {
191191
*/
192192
public editingAuthority = false;
193193

194+
195+
/**
196+
* Whether or not the free-text editing is enabled when scrollable dropdown or hierarchical vocabulary is used
197+
*/
198+
public enabledFreeTextEditing = false;
199+
194200
/**
195201
* Field group used by authority field
196202
* @type {UntypedFormGroup}
@@ -438,15 +444,23 @@ export class DsoEditMetadataValueComponent implements OnInit, OnChanges {
438444
* Process the change of authority field value updating the authority key and confidence as necessary
439445
*/
440446
onChangeAuthorityField(event): void {
441-
this.mdValue.newValue.value = event.value;
442-
if (event.authority) {
443-
this.mdValue.newValue.authority = event.authority;
444-
this.mdValue.newValue.confidence = ConfidenceType.CF_ACCEPTED;
447+
if (event) {
448+
this.mdValue.newValue.value = event.value;
449+
if (event.authority) {
450+
this.mdValue.newValue.authority = event.authority;
451+
this.mdValue.newValue.confidence = ConfidenceType.CF_ACCEPTED;
452+
} else {
453+
this.mdValue.newValue.authority = null;
454+
this.mdValue.newValue.confidence = ConfidenceType.CF_UNSET;
455+
}
456+
this.confirm.emit(false);
445457
} else {
458+
// The event is undefined when the user clears the selection in scrollable dropdown
459+
this.mdValue.newValue.value = '';
446460
this.mdValue.newValue.authority = null;
447461
this.mdValue.newValue.confidence = ConfidenceType.CF_UNSET;
462+
this.confirm.emit(false);
448463
}
449-
this.confirm.emit(false);
450464
}
451465

452466
/**
@@ -480,4 +494,17 @@ export class DsoEditMetadataValueComponent implements OnInit, OnChanges {
480494
}
481495
}
482496

497+
/**
498+
* Toggles the free-text ediitng mode
499+
*/
500+
toggleFreeTextEdition() {
501+
if (this.enabledFreeTextEditing) {
502+
if (this.getModel().value !== this.mdValue.newValue.value) {
503+
// Reload the model to adapt it to the new possible value modified during free text editing
504+
this.initAuthorityProperties();
505+
}
506+
}
507+
this.enabledFreeTextEditing = !this.enabledFreeTextEditing;
508+
}
509+
483510
}

src/assets/i18n/en.json5

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,6 +2400,10 @@
24002400

24012401
"item.edit.metadata.edit.authority.key": "Edit authority key",
24022402

2403+
"item.edit.metadata.edit.buttons.enable-free-text-editing": "Enable free-text editing",
2404+
2405+
"item.edit.metadata.edit.buttons.disable-free-text-editing": "Disable free-text editing",
2406+
24032407
"item.edit.metadata.edit.buttons.confirm": "Confirm",
24042408

24052409
"item.edit.metadata.edit.buttons.drag": "Drag to reorder",

0 commit comments

Comments
 (0)