Skip to content

Commit 359eb97

Browse files
committed
fix: rename useHref to createHref
1 parent bca4a14 commit 359eb97

File tree

3 files changed

+51
-20
lines changed

3 files changed

+51
-20
lines changed

src/components/lab/router/README.md

+42-11
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {unstable_RouterProvider as RouterProvider} from '@gravity-ui/uikit/unsta
1414
The following example shows the general pattern.
1515

1616
```jsx
17-
import {useNavigation, useHref} from 'your-router';
17+
import {useNavigation, createHref} from 'your-router';
1818
import {Link} from '@gravity-ui/uikit';
1919
import {unstable_RouterProvider as RouterProvider} from '@gravity-ui/uikit/unstable';
2020

@@ -31,7 +31,7 @@ function App() {
3131
const navigate = useNavigation();
3232

3333
return (
34-
<RouterProvider navigate={navigate} useHref={useHref}>
34+
<RouterProvider navigate={navigate} createHref={createHref}>
3535
<Link
3636
href={{to:"/posts/$postId", params: {postId: '1'}}}
3737
routerOptions={{replace: true}}
@@ -68,23 +68,54 @@ function App() {
6868
### React Router v6
6969

7070
```jsx
71-
import {useNavigate, useHref} from 'react-router-dom';
72-
import {unstable_RouterProvider as RouterProvider} from '@gravity-ui/uikit/unstable';
71+
import {useNavigate, useHref, createBrowserRouter, RouterProvider} from 'react-router-dom';
72+
import {unstable_RouterProvider as UIKitRouterProvider} from '@gravity-ui/uikit/unstable';
7373

74-
import type {NavigateOptions} from 'react-router-dom';
74+
import type {NavigateOptions, To} from 'react-router-dom';
7575

7676
declare module '@gravity-ui/uikit' {
7777
interface RouterConfig {
78+
href: To
7879
routerOptions: NavigateOptions
7980
}
8081
}
8182

82-
function App() {
83-
const navigate = useNavigate();
83+
function withRouterProvider(Component: React.ComponentType) {
84+
return function RouterProviderComponent() {
85+
const navigate = useNavigate();
86+
return (
87+
<UIKitRouterProvider navigate={navigate} createHref={useHref}>
88+
<Component />
89+
</UIKitRouterProvider>
90+
);
91+
}
92+
}
8493

85-
return (
86-
<RouterProvider navigate={navigate} useHref={useHref}>{/*...*/}</RouterProvider>
87-
);
94+
const router = createBrowserRouter([
95+
{
96+
path: '/',
97+
Component: withRouterProvider(Layout),
98+
children: [
99+
{
100+
path: '/',
101+
Component: withRouterProvider(Home),
102+
}
103+
{
104+
path: 'posts',
105+
Component: withRouterProvider(Posts),
106+
children: [
107+
{
108+
path: ':postId',
109+
Component: withRouterProvider(Post),
110+
}
111+
]
112+
},
113+
],
114+
},
115+
]);
116+
117+
function App() {
118+
return <RouterProvider router={router} />;
88119
}
89120
```
90121

@@ -162,7 +193,7 @@ function App() {
162193
return (
163194
<RouterProvider
164195
router={(to, opts) => router.navigate({...to, ...opts})}
165-
useHref={(to) => router.buildLocation(to).href}
196+
createHref={(to) => router.buildLocation(to).href}
166197
>
167198
{/*...*/}
168199
</RouterProvider>

src/components/lab/router/__stories__/RouterProvider.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const Default = {
3030
return (
3131
<RouterProvider
3232
navigate={(href, opts) => console.log('Navigate to: ', {href, opts})}
33-
useHref={(href: HrefType) =>
33+
createHref={(href: HrefType) =>
3434
typeof href === 'string' ? href : href.to.replace('$pastId', href.params.pastId)
3535
}
3636
>

src/components/lab/router/router.tsx

+8-8
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ interface RouterProps {
99
href: Href,
1010
routerOptions: RouterOptions | undefined,
1111
) => boolean;
12-
useHref: (href: Href) => string;
12+
useCreateHref: (href: Href, routerOptions?: RouterOptions) => string;
1313
}
1414

1515
const routerContext = React.createContext<RouterProps>({
1616
openLink: () => false,
17-
useHref: (href) => href,
17+
useCreateHref: (href) => href,
1818
});
1919

2020
export interface RouterProviderProps {
2121
navigate: (href: Href, routerOptions: RouterOptions | undefined) => void;
22-
useHref?: (href: Href) => string;
22+
createHref?: (href: Href, routerOptions?: RouterOptions) => string;
2323
children: React.ReactNode;
2424
}
2525

26-
export function RouterProvider({navigate, useHref, children}: RouterProviderProps) {
26+
export function RouterProvider({navigate, createHref, children}: RouterProviderProps) {
2727
const value: RouterProps = React.useMemo(
2828
() => ({
2929
openLink: (link, modifiers, href, routerOptions) => {
@@ -33,9 +33,9 @@ export function RouterProvider({navigate, useHref, children}: RouterProviderProp
3333
}
3434
return false;
3535
},
36-
useHref: useHref || ((href: Href) => href),
36+
useCreateHref: createHref || ((href: Href) => href),
3737
}),
38-
[navigate, useHref],
38+
[navigate, createHref],
3939
);
4040

4141
return <routerContext.Provider value={value}>{children}</routerContext.Provider>;
@@ -89,8 +89,8 @@ interface LinkProps {
8989
}
9090

9191
export function useLinkProps(props: LinkProps) {
92-
const {useHref, openLink} = useRouter();
93-
const href = useHref(props.href ?? '');
92+
const {useCreateHref, openLink} = useRouter();
93+
const href = useCreateHref(props.href ?? '', props.routerOptions);
9494
return {
9595
href: props.href ? href : undefined,
9696
hrefLang: props.hrefLang,

0 commit comments

Comments
 (0)