import { GetSmartDeviceModelDevInfo, GetSmartDeviceModelDpSchema, SmartDeviceModelNetwork, SmartDeviceModelBluetooth, ReadonlyDpSchemaList } from '../types/SdmModel'; type DeviceData = { /** * 设备信息(含 codeIds / idCodes 进行功能点 Code ↔ ID 互查) * @typeOverride devInfo DevInfo */ devInfo: GetSmartDeviceModelDevInfo; /** * 功能点模型集合(key 为 dpCode) * @typeOverride dpSchema DpSchema */ dpSchema: GetSmartDeviceModelDpSchema; /** * 网络连接状态 * @typeOverride network NetworkState */ network: SmartDeviceModelNetwork; /** * 蓝牙适配器状态 * @typeOverride bluetooth { available: boolean; } */ bluetooth: SmartDeviceModelBluetooth; }; /** * 获取智能设备信息、功能点模型、网络状态、蓝牙状态,数据变动时驱动组件重新渲染。 * 不传 selector 时返回完整 DeviceData,任何字段变化都触发重渲染,推荐始终传入 selector 仅选取所需功能点以优化渲染性能。 * @public * @since @ray-js/panel-sdk 1.2.0 * @param selector - 选择器函数,入参为包含 devInfo、dpSchema、network、bluetooth 的设备数据对象,返回值类型由 selector 选择器决定,可能为任意值 * @typeOverride selector (device: DeviceData) => any; * @param equalityFn - 自定义比较函数,返回 true 则不触发重渲染 * @typeOverride equalityFn (prevDeviceData: DeviceData, nextDeviceData: DeviceData) => boolean; * @returns 返回值类型由 selector 选择器决定,可能为任意值 * @typeOverride returns DeviceData * @remarks * 基于 sdm 实例实现。必须在 SdmProvider 内部使用。 * 使用前请注意检查项目是否已挂载了 SdmProvider,项目接入可参考 [智能设备模型 - 使用](/cn/miniapp/solution-panel/ability/common/sdm/usage),全新项目可直接基于 [public-sdm](https://github.com/Tuya-Community/tuya-ray-materials/tree/main/template/PublicSdmTemplate) 示例项目进行开发。 * @example 获取完整设备数据 * ```tsx * import { useDevice } from '@ray-js/panel-sdk'; * * function Home() { * const { devInfo, network } = useDevice(); * return {devInfo.name} - 网络: {network.isConnected ? '已连接' : '断开'}; * } * ``` * @example 订阅网络状态 * ```tsx * import { useDevice } from '@ray-js/panel-sdk'; * * function Home() { * const isConnected = useDevice(device => device.network.isConnected); * return 网络: {isConnected ? '已连接' : '断开'}; * } * ``` * @example 自定义 rerender * ```tsx * // 仅网络连接变化时更新 * const network = useDevice( * device => device.network, * (prev, next) => prev.isConnected === next.isConnected, * ); * ``` * @example 获取功能点模型集合 * ```tsx * const dpSchema = useDevice(device => device.dpSchema); * // dpSchema: { switch_led: { code, property, type, mode, ... }, ... } * ``` * @example 通过 codeIds / idCodes 进行功能点 Code ↔ ID 互查 * ```tsx * const devInfo = useDevice(device => device.devInfo); * const dpId = devInfo.codeIds['switch_led']; // code → id * const dpCode = devInfo.idCodes[1]; // id → code * ``` * @example 群组环境兼容 * ```tsx * // 群组下 devInfo 实际为 GroupInfo,部分字段需适配 * import { useDevice } from '@ray-js/panel-sdk'; * import { Text, getLaunchOptionsSync } from '@ray-js/ray'; * * function Home() { * const isGroup = !!getLaunchOptionsSync()?.query?.groupId; * const devInfo = useDevice(d => d.devInfo); * * const id = isGroup ? devInfo.groupId : devInfo.devId; * const name = devInfo.name || (isGroup ? devInfo.groupName : '设备'); * const isOnline = isGroup * ? devInfo.deviceList?.some(d => d.isOnline) * : devInfo.isCloudOnline; * * return {name}({id}) - {isOnline ? '在线' : '离线'}; * } * ``` */ export declare function useDevice(selector?: (device: DeviceData) => Device, equalityFn?: (a: Device, b: Device) => boolean): Device; export {};