Skip to content

feat: UI/UX improvements and unified schema selector#55

Merged
wicky-zipstack merged 4 commits intomainfrom
feat/ui-ux-improvements-and-schema-selector
Apr 17, 2026
Merged

feat: UI/UX improvements and unified schema selector#55
wicky-zipstack merged 4 commits intomainfrom
feat/ui-ux-improvements-and-schema-selector

Conversation

@wicky-zipstack
Copy link
Copy Markdown
Contributor

@wicky-zipstack wicky-zipstack commented Apr 10, 2026

What

  • Make entire project card clickable (header + body)
  • Redesign Model Configuration modal: Hierarchy on top, Source/Destination below with full width
  • Increase project_schema max_length from 20 to 1024
  • Fix table pagination wrapping to new line
  • Add distinct background color to toolbar (Filter, Sort, etc.)
  • Replace AI chat schema tooltip with interactive dropdown selector
  • Sync schema selection bidirectionally across AI Chat, Explorer, and Seeds

Why

  • Feedback from staging testing on BigQuery warehouse — multiple UX friction points identified
  • Schema selector was confusing (tooltip said "click settings icon" but unclear which one)
  • Model Configuration modal had truncated names due to narrow layout

How

  • ProjectListCard: moved onClick to wrapper div, action buttons use stopPropagation
  • configure-source-destination: split into 2 stacked cards, removed inline styles, added popupMatchSelectWidth
  • project_details.py: max_length 20 → 1024
  • no-code-model.css: flex-wrap on pagination container
  • no-code-toolbar.css: background color using --menu-items-bg variable
  • PromptActions.jsx: replaced InfoChip with Select dropdown, added API call for schema change
  • project-store.js: added schemaList state for shared access

Can this PR break any existing features. If yes, please list possible items. If no, please explain why. (PS: Admins do not merge the PR without this section filled)

  • No. All changes are additive UI improvements. Card click behavior preserved (action buttons still work via stopPropagation). Schema selection uses same backend API and store. No logic changes to data flow.

Database Migrations

  • None required. max_length change on project_schema is handled at Django model level only.

Env Config

  • None required

Relevant Docs

  • N/A

Related Issues or PRs

  • N/A

Dependencies Versions

  • No dependency changes

Notes on Testing

  • Test project card: clicking title/header area should navigate to project, clicking Edit/Delete/Share buttons should NOT navigate
  • Test schema selector in AI chat: changing schema should reflect in Explorer and Seeds
  • Test Model Configuration modal: dropdowns should show full names without truncation
  • Test pagination: resize window narrow, pagination should wrap to new line
  • Test toolbar: should have visible background distinguishing it from table headers

Screenshots

image image

Checklist

- Make entire project card clickable (header + body), with stopPropagation on action buttons
- Redesign Model Configuration modal: Hierarchy on top, Source/Destination below, full width dropdowns
- Increase project_schema max_length from 20 to 1024
- Fix table pagination wrapping to new line instead of horizontal overflow
- Add distinct background color to toolbar (Filter, Sort, etc.) with light/dark theme support
- Replace AI chat schema tooltip with interactive dropdown selector
- Sync schema selection bidirectionally across AI Chat, Explorer, and Seeds via shared store
- Make entire project card clickable (header + body), with stopPropagation on action buttons
- Redesign Model Configuration modal: Hierarchy on top, Source/Destination below, full width dropdowns
- Increase project_schema max_length from 20 to 1024
- Fix table pagination wrapping to new line instead of horizontal overflow
- Add distinct background color to toolbar (Filter, Sort, etc.) with light/dark theme support
- Replace AI chat schema tooltip with interactive dropdown selector
- Sync schema selection bidirectionally across AI Chat, Explorer, and Seeds via shared store
- Move inline styles to CSS classes, lint cleanup
@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Apr 10, 2026

Greptile Summary

This PR delivers a set of UI/UX improvements: making project cards fully clickable, redesigning the Model Configuration modal layout into two stacked cards, adding a toolbar background, fixing pagination wrapping, and replacing the static schema tooltip in AI Chat with an interactive dropdown that syncs schema selection bidirectionally across Explorer, AI Chat, and Seeds via the shared project-store.

