@@ -7,6 +7,18 @@ import { useContext, useMemo } from "react";
77import { LinkUrlResolverContext } 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+
1022type AnchorProps = Omit <
1123 React . DetailedHTMLProps <
1224 React . AnchorHTMLAttributes < HTMLAnchorElement > ,
@@ -25,25 +37,13 @@ export interface LinkProps<K extends RegisteredActivityName>
2537}
2638
2739export function Link < K extends RegisteredActivityName > ( props : LinkProps < K > ) {
28- const urlResolver = useContext ( LinkUrlResolverContext ) ;
40+ const urlResolver = useRequiredLinkUrlResolver ( ) ;
2941 const { push, replace } = useFlow ( ) ;
3042
31- const href = useMemo ( ( ) => {
32- if ( urlResolver === null ) {
33- return undefined ;
34- }
35-
36- return urlResolver . makeActivityUrl (
37- props . activityName ,
38- props . activityParams ,
39- ) ;
40- } , [ urlResolver , props . activityName , props . activityParams ] ) ;
41-
42- if ( urlResolver === null ) {
43- throw new Error (
44- "Link must be rendered inside a LinkUrlResolverContext.Provider." ,
45- ) ;
46- }
43+ const href = useMemo (
44+ ( ) => urlResolver . makeActivityUrl ( props . activityName , props . activityParams ) ,
45+ [ urlResolver , props . activityName , props . activityParams ] ,
46+ ) ;
4747
4848 const anchorProps = omit ( props , [
4949 // Custom Props
0 commit comments