123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import { useState, useEvent, useMemo } from 'functional-mini/component';
- import { DateRangePickerFunctionalProps } from './props';
- import dayjs from 'dayjs';
- import { getRangeData, getDateByValue, getValueByDate, getValidValue, } from '../util';
- import { useMixState } from '../../_util/hooks/useMixState';
- import { useFormatValue, useMinAndMax, useFormatLabel } from './hooks';
- import { useDateState } from './useDateState';
- import { mountComponent } from '../../_util/component';
- import { useComponentEvent } from '../../_util/hooks/useComponentEvent';
- import { resolveEventValues } from '../../_util/platform';
- var RangePicker = function (props) {
- var _a = useMixState(props.defaultValue, {
- value: props.value,
- postState: function (value) {
- return {
- valid: true,
- value: value && value[0] && value[1]
- ? [
- dayjs(value[0]).toDate(),
- dayjs(value[1]).toDate(),
- ]
- : undefined,
- };
- },
- }), realValue = _a[0], _b = _a[1], isControlled = _b.isControlled, update = _b.update;
- var _c = useDateState(props), dateState = _c.dateState, init = _c.init, changeType = _c.changeType, updateValue = _c.updateValue;
- var _d = useComponentEvent(props), triggerEvent = _d.triggerEvent, triggerEventValues = _d.triggerEventValues, triggerEventOnly = _d.triggerEventOnly;
- var _e = useState({
- currentValue: [],
- columns: [],
- }), _f = _e[0], columns = _f.columns, currentValue = _f.currentValue, doUpdateColumns = _e[1];
- var onFormat = useFormatValue(props);
- var _g = useMemo(function () {
- return {
- currentStartValueStr: dateState.start
- ? dayjs(dateState.start).format(props.format)
- : '',
- currentEndValueStr: dateState.end
- ? dayjs(dateState.end).format(props.format)
- : '',
- };
- }, [props.format, dateState.start, dateState.end]), currentStartValueStr = _g.currentStartValueStr, currentEndValueStr = _g.currentEndValueStr;
- var onFormatLabel = useFormatLabel(props.onFormatLabel);
- function updateColumns(currentValue, currentProps) {
- var precision = currentProps.precision, propsMin = currentProps.min, propsMax = currentProps.max;
- var min = getMin(propsMin);
- var max = getMax(propsMax);
- if (max < min) {
- return [];
- }
- var currentPickerDay = dayjs();
- if (currentValue.length > 0) {
- currentPickerDay = dayjs(getDateByValue(currentValue));
- }
- if (currentPickerDay < min || currentPickerDay > max) {
- currentPickerDay = min;
- }
- var newColumns = getRangeData(precision, min, max, currentPickerDay, onFormatLabel);
- doUpdateColumns({ columns: newColumns, currentValue: currentValue });
- }
- var formattedValueText = onFormat(realValue);
- useEvent('onVisibleChange', function (visible) {
- if (visible) {
- var state = init(realValue);
- var currentValue_1 = getValueByDate(state.pickerType === 'start' ? state.start : state.end, props.precision);
- updateColumns(currentValue_1, props);
- }
- triggerEvent('visibleChange', visible);
- });
- useEvent('onChangeCurrentPickerType', function (e) {
- var type = e.currentTarget.dataset.type;
- var state = changeType(type);
- var currentValue = getValueByDate(state.pickerType === 'start' ? state.start : state.end, props.precision);
- updateColumns(currentValue, props);
- });
- var _h = useMinAndMax(), getMin = _h.getMin, getMax = _h.getMax;
- useEvent('onCancel', function (e) {
- triggerEventOnly('cancel', e);
- });
- useEvent('onChange', function (event) {
- var selectedIndex = resolveEventValues(event)[0];
- selectedIndex = getValidValue(selectedIndex);
- var format = props.format, precision = props.precision;
- var date = getDateByValue(selectedIndex);
- var min = getMin(props.min);
- var max = getMax(props.max);
- if (dayjs(date).isBefore(min)) {
- date = min.toDate();
- selectedIndex = getValueByDate(date, precision);
- }
- if (dayjs(date).isAfter(max)) {
- date = max.toDate();
- selectedIndex = getValueByDate(date, precision);
- }
- updateColumns(selectedIndex, props);
- updateValue(date);
- triggerEventValues('pickerChange', [
- dateState.pickerType,
- date,
- dayjs(date).format(format),
- ]);
- });
- useEvent('onOk', function () {
- var format = props.format;
- var start = dateState.start, end = dateState.end;
- var realValue = [start, end];
- if (!isControlled) {
- update(realValue);
- }
- triggerEventValues('ok', [
- realValue,
- realValue.map(function (v) { return dayjs(v).format(format); }),
- ]);
- });
- return {
- formattedValueText: formattedValueText,
- realValue: realValue,
- columns: columns,
- currentValue: currentValue,
- currentStartDate: dateState.start,
- currentEndDate: dateState.end,
- currentEndValueStr: currentEndValueStr,
- currentStartValueStr: currentStartValueStr,
- pickerType: dateState.pickerType,
- };
- };
- mountComponent(RangePicker, DateRangePickerFunctionalProps);
|