Skip to content

Commit

Permalink
feat(components): close all messages of the specified type (#8415)
Browse files Browse the repository at this point in the history
  • Loading branch information
Lete114 committed Jun 22, 2022
1 parent 29fd3eb commit 65d198f
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
33 changes: 33 additions & 0 deletions packages/components/message/__tests__/message-manager.test.tsx
Expand Up @@ -50,6 +50,39 @@ describe('Message on command', () => {
expect(document.querySelectorAll(selector).length).toBe(0)
})

test('it should close all messages of the specified type', async () => {
const onClose = vi.fn()
const instances = []
const success = 'success'
for (let i = 0; i < 4; i++) {
const instance = Message({
type: success,
duration: 0,
onClose,
})
instances.push(instance)
}

for (let i = 0; i < 2; i++) {
const instance = Message({
duration: 0,
onClose,
})
instances.push(instance)
}

await rAF()
const elements = document.querySelectorAll(selector)
const successElements = document.querySelectorAll(`${selector}--${success}`)
expect(elements.length).toBe(6)
expect(successElements.length).toBe(4)
Message.closeAll(success)
await rAF()
expect(onClose).toHaveBeenCalledTimes(4)
expect(document.querySelectorAll(selector).length).toBe(2)
Message.closeAll()
})

test('it should stack messages', async () => {
const messages = [Message(), Message(), Message()]
await rAF()
Expand Down
4 changes: 3 additions & 1 deletion packages/components/message/src/message.ts
Expand Up @@ -11,6 +11,8 @@ import type MessageConstructor from './message.vue'

export const messageTypes = ['success', 'info', 'warning', 'error'] as const

export type messageType = typeof messageTypes[number]

export interface MessageConfigContext {
max?: number
}
Expand Down Expand Up @@ -127,7 +129,7 @@ export interface MessageHandler {

export type MessageFn = {
(options?: MessageParams, appContext?: null | AppContext): MessageHandler
closeAll(): void
closeAll(type?: messageType): void
}
export type MessageTypedFn = (
options?: MessageParamsWithType,
Expand Down
7 changes: 5 additions & 2 deletions packages/components/message/src/method.ts
Expand Up @@ -24,6 +24,7 @@ import type {
MessageOptions,
MessageParams,
MessageParamsNormalized,
messageType,
} from './message'

let seed = 1
Expand Down Expand Up @@ -168,9 +169,11 @@ messageTypes.forEach((type) => {
}
})

export function closeAll(): void {
export function closeAll(type?: messageType): void {
for (const instance of instances) {
instance.handler.close()
if (!type || type === instance.props.type) {
instance.handler.close()
}
}
}

Expand Down

0 comments on commit 65d198f

Please sign in to comment.