diff --git a/projects/netgrif-components-core/src/lib/data-fields/filter-field/filter-string-query-field/abstract-filter-string-query-field.component.ts b/projects/netgrif-components-core/src/lib/data-fields/filter-field/filter-string-query-field/abstract-filter-string-query-field.component.ts new file mode 100644 index 000000000..e6a0f635b --- /dev/null +++ b/projects/netgrif-components-core/src/lib/data-fields/filter-field/filter-string-query-field/abstract-filter-string-query-field.component.ts @@ -0,0 +1,24 @@ +import {Component, Inject, Optional} from "@angular/core"; +import {FilterField, FilterFieldValidation} from "../models/filter-field"; +import {AbstractBaseDataFieldComponent} from "../../base-component/abstract-base-data-field.component"; +import {DATA_FIELD_PORTAL_DATA, DataFieldPortalData} from "../../models/data-field-portal-data-injection-token"; +import {TranslateService} from "@ngx-translate/core"; + +@Component({ + selector: 'ncc-abstract-filter-string-query-field', + template: '' +}) +export abstract class AbstractFilterStringQueryFieldComponent extends AbstractBaseDataFieldComponent { + + constructor(protected _translate: TranslateService, + @Optional() @Inject(DATA_FIELD_PORTAL_DATA) dataFieldPortalData: DataFieldPortalData) { + super(dataFieldPortalData); + } + + public getErrorMessage() { + if (this.formControlRef.hasError(FilterFieldValidation.REQUIRED)) { + return this._translate.instant('dataField.validations.required'); + } + return ''; + } +} diff --git a/projects/netgrif-components-core/src/lib/data-fields/filter-field/models/filter-field.ts b/projects/netgrif-components-core/src/lib/data-fields/filter-field/models/filter-field.ts index da998cbf2..36ae44b24 100644 --- a/projects/netgrif-components-core/src/lib/data-fields/filter-field/models/filter-field.ts +++ b/projects/netgrif-components-core/src/lib/data-fields/filter-field/models/filter-field.ts @@ -5,6 +5,10 @@ import {Component, ComponentPrefixes} from '../../models/component'; import {FilterMetadata} from '../../../search/models/persistance/filter-metadata'; import {Validation} from '../../models/validation'; +export enum FilterFieldValidation { + REQUIRED = 'required' +} + export class FilterField extends DataField { constructor(stringId: string, title: string, diff --git a/projects/netgrif-components-core/src/lib/data-fields/public-api.ts b/projects/netgrif-components-core/src/lib/data-fields/public-api.ts index 16157a386..41830a65e 100644 --- a/projects/netgrif-components-core/src/lib/data-fields/public-api.ts +++ b/projects/netgrif-components-core/src/lib/data-fields/public-api.ts @@ -54,6 +54,7 @@ export * from './filter-field/abstract-filter-field-content.component'; export * from './filter-field/abstract-filter-field-tab-view.component'; export * from './filter-field/abstract-filter-field-tab-view-content.component'; export * from './filter-field/filter-default-field/abstract-filter-default-field.component'; +export * from './filter-field/filter-string-query-field/abstract-filter-string-query-field.component'; export * from './i18n-field/abstract-i18n-field.component'; export * from './i18n-field/i18n-text-field/abstract-i18n-text-field.component'; export * from './i18n-field/i18n-divider-field/abstract-i18n-divider-field.component'; diff --git a/projects/netgrif-components-core/src/lib/filter/user-filters.service.ts b/projects/netgrif-components-core/src/lib/filter/user-filters.service.ts index 045f648af..f379967cf 100644 --- a/projects/netgrif-components-core/src/lib/filter/user-filters.service.ts +++ b/projects/netgrif-components-core/src/lib/filter/user-filters.service.ts @@ -281,7 +281,7 @@ export class UserFiltersService implements OnDestroy { value: searchService.filterType }, [UserFilterConstants.FILTER_FIELD_ID]: { - type: FieldTypeResource.FILTER, + type: FieldTypeResource.CASE_FILTER, value: searchService.rootPredicate.query.value, allowedNets, filterMetadata: this.filterMetadataFromSearchService( diff --git a/projects/netgrif-components-core/src/lib/task-content/model/field-type-resource.ts b/projects/netgrif-components-core/src/lib/task-content/model/field-type-resource.ts index 234078bfa..5213f3799 100644 --- a/projects/netgrif-components-core/src/lib/task-content/model/field-type-resource.ts +++ b/projects/netgrif-components-core/src/lib/task-content/model/field-type-resource.ts @@ -18,7 +18,9 @@ export enum FieldTypeResource { MULTICHOICE_MAP = 'multichoice_map', TASK_REF = 'taskRef', CASE_REF = 'caseRef', - FILTER = 'filter', + CASE_FILTER = 'caseFilter', + TASK_FILTER = 'taskFilter', + PROCESS_FILTER = 'processFilter', I18N = 'i18n', STRING_COLLECTION = 'stringCollection' } diff --git a/projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts b/projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts index 380052806..d40a01475 100644 --- a/projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts +++ b/projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts @@ -108,7 +108,9 @@ export class FieldConverterService { case FieldTypeResource.CASE_REF: return new CaseRefField(item.stringId, item.name, item.value ? item.value : [], item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId); - case FieldTypeResource.FILTER: + case FieldTypeResource.CASE_FILTER: + case FieldTypeResource.TASK_FILTER: + case FieldTypeResource.PROCESS_FILTER: return new FilterField(item.stringId, item.name, item.value ?? '', item.filterMetadata, item.allowedNets, item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId); case FieldTypeResource.I18N: @@ -146,7 +148,7 @@ export class FieldConverterService { } else if (item instanceof EnumerationField || item instanceof MultichoiceField) { return item.fieldType; } else if (item instanceof FilterField) { - return FieldTypeResource.FILTER; + return FieldTypeResource.CASE_FILTER; } else if (item instanceof I18nField) { return FieldTypeResource.I18N; } else if (item instanceof CaseRefField) { diff --git a/projects/netgrif-components/src/lib/data-fields/data-fields.module.ts b/projects/netgrif-components/src/lib/data-fields/data-fields.module.ts index 6e7c16928..4c5b15475 100644 --- a/projects/netgrif-components/src/lib/data-fields/data-fields.module.ts +++ b/projects/netgrif-components/src/lib/data-fields/data-fields.module.ts @@ -127,6 +127,7 @@ import { import {SignaturePadFieldComponent} from './text-field/signature-pad-field/signature-pad-field.component'; import { StringCollectionDefaultFieldComponent } from './string-collection-field/string-collection-default-field/string-collection-default-field.component'; import {ComponentPortal} from "@angular/cdk/portal"; +import { FilterStringQueryFieldComponent } from './filter-field/filter-string-query-field/filter-string-query-field.component'; @NgModule({ declarations: [ @@ -192,7 +193,8 @@ import {ComponentPortal} from "@angular/cdk/portal"; EnumerationCaserefFieldComponent, StringCollectionDefaultFieldComponent, SignaturePadFieldComponent, - NumberDecimalFieldComponent + NumberDecimalFieldComponent, + FilterStringQueryFieldComponent ], exports: [ DataFieldTemplateComponent @@ -244,6 +246,7 @@ export class DataFieldsComponentModule { registry.register("file-list-default", (injector: Injector) => new ComponentPortal(FileListDefaultFieldComponent, null, injector)); registry.register("filter-default", (injector: Injector) => new ComponentPortal(FilterDefaultFieldComponent, null, injector)); registry.register("filter-filter-tab-view", (injector: Injector) => new ComponentPortal(FilterDefaultFieldComponent, null, injector)); + registry.register("filter-string_query", (injector: Injector) => new ComponentPortal(FilterStringQueryFieldComponent, null, injector)); registry.register("i18n-divider", (injector: Injector) => new ComponentPortal(I18nDividerFieldComponent, null, injector)); registry.register("i18n-text", (injector: Injector) => new ComponentPortal(I18nTextFieldComponent, null, injector)); registry.register("i18n-default", (injector: Injector) => new ComponentPortal(I18nTextFieldComponent, null, injector)); diff --git a/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.html b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.html new file mode 100644 index 000000000..58a44b8b1 --- /dev/null +++ b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.html @@ -0,0 +1,9 @@ + + {{dataField.title}} + + {{dataField.description}} + {{getErrorMessage()}} + diff --git a/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.scss b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.scss new file mode 100644 index 000000000..94f24bbe9 --- /dev/null +++ b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.scss @@ -0,0 +1,5 @@ +.full-width { + display: block; + margin: 0 auto; + width: 100%; +} diff --git a/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.spec.ts b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.spec.ts new file mode 100644 index 000000000..ab200d93c --- /dev/null +++ b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.spec.ts @@ -0,0 +1,57 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; + +import {FilterStringQueryFieldComponent} from './filter-string-query-field.component'; +import { + MaterialModule, + TranslateLibModule, + FilterField, + DataFieldPortalData, + DATA_FIELD_PORTAL_DATA, + FilterType, + ConfigurationService, + TestConfigurationService, + WrappedBoolean +} from '@netgrif/components-core'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {HttpClientTestingModule} from "@angular/common/http/testing"; +import {FormControl, ReactiveFormsModule} from '@angular/forms'; + +describe('FilterStringQueryFieldComponent', () => { + let component: FilterStringQueryFieldComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FilterStringQueryFieldComponent], + imports: [ + TranslateLibModule, + HttpClientTestingModule, + MaterialModule, + NoopAnimationsModule, + ReactiveFormsModule + ], + providers: [ + {provide: ConfigurationService, useClass: TestConfigurationService}, + {provide: DATA_FIELD_PORTAL_DATA, useValue: { + dataField: new FilterField('', '', '', { + filterType: FilterType.CASE, predicateMetadata: [], searchCategories: [] + }, [], {}, '', ''), + formControlRef: new FormControl(), + showLargeLayout: new WrappedBoolean() + } as DataFieldPortalData + } + ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FilterStringQueryFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.ts b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.ts new file mode 100644 index 000000000..274ab9f29 --- /dev/null +++ b/projects/netgrif-components/src/lib/data-fields/filter-field/filter-string-query-field/filter-string-query-field.component.ts @@ -0,0 +1,17 @@ +import { Component, Optional, Inject } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; +import { AbstractFilterStringQueryFieldComponent, DATA_FIELD_PORTAL_DATA, DataFieldPortalData, FilterField} from '@netgrif/components-core'; + +@Component({ + selector: 'nc-filter-string-query-field', + templateUrl: './filter-string-query-field.component.html', + styleUrls: ['./filter-string-query-field.component.scss'] +}) +export class FilterStringQueryFieldComponent extends AbstractFilterStringQueryFieldComponent { + + constructor(protected _translate: TranslateService, + @Optional() @Inject(DATA_FIELD_PORTAL_DATA) dataFieldPortalData: DataFieldPortalData) { + super(_translate, dataFieldPortalData); + } + +}