lookingglass/hyperglass/ui/hooks/use-device.ts
2021-12-19 23:02:01 -07:00

27 lines
733 B
TypeScript

import { useCallback, useMemo } from 'react';
import { useConfig } from '~/context';
import type { Device } from '~/types';
export type UseDeviceReturn = (
/** Device's ID, e.g. the device.name field.*/
deviceId: string,
) => Nullable<Device>;
/**
* Get a device's configuration from the global configuration context based on its name.
*/
export function useDevice(): UseDeviceReturn {
const { devices } = useConfig();
const locations = useMemo<Device[]>(
() => devices.map(group => group.locations).flat(),
[devices],
);
function getDevice(id: string): Nullable<Device> {
return locations.find(device => device.id === id) ?? null;
}
return useCallback<UseDeviceReturn>(getDevice, [locations]);
}