-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat(use): add useMessage useNotification (#6527)
* feat(Message): add useMessage hook * feat(Notification): add useNotification hook * feat(Message): add Hook demo * feat(Notification): add Hook demo * test(Message): update demo snap * test(Notification): update demo snap * docs(Message): update docs with FAQ * docs(Notification): update docs with FAQ
- Loading branch information
Showing
24 changed files
with
1,465 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
import Notice from '../vc-notification/Notice'; | ||
import type { NoticeProps } from '../vc-notification/Notice'; | ||
import useStyle from './style'; | ||
import type { NoticeType } from './interface'; | ||
import { | ||
CheckCircleFilled, | ||
CloseCircleFilled, | ||
ExclamationCircleFilled, | ||
InfoCircleFilled, | ||
LoadingOutlined, | ||
} from '@ant-design/icons-vue'; | ||
import type { VueNode } from '../_util/type'; | ||
import classNames from '../_util/classNames'; | ||
import { useConfigContextInject } from '../config-provider/context'; | ||
import { computed, defineComponent } from 'vue'; | ||
|
||
export const TypeIcon = { | ||
info: <InfoCircleFilled />, | ||
success: <CheckCircleFilled />, | ||
error: <CloseCircleFilled />, | ||
warning: <ExclamationCircleFilled />, | ||
loading: <LoadingOutlined />, | ||
}; | ||
|
||
export interface PureContentProps { | ||
prefixCls: string; | ||
type?: NoticeType; | ||
icon?: VueNode; | ||
children: VueNode; | ||
} | ||
|
||
export const PureContent = defineComponent({ | ||
name: 'PureContent', | ||
inheritAttrs: false, | ||
props: ['prefixCls', 'type', 'icon'] as any, | ||
|
||
setup(props, { slots }) { | ||
return () => ( | ||
<div | ||
class={classNames(`${props.prefixCls}-custom-content`, `${props.prefixCls}-${props.type}`)} | ||
> | ||
{props.icon || TypeIcon[props.type!]} | ||
<span>{slots.default?.()}</span> | ||
</div> | ||
); | ||
}, | ||
}); | ||
|
||
export interface PurePanelProps | ||
extends Omit<NoticeProps, 'prefixCls' | 'eventKey'>, | ||
Omit<PureContentProps, 'prefixCls' | 'children'> { | ||
prefixCls?: string; | ||
} | ||
|
||
/** @private Internal Component. Do not use in your production. */ | ||
|
||
export default defineComponent({ | ||
name: 'PurePanel', | ||
inheritAttrs: false, | ||
props: ['prefixCls', 'class', 'type', 'icon', 'content'] as any, | ||
setup(props, { slots, attrs }) { | ||
const { getPrefixCls } = useConfigContextInject(); | ||
const prefixCls = computed(() => props.staticPrefixCls || getPrefixCls('message')); | ||
const [, hashId] = useStyle(prefixCls); | ||
return ( | ||
<Notice | ||
{...attrs} | ||
prefixCls={prefixCls.value} | ||
class={classNames(hashId, `${prefixCls.value}-notice-pure-panel`)} | ||
noticeKey="pure" | ||
duration={null} | ||
> | ||
<PureContent prefixCls={props.prefixCls} type={props.type} icon={props.icon}> | ||
{slots.default?.()} | ||
</PureContent> | ||
</Notice> | ||
); | ||
}, | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
<docs> | ||
--- | ||
order: 10 | ||
title: | ||
zh-CN: Hooks 调用(推荐) | ||
en-US: Hooks Usage (Recommend) | ||
--- | ||
|
||
## zh-CN | ||
|
||
通过 `message.useMessage` 创建支持读取 context 的 `contextHolder`。请注意,我们推荐通过顶层注册的方式代替 `message` 静态方法,因为静态方法无法消费上下文,因而 ConfigProvider 的数据也不会生效。 | ||
|
||
## en-US | ||
|
||
Use `message.useMessage` to get `contextHolder` with context accessible issue. Please note that, we recommend to use top level registration instead of `message` static method, because static method cannot consume context, and ConfigProvider data will not work. | ||
|
||
</docs> | ||
|
||
<template> | ||
<contextHolder /> | ||
<a-button type="primary" @click="info">Display normal message</a-button> | ||
</template> | ||
|
||
<script lang="ts" setup> | ||
import { message } from 'ant-design-vue'; | ||
const [messageApi, contextHolder] = message.useMessage(); | ||
const info = () => { | ||
messageApi.info('Hello, Ant Design!'); | ||
}; | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import type { CSSProperties } from 'vue'; | ||
import type { Key, VueNode } from '../_util/type'; | ||
|
||
export type NoticeType = 'info' | 'success' | 'error' | 'warning' | 'loading'; | ||
|
||
export interface ConfigOptions { | ||
top?: number; | ||
duration?: number; | ||
prefixCls?: string; | ||
getContainer?: () => HTMLElement; | ||
transitionName?: string; | ||
maxCount?: number; | ||
rtl?: boolean; | ||
} | ||
|
||
export interface ArgsProps { | ||
content: VueNode; | ||
duration?: number; | ||
type?: NoticeType; | ||
onClose?: () => void; | ||
icon?: VueNode; | ||
key?: string | number; | ||
style?: CSSProperties; | ||
className?: string; | ||
onClick?: (e: Event) => void; | ||
} | ||
|
||
export type JointContent = VueNode | ArgsProps; | ||
|
||
export interface MessageType extends PromiseLike<boolean> { | ||
(): void; | ||
} | ||
|
||
export type TypeOpen = ( | ||
content: JointContent, | ||
duration?: number | VoidFunction, // Also can use onClose directly | ||
onClose?: VoidFunction, | ||
) => MessageType; | ||
|
||
export interface MessageInstance { | ||
info: TypeOpen; | ||
success: TypeOpen; | ||
error: TypeOpen; | ||
warning: TypeOpen; | ||
loading: TypeOpen; | ||
open(args: ArgsProps): MessageType; | ||
destroy(key?: Key): void; | ||
} |
Oops, something went wrong.