diff --git a/src/lib/NavigationView.tsx b/src/lib/NavigationView.tsx index 1bca95433..874857a05 100644 --- a/src/lib/NavigationView.tsx +++ b/src/lib/NavigationView.tsx @@ -4,7 +4,7 @@ import { useNavigation, type View } from 'lib/NavigationProvider.js' import AccessCodeDetails from 'lib/ui/AccessCodeDetails/AccessCodeDetails.js' interface NavigationViewProps { - children: JSX.Element + children: React.ReactNode } export function NavigationView({ children: rootView }: NavigationViewProps) { @@ -19,14 +19,18 @@ export function NavigationView({ children: rootView }: NavigationViewProps) { } function Subview({ view }: { view: View }) { + const { goBack } = useNavigation() + switch (view.name) { case 'device_detail': - return + return case 'access_code_detail': - return + return ( + + ) case 'device_table': - return + return case 'access_code_table': - return + return } } diff --git a/src/lib/SeamProvider.tsx b/src/lib/SeamProvider.tsx index 47f71387c..438d9184a 100644 --- a/src/lib/SeamProvider.tsx +++ b/src/lib/SeamProvider.tsx @@ -9,6 +9,9 @@ import { } from 'react' import type { Seam, SeamClientOptions } from 'seamapi' +import NavigationProvider from 'lib/NavigationProvider.js' +import { NavigationView } from 'lib/NavigationView.js' + declare global { // eslint-disable-next-line no-var var seam: SeamProviderProps | undefined @@ -68,7 +71,11 @@ export function SeamProvider({ return (
- {children} + + + {children} + +
) diff --git a/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx b/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx index aa7449e47..3465e2a02 100644 --- a/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx +++ b/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx @@ -8,10 +8,12 @@ import { ContentHeader } from 'lib/ui/layout/ContentHeader.js' export interface AccessCodeDetailsProps { accessCodeId: string + onBack?: () => void } export default function AccessCodeDetails({ accessCodeId, + onBack, }: AccessCodeDetailsProps) { const { isLoading, data: accessCode } = useFakeAccessCode({ access_code_id: accessCodeId, @@ -25,7 +27,7 @@ export default function AccessCodeDetails({ return (
- +
{t.accessCode} diff --git a/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx b/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx index c140469f1..5c42d35b8 100644 --- a/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx +++ b/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx @@ -11,9 +11,17 @@ import { TableTitle } from 'lib/ui/Table/TableTitle.js' import { Caption } from 'lib/ui/typography/Caption.js' import { Title } from 'lib/ui/typography/Title.js' -export function AccessCodeTable(props: { deviceId: string }): JSX.Element { +interface AccessCodeTableProps { + deviceId: string + onBack?: () => void +} + +export function AccessCodeTable({ + deviceId, + onBack, +}: AccessCodeTableProps): JSX.Element { const { accessCodes } = useAccessCodes({ - device_id: props.deviceId, + device_id: deviceId, }) const { show } = useNavigation() @@ -22,7 +30,7 @@ export function AccessCodeTable(props: { deviceId: string }): JSX.Element { return (
- + {t.accessCodes} ({accessCodes.length}) diff --git a/src/lib/ui/DeviceDetails/DeviceDetails.tsx b/src/lib/ui/DeviceDetails/DeviceDetails.tsx index b885c65f4..5c5c5ec92 100644 --- a/src/lib/ui/DeviceDetails/DeviceDetails.tsx +++ b/src/lib/ui/DeviceDetails/DeviceDetails.tsx @@ -12,10 +12,11 @@ import { ContentHeader } from 'lib/ui/layout/ContentHeader.js' export interface DeviceDetailsProps { deviceId: string + onBack?: () => void } export function DeviceDetails(props: DeviceDetailsProps): JSX.Element | null { - const { deviceId } = props + const { deviceId, onBack } = props const { isLoading: isLoadingDevice, device } = useFakeDevice({ device_id: deviceId, @@ -46,7 +47,7 @@ export function DeviceDetails(props: DeviceDetailsProps): JSX.Element | null { return (
- +
diff --git a/src/lib/ui/DeviceTable/DeviceTable.stories.tsx b/src/lib/ui/DeviceTable/DeviceTable.stories.tsx index 8aecf12da..c1eea1407 100644 --- a/src/lib/ui/DeviceTable/DeviceTable.stories.tsx +++ b/src/lib/ui/DeviceTable/DeviceTable.stories.tsx @@ -1,8 +1,6 @@ import { Button, Dialog, DialogActions } from '@mui/material' import type { Meta, StoryObj } from '@storybook/react' -import NavigationProvider from 'lib/NavigationProvider.js' -import { NavigationView } from 'lib/NavigationView.js' import { DeviceTable, type DeviceTableProps, @@ -65,11 +63,7 @@ function WithNavigationComponent(props: DeviceTableProps) {
- - - - - +
- + {t.devices} ({deviceCount}) diff --git a/src/lib/ui/layout/ContentHeader.tsx b/src/lib/ui/layout/ContentHeader.tsx index 0693848d8..edd0c7dd2 100644 --- a/src/lib/ui/layout/ContentHeader.tsx +++ b/src/lib/ui/layout/ContentHeader.tsx @@ -1,17 +1,18 @@ import { ArrowBackIcon } from 'lib/icons/ArrowBack.js' -import { useNavigation } from 'lib/NavigationProvider.js' -export function ContentHeader(props: { title?: string }): JSX.Element | null { - const { title } = props +export function ContentHeader(props: { + title?: string + onBack?: () => void +}): JSX.Element | null { + const { title, onBack } = props - const { goBack } = useNavigation() - if (!title && !goBack) { + if (!title && !onBack) { return null } return (
- {goBack && } + {onBack && } {title}
)