UNPKG

ngx-ntk-query-builder

Version:

Angular query builder

1 lines 32.4 kB
{"version":3,"file":"ngx-ntk-query-builder.mjs","sources":["../../../projects/ngx-ntk-query-builder/src/lib/services/operators.service.ts","../../../projects/ngx-ntk-query-builder/src/lib/ngx-ntk-query-builder.component.ts","../../../projects/ngx-ntk-query-builder/src/lib/ngx-ntk-query-builder.component.html","../../../projects/ngx-ntk-query-builder/src/lib/ngx-ntk-query-builder.module.ts","../../../projects/ngx-ntk-query-builder/src/ngx-ntk-query-builder.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { QueryBuilderFieldMap, QueryRule } from '../interfaces/ngx-ntk-query-builder.interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OperatorsService {\r\n\r\n readonly INPUT_TYPE_STRING = 'string';\r\n readonly INPUT_TYPE_INTEGER = 'integer';\r\n readonly INPUT_TYPE_DOUBLE = 'double';\r\n readonly INPUT_TYPE_TIME = 'time';\r\n readonly INPUT_TYPE_DATE = 'date';\r\n readonly INPUT_TYPE_SELECT = 'select';\r\n readonly INPUT_TYPE_BOOLEAN = 'boolean';\r\n\r\n readonly INPUT_TYPE_MULTI_SELECT = 'multi_select';\r\n\r\n readonly NULLABLE_OPERATORS = ['is_null', 'is_not_null'];\r\n readonly EMPTY_OPERATORS = ['is_empty', 'is_not_empty'];\r\n readonly MULTI_SELECT_OPERATORS = ['in', 'not_in'];\r\n\r\n private readonly defaultOperator = 'equal';\r\n\r\n private readonly operatorsMap: { [key: string]: string[] } = {\r\n string: ['equal', 'not_equal', 'contains', 'not_contains', 'begins_with', 'not_begins_with', 'ends_with', 'not_ends_with'],\r\n integer: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],\r\n double: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],\r\n time: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],\r\n date: ['equal', 'not_equal', 'greater', 'greater_or_equal', 'less', 'less_or_equal'],\r\n select: ['equal', 'not_equal', ...this.MULTI_SELECT_OPERATORS],\r\n boolean: ['equal'],\r\n };\r\n\r\n private readonly operatorsDisplayNames: { [key: string]: string } = {\r\n equal: 'querybuilder.equal',\r\n not_equal: 'querybuilder.not_equal',\r\n contains: 'querybuilder.contains',\r\n not_contains: 'querybuilder.not_contains',\r\n begins_with: 'querybuilder.begins_with',\r\n not_begins_with: 'querybuilder.not_begins_with',\r\n ends_with: 'querybuilder.ends_with',\r\n not_ends_with: 'querybuilder.not_ends_with',\r\n greater: 'querybuilder.greater',\r\n greater_or_equal: 'querybuilder.greater_or_equal',\r\n less: 'querybuilder.less',\r\n less_or_equal: 'querybuilder.less_or_equal',\r\n is_null: 'querybuilder.is_null',\r\n is_not_null: 'querybuilder.is_not_null',\r\n is_empty: 'querybuilder.is_empty',\r\n is_not_empty: 'querybuilder.is_not_empty',\r\n in: 'querybuilder.in',\r\n not_in: 'querybuilder.not_in'\r\n };\r\n private readonly operatorsDisplayNames___old: { [key: string]: string } = {\r\n equal: 'Equals',\r\n not_equal: 'Does not equal',\r\n contains: 'Contains',\r\n not_contains: 'Does not contain',\r\n begins_with: 'Begins with',\r\n not_begins_with: 'Does not begins with',\r\n ends_with: 'Ends with',\r\n not_ends_with: 'Does not end with',\r\n greater: 'Greater than',\r\n greater_or_equal: 'Greater than or equal',\r\n less: 'Less than',\r\n less_or_equal: 'Less than or equal',\r\n is_null: 'Is null',\r\n is_not_null: 'Is not null',\r\n is_empty: 'Is empty',\r\n is_not_empty: 'Is not empty',\r\n in: 'In',\r\n not_in: 'Not in'\r\n };\r\n constructor(private translate: TranslateService,\r\n ) { }\r\n\r\n getOperators(rule: QueryRule, fieldMap: QueryBuilderFieldMap): string[] {\r\n\r\n if (!this.getAvailableTypes().includes(rule.type)) {\r\n console.error('Type of rule is not valid. Please use one of the following types: ' + this.getAvailableTypes().join(', '));\r\n }\r\n\r\n let operators = this.operatorsMap[rule.type];\r\n\r\n // allow nullable\r\n if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.nullableOperators) {\r\n operators = [...operators, ...this.NULLABLE_OPERATORS];\r\n }\r\n\r\n // allow empty\r\n if (fieldMap[rule.field].settings && fieldMap[rule.field].settings.emptyOperators) {\r\n operators = [...operators, ...this.EMPTY_OPERATORS];\r\n }\r\n\r\n return operators;\r\n }\r\n\r\n getDefaultOperator(): string {\r\n return this.defaultOperator;\r\n }\r\n\r\n getOperatorsWithoutInput(): string[] {\r\n return [...this.NULLABLE_OPERATORS, ...this.EMPTY_OPERATORS];\r\n }\r\n\r\n getOperatorDisplayName(operator: string): string {\r\n if (this.operatorsDisplayNames[operator]) {\r\n return this.operatorsDisplayNames[operator];\r\n }\r\n return operator;\r\n }\r\n\r\n private getAvailableTypes(): string[] {\r\n return [\r\n this.INPUT_TYPE_STRING,\r\n this.INPUT_TYPE_INTEGER,\r\n this.INPUT_TYPE_DOUBLE,\r\n this.INPUT_TYPE_TIME,\r\n this.INPUT_TYPE_DATE,\r\n this.INPUT_TYPE_SELECT,\r\n this.INPUT_TYPE_BOOLEAN\r\n ];\r\n }\r\n}\r\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { QueryField, QueryBuilderFieldMap, QueryBuilderSettings, QueryRule, QueryRuleSet } from './interfaces/ngx-ntk-query-builder.interfaces';\r\nimport { OperatorsService } from './services/operators.service';\r\n\r\n@Component({\r\n selector: 'ngx-ntk-query-builder',\r\n templateUrl: './ngx-ntk-query-builder.component.html',\r\n styleUrls: ['./ngx-ntk-query-builder.component.scss'],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxQueryBuilderComponent),\r\n multi: true\r\n }]\r\n})\r\nexport class NgxQueryBuilderComponent implements OnInit, ControlValueAccessor {\r\n @Input() fieldMap: QueryBuilderFieldMap = {};\r\n @Input() settings: QueryBuilderSettings = {};\r\n @Input() disabled = false;\r\n @Input() data: QueryRuleSet = this.getEmptyRuleSetData();\r\n @Input() parent: QueryRuleSet;\r\n @Input() index: number;\r\n // private privateLanguage = 'en';\r\n @Input() set language(value: string) {\r\n // this.privateLanguage = value;\r\n if (value && value.length > 0) {\r\n this.translate.use(value);\r\n }\r\n }\r\n // get language(): string {\r\n // return this.privateLanguage;\r\n // }\r\n constructor(\r\n public translate: TranslateService,\r\n public operatorsService: OperatorsService\r\n ) {\r\n translate.setDefaultLang('en');\r\n translate.use('en');\r\n }\r\n ngOnInit(): void {\r\n if (typeof this.fieldMap !== 'object') {\r\n throw new Error('fieldMap must be an object');\r\n }\r\n\r\n if (typeof this.settings !== 'object') {\r\n throw new Error('settings must be an object');\r\n }\r\n }\r\n /**** ControlValueAccessor START ****/\r\n onChange = (data: QueryRuleSet) => { };\r\n onTouched = () => { };\r\n writeValue(data: any): void {\r\n this.data = data || this.getEmptyRuleSetData();\r\n }\r\n registerOnChange(fn: (data: QueryRuleSet) => void): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n /**** ControlValueAccessor END ****/\r\n addRule(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.data.rules.push({\r\n field: this.getFields()[0].value,\r\n type: this.getFields()[0].type,\r\n operator: this.operatorsService.getDefaultOperator()\r\n });\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n removeRule(index: number): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.data.rules.splice(index, 1);\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n addRuleSet(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.data.rules.push(this.getEmptyRuleSetData());\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n removeRuleSet(index: number): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this.hasParentRuleSet()) {\r\n this.parent.rules.splice(index, 1);\r\n }\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n changeCondition(value: string): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.data.condition = value;\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n changeField(rule: QueryRule, index: number): void {\r\n (this.data.rules[index] as QueryRule).type = this.fieldMap[rule.field].type;\r\n (this.data.rules[index] as QueryRule).operator = this.operatorsService.getDefaultOperator();\r\n (this.data.rules[index] as QueryRule).value = undefined;\r\n\r\n this.onChange(this.data);\r\n this.onTouched();\r\n }\r\n\r\n\r\n hasParentRuleSet(): boolean {\r\n return !!this.parent;\r\n }\r\n\r\n getEmptyRuleSetData(): QueryRuleSet {\r\n return { condition: 'and', rules: [] };\r\n }\r\n\r\n getFields(): QueryField[] {\r\n return Object.keys(this.fieldMap).map((value) => {\r\n const field = this.fieldMap[value];\r\n field.value = value;\r\n return field;\r\n });\r\n }\r\n\r\n getInputType(rule: QueryRule): string {\r\n\r\n if (!this.fieldMap[rule.field]) {\r\n throw new Error(`No configuration for field '${rule.field}' was found!`);\r\n }\r\n\r\n const type = this.fieldMap[rule.field].type;\r\n\r\n if (this.operatorsService.getOperatorsWithoutInput().includes(rule.operator)) {\r\n return null; // No displayed input\r\n }\r\n\r\n if (this.operatorsService.MULTI_SELECT_OPERATORS.includes(rule.operator)) {\r\n return (type === this.operatorsService.INPUT_TYPE_SELECT) ? this.operatorsService.INPUT_TYPE_MULTI_SELECT : type;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n getRuleOptions(rule: QueryRule): any {\r\n return this.fieldMap[rule.field].options ? this.fieldMap[rule.field].options : [];\r\n }\r\n convertToRuleSet(model: QueryRuleSet | QueryRule): QueryRuleSet {\r\n return model as QueryRuleSet;\r\n }\r\n convertToRule(model: QueryRuleSet | QueryRule): QueryRule {\r\n return model as QueryRule;\r\n }\r\n}\r\n","<div class=\"ngx-ntk-query-builder\" [ngClass]=\"{'disabled': disabled}\">\r\n <div class=\"ngx-ntk-query-group-controls\">\r\n <div class=\"ngx-condition-switcher\">\r\n <div>\r\n <input name=\"{{'condition' + index}}\" type=\"radio\" class=\"ngx-switch-radio\" [(ngModel)]=\"data.condition\"\r\n value=\"and\" #andOption>\r\n <label (click)=\"changeCondition(andOption.value)\" class=\"ngx-ntk-query-control ngx-switch-label\">\r\n {{'querybuilder.And' |\r\n translate}}</label>\r\n </div>\r\n <div>\r\n <input name=\"{{'condition' + index}}\" type=\"radio\" class=\"ngx-switch-radio\" [(ngModel)]=\"data.condition\"\r\n value=\"or\" #orOption>\r\n <label (click)=\"changeCondition(orOption.value)\"\r\n class=\"ngx-ntk-query-control ngx-switch-label\">{{'querybuilder.Or' |\r\n translate}}</label>\r\n </div>\r\n </div>\r\n <div class=\"ngx-actions\">\r\n <button type=\"button\" class=\"ngx-ntk-query-control ngx-ntk-query-btn ngx-ntk-query-btn-add\" (click)=\"addRule()\">\r\n {{'querybuilder.AddRule' | translate}}\r\n </button>\r\n <button type=\"button\" class=\"ngx-ntk-query-control ngx-ntk-query-btn ngx-ntk-query-btn-add\"\r\n (click)=\"addRuleSet()\">\r\n {{'querybuilder.AddGroup' | translate}}\r\n </button>\r\n <ng-container *ngIf=\"hasParentRuleSet()\">\r\n <button type=\"button\" class=\"ngx-ntk-query-control ngx-ntk-query-btn ngx-ntk-query-btn-remove\"\r\n (click)=\"removeRuleSet(index)\">\r\n {{'querybuilder.Remove' | translate}}\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"ngx-ntk-query-conditions\">\r\n <ul *ngIf=\"data.rules && data.rules.length > 0\">\r\n <li *ngFor=\"let child of data.rules; let i = index\" class=\"ngx-connector\">\r\n <!-- rule -->\r\n <ng-container *ngIf=\"!child['rules']\">\r\n <div class=\"ngx-rule-wrap\">\r\n <div class=\"ngx-rule\">\r\n <div class=\"ngx-field\">\r\n <select class=\"ngx-ntk-query-control ngx-ntk-query-select\" [(ngModel)]=\"child['field']\"\r\n (change)=\"changeField(convertToRule(child), i)\" [disabled]=\"disabled\">\r\n <option *ngFor=\"let field of getFields()\" [value]=\"field.value\">\r\n {{field.name}}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"ngx-operator\">\r\n <select class=\"ngx-ntk-query-control ngx-ntk-query-select\" [(ngModel)]=\"child['operator']\"\r\n [disabled]=\"disabled\">\r\n <option *ngFor=\"let operator of operatorsService.getOperators(convertToRule(child), fieldMap)\"\r\n [value]=\"operator\">\r\n {{this.translate.instant(operatorsService.getOperatorDisplayName(operator)) }}\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"ngx-value\" [ngSwitch]=\"getInputType(convertToRule(child))\">\r\n <!-- STING -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_STRING\">\r\n <input class=\"ngx-ntk-query-control ngx-ntk-query-input\" type=\"text\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n </ng-container>\r\n\r\n <!-- INTEGER -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_INTEGER\">\r\n <input class=\"ngx-ntk-query-control ngx-ntk-query-input\" type=\"number\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n </ng-container>\r\n\r\n <!-- DOUBLE -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_DOUBLE\">\r\n <input class=\"ngx-ntk-query-control ngx-ntk-query-input\" type=\"number\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n </ng-container>\r\n\r\n <!-- DATE -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_DATE\">\r\n <input class=\"ngx-ntk-query-control ngx-ntk-query-input\" type=\"date\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n </ng-container>\r\n\r\n <!-- TIME -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_TIME\">\r\n <input class=\"ngx-ntk-query-control ngx-ntk-query-input\" type=\"time\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n </ng-container>\r\n\r\n <!-- BOOLEAN -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_BOOLEAN\">\r\n <div class=\"ngx-ntk-query-boolean-wrap\">\r\n <div class=\"ngx-boolean\">\r\n <input id=\"{{'booleanYes' + i}}\" name=\"{{'boolean' + i}}\" type=\"radio\" class=\"ngx-radio-btn\"\r\n [(ngModel)]=\"child['value']\" [value]=\"true\" [disabled]=\"disabled\">\r\n <label for=\"{{'booleanYes' + i}}\" class=\"ngx-label\">{{'querybuilder.Yes' | translate}}</label>\r\n </div>\r\n <div class=\"ngx-boolean\">\r\n <input id=\"{{'booleanNo' + i}}\" name=\"{{'boolean' + i}}\" type=\"radio\" class=\"ngx-radio-btn\"\r\n [(ngModel)]=\"child['value']\" [value]=\"false\" [disabled]=\"disabled\">\r\n <label for=\"{{'booleanNo' + i}}\" class=\"ngx-label\">{{'querybuilder.No' | translate}}</label>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- SELECT -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_SELECT\">\r\n <select class=\"ngx-ntk-query-control ngx-ntk-query-select\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\">\r\n <option *ngFor=\"let opt of getRuleOptions(convertToRule(child))\" [value]=\"opt.value\">\r\n {{opt.name}}\r\n </option>\r\n </select>\r\n </ng-container>\r\n\r\n <!-- MULTI_SELECT -->\r\n <ng-container *ngSwitchCase=\"operatorsService.INPUT_TYPE_MULTI_SELECT\">\r\n <select class=\"ngx-ntk-query-control ngx-ntk-query-multi-select\" [(ngModel)]=\"child['value']\"\r\n [disabled]=\"disabled\" multiple>\r\n <option *ngFor=\"let opt of getRuleOptions(convertToRule(child))\" [ngValue]=\"opt.value\">\r\n {{opt.name}}\r\n </option>\r\n </select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"ngx-rule-controls\">\r\n <button type=\"button\" class=\"ngx-ntk-query-control ngx-ntk-query-btn ngx-ntk-query-btn-remove\"\r\n (click)=\"removeRule(i)\">\r\n {{'querybuilder.Remove' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- rule set -->\r\n <ng-container *ngIf=\"child['rules']\">\r\n <ngx-ntk-query-builder [data]=\"convertToRuleSet(child) \" [fieldMap]=\"fieldMap\" [parent]=\"data\"\r\n [disabled]=\"disabled\" [index]=\"i\">\r\n </ngx-ntk-query-builder>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { NgxQueryBuilderComponent } from './ngx-ntk-query-builder.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxQueryBuilderComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TranslateModule.forChild({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: (http: HttpClient) => new TranslateHttpLoader(http, '/assets/i18n/querybuilder/', '.json'),\r\n deps: [HttpClient]\r\n }\r\n }),\r\n ],\r\n exports: [\r\n NgxQueryBuilderComponent\r\n ],\r\n providers: [\r\n TranslateService,\r\n ]\r\n})\r\nexport class NgxNtkQueryBuilderModule {\r\n static forRoot(): ModuleWithProviders<NgxNtkQueryBuilderModule> {\r\n return {\r\n ngModule: NgxNtkQueryBuilderModule,\r\n providers: [TranslateService]\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.OperatorsService"],"mappings":"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"}