ant-design/components/_util/hooks/useClosable.tsx
kiner-tang(文辉) 378b54281b
refactor(Modal): refactor closeIcon (#43017)
* 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>
2023-06-16 15:36:28 +08:00

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];
}