mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-12 23:35:38 +08:00
378b54281b
* refactor: refactor closeIcon * docs: update docs * refactor(Drawer): refactor drawer closeIcon (#42993) * feat: optimize closeIcon * refactor: refactor closeIcon * docs: update docs * feat: optimize code * feat: update test case * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * docs: update docs * ✨ feat: migrate less to token for Slider (#42428) * ✨ feat: migrate less to token for Slider * ✨ feat: update snap * ✨ feat: update style * ✨ feat: update style * ✨ feat: test ci * ✨ feat: test ci * ✨ feat: test ci * ✨ feat: test ci * ✨ feat: update * ✨ feat: update snap * ✨ feat: update * ✨ feat: update * ✨ feat: 删除未使用token * ✨ feat: update doc * ✨ feat: update dome * ✨ feat: update * ✨ feat: test ci * 📝 doc: update doc * ✨ feat: update * ✨ feat: update * ✨ feat: update * ✨ feat: update * ✨ feat: add demo * ✨ feat: add demo * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * ✨ feat: update for reviewer * Apply suggestions from code review --------- Co-authored-by: MadCcc <1075746765@qq.com> * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * feat: optimize code * docs: update docs --------- Co-authored-by: 黑雨 <wangning4567@163.com> Co-authored-by: MadCcc <1075746765@qq.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { CloseOutlined } from '@ant-design/icons';
|
|
import type { ReactNode } from 'react';
|
|
import React from 'react';
|
|
|
|
function useInnerClosable(
|
|
closable?: boolean,
|
|
closeIcon?: boolean | ReactNode,
|
|
defaultClosable?: boolean,
|
|
): boolean {
|
|
if (typeof closable === 'boolean') {
|
|
return closable;
|
|
}
|
|
if (closeIcon === undefined) {
|
|
return !!defaultClosable;
|
|
}
|
|
return closeIcon !== false && closeIcon !== null;
|
|
}
|
|
|
|
export type UseClosableParams = {
|
|
closable?: boolean;
|
|
closeIcon?: boolean | ReactNode;
|
|
defaultClosable?: boolean;
|
|
defaultCloseIcon?: ReactNode;
|
|
customCloseIconRender?: (closeIcon: ReactNode) => ReactNode;
|
|
};
|
|
|
|
export default function useClosable(
|
|
closable?: boolean,
|
|
closeIcon?: boolean | ReactNode,
|
|
customCloseIconRender?: (closeIcon: ReactNode) => ReactNode,
|
|
defaultCloseIcon: ReactNode = <CloseOutlined />,
|
|
defaultClosable = false,
|
|
): [closable: boolean, closeIcon: React.ReactNode | null] {
|
|
const mergedClosable = useInnerClosable(closable, closeIcon, defaultClosable);
|
|
if (!mergedClosable) {
|
|
return [false, null];
|
|
}
|
|
const mergedCloseIcon =
|
|
typeof closeIcon === 'boolean' || closeIcon === undefined || closeIcon === null
|
|
? defaultCloseIcon
|
|
: closeIcon;
|
|
return [true, customCloseIconRender ? customCloseIconRender(mergedCloseIcon) : mergedCloseIcon];
|
|
}
|