zent
Version:
一套前端设计语言和基于React的实现
41 lines (40 loc) • 2.12 kB
JavaScript
import { useState, useMemo, useEffect } from 'react';
import { parseDateRange } from '../utils/index';
import { addMonths } from 'date-fns';
var initDate = [new Date(), new Date()];
function createDateRangeWithSingleDate(dates, addMonthNum) {
var startDate = dates[0], endDate = dates[1];
var getStartFromEnd = function () {
return endDate ? addMonths(endDate, -addMonthNum) : initDate[0];
};
var getEndFromStart = function () {
return startDate ? addMonths(startDate, addMonthNum) : initDate[1];
};
return [startDate !== null && startDate !== void 0 ? startDate : getStartFromEnd(), endDate !== null && endDate !== void 0 ? endDate : getEndFromStart()];
}
export default function useRangeMergedProps(_a) {
var value = _a.value, format = _a.format, defaultDate = _a.defaultDate, _b = _a.addMonthNum, addMonthNum = _b === void 0 ? 0 : _b;
var _c = useState(initDate), defaultPanelDate = _c[0], setDefaultPanelDate = _c[1];
var parseValue = useMemo(function () { return (value ? parseDateRange(value, format) : [null, null]); }, [value, format]);
var _d = useState(parseValue), selected = _d[0], setSelected = _d[1];
useEffect(function () {
setSelected(parseValue);
}, [parseValue]);
useEffect(function () {
var initDateRange = initDate;
if ((selected === null || selected === void 0 ? void 0 : selected[0]) || (selected === null || selected === void 0 ? void 0 : selected[1])) {
initDateRange = createDateRangeWithSingleDate(selected, addMonthNum);
}
else if ((defaultDate === null || defaultDate === void 0 ? void 0 : defaultDate[0]) && (defaultDate === null || defaultDate === void 0 ? void 0 : defaultDate[1])) {
initDateRange = parseDateRange(defaultDate, format);
}
setDefaultPanelDate(initDateRange);
}, [defaultDate, selected, format, addMonthNum]);
return {
selected: selected,
parseValue: parseValue,
setSelected: setSelected,
defaultPanelDate: defaultPanelDate,
setDefaultPanelDate: setDefaultPanelDate,
};
}