Fix ordering of sub entries

This commit is contained in:
Jan Kvetina 2022-01-15 18:00:56 +01:00
parent 4bfcd2ea3e
commit a7420a6ff4

View File

@ -9,41 +9,53 @@ WITH x AS (
), ),
t AS ( t AS (
SELECT SELECT
n.app_id, ROWNUM AS r#, -- to keep hierarchy sorted
n.page_id, t.*
-- FROM (
REPLACE(p.page_name, '&' || 'APP_NAME.', a.application_name) AS page_name, SELECT
REPLACE(p.page_title, '&' || 'APP_NAME.', a.application_name) AS page_title, n.app_id,
-- n.page_id,
p.page_alias, n.order#,
p.page_group, --
p.authorization_scheme, REPLACE(p.page_name, '&' || 'APP_NAME.', a.application_name) AS page_name,
p.page_css_classes, REPLACE(p.page_title, '&' || 'APP_NAME.', a.application_name) AS page_title,
p.page_mode, --
p.page_template, p.page_alias,
-- p.page_group,
LEVEL - 1 AS depth, p.authorization_scheme,
CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root p.page_css_classes,
FROM navigation n p.page_mode,
JOIN apps a p.page_template,
ON a.app_id = n.app_id --
AND a.is_active = 'Y' LEVEL - 1 AS depth,
CROSS JOIN x CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root
LEFT JOIN apex_application_pages p FROM navigation n
ON p.application_id = n.app_id JOIN apps a
AND p.page_id = n.page_id ON a.app_id = n.app_id
LEFT JOIN apex_applications a AND a.is_active = 'Y'
ON a.application_id = p.application_id CROSS JOIN x
CONNECT BY n.parent_id = PRIOR n.page_id LEFT JOIN apex_application_pages p
AND n.app_id = PRIOR n.app_id ON p.application_id = n.app_id
START WITH n.parent_id IS NULL AND p.page_id = n.page_id
LEFT JOIN apex_applications a
ON a.application_id = p.application_id
CONNECT BY n.parent_id = PRIOR n.page_id
AND n.app_id = PRIOR n.app_id
START WITH n.parent_id IS NULL
ORDER SIBLINGS BY n.app_id, n.order#, n.page_id
) t
) )
SELECT SELECT
n.app_id, n.app_id,
n.page_id, n.page_id,
n.parent_id, n.parent_id,
n.order#, n.order#,
t.page_root || ' ' || COALESCE(t.page_group, (SELECT t.page_group FROM t WHERE t.app_id = n.app_id AND t.page_id = n.parent_id)) AS page_group, --
t.page_root || ' ' || COALESCE (
t.page_group,
(SELECT t.page_group FROM t WHERE t.app_id = n.app_id AND t.page_id = n.parent_id)
) AS page_group,
--
t.page_alias, t.page_alias,
-- --
CASE WHEN r.page_id IS NULL CASE WHEN r.page_id IS NULL
@ -77,9 +89,9 @@ SELECT
) )
END AS page_url, END AS page_url,
-- --
'UD' AS allow_changes, -- U = update, D = delete 'UD' AS allow_changes, -- U = update, D = delete
-- --
t.page_root || '.' || t.depth || '.' || NVL(n.order#, n.page_id) AS sort_order, t.page_root || '.' || TO_CHAR(10000 + t.r#) || '.' || NVL(t.order#, t.page_id) AS sort_order,
-- --
CASE CASE
WHEN r.page_id IS NOT NULL WHEN r.page_id IS NOT NULL
@ -97,7 +109,7 @@ JOIN apps a
ON a.app_id = n.app_id ON a.app_id = n.app_id
AND a.is_active = 'Y' AND a.is_active = 'Y'
CROSS JOIN x CROSS JOIN x
LEFT JOIN t LEFT JOIN t ---------- LEFT JOIN ???
ON t.app_id = n.app_id ON t.app_id = n.app_id
AND t.page_id = n.page_id AND t.page_id = n.page_id
LEFT JOIN nav_pages_to_remove r LEFT JOIN nav_pages_to_remove r
@ -147,9 +159,9 @@ SELECT
in_app_id => n.app_id in_app_id => n.app_id
) AS page_url, ) AS page_url,
-- --
NULL AS allow_changes, -- no changes allowed NULL AS allow_changes, -- no changes allowed
-- --
NVL(t.page_root, n.page_id) || '.' || (t.depth + 1) || '.' || NVL(n.order#, n.page_id) AS sort_order, NVL(t.page_root, n.page_id) || '.' || TO_CHAR(10000 + t.r#) || '.' || NVL(n.order#, n.page_id) AS sort_order,
-- --
app.get_icon('fa-plus-square', 'Create record in Navigation table') AS action, app.get_icon('fa-plus-square', 'Create record in Navigation table') AS action,
-- --