Skip to content

Commit a41ee9d

Browse files
committed
refactor: Move Picker footer into Panel for compitable
1 parent b8bfba1 commit a41ee9d

File tree

6 files changed

+14
-60
lines changed

6 files changed

+14
-60
lines changed

examples/basic.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export default () => {
4444
generateConfig={momentGenerateConfig}
4545
locale={zhCN}
4646
allowClear
47+
showToday
48+
renderExtraFooter={() => 'extra'}
4749
/>
4850
</div>
4951
<div style={{ margin: '0 8px' }}>

src/PanelContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface PanelContextProps {
1616
onDateMouseEnter?: (date: any) => void;
1717
onDateMouseLeave?: (date: any) => void;
1818
onSelect?: OnSelect<any>;
19+
hideRanges?: boolean;
1920
}
2021

2122
const PanelContext = React.createContext<PanelContextProps>({});

src/Picker.tsx

Lines changed: 1 addition & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@ import PickerTrigger from './PickerTrigger';
2424
import { isEqual } from './utils/dateUtil';
2525
import getDataOrAriaProps, { toArray } from './utils/miscUtil';
2626
import PanelContext, { ContextOperationRefProps } from './PanelContext';
27-
import { PickerMode, PanelMode } from './interface';
27+
import { PickerMode } from './interface';
2828
import { getDefaultFormat, getInputSize } from './utils/uiUtil';
2929
import usePickerInput from './hooks/usePickerInput';
3030
import useTextValueMapping from './hooks/useTextValueMapping';
3131
import useMergedState from './hooks/useMergeState';
3232
import useValueTexts from './hooks/useValueTexts';
33-
import getExtraFooter from './utils/getExtraFooter';
34-
import getRanges from './utils/getRanges';
3533

3634
export interface PickerRefConfig {
3735
focus: () => void;
@@ -138,7 +136,6 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
138136
value,
139137
defaultValue,
140138
open,
141-
mode,
142139
defaultOpen,
143140
suffixIcon,
144141
clearIcon,
@@ -147,21 +144,16 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
147144
placeholder,
148145
getPopupContainer,
149146
pickerRef,
150-
renderExtraFooter,
151147
onChange,
152148
onOpenChange,
153149
onFocus,
154150
onBlur,
155-
onPanelChange,
156151
onMouseDown,
157152
onMouseUp,
158153
onMouseEnter,
159154
onMouseLeave,
160155
onContextMenu,
161156
onClick,
162-
onSelect,
163-
onOk,
164-
components,
165157
} = props as MergedPickerProps<DateType>;
166158

167159
const inputRef = React.useRef<HTMLInputElement>(null);
@@ -233,20 +225,6 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
233225
},
234226
});
235227

236-
// ============================= Modes =============================
237-
const [mergedMode, setInnerMode] = useMergedState<PanelMode>({
238-
value: mode,
239-
defaultStateValue: picker,
240-
});
241-
242-
const triggerModeChange = (newValue: DateType, newMode: PanelMode) => {
243-
setInnerMode(newMode);
244-
245-
if (onPanelChange) {
246-
onPanelChange(newValue, newMode);
247-
}
248-
};
249-
250228
// ============================ Trigger ============================
251229
const triggerChange = (newValue: DateType | null) => {
252230
setSelectedValue(newValue);
@@ -360,34 +338,6 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
360338
onPickerValueChange: undefined,
361339
};
362340

363-
const extraNode = getExtraFooter(prefixCls, mergedMode, renderExtraFooter);
364-
365-
const rangesNode = getRanges({
366-
prefixCls,
367-
components,
368-
needConfirmButton,
369-
okDisabled: !selectedValue,
370-
locale,
371-
onNow: () => {
372-
const now = generateConfig.getNow();
373-
if (onSelect) {
374-
onSelect(now);
375-
}
376-
triggerChange(now);
377-
triggerOpen(false, true);
378-
},
379-
onOk: () => {
380-
if (selectedValue) {
381-
triggerChange(selectedValue);
382-
triggerOpen(false, true);
383-
384-
if (onOk) {
385-
onOk(selectedValue!);
386-
}
387-
}
388-
},
389-
});
390-
391341
const panel = (
392342
<div
393343
className={`${prefixCls}-panel-container`}
@@ -404,14 +354,8 @@ function InnerPicker<DateType>(props: PickerProps<DateType>) {
404354
value={selectedValue}
405355
locale={locale}
406356
tabIndex={-1}
407-
mode={mergedMode}
408357
onChange={setSelectedValue}
409-
onPanelChange={triggerModeChange}
410358
/>
411-
<div className={`${prefixCls}-footer`}>
412-
{extraNode}
413-
{rangesNode}
414-
</div>
415359
</div>
416360
);
417361

src/PickerPanel.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
166166
operationRef,
167167
panelRef: panelDivRef,
168168
onSelect: onContextSelect,
169+
hideRanges,
169170
} = panelContext;
170171

171172
const {
@@ -419,14 +420,19 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
419420
let extraFooter: React.ReactNode;
420421
let rangesNode: React.ReactNode;
421422

422-
if (!onContextSelect) {
423+
if (!hideRanges) {
423424
extraFooter = getExtraFooter(prefixCls, mergedMode, renderExtraFooter);
424425
rangesNode = getRanges({
425426
prefixCls,
426427
components,
427428
needConfirmButton,
428429
okDisabled: !mergedValue,
429430
locale,
431+
onNow:
432+
needConfirmButton &&
433+
(() => {
434+
triggerSelect(generateConfig.getNow(), 'submit');
435+
}),
430436
onOk: () => {
431437
if (mergedValue) {
432438
triggerSelect(mergedValue, 'submit', true);

src/RangePicker.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
915915
hideHeader: picker === 'time',
916916
onDateMouseEnter,
917917
onDateMouseLeave,
918+
hideRanges: true,
918919
onSelect: onContextSelect,
919920
}}
920921
>

src/utils/getRanges.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ export interface RangesProps {
66
rangeList?: RangeList;
77
components?: Components;
88
needConfirmButton: boolean;
9-
onNow?: null | (() => void);
10-
onOk?: null | (() => void);
9+
onNow?: null | (() => void) | false;
10+
onOk?: null | (() => void) | false;
1111
okDisabled?: boolean;
1212
locale: Locale;
1313
}

0 commit comments

Comments
 (0)