Files
multica/packages/views/navigation/context.tsx
Naiyuan Qing f41a0cf423 feat(views): extract packages/views — shared business UI + navigation adapter
- Create NavigationAdapter interface (push, replace, back, pathname, searchParams)
- Create AppLink component replacing next/link in 4 files
- Replace useRouter → useNavigation in 3 files (issue-detail, create-issue, create-workspace)
- Create WebNavigationProvider wrapping Next.js useRouter/usePathname/useSearchParams
- Move ~85 feature UI files (issues, editor, modals, my-issues, skills, runtimes) to packages/views/
- Add store singleton registration pattern (registerAuthStore, registerWorkspaceStore)
- Create data-aware wrappers in packages/views/common/ (ActorAvatar, Markdown)
- Update all app-layer imports to @multica/views/*
- Add @source directive for Tailwind to scan views package
- packages/views/ has zero next/* imports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 11:49:55 +08:00

28 lines
636 B
TypeScript

"use client";
import { createContext, useContext } from "react";
import type { NavigationAdapter } from "./types";
const NavigationContext = createContext<NavigationAdapter | null>(null);
export function NavigationProvider({
value,
children,
}: {
value: NavigationAdapter;
children: React.ReactNode;
}) {
return (
<NavigationContext.Provider value={value}>
{children}
</NavigationContext.Provider>
);
}
export function useNavigation(): NavigationAdapter {
const ctx = useContext(NavigationContext);
if (!ctx)
throw new Error("useNavigation must be used within NavigationProvider");
return ctx;
}