Как я могу создать дерево из строки запроса в response-awesome-query-builder - PullRequest
0 голосов
/ 31 марта 2020

У меня есть строка запроса, которую я хочу использовать для создания пользовательского интерфейса запроса. Чтобы преобразовать строку в пользовательском интерфейсе, мне нужно преобразовать ее в формат, который можно проанализировать для создания дерева.

const str = (t1.login == LOWER(user.firstName) && 
              stock is false && slider == 1 && 
               (results.product == \"abc\" && results.score > 8))

Если у меня есть строка выше, то как я могу преобразовать ее в формат initValue, чтобы его можно было затем передать в checkTree, который может преобразовать его в дерево и в пользовательский интерфейс? как показано ниже:

    initTree = checkTree(loadTree(initValue), loadedConfig);
    this.setState({ tree: initTree });

Код для генерации значения initValue:

let initValue: JsonTree =
 loadedInitValue && Object.keys(loadedInitValue).length > 0
? (loadedInitValue as JsonTree)
: emptyInitValue;

Где загруженоInitValue ниже json

 export default {
    type: "group",
    id: "9a99988a-0123-4456-b89a-b1607f326fd8",
    children1: {
      "a98ab9b9-cdef-4012-b456-71607f326fd9": {
        type: "rule",
        properties: {
          field: "user.login",
          operator: "equal",
          value: [
            {
              func: "LOWER",
              args: {
                str: {
                  valueSrc: "field",
                  value: "user.firstName"
                }
              }
            }
          ],
          valueSrc: ["func"],
          valueType: ["text"]
        }
      },
      "98a8a9ba-0123-4456-b89a-b16e721c8cd0": {
        type: "rule",
        properties: {
          field: "stock",
          operator: "equal",
          value: [false],
          valueSrc: ["value"],
          valueType: ["boolean"]
        }
      },
      "aabbab8a-cdef-4012-b456-716e85c65e9c": {
        type: "rule",
        properties: {
          field: "slider",
          operator: "equal",
          value: [1],
          valueSrc: ["value"],
          valueType: ["number"]
        }
      },
      "aaab8999-cdef-4012-b456-71702cd50090": {
        type: "rule_group",
        properties: {
          conjunction: "AND",
          field: "results"
        },
        children1: {
          "99b8a8a8-89ab-4cde-b012-31702cd5078b": {
            type: "rule",
            properties: {
              field: "results.product",
              operator: "select_equals",
              value: ["abc"],
              valueSrc: ["value"],
              valueType: ["select"]
            }
          },
          "88b9bb89-4567-489a-bcde-f1702cd53266": {
            type: "rule",
            properties: {
              field: "results.score",
              operator: "greater",
              value: [8],
              valueSrc: ["value"],
              valueType: ["number"]
            }
          }
        }
      }
    },
    properties: {
      conjunction: "AND",
      not: false
    }
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...