1
Fork 0
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:
Steffo 2021-09-30 01:30:38 +02:00 committed by Stefano Pigozzi
parent d8ed8c77e1
commit e66060aaf1

View file

@ -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}/>
) )
} }