Преглед изворни кода

improve filters and card details

Pi пре 4 месеци
родитељ
комит
99f501e5ae

+ 36 - 2
util-sqlpage/code/form-fuel.sql

@@ -1,18 +1,20 @@
 --TODO: show barcode at top
 --SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/QR.sql') AS properties;
 SET ":title" = 'Fuel Voucher';
+SET ":created" = COALESCE(:created, (SELECT created FROM code WHERE hash = $hash));
 SET ":expiry" = COALESCE(:expiry, (SELECT expiry FROM code_detail WHERE hash = $hash));
 SET ":value" = COALESCE(:value, (SELECT value FROM code_detail WHERE hash = $hash));
-SET ":store" = COALESCE(:store, (SELECT store FROM code_detail WHERE hash = $hash));
+SET ":store" = COALESCE(:store, json_array((SELECT store FROM code_detail WHERE hash = $hash)));
 SET ":used" = COALESCE(:used, (SELECT used FROM code_detail WHERE hash = $hash));
 SET ":content" = (SELECT json(content) FROM code WHERE hash = $hash);
 SET ":validate" = 'Update';
 SET "$action" = 'Update';
 SET ":method" = 'post';
+SET ":type" = json_array('Fuel');
 SET ":preview" = (SELECT 'data:image/svg+xml;base64,'||svg FROM code WHERE hash = $hash);
 SET ":autofill" = TRUE;
 SET ":filter_config" = '[
-  {"name": "store", "required": true},
+  {"name": "store[]", "required": true},
   {"name": "value", "required": true},
   {"name": "expiry", "required": true},
     { "name": "used", "label": "Used",
@@ -29,4 +31,36 @@ SET ":inner" = CASE COALESCE(:action, '')
   WHEN 'Update' THEN 'code/update.sql'
   ELSE 'code/form.sql'
 END;
+SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/theme.sql') AS properties
+WHERE COALESCE(:action, '') <> 'Update';
+SELECT 'dynamic' AS component, sqlpage.run_sql('sqlpage/Style.sql') AS properties
+WHERE COALESCE(:action, '') <> 'Update';
+SELECT 'card' AS component, 1 AS columns
+WHERE COALESCE(:action, '') <> 'Update';
+
+SELECT COALESCE($store->>'0'||' ', '') || COALESCE($expiry, $created, '') AS title
+, '
+
+Type: '||COALESCE($type->>'0','')||'
+
+Value: '||COALESCE($value,'')||'
+
+Expires: '||COALESCE($expiry,'')||'
+
+Submitted: '||COALESCE($created,'')||'
+
+
+| Type | Content |
+|:-----|:--------|
+| ' || COALESCE($content->>'format', '') || ' | ' || COALESCE($content->>'content', '') || ' |
+' AS description_md
+, $preview AS top_image
+, $tabler_color AS color
+WHERE COALESCE(:action, '') <> 'Update';
+;
+
 SELECT 'dynamic' AS component, sqlpage.run_sql(:inner) AS properties;
+
+SELECT 'table' AS component;
+SELECT * FROM code_detail
+WHERE hash = $hash;

+ 19 - 32
util-sqlpage/code/form.sql

@@ -1,37 +1,29 @@
-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_options" = (
   SELECT json_group_array(json_object('name', q.k, 'options', q.o))
   FROM (
     SELECT options.k, jsonb_group_array(
-      jsonb_object('label', v, 'value', v, 'selected', CASE $autofill WHEN TRUE THEN c == 1 ELSE FALSE END)
+      jsonb_object('label', v, 'value', v, 'selected', s OR CASE $autofill WHEN TRUE THEN c = 1 ELSE v  END)
       ORDER BY v) o
     FROM (
-      SELECT DISTINCT 'store' k, store v, count(store) OVER () c FROM code_detail
-      UNION
-      SELECT DISTINCT 'type' k, type v, count(type) OVER () c FROM code_detail
-      UNION
-      SELECT DISTINCT 'value' k, value v, count(value) OVER () c FROM code_detail
+      SELECT DISTINCT k, v, s, count(v) OVER (
+        PARTITION BY k ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+      ) c FROM (
+        SELECT 'store'||'[]' k, value v, TRUE s FROM (SELECT value FROM json_each($store))
+        UNION
+        SELECT 'store'||'[]', store, NULL s FROM code_detail
+        UNION
+        SELECT 'type'||'[]' k, value v, TRUE s FROM (SELECT value FROM json_each($type))
+        UNION
+        SELECT 'type'||'[]', type, NULL s FROM code_detail
+        UNION
+        SELECT 'value', value, NULL s FROM code_detail
+      )
     ) options
     WHERE v IS NOT NULL
     GROUP BY options.k
   ) q
 );
 
-SELECT 'card' AS component
-, 1 AS columns
-WHERE COALESCE($hash, '') <> '';
-SELECT COALESCE($hash, '') || COALESCE($type||' ','') || COALESCE($store||' ', '') || COALESCE($expiry, $created, '') AS title
-, '
-| Type | Content |
-|:-----|:--------|
-| ' || COALESCE($content->>'format', '') || ' | ' || COALESCE($content->>'content', '') || ' |
-' AS description_md
-, $preview AS top_image
-, $tabler_color AS color
-WHERE COALESCE($hash, '') <> ''
-;
-
 SELECT 'form' AS component
 , '/code.sql' AS action
 , $validate AS validate
@@ -42,12 +34,13 @@ SELECT COALESCE(c.v->>'name', j.v->>'name') AS name
 --, fo.j#>>'{options}' AS label
 , 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->>'create_new' AS create_new
-, j.v->>'multiple' AS multiple
+, COALESCE(c.v->>'dropdown', j.v->>'dropdown') AS dropdown
+, COALESCE(c.v->>'create_new', j.v->>'create_new') AS create_new
+, COALESCE(c.v->>'multiple', j.v->>'multiple') AS multiple
+, COALESCE(c.v->>'placeholder', j.v->>'placeholder') AS placeholder
 , COALESCE(c.v->>'width', j.v->>'width') AS width
 , o.j->>'options' AS options
-, j.v->>'prefix' AS prefix
+, COALESCE(c.v->>'prefix', j.v->>'prefix') AS prefix
 , COALESCE(c.v->>'value', j.v->>'value', v.v) AS value
 , CASE COALESCE(c.v->>'type', j.v->>'type')
     WHEN 'checkbox' THEN v.v = 'true'
@@ -63,9 +56,3 @@ ON (o.j->>'name') = j.v->>'name'
 LEFT JOIN (SELECT "key" k, value v FROM json_each(sqlpage.variables())) v
 ON v.k = j.v->>'name' OR v.k = c.v->>'name'
 ;
-
-SELECT 'table' AS component
-WHERE COALESCE($hash, '') <> '';
-SELECT * FROM code_detail
-WHERE COALESCE($hash, '') <> ''
-AND hash = $hash;

+ 3 - 3
util-sqlpage/code/json/filters.json

@@ -1,9 +1,9 @@
 [
-    { "name": "type", "label": "",
-      "type": "hidden", "value": "Fuel",
+    { "name": "type[]", "label": "",
+      "type": "hidden",
       "width": 2
     },
-    { "name": "store", "label": "Store",
+    { "name": "store[]", "label": "Store",
       "type": "select", "dropdown": true, "create_new": true,
       "width": 2
     },

+ 13 - 3
util-sqlpage/code/recent.sql

@@ -1,8 +1,18 @@
 
+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": "expiry", "type": "hidden"},
   {"name": "value", "type": "hidden"},
-  {"name": "type", "label": "Type", "type": "select"},
+  {"name": "type[]", "label": "Type",
+   "type": "select", "dropdown": true,
+   "multiple": true,
+   "width": 3
+  },
+  {"name": "store[]", "create_new": false,
+   "multiple": true,
+   "width": 3
+  },
   {"name": "expired", "label": "Show Expired",
    "type": "checkbox", "value": "true",
    "width": 2
@@ -32,12 +42,12 @@ WHERE (
 ) AND (
     CASE COALESCE($type, '')
       WHEN '' THEN TRUE
-      ELSE $type = cd.type
+      ELSE $type IS NULL OR cd.type IN (SELECT value FROM json_each($type))
     END
 ) AND (
     CASE COALESCE($store, '')
       WHEN '' THEN TRUE
-      ELSE $store = cd.store
+      ELSE $store IS NULL OR cd.store IN (SELECT value FROM json_each($store))
     END
 )
 ORDER BY expiry, created DESC, type, c.hash NULLS FIRST

+ 1 - 1
util-sqlpage/code/update.sql

@@ -1,5 +1,5 @@
 INSERT INTO code_detail(hash, type, store, value, expiry, used)
-VALUES ($hash, $type, $store, $value, $expiry, $used)
+VALUES ($hash, $type->>'0', $store->>'0', $value, $expiry, $used)
 ON CONFLICT DO
 UPDATE SET
   type = excluded.type,