From fa4f191552be80cfd542601bdff0e2a9f7e79525 Mon Sep 17 00:00:00 2001 From: Matej Date: Tue, 10 Dec 2024 12:48:46 +0100 Subject: [PATCH] Add JSON query building from form with Examples #12 --- WebApp/GeneratedFormExamples/Example1.json | 47 ++++++++++ WebApp/GeneratedFormExamples/Example1.png | Bin 0 -> 64709 bytes WebApp/GeneratedFormExamples/Example2.json | 85 +++++++++++++++++ WebApp/dynamic_form.html | 5 +- WebApp/scripts/JSONExtraction.js | 102 +++++++++++++++++++++ WebApp/scripts/dynamic_form_render.js | 2 +- 6 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 WebApp/GeneratedFormExamples/Example1.json create mode 100644 WebApp/GeneratedFormExamples/Example1.png create mode 100644 WebApp/GeneratedFormExamples/Example2.json create mode 100644 WebApp/scripts/JSONExtraction.js diff --git a/WebApp/GeneratedFormExamples/Example1.json b/WebApp/GeneratedFormExamples/Example1.json new file mode 100644 index 0000000..355f9e8 --- /dev/null +++ b/WebApp/GeneratedFormExamples/Example1.json @@ -0,0 +1,47 @@ +{ + "targetDatabases": [ + "d1", + "d2" + ], + "description": "desc1", + "steps": [ + { + "goal": "s1", + "columns": [ + "s1col1", + "s1col2" + ], + "aggregation": { + "groupBy": [ + "s1gb1", + "s1gb2" + ], + "orderBy": [ + { + "column": "s1ob1", + "direction": "DESC" + }, + { + "column": "s1ob2", + "direction": "ASC" + } + ] + }, + "filtering": { + "conditions": [ + { + "column": "s1ccol1", + "operator": "=", + "value": "s1cval1" + }, + { + "column": "s1ccol2", + "operator": "=", + "value": "s1cval2" + } + ] + }, + "limit": 1 + } + ] +} diff --git a/WebApp/GeneratedFormExamples/Example1.png b/WebApp/GeneratedFormExamples/Example1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e441ad00714cbabef53cbc76361f11f0e7f07c0 GIT binary patch literal 64709 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 trNjQskoaFAkbhDynamic JSON Query Form
- + + + + diff --git a/WebApp/scripts/JSONExtraction.js b/WebApp/scripts/JSONExtraction.js new file mode 100644 index 0000000..b277f99 --- /dev/null +++ b/WebApp/scripts/JSONExtraction.js @@ -0,0 +1,102 @@ +function collectFromForm() { + // Go throught the structure of the document and extract filled information from form + // Also filters out from the final query fields that are present in the form + // i.e the HTML code is generated, but input fields are empty. + + // Get target databases + + const targetDatabaseFields = document.querySelectorAll('.targetDatabase .repeatable-container .repeatable-row input[type="text"]'); + const targetDatabases = Array.from(targetDatabaseFields) + .map(input => input.value.trim()) + .filter(val => val !== ''); + + + // Get Description + const descriptionField = document.getElementById('description'); + const description = descriptionField ? descriptionField.value.trim() : ''; + + // Get steps + const stepsRows = document.querySelectorAll('.steps .repeatable-container > .repeatable-row'); + const steps = Array.from(stepsRows).map(stepRow => { + + // Get the goal of the step + const goalField = stepRow.querySelector('[class^="goal_steps_"] input'); + const stepGoal = goalField ? goalField.value.trim() : ''; + + // Columns + const columnsContainer = stepRow.querySelector('[class^="columns_steps_"] .repeatable-container'); + const columnFields = columnsContainer ? columnsContainer.querySelectorAll('.repeatable-row input[type="text"]') : []; + const columns = Array.from(columnFields) + .map(cf => cf.value.trim()) + .filter(val => val !== ''); + + // Get group-by's columns + const groupByContainer = stepRow.querySelector('[class^="aggregation_steps_"] .group-by .repeatable-container'); + const groupByFields = groupByContainer ? groupByContainer.querySelectorAll('.repeatable-row input[type="text"]') : []; + const groupBy = Array.from(groupByFields) + .map(groupByField => groupByField.value.trim()) + .filter(val => val !== ''); + + // Get order-by's objects + const orderByContainer = stepRow.querySelector('[class^="aggregation_steps_"] .order-by .repeatable-container'); + const orderByRows = orderByContainer ? orderByContainer.querySelectorAll('.repeatable-row') : []; + const orderByObjects = Array.from(orderByRows).map(row => { + const columnField = row.querySelector('input[type="text"]'); + const directionField = row.querySelector('select'); + const column = columnField ? columnField.value.trim() : ''; + const direction = directionField ? directionField.value.trim() : ''; + return (column && direction) ? {column, direction} : null; + }).filter(object => object !== null); + + // Get Conditions + const conditionsContainer = stepRow.querySelector('[class^="filtering_steps_"] .conditions .repeatable-container'); + const conditionsRows = conditionsContainer ? conditionsContainer.querySelectorAll('.repeatable-row') : []; + const conditionsObjects = Array.from(conditionsRows).map(row => { + const textFields = row.querySelectorAll('input[type="text"]'); + const condColumnField = textFields [0] || null; + const valueField = textFields [1] || null; + const operatorField = row.querySelector('select'); + + const column = condColumnField ? condColumnField.value.trim() : ''; + const operator = operatorField ? operatorField.value.trim() : ''; + const value = valueField ? valueField.value.trim(): ''; + + return (column && operator && value) ? { column, operator, value } : null; + }).filter(condition => condition !== null); + + // Get limit + const limitField = stepRow.querySelector('[class^="limit_steps_"] input[type="number"]'); + const limitVal = limitField && limitField.value !== '' ? parseInt(limitField.value, 10): undefined; + const limit = isNaN(limitVal) ? undefined : limitVal; + + // Finally build the entire step + const stepObject = { + goal: stepGoal, + columns: columns, + aggregation: { + groupBy: groupBy, + orderBy: orderByObjects + }, + filtering: { + conditions: conditionsObjects + }, + limit: limit + }; + + // Get rid of empty steps (these are for some unknown (yet) reason generated alongside + // valid steps) + const isEmptyStep = !stepGoal && columns.length === 0 && groupBy.length === 0 && + orderByObjects.length === 0 && conditionsObjects.length === 0 && + typeof limit === 'undefined'; + + return isEmptyStep ? null : stepObject; + }).filter(stepObject => stepObject !== null); + + const queryObject = { + targetDatabases, + description, + steps + }; + + return queryObject; +} diff --git a/WebApp/scripts/dynamic_form_render.js b/WebApp/scripts/dynamic_form_render.js index 5aa1389..476d556 100644 --- a/WebApp/scripts/dynamic_form_render.js +++ b/WebApp/scripts/dynamic_form_render.js @@ -49,7 +49,7 @@ function renderForm(schema) { generateQueryButton.textContent = "Generate JSON"; generateQueryButton.type="button"; generateQueryButton.onclick = () => { - const query = generateQueryFromForm(schema); + const query = collectFromForm(); console.log("Generated Query:", JSON.stringify(query, null, 2)); };