From d47660b5c29d2ee693c32dba271cde688ad61eb3 Mon Sep 17 00:00:00 2001 From: Alessandro Martelli Date: Wed, 31 Mar 2021 11:56:37 +0200 Subject: [PATCH] [CST-3782] possibility to configure the isDraggable feature to DynamicRowArrayModel --- .../array-group/dynamic-form-array.component.html | 4 ++-- .../models/array-group/dynamic-form-array.component.ts | 10 +++++++++- .../models/ds-dynamic-row-array-model.ts | 3 +++ .../shared/form/builder/form-builder.service.spec.ts | 1 + src/app/shared/form/builder/parsers/field-parser.ts | 6 ++++++ src/app/shared/mocks/form-models.mock.ts | 1 + 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.html index 1c14c0b994..09b1331f8b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.html @@ -12,7 +12,7 @@ [ngClass]="[getClass('element', 'group'), getClass('grid', 'group')]" cdkDrag cdkDragHandle - [cdkDragDisabled]="model.groups.length === 1"> + [cdkDragDisabled]="dragDisabled">
@@ -20,7 +20,7 @@
- + | undefined; /* tslint:disable:no-output-rename */ @@ -70,4 +71,11 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent { this.onChange($event); } + + /** + * If the drag feature is disabled for this DynamicRowArrayModel. + */ + get dragDisabled(): boolean { + return this.model.groups.length === 1 || !this.model.isDraggable; + } } diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts index 8925d8fd87..d0b07de885 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts @@ -9,6 +9,7 @@ export interface DynamicRowArrayModelConfig extends DynamicFormArrayModelConfig metadataKey: string; metadataFields: string[]; hasSelectableMetadata: boolean; + isDraggable: boolean; } export class DynamicRowArrayModel extends DynamicFormArrayModel { @@ -19,6 +20,7 @@ export class DynamicRowArrayModel extends DynamicFormArrayModel { @serializable() metadataKey: string; @serializable() metadataFields: string[]; @serializable() hasSelectableMetadata: boolean; + @serializable() isDraggable: boolean; isRowArray = true; constructor(config: DynamicRowArrayModelConfig, layout?: DynamicFormControlLayout) { @@ -30,5 +32,6 @@ export class DynamicRowArrayModel extends DynamicFormArrayModel { this.metadataKey = config.metadataKey; this.metadataFields = config.metadataFields; this.hasSelectableMetadata = config.hasSelectableMetadata; + this.isDraggable = config.isDraggable; } } diff --git a/src/app/shared/form/builder/form-builder.service.spec.ts b/src/app/shared/form/builder/form-builder.service.spec.ts index b81bb3285b..cea4d7df6e 100644 --- a/src/app/shared/form/builder/form-builder.service.spec.ts +++ b/src/app/shared/form/builder/form-builder.service.spec.ts @@ -295,6 +295,7 @@ describe('FormBuilderService test suite', () => { notRepeatable: false, relationshipConfig: undefined, submissionId: '1234', + isDraggable: true, groupFactory: () => { return [ new DynamicInputModel({ id: 'testFormRowArrayGroupInput' }) diff --git a/src/app/shared/form/builder/parsers/field-parser.ts b/src/app/shared/form/builder/parsers/field-parser.ts index 93f941e344..da304ca267 100644 --- a/src/app/shared/form/builder/parsers/field-parser.ts +++ b/src/app/shared/form/builder/parsers/field-parser.ts @@ -50,6 +50,11 @@ export abstract class FieldParser { if (Array.isArray(this.configData.selectableMetadata) && this.configData.selectableMetadata.length === 1) { metadataKey = this.configData.selectableMetadata[0].metadata; } + + let isDraggable = true; + if (this.configData.input.type === ParserType.Onebox && this.configData?.selectableMetadata?.length > 1) { + isDraggable = false; + } const config = { id: uniqueId() + '_array', label: this.configData.label, @@ -61,6 +66,7 @@ export abstract class FieldParser { metadataKey, metadataFields: this.getAllFieldIds(), hasSelectableMetadata: isNotEmpty(this.configData.selectableMetadata), + isDraggable, groupFactory: () => { let model; if ((arrayCounter === 0)) { diff --git a/src/app/shared/mocks/form-models.mock.ts b/src/app/shared/mocks/form-models.mock.ts index 739de944f0..c43138fa25 100644 --- a/src/app/shared/mocks/form-models.mock.ts +++ b/src/app/shared/mocks/form-models.mock.ts @@ -80,6 +80,7 @@ const rowArrayQualdropConfig = { id: 'row_QUALDROP_GROUP', initialCount: 1, notRepeatable: true, + isDraggable: false, relationshipConfig: undefined, groupFactory: () => { return [MockQualdropModel];