Skip to content

feat(WD-33199): Apply design to Releases form UI#313

Open
immortalcodes wants to merge 6 commits intoreleases-manager-feature-branchfrom
WD-33199-apply-design-to-form-ui
Open

feat(WD-33199): Apply design to Releases form UI#313
immortalcodes wants to merge 6 commits intoreleases-manager-feature-branchfrom
WD-33199-apply-design-to-form-ui

Conversation

@immortalcodes
Copy link
Copy Markdown
Member

@immortalcodes immortalcodes commented Apr 13, 2026

Done

Applies the Figma design to the Releases manager form UI, refactoring layout and improving UX across the Releases management pages.

  • Refactored Releases management into ReleasesLayout (shared shell) and separate UpdateReleasesPage / UpdateChecksumsPage route pages
  • Added ReleasesSecondaryNav for tab-style navigation between the two pages
  • Added ReleasesStatusBar with dirty-field count, Save and Reset actions, and an "Add checksum" button surfaced from the child page
  • New ReleaseField component — label + input row with consistent grid layout and icon support
  • New ChecksumCategoryTable and AddChecksumPanel components for checksum management with inline add/remove UX
  • New TaggedFieldInput component — multi-value chip input for tagged fields
  • SCSS modules (_ReleasesLayout.scss, _ReleaseForm.scss) replacing inline styles; grid-based two-column layout matching the Figma spec
  • useReleaseFormState hook extracted to manage dirty tracking, field/checksum CRUD, and submit logic
  • Improved label formatting and icon usage throughout

QA

  • Clone the repo locally and start the dev server
  • Visit http://localhost:8104/app
  • Figma
  • Navigate to the Releases section via the sidebar
  • Verify the secondary nav renders tabs for "Update releases" and "Update checksums"
  • Click "Add checksum" in the status bar — verify the add panel opens
  • Fill in category, architecture, and URL, then submit — verify the new row appears
  • Click the delete icon on a checksum row — verify it is removed
  • Verify layout matches the Figma spec at all viewport sizes (two-column grid, sidebar fixed width)

Fixes

@webteam-app
Copy link
Copy Markdown

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Implements a new Releases manager experience in the web UI (tabbed “Update releases” / “Update checksums” views with shared layout/status bar) and adds corresponding backend endpoints/services to fetch, merge, and submit releases.yaml updates via the GitHub API.

Changes:

  • Adds a new Releases UI shell + routes, including checksum CRUD UX and a shared status bar.
  • Introduces backend Releases services (GitHub client + YAML parser/merger) and new /api/get-releases + /api/update-releases endpoints.
  • Expands CI and tests (Python test job + new unit tests) and updates tooling/dependencies (ruamel.yaml, Python 3.12).

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
webapp/tests/test_releases_manager.py Adds unit tests for releases YAML parsing and GitHub client/service behavior.
webapp/tests/test_gdrive.py Adjusts gdrive init test to monkeypatch service build failure.
webapp/tests/conftest.py Adds DB/session fixtures for Python tests.
webapp/schemas.py Adds request schema for update-releases API.
webapp/routes/releases.py Adds API routes to fetch and update releases data.
webapp/releases_manager.py Implements YAML parsing/merging + GitHub workflow to create branch/PR and commit updates.
webapp/github.py Refactors GitHub API layer into a shared base + separate repository vs releases APIs.
webapp/app.py Registers the new releases blueprint.
webapp/init.py Tweaks Flask JSON sorting behavior and dev logging level.
static/client/store/types.ts Adds panel state for the checksum side panel.
static/client/store/app.ts Implements toggle handler for the checksum side panel.
static/client/services/api/types/releases.ts Defines TS types/guards for releases payloads and tagged YAML fields.
static/client/services/api/services/releases.ts Adds client service functions for releases API calls.
static/client/services/api/partials/ReleasesApiClass.ts Adds API class for releases endpoints.
static/client/services/api/index.ts Wires ReleasesApiClass into the API client.
static/client/services/api/hooks/releases.ts Adds a react-query hook to fetch releases data.
static/client/services/api/constants.ts Adds releases endpoint constants.
static/client/pages/Releases/utils.ts Adds deep-clone + deep-equality helpers and label formatting.
static/client/pages/Releases/UpdateReleasesPage.tsx Renders the releases field editor view.
static/client/pages/Releases/UpdateChecksumsPage.tsx Renders checksum categories, edit/add panel, and status-bar integration.
static/client/pages/Releases/ReleasesLayout.tsx Adds shared layout with secondary nav + status bar + outlet context.
static/client/pages/Releases/index.ts Exports Releases layout entrypoint.
static/client/pages/Releases/hooks/useReleaseFormState.ts Adds form state, dirty tracking, checksum CRUD, and submit logic.
static/client/pages/Releases/components/TaggedFieldInput.tsx Adds UI for editing custom-tagged YAML scalars/mappings.
static/client/pages/Releases/components/ReleasesStatusBar.tsx Adds sticky status bar with PR/demo links and submit/add actions.
static/client/pages/Releases/components/ReleasesSecondaryNav.tsx Adds tab-style secondary navigation for releases pages.
static/client/pages/Releases/components/ReleaseField.tsx Adds standardized label+input row with dirty highlighting and tag support.
static/client/pages/Releases/components/ChecksumCategoryTable.tsx Adds accordion/table UI for checksum categories.
static/client/pages/Releases/components/AddChecksumPanel.tsx Adds side panel to add/edit checksum entries.
static/client/pages/Releases/_ReleasesLayout.scss Adds layout/status bar/accordion styling for Releases pages.
static/client/pages/Releases/_ReleaseForm.scss Adds form field styling and dirty-state visuals.
static/client/pages/Main/Main.tsx Adds /app/releases/* routes to the router.
static/client/components/Navigation/Navigation.tsx Adds “Releases” entry to side navigation and collapses nav on releases pages.
static/client/components/MainLayout/MainLayout.tsx Adds showSearch toggle used by Releases layout.
static/client/App.scss Imports releases SCSS and includes additional icon mixins.
requirements.txt Adds ruamel.yaml dependency.
pyproject.toml Bumps required Python version to >= 3.12.
package.json Splits test scripts into test-js and test-python.
.github/workflows/CI.yml Splits CI tests into separate JS and Python jobs (adds postgres service).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +35 to +39
// Register the "Add checksum" handler so the status bar can trigger it
useEffect(() => {
registerAddChecksum(handleOpenAdd);
return () => registerAddChecksum(null);
});
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

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

This effect runs on every render (no dependency array) and its cleanup runs before the next effect, so it will repeatedly register/unregister the callback and can cause a render loop in the parent (hasAddChecksum flips false/true). Add an appropriate dependency array so registration only happens when registerAddChecksum/handleOpenAdd change, and keep the cleanup only for unmount.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants