Sync upstream Donkie/Spoolman (client_v2 filter menu + translations) - #10
Merged
Conversation
The filament filter listed nothing but a label, which is the manufacturer and the name. That is not enough to pick from: the colour is the thing you actually recognise a filament by, and two filaments may legitimately carry the same name in different materials, leaving the menu offering two entries that read identically. Each option now carries whatever it has beyond its label, so the menu draws a swatch and the material where they exist and stays a plain list of names where they don't (locations, lot numbers). The material sits with the label rather than off at the row's right edge, since it is there to qualify the name it follows. None of it costs a request: the option list is built from whole filaments already fetched. The search box narrows on the material too. It is on screen, so a query that visibly matches a row has to keep it — and since terms match in any order, "prusament petg" now finds one filament out of two same-named ones. Closes Donkie#1087 Closes Donkie#1088
Narrowing a library to three filaments meant opening the filter menu, stepping into Filament, picking one, and doing all of it again twice more. The menu closed on every pick, and nothing in it said which values were already on — the chips that say so sit in the toolbar, behind the menu that covers them. A value row now carries a checkbox and its state, the same way the "Show archived" row already does, and picking one leaves the menu open. The two go together: once the values are marked, the list reads as a multi-select, and closing after a single pick is the surprising half. Escape and a click outside still close it, and picking a filter property or a date range still does too, since neither is a set. Nothing has to be preserved by hand for this to work. Each toggle is a query-only navigation that keeps the component mounted, and it already asked to keep focus and not to scroll, so the search box stays focused and the list stays where it was. The Ctrl-modifier the issue suggested is deliberately not implemented: a checkbox list that stays open needs no hint text to explain itself. Closes Donkie#1090 Closes Donkie#1089
Turning filter values into checkboxes that leave the menu open broke the
`addFilter` helper in two ways, and with it the grouping test that uses it
to pin the list down to its own spools.
An explicit `role="menuitemcheckbox"` replaces a button's implicit role, so
the helper's `getByRole("button")` no longer matched a value row at all;
and having picked one, the helper handed back a toolbar with the menu still
covering it, which the next call could not open through. It now asks for
the role the row actually has, and closes the menu itself, restoring the
postcondition every caller was already relying on.
The row's accessible name needed a real space rather than the margin that
had been standing in for one: without it a filament read as one
run-together word, "Galaxy BlackPLA".
client_v2: filter menu colours, materials, checkmarks and multi-select
Currently translated at 51.0% (276 of 541 strings) Translation: Spoolman/Spoolman Web UI v2 Translate-URL: https://hosted.weblate.org/projects/spoolman/spoolman-web-ui-v2/de/
Currently translated at 51.0% (276 of 541 strings) Translation: Spoolman/Spoolman Web UI v2 Translate-URL: https://hosted.weblate.org/projects/spoolman/spoolman-web-ui-v2/de/
Currently translated at 34.7% (188 of 541 strings) Translation: Spoolman/Spoolman Web UI v2 Translate-URL: https://hosted.weblate.org/projects/spoolman/spoolman-web-ui-v2/lt/
Currently translated at 100.0% (541 of 541 strings) Translation: Spoolman/Spoolman Web UI v2 Translate-URL: https://hosted.weblate.org/projects/spoolman/spoolman-web-ui-v2/th/
Translations update from Hosted Weblate
There was a problem hiding this comment.
Pull request overview
Syncs upstream Donkie/Spoolman changes into the fork, focused on client_v2’s library filter UX (richer filament filter options + multi-select without closing) and updated Weblate translations.
Changes:
- Extend filter option metadata (material + colors + multi-color direction) and render it in the filter menu with searchable secondary text.
- Update frontend v2 tests to select filter values via checkbox-like menu items and explicitly close the filter menu afterward.
- Import upstream translation updates for German, Lithuanian, and Thai.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests_frontend_v2/tests/helpers.ts | Adjusts Playwright helper to click checkbox-style filter entries and then close the filter menu. |
| client_v2/src/lib/utils/library.ts | Introduces shared FilterOption type with optional metadata for richer filter menu rendering. |
| client_v2/src/lib/components/library/ListToolbar.svelte | Updates filter menu UX to support multi-select, show swatches + meta text, and search across label+meta. |
| client_v2/src/lib/api/spoolSource.ts | Enhances filament filter options to include material and color metadata. |
| client_v2/locales/th/common.json | Upstream Thai translations update. |
| client_v2/locales/lt/common.json | Upstream Lithuanian translations update. |
| client_v2/locales/de/common.json | Upstream German translations update. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+509
to
+511
| <!-- A value row is a checkbox, not a command: it reads as on or off, and | ||
| picking one leaves the menu open so the next one is a click away | ||
| (#1090, #1089). Escape and a click outside still close it. --> |
Comment on lines
514
to
+518
| <button | ||
| class="menu-item" | ||
| onclick={() => { | ||
| params.toggleFilter(filterProp!, opt.value); | ||
| close(); | ||
| }} | ||
| role="menuitemcheckbox" | ||
| aria-checked={checked} | ||
| onclick={() => params.toggleFilter(filterProp!, opt.value)} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warning
Merge with "Create a merge commit" — do NOT squash. Squashing a sync PR discards the upstream ancestry and forces the next sync to re-resolve everything. That has already happened twice on this repo (#5, #9) and is what commit 356ebfb had to repair.
Routine sync with upstream
Donkie/Spoolman: 9 commits, 0 conflicts.This is the payoff from repairing the ancestry in 356ebfb — the previous sync needed 15 conflict resolutions, and a trial merge before the repair produced 27. With history recorded correctly, git merged this cleanly on its own.
What's coming in
client_v2 filament filter menu (4 commits)
Translations (5 commits) — German, Lithuanian, Thai, via Weblate.
Files touched:
client_v2/src/lib/api/spoolSource.ts,components/library/ListToolbar.svelte,utils/library.ts,tests_frontend_v2/tests/helpers.ts, and three locale files.Verification
9c1d5f2a7b31) — no split historyruff check spoolmantest_backup_rotation.py, unrelated)client_v2unit testssvelte-check/spool/materials/available, extra CORS knobs, fork preset settings,olyforge3d/spoolman:testimage tags0.26.3(ours)Backend is untouched by this sync — the changes are entirely client_v2 and locales.
Note
The
upstream-synclabel is applied soguard-translationsskips: this PR carries upstream's own Weblate commits, which that guard cannot distinguish from hand edits.