import type { LockDevice } from 'lib/seam/locks/lock-device.js' import { useLock } from 'lib/seam/locks/use-lock-door.js' import { useToggleLock } from 'lib/seam/locks/use-toggle-lock.js' import { useUnlock } from 'lib/seam/locks/use-unlock-door.js' import { Button } from 'lib/ui/Button.js' import type { SnackbarVariant } from 'lib/ui/Snackbar/Snackbar.js' interface LockDeviceLockButtonsProps { device: LockDevice disableLockUnlock: boolean setSnackbarVisible: (visible: boolean) => void setSnackbarVariant: (variant: SnackbarVariant) => void } export function LockDeviceLockButtons({ device, setSnackbarVariant, setSnackbarVisible, disableLockUnlock, }: LockDeviceLockButtonsProps): JSX.Element | null { const lockStatus = device.properties.locked ? t.locked : t.unlocked const toggleLockLabel = device.properties.locked ? t.unlock : t.lock const toggleLock = useToggleLock({ onSuccess: () => { setSnackbarVisible(true) setSnackbarVariant('success') }, onError: () => { setSnackbarVisible(true) setSnackbarVariant('error') }, }) const lock = useLock({ onSuccess: () => { setSnackbarVisible(true) setSnackbarVariant('success') }, onError: () => { setSnackbarVisible(true) setSnackbarVariant('error') }, }) const unlock = useUnlock({ onSuccess: () => { setSnackbarVisible(true) setSnackbarVariant('success') }, onError: () => { setSnackbarVisible(true) setSnackbarVariant('error') }, }) if (disableLockUnlock) { return null } if ( device.can_remotely_lock === true && device.can_remotely_unlock === true ) { return (
{t.lockStatus} {lockStatus}
) } if (device.can_remotely_lock === true) { return (
{t.lockStatus} {lockStatus}
) } if (device.can_remotely_unlock === true) { return (
{t.lockStatus} {lockStatus}
) } return null } const t = { unlock: 'Unlock', lock: 'Lock', locked: 'Locked', unlocked: 'Unlocked', lockStatus: 'Lock status', statusUnknown: 'Unknown', }