Skip to content

Commit cd3cea7

Browse files
refactor(link): guard resolver before URL memoization
1 parent 3d56889 commit cd3cea7

1 file changed

Lines changed: 17 additions & 17 deletions

File tree

extensions/link/src/Link.tsx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ import { useContext, useMemo } from "react";
77
import { LinkUrlResolverContext } from "./LinkUrlResolverContext";
88
import { 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+
1022
type AnchorProps = Omit<
1123
React.DetailedHTMLProps<
1224
React.AnchorHTMLAttributes<HTMLAnchorElement>,
@@ -25,25 +37,13 @@ export interface LinkProps<K extends RegisteredActivityName>
2537
}
2638

2739
export 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

Comments
 (0)