import React, { useEffect, useState } from 'react' import { Checkbox, Radio } from '../components' import { genArray, getSlotTypeWeek } from '../utils/utils' import type { PanelBase } from '../interface' import { SlotType } from '../interface' const WEEK_MAP:{[key:number]:string} = { 1: 'SUN', 2: 'MON', 3: 'TUE', 4: 'WED', 5: 'THU', 6: 'FRI', 7: 'SAT', } export default function Week({ visible, value, onChange }: PanelBase) { const [ready, setReady] = useState(false); const [innerValue, setInnerValue] = useState(''); const [type, setType] = useState(getSlotTypeWeek(value)); const [range0, setRange0] = useState('1'); const [range1, setRange1] = useState('2'); const [step0, setStep0] = useState('1'); const [step1, setStep1] = useState('1'); const [weekL, setWeekL] = useState('1'); const [arr, setArr] = useState([2]); useEffect(() => { let newValue = ''; if (type === SlotType.ALL) { newValue = '*'; } else if (type === SlotType.NO_SPEC) { newValue = '?'; } else if (type === SlotType.RANGE) { newValue = `${range0}/${range1}`; } else if (type === SlotType.STEP) { newValue = `${step0}#${step1}`; } else if (type === SlotType.ITERATOR) { newValue = arr.length === 0 ? '?' : arr.join(','); } else if (type === SlotType.WEEK_L) { newValue = `${weekL}L`; } if (newValue !== value) { setInnerValue(newValue) if (ready) onChange(newValue) } }, [type, range0, range1, step0, step1, arr, weekL]) useEffect(() => { if (value === undefined || value === '' || value === innerValue) { if (!ready) setReady(true) return; } setInnerValue(value); if (value === '*') { setType(SlotType.ALL) } else if (value === '?') { setType(SlotType.NO_SPEC) } else if (value.indexOf('/') > -1) { setType(SlotType.RANGE) const ss = value.split('/') setRange0(ss[0]) setRange1(ss[1]) } else if (value.indexOf('#') > -1) { setType(SlotType.STEP) const ss = value.split('#') setStep0(ss[0]) setStep1(ss[1]) } else if (value.indexOf('L') > -1) { setType(SlotType.WEEK_L) setWeekL(value.replaceAll('L', '')) } else { setType(SlotType.ITERATOR) const ss = value.split(',') const newArr:number[] = ss.filter(i => (new Number(1) instanceof Number)).map(i => parseInt(i)) setArr(newArr) } if (!ready) setReady(true) }, [value]) function handleChangeArrChecked(s: number) { let newArr = [ ...arr, s ]; if (arr.indexOf(s) > -1) { newArr = arr.filter((i) => i !== s); } newArr.sort((a,b) => a-b); setArr(newArr); } return (
setType(SlotType.ALL)} />
setType(SlotType.NO_SPEC)} />
setType(SlotType.RANGE)} />
setRange0(e.target.value)} />
到星期
setRange1(e.target.value)} />
setType(SlotType.STEP)} />
setStep0(e.target.value)} />
周的星期
setStep1(e.target.value)} />
setType(SlotType.WEEK_L)} />
setWeekL(e.target.value)} />
setType(SlotType.ITERATOR)} />
{[2,3,4,5,6,7,1].map((i) => ( -1} onChange={() => handleChangeArrChecked(i)} style={{ width: 60 }} /> ))}
(1~7,1=SUN )
) };