feat(ext): shared state host — decouple components from popup.ts
Introduce shared/state.ts as a service-locator so popup components (item-detail, item-form, trash, devices, settings, etc.) work in both the popup and vault tab bundles. Both entry points register themselves as the host; components import from shared/state instead of popup.ts. Vault.ts now delegates to the real popup components, removing ~300 lines of placeholder renderers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
import type { Request, Response } from '../shared/messages';
|
||||
import type { ItemId, ManifestEntry, Item } from '../shared/types';
|
||||
import { registerHost } from '../shared/state';
|
||||
import { renderUnlock } from './components/unlock';
|
||||
import { renderItemList } from './components/item-list';
|
||||
import { renderItemDetail } from './components/item-detail';
|
||||
@@ -164,6 +165,19 @@ export function navigate(view: View, extras?: Partial<PopupState>): void {
|
||||
setState({ view, error: null, loading: false, ...extras });
|
||||
}
|
||||
|
||||
// --- Register as state host so shared components can call back ---
|
||||
|
||||
registerHost({
|
||||
getState: () => currentState,
|
||||
setState,
|
||||
navigate,
|
||||
sendMessage,
|
||||
escapeHtml,
|
||||
popOutToTab,
|
||||
isInTab,
|
||||
openVaultTab,
|
||||
});
|
||||
|
||||
// --- Render ---
|
||||
|
||||
function render(): void {
|
||||
|
||||
Reference in New Issue
Block a user