{"version":3,"file":"json-logic-editor.mjs","sources":["../../../projects/json-logic-editor/src/lib/jsonlogic/jsonlogic.component.ts","../../../projects/json-logic-editor/src/lib/jsonlogic/jsonlogic.component.html","../../../projects/json-logic-editor/src/lib/jsonlogic-expression-editor.component.ts","../../../projects/json-logic-editor/src/lib/jsonlogic-expression-editor.component.html","../../../projects/json-logic-editor/src/lib/json-logic-editor.module.ts","../../../projects/json-logic-editor/src/json-logic-editor.ts"],"sourcesContent":["import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';\r\nimport { ICheckExpressionFieldLookUp } from '../interfaces/IJsonEditor';\r\n\r\n@Component({\r\n    selector: 'app-jsonlogic',\r\n    templateUrl: './jsonlogic.component.html',\r\n    styleUrls: ['./jsonlogic.component.css']\r\n})\r\nexport class JsonlogicComponent implements OnInit {\r\n\r\n\r\n    @Input() form!: FormGroup ;\r\n    @Input() fieldsList!: ICheckExpressionFieldLookUp[] | null ;\r\n    filtered_fieldsList: ICheckExpressionFieldLookUp[] | null  = [];\r\n    function=\"https://freesvg.org/img/ftfunct.png\";\r\n    variable=\"https://cdn1.iconfinder.com/data/icons/heroicons-ui/24/variable-512.png\";\r\n    keyboard=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Keyboard-icon_Wikipedians.svg/1280px-Keyboard-icon_Wikipedians.svg.png\";\r\n\r\n    @Input() componentLocation: string| null = null;\r\n    constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) { }\r\n    ngOnInit() {\r\n        this.filtered_fieldsList = this.fieldsList;\r\n    }\r\n    changeToValue(componentForm: FormGroup) {\r\n        componentForm.get('controlType')?.setValue('value');\r\n        componentForm.get('value')?.setValue(null);\r\n        (<FormArray>componentForm.get('parameters')).clear();\r\n        if (this.componentLocation == 'left' && componentForm?.parent?.get('rightComponent') != undefined) {\r\n            componentForm?.parent?.get('fieldtype')?.setValue(null);\r\n        }\r\n    }\r\n    changeToVariable(componentForm: FormGroup) {\r\n        componentForm.get('controlType')?.setValue('variable');\r\n        componentForm.get('value')?.setValue(null);\r\n        (<FormArray>componentForm.get('parameters')).clear();\r\n        if (this.componentLocation == 'left' && componentForm.parent?.get('rightComponent') != undefined) {\r\n            componentForm.parent.get('fieldtype')?.setValue(null);\r\n        }\r\n    }\r\n    changeToFunction(componentForm: FormGroup) {\r\n        componentForm.get('controlType')?.setValue('function');\r\n        componentForm.get('value')?.setValue(null);\r\n        if (this.componentLocation == 'left' && componentForm.parent?.get('rightComponent') != undefined) {\r\n            componentForm.parent.get('fieldtype')?.setValue(null);\r\n        }\r\n    }\r\n    onSelect(componentForm: FormGroup, controlType: string) {\r\n        if (controlType != \"variable\") {\r\n            let selectedfunction = componentForm.get('value')?.value;\r\n            let func = this.fieldsList!.find(f => f.controlType == \"function\" && f.value == selectedfunction);\r\n            componentForm.get('returnType')?.setValue(func?.returnType);\r\n            (<FormArray>componentForm.get('parameters')).clear();\r\n            if (func != undefined) {\r\n                func.parameters?.forEach(param => {\r\n                    if (componentForm.get('padding') != undefined) {\r\n                        param.padding = componentForm.get('padding')?.value + 20;\r\n                    }\r\n                    (<FormArray>componentForm.get('parameters')).push(this.componentFormGroup(param));\r\n                });\r\n            }\r\n            if (componentForm.parent?.get('rightComponent') != undefined) {\r\n                componentForm.parent?.get('rightComponent')?.get('type')?.setValue(componentForm.get('returnType')?.value);\r\n                componentForm.parent?.get('fieldtype')?.setValue(componentForm.get('returnType')?.value);\r\n            }\r\n        }\r\n        else {\r\n            let selectedfunction = componentForm.get('value')?.value;\r\n            (<FormArray>componentForm.get('parameters')).clear();\r\n            let func = this.fieldsList!.find(f => f.controlType != \"function\" && f.value == selectedfunction);\r\n            componentForm.get('type')?.setValue(func?.type);\r\n            if (componentForm.parent?.get('rightComponent') != undefined) {\r\n                componentForm.parent?.get('rightComponent')?.get('type')?.setValue(componentForm.get('type')?.value);\r\n                componentForm.parent.get('fieldtype')?.setValue(componentForm.get('type')?.value);\r\n            }\r\n        }\r\n    }\r\n    componentFormGroup(logic: ICheckExpressionFieldLookUp) {\r\n        let group = this.fb.group({\r\n            type: [logic ? logic.type : null],\r\n            value: [logic ? logic.value : null,Validators.required],\r\n            name: [logic ? logic.name : null],\r\n            label: [logic ? logic.label : null],\r\n            controlType: [logic ? logic.controlType : null,Validators.required],\r\n            returnType: [logic ? logic.returnType : null],\r\n            padding: [logic ? logic.padding : null],\r\n            parameters: this.fb.array([]),\r\n        });\r\n        if (logic.parameters) {\r\n            logic.parameters.forEach(param => {\r\n                (<FormArray>group.get('parameters')).push(this.componentFormGroup(param));\r\n            });\r\n        }\r\n        if(logic)\r\n        {\r\n          if(logic.name)\r\n          {\r\n            let optionsal=logic.name[logic.name.length-1];\r\n            if(optionsal==\"?\")\r\n            {\r\n              group.get('value')?.setValidators(([]));\r\n              group.get('controlType')?.setValidators(([]));\r\n              group.get('value')?.updateValueAndValidity();\r\n              group.get('controlType')?.updateValueAndValidity();\r\n\r\n              console.log(group.get('name')?.value,group.valid);\r\n            }\r\n          }\r\n        }\r\n        return group;\r\n    }\r\n\r\n    getPlaceHolder(componentForm: FormGroup) {\r\n        if (componentForm.get('controlType')?.value != 'value') {\r\n            if (componentForm.get('type')?.value == null) {\r\n                return 'Select ' + componentForm.get('controlType')?.value;\r\n            }\r\n            else {\r\n                if (componentForm.get('name')?.value == null) {\r\n                    return 'Select value';\r\n                }\r\n                else {\r\n                    return 'Select ' + componentForm.get('name')?.value;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (componentForm.get('name')?.value == null) {\r\n                return 'Enter value';\r\n            }\r\n            else {\r\n                return 'Enter value for ' + componentForm.get('name')?.value;\r\n            }\r\n        }\r\n    }\r\n\r\n    filterlist(componentForm: FormGroup) {\r\n        let controltype = componentForm.get('controlType')?.value;\r\n        let type = componentForm.get('type')?.value;\r\n        if (type != null) {\r\n            if (type != \"string\" && type != \"text\") {\r\n\r\n                this.filtered_fieldsList = [...this.fieldsList!.filter(x => x.controlType == controltype && (x.returnType == type || x.type == type))];\r\n            }\r\n            else {\r\n                this.filtered_fieldsList = [...this.fieldsList!.filter(x => x.controlType == controltype && (x.returnType == \"string\" || x.returnType == \"text\" || x.type == \"string\" || x.type == \"text\"))];\r\n            }\r\n        }\r\n        else {\r\n            this.filtered_fieldsList = [...this.fieldsList!.filter(x => x.controlType == controltype)];\r\n        }\r\n        this.cd.detectChanges();\r\n    }\r\n\r\n    showValueTypeControl(componentForm: FormControl) {\r\n\r\n        if (this.componentLocation != 'right' && componentForm.parent?.get('rightComponent') != undefined) {\r\n            return false;\r\n        }\r\n        else {\r\n            return true;\r\n        }\r\n    }\r\n    disableDateEntry(event: any, datepicker: BsDatepickerDirective) {\r\n        if (event.keyCode == 8) {\r\n            datepicker.bsValue = undefined;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    checkerror(control:any)\r\n    {\r\n      if(control.touched && control.errors!=null)\r\n      {\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n}\r\n","<ng-container class=\"linemian\" id=\"parent\" *ngTemplateOutlet=\"recursivecomponent;context: {component:form}\">\r\n</ng-container>\r\n<ng-template #recursivecomponent let-componentForm=\"component\">\r\n    <form class=\"componentclass\" [formGroup]=\"componentForm\">\r\n        <table [ngClass]=\"{'empthytable': componentForm.get('controlType')?.value==null}\" class=\"rowm\" [class]=\"'line'+componentForm.get('padding')?.value+'px'\"\r\n            [style.margin-left]=\"componentForm.get('padding')?.value+'px'\" style=\"width: 100%; overflow-x: scroll;\">\r\n            <!-- <table class=\"rowm\" style=\"width: 100%; overflow-x: scroll;\"> -->\r\n              <tr>\r\n                <td>\r\n            <div *ngIf=\"componentForm.get('controlType')?.value==null\" class=\"emptycontrol emptypadding\">\r\n            <p class=\"emptyspace\"> {{this.getPlaceHolder(componentForm)==\"Select null\"?\"\":this.getPlaceHolder(componentForm)}}</p>\r\n            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n            </div>\r\n          </td>\r\n              <td>\r\n            <div class=\"col-md-6m paddingleftm inputwidth\" *ngIf=\"componentForm.get('controlType')?.value=='value'\">\r\n                <!-- <input  [placeholder]=\"this.getPlaceHolder(componentForm)\" [type]=\"componentForm.get('type')?.value\"\r\n                    class=\"form-control\" placeholder=\"Enter Some Value\" formControlName=\"value\" /> -->\r\n                <div *ngIf=\"componentForm.get('type')?.value!='date'\">\r\n                    <input [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" [placeholder]=\"this.getPlaceHolder(componentForm)\" [type]=\"componentForm.get('type')?.value\"\r\n                        class=\"form-controls\" placeholder=\"Enter Some Value\" formControlName=\"value\" />\r\n                </div>\r\n                <div *ngIf=\"componentForm.get('type')?.value=='date'\">\r\n                    <input [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" (keydown)=\"disableDateEntry($event,expressionDatePicker)\" class=\"form-controls m-input\"\r\n                        type=\"datetime\" bsDatepicker #expressionDatePicker=\"bsDatepicker\" formControlName=\"value\"\r\n                        [bsConfig]=\"{dateInputFormat:'YYYY-MM-DD'}\" />\r\n                </div>\r\n            </div>\r\n          </td\r\n          >\r\n          <td>\r\n            <div class=\"col-md-6m paddingleftm\"\r\n                *ngIf=\"componentForm.get('controlType')?.value=='variable'  || componentForm.get('controlType')?.value=='function'\">\r\n                <ng-select [ngClass]=\"{errorborder: this.checkerror(componentForm.get('value'))}\" [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" class=\"form-controls\" [items]=\"filtered_fieldsList\" (open)=\"filterlist(componentForm)\"\r\n                    (change)=\"onSelect(componentForm,componentForm.get('controlType')?.value)\" bindLabel=\"label\"\r\n                    [clearable]=\"false\" bindValue=\"value\" [placeholder]=\"this.getPlaceHolder(componentForm)\"\r\n                    formControlName=\"value\">\r\n                </ng-select>\r\n            </div>\r\n          </td>\r\n            <!-- *ngIf=\"componentForm.get('type')?.value!=null\" -->\r\n            <td (click)=\"changeToValue(componentForm)\">\r\n            <div *ngIf=\"showValueTypeControl(componentForm)\" class=\"col-md-2m\"[ngClass]=\"{selectedIcon: componentForm.get('controlType')?.value=='value'}\">\r\n\r\n\r\n              <!-- <i (click)=\"changeToValue(componentForm)\" class=\"fa fa-keyboard\" aria-hidden=\"true\"></i> -->\r\n\r\n              <img [src]=\"keyboard\" [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" class=\"imgvar imgtyping\" />\r\n\r\n            </div>\r\n          </td>\r\n\r\n          <td (click)=\"changeToVariable(componentForm)\">\r\n            <div  class=\"col-md-2m\" [ngClass]=\"{selectedIcon: componentForm.get('controlType')?.value=='variable'}\">\r\n\r\n                    <img [src]=\"variable\" [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" class=\"imgvar\" />\r\n            </div>\r\n          </td>\r\n\r\n          <td (click)=\"changeToFunction(componentForm)\">\r\n            <div [ngClass]=\"{errorborder: this.checkerror(componentForm.get('controlType'))}\" class=\"col-md-2m\" [ngClass]=\"{selectedIcon: componentForm.get('controlType')?.value=='function'}\">\r\n\r\n                    <img [src]=\"function\"  [id]=\"componentForm.get('padding')?.value+componentForm.get('name')?.value\" class=\"imgvar imgfunc\" />\r\n            </div>\r\n          </td>\r\n          </tr>\r\n          </table>\r\n        <div class=\"lineone\" *ngIf=\"componentForm.get('parameters')?.value!=undefined\">\r\n            <div class=\"linetwo\" *ngFor=\"let group of componentForm.get('parameters')['controls'];let i=index\">\r\n                <ng-container class=\"linethree\" *ngTemplateOutlet=\"recursivecomponent;context: {component: group}\">\r\n                </ng-container>\r\n            </div>\r\n        </div>\r\n    </form>\r\n</ng-template>\r\n","import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { ICheckExpressionFieldLookUp, ICheckListExpression, ICustomJsonLogicComponent } from './interfaces/IJsonEditor';\r\n\r\n@Component({\r\n    selector: 'jsonlogic-expression-editor',\r\n    templateUrl: './jsonlogic-expression-editor.component.html',\r\n    styleUrls: ['./jsonlogic-expression-editor.component.css']\r\n})\r\nexport class JsonlogicExpressionEditorComponent implements OnInit,AfterViewInit {\r\n\r\n\r\n\r\n    @Input() jsonLogic: string | undefined;\r\n    @Input() variables: ICheckExpressionFieldLookUp[] =[];\r\n    @Input() functions: ICheckExpressionFieldLookUp[] =[];\r\n    plus=\"https://cdn0.iconfinder.com/data/icons/ui-16px-perfect-megapack-line/16/82_Add-512.png\";\r\n    minus=\"https://toppng.com/uploads/preview/free-recycle-bin-icon-vector-recycle-bin-icon-115534132079jvhnualpn.png\";\r\n    JSON_LOGIC: String| undefined;\r\n    JsonLogicObj:any={};\r\n    checklistTemplateItemExpressions: ICheckListExpression[] = [];\r\n    filtered_operatorList = [] as any;\r\n    operatorList = [\r\n        {\r\n            type: ['number', 'text', 'string', 'date'],\r\n            label: 'Equals',\r\n            value: '=='\r\n        },\r\n        {\r\n            type: ['number', 'date'],\r\n            label: 'Not Equal',\r\n            value: '!='\r\n        },\r\n        {\r\n            type: ['number', 'date'],\r\n            label: 'Greator Then',\r\n            value: '>'\r\n        },\r\n        {\r\n            type: ['number', 'date'],\r\n            label: 'Less Then',\r\n            value: '<'\r\n        },\r\n        {\r\n            type: ['number', 'date'],\r\n            label: 'Greator Then Equals',\r\n            value: '>='\r\n        },\r\n        {\r\n            type: ['number', 'date'],\r\n            label: 'Less Then Equals',\r\n            value: '<='\r\n        },\r\n        {\r\n            type: ['text', 'string'],\r\n            label: 'In',\r\n            value: 'in'\r\n        }\r\n    ];\r\n    expressionformArray: FormArray = this.fb.array([]);\r\n    logicalOperatorList = [\r\n        {\r\n            label: 'And',\r\n            value: 1\r\n        },\r\n        {\r\n            label: 'Or',\r\n            value: 0\r\n        }\r\n    ]\r\n    constructor(private fb: FormBuilder) {\r\n     }\r\n  ngAfterViewInit() {\r\n  }\r\n    ngOnInit() {\r\n        this.filtered_operatorList = this.operatorList;\r\n        this.constructModelLogic();\r\n        //this.constructFormArray();\r\n\r\n    }\r\n\r\n\r\n    mergeFunctionIntoVariables() {\r\n        this.functions!.forEach(f => {\r\n            f.label = 'f(X) ' + f.name;\r\n            f.value = f.name;\r\n          this.variables.push(f);\r\n        });\r\n    }\r\n\r\n    SetttingsForVariableAndFunctions(functions:ICheckExpressionFieldLookUp[] | undefined)\r\n    {\r\n      functions?.forEach(f=>{\r\n        if(f.parameters?.length)\r\n        {\r\n            this.SetttingsForVariableAndFunctions(f.parameters);\r\n        }\r\n        else\r\n        {\r\n            if(f.controlType==\"variable\")\r\n            {\r\n                f.returnType=null;\r\n            }\r\n            if(f.controlType==\"function\")\r\n            {\r\n                f.type=null;\r\n            }\r\n        }\r\n      });\r\n\r\n    }\r\n\r\n    constructModelLogic() {\r\n        // let json_logic = `{\"and\":[{\"==\":[{\"var\":\"Name\"},{\"cat\":[\"farrukh \",\"khan\"]}]}]}`;\r\n        // let json_logic = `{\"and\":[{\"==\":[{\"cat\":[\"farrukh \",\"khan\"]},{\"var\":\"Name\"}]}]}`;\r\n        //let json_logic = `{\"and\":[{\"in\":[{\"var\":\"SubjectLastName\"},{\"var\":\"ParentSubjectName\"}]},{\"and\":[{\"==\":[{\"var\":\"Name\"},{\"cat\":[\"farrukh \",\"khan\"]}]}]}]}`;\r\n        this.mergeFunctionIntoVariables();\r\n        if (this.jsonLogic != null && this.jsonLogic != '') {\r\n            let jsonlogicObj = JSON.parse(this.jsonLogic);\r\n            let modelLogic = {} as ICheckListExpression;\r\n            this.expressionformArray.clear();\r\n            this.checklistTemplateItemExpressions = [];\r\n            this.checklistTemplateItemExpressions.push(this.parseJsonLogic(jsonlogicObj, modelLogic));\r\n            this.constructFormArray();\r\n            sessionStorage.setItem(\"model_LOGIC\", JSON.stringify(modelLogic));\r\n        }\r\n        else {\r\n            let exp = {} as ICheckListExpression;\r\n            exp.id = 0;\r\n            exp.leftComponent = null;\r\n            exp.rightComponent = null;\r\n            exp.logicalOperator = 1;\r\n            exp.field = null;\r\n            exp.transactionType = 1;\r\n            exp.operator = null;\r\n            exp.value = null;\r\n            this.expressionformArray.push(this.add_checkExpressionFormGroup(exp));\r\n        }\r\n    }\r\n\r\n    parseJsonLogic(Jobj: any, logic: ICheckListExpression) {\r\n        let keys = Object.keys(Jobj);\r\n        let key = keys[0];\r\n        if (key == \"and\" || key == \"or\") {\r\n            logic.logicalOperator = this.getLogicalOperatorValue(key);\r\n            // and: []\r\n            Object.keys(Jobj[key]).forEach((k, i) => {\r\n                let keys = Object.keys(Jobj[key][k]); //   JObj[\"and\"][\"0\"]  ==  {  \"==\":[      ]     }\r\n                let operatorkey = keys[0];\r\n                //  Jobj[key][k][operatorkey]=    [   {\"var\":\"Name\"},   {\"cat\":[\"farrukh \",\"khan\"]}    ]\r\n                // Jobj[and][0][==]            =[   {\"var\":\"Name\"},   {\"cat\":[\"farrukh \",\"khan\"]}    ]\r\n                if (operatorkey == \"and\" || operatorkey == \"or\") {\r\n                    let sublogic = {} as ICheckListExpression;\r\n                    sublogic.operator = Object.keys(Jobj[key][i][operatorkey][0])[0];\r\n                    this.checklistTemplateItemExpressions.push(this.parseJsonLogic(Jobj[key][i], sublogic));\r\n                }\r\n                else {\r\n                    logic.operator = operatorkey;\r\n                    Jobj[key][k][operatorkey].forEach((obj:any, i:number) => {\r\n                        if (i == 0) {\r\n                            logic.leftComponent = {} as ICustomJsonLogicComponent;\r\n                            logic.leftComponent = this.parseComponentLogic(obj, logic.leftComponent);\r\n                            if (logic.leftComponent.type == \"text\" || logic.leftComponent.type == \"string\" || logic.leftComponent.returnType == \"text\" || logic.leftComponent.returnType == \"string\") {\r\n                                logic.fieldType = \"string\";\r\n                            }\r\n                            else {\r\n                                if (logic.leftComponent.type != null) {\r\n                                    logic.fieldType = logic.leftComponent.type;\r\n                                }\r\n                                else {\r\n                                    logic.fieldType = logic.leftComponent.returnType;\r\n                                }\r\n                            }\r\n                        }\r\n                        if (i == 1) {\r\n                            logic.rightComponent = {} as ICustomJsonLogicComponent;\r\n                            logic.rightComponent = this.parseComponentLogic(obj, logic.rightComponent);\r\n                            logic.rightComponent.type = logic.fieldType;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n        }\r\n        // if (key == \"var\") {\r\n\r\n        // }\r\n        // if (this.operatorList.find(op => op.value == key) != undefined) {\r\n        // }\r\n        // else {\r\n\r\n        // }\r\n\r\n        return logic;\r\n    }\r\n\r\n    parseComponentLogic(Jobj: any, component: ICustomJsonLogicComponent, name: string| null | undefined = null, padding: number = 20) {\r\n\r\n      if(Jobj==null)\r\n      {\r\n        component.controlType = null;\r\n        component.value = Jobj;\r\n        component.padding = padding;\r\n        component.returnType = null;\r\n        component.label = null;\r\n        component.name = name;\r\n        component.parameters = [];\r\n        return component;\r\n      }\r\n      let keys = Object.keys(Jobj);\r\n        let key:any = null;\r\n        if (keys.length) {\r\n            key = keys[0];\r\n        }\r\n        if (typeof (Jobj) == 'string') {\r\n            // its a string   control type value\r\n            if (this.IsISODate(Jobj)) {\r\n                component.type = 'date';\r\n            }\r\n            else if (isNaN(Number(Jobj)) == false) {\r\n                component.type = 'number';\r\n            }\r\n            else {\r\n                component.type = 'string';\r\n            }\r\n            component.controlType = \"value\";\r\n            component.value = Jobj;\r\n            component.padding = padding;\r\n            component.returnType = null;\r\n            component.label = null;\r\n            component.name = name;\r\n            component.parameters = [];\r\n        }\r\n\r\n        else if (key == \"var\") {\r\n            // its a variable  control type  variable\r\n            let chosenVar = this.variables!.find(x => x.value == Jobj[key]);\r\n            component.type = chosenVar!.type;\r\n            component.value = chosenVar!.value;\r\n            component.label = null;\r\n            component.name = name;\r\n            component.returnType = null;\r\n            component.controlType = \"variable\";\r\n            component.padding = padding;\r\n            component.parameters = [];\r\n        }\r\n        else if (key != 'var') {\r\n            let chosenFunc = this.variables!.find(x => x.value == key) as ICheckExpressionFieldLookUp;\r\n            component.type = null;//chosenFunc.type;\r\n            component.value = chosenFunc!.value;\r\n            component.label = null;\r\n            component.name = name ? name : chosenFunc.name;\r\n            component.returnType = chosenFunc.returnType;\r\n            component.controlType = \"function\";\r\n            component.padding = padding;\r\n            component.parameters = [];\r\n            Jobj[key].forEach((obj:any, i:number) => {\r\n                let param = {} as ICustomJsonLogicComponent;\r\n                let padding = component.padding + 20;\r\n                component.parameters?.push(this.parseComponentLogic(obj, param, chosenFunc?.parameters![i].name, padding));\r\n            });\r\n            // its a function\r\n        }\r\n        return component;\r\n    }\r\n\r\n\r\n\r\n    constructFormArray() {\r\n\r\n        this.checklistTemplateItemExpressions.forEach(exp => this.expressionformArray.push(this.add_checkExpressionFormGroup(exp)));\r\n\r\n    }\r\n\r\n    add_checkExpressionFormGroup(exp: ICheckListExpression) {\r\n        let group = this.fb.group(\r\n            {\r\n                id: [exp ? exp.id : 0],\r\n                logicalOperator: [exp ? exp.logicalOperator : null],\r\n                leftComponent: this.componentFormGroup(exp.leftComponent),\r\n                operator: [exp ? exp.operator : null, Validators.required],\r\n                rightComponent: this.componentFormGroup(exp.rightComponent),\r\n                fieldtype: [exp ? exp.fieldType : null],\r\n                transactionType: [this.getTransactionType(exp)],\r\n            }\r\n        );\r\n        if (exp) {\r\n            if (exp.field != null) {\r\n                let field = this.variables!.find(x => x.value == exp.field) as ICheckExpressionFieldLookUp;\r\n                this.setValueType(field.type, group);\r\n            }\r\n        }\r\n        return group;\r\n    }\r\n\r\n    componentFormGroup(logic: ICustomJsonLogicComponent | null | undefined) {\r\n        let group = this.fb.group({\r\n            type: [logic ? logic.type : null],\r\n            value: [logic ? logic.value : null,Validators.required],\r\n            label: [logic ? logic.label : null],\r\n            name: [logic ? logic.name : null],\r\n            returnType: [logic ? logic.returnType : null],\r\n            controlType: [logic ? logic.controlType : null,Validators.required],\r\n            padding: [logic ? logic.padding : 20],\r\n            parameters: this.fb.array([]),\r\n        });\r\n        if (logic?.parameters) {\r\n            logic.parameters.forEach(param => {\r\n                (<FormArray>group.get('parameters')).push(this.componentFormGroup(param));\r\n            });\r\n        }\r\n        if(logic)\r\n        {\r\n          if(logic.name)\r\n          {\r\n                let optional=logic.name[logic.name.length-1];\r\n                if(optional==\"?\")\r\n                {\r\n                  group.get('value')?.clearValidators();\r\n                  group.get('value')?.updateValueAndValidity();\r\n                  group.get('controlType')?.clearValidators();\r\n                  group.get('controlType')?.updateValueAndValidity();\r\n                }\r\n          }\r\n        }\r\n        return group;\r\n    }\r\n    addCheckExpression(i:number) {\r\n        let exp = {} as ICheckListExpression;\r\n        exp.id = 0;\r\n        exp.logicalOperator = 1;\r\n        exp.field = null;\r\n        exp.transactionType = 1;\r\n        exp.leftComponent = null;\r\n        exp.rightComponent = null;\r\n        exp.operator = null;\r\n        exp.value = null;\r\n        if (this.expressionformArray.length == 1) {\r\n            this.expressionformArray.push(this.add_checkExpressionFormGroup(exp));\r\n        }\r\n        else {\r\n            this.expressionformArray.insert(i + 1, this.add_checkExpressionFormGroup(exp));\r\n        }\r\n    }\r\n    removecheckExpresssion(i:number, group: FormGroup | AbstractControl) {\r\n            this.deleteExpression(i);\r\n    }\r\n    deleteExpression(i:number) {\r\n        this.expressionformArray.removeAt(i);\r\n        if (this.expressionformArray.length == 1) {\r\n            let expression = this.expressionformArray.at(0) as FormGroup;\r\n            expression.get('LogicalOperator')?.setValue(null);\r\n        }\r\n    }\r\n    filterOperatorList(i:number) {\r\n        this.filtered_operatorList = [];\r\n        let expression = this.expressionformArray.at(i) as FormGroup;\r\n        let type = this.getLeftComponentType(expression);\r\n        this.operatorList.forEach(op => {\r\n            op.type.forEach(t => {\r\n                if (t == type) {\r\n                    this.filtered_operatorList.push(op);\r\n                }\r\n            });\r\n        });\r\n    }\r\n    getLeftComponentType(expression: FormGroup) {\r\n        let leftComponent = expression.get('leftComponent') as FormGroup;\r\n        let type = null;\r\n        if (leftComponent.get('type')?.value != null) {\r\n            type = leftComponent.get('type')?.value;\r\n        }\r\n        if (leftComponent.get('returnType')?.value != null) {\r\n            type = leftComponent.get('returnType')?.value;\r\n        }\r\n        return type;\r\n    }\r\n    getTransactionType(exp: ICheckListExpression) {\r\n        if (exp) {\r\n            if (exp.transactionType == null) {\r\n                return 1;\r\n            } else if (exp.transactionType == 0) {\r\n                return 2;\r\n            }\r\n            else {\r\n                return exp.transactionType;\r\n            }\r\n        } else {\r\n            return 1;\r\n        }\r\n    }\r\n    setValueType(type:any, expression:any) {\r\n        if (type == \"string\" || type == \"text\") {\r\n            expression.get('fieldtype').setValue('text');\r\n        }\r\n        if (type == \"number\") {\r\n            expression.get('fieldtype').setValue('number');\r\n        }\r\n        if (type == 'date') {\r\n            expression.get('fieldtype').setValue('date');\r\n        }\r\n    }\r\n    getJsonLogic() {\r\n\r\n      if(!this.expressionformArray.valid)\r\n      {\r\n        this.expressionformArray.markAllAsTouched();\r\n        return ;\r\n      }\r\n      this.expressionformArray.controls.forEach(exp => {\r\n          if (exp.get('transactionType')?.value != 3) {\r\n              if (this.JsonLogicObj == null) {\r\n\r\n                  this.JsonLogicObj = {};\r\n                  this.JsonLogicObj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)] = [];\r\n                  let nestedobj:any = {};\r\n                  nestedobj[exp.get('operator')?.value] = [];\r\n\r\n\r\n                  // left component\r\n                  nestedobj[exp.get('operator')?.value].push(\r\n                      this.generateExpression(<FormGroup>exp.get('leftComponent'), exp.get('leftComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n                  );\r\n                  //right\r\n                  nestedobj[exp.get('operator')?.value].push(\r\n                      this.generateExpression(<FormGroup>exp.get('rightComponent'), exp.get('rightComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n                  );\r\n                  this.JsonLogicObj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(nestedobj);\r\n              }\r\n              else {\r\n                  let obj :any= {};\r\n                  obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)] = [];\r\n                  let nestedobj:any = {};\r\n                  nestedobj[exp.get('operator')?.value] = [];\r\n\r\n                  //left\r\n                  nestedobj[exp.get('operator')?.value].push(\r\n\r\n                      this.generateExpression(<FormGroup>exp.get('leftComponent'), exp.get('leftComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n\r\n                  );\r\n\r\n                  //right\r\n                  nestedobj[exp.get('operator')?.value].push(\r\n                      this.generateExpression(<FormGroup>exp.get('rightComponent'), exp.get('rightComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n                  );\r\n\r\n\r\n                  obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(nestedobj);\r\n                  // obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(this.JsonLogicObj);\r\n                  //Object.assign(this.JsonLogicObj,obj);\r\n                   this.JsonLogicObj = { ...obj };\r\n              }\r\n          }\r\n      });\r\n      let JSON_lOGIC = JSON.stringify(this.JsonLogicObj);\r\n      sessionStorage.setItem('logiccccc', JSON_lOGIC);\r\n      return JSON_lOGIC;\r\n  }\r\n\r\n\r\n\r\n\r\n    // getJsonLogic() {\r\n\r\n    //     this.expressionformArray.controls.forEach(exp => {\r\n    //         if (exp.get('transactionType')?.value != 3) {\r\n    //             if (this.JsonLogicObj == null) {\r\n\r\n    //                 this.JsonLogicObj = {} as any;\r\n\r\n    //                 this.JsonLogicObj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)]= [];\r\n    //                 let nestedobj = {}  as  any;\r\n    //                 nestedobj[exp.get('operator')?.value] = [];\r\n\r\n\r\n    //                 // left component\r\n    //                 nestedobj[exp.get('operator')?.value].push(\r\n    //                     this.generateExpression(<FormGroup>exp.get('leftComponent'), exp.get('leftComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n    //                 );\r\n    //                 //right\r\n    //                 nestedobj[exp.get('operator')?.value].push(\r\n    //                     this.generateExpression(<FormGroup>exp.get('rightComponent'), exp.get('rightComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n    //                 );\r\n    //                 this.JsonLogicObj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(nestedobj);\r\n\r\n    //               }\r\n    //             else {\r\n    //                 let obj :any= {};\r\n    //                 obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)] = [];\r\n    //                 let nestedobj = {} as any;\r\n    //                 nestedobj[exp.get('operator')?.value] = [];\r\n\r\n    //                 //left\r\n    //                 nestedobj[exp.get('operator')?.value].push(\r\n\r\n    //                     this.generateExpression(<FormGroup>exp.get('leftComponent'), exp.get('leftComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n\r\n    //                 );\r\n\r\n    //                 //right\r\n    //                 nestedobj[exp.get('operator')?.value].push(\r\n    //                     this.generateExpression(<FormGroup>exp.get('rightComponent'), exp.get('rightComponent')?.get('controlType')?.value, exp.get('fieldtype')?.value)\r\n    //                 );\r\n\r\n\r\n    //                 obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(nestedobj);\r\n    //                 obj[this.getLogicalOperatorKey(exp.get('logicalOperator')?.value)].push(this.JsonLogicObj);\r\n    //                 this.JsonLogicObj = { ...obj };\r\n    //             }\r\n    //         }\r\n    //     });\r\n    //     let JSON_lOGIC = JSON.stringify(this.JsonLogicObj);\r\n    //     sessionStorage.setItem('logiccccc', JSON_lOGIC);\r\n    //     return JSON_lOGIC;\r\n    // }\r\n    generateExpression(group: FormGroup, controlType: string, fieldtype: string) {\r\n        if (controlType == \"function\") {\r\n            let nestedObj = {} as any;\r\n            nestedObj[group.get('value')?.value] = [];\r\n            let params = group.get('parameters') as FormArray;\r\n            params.controls.forEach(g => {\r\n               if(g.get('controlType')?.value==null)\r\n               {\r\n                 nestedObj[group.get('value')?.value].push(null);\r\n               }\r\n              else\r\n             {\r\n                let nested = this.generateExpression(g as FormGroup, g.get('controlType')?.value, g.get('type')?.value);\r\n                nestedObj[group.get('value')?.value].push(nested);\r\n              }\r\n\r\n            });\r\n            return nestedObj;\r\n        }\r\n        if (controlType == \"variable\") {\r\n            return { 'var': group.get('value')?.value };\r\n        }\r\n        if (controlType == \"value\") {\r\n            if (fieldtype == \"date\") {\r\n                let date = new Date(group.get('value')?.value).toISOString();\r\n                return date.split('T')[0];\r\n            }\r\n            else {\r\n                return group.get('value')?.value;\r\n            }\r\n        }\r\n    }\r\n    getLogicalOperatorKey(lo:any) {\r\n        if (lo == null || lo == 1) {\r\n            return \"and\";\r\n        }\r\n        if (lo == 0) {\r\n            return \"or\";\r\n        }\r\n        return lo;\r\n    }\r\n    getLogicalOperatorValue(key:any) {\r\n        if (key == \"and\") { return 1 }\r\n        else { return 0; }\r\n    }\r\n    IsISODate(date: string) {\r\n        let regex = new RegExp('^\\d{4}-([0]\\d|1[0-2]){1,2}-([0-2]\\d|3[01])$');\r\n        return regex.test(date);\r\n    }\r\n    getFormGroup(group :any)\r\n    {\r\n        return group as FormGroup;\r\n    }\r\n    consolelogic()\r\n    {\r\n      console.log(this.getJsonLogic());\r\n    }\r\n    checkerror(control:any)\r\n    {\r\n      if(control.touched && control.errors!=null)\r\n      {\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n\r\n}\r\n","<div class=\"col-md-12\">\r\n    <!-- <div class=\"row\">\r\n        <div class=\"col-md-1\">&nbsp;</div>\r\n        <div class=\"col-md-1 text-center\">And/Or</div>\r\n        <div class=\"col-md-4 text-center\">Field *</div>\r\n        <div class=\"col-md-1 text-center\">Operator *</div>\r\n        <div class=\"col-md-5 text-center\">Value *</div>\r\n    </div> -->\r\n    <div class=\"formMargin\" *ngFor=\"let group of expressionformArray['controls'];let i=index\">\r\n        <div [formGroup]=\"this.getFormGroup(group)\">\r\n            <div class=\"row toprow\">\r\n              <div class=\"col-md-4 noPadding text-center logicaloperator\">\r\n                <div class=\"labelAdd\">\r\n                  <img [src]=\"plus\" class=\"imgbtn imgadd\" (click)=\"addCheckExpression(i)\"/> <span style=\"font-size: 20px;\">And/Or</span>\r\n                </div>\r\n                <div *ngIf=\"i!=0\">\r\n                  <ng-select class=\"form-controls\" [id]=\"'logicaloperator'+i\" [items]=\"logicalOperatorList\"\r\n                      ngDefaultControl bindLabel=\"label\" [clearable]=\"false\" bindValue=\"value\"\r\n                      placeholder=\"And/Or\" formControlName=\"logicalOperator\">\r\n                  </ng-select>\r\n              </div>\r\n\r\n            </div>\r\n\r\n            <div class=\"col-md-4 tw0select\">\r\n                <!-- <div *ngIf=\"i==0\">&nbsp;</div> -->\r\n\r\n                <ng-select [ngClass]=\"{errorborder: this.checkerror(group.get('operator'))}\" (open)=\"filterOperatorList(i)\" class=\"form-controls\" [id]=\"'operator'+i\"\r\n                [items]=\"filtered_operatorList\" bindLabel=\"label\" [clearable]=\"false\" bindValue=\"value\"\r\n                placeholder=\"operator\" formControlName=\"operator\">\r\n            </ng-select>\r\n            </div>\r\n            <div class=\"col-md-4\" >\r\n\r\n\r\n              <div class=\"labelRemove\" *ngIf=\"expressionformArray['length']>1\">\r\n                <img [src]=\"minus\" class=\"imgbtn imgminus\" (click)=\"removecheckExpresssion(i,group)\"/>\r\n        </div>\r\n          </div>\r\n\r\n            </div>\r\n            <div class=\"row bottomrow\">\r\n\r\n\r\n                <div class=\"col-md-6\" [ngClass]=\"{'tablescroll': group?.get('leftComponent')?.get('parameters')?.value?.length>0}\"  *ngIf=\"group?.get('leftComponent')!=undefined\">\r\n                  <table style=\"width: 100%; overflow:scroll;\">\r\n                    <app-jsonlogic  [componentLocation]=\"'left'\" [fieldsList]=\"variables\"\r\n                        [form]=\"this.getFormGroup(group.get('leftComponent'))\">\r\n                    </app-jsonlogic>\r\n                  </table>\r\n                </div>\r\n\r\n\r\n                <div class=\"col-md-6\" [ngClass]=\"{'tablescroll': group?.get('rightComponent')?.get('parameters')?.value?.length>0}\"  *ngIf=\"group.get('fieldtype')?.value!=null && group?.get('rightComponent')!=undefined \">\r\n                   <table style=\"width: 100%; overflow:scroll;\">\r\n                    <app-jsonlogic #jsoneditor [componentLocation]=\"'right'\" [fieldsList]=\"variables\"\r\n                        [form]=\"this.getFormGroup(group.get('rightComponent'))\">\r\n                    </app-jsonlogic>\r\n                  </table>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { BsDatepickerConfig, BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { JsonlogicExpressionEditorComponent } from './jsonlogic-expression-editor.component';\nimport { JsonlogicComponent } from './jsonlogic/jsonlogic.component';\n\n\n\n@NgModule({\n  declarations: [\n    JsonlogicExpressionEditorComponent,\n    JsonlogicComponent,\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    BsDatepickerModule.forRoot(),\n    FormsModule,\n    NgSelectModule\n  ],\n  exports: [\n    JsonlogicExpressionEditorComponent\n  ],\n  providers:[BsDatepickerConfig]\n})\nexport class JsonLogicEditorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i4.JsonlogicComponent"],"mappings":"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"}