mirror of
https://github.com/HoshinoSuzumi/rayine-ui.git
synced 2025-04-07 11:38:50 +08:00
52 lines
1.0 KiB
TypeScript
52 lines
1.0 KiB
TypeScript
import type { Message } from '../types/message'
|
|
import { useState } from '#imports'
|
|
|
|
export const useMessage = () => {
|
|
const messages = useState<Message[]>('messages', () => [])
|
|
|
|
const generateId = () => {
|
|
return (Date.now() + Math.random() * 100).toString(32).toUpperCase()
|
|
}
|
|
|
|
const add = (message: Partial<Message>) => {
|
|
const msg = {
|
|
id: (Date.now() + Math.random() * 100).toString(32).toUpperCase(),
|
|
duration: 3000,
|
|
...message,
|
|
}
|
|
|
|
if (messages.value.some(m => m.id === msg.id)) {
|
|
return
|
|
}
|
|
|
|
messages.value.push(msg as Message)
|
|
return msg
|
|
}
|
|
|
|
const update = (id: string, message: Partial<Message>) => {
|
|
const msg = messages.value.find(msg => msg.id === id)
|
|
|
|
if (!msg) {
|
|
return
|
|
}
|
|
|
|
Object.assign(msg, message)
|
|
}
|
|
|
|
const remove = (id: string) => {
|
|
messages.value = messages.value.filter(msg => msg.id !== id)
|
|
}
|
|
|
|
const clear = () => {
|
|
messages.value = []
|
|
}
|
|
|
|
return {
|
|
generateId,
|
|
add,
|
|
update,
|
|
remove,
|
|
clear,
|
|
}
|
|
}
|