Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
"@rc-component/overflow": "^1.0.0",
"@rc-component/resize-observer": "^1.0.0",
"@rc-component/trigger": "^3.6.15",
"@rc-component/util": "^1.11.1",
"@rc-component/util": "^1.13.0",
"clsx": "^2.1.1"
},
"devDependencies": {
Expand Down
7 changes: 5 additions & 2 deletions src/PickerInput/Popup/Footer.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { clsx } from 'clsx';
import { isReactRenderable } from '@rc-component/util';
import * as React from 'react';
import type { GenerateConfig } from '../../generate';
import useTimeInfo from '../../hooks/useTimeInfo';
Expand Down Expand Up @@ -102,7 +103,7 @@ export default function Footer(props: FooterProps) {
);

// ======================== Render ========================
if (!extraNode && !rangeNode) {
if (!isReactRenderable(extraNode) && !isReactRenderable(rangeNode)) {
return null;
}

Expand All @@ -111,7 +112,9 @@ export default function Footer(props: FooterProps) {
className={clsx(`${prefixCls}-footer`, classNames.popup.footer)}
style={styles.popup.footer}
>
{extraNode && <div className={`${prefixCls}-footer-extra`}>{extraNode}</div>}
{isReactRenderable(extraNode) && (
<div className={`${prefixCls}-footer-extra`}>{extraNode}</div>
)}
{rangeNode}
</div>
);
Expand Down
3 changes: 2 additions & 1 deletion src/PickerInput/Selector/Icon.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as React from 'react';
import { isReactRenderable } from '@rc-component/util';
import PickerContext from '../context';
import { clsx } from 'clsx';

Expand All @@ -9,7 +10,7 @@ export interface IconProps extends React.HtmlHTMLAttributes<HTMLElement> {
export default function Icon({ icon, ...restProps }: IconProps) {
const { prefixCls, classNames, styles } = React.useContext(PickerContext);

return icon ? (
return isReactRenderable(icon) ? (
<span
className={clsx(`${prefixCls}-suffix`, classNames.suffix)}
style={styles.suffix}
Expand Down
7 changes: 4 additions & 3 deletions src/PickerInput/Selector/RangeSelector.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { clsx } from 'clsx';
import ResizeObserver from '@rc-component/resize-observer';
import { useEvent } from '@rc-component/util';
import { isReactRenderable, useEvent } from '@rc-component/util';
import * as React from 'react';
import type { RangePickerRef, SelectorProps } from '../../interface';
import PickerContext from '../context';
Expand Down Expand Up @@ -208,7 +208,8 @@ function RangeSelector<DateType extends object = any>(
}, [activeIndex]);

// ======================== Clear =========================
const showClear = clearIcon && ((value[0] && !disabled[0]) || (value[1] && !disabled[1]));
const showClear =
isReactRenderable(clearIcon) && ((value[0] && !disabled[0]) || (value[1] && !disabled[1]));

// ======================= Disabled =======================
const startAutoFocus = autoFocus && !disabled[0];
Expand Down Expand Up @@ -246,7 +247,7 @@ function RangeSelector<DateType extends object = any>(
onMouseDown?.(e);
}}
>
{prefix && (
{isReactRenderable(prefix) && (
<div className={clsx(`${prefixCls}-prefix`, classNames.prefix)} style={styles.prefix}>
{prefix}
</div>
Expand Down
5 changes: 3 additions & 2 deletions src/PickerInput/Selector/SingleSelector/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { clsx } from 'clsx';
import { isReactRenderable } from '@rc-component/util';
import * as React from 'react';
import type { InternalMode, PickerRef, SelectorProps } from '../../../interface';
import { isSame } from '../../../utils/dateUtil';
Expand Down Expand Up @@ -159,7 +160,7 @@ function SingleSelector<DateType extends object = any>(
);

// ======================== Clear =========================
const showClear = !!(clearIcon && value.length && !disabled);
const showClear = isReactRenderable(clearIcon) && Boolean(value.length) && !disabled;

// ======================= Multiple =======================
const selectorNode = multiple ? (
Expand Down Expand Up @@ -226,7 +227,7 @@ function SingleSelector<DateType extends object = any>(
onMouseDown?.(e);
}}
>
{prefix && (
{isReactRenderable(prefix) && (
<div className={clsx(`${prefixCls}-prefix`, classNames.prefix)} style={styles.prefix}>
{prefix}
</div>
Expand Down
10 changes: 7 additions & 3 deletions src/PickerInput/Selector/hooks/useClearIcon.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { warning } from '@rc-component/util';
import { isReactRenderable, warning } from '@rc-component/util';
import type { ReactNode } from 'react';
import * as React from 'react';

Expand All @@ -10,7 +10,7 @@ export function fillClearIcon(
allowClear?: boolean | { clearIcon?: ReactNode },
clearIcon?: ReactNode,
) {
if (process.env.NODE_ENV !== 'production' && clearIcon) {
if (process.env.NODE_ENV !== 'production' && isReactRenderable(clearIcon)) {
warning(false, '`clearIcon` will be removed in future. Please use `allowClear` instead.');
}

Expand All @@ -20,5 +20,9 @@ export function fillClearIcon(

const config = allowClear && typeof allowClear === 'object' ? allowClear : {};

return config.clearIcon || clearIcon || <span className={`${prefixCls}-clear-btn`} />;
if (isReactRenderable(config.clearIcon)) {
return config.clearIcon;
}

return isReactRenderable(clearIcon) ? clearIcon : <span className={`${prefixCls}-clear-btn`} />;
}
3 changes: 2 additions & 1 deletion src/PickerPanel/PanelBody.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { clsx } from 'clsx';
import { isNonNullable } from '@rc-component/util';
import * as React from 'react';
import type { DisabledDate } from '../interface';
import { formatValue, isInRange, isSame } from '../utils/dateUtil';
Expand Down Expand Up @@ -186,7 +187,7 @@ export default function PanelBody<DateType extends object = any>(props: PanelBod
return (
<div className={clsx(`${prefixCls}-body`, classNames.body)} style={styles.body}>
<table className={clsx(`${prefixCls}-content`, classNames.content)} style={styles.content}>
{headerCells && (
{isNonNullable(headerCells) && (
<thead>
<tr>{headerCells}</tr>
</thead>
Expand Down
9 changes: 4 additions & 5 deletions src/PickerPanel/TimePanel/TimePanelBody/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as React from 'react';
import { isNonNullable } from '@rc-component/util';
import useTimeInfo from '../../../hooks/useTimeInfo';
import type { SharedPanelProps, SharedTimeProps } from '../../../interface';
import { formatValue } from '../../../utils/dateUtil';
Expand Down Expand Up @@ -157,19 +158,17 @@ export default function TimePanelBody<DateType extends object = any>(
const triggerDateTmpl = React.useMemo(() => {
let tmpl = value || pickerValue || generateConfig.getNow();

const isNotNull = (num: number) => num !== null && num !== undefined;

if (isNotNull(hour)) {
if (isNonNullable(hour)) {
tmpl = generateConfig.setHour(tmpl, hour);
tmpl = generateConfig.setMinute(tmpl, minute);
tmpl = generateConfig.setSecond(tmpl, second);
tmpl = generateConfig.setMillisecond(tmpl, millisecond);
} else if (isNotNull(pickerHour)) {
} else if (isNonNullable(pickerHour)) {
tmpl = generateConfig.setHour(tmpl, pickerHour);
tmpl = generateConfig.setMinute(tmpl, pickerMinute);
tmpl = generateConfig.setSecond(tmpl, pickerSecond);
tmpl = generateConfig.setMillisecond(tmpl, pickerMillisecond);
} else if (isNotNull(validHour)) {
} else if (isNonNullable(validHour)) {
tmpl = generateConfig.setHour(tmpl, validHour);
tmpl = generateConfig.setMinute(tmpl, validMinute);
tmpl = generateConfig.setSecond(tmpl, validSecond);
Expand Down
22 changes: 12 additions & 10 deletions src/utils/getClearIcon.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import type { ReactNode } from "react";
import React from "react";
import type { ReactNode } from 'react';
import React from 'react';
import { isReactRenderable } from '@rc-component/util';

export function getClearIcon(
prefixCls: string,
allowClear?: boolean | { clearIcon?: ReactNode },
clearIcon?: ReactNode,
prefixCls: string,
allowClear?: boolean | { clearIcon?: ReactNode },
clearIcon?: ReactNode,
) {
const mergedClearIcon = typeof allowClear === 'object' ? allowClear.clearIcon : clearIcon;

const mergedClearIcon = typeof allowClear === "object" ? allowClear.clearIcon : clearIcon;

return (
mergedClearIcon || <span className={`${prefixCls}-clear-btn`} />
);
return isReactRenderable(mergedClearIcon) ? (
mergedClearIcon
) : (
<span className={`${prefixCls}-clear-btn`} />
);
}
Loading