Skip to content

feat(workflow): filter-row editor for database Query args#2615

Open
simlarsen wants to merge 1 commit into
feat/workflow-common-componentsfrom
feat/workflow-query-filter
Open

feat(workflow): filter-row editor for database Query args#2615
simlarsen wants to merge 1 commit into
feat/workflow-common-componentsfrom
feat/workflow-query-filter

Conversation

@simlarsen

Copy link
Copy Markdown
Contributor

Turns hand-written database queries into simple filter rows. Stacked on #2614.

What

Database Query arguments (Find / Delete records) were hand-written JSON. This edits the common case — flat equality filters — as rows: a field, a value, and an explicit type.

  • Pure QueryFilterUtils keeps each value's JSON type via a per-row type selector (Text / Number / True-False), so it serializes to exactly the query object an author would hand-write — a number stays a number, a boolean stays a boolean. The stored value remains a JSON string, so the server parses it identically. Byte-safe.
  • QueryFilterInput renders the rows with an "Edit as JSON" escape, and starts in JSON mode automatically when the query isn't a flat equality — operator objects like {"createdAt":{"_type":"GreaterThan",…}}, arrays, or invalid JSON — so existing advanced queries never regress.
  • ArgumentsForm routes Query to it (removed from the JSON-editor set); footer suppressed.

Verification

  • QueryFilterUtils.test.ts: type inference on parse; operator/array/invalid → null (JSON fallback); type-faithful serialization (number stays number, boolean stays boolean, never writes NaN); empty-field drop; empty → ""; round-trip.
  • QueryFilterInput.test.tsx (RTL): renders typed rows; a number-typed row serializes to a numeric value; add/remove; JSON-mode fallback for operator queries.
  • 107 workflow tests pass; tsc ✓, eslint ✓.

🤖 Generated with Claude Code

Database Query arguments (Find / Delete records) were hand-written JSON.
This edits the common case — flat equality filters — as rows: a field, a
value, and an explicit type.

- Pure QueryFilterUtils keeps each value's JSON type via a per-row type
  selector (Text / Number / True-False), so it serializes to exactly the query
  object an author would hand-write (a number stays a number). The stored value
  remains a JSON string, so the server parses it identically — byte-safe.
- QueryFilterInput renders the rows with an "Edit as JSON" escape, and starts
  in JSON mode automatically when the query isn't a flat equality (operator
  objects like {"createdAt":{"_type":"GreaterThan",…}}, arrays, invalid JSON) —
  so existing advanced queries never regress.
- ArgumentsForm routes Query to it (removed from the JSON-editor set), footer
  suppressed.

Tests: QueryFilterUtils (type inference, operator/array/invalid → JSON
fallback, type-faithful serialization incl. number/boolean/no-NaN, empty
handling, round-trip) + QueryFilterInput RTL (renders typed rows, numeric
serialization, add/remove, JSON-mode fallback). 107 workflow tests pass; tsc +
eslint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@simlarsen

Copy link
Copy Markdown
Contributor Author

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

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.

2 participants