Confidence Score: 5/5

Safe to merge — all findings are P2 style/cleanup suggestions with no blocking correctness issues.

All changes are additive UI improvements with no logic regressions. Three open P2 findings: stale schemaList on cross-project navigation, ineffective useCallback, and missing Spacebar handler. None affect data correctness or the primary user path.

frontend/src/ide/explorer/explorer-component.jsx (schemaList cleanup), frontend/src/ide/chat-ai/PromptActions.jsx (useCallback deps)

Important Files Changed

Filename Overview
frontend/src/base/components/project-list/ProjectListCard.jsx Moves onClick/onKeyDown from inner body div to outer wrapper; action buttons correctly use stopPropagation. Missing Spacebar activation on the new role=button wrapper.
frontend/src/ide/chat-ai/PromptActions.jsx Replaces static InfoChip with interactive Select dropdown backed by shared schemaList store; useCallback memoization is broken because expService (recreated each render) is listed as a dependency.
frontend/src/ide/editor/no-code-configuration/configure-source-destination.jsx Refactors layout to two stacked cards; migrates deprecated bodyStyle to v5 styles prop and adds popupMatchSelectWidth to all selects. No functional logic changed.
frontend/src/ide/explorer/explorer-component.jsx Stores fetched schema list in shared project-store; unmount cleanup only resets currentSchema, leaving schemaList stale across project navigations.
frontend/src/store/project-store.js Adds schemaList state and setSchemaList action; correctly excluded from persisted partialize so it resets on page reload.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: frontend/src/ide/explorer/explorer-component.jsx
Line: 88-92

Comment:
**`schemaList` not cleared on Explorer unmount**

The cleanup effect resets `currentSchema` but leaves `schemaList` populated. When a user navigates from Project A's IDE to Project B's IDE in the same session, AI Chat will briefly display Project A's schema options (with no selection) until `getSchemas()` completes for Project B.

```suggestion
  useEffect(() => {
    return () => {
      setCurrentSchema("");
      setSchemaList([]);
    };
  }, [setCurrentSchema, setSchemaList]);
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: frontend/src/ide/chat-ai/PromptActions.jsx
Line: 61-83

Comment:
**`useCallback` memoization broken by unstable `expService` reference**

`explorerService()` returns a new object on every render (because it calls `useAxiosPrivate()` internally), so `expService` changes identity each render. Including it in `handleSchemaChange`'s dependency array means the callback is also recreated every render, making `useCallback` a no-op here.

Alternatively, simply omit `useCallback` here since `handleSchemaChange` is only passed to an Ant Design `Select` that isn't memoised itself.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: frontend/src/base/components/project-list/ProjectListCard.jsx
Line: 92-95

Comment:
**`role="button"` missing Spacebar activation**

WAI-ARIA requires `role="button"` elements to respond to both Enter and the Spacebar key. The current `onKeyDown` only checks for `"Enter"`, leaving keyboard-only users unable to activate the card via the Spacebar.

Consider adding `e.key === " "` to the key check so both keys trigger `handleCardClick`.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (3): Last reviewed commit: "fix: address PR #55 review feedback" | Re-trigger Greptile

Comment thread backend/backend/core/models/project_details.py Outdated
Comment thread frontend/src/ide/chat-ai/PromptActions.jsx Outdated
… deprecated bodyStyle

- Add e.stopPropagation() to shared-user avatar onKeyDown handler to prevent card navigation on Enter
- Replace deprecated bodyStyle prop with styles={{ body: {...} }} for Ant Design v5 compatibility
Copy link
Copy Markdown
Contributor

@tahierhussain tahierhussain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wicky-zipstack Can you please add screenshots for the UI changes addressed in this PR?

Comment thread frontend/src/base/components/project-list/ProjectListCard.css Outdated
Comment thread frontend/src/ide/chat-ai/ChatAI.css
Comment thread frontend/src/ide/chat-ai/PromptActions.jsx Outdated
Comment thread frontend/src/ide/chat-ai/PromptActions.jsx
Comment thread frontend/src/ide/chat-ai/PromptActions.jsx
- Remove unused .project-list-card-clickable-content CSS class
- Reduce !important usage in schema select styles, increase specificity instead
- Replace duplicate API call with explorerService.setProjectSchema
- Replace message.success/error with useNotificationService for consistency
- Show error InfoChip when schema list is empty instead of hiding dropdown
- Revert project_schema max_length change (will be added to PR #54 with migration)
@wicky-zipstack
Copy link
Copy Markdown
Contributor Author

@tahierhussain All review comments addressed in commit 917ed8a. Summary:

  1. ✅ Removed unused .project-list-card-clickable-content class
  2. ✅ Reduced !important — increased specificity instead, kept only 3 where Ant Design inline styles require it
  3. ✅ Replaced message.success/error with useNotificationService
  4. ✅ Replaced duplicate API call with explorerService.setProjectSchema()
  5. ✅ Show error InfoChip ("No schema") when schema list is empty
  6. ✅ Reverted max_length change — will be added to PR feat: track model execution status with failure icon in explorer #54 with migration

Will add screenshots shortly.

Copy link
Copy Markdown
Contributor

@tahierhussain tahierhussain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

abhizipstack added a commit that referenced this pull request Apr 16, 2026
Requested by @tahierhussain in PR #55 review — the project_schema
field was too short for schemas with long names or multiple schemas.
Bundled into migration 0003 alongside the model run-status fields
since both target the core app and depend on 0002_seed_data.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
abhizipstack added a commit that referenced this pull request Apr 16, 2026
* feat: track model execution status and show failure icon in explorer

Implement model-level execution status tracking (NOT_STARTED, RUNNING,
SUCCESS, FAILED) at DAG node level with visual indicators in the file
explorer. Status is tracked per individual DAG node, ensuring accurate
status for each model even when downstream dependencies fail.

Backend changes:
- Add RunStatus enum and 4 new fields to ConfigModels (run_status,
  failure_reason, last_run_at, run_duration)
- Migration 0003_add_model_run_status
- Update file_explorer.load_models to return status fields
- Add _update_model_status to DAG executor — called before execution
  (RUNNING), after success (SUCCESS), and on exception (FAILED with
  reason)
- Update execute/views.py to return 400 on DAG execution failures
- Fix clear_cache decorator to re-raise exceptions instead of
  swallowing them silently

Frontend changes:
- Add getModelRunStatus helper to render colored dot badges next to
  model names in the explorer tree
- Running: blue, Success: green, Failed: red
- Show Popover on hover over failed status with full error message
  and last run timestamp
- Trigger explorer refresh via setRefreshModels after runTransformation
  succeeds or fails

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

* fix: address PR review feedback on model run status tracking

- Drop optional ConfigModels import; it's always present in the OSS build
- Track run_duration via time.monotonic() and persist on SUCCESS/FAILED
- Skip RUNNING update for non-executable parent nodes so they don't get
  stuck with a permanent blue badge in selective execution
- Raise explicit errors when session/project_id missing instead of silent no-op
- Stop returning raw exception strings from execute_run_command (CodeQL)
- Refresh explorer tree on context-menu run failure so FAILED badge appears
- Move getModelRunStatus to module scope and use antd theme tokens instead
  of hardcoded hex colors

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

* fix: satisfy prettier multiline formatting for status dot style spans

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

* feat: increase project_schema max_length from 20 to 1024

Requested by @tahierhussain in PR #55 review — the project_schema
field was too short for schemas with long names or multiple schemas.
Bundled into migration 0003 alongside the model run-status fields
since both target the core app and depend on 0002_seed_data.

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

* fix: address Greptile P1s — CLI-safe timezone import + DB connection leak

P1: `from django.utils import timezone` at module level crashes when
    visitran is used as a standalone CLI without Django installed.
    Wrapped in try/except with a minimal fallback that provides
    timezone.now() via stdlib datetime.

P1: close_db_connection() was only called in the success path of
    execute_run_command. On exception the connection leaked. Moved
    to a finally block so it always runs regardless of outcome.

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

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@wicky-zipstack wicky-zipstack merged commit 39d66b0 into main Apr 17, 2026
8 checks passed
@wicky-zipstack wicky-zipstack deleted the feat/ui-ux-improvements-and-schema-selector branch April 17, 2026 05:04
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.

3 participants