Skip to content

Commit fe57078

Browse files
committed
chore: fix type
1 parent 78a7a33 commit fe57078

File tree

1 file changed

+41
-34
lines changed

1 file changed

+41
-34
lines changed

src/NewPicker/PickerInput/hooks/useRangeValue.ts

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import * as React from 'react';
33
import type { GenerateConfig } from '../../../generate';
44
import { formatValue, isSame, isSameTimestamp } from '../../../utils/dateUtil';
55
import useSyncState from '../../hooks/useSyncState';
6-
import type { FormatType, Locale } from '../../interface';
6+
import type { BaseInfo, FormatType, Locale } from '../../interface';
77
import { fillIndex } from '../../util';
88
import type { RangePickerProps, RangeValueType } from '../RangePicker';
99
import useLockEffect from './useLockEffect';
1010

11-
const EMPTY_VALUE: [null, null] = [null, null];
11+
const EMPTY_VALUE: any[] = [];
1212

1313
// Submit Logic:
1414
// * ✅ Value:
@@ -31,20 +31,20 @@ const EMPTY_VALUE: [null, null] = [null, null];
3131
// * Update `needSubmit` mark to true
3232
// * trigger onChange by `needSubmit` and update stateValue
3333

34-
type TriggerCalendarChange<DateType> = ([start, end]: RangeValueType<DateType>) => void;
34+
type TriggerCalendarChange<ValueType extends object[]> = (calendarValues: ValueType) => void;
3535

36-
type RefillType<T> = {
36+
type Replace2String<T> = {
3737
[P in keyof T]: string;
3838
};
3939

4040
export function useUtil<
41-
DateType extends object = any,
42-
MergedValueType extends DateType[] = RangeValueType<DateType>,
41+
MergedValueType extends object[],
42+
DateType extends MergedValueType[number] = any,
4343
>(generateConfig: GenerateConfig<DateType>, locale: Locale, formatList: FormatType[]) {
4444
const getDateTexts = (dates: MergedValueType) => {
4545
return dates.map((date) =>
4646
formatValue(date, { generateConfig, locale, format: formatList[0] }),
47-
) as any as RefillType<Required<MergedValueType>>;
47+
) as any as Replace2String<Required<MergedValueType>>;
4848
};
4949

5050
const isSameDates = (source: MergedValueType, target: MergedValueType) => {
@@ -71,10 +71,7 @@ export function useUtil<
7171
* Used for internal value management.
7272
* It should always use `mergedValue` in render logic
7373
*/
74-
export function useCalendarValue<
75-
DateType extends object = any,
76-
MergedValueType extends DateType[] = RangeValueType<DateType>,
77-
>(mergedValue: MergedValueType) {
74+
export function useCalendarValue<MergedValueType extends object[]>(mergedValue: MergedValueType) {
7875
const [calendarValue, setCalendarValue] = useSyncState(mergedValue);
7976

8077
/** Sync calendarValue & submitValue back with value */
@@ -89,44 +86,50 @@ export function useCalendarValue<
8986
return [calendarValue, setCalendarValue] as const;
9087
}
9188

92-
export function useInnerValue<DateType extends object = any>(
89+
export function useInnerValue<ValueType extends object[], DateType extends ValueType[number]>(
9390
generateConfig: GenerateConfig<DateType>,
9491
locale: Locale,
9592
formatList: FormatType[],
96-
defaultValue?: RangeValueType<DateType>,
97-
value?: RangeValueType<DateType>,
98-
onCalendarChange?: RangePickerProps<DateType>['onCalendarChange'],
93+
defaultValue?: ValueType,
94+
value?: ValueType,
95+
onCalendarChange?: (
96+
dates: ValueType,
97+
dateStrings: Replace2String<Required<ValueType>>,
98+
info: BaseInfo,
99+
) => void,
99100
) {
100101
// This is the root value which will sync with controlled or uncontrolled value
101102
const [innerValue, setInnerValue] = useMergedState(defaultValue, {
102103
value,
103104
});
104-
const mergedValue = innerValue || EMPTY_VALUE;
105+
const mergedValue = innerValue || (EMPTY_VALUE as ValueType);
105106

106107
// ========================= Inner Values =========================
107108
const [calendarValue, setCalendarValue] = useCalendarValue(mergedValue);
108109

109110
// ============================ Change ============================
110-
const [getDateTexts, isSameDates] = useUtil(generateConfig, locale, formatList);
111+
const [getDateTexts, isSameDates] = useUtil<ValueType>(generateConfig, locale, formatList);
111112

112-
const triggerCalendarChange: TriggerCalendarChange<DateType> = useEvent(([start, end]) => {
113-
const clone: RangeValueType<DateType> = [start, end];
113+
const triggerCalendarChange: TriggerCalendarChange<ValueType> = useEvent(
114+
(nextCalendarValues: ValueType) => {
115+
const clone = [...nextCalendarValues] as ValueType;
114116

115-
// Update merged value
116-
const [isSameMergedDates, isSameStart] = isSameDates(calendarValue(), clone);
117+
// Update merged value
118+
const [isSameMergedDates, isSameStart] = isSameDates(calendarValue(), clone);
117119

118-
if (!isSameMergedDates) {
119-
setCalendarValue(clone);
120+
if (!isSameMergedDates) {
121+
setCalendarValue(clone);
120122

121-
// Trigger calendar change event
122-
if (onCalendarChange) {
123-
const cellTexts = getDateTexts(clone);
124-
onCalendarChange(clone, cellTexts, {
125-
range: isSameStart ? 'end' : 'start',
126-
});
123+
// Trigger calendar change event
124+
if (onCalendarChange) {
125+
const cellTexts = getDateTexts(clone);
126+
onCalendarChange(clone, cellTexts, {
127+
range: isSameStart ? 'end' : 'start',
128+
});
129+
}
127130
}
128-
}
129-
});
131+
},
132+
);
130133

131134
return [mergedValue, setInnerValue, calendarValue, triggerCalendarChange] as const;
132135
}
@@ -145,7 +148,7 @@ export default function useRangeValue<DateType extends object = any>(
145148
mergedValue: RangeValueType<DateType>,
146149
setInnerValue: (nextValue: RangeValueType<DateType>) => void,
147150
getCalendarValue: () => RangeValueType<DateType>,
148-
triggerCalendarChange: TriggerCalendarChange<DateType>,
151+
triggerCalendarChange: TriggerCalendarChange<RangeValueType<DateType>>,
149152
disabled: [boolean, boolean],
150153
formatList: FormatType[],
151154
focused: boolean,
@@ -174,7 +177,11 @@ export default function useRangeValue<DateType extends object = any>(
174177
const orderOnChange = disabled.some((d) => d) ? false : order;
175178

176179
// ============================= Util =============================
177-
const [getDateTexts, isSameDates] = useUtil(generateConfig, locale, formatList);
180+
const [getDateTexts, isSameDates] = useUtil<RangeValueType<DateType>>(
181+
generateConfig,
182+
locale,
183+
formatList,
184+
);
178185

179186
// ============================ Values ============================
180187
// Used for trigger `onChange` event.
@@ -194,7 +201,7 @@ export default function useRangeValue<DateType extends object = any>(
194201
const triggerSubmit = useEvent((nextValue?: RangeValueType<DateType>) => {
195202
const isNullValue = nextValue === null;
196203

197-
const clone: RangeValueType<DateType> = [...(nextValue || submitValue())];
204+
const clone = [...(nextValue || submitValue())] as RangeValueType<DateType>;
198205

199206
// Fill null value
200207
if (isNullValue) {

0 commit comments

Comments
 (0)