mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 16:29:51 +03:00
scheduler: onChange and conditions
This commit is contained in:
@@ -87,7 +87,7 @@ const Scheduler: FC = () => {
|
||||
|
||||
const schedule_theme = useTheme({
|
||||
Table: `
|
||||
--data-table-library_grid-template-columns: 36px 324px 50px 192px repeat(1, minmax(100px, 1fr)) 160px;
|
||||
--data-table-library_grid-template-columns: 36px 210px 100px 192px repeat(1, minmax(100px, 1fr)) 160px;
|
||||
`,
|
||||
BaseRow: `
|
||||
font-size: 14px;
|
||||
@@ -198,7 +198,7 @@ const Scheduler: FC = () => {
|
||||
active: false,
|
||||
deleted: false,
|
||||
flags: 0,
|
||||
time: '12:00',
|
||||
time: '',
|
||||
cmd: '',
|
||||
value: '',
|
||||
name: ''
|
||||
@@ -216,11 +216,21 @@ const Scheduler: FC = () => {
|
||||
<Box>
|
||||
<Typography
|
||||
sx={{ fontSize: 11 }}
|
||||
color={(si.flags & flag) === flag ? 'primary' : 'grey'}
|
||||
color={
|
||||
si.flags >= ScheduleFlag.SCHEDULE_TIMER && si.flags !== flag
|
||||
? 'gray'
|
||||
: (si.flags & flag) === flag
|
||||
? 'primary'
|
||||
: 'grey'
|
||||
}
|
||||
>
|
||||
{flag === ScheduleFlag.SCHEDULE_TIMER
|
||||
? LL.TIMER(0)
|
||||
: dow[Math.log(flag) / Math.log(2)]}
|
||||
: flag === ScheduleFlag.SCHEDULE_ONCHANGE
|
||||
? 'OnChange'
|
||||
: flag === ScheduleFlag.SCHEDULE_CONDITION
|
||||
? 'Condition'
|
||||
: dow[Math.log(flag) / Math.log(2)]}
|
||||
</Typography>
|
||||
</Box>
|
||||
<Divider orientation="vertical" flexItem />
|
||||
@@ -245,7 +255,7 @@ const Scheduler: FC = () => {
|
||||
<HeaderRow>
|
||||
<HeaderCell />
|
||||
<HeaderCell stiff>{LL.SCHEDULE(0)}</HeaderCell>
|
||||
<HeaderCell stiff>{LL.TIME(0)}</HeaderCell>
|
||||
<HeaderCell stiff>{LL.TIME(0)}/Cond.</HeaderCell>
|
||||
<HeaderCell stiff>{LL.COMMAND(0)}</HeaderCell>
|
||||
<HeaderCell stiff>{LL.VALUE(0)}</HeaderCell>
|
||||
<HeaderCell stiff>{LL.NAME(0)}</HeaderCell>
|
||||
@@ -268,16 +278,25 @@ const Scheduler: FC = () => {
|
||||
)}
|
||||
</Cell>
|
||||
<Cell stiff>
|
||||
<Stack spacing={1} direction="row">
|
||||
<Stack spacing={0.5} direction="row">
|
||||
<Divider orientation="vertical" flexItem />
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_MON)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_TUE)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_WED)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_THU)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_FRI)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_SAT)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_SUN)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_TIMER)}
|
||||
{si.flags < ScheduleFlag.SCHEDULE_TIMER ? (
|
||||
<>
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_MON)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_TUE)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_WED)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_THU)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_FRI)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_SAT)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_SUN)}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_TIMER)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_ONCHANGE)}
|
||||
{dayBox(si, ScheduleFlag.SCHEDULE_CONDITION)}
|
||||
</>
|
||||
)}
|
||||
</Stack>
|
||||
</Cell>
|
||||
<Cell>{si.time}</Cell>
|
||||
@@ -341,7 +360,7 @@ const Scheduler: FC = () => {
|
||||
<Button
|
||||
startIcon={<AddIcon />}
|
||||
variant="outlined"
|
||||
color="secondary"
|
||||
color="primary"
|
||||
onClick={addScheduleItem}
|
||||
>
|
||||
{LL.ADD(0)}
|
||||
|
||||
@@ -91,10 +91,10 @@ const SchedulerDialog = ({
|
||||
|
||||
const getFlagString = (f: number) => {
|
||||
const new_flags: string[] = [];
|
||||
if ((f & 1) === 1) {
|
||||
if ((f & 129) === 1) {
|
||||
new_flags.push('1');
|
||||
}
|
||||
if ((f & 2) === 2) {
|
||||
if ((f & 130) === 2) {
|
||||
new_flags.push('2');
|
||||
}
|
||||
if ((f & 4) === 4) {
|
||||
@@ -112,26 +112,45 @@ const SchedulerDialog = ({
|
||||
if ((f & 64) === 64) {
|
||||
new_flags.push('64');
|
||||
}
|
||||
if ((f & 128) === 128) {
|
||||
if ((f & 131) === 128) {
|
||||
new_flags.push('128');
|
||||
}
|
||||
if ((f & 131) === 129) {
|
||||
new_flags.push('129');
|
||||
}
|
||||
if ((f & 131) === 130) {
|
||||
new_flags.push('130');
|
||||
}
|
||||
return new_flags;
|
||||
};
|
||||
|
||||
const isTimer = editItem.flags === ScheduleFlag.SCHEDULE_TIMER;
|
||||
const isCondition = editItem.flags === ScheduleFlag.SCHEDULE_CONDITION;
|
||||
const isOnChange = editItem.flags === ScheduleFlag.SCHEDULE_ONCHANGE;
|
||||
|
||||
const showFlag = (si: ScheduleItem, flag: number) => (
|
||||
<Typography
|
||||
variant="button"
|
||||
sx={{ fontSize: 10 }}
|
||||
color={(si.flags & flag) === flag ? 'primary' : 'grey'}
|
||||
color={
|
||||
(isOnChange && flag !== ScheduleFlag.SCHEDULE_ONCHANGE) ||
|
||||
(isCondition && flag !== ScheduleFlag.SCHEDULE_CONDITION)
|
||||
? 'grey'
|
||||
: (si.flags & flag) === flag
|
||||
? 'primary'
|
||||
: 'grey'
|
||||
}
|
||||
>
|
||||
{flag === ScheduleFlag.SCHEDULE_TIMER
|
||||
? LL.TIMER(0)
|
||||
: dow[Math.log(flag) / Math.log(2)]}
|
||||
: flag === ScheduleFlag.SCHEDULE_ONCHANGE
|
||||
? 'On Change'
|
||||
: flag === ScheduleFlag.SCHEDULE_CONDITION
|
||||
? 'Condition'
|
||||
: dow[Math.log(flag) / Math.log(2)]}
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const isTimer = editItem.flags === ScheduleFlag.SCHEDULE_TIMER;
|
||||
|
||||
return (
|
||||
<Dialog sx={dialogStyle} open={open} onClose={close}>
|
||||
<DialogTitle>
|
||||
@@ -179,7 +198,7 @@ const SchedulerDialog = ({
|
||||
sx={{ bgcolor: '#334f65' }}
|
||||
variant="contained"
|
||||
onClick={() => {
|
||||
setEditItem({ ...editItem, flags: 0 });
|
||||
setEditItem({ ...editItem, flags: ScheduleFlag.SCHEDULE_TIMER });
|
||||
}}
|
||||
>
|
||||
{showFlag(editItem, ScheduleFlag.SCHEDULE_TIMER)}
|
||||
@@ -199,6 +218,66 @@ const SchedulerDialog = ({
|
||||
</Button>
|
||||
)}
|
||||
</Box>
|
||||
<Box>
|
||||
{isOnChange ? (
|
||||
<Button
|
||||
size="large"
|
||||
sx={{ bgcolor: '#334f65' }}
|
||||
variant="contained"
|
||||
onClick={() => {
|
||||
setEditItem({
|
||||
...editItem,
|
||||
flags: ScheduleFlag.SCHEDULE_ONCHANGE
|
||||
});
|
||||
}}
|
||||
>
|
||||
{showFlag(editItem, ScheduleFlag.SCHEDULE_ONCHANGE)}
|
||||
</Button>
|
||||
) : (
|
||||
<Button
|
||||
size="large"
|
||||
variant="outlined"
|
||||
onClick={() => {
|
||||
setEditItem({
|
||||
...editItem,
|
||||
flags: ScheduleFlag.SCHEDULE_ONCHANGE
|
||||
});
|
||||
}}
|
||||
>
|
||||
{showFlag(editItem, ScheduleFlag.SCHEDULE_ONCHANGE)}
|
||||
</Button>
|
||||
)}
|
||||
</Box>
|
||||
<Box>
|
||||
{isCondition ? (
|
||||
<Button
|
||||
size="large"
|
||||
sx={{ bgcolor: '#334f65' }}
|
||||
variant="contained"
|
||||
onClick={() => {
|
||||
setEditItem({
|
||||
...editItem,
|
||||
flags: ScheduleFlag.SCHEDULE_CONDITION
|
||||
});
|
||||
}}
|
||||
>
|
||||
{showFlag(editItem, ScheduleFlag.SCHEDULE_CONDITION)}
|
||||
</Button>
|
||||
) : (
|
||||
<Button
|
||||
size="large"
|
||||
variant="outlined"
|
||||
onClick={() => {
|
||||
setEditItem({
|
||||
...editItem,
|
||||
flags: ScheduleFlag.SCHEDULE_CONDITION
|
||||
});
|
||||
}}
|
||||
>
|
||||
{showFlag(editItem, ScheduleFlag.SCHEDULE_CONDITION)}
|
||||
</Button>
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
<Grid container>
|
||||
<BlockFormControlLabel
|
||||
@@ -213,18 +292,31 @@ const SchedulerDialog = ({
|
||||
/>
|
||||
</Grid>
|
||||
<Grid container>
|
||||
<TextField
|
||||
name="time"
|
||||
type="time"
|
||||
label={isTimer ? LL.TIMER(1) : LL.TIME(1)}
|
||||
value={editItem.time}
|
||||
margin="normal"
|
||||
onChange={updateFormValue}
|
||||
/>
|
||||
{isTimer && (
|
||||
<Box color="warning.main" ml={2} mt={4}>
|
||||
<Typography variant="body2">{LL.SCHEDULER_HELP_2()}</Typography>
|
||||
</Box>
|
||||
{isCondition || isOnChange ? (
|
||||
<TextField
|
||||
name="time"
|
||||
label={isCondition ? 'Condition' : 'On Change Value'}
|
||||
fullWidth
|
||||
value={editItem.time}
|
||||
margin="normal"
|
||||
onChange={updateFormValue}
|
||||
/>
|
||||
) : (
|
||||
<>
|
||||
<TextField
|
||||
name="time"
|
||||
type="time"
|
||||
label={isTimer ? LL.TIMER(1) : LL.TIME(1)}
|
||||
value={editItem.time}
|
||||
margin="normal"
|
||||
onChange={updateFormValue}
|
||||
/>
|
||||
{isTimer && (
|
||||
<Box color="warning.main" ml={2} mt={4}>
|
||||
<Typography variant="body2">{LL.SCHEDULER_HELP_2()}</Typography>
|
||||
</Box>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</Grid>
|
||||
<ValidatedTextField
|
||||
|
||||
@@ -334,7 +334,9 @@ export enum ScheduleFlag {
|
||||
SCHEDULE_THU = 16,
|
||||
SCHEDULE_FRI = 32,
|
||||
SCHEDULE_SAT = 64,
|
||||
SCHEDULE_TIMER = 128
|
||||
SCHEDULE_TIMER = 128,
|
||||
SCHEDULE_ONCHANGE = 129,
|
||||
SCHEDULE_CONDITION = 130
|
||||
}
|
||||
|
||||
export interface EntityItem {
|
||||
|
||||
Reference in New Issue
Block a user