From d2b5f3eb34bd5ac8bcd4dee1afc2dd9f88f21714 Mon Sep 17 00:00:00 2001 From: Ophir Lojkine Date: Sun, 23 Aug 2026 14:30:29 +0000 Subject: [PATCH] fix(datagrid): distinguish missing and empty descriptions --- CHANGELOG.md | 1 + docs/screenshots/datagrid-issue-1384-after.png | Bin 0 -> 28326 bytes docs/screenshots/datagrid-issue-1384-before.png | Bin 0 -> 28372 bytes sqlpage/templates/datagrid.handlebars | 3 +++ tests/components/datagrid_icon_only.sql | 4 ++++ tests/core/mod.rs | 14 ++++++++++++++ 6 files changed, 22 insertions(+) create mode 100644 docs/screenshots/datagrid-issue-1384-after.png create mode 100644 docs/screenshots/datagrid-issue-1384-before.png create mode 100644 tests/components/datagrid_icon_only.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 285550f56..dbbc951e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - `stacked` is now ignored on chart types that cannot stack, instead of displaying an empty chart. - Screen readers now announce the title of the modal component instead of an unnamed dialog. - `sqlpage.request_body` and `sqlpage.request_body_base64` now return NULL when the request has no body. A body that cannot be read, such as one exceeding the payload limit, is now reported as an error instead of being silently replaced with an empty body. + - Datagrid rows with an icon or image no longer display an unnecessary en-dash placeholder, and an explicitly empty description remains empty. - Charts can display reference lines. A row with a `yline` is drawn as a line across the chart at that value of the y axis, with the row's `label` and `color` for its text and its color. Reference lines are rows, so a chart can have as many of them as the query returns. A line follows its axis, so on a `horizontal` bar chart a `yline` is drawn down the chart rather than across it. They are not added to the total of a `stacked` chart, and are not filled in an `area` chart. ## v0.45 diff --git a/docs/screenshots/datagrid-issue-1384-after.png b/docs/screenshots/datagrid-issue-1384-after.png new file mode 100644 index 0000000000000000000000000000000000000000..1c870eb05d89ec9335caff4b55baad9f9d025046 GIT binary patch literal 28326 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 R*F})V=grO)p1F4Se*hv}(VYMQ literal 0 HcmV?d00001 diff --git a/sqlpage/templates/datagrid.handlebars b/sqlpage/templates/datagrid.handlebars index 65e9489d6..ef85a0e46 100644 --- a/sqlpage/templates/datagrid.handlebars +++ b/sqlpage/templates/datagrid.handlebars @@ -42,6 +42,9 @@ {{/if}} {{#if description}} {{description}} + {{else if (eq description "")}} + {{else if icon}} + {{else if image_url}} {{else}} – {{/if}} diff --git a/tests/components/datagrid_icon_only.sql b/tests/components/datagrid_icon_only.sql new file mode 100644 index 000000000..bad2e4e1c --- /dev/null +++ b/tests/components/datagrid_icon_only.sql @@ -0,0 +1,4 @@ +SELECT 'datagrid' AS component; +SELECT 'Facebook' AS title, 'brand-facebook' AS icon; +SELECT 'Empty' AS title, '' AS description; +SELECT 'Missing' AS title; diff --git a/tests/core/mod.rs b/tests/core/mod.rs index 75e9c849d..1845400ef 100644 --- a/tests/core/mod.rs +++ b/tests/core/mod.rs @@ -40,6 +40,20 @@ async fn test_concurrent_requests() { } } +#[actix_web::test] +async fn test_datagrid_description_presence_controls_placeholder() { + let resp = req_path("/tests/components/datagrid_icon_only.sql") + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::OK); + let body = String::from_utf8(test::read_body(resp).await.to_vec()).unwrap(); + assert!(body.contains("Facebook"), "{body}"); + assert!(body.contains("Empty"), "{body}"); + assert!(body.contains("Missing"), "{body}"); + assert!(body.contains("