Есть задача сделать конструктор условий на фронте. К пример есть такое условие "if((action == true || action == true && val == 5) || (action == true && $val != 7) )" нужно иметь возможность повторить на фронтенде.
Как нужно сделать.
При загрузке появляется форма которая разделеана на два блока
1й блок "Условия"
1. Кнопка создать форму
2. Если это первый елемент на своем уровне то пусто в ином случае селектор с && и || ("level_condition")
3. Селектор который будет выбирать поле из доступных которые находятся в массиве title и name ("field_name")
[
{"name": "some_name", "title": "Some Name", "type": "select", "select_data": [{"name": 12, "value": 12}, {"name": 14, "value": 14}]},
{"name": "some_name_1", "title": "Some Name 1", "type": "boolean", "value": false},
{"name": "some_name_2", "title": "Some Name 2", "type": "integer", "value": 5},
{"name": "some_name_3", "title": "Some Name 3", "type": "string", "value": "string text"}
]4. Селектор с логическими операциями != == и т.п. ("operation")
5. Поле для указания значения вручную или же если это boolean select то указывать значения из массива в пункте 3. ("value")
6. Кнопка добавить саблевел который имеет такую же логику как и блок выше.
7. Кнопка удаления(если удаляется родитель то и все что ниже затирается)
Таким образом мы сможем повторить логику с бесконечной вложеностью.
2й блок "Действия"
Селектор с выборов "", "Ошибка", "Действие".
После выбора "Ошибка" появляется текс ариа для ввода текста
После выбора "Действие" появляется селектор как в пункте 3 c возможностью добаления новых(здесь без уровня) и кнопка удаления.
Кнопка сохранения.
В форме нужно правильно сделать вложеность. Ожидается что при отправке на сохранение структура ответа будет такой. Если выбрать на 1м уровне 2 условия. В 1м условии выбрать 1 саб уровень и т. д.
conditions[0][level_condition] = ""
conditions[0][field_name]
conditions[0][operation]
conditions[0][value]
conditions[0][0][level_condition] = ""
conditions[0][0][field_name]
conditions[0][0][operation]
conditions[0][0][value]
conditions[0][1][level_condition] = "||"
conditions[0][1][field_name]
conditions[0][1][operation]
conditions[0][1][value]
conditions[1][level_condition]= "&&"
conditions[1][field_name]
conditions[1][operation]
conditions[1][value]
action_selector[error] = текст ошибки
action_selector[0][action][field_name]= поле которое выбрали
action_selector[0][action][value] = значнеие для поля которое выбрали
Картинка с примером общей концепции только есть лишние кнопки