From b2e90ca8d3d6a8403e1092fb28a3e384e6b47d43 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 10 Dec 2018 16:59:25 +0100 Subject: [PATCH] Manage different level of confidence in the submission --- .../authority-confidence-state.directive.ts | 5 ++++ src/app/shared/chips/chips.component.html | 1 + src/app/shared/chips/chips.component.ts | 2 +- .../chips/models/chips-item.model.spec.ts | 4 +-- .../shared/chips/models/chips-item.model.ts | 28 +++++++++++++++++-- .../shared/chips/models/chips.model.spec.ts | 1 + src/app/shared/chips/models/chips.model.ts | 20 ++++++------- .../form/builder/form-builder.service.ts | 2 +- .../models/form-field-metadata-value.model.ts | 5 ++++ 9 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/app/shared/authority-confidence/authority-confidence-state.directive.ts b/src/app/shared/authority-confidence/authority-confidence-state.directive.ts index 81d39c157e..cf635d9067 100644 --- a/src/app/shared/authority-confidence/authority-confidence-state.directive.ts +++ b/src/app/shared/authority-confidence/authority-confidence-state.directive.ts @@ -25,6 +25,7 @@ import { ConfidenceIconConfig } from '../../../config/submission-config.interfac export class AuthorityConfidenceStateDirective implements OnChanges { @Input() authorityValue: AuthorityValue | FormFieldMetadataValueObject | string; + @Input() visibleWhenAuthorityEmpty = true; private previousClass: string = null; private newClass: string; @@ -82,6 +83,10 @@ export class AuthorityConfidenceStateDirective implements OnChanges { } private getClassByConfidence(confidence: any): string { + if (!this.visibleWhenAuthorityEmpty && confidence === ConfidenceType.CF_UNSET) { + return 'd-none'; + } + const confidenceIcons: ConfidenceIconConfig[] = this.EnvConfig.submission.icons.authority.confidence; const confidenceIndex: number = findIndex(confidenceIcons, {value: confidence}); diff --git a/src/app/shared/chips/chips.component.html b/src/app/shared/chips/chips.component.html index 0b632d1073..78172805b9 100644 --- a/src/app/shared/chips/chips.component.html +++ b/src/app/shared/chips/chips.component.html @@ -31,6 +31,7 @@ [class.mr-2]="l" dsAuthorityConfidenceState [authorityValue]="c.item[icon.metadata] || c.item" + [visibleWhenAuthorityEmpty]="icon.visibleWhenAuthorityEmpty" aria-hidden="true" (dragstart)="tooltip.close();" (mouseover)="showTooltip(t, i, icon.metadata)" diff --git a/src/app/shared/chips/chips.component.ts b/src/app/shared/chips/chips.component.ts index fcd356e5f8..802a56cefd 100644 --- a/src/app/shared/chips/chips.component.ts +++ b/src/app/shared/chips/chips.component.ts @@ -108,7 +108,7 @@ export class ChipsComponent implements OnChanges { } this.cdr.detectChanges(); - if (!chipsItem.hasIcons() || field) { + if (!chipsItem.hasIcons() || (chipsItem.hasIcons() && !chipsItem.hasVisibleIcons()) || field) { this.tipText = textToDisplay; tooltip.open(); } diff --git a/src/app/shared/chips/models/chips-item.model.spec.ts b/src/app/shared/chips/models/chips-item.model.spec.ts index 8f17890ab1..318c8f55be 100644 --- a/src/app/shared/chips/models/chips-item.model.spec.ts +++ b/src/app/shared/chips/models/chips-item.model.spec.ts @@ -34,14 +34,14 @@ describe('ChipsItem model test suite', () => { }); it('should update icons', () => { - const icons: ChipsItemIcon[] = [{metadata: 'test', style: 'fa fa-plus'}]; + const icons: ChipsItemIcon[] = [{metadata: 'test', visibleWhenAuthorityEmpty: false, style: 'fa fa-plus'}]; item.updateIcons(icons); expect(item.icons).toEqual(icons); }); it('should return true if has icons', () => { - const icons: ChipsItemIcon[] = [{metadata: 'test', style: 'fa fa-plus'}]; + const icons: ChipsItemIcon[] = [{metadata: 'test', visibleWhenAuthorityEmpty: false, style: 'fa fa-plus'}]; item.updateIcons(icons); const hasIcons = item.hasIcons(); diff --git a/src/app/shared/chips/models/chips-item.model.ts b/src/app/shared/chips/models/chips-item.model.ts index ea90ea9ce5..10e0f74d43 100644 --- a/src/app/shared/chips/models/chips-item.model.ts +++ b/src/app/shared/chips/models/chips-item.model.ts @@ -1,9 +1,12 @@ -import { uniqueId, isObject } from 'lodash'; +import { isObject, uniqueId } from 'lodash'; import { isNotEmpty } from '../../empty.util'; +import { FormFieldMetadataValueObject } from '../../form/builder/models/form-field-metadata-value.model'; +import { ConfidenceType } from '../../../core/integration/models/confidence-type'; export interface ChipsItemIcon { metadata: string; style: string; + visibleWhenAuthorityEmpty: boolean; tooltip?: any; } @@ -48,7 +51,28 @@ export class ChipsItem { } hasIcons(): boolean { - return isNotEmpty(this.icons); + return isNotEmpty(this.icons); + } + + hasVisibleIcons(): boolean { + if (isNotEmpty(this.icons)) { + let hasVisible = false; + // check if it has at least one visible icon + for (const icon of this.icons) { + if (this._item.hasOwnProperty(icon.metadata) + && (this._item[icon.metadata] as FormFieldMetadataValueObject).hasValue() + && !(this._item[icon.metadata] as FormFieldMetadataValueObject).hasPlaceholder()) { + if (icon.visibleWhenAuthorityEmpty + || (this._item[icon.metadata] as FormFieldMetadataValueObject).confidence !== ConfidenceType.CF_UNSET) { + hasVisible = true; + break; + } + } + } + return hasVisible; + } else { + return false; + } } setEditMode(): void { diff --git a/src/app/shared/chips/models/chips.model.spec.ts b/src/app/shared/chips/models/chips.model.spec.ts index 8f3e70c1ab..a6cf5faf81 100644 --- a/src/app/shared/chips/models/chips.model.spec.ts +++ b/src/app/shared/chips/models/chips.model.spec.ts @@ -107,6 +107,7 @@ describe('Chips model test suite', () => { ]; const iconsConfig = [{ name: 'toDisplay', + visibleWhenAuthorityEmpty: false, style: 'fa-user' }]; chips = new Chips(items, 'value', 'toDisplay', iconsConfig); diff --git a/src/app/shared/chips/models/chips.model.ts b/src/app/shared/chips/models/chips.model.ts index d361a1fe29..1eb5fd92a5 100644 --- a/src/app/shared/chips/models/chips.model.ts +++ b/src/app/shared/chips/models/chips.model.ts @@ -4,6 +4,8 @@ import { ChipsItem, ChipsItemIcon } from './chips-item.model'; import { hasValue, isNotEmpty } from '../../empty.util'; import { PLACEHOLDER_PARENT_METADATA } from '../../form/builder/ds-dynamic-form-ui/models/dynamic-group/dynamic-group.model'; import { MetadataIconConfig } from '../../../../config/submission-config.interface'; +import { FormFieldMetadataValueObject } from '../../form/builder/models/form-field-metadata-value.model'; +import { AuthorityValueModel } from '../../../core/integration/models/authority-value.model'; export class Chips { chipsItems: BehaviorSubject; @@ -100,6 +102,10 @@ export class Chips { private getChipsIcons(item) { const icons = []; + if (item instanceof FormFieldMetadataValueObject || item instanceof AuthorityValueModel) { + return icons; + } + const defaultConfigIndex: number = findIndex(this.iconsConfig, {name: 'default'}); const defaultConfig: MetadataIconConfig = (defaultConfigIndex !== -1) ? this.iconsConfig[defaultConfigIndex] : undefined; let config: MetadataIconConfig; @@ -117,26 +123,16 @@ export class Chips { if (hasValue(value) && isNotEmpty(config) && !this.hasPlaceholder(value)) { let icon: ChipsItemIcon; + const visibleWhenAuthorityEmpty = this.displayObj !== metadata; // Set icon icon = { metadata, + visibleWhenAuthorityEmpty, style: config.style }; icons.push(icon); -/* if ((this.displayObj && this.displayObj === metadata && hasAuthority) - || (this.displayObj && this.displayObj !== metadata)) { - - icon = { - metadata, - hasAuthority: hasAuthority, - style: config.style - }; - } - if (icon) { - icons.push(icon); - }*/ } }); diff --git a/src/app/shared/form/builder/form-builder.service.ts b/src/app/shared/form/builder/form-builder.service.ts index f848c5edf4..918515a984 100644 --- a/src/app/shared/form/builder/form-builder.service.ts +++ b/src/app/shared/form/builder/form-builder.service.ts @@ -112,7 +112,7 @@ export class FormBuilderService extends DynamicFormService { if (isDateObject(controlValue)) { return new FormFieldMetadataValueObject(controlValue, controlLanguage, authority, controlValue, place); } else { - return new FormFieldMetadataValueObject(controlValue.value, controlLanguage, authority, controlValue.display, place); + return new FormFieldMetadataValueObject(controlValue.value, controlLanguage, authority, controlValue.display, place, controlValue.confidence); } } }; diff --git a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts b/src/app/shared/form/builder/models/form-field-metadata-value.model.ts index 85d2caf202..a189ff95a0 100644 --- a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts +++ b/src/app/shared/form/builder/models/form-field-metadata-value.model.ts @@ -1,5 +1,6 @@ import { isEmpty, isNotEmpty, isNotNull } from '../../../empty.util'; import { ConfidenceType } from '../../../../core/integration/models/confidence-type'; +import { PLACEHOLDER_PARENT_METADATA } from '../ds-dynamic-form-ui/models/dynamic-group/dynamic-group.model'; export class FormFieldMetadataValueObject { metadata?: string; @@ -54,4 +55,8 @@ export class FormFieldMetadataValueObject { hasOtherInformation(): boolean { return isNotEmpty(this.otherInformation); } + + hasPlaceholder() { + return this.hasValue() && this.value === PLACEHOLDER_PARENT_METADATA; + } }