Skip to content

Implement updates tracking OWID grapher#6

Open
xrendan wants to merge 1209 commits into
BuildCanada:masterfrom
owid:master
Open

Implement updates tracking OWID grapher#6
xrendan wants to merge 1209 commits into
BuildCanada:masterfrom
owid:master

Conversation

@xrendan
Copy link
Copy Markdown
Member

@xrendan xrendan commented Feb 26, 2026

Context

Links to issues, Figma, Slack, and a technical introduction to the work.

Screenshots / Videos / Diagrams

Add if relevant, i.e. might not be necessary when there are no UI changes.

Testing guidance

Step-by-step instructions on how to test this change

  • Does the change work in the archive?
  • Does the staging experience have sign-off from product stakeholders?

Reminder to annotate the PR diff with design notes, alternatives you considered, and any other helpful context.

Checklist

(delete all that do not apply)

Before merging

  • Google Analytics events were adapted to fit the changes in this PR
  • Changes to CSS/HTML were checked on Desktop and Mobile Safari at all three breakpoints
  • Changes to HTML were checked for accessibility concerns

If DB migrations exists:

  • If columns have been added/deleted, all necessary views were recreated
  • The DB type definitions have been updated
  • The DB types in the ETL have been updated
  • If tables/views were added/removed, the Datasette export has been updated to take this into account
  • Update the documentation in db/docs

After merging

  • If a table was touched that is synced to R2, the sync script to update R2 has been run

sophiamersmann and others added 29 commits April 23, 2026 14:40
Deduplicate GDoc slugs before triggering Buildkite lightning builds and
before validating targeted bakes. Add a regression test for duplicate
lightning deploy slugs.
✨ reverse order of entities in the No data section
- Show fallback image only when JS is disabled
- Otherwise, render Grapher, which has its own loading indicator

This should improve the UX especially on data pages, where the image
previously flashed for a brief moment before the Grapher started
loading.
Keep inactive key insight slides measurable instead of hiding them with
`display: none`, preventing cached interactive charts from briefly
rendering titles at zero width when switching slides.
They run them too often, prolonging the feedback loop.
🔨 clarify split between interactive/static captioned chart
🐛 Admin origin URL autocomplete: treat spaces as dashes
Nested DoDs should still work.

Fixes #5917
- Use react-query to fetch the multi-dim config
- Defer loading the config until the embed scrolls near the viewport,
  similar to `GrapherWithFallback`
- Show a fallback image when JS is disabled
- Log multi-dim analytics event only when the multi-dim becomes visible,
  similar to `Grapher`
- Introduce a single site-wide `QueryClient `and a
  `SiteQueryClientProvider`

Fixes #6353
MultiEmbedder is no longer used for multi-dims.
- Remove unused ref
- Derive currentSlide from currentIndex
- Simplify JSX className syntax
Even if the user doesn't specify it manually, we hide the
controls (dropdowns of explorers and multi-dims) since they compete with
ChartStory's own controls (arrows).
- Use a shared article chart frame for Graphers, Explorers, and
  multi-dims.
- Let multi-dims fill their parent while the frame owns embed sizing.
  This fixes a bug where multi-dims could have extreme height in a
  ChartStory.
- Adjust public iframe snippets so visible multi-dim and Explorer
  controls still leave about 600px for the Grapher.
Addresses review feedback on #6330 — switches the LTP/article
padding-top rule to the nested-class syntax used elsewhere
in the codebase instead of the parent-selector `&`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
✨🤖 add dividers and spacing around AllCharts on LTPs and articles
mlbrgl and others added 30 commits May 22, 2026 15:04
Rename `getAndLoadPublishedDataInsightsPage` to
`getAndLoadLastPublishedDataInsights` and hardcode the limit. The atom
feed and `GdocDataInsight.getPublishedDataInsights` only ever needed the
most recent insights, never a page offset. Removes the now-unused
`LATEST_INDEX_PAGE_SIZE` constant and its export.
Drop a few comments that restate what the code already shows, and shorten
the `isChronologicalGdocInstance` doc to a single sentence. Add a brief
cross-reference from `checkIsChronologicalGdoc` to its class-narrowing
counterpart.
The /atom.xml ?type= param now accepts LatestType slugs (article,
data-insight, data-update, website-upgrade, announcement) and filters
Algolia on the indexed latestType facet — matching the /latest UI and
letting subscribers narrow to announcement subtypes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Match the ~-separated set encoding used by /search and /latest so the
atom feed's ?topics= and ?type= params stay coherent across surfaces.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the hand-rolled content type dropdown with react-aria-components'
Select / ListBox / Popover. The trigger's active styling is now driven
by `data-pressed` (set while the popover is open) instead of by the
current selection.
Use react-aria ToggleButtonGroup for topic pills (keyboard nav, focus
ring) and Select for the type dropdown. Give the "All" pill and "All"
type option specific aria-labels ("All topics" / "All types") while
keeping the visible "All" text. Reset the negative right offset on the
scroll arrow under sm-only since the type dropdown isn't a sibling on
mobile.
LatestTopicFacets isn't memoized and the handlers aren't used in any
deps array, so useCallback was purely ceremony.
Bumps the newsletter email input to 16px at the sm breakpoint, matching the
existing sm-only convention used on the not-found page form.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-with-algolia-spa-search

🎉🤖 Revamp Latest page with Algolia-powered SPA search
…est-page-with-algolia-spa-search"

This reverts commit f4fe2b0, reversing
changes made to 08d9c2e.
…test-page-with-algolia-spa-search"

This reverts commit 90752a5.
Records were carrying imageMetadata for every linked image on the gdoc
(full body, FAQs, refs, linkedDocument thumbnails, author avatars), and
topic-page records were getting imageMetadata too even though /latest
filters them out. Five records exceeded Algolia's 20 KB hard limit.

Now each variant ships only the images its /latest card actually
renders. imageMetadata moves off the base record onto the renderable
variant payloads (DataInsight, Article, Announcement) via a reusable
ImageAttachmentShape — topic-page payloads can't carry it by
construction. A new copyImageMetadataIfPresent helper mirrors
copyAttachmentsIfPresent and gates assignment on non-empty.

extractFilenamesFromBlocks added in gdocUtils to walk an array of
enriched blocks and dedupe filenames.

Result on the pages-chronological index (1086 records): max
33.97 KB → 8.82 KB, p99 16.37 KB → 7.26 KB, 5 over-limit records → 0.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Display formatted author names below the title on both the gdocs
LatestDataInsights carousel cards and the /latest LatestDataInsightHit
list items.
Reapply "Merge pull request #6259 from owid/auto-claude/001-revamp-latest-page-with-algolia-spa-search"
Bumps [qs](https://github.com/ljharb/qs) from 6.15.0 to 6.15.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](ljharb/qs@v6.15.0...v6.15.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.15.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…fore_last_image_using_css_order

🐛 Move announcement byline before last image using CSS order
Title-cased "Data Update" / "Website Upgrade" violated the OWID style
guide; switched to sentence case so the filter dropdown reads "Data
updates" / "Website upgrades". "Data Insights" kept title-cased as a
product name. Other render sites wrap the kicker in .h6-black-caps
(uppercase via CSS), so visible kicker text is unchanged.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: update project to node 24

* chore: use node-builtin `glob`
Signed-off-by: dependabot[bot] <support@github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants