// ---- 1. Parser:自定义 Transformer 示例(以 colour_data 为例) ----
type TColorData = { hue: number; saturation: number; value: number };
class ColourTransformer implements Transformer<TColorData> {
defaultValue = { hue: 10, saturation: 1000, value: 1000 };
uuid = 'colour_data';
parser(value: string): TColorData {
if (value.length !== 12) return this.defaultValue;
const step = generateDpStrStep(value);
return { hue: step(4).value, saturation: step(4).value, value: step(4).value };
}
formatter(data: TColorData) {
const { hue, saturation, value } = data;
return `${decimalToHex(hue, 4)}${decimalToHex(saturation, 4)}${decimalToHex(value, 4)}`;
}
}
// ---- 2. 配置 dpKit 并注入 SmartDevicesManager ----
import { createDpKit, SmartDevicesManager, useStructuredDevicesProps } from '@ray-js/panel-sdk';
import { lampSchemaMap } from '@/devices/schema';
const dpKit = createDpKit({
protocols: {
[lampSchemaMap.colour_data.code]: new ColourTransformer(),
}
});
const deviceManager = new SmartDevicesManager();
// batchAdd 时注入 dp-kit 拦截器
deviceManager.batchAdd([
{ key: 'lamp1', deviceId: 'xxx_device_id_1', interceptors: dpKit.interceptors },
{ key: 'lamp2', deviceId: 'xxx_device_id_2', interceptors: dpKit.interceptors },
]);
// ---- 3. 页面组件消费结构化数据 ----
export default function ColourDataList() {
// 推荐:精确选用需要的状态,例如 p => p.lamp1?.colour_data
const structured = useStructuredDevicesProps(p => p);
return (
<View>
{Object.keys(structured ?? {}).map(key => (
<Text key={key}>
{key} colour_data: hue={structured[key]?.colour_data?.hue}
</Text>
))}
</View>
);
}