Repository navigation
feat(table): add column visibility picker and opt-in Apply view to output - #233
Merged
Merged
Conversation
obvious-autobuild-staging
Bot
force-pushed
the
feat/view-driven-output
branch
from
October 20, 2026 03:02
ce2d43a to
7c4edad
Compare
…tput projection Add projectCsvView to serialize active filtered/sorted rows and checked columns, a Columns visibility popover in CsvTable with source-column mapping across sort/edit/paste/delete/selection, and an opt-in Apply view to output toggle wired through InputPane and OutputPane into App. Co-authored-by: David Boskovic <david@obvious.ai>
…rsion Add unit and component integration coverage for projectCsvView, column visibility toggling, source column mapping when columns are hidden, and opt-in Apply view to output projection in both directions. Co-authored-by: David Boskovic <david@obvious.ai>
Add changelog entry #22 for the column visibility picker and Apply view to output projection and rebuild prerendered production assets. Co-authored-by: David Boskovic <david@obvious.ai>
obvious-autobuild-staging
Bot
force-pushed
the
feat/view-driven-output
branch
from
October 20, 2026 03:12
7c4edad to
7fac38d
Compare
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.
Why
Searching or sorting a CSV table in CSVJSON currently acts only as a visual inspection lens — the converted output (
JSON/JSONL/SQL/TS) andCopy/Downloadactions still emit the full, unsorted source table, and users have no way to hide columns without deleting them from their raw input. Power users preparing a filtered or column-subsetted export shouldn't have to destructively mutate their source CSV just to copy or download a slice.What
Implements AC-11 and Locked Decision D10 from Blueprint
art_MJHTha6X:projectCsvView(app/src/lib/tableView.ts): Pure helper that serializes the activevisibleColIndicesheader subset andviewRowIndicesrow subset viaserializeCsvRowjoined by\nusingtable.delimiter, preserving RFC 4180 quoting and custom delimiters (\t,;,|).Columnsvisibility popover (app/src/components/CsvTable.tsx):data-testid="{testId}-columns-button"in the table toolbar opening a dialog popover (data-testid="{testId}-columns-popout") with per-column checkboxes (data-testid="{testId}-column-toggle-{colIndex}", enforcing ≥1 visible column) and a contextualShow allreset button (data-testid="{testId}-columns-reset").DataEditorCorevisible columns throughvisibleColIndicesand translates grid column indices back to sourcecolIndexacross sorting, inline cell editing, rectangular paste/fill, double-click header rename, column deletion, per-column type override badges, selection aggregates, and selection copy (serializeGridSelection).Apply view to outputtoggle (CsvTable.tsx→InputPane.tsx/OutputPane.tsx→App.tsx):data-testid="{testId}-apply-view",aria-pressed) only when a search filter (query !== ""), sort (sort !== null), or column subset (visibleColIndices.length < table.headers.length) is active.CSV → JSONmode, togglingApply view to outputon feedsprojectedInputCsvintoconvertTextso the output pane (JSON/JSONL/SQL/TS),rows · colsstatus badge,Copy, andDownloadreflect the exact active table view without mutating rawinput.JSON → CSVmode, togglingApply view to outputon the output CSV table causesCopyandDownloadto export the projected CSV view.#20(2026-10-20) and rebuildsapp/dist.Tradeoffs
Apply view to outputonly when a view transform is active (per D10), avoiding surprise partial exports when someone merely searches a table to inspect a row.hiddenColsresets automatically if the parsed header count or column names change (e.g. uploading a new file or switching examples), while surviving cell edits and in-place single-header renames.How to Review
app/src/lib/tableView.ts&app/src/lib/__tests__/tableView.test.ts—projectCsvViewimplementation and unit tests.app/src/components/CsvTable.tsx&app/src/components/CsvTable.test.tsx—Columnspopover,visibleColIndicesgrid-to-source column mapping, andApply view to outputtoggle.app/src/App.tsx,app/src/components/InputPane.tsx,app/src/components/OutputPane.tsx, &app/src/App.test.tsx— projected CSV wiring forCSV → JSONconversion andJSON → CSVcopy/download.Verification
cd app && npm run lint— cleancd app && npx tsc -b --noEmit— cleancd app && npm test— 34 test files, 585 tests passingcd app && npm run build && cd .. && bash .github/scripts/verify-seo.sh— passedagent-browser) verification at1440×900@2x(tc-11)Human author: David Boskovic (david@obvious.ai)
🔗 Obvious Project · 🧵 Obvious Thread · 🔀 Obvious PR Artifact