zent
Version:
一套前端设计语言和基于React的实现
36 lines (31 loc) • 1.07 kB
text/typescript
import { useRef, useCallback } from 'react';
import { endOfDay, isAfter, isBefore } from 'date-fns';
import { IGenerateDateConfig, RangeType, DateNullTuple } from '../types';
export default function useCombinedDisabledDate(
selected: DateNullTuple,
disabledDate: (date: Date, type?: RangeType) => boolean,
generateDate: IGenerateDateConfig,
dateSpan = 0
) {
const disabledDateRef = useRef(disabledDate);
disabledDateRef.current = disabledDate;
const disabledCombinedDate = useCallback(
(type: RangeType) => (value: Date) => {
const date = endOfDay(value);
const { offsetDate, isSame } = generateDate;
const [start, end] = selected;
if (disabledDateRef.current?.(date, type)) {
return true;
}
if (start && !end) {
return (
(!isSame(date, start) && isBefore(date, start)) ||
(!!dateSpan && isAfter(date, offsetDate(start, dateSpan - 1)))
);
}
return false;
},
[disabledDateRef, dateSpan, generateDate, selected]
);
return disabledCombinedDate;
}