Skip to content

Commit 2e5ccb5

Browse files
committed
chore: fix type
1 parent bf0fa88 commit 2e5ccb5

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

src/NewPicker/PickerInput/SinglePicker.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ function Picker<DateType extends object = any>(
100100
ref: React.Ref<PickerRef>,
101101
) {
102102
// ========================= Prop =========================
103-
const filledProps = useFilledProps(props);
103+
const [filledProps, internalPicker, complexPicker] = useFilledProps(props);
104104

105105
const {
106106
// Style
@@ -138,6 +138,7 @@ function Picker<DateType extends object = any>(
138138
mode,
139139
onPanelChange,
140140
onCalendarChange,
141+
multiple,
141142

142143
// Picker Value
143144
defaultPickerValue,
@@ -179,21 +180,14 @@ function Picker<DateType extends object = any>(
179180

180181
const [mergedOpen, triggerOpen] = useOpen(open, defaultOpen, onOpenChange);
181182

182-
// ======================== Picker ========================
183-
/** Almost same as `picker`, but add `datetime` for `date` with `showTime` */
184-
const internalPicker: InternalMode = picker === 'date' && showTime ? 'datetime' : picker;
185-
186-
/** The picker is `datetime` or `time` */
187-
const complexPicker = internalPicker === 'time' || internalPicker === 'datetime';
188-
const mergedNeedConfirm = needConfirm ?? complexPicker;
189-
190183
// ======================== Format ========================
191184
const [formatList, maskFormat] = useFieldFormat(internalPicker, locale, format);
192185

193186
// ======================== Values ========================
194187
const [mergedValue, setInnerValue, getCalendarValue, triggerCalendarChange] = useInnerValue(
195188
generateConfig,
196189
locale,
190+
multiple,
197191
formatList,
198192
defaultValue,
199193
value,
@@ -531,7 +525,7 @@ function Picker<DateType extends object = any>(
531525
hoverValue={hoverValues}
532526
onHover={onPanelHover}
533527
// Submit
534-
needConfirm={mergedNeedConfirm}
528+
needConfirm={needConfirm}
535529
onSubmit={triggerPartConfirm}
536530
// Preset
537531
presets={presetList}
@@ -615,7 +609,7 @@ function Picker<DateType extends object = any>(
615609
}
616610

617611
// Submit with complex picker
618-
if (!mergedOpen && complexPicker && !mergedNeedConfirm && lastOp === 'panel') {
612+
if (!mergedOpen && complexPicker && !needConfirm && lastOp === 'panel') {
619613
triggerOpen(true);
620614
triggerPartConfirm();
621615
}

src/NewPicker/PickerInput/hooks/useFlexibleValue.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import useSyncState from '../../hooks/useSyncState';
66
import type { FormatType, Locale } from '../../interface';
77
import { fillIndex } from '../../util';
88
import type { RangePickerProps } from '../RangePicker';
9+
import type { PickerProps } from '../SinglePicker';
910
import useLockEffect from './useLockEffect';
1011
import { useCalendarValue, useUtil } from './useRangeValue';
1112

@@ -18,12 +19,14 @@ const EMPTY_VALUE: any[] = [];
1819
type TriggerCalendarChange<DateType> = (dates: DateType[]) => void;
1920

2021
export function useInnerValue<DateType extends object = any>(
22+
multiple: boolean,
2123
generateConfig: GenerateConfig<DateType>,
2224
locale: Locale,
2325
formatList: FormatType[],
26+
2427
defaultValue?: DateType,
2528
value?: DateType,
26-
onCalendarChange?: RangePickerProps<DateType>['onCalendarChange'],
29+
onCalendarChange?: PickerProps<DateType>['onCalendarChange'],
2730
) {
2831
// This is the root value which will sync with controlled or uncontrolled value
2932
const [innerValue, setInnerValue] = useMergedState(defaultValue, {
@@ -45,6 +48,10 @@ export function useInnerValue<DateType extends object = any>(
4548
formatList,
4649
);
4750

51+
function pickByMultiple<T>(values: T[]): any {
52+
return multiple ? values : values[0];
53+
}
54+
4855
const triggerCalendarChange: TriggerCalendarChange<DateType> = useEvent((dates) => {
4956
const clone: DateType[] = [...dates];
5057

@@ -56,7 +63,7 @@ export function useInnerValue<DateType extends object = any>(
5663

5764
// Trigger calendar change event
5865
if (onCalendarChange) {
59-
onCalendarChange(clone, getDateTexts(clone), {
66+
onCalendarChange(pickByMultiple(clone), pickByMultiple(getDateTexts(clone)), {
6067
range: isSameStart ? 'end' : 'start',
6168
});
6269
}

src/NewPicker/PickerInput/hooks/useRangeValue.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,18 @@ const EMPTY_VALUE: [null, null] = [null, null];
3333

3434
type TriggerCalendarChange<DateType> = ([start, end]: RangeValueType<DateType>) => void;
3535

36+
type RefillType<T> = {
37+
[P in keyof T]: string;
38+
};
39+
3640
export function useUtil<
3741
DateType extends object = any,
3842
MergedValueType extends DateType[] = RangeValueType<DateType>,
3943
>(generateConfig: GenerateConfig<DateType>, locale: Locale, formatList: FormatType[]) {
40-
const getDateTexts = ([start, end]: RangeValueType<DateType>) => {
41-
return [start, end].map((date) =>
44+
const getDateTexts = (dates: MergedValueType) => {
45+
return dates.map((date) =>
4246
formatValue(date, { generateConfig, locale, format: formatList[0] }),
43-
) as [string, string];
47+
) as any as RefillType<Required<MergedValueType>>;
4448
};
4549

4650
const isSameDates = (source: MergedValueType, target: MergedValueType) => {
@@ -116,7 +120,8 @@ export function useInnerValue<DateType extends object = any>(
116120

117121
// Trigger calendar change event
118122
if (onCalendarChange) {
119-
onCalendarChange(clone, getDateTexts(clone), {
123+
const cellTexts = getDateTexts(clone);
124+
onCalendarChange(clone, cellTexts, {
120125
range: isSameStart ? 'end' : 'start',
121126
});
122127
}

0 commit comments

Comments
 (0)