import type { AccessCode } from '@seamapi/types/connect' import { DateTime } from 'luxon' import { useDevice } from 'lib/seam/devices/use-device.js' import { DotDivider } from 'lib/ui/layout/DotDivider.js' import { useIsDateInPast } from 'lib/ui/use-is-date-in-past.js' export function CodeDetails(props: { accessCode: AccessCode }): JSX.Element { const { accessCode } = props const { device } = useDevice({ device_id: accessCode.device_id }) return (
{device?.properties.name} {t.code}: {accessCode.code}
) } function Duration(props: { accessCode: AccessCode }): JSX.Element | null { const { accessCode } = props const hasStarted = useIsDateInPast('starts_at' in accessCode ? accessCode?.starts_at : null) ?? false if (accessCode.type === 'ongoing') { return ( {t.ends}: {t.never} ) } if (hasStarted && accessCode.ends_at != null) { return ( {t.ends}: {formatDate(accessCode.ends_at)}{' '} ) } if (hasStarted && accessCode.starts_at != null) { return ( {t.starts}: {formatDate(accessCode.starts_at)} ) } return null } const formatDate = (date: string): string => DateTime.fromISO(date).toLocaleString({ month: 'long', day: 'numeric', }) const t = { code: 'Code', starts: 'Starts', ends: 'Ends', never: 'Never', }