File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ It mimics the `<Link />` component behavior provided by Gatsby or Next.js.
44
55## Dependencies
66
7- Provide a URL resolver with ` LinkUrlResolverContext ` . The resolver can come
7+ Provide a URL resolver with ` LinkUrlResolverProvider ` . The resolver can come
88from ` @stackflow/plugin-history-sync ` or another routing plugin.
99
1010## Usage
@@ -57,12 +57,12 @@ const { Stack } = stackflow({
5757Wrap ` Stack ` with the resolver from the routing plugin.
5858
5959``` tsx
60- import { LinkUrlResolverContext } from " @stackflow/link" ;
60+ import { LinkUrlResolverProvider } from " @stackflow/link" ;
6161
6262const App = () => (
63- <LinkUrlResolverContext.Provider value = { historySync .urlResolver } >
63+ <LinkUrlResolverProvider resolver = { historySync .urlResolver } >
6464 <Stack />
65- </LinkUrlResolverContext.Provider >
65+ </LinkUrlResolverProvider >
6666);
6767```
6868
Original file line number Diff line number Diff line change @@ -3,22 +3,10 @@ import type {
33 RegisteredActivityName ,
44} from "@stackflow/config" ;
55import { useFlow } from "@stackflow/react" ;
6- import { useContext , useMemo } from "react" ;
7- import { LinkUrlResolverContext } from "./LinkUrlResolverContext" ;
6+ import { useMemo } from "react" ;
7+ import { useLinkUrlResolver } from "./LinkUrlResolverContext" ;
88import { omit } from "./omit" ;
99
10- function useRequiredLinkUrlResolver ( ) {
11- const urlResolver = useContext ( LinkUrlResolverContext ) ;
12-
13- if ( urlResolver === null ) {
14- throw new Error (
15- "Link must be rendered inside a LinkUrlResolverContext.Provider." ,
16- ) ;
17- }
18-
19- return urlResolver ;
20- }
21-
2210type AnchorProps = Omit <
2311 React . DetailedHTMLProps <
2412 React . AnchorHTMLAttributes < HTMLAnchorElement > ,
@@ -37,7 +25,7 @@ export interface LinkProps<K extends RegisteredActivityName>
3725}
3826
3927export function Link < K extends RegisteredActivityName > ( props : LinkProps < K > ) {
40- const urlResolver = useRequiredLinkUrlResolver ( ) ;
28+ const urlResolver = useLinkUrlResolver ( ) ;
4129 const { push, replace } = useFlow ( ) ;
4230
4331 const href = useMemo (
Load diff This file was deleted.
Original file line number Diff line number Diff line change 1+ import { createContext , type ReactNode , useContext } from "react" ;
2+
3+ export interface LinkUrlResolver {
4+ readonly makeActivityUrl : (
5+ activityName : string ,
6+ activityParams : Record < string , any > ,
7+ ) => string ;
8+ }
9+
10+ export const LinkUrlResolverContext = createContext < LinkUrlResolver | null > (
11+ null ,
12+ ) ;
13+
14+ export function LinkUrlResolverProvider ( {
15+ resolver,
16+ children,
17+ } : {
18+ resolver : LinkUrlResolver ;
19+ children : ReactNode ;
20+ } ) {
21+ return (
22+ < LinkUrlResolverContext . Provider value = { resolver } >
23+ { children }
24+ </ LinkUrlResolverContext . Provider >
25+ ) ;
26+ }
27+
28+ export function useLinkUrlResolver ( ) {
29+ const urlResolver = useContext ( LinkUrlResolverContext ) ;
30+
31+ if ( urlResolver === null ) {
32+ throw new Error (
33+ "Link must be rendered inside a LinkUrlResolverContext.Provider." ,
34+ ) ;
35+ }
36+
37+ return urlResolver ;
38+ }
Original file line number Diff line number Diff line change 11export * from "./Link" ;
2- export type { LinkUrlResolver } from "./LinkUrlResolverContext" ;
3- export { LinkUrlResolverContext } from "./LinkUrlResolverContext" ;
2+ export * from "./LinkUrlResolverContext" ;
You can’t perform that action at this time.
0 commit comments