|
@@ -1,57 +1,63 @@
|
|
|
SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/theme.sql') AS properties;
|
|
|
SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/Style.sql') AS properties;
|
|
|
-SET filter_config = '[
|
|
|
- {"name": "type", "type": "select"},
|
|
|
+SET ":filter_config" = '[
|
|
|
+ {"name": "type", "label": "Type", "type": "select"},
|
|
|
{"name": "expired", "label": "Show Expired",
|
|
|
"type": "checkbox", "value": "true"
|
|
|
},
|
|
|
{"name": "used", "label": "Show Used"}
|
|
|
]';
|
|
|
+SET ":filter_options" = (SELECT group_concat(v) FROM (
|
|
|
+ SELECT DISTINCT 'store' AS ka, store AS v FROM code_detail
|
|
|
+ UNION
|
|
|
+ SELECT DISTINCT 'type' AS ka, type AS v FROM code_detail
|
|
|
+ ) q);
|
|
|
+SELECT 'debug' aS component; SELECT :filter_options AS options;
|
|
|
SET filter_options = (
|
|
|
- SELECT json_agg(json_build_object('name', k, 'options', o))
|
|
|
+ SELECT json_group_array(json_object('name', q.k, 'options', q.o))
|
|
|
FROM (
|
|
|
- SELECT o.k, json_agg(
|
|
|
- json_build_object('label', v, 'value', v, 'selected', c == 1)
|
|
|
- ORDER BY v)
|
|
|
+ SELECT options.k, json_group_array(
|
|
|
+ json_object('label', v, 'value', v, 'selected', c == 1)
|
|
|
+ ORDER BY v) o
|
|
|
FROM (
|
|
|
- SELECT 'store' AS k, DISTINCT store AS v, count(DISTINCT store) AS c FROM code_detail
|
|
|
+ SELECT DISTINCT 'store' k, store v, count(store) OVER () c FROM code_detail
|
|
|
UNION
|
|
|
- SELECT 'type' AS k, DISTINCT type AS v, count(DISTINCT type) AS c FROM code_detail
|
|
|
- ) AS o
|
|
|
+ SELECT DISTINCT 'type' k, type v, count(type) OVER () c FROM code_detail
|
|
|
+ ) options
|
|
|
WHERE v IS NOT NULL
|
|
|
- GROUP BY o.k
|
|
|
- ) q(k, o)
|
|
|
+ GROUP BY options.k
|
|
|
+ ) q
|
|
|
);
|
|
|
SELECT 'form' AS component
|
|
|
, '/code.sql' AS action
|
|
|
-, 'Update' AS validate
|
|
|
+, 'Apply' AS validate
|
|
|
, $tabler_color AS validate_color
|
|
|
, 'get' AS method
|
|
|
;
|
|
|
-SELECT j.name
|
|
|
+SELECT j.v->>'name' AS name
|
|
|
|
|
|
-, j.label
|
|
|
-, COALESCE(c.type, j.type) AS type
|
|
|
-, j.dropdown AS dropdown
|
|
|
-, j.multiple
|
|
|
-, COALESCE(c.width, j.width) AS width
|
|
|
-, o.j
|
|
|
-, COALESCE(j.value, v.value) AS value
|
|
|
-, CASE j.type
|
|
|
+, COALESCE(c.v->>'label', j.v->>'label') AS label
|
|
|
+, COALESCE(c.v->>'type', j.v->>'type') AS type
|
|
|
+, j.v->>'dropdown' AS dropdown
|
|
|
+, j.v->>'multiple' AS multiple
|
|
|
+, COALESCE(c.v->>'width', j.v->>'width') AS width
|
|
|
+, o.j->'options' AS options
|
|
|
+, COALESCE(j.v->>'value', v.value) AS value
|
|
|
+, CASE j.v->>'type'
|
|
|
WHEN 'checkbox' THEN v.value::bool
|
|
|
ELSE NULL
|
|
|
END AS checked
|
|
|
-, j.formaction
|
|
|
-FROM json_populate_recordset(null::sqlpage_filter_type, sqlpage.read_file_as_text('code/json/filters.json')::json) j
|
|
|
-LEFT JOIN json_populate_recordset(null::sqlpage_filter_type, $filter_config::json) c
|
|
|
-USING (name)
|
|
|
-LEFT JOIN json_array_elements($filter_options::json) o(j)
|
|
|
-ON (o.j
|
|
|
-LEFT JOIN json_each_text(sqlpage.variables()::json) v(key, value)
|
|
|
-ON v.key = j.name
|
|
|
+, j.v->>'formaction'
|
|
|
+FROM (SELECT value v FROM json_each(sqlpage.read_file_as_text('code/json/filters.json'))) j
|
|
|
+LEFT JOIN (SELECT value v FROM json_each($filter_config)) c
|
|
|
+ON (j.v->>'name' == c.v->>'name')
|
|
|
+LEFT JOIN (SELECT value j FROM json_each($filter_options::json)) o
|
|
|
+ON (o.j->>'name') = j.v->>'name'
|
|
|
+LEFT JOIN json_each(sqlpage.variables()::json) v
|
|
|
+ON v.key = j.v->>'name'
|
|
|
;
|
|
|
SELECT 'table' AS component;
|
|
|
-SELECT hash, content, created
|
|
|
+SELECT c.hash, content, created
|
|
|
FROM code c
|
|
|
LEFT JOIN code_detail cd
|
|
|
ON c.hash = cd.hash
|
|
@@ -65,5 +71,5 @@ WHERE (
|
|
|
ELSE COALESCE($type, '') = cd.type
|
|
|
END
|
|
|
)
|
|
|
-ORDER BY expiry, type, hash NULLS FIRST
|
|
|
+ORDER BY expiry, type, c.hash NULLS FIRST
|
|
|
;
|