modal header and tracker 5#29167
Merged
chrisnojima-zoom merged 11 commits intonojima/ZCLIENT-store-split-4from Apr 22, 2026
Merged
modal header and tracker 5#29167chrisnojima-zoom merged 11 commits intonojima/ZCLIENT-store-split-4from
chrisnojima-zoom merged 11 commits intonojima/ZCLIENT-store-split-4from
Conversation
There was a problem hiding this comment.
Pull request overview
This PR continues the ongoing store-cleanup work by moving transient UI/session state out of global Zustand stores into route params, feature hooks, and desktop popup handler registries—especially for Tracker, Teams wizards, Pinentry, Archive, and some modal headers.
Changes:
- Introduces new feature-local utilities/hooks (e.g.
useTrackerProfile, tracker model helpers, new-team/add-members wizard state helpers). - Replaces several store-driven flows with route-param-driven flows and direct engine listeners (e.g. teams wizards, unlock-folders, pinentry remote proxy).
- Removes/relocates legacy stores/tests (e.g. archive store, pinentry store, tracker store tests) and adds new pure-unit tests for extracted logic.
Reviewed changes
Copilot reviewed 101 out of 115 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| shared/wallets/account-utils.tsx | New wallet account mapping/sorting helpers and route-param builders |
| shared/util/uuid.tsx | Adds lightweight UUID generator for RPC op uniqueness |
| shared/util/use-debounce.tsx | Converts exported hooks to function declarations (signature unchanged) |
| shared/util/uint8array.tsx | Adds Uint8Array/base64/hex helper utilities |
| shared/util/shallow-equal.tsx | Adds default-export shallowEqual helper |
| shared/unlock-folders/store.tsx | Tightens open typing to UnlockFolderDevice and stores devices directly |
| shared/unlock-folders/remote-proxy.desktop.tsx | Uses shallow selector and listens to engine actions locally |
| shared/unlock-folders/engine-actions.desktop.tsx | Extracts handler converting RPC devices to UI devices |
| shared/unlock-folders/engine-actions.desktop.test.ts | Updates tests to target new handler signature |
| shared/tracker/use-profile.tsx | New tracker profile hook owning identify/non-user loads + engine listeners |
| shared/tracker/model.tsx | New pure tracker model/update helpers |
| shared/tracker/model.test.ts | Unit tests for tracker model helpers |
| shared/tracker/desktop-popup-handles.tsx | Desktop tracker popup handler registry + resetter |
| shared/tracker/bio.tsx | Makes Bio presentational (props-driven) instead of store-driven |
| shared/tracker/assertion.tsx | Makes Assertion presentational and passes kid to revoke route |
| shared/teams/team/new-header.tsx | Moves “add self” to route-param wizard navigation |
| shared/teams/new-team/wizard/team-purpose.tsx | Route-param wizard state + navigation updates |
| shared/teams/new-team/wizard/state.tsx | New-team wizard state helpers + creation RPC wrapper |
| shared/teams/new-team/wizard/new-team-info.tsx | Route-param wizard state + avatar navigation |
| shared/teams/new-team/wizard/make-big-team.tsx | Route-param wizard state + routing to next step |
| shared/teams/new-team/wizard/create-subteams.tsx | Route-param wizard state + routing to add-members flow |
| shared/teams/new-team/wizard/create-channels.tsx | Splits generic modal vs wizard wrapper; wizard uses route params |
| shared/teams/new-team/wizard/add-subteam-members.tsx | Route-param wizard state and modal header action wiring |
| shared/teams/common/activity.tsx | ModalTitle supports new-team wizard avatar/name via params |
| shared/teams/add-members-wizard/state.tsx | New add-members wizard state helpers (pure functions) |
| shared/teams/add-members-wizard/add-phone.tsx | Uses wizard param + addMembersToWizard then navUpToScreen |
| shared/teams/add-members-wizard/add-from-where.tsx | Uses wizard param; routes to team builder with params |
| shared/teams/add-members-wizard/add-email.tsx | Uses wizard param + addMembersToWizard then navUpToScreen |
| shared/teams/add-members-wizard/add-contacts.native.tsx | Uses wizard param + addMembersToWizard + local banner error |
| shared/teams/add-members-wizard/add-contacts.desktop.tsx | Desktop stub updated to accept wizard prop |
| shared/teams/add-members-wizard/add-contacts.d.ts | Updates type declaration to match new wizard prop |
| shared/team-building/container.tsx | Route params now optionally carry addMembersWizard |
| shared/styles/class-names.tsx | Adds in-repo classnames subset implementation with license |
| shared/stores/tests/tracker.test.ts | Removes tracker store tests (tracker logic moved out) |
| shared/stores/tests/teams.test.ts | Updates tests to use new add-members wizard pure helpers |
| shared/stores/tests/modal-header.test.ts | Adjusts test expectations after modal-header fields removed |
| shared/stores/tests/archive.test.ts | Removes archive store tests (archive store removed) |
| shared/stores/pinentry.tsx | Removes pinentry store (replaced by feature-local popup state) |
| shared/stores/modal-header.tsx | Removes data and editAvatarHasImage fields |
| shared/stores/archive.tsx | Removes archive store (job mapping handled elsewhere) |
| shared/signup/use-request-auto-invite.tsx | New hook to request invite code and route to username entry |
| shared/settings/contacts-joined.tsx | Uses useTrackerProfile + direct follow RPC instead of tracker store |
| shared/settings/archive/modal.tsx | Stops calling archive store load() after starting jobs |
| shared/settings/archive/job-state.tsx | Extracts archive job mapping/progress updates into pure helpers |
| shared/settings/archive/job-state.test.ts | Adds unit tests for new archive job helpers |
| shared/router-v2/tab-bar.desktop.tsx | Reads fullname from users store instead of tracker store |
| shared/router-v2/account-switcher/index.tsx | Reads fullname from users infoMap instead of tracker store |
| shared/profile/user/teams/index.tsx | Makes teams list presentational (team showcase passed in) |
| shared/profile/user/index.tsx | Passes richer profile props (assertions, bio, guiID, etc.) |
| shared/profile/user/hooks.tsx | Refactors to useTrackerProfile + passes assertions objects |
| shared/profile/user/actions/index.tsx | Actions now driven by props + follow RPC (no tracker store dispatch) |
| shared/profile/showcase-team-offer.tsx | Removes tracker reload side-effect on modal close |
| shared/profile/routes.tsx | Removes modal-header dependency; wizard avatar flow uses route params |
| shared/profile/revoke.tsx | Revoke uses route params (platform/kid) rather than looking up from tracker store |
| shared/profile/proof-utils.tsx | Adds proof username normalization helper (http(s), btc) |
| shared/profile/pgp/validation.tsx | Adds pure PGP form validation helper |
| shared/profile/generic/proofs-list.tsx | Uses useTrackerProfile for reload instead of tracker store |
| shared/profile/edit-profile.tsx | Uses useTrackerProfile and preserves in-progress edits on refetch |
| shared/profile/edit-avatar/index.native.tsx | Header options set via navigation options (no modal-header store) |
| shared/profile/edit-avatar/index.d.ts | Adds newTeamWizard prop typing |
| shared/profile/edit-avatar/hooks.tsx | Wizard avatar updates stored in route params and routed forward |
| shared/pinentry/remote-proxy.desktop.tsx | Pinentry popup state is local + engine listener driven |
| shared/pinentry/desktop-popup-handles.tsx | Adds pinentry popup handler registry + reset hooks |
| shared/pinentry/desktop-popup-handles.test.tsx | Tests for pinentry popup handler registry + reset behavior |
| shared/incoming-share/routes.tsx | Removes modal-header usage for header actions/title/right button |
| shared/incoming-share/index.tsx | Sets navigation options directly based on incoming share items |
| shared/desktop/renderer/remote-event-handler.desktop.tsx | Routes pinentry/tracker remote actions through handler registries |
| shared/crypto/helpers.tsx | Converts helper exports to function declarations |
| shared/constants/router.tsx | Enhances navUpToScreen to support params + replace-if-missing + active-stack targeting |
| shared/constants/init/shared.tsx | Removes engine fanout plumbing for deleted/migrated stores |
| shared/common-adapters/profile-card.tsx | Uses useTrackerProfile + new noAssertion import |
| shared/common-adapters/markdown/service-decoration-parser.tsx | Adds base64+utf8 parsing for service decorations |
| shared/chat/routes.tsx | Uses static titles for some modals (less modal-header dependence) |
| shared/chat/pdf/index.desktop.tsx | Sets modal title via navigation options instead of modal-header |
| shared/chat/inbox/row/big-team-header.tsx | Uses chat team hook badge instead of teams store badge state |
| shared/chat/create-channel/hooks.tsx | Uses useChatTeam instead of teams store for teamname/role |
| shared/chat/conversation/thread-search-route.tsx | Adds route-param helpers for thread search state |
| shared/chat/conversation/pinned-message.tsx | Uses chat team hook for permissions instead of teams store |
| shared/chat/conversation/normal/container.tsx | Wraps with ChatTeamProvider instead of loading team members via teams module |
| shared/chat/conversation/messages/wrapper/wrapper.tsx | Uses useChatTeamMembers for author role |
| shared/chat/conversation/messages/system-simple-to-complex/container.tsx | Navigates directly to manage channels route |
| shared/chat/conversation/messages/system-new-channel/container.tsx | Navigates directly to manage channels route |
| shared/chat/conversation/messages/system-create-team/container.tsx | Uses chat team hook + add-members wizard route navigation |
| shared/chat/conversation/messages/system-change-retention/container.tsx | Uses chat team hook for permissions |
| shared/chat/conversation/messages/system-added-to-team/container.tsx | Uses useChatTeamMembers for role checks |
| shared/chat/conversation/messages/separator-utils.tsx | Extracts message separator/author-collapse logic to utility |
| shared/chat/conversation/messages/retention-notice.tsx | Uses chat team hook for permission checks |
| shared/chat/conversation/messages/message-popup/hooks.tsx | Uses chat team hooks for bot/permission/member checks |
| shared/chat/conversation/messages/cards/team-journey/container.tsx | Navigates directly to manage channels route |
| shared/chat/conversation/input-area/suggestors/channels.tsx | Uses chat team-name hook for mutual team channel suggestions |
| shared/chat/conversation/info-panel/settings/min-writer-role.tsx | Uses chat team hook for permissions |
| shared/chat/conversation/info-panel/settings/index.tsx | Uses chat team hooks for permissions/members |
| shared/chat/conversation/info-panel/menu.tsx | Uses chat team hooks; removes TeamsSubscriberMountOnly wrapper |
| shared/chat/conversation/info-panel/members.tsx | Uses useChatTeamMembers and adjusts auditing banner logic |
| shared/chat/conversation/info-panel/index.tsx | Wraps info panel content in ChatTeamProvider |
| shared/chat/conversation/info-panel/header.tsx | Wraps menu popup in ChatTeamProvider; uses chat team hook for admin |
| shared/chat/conversation/info-panel/common.tsx | Uses chat team members hook for bots/human count |
| shared/chat/conversation/info-panel/bot.tsx | Uses chat team hooks instead of teams store selectors |
| shared/chat/conversation/info-panel/add-to-channel.tsx | Uses chat participants + useChatTeamMembers; removes channel-list reload |
| shared/chat/conversation/info-panel/add-people.tsx | Routes into add-members wizard via route params |
| shared/chat/conversation/fwd-msg.tsx | Sets modal title via navigation options instead of modal-header |
| plans/teams-cleanup.md | Adds/updates cleanup plan doc (teams) |
| plans/store-split.md | Removes older cleanup plan doc |
| plans/fs-cleanup.md | Adds FS cleanup plan doc |
| plans/engine-listener.md | Removes older engine listener plan doc |
| plans/chat-cleanup.md | Adds chat cleanup plan doc |
| AGENTS.md | Adds explicit .tsx convention line under shared/ |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
163699b
into
nojima/ZCLIENT-store-split-4
4 of 5 checks passed
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.
No description provided.