fix(desktop): make the About update row act on its state and align its support buttons - #4857
Draft
Astro-Han wants to merge 2 commits into
Draft
fix(desktop): make the About update row act on its state and align its support buttons#4857Astro-Han wants to merge 2 commits into
Astro-Han wants to merge 2 commits into
Conversation
…s support buttons The About page rendered an enabled 检查更新 through every updater state, but the service returns the current status untouched while an update is downloading, verifying, downloaded or installing — so on a nightly, whose steady state is downloaded, the button did nothing when pressed. The row now carries the one control its state can honour (check / restart / retry, or an inline spinner while the updater works), and restart and retry go through the sidebar footer's own handshake, which now lives once in useAppUpdateReminder instead of being spelled out in app-shell. The three support rows end in the same ghost button so their faces share one right edge; the keycaps sit before the copy button. The lead is the wordmark in brand colour, and a trailing 开源 group names the ASF project and links to source, release notes and license, so the page no longer ends two-thirds down the pane. The wordmark's viewBox is cropped to its ink: the trace carries 27 units of bearing on the left and 21 below, which a left-aligned mark showed as a 7.5px indent. The two centered heroes take compensating widths so their ink renders at the size it did. Generated-by: Claude Code
The #4109 gate rejects a new hook in AppShellContent's render body, and useAppUpdateReminder held no React state anyway. It is now openAppUpdate, a plain function the shell and the About page both call with their toast and locale; the install latch is module-level, so the sidebar and the About page share one instead of each holding their own. Generated-by: Claude Code
Astro-Han
force-pushed
the
fix/about-page-update-action-and-layout
branch
from
September 5, 2026 16:29
0f0b32e to
99b276c
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.
Summary
Three things were wrong with 设置 → 关于 after #4571:
checkForUpdatesNowreturns the current status untouched while an update is downloading, verifying, downloaded or installing (app-update-service.ts), but the page kept rendering an enabled 检查更新 through all of those. Nightly auto-downloads, so its steady state isdownloaded— which means the button was a no-op every time a nightly user pressed it. The page also hand-swapped the button label to 检查中… instead of using Astryx'sisLoading.Link, 键盘快捷键 was a ghost button — three faces, three right edges (measured at 1108 / 1196 / 1184 px on a 1280-wide story).Headingreading "Maka".This PR:
aboutUpdateRow(pure, unit-tested) maps the updater state to a label, a next-step description, and one ofcheck/checking/install/retry/busy.install(重启并更新) andretrygo through the same handshake the sidebar footer uses — active-task confirmation, failure toasts, the in-flight latch — because that handshake now lives once inopenAppUpdate(app-shell-app-update.ts, a plain function with a module-level install latch, so the sidebar and About share one); the shell's 50-line copy of it is gone.busystates show an inline spinner instead of a button the service would ignore;checkingis the check button withisLoading. The idle / up-to-date row says when Maka checks on its own (launch, window focus, every 4 hours), so nobody has to press the button to be current.smbutton. The issue link is that sameButtonwith anhref; the keycaps sit before the copy button rather than after it. All three faces now end at the same x.MakaWordmark— the asset the onboarding hero and the dock icon are traced from — beside the channel token, in brand colour like the two heroes. A trailing 开源 group names Apache Maka (incubating), the license, and links to the source, release notes and license text. Nothing on the page is styled outside Astryx.27 0 385 99), and the two centered consumers — onboarding hero, empty-chat hero — take widths of 94 and 134 so their ink renders at exactly the size it did (measured 93.7→93.9 and 133.8→133.9 px); they gain only true centering.Copy: the update strings drop their trailing punctuation to read as row labels,
updateDownloadedno longer points at the sidebar,updateCheckFailed/updateCheckFailedDetail/copyingare replaced byupdateFailed[operation]and the button'sisLoading. All three catalogs updated.Before (
main) vs. after, nightly with a downloaded update, same viewport:Dev checkout, where there is no update group:
The new failed-download story, which has no
maincounterpart:Verification
npm run format,npm run lintat the root: clean.apps/desktop:tsc -p tsconfig.renderer.jsonandtsconfig.storybook.jsonreport only the three pre-existing Astryx prop errors inpackages/ui;node --test dist/main/__tests__/about-update-status.test.js dist/main/__tests__/about-settings-page.test.js dist/main/__tests__/app-update-install.test.js(12 pass);npx playwright test --config e2e/playwright.config.ts e2e/about-page.spec.ts(1 passed).product-settings-pages--about,--about-nightly,--about-release,--about-update-failed, light and dark, 1280 wide: the three support controls measure the same right edge.AI use
Select exactly one:
Tool(s) and scope: Claude Code drafted the page, hook, tests, stories and this description under review.
Checklist
Does this PR entail a change in behavior?