@bytedance/mona-client-web
Version:
web for mona
284 lines • 12.3 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { genEvent } from '../utils';
import { useMemo, useRef, useState } from 'react';
export var useProps = function (props) {
var mode = props.mode;
var propsRef = useRef(props);
propsRef.current = props;
var finalData = useMemo(function () {
var _a;
var finalData = {
data: [],
value: props.value,
};
switch (mode) {
case 'selector':
finalData.data = genData([props.range], props.rangeKey);
finalData.value = [props.value];
break;
case 'multiSelector':
finalData.value = Object.assign(Array.from({ length: ((_a = props.range) === null || _a === void 0 ? void 0 : _a.length) || 0 }, function () { return 0; }), props.value);
finalData.data = genData(props.range || [], props.rangeKey);
break;
case 'date':
finalData = genDateData(props.value, props.start, props.end, props.fields);
break;
case 'time':
finalData = genTimeData(props.value, props.start, props.end);
break;
case 'region':
break;
default:
var exhaustiveCheck = props;
//@ts-ignore
finalData.value = exhaustiveCheck.value;
break;
}
return {
data: finalData === null || finalData === void 0 ? void 0 : finalData.data,
value: finalData.value,
};
//@ts-ignore
}, [mode, props.value, props.start, props.end, props.fields, props.range, props.rangeKey]);
var handler = useMemo(function () {
var handleConfirm, handleChange, handleCancel;
handleConfirm = propsRef.current.onChange;
handleCancel = propsRef.current.onCancel;
switch (mode) {
case 'selector':
handleConfirm = function (e) {
var _a, _b, _c;
e.detail.value = (_a = e.detail.value) === null || _a === void 0 ? void 0 : _a[0];
(_c = (_b = propsRef.current).onChange) === null || _c === void 0 ? void 0 : _c.call(_b, e);
};
break;
case 'multiSelector':
handleChange = function (value, idx) {
var _a, _b;
//@ts-ignore
(_b = (_a = propsRef.current).onColumnChange) === null || _b === void 0 ? void 0 : _b.call(_a, genEvent({
type: 'change',
detail: {
column: +idx,
value: value[idx],
},
}));
};
break;
case 'date':
handleConfirm = function (e) {
var _a, _b, _c, _d;
var value = e.detail.value;
var y = finalData.data[value[0]];
var m = (_a = y === null || y === void 0 ? void 0 : y.children) === null || _a === void 0 ? void 0 : _a[value[1]];
var d = (_b = m === null || m === void 0 ? void 0 : m.children) === null || _b === void 0 ? void 0 : _b[value[2]];
e.detail.value = [y.label, m === null || m === void 0 ? void 0 : m.label, d === null || d === void 0 ? void 0 : d.label].filter(function (item) { return item !== undefined; }).join(':');
(_d = (_c = propsRef.current) === null || _c === void 0 ? void 0 : _c.onChange) === null || _d === void 0 ? void 0 : _d.call(_c, e);
};
break;
case 'time':
handleConfirm = function (e) {
var _a, _b, _c;
var value = e.detail.value;
var h = finalData.data[value[0]];
var m = (_a = h.children) === null || _a === void 0 ? void 0 : _a[value[1]];
e.detail.value = [h.label, m === null || m === void 0 ? void 0 : m.label].join(':');
(_c = (_b = propsRef.current) === null || _b === void 0 ? void 0 : _b.onChange) === null || _c === void 0 ? void 0 : _c.call(_b, e);
};
break;
case 'region':
break;
default:
break;
}
return {
onColumnChange: handleChange,
onConfirm: handleConfirm,
onCancel: handleCancel,
};
}, [finalData.data]);
return __assign(__assign({}, handler), finalData);
};
export function useRefState(initialValue) {
var _a = useState(initialValue), state = _a[0], setState = _a[1];
var stateRef = useRef(state);
stateRef.current = state;
return [state, stateRef, setState];
}
var genArr = function (start, end) {
return Array.from({ length: +end + 1 - +start }, function (_, idx) {
return idx + Number(start);
});
};
var genTimeData = function (value, start, end) {
var _a, _b;
if (start === void 0) { start = '00:00'; }
if (end === void 0) { end = '23:59'; }
var _c = start.split(':'), sH = _c[0], sM = _c[1];
var _d = end.split(':'), eH = _d[0], eM = _d[1];
var AllMmArr = genArr('00', '59').map(function (m) {
return m < 10 ? "0".concat(m) : "".concat(m);
});
var mmArr = genArr(sM, eM).map(function (m) {
return m < 10 ? "0".concat(m) : "".concat(m);
});
var hhArr = genArr(sH, eH).map(function (m) {
return m < 10 ? "0".concat(m) : "".concat(m);
});
var timeArr = genData([hhArr, AllMmArr]);
if (Number(eH) - Number(sH) >= 1) {
timeArr = genData([hhArr, AllMmArr]);
timeArr[0].children = genData([
genArr(sM, 59 + '').map(function (m) {
return +m < 10 ? "0".concat(m) : "".concat(m);
}),
]);
timeArr[timeArr.length - 1].children = genData([
genArr('0', eM).map(function (m) {
return +m < 10 ? "0".concat(m) : "".concat(m);
}),
]);
}
else {
timeArr = genData([hhArr, mmArr]);
}
var valueArr = (value === null || value === void 0 ? void 0 : value.split(':')) || [sH, sM];
var hourIndex = hhArr.findIndex(function (item) { return +valueArr[0] === +item; });
var mIndx = (_b = (_a = timeArr
.find(function (item) { return item.value === hourIndex; })
.children) === null || _a === void 0 ? void 0 : _a.find(function (item) { return +valueArr[1] === +item.label; })) === null || _b === void 0 ? void 0 : _b.value;
return {
value: [hourIndex, mIndx],
data: timeArr,
};
};
var genDateData = function (value, start, end, fields) {
var _a, _b, _c, _d;
if (start === void 0) { start = '2000-10-01'; }
if (end === void 0) { end = '2021-10-10'; }
var _e = start.split('-'), startYYYY = _e[0], startMM = _e[1], startDD = _e[2];
var _f = end.split('-'), endYYYY = _f[0], endMM = _f[1], endDD = _f[2];
var YYYYArr = genArr(startYYYY, endYYYY);
var MMArr = genArr(startMM, endMM);
var isYear = fields === 'year' ? [] : undefined;
var isMounth = fields === 'month' ? [] : undefined;
var finalValue = genYearDataArr(YYYYArr, !isYear, !isMounth);
var monthValue, dayValue, yearValue;
var valueArr = (_a = value === null || value === void 0 ? void 0 : value.split('-')) !== null && _a !== void 0 ? _a : [];
if (!isYear) {
if (+endYYYY - +startYYYY < 1) {
finalValue[0].children = genMounthDataArr(MMArr, !isMounth);
if (!isMounth) {
if (+endMM - +startMM < 1) {
finalValue[0].children[0].children = genData([dayArr[+startMM - 1].slice(+startDD - 1, +endDD)]);
}
else {
finalValue[0].children[0].children = genData([dayArr[+startMM - 1].slice(+startDD - 1)]);
finalValue[0].children[finalValue[0].children.length - 1].children = genData([
dayArr[+endMM - 1].slice(0, +endDD),
]);
}
}
}
else {
finalValue[0].children = genMounthDataArr(genArr(startMM, 12 + ''), !isMounth ? [] : undefined);
finalValue[finalValue.length - 1].children = genMounthDataArr(genArr(1 + '', endMM), !isMounth);
if (!isMounth) {
finalValue[0].children[0].children = genData([dayArr[+startMM - 1].slice(+startDD - 1)]);
finalValue[finalValue.length - 1].children[finalValue[finalValue.length - 1].children.length - 1].children =
genData([dayArr[+endMM - 1].slice(0, +endDD)]);
}
}
}
if (isYear) {
if (valueArr[0] !== undefined) {
yearValue = finalValue.find(function (item) { return +item.label === +valueArr[0]; });
}
}
else if (isMounth) {
if (valueArr[0] !== undefined) {
yearValue = finalValue.find(function (item) { return +item.label === +valueArr[0]; });
}
if (yearValue && valueArr[1] !== undefined) {
monthValue = (_b = yearValue.children) === null || _b === void 0 ? void 0 : _b.find(function (item) { return +item.label === +valueArr[1]; });
}
}
else {
if (valueArr[0] !== undefined) {
yearValue = finalValue.find(function (item) { return +item.label === +valueArr[0]; });
}
if (yearValue && valueArr[1] !== undefined) {
monthValue = (_c = yearValue.children) === null || _c === void 0 ? void 0 : _c.find(function (item) { return +item.label === +valueArr[1]; });
}
if (monthValue && valueArr[2] !== undefined) {
dayValue = (_d = monthValue.children) === null || _d === void 0 ? void 0 : _d.find(function (item) { return +item.label === +valueArr[2]; });
}
}
return {
data: finalValue,
value: [yearValue === null || yearValue === void 0 ? void 0 : yearValue.value, monthValue === null || monthValue === void 0 ? void 0 : monthValue.value, dayValue === null || dayValue === void 0 ? void 0 : dayValue.value].filter(function (item) { return item !== undefined; }),
};
};
// TODO: 闰年
var dayArr = [31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30].map(function (item) { return genArr(1 + '', item + ''); });
var monthArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var genMounthDataArr = function (MMarr, children) {
return MMarr.map(function (item, idx) {
return {
value: idx,
label: item,
children: children ? genData([dayArr[+item - 1]]) : undefined,
};
});
};
var genYearDataArr = function (YYYYArr, yearChildren, monthChildren) {
var MMarr = monthArr.map(function (item, idx) {
return {
value: idx,
label: item,
children: monthChildren ? genData([dayArr[+item - 1]]) : undefined,
};
});
return YYYYArr.map(function (item, idx) {
return {
value: idx,
label: item,
children: yearChildren ? MMarr : undefined,
};
});
};
var genData = function (data, rangeKey) {
var children;
data
.slice()
.reverse()
.forEach(function (arr) {
children = arr.map(function (value, idx) {
if (rangeKey && value !== null && typeof value === 'object') {
return {
value: idx,
label: value[rangeKey],
children: children,
};
}
return {
value: idx,
label: value,
children: children,
};
});
});
//@ts-ignore
return children;
};
//# sourceMappingURL=hooks.js.map