Repository navigation
feat(table)!: settings filter tab, inline query bar default, switch rows - #130
Merged
Merged
Conversation
The fixed and truncate options in the column details become rows with the label and a description on the left and an sd-switch on the right, so the truncate hint no longer pushes the options out of line. Adds the config.fixed-hint key in all five locales and the plan for the settings filter tab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sd-table's query bar (filter.mode 'query-bar') now defaults filter.queryBar.editor to 'inline', so each chip's operator and value are edited on the bar. A standalone sd-query-bar keeps 'popover'. The header filter icon declares aria-haspopup="menu" only with the popover editor, since the inline editor focuses the chip instead of opening a menu. BREAKING CHANGE: set filter.queryBar.editor: 'popover' (per table or in SD_TABLE_CONFIGURATION) to keep the popover chips. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TableFilterConfiguration gains an optional mode, stored next to the inline external filters. It wins over filter.mode while filter.modeSelectable is not false (also settable in SD_TABLE_CONFIGURATION.filter), turns on the settings button dot while it differs from filter.mode, and Restore defaults clears it. configuration.set() now keeps the fields it is not given, so writing only inlineExternal no longer drops the rest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The settings modal gets Cột and Bộ lọc tabs with one footer: Apply stores both, Skip drops both, Restore defaults resets both. Bộ lọc offers the filter kind as two radio cards (Khung bộ lọc / Thanh bộ lọc, hidden with filter.modeSelectable false) and one switch row per external filter, shown in the panel or pinned on the bar. Required filters are locked; on the bar a filter it cannot show is off and locked, and queryBar.pinned locks the list. A kind equal to filter.mode is not stored. The tab shows on desktop when filtering is on and the table has a filter. The off-bar rule moves to sdTableExternalOffBar so the bar and the tab share it. The showcase query-bar demo shows the settings button. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The showcase query-bar demo swaps its Mode buttons, which a stored choice would override, for Editor inline / popover buttons, and its notes and the column settings notes describe the Bộ lọc tab. Adds the missing English entries for both demos. sd-table.md and the CHANGELOG cover the filter tab, the user's filter mode and the switch rows; the plan records each step and its deviations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The Thanh bộ lọc card is disabled, with a note naming them, while a required external filter cannot go on the bar: the bar would block the read with no place to fill it. With the bar picked, a warning says that filters not on the bar still filter by their value. - The header filter icon's aria-haspopup follows what opens: the chip menu with the popover editor; with the inline editor nothing for a field with a chip, else the operator menu, the value picker or the date picker of the chip being built (sdTableQueryTriggerPopup). - Only the selected tab has aria-controls, and the tab panels take focus. - configFilter is protected. - The storage spec writes an unknown mode straight into storage, so it covers the read path. - Docs and CHANGELOG: the choice without filter.key lasts until the table gets a new option object; the configuration.set() merge moves to Changed; Before upgrading lists the XLSX change; the filter list ignores hideExternalFilterToolbar on purpose. New i18n keys mode-query-bar-blocked and filters-off-bar-warning in all five languages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ight Adds table.component.filter-mode-async.spec.ts: twelve specs with a server loader whose reads stay in flight until the spec answers them. - Switching the mode sends no read, also with a read in flight, and carries the applied values both ways with the same pagingReq. - The mobile flip sends no read. - With the inline editor, a late answer of a replaced read is dropped, and edits inside the 700 ms debounce share one read. - A change from outside waits for the chip being built, and text being typed in a chip survives a change to another field. - The settings Apply and Restore defaults cause only their one re-read, and a dropped read never renders. - The stored mode and cached values come back after a reload with one read; a new option object keeps the mode only with filter.key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
Follow-up to the 3.4 table settings modal, from user feedback: the query bar could not be picked from the settings, the query bar did not default to the inline editor, and the truncate hint pushed the column checkboxes out of line. Planned for 3.5; plan and decisions in
.sdcorejs/handoff/table-settings-filters/PLAN.md.'default') and Thanh bộ lọc ('query-bar').inlineExternal): shown in the panel, or pinned as a chip on the bar.queryBar.pinnedlocks the list.TableFilterConfiguration.modestores the picked mode next toinlineExternal.filter.modeunlessfilter.modeSelectableisfalse(new, defaulttrue, also inSD_TABLE_CONFIGURATION.filter).filter.mode, and Restore defaults clears it.filter.modeis not stored, so the table keeps following the option.filter.queryBar.editordefaults to'inline'; a standalonesd-query-barkeeps'popover'. The header filter icon'saria-haspopupfollows what opens:menuwith the popover editor; with the inline editor nothing for a field with a chip, elsemenu/listbox/dialogfor the chip being built.sd-switchon the right (were checkboxes).Breaking change
filter: { mode: 'query-bar', + queryBar: { editor: 'popover' }, // keep the popover chips },Users can now switch a table between the filter panel and the query bar in the settings modal. Set
filter.modeSelectable: falseto keepfilter.modefixed. Both are in the CHANGELOG under Before upgrading.Commits
feat(table): show column options as switch rows in settings: new i18n keyconfig.fixed-hint.feat(table)!: edit query bar chips inline by defaultfeat(table): store the filter mode the user picks:configuration.set()now merges, which also fixes a set withoutinlineExternaldropping it.feat(table): add a filter tab to the settings modal: 12 new i18n keys in vi/en/ja/ko/zh. The off-bar rule moves tosdTableExternalOffBar(internal) so the bar and the tab share it.docs(table): document the settings filter tab and update the showcasefix(table): address the review of the settings filter tab: the fixes from the independent review below.test(table): cover the filter mode and inline editor with reads in flight: 12 specs intable.component.filter-mode-async.spec.ts, with a server loader whose reads stay in flight until the spec answers them.pagingReq; mobile flip.filter.key.API consistency review
filter.modeSelectablefollows the boolean options offilter(manualFilter,cacheable,hideInlineFilter). It is merged fromSD_TABLE_CONFIGURATION.filterthe same way asmodeandqueryBar(the option wins).TableFilterConfiguration.mode?reusesSdTableOptionFilter['mode'].filter.queryBar.editorchanges its default. Nothing is renamed or removed, and every new field is optional.filterSetupinput and thefilterAppliedoutput, next to the existingdefaultsRestored.npm run sync;npm run check:syncpasses.aria-haspopupfollows what the header icon opens (minor);filter.key(minor);aria-controlsand focusable panels,configFilterprotected, the storage spec now covers the read path, CHANGELOG fixes (nits).hideExternalFilterToolbar(documented).aria-describedby. That needs a newsd-switchinput.Tests
SdPreviewPdfthumbnail specs: a 5000 ms canvas timeout, plus one red as a knock-on.config.component.filter-tab.spec.ts: 20 specs.modeSelectable, Restore defaults.npm run lint,check:scss-hex(0 findings),test:theme(53/53),test:showcase-changelog,test:showcase-examples,npm run check:sync.Screenshots
More screenshots in
.sdcorejs/handoff/screenshots/:Known limits
filter.key. Without it, it lasts until the table gets a new option object, likeinlineExternal.aria-describedbyyet.#hydrateConfiguration); a separate session looks at skipping it.🤖 Generated with Claude Code