Phase 4: Move screen selection state into the screens themselves
ToolsScreen, PromptsScreen, and ResourcesScreen each tracked the user's current selection via `selectedXxxName` / `onSelectXxx` props, hoisting screen-local UI state into whatever rendered them. InspectorView never threaded those callbacks anywhere, so clicks in the controls panel did not display the matching detail panel — the detail panel only rendered if a parent fed selection back in. Move selection into `useState` inside each screen and drop the `selectedXxxName` / `onSelectXxx` props. MCP-derived data (`callState`, `getPromptState`, `readState`) keeps flowing in from `InspectorView` as props. ResourcesScreen wraps `onReadResource` so a template-expanded URI becomes the selected resource for preview rendering. Update each screen's stories to drop the deleted props. Stories that need a pre-selected item use a `play` function to click it — no component coupling to Storybook. Add Phase 4.3 to the interfaces plan describing the rule. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d9b2009804
commit
4c1d2f2c34
1 changed files with 171 additions and 86 deletions
|
|
@ -289,7 +289,6 @@ export function InspectorView({
|
|||
tools={tools}
|
||||
listChanged={false}
|
||||
onRefreshList={noop}
|
||||
onSelectTool={noop}
|
||||
onCallTool={noop}
|
||||
/>
|
||||
</ScreenStage>
|
||||
|
|
@ -298,7 +297,6 @@ export function InspectorView({
|
|||
prompts={prompts}
|
||||
listChanged={false}
|
||||
onRefreshList={noop}
|
||||
onSelectPrompt={noop}
|
||||
onGetPrompt={noop}
|
||||
/>
|
||||
</ScreenStage>
|
||||
|
|
@ -309,8 +307,6 @@ export function InspectorView({
|
|||
subscriptions={subscriptions}
|
||||
listChanged={false}
|
||||
onRefreshList={noop}
|
||||
onSelectUri={noop}
|
||||
onSelectTemplate={noop}
|
||||
onReadResource={noop}
|
||||
onSubscribeResource={noop}
|
||||
onUnsubscribeResource={noop}
|
||||
|
|
|
|||
Loading…
Reference in a new issue