mirror of
https://github.com/Steffo99/sophon.git
synced 2024-12-23 07:14:21 +00:00
✨ Complete the LocationViewSetRouter
This commit is contained in:
parent
d8ed8c77e1
commit
e66060aaf1
1 changed files with 20 additions and 4 deletions
|
@ -2,19 +2,35 @@ import * as React from "react"
|
||||||
import * as ReactDOM from "react-dom"
|
import * as ReactDOM from "react-dom"
|
||||||
import {ViewSetRouter, ViewSetRouterProps} from "./ViewSetRouter";
|
import {ViewSetRouter, ViewSetRouterProps} from "./ViewSetRouter";
|
||||||
import {useLocation} from "@reach/router";
|
import {useLocation} from "@reach/router";
|
||||||
|
import {SplitPath, splitPath} from "../../utils/PathSplitter";
|
||||||
|
import {Detail} from "../../utils/DjangoTypes";
|
||||||
|
|
||||||
|
|
||||||
interface LocationViewSetRouterProps<Resource> extends ViewSetRouterProps<Resource> {
|
interface LocationViewSetRouterProps<Resource extends Detail> extends ViewSetRouterProps<Resource> {
|
||||||
|
pkKey: keyof Resource,
|
||||||
|
splitPathKey: keyof SplitPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function LocationViewSetRouter<Resource>({...props}: LocationViewSetRouterProps<Resource>): JSX.Element {
|
export function LocationViewSetRouter<Resource extends Detail>({pkKey, splitPathKey, viewSet, ...props}: LocationViewSetRouterProps<Resource>): JSX.Element {
|
||||||
|
// Get the current page location
|
||||||
const location = useLocation()
|
const location = useLocation()
|
||||||
|
|
||||||
|
// Split the path into multiple segments
|
||||||
|
const expectedPk =
|
||||||
|
React.useMemo(
|
||||||
|
() => splitPath(location.pathname)[splitPathKey],
|
||||||
|
[location]
|
||||||
|
)
|
||||||
|
|
||||||
|
// Find the ManagedResource matching the expectedPk
|
||||||
|
const selection =
|
||||||
|
React.useMemo(
|
||||||
|
() => viewSet.resources?.filter(res => res.value[pkKey] === expectedPk)[0],
|
||||||
|
[viewSet, expectedPk]
|
||||||
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewSetRouter {...props}/>
|
<ViewSetRouter viewSet={viewSet} selection={selection} {...props}/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue