refactor(selection): split selectedAgentId into focus vs edit-modal states; improve Edit modal title
Before this commit one piece of state (`selectedAgentId`) did three
jobs: roster highlight, navigation destination, and Edit-modal open
flag. The three jobs had incompatible lifecycles — highlight should
persist across modal close, navigation should land on a screen
without opening a modal, and the modal itself only wants to open on
explicit intent. The conflation was the root cause of the "Edit: CEO
auto-opens on first Team view" bug (commit 41132e2 patched the most
visible symptom by not pre-selecting the lead agent, but the coupling
remained).
Split into two slice fields:
- `selectedAgentId` — which agent is currently highlighted in the
roster / OrgChart. Survives modal close. Set by: row click, card
click, navigation from Inbox / Hiring (all of which pass through
`openAgentEditor` which sets both so the highlight follows the last
interaction).
- `editingAgentId` — which agent's Edit modal is open, or
NEW_ENTITY_ID for the "Request new hire" modal. Only set by
explicit user action; cleared on modal close. Never set by
navigation or onboarding — the pre-select pathway cannot
accidentally open a modal again.
Plumbing:
- `selection.ts`: new `editingAgentId` + `setEditingAgentId`, plus
clear on `clearCompanyScopedSelections`.
- `useCompanyData.ts`: derive `editingAgent` record from the id.
- `useCompanyController.ts`: forward `editingAgent` on the section
context.
- `OrganizationSections.tsx`: `agents` section modals read
`editingAgentId` / `editingAgent`. "Request new hire" button uses
`setEditingAgentId(NEW_ENTITY_ID)`. Single-click handlers go
through `openAgentEditor(id)` which updates both states.
Also improved Edit modal title (was "Edit: CEO", a machined English
prefix on a Chinese UI with zero context about the role):
- zh: "编辑 {name}({role})"
- en: "Edit {name} ({role})"
Renders as "编辑 CEO(首席执行官)" in the screenshot example.
Covers J9 / S2.
This commit is contained in:
1 parent
9981ee342b
commit
dc33131553
6 files changed
+50
-12
No files matched your search
@@ -6,7 +6,14 @@ export interface SelectionSlice {
|
||||
selectedConnectorId: string | null;
|
||||
selectedApprovalId: string | null;
|
||||
selectedRunId: string | null;
|
||||
/** Highlighted agent (roster row / orgchart card). Navigation target.
|
||||
* Does NOT control the Edit modal — see editingAgentId. */
|
||||
selectedAgentId: string | null;
|
||||
/** Agent whose Edit modal is currently open, or NEW_ENTITY_ID for the
|
||||
* new-hire request modal. Only set by explicit user action (row click,
|
||||
* card click, "Request new hire" button); never by navigation or
|
||||
* onboarding defaults. Cleared on modal close. */
|
||||
editingAgentId: string | null;
|
||||
selectedGoalId: string | null;
|
||||
selectedProjectId: string | null;
|
||||
selectedWorkspaceId: string | null;
|
||||
@@ -16,6 +23,7 @@ export interface SelectionSlice {
|
||||
setSelectedApprovalId: (id: string | null) => void;
|
||||
setSelectedRunId: (id: string | null) => void;
|
||||
setSelectedAgentId: (id: string | null) => void;
|
||||
setEditingAgentId: (id: string | null) => void;
|
||||
setSelectedGoalId: (id: string | null) => void;
|
||||
setSelectedProjectId: (id: string | null) => void;
|
||||
setSelectedWorkspaceId: (id: string | null) => void;
|
||||
@@ -34,6 +42,7 @@ export const createSelectionSlice: StateCreator<
|
||||
selectedApprovalId: null,
|
||||
selectedRunId: null,
|
||||
selectedAgentId: null,
|
||||
editingAgentId: null,
|
||||
selectedGoalId: null,
|
||||
selectedProjectId: null,
|
||||
selectedWorkspaceId: null,
|
||||
@@ -58,6 +67,10 @@ export const createSelectionSlice: StateCreator<
|
||||
set((state) => {
|
||||
state.selectedAgentId = id;
|
||||
}),
|
||||
setEditingAgentId: (id) =>
|
||||
set((state) => {
|
||||
state.editingAgentId = id;
|
||||
}),
|
||||
setSelectedGoalId: (id) =>
|
||||
set((state) => {
|
||||
state.selectedGoalId = id;
|
||||
@@ -80,6 +93,7 @@ export const createSelectionSlice: StateCreator<
|
||||
state.selectedApprovalId = null;
|
||||
state.selectedRunId = null;
|
||||
state.selectedAgentId = null;
|
||||
state.editingAgentId = null;
|
||||
state.selectedGoalId = null;
|
||||
state.selectedProjectId = null;
|
||||
state.selectedWorkspaceId = null;
|
||||
|
||||
Reference in new issue
Block a user