antd
Version:
An enterprise-class UI design language and React components implementation
34 lines (33 loc) • 1.69 kB
JavaScript
"use client";
import React, { useMemo } from 'react';
import CloseCircleFilled from "@ant-design/icons/es/icons/CloseCircleFilled";
import fallbackProp from '../fallbackProp';
import { isPlainObject } from '../is';
import { devUseWarning } from '../warning';
export const useAllowClear = options => {
const {
allowClear,
clearIcon,
contextAllowClear,
contextClearIcon,
defaultAllowClear,
defaultLabel,
componentName
} = options;
if (process.env.NODE_ENV !== 'production') {
const warning = devUseWarning(componentName);
warning.deprecated(!clearIcon, 'clearIcon', 'allowClear={{ clearIcon: React.ReactNode }}');
}
return useMemo(() => {
const mergedAllowClear = allowClear ?? contextAllowClear ?? defaultAllowClear;
if (!mergedAllowClear) {
return false;
}
return {
clearIcon: fallbackProp(isPlainObject(allowClear) ? allowClear.clearIcon : undefined, clearIcon, isPlainObject(contextAllowClear) ? contextAllowClear.clearIcon : undefined, contextClearIcon, /*#__PURE__*/React.createElement(CloseCircleFilled, null)),
disabled: (isPlainObject(allowClear) ? allowClear?.disabled : undefined) ?? (isPlainObject(contextAllowClear) ? contextAllowClear?.disabled : undefined),
tabIndex: (isPlainObject(allowClear) ? allowClear?.tabIndex : undefined) ?? (isPlainObject(contextAllowClear) ? contextAllowClear?.tabIndex : undefined),
label: (isPlainObject(allowClear) ? allowClear.label : undefined) ?? (isPlainObject(contextAllowClear) ? contextAllowClear.label : undefined) ?? defaultLabel
};
}, [allowClear, clearIcon, contextAllowClear, contextClearIcon, defaultAllowClear, defaultLabel]);
};