Thursday 22 October 2020

Create string out of multi dimensional children array with group nodes

I have this deeply nested array with group of node which i want to create query string something like

(FULL_NAME="x" AND NOT(AGE="30" OR AGE="40" AND (ADDRESS="y" AND STREET="z" AND NOT(USER="admin" OR USER="super admin"))) AND TITLE="Developer")

The json data i have is,

  • list of nodes to receive user input
  • operator to handle multiple node joining
  • if user selects to NOT, the main container which contains it will not have the nodes so it will look like this NOT (X="y" AND Y="x")
  • The first vertical operators are joiner of children and if we choose to have NOT operator, this container becomes a group and will have another container inside it having AND or OR
  • user can choose between NOT, AND, OR but cannot have same operator if they tries to group them which only applicable if it was NOT operator.

My array looks like:

[
   {
      "uuid":"b7f0ddf4-0290-4c7e-bb59-771aa46bc850",
      "operator":"AND",
      "isMain":true,
      "nodes":[
         {
            "values":{
               "fieldValue":{
                  "FieldName":"ORIGINAL_FILE_NAME",
               },
               "operator":"=",
               "primaryOperandValue":"new"
            },
            "uuid":"779fb920-eb7f-4441-9b5a-886c7a41e271"
         }
      ],
      "children":[
         {
            "uuid":"7467b8c9-212e-41b8-ac02-04296b95c88c",
            "operator":"NOT",
            "nodes":[],
            "children":[
               {
                  "operator":"AND",
                  "uuid":"eaad7c96-0e8f-466b-a255-1075a8e68647",
                  "nodes":[
                     {
                        "uuid":"f6057d1b-56d7-4ee6-ac5b-332fbd180fd4",
                        "values":{
                           "fieldValue":{
                              "FieldName":"CONTROL_NUMBER",
                           },
                           "operator":"BETWEEN",
                           "primaryOperandValue":"x",
                           "secondaryOperandValue":"y"
                        }
                     }
                  ],
                  "children":[
                     {
                        "uuid":"95fd2b08-cc49-498a-bd9f-c50dc55bc39f",
                        "operator":"NOT",
                        "nodes":[],
                        "children":[
                           {
                              "uuid":"7637ecc1-28b4-47d7-a602-cd172fb5e269",
                              "operator":"OR",
                              "nodes":[
                                 {
                                    "uuid":"0598a915-5818-4c6e-a3d5-6724f893871a",
                                    "values":{
                                       "fieldValue":{
                                          "FieldName":"CONTROL_NUMBER",
                                       },
                                       "operator":" > ",
                                       "primaryOperandValue":"30",
                                       "secondaryOperandValue":null
                                    }
                                 }
                              ],
                              "children":[]
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "uuid":"78218b5b-b18b-4418-beed-b3418361785f",
            "operator":"OR",
            "nodes":[
               {
                  "uuid":"ec956407-4fc6-46df-baa7-d2233711dc20",
                  "values":{
                     "fieldValue":{
                        "FieldName":"EMAIL_ANY_ADDRESS",
                     },
                     "operator":"ENDS_WITH",
                     "primaryOperandValue":"log",
                     "secondaryOperandValue":null
                  }
               },
               {
                  "values":{
                     "fieldValue":{
                        "FieldName":"EMAIL_ANY_ADDRESS",
                     },
                     "operator":"BEGINS_WITH",
                     "primaryOperandValue":"log",
                     "secondaryOperandValue":null
                  },
                  "uuid":"6724e913-6e98-47b6-b6af-972a20f0173d"
               }
            ],
            "children":[
               
            ]
         }
      ]
   }
]

which looks like this in the UI ui-preview

I've tried several ways to generate string out of it but I am having trouble with grouping deeply nested nodes.

Thanks.



from Create string out of multi dimensional children array with group nodes

No comments:

Post a Comment