0.2.31 • Published 6 months ago
@ray-js/lamp-module-schedule v0.2.31
English | 简体中文
@ray-js/lamp-module-schedule
lamp-module-schedule
install
$ npm install @ray-js/lamp-module-schedule
$ yarn add @ray-js/lamp-module-schedule
// or
$ npm install @ray-js/components-ty-lamp
$ yarn add @ray-js/components-ty-lampPreview
![]()
Usage
- Props And Methods
interface TimerData {
id: string; // 定时组id, 当为本地定时时与timerId一致
timerId?: string; // 定时id, 当为本地定时时与id一致
weeks: number[]; // 定时周期[0,0,0,0,0,0,0] => 对应星期的“日一二三四五六”, 1为开启,0为关闭;0000000 => 仅一次;1111111 => 每天
opened: boolean; // 是否开启
time: string; // 定时时间
dps: {
[v: string]: any;
};
}
type TTimer = {
status: any;
time: string;
loops: string;
dps: Record<string, any>;
id?: string;
timerId?: string;
};
interface IProps {
/**
* @description.zh 组件样式
* @description.en Component style
* @default {}
*/
style?: React.CSSProperties;
/**
* @description.zh 设置主题样式
* @description.en Set theme style
* @default {}
*/
themeConfig?: {
// background color
background?: string;
// 主题
theme?: 'light' | 'dark';
// brand color
brandColor?: string;
// font color
fontColor?: {
titlePrimary?: string; // Main title text color
textPrimary?: string; // Main text color
textRegular?: string; // regular text color
};
// card style
card?: {
background?: string;
borderColor?: string;
textPrimary?: string;
textRegular?: string;
};
// Time picker style
timer?: {
background?: string;
timerPickerBorderColor?: string;
customStyle: {
color?: string;
borderColor?: string;
boxShadowColor?: string;
background?: string;
};
};
};
/**
* @description.zh 是否展示顶部导航栏
* @description.en Whether to display the top navigation bar
* @default
*/
showHeader?: boolean;
/**
* @description.zh 是否展示胶囊按钮
* @description.en Whether to display the capsule button
* @default true 默认展示
*/
showMenuButton?: boolean;
/**
* @description.zh 自定义计划包裹层的样式
* @description.en Customize the style of the planned wrap layer
* @default {}
*/
customItemContainerStyle?: React.CSSProperties;
/**
* @description.zh 设备id, 如果是单设备传入devId,如果群组传入groupId
* @description.en Device id
* @default
*/
devId?: string;
/**
* @description.zh 群组设备id,如果是单设备传入devId,如果群组传入groupId
* @description.en Group id
* @default
*/
groupId?: string;
/**
* @description.zh 是否支持倒计时
* @description.en Whether to support the countdown
* @default false
*/
supportCountdown?: boolean;
/**
* @description.zh 是否支持本地定时, 群组不支持本地定时
* @description.en Whether to support the local time,Group does not support local time
* @default false
*/
supportRctTimer?: boolean;
/**
* @description.zh 是否支持云定时,如果云定时和本地定时都支持,本地定时优先级更高
* @description.en Whether to support the cloud, if cloud timed and local support, local time higher priority
* @default false
*/
supportCloudTimer?: boolean;
/**
* @description.zh 渲染自定义计划的功能
* @description.en The ability to render custom plans
* @default {}
*/
renderCustomItem?: () => React.ReactElement;
/**
* @description.zh 定时功能配置项
* @description.en Timing function configuration items
* @default {}
*/
timingConfig?: {
timerLimitNum?: number; // "Default local timing is 10, while cloud timing is 30."
actionList?: {
label: string; // Title
// The list of "dp" values to be saved for the selected rows
dpList: {
value: string | number | boolean, // dp value
code: string, // dp code
id: number; // dp id
}[],
type: 'custom'; // Custom complex scenario action
callback: (res: TTimer) => void; // Callback function for custom complex scenario action
renderCustomActionText: () => string; // Customize the text for rendering a complex scene action
}[],
};
/**
* @description.zh 倒计时功能配置项
* @description.en The countdown function configuration items
* @default {}
*/
countdownConfig?: {
countdown: number, // 倒数计剩余秒数
};
/**
* @description.zh 倒计时切换时的回调函数
* @description.en The countdown when switching the callback function
* @param countdown: 倒数计数值 单位以s计数 / Countdown numerical unit s count
* @default
*/
onCountdownToggle?: (countdown: number) => void;
/**
* @description.zh 定时数据被修改之前触发,如果返回false,将不会触发后续逻辑,一般用于定时数据的校验
* @description.en Timing trigger before data is modified, if return false, it will do not trigger after logic, commonly used in data check regularly
* @default
*/
onBeforeTimerChange?: (
timerDatas: TimerData | []TimerData,
type: 'add' | 'remove' | 'update' | 'init'
) => boolean;
/**
* @description.zh 添加本地定时的回调
* @description.en Add local regular callback
* @default
*/
onRtcTimeAdd?: (timerData: TimerData) => void;
/**
* @description.zh 删除本地定时的回调
* @description.en Delete local regular callback
* @default
*/
onRtcTimeRemove?: (timerData: TimerData) => void;
/**
* @description.zh 更新本地定时的回调
* @description.en Update the local regular callback
* @default
*/
onRtcTimeUpdate?: (timerData: TimerData) => void;
}- useTriggerChildrenFunction introduce
// import
import LampModuleSchedule, { useTriggerChildrenFunction } from '@ray-js/lamp-module-schedule';
// usage
// "timerToggle" The switch status of a scheduled item is changed
// "closeAllTimer" Turn off all timing
const triggerType = 'timerToggle'; // Method that triggers child components
const { run: runTimerToggle } = useTriggerChildrenFunction(triggerType);
const triggerType1 = 'closeAllTimer';
const { run: runCloseAllTimer } = useTriggerChildrenFunction(triggerType1);
setTimeout(() => {
const timerId = 1; // timerId
const timerStatus = false; // 定时开启关闭状态
runTimerToggle(timerId, timerStatus);
}, 3000);// The first reference method
import LampModuleSchedule, {
useCountdownTime,
useCountdownDpPull,
useTriggerChildrenFunction,
} from '@ray-js/lamp-module-schedule';
// The second reference method
import { LampModuleSchedule } from '@ray-js/components-ty-lamp';
const { useCountdownTime, useCountdownDpPull, useTriggerChildrenFunction } = LampModuleSchedule;
const dpCodes = {
switchCode: 'switch_led',
countdownCode: 'countdown',
rtcTimerCode: 'rtc_timer',
musicCode: 'dreamlightmic_music_data',
workModeCode: 'woke_mode',
};
// According to the requirements to adjust
const actionList = [
{
label: '开启', // 开启
dpList: [
{
value: true,
code: dpCodes.switchCode,
id: 1,
},
],
},
{
label: '关闭', // 关闭
dpList: [
{
value: false,
code: dpCodes.switchCode,
id: 1,
},
],
},
{
label: '摇滚',
type: 'custom', // 自定义复杂场景动作
dpList: [],
callback(res: TTimer) {
// 注意如果本函数要生效,必须设置上面的 type: 'custom',
// 可以跳转新页面去设置
// 设置完后 重新 设置下新的dpList的值
console.log(res, 'callbackcallback');
router.push('/test');
},
renderCustomActionText() {
return '自定义'; // 自定义action的文案
},
},
];
const Main = () => {
const state = useSelector(_state => _state);
const { countdown } = state.dpState;
const [_countdown, setCountdown] = useState(countdown);
// 由于dp获取后不会变化,倒计时数据需要自行进行处理
useCountdownTime(countdown, (_countdown: number) => {
// 进行倒计时更新
setCountdown(_countdown);
if (_countdown <= 0) {
// 下发dp
}
});
// Under sigmesh protocol, it is necessary to actively pull the countdown dp value to prevent the countdown dp from being out of sync
const dpId = 1; // TODO:
useCountdownDpPull(state.devInfo.devId, dpId);
const { run: runTimerToggle } = useTriggerChildrenFunction('timerToggle');
// mock dp Triggers the timing status change
useEffect(() => {
setTimeout(() => {
const timerId = 1;
const timerStatus = false;
runTimerToggle(timerId, timerStatus);
}, 4000),
}, []);
return (
<LampModuleSchedule
devId={state.devInfo?.devId}
groupId={state.devInfo?.groupId}
supportCountdown
supportCloudTimer
supportRctTimer
// showHeader={false}
countdownConfig={{
countdown: _countdown,
}}
timingConfig={{
actionList,
timerLimitNum: 6,
}}
themeConfig={{
theme: 'dark', // Black theme, default white theme
// Overall background color
background: '#0E263E',
// Brand color
brandColor: '#00BE9B',
// Font color
fontColor: {
titlePrimary: '#FFFFFF', // Main title text color
textPrimary: '#FFFFFF', // Main text color
textRegular: 'rgba(255, 255, 255, 0.5)', // Regular text color
},
// Card style
card: {
background: 'rgba(35, 58, 82, 0.78)',
borderColor: 'rgba(255, 255, 255, 0.102054)',
textPrimary: '#fff',
textRegular: 'rgba(255, 255, 255, 0.5)',
},
// Time selector style
timer: {
background: 'rgba(14, 38, 62, 1)', // background
timerPickerBorderColor: 'rgba(31, 48, 64, 1)', // Divider color
customStyle: {
color: '#fff', // Custom cycle text color
borderColor: 'rgba(255, 255, 255, 0.1)', // Customize the periodic border color
background: 'rgba(35, 58, 82, 0.78)', // Custom cycle card background color
},
},
}}
onBeforeTimerChange={(res, type, timerList) => {
console.log(res, type, timerList, 'onBeforeTimerChange');
// 支持异步
// return new Promise(resolve => {
// setTimeout(() => {
// resolve(true);
// }, 100);
// });
// 同步
return true;
}}
onCountdownToggle={(_countdown: number) => {
console.log(_countdown, '_countdown_countdown');
}}
onRtcTimeAdd={timerData => {
console.log(timerData, 'onRtcTimeAdd');
}}
onRtcTimeRemove={timerData => {
console.log(timerData, 'onRtcTimeRemove');
}}
onRtcTimeUpdate={timerData => {
console.log(timerData, 'onRtcTimeUpdate');
}}
/>
);
};Notes:
Timing countdown module
- The countdown supports up to 24 hours, and supports minute-by-minute;
- The solar solution does not support countdown, but the strong power solution does;
Module logic
- Single device uses RTC timing, and the group uses cloud timing. If a single device has both RTC timing and cloud timing, the default is RTC timing;
0.2.28-beta-1
11 months ago
0.2.31-beta-1
7 months ago
0.2.31-beta-3
6 months ago
0.2.31-beta-2
6 months ago
0.2.30-beta-1
11 months ago
0.2.30
11 months ago
0.2.31
6 months ago
0.2.22-beta-1
2 years ago
0.2.21-beta-1
2 years ago
0.2.20-beta-1
2 years ago
0.2.19-beta-1
2 years ago
0.2.18-beta-2
2 years ago
0.2.18-beta-1
2 years ago
0.2.17-beta-1
2 years ago
0.2.16-beta-1
2 years ago
0.2.15-beta-1
2 years ago
0.2.16
2 years ago
0.2.14-beta-1
2 years ago
0.2.13-beta-1
2 years ago
0.2.12-beta-1
2 years ago
0.2.3-beta-1
2 years ago
0.2.2-beta-1
2 years ago
0.2.1-beta-1
2 years ago
0.2.0-beta-1
2 years ago
0.1.18-beta-1
2 years ago
0.1.19-beta-1
2 years ago
0.2.10-beta-1
2 years ago
0.2.11-beta-1
2 years ago
0.1.20-beta-1
2 years ago
0.1.17-beta-1
2 years ago
0.1.16-beta-1
2 years ago
0.1.15-beta-1
2 years ago
0.1.14-beta-1
2 years ago
0.2.8-beta-1
2 years ago
0.2.6-beta-1
2 years ago
0.2.4-beta-1
2 years ago
0.2.9
2 years ago
0.2.9-beta-1
2 years ago
0.2.5-beta-1
2 years ago
0.2.7-beta-1
2 years ago
0.1.6-beta-1
3 years ago
0.1.5-beta-1
3 years ago
0.1.4-beta-1
3 years ago
0.1.9-beta-1
3 years ago
0.1.7-beta-1
3 years ago
0.1.10-beta-1
3 years ago
0.1.8-beta-1
3 years ago
0.1.13-beta-1
2 years ago
0.1.12-beta-1
2 years ago
0.1.11-beta-1
3 years ago
0.1.12-beta-2
2 years ago
0.1.3-beta-1
3 years ago
0.1.2-beta-1
3 years ago
0.1.1-beta-1
3 years ago
0.1.0
3 years ago
0.1.0-beta-1
3 years ago