nutui-uniapp
Version:
京东风格的轻量级移动端 Uniapp、Vue3 组件库(支持小程序开发)
63 lines (50 loc) • 1.63 kB
text/typescript
import { provide, ref } from 'vue'
import { cloneDeep } from '../_utils'
import { notifyDefaultOptions, notifyDefaultOptionsKey } from './notify'
import type { NotifyInst, NotifyOptions, NotifyType } from './types'
export function useNotify(selector = ''): NotifyInst {
const notifyOptionsKey = `${notifyDefaultOptionsKey}${selector || ''}`
const notifyOptions = ref<NotifyOptions>(cloneDeep(notifyDefaultOptions))
provide(notifyOptionsKey, notifyOptions)
function show(type: NotifyType, msg: string, options?: NotifyOptions) {
notifyOptions.value = Object.assign({
visible: true,
type,
msg,
}, options)
}
function legacyShow(options: NotifyOptions) {
show(notifyDefaultOptions.type, options.msg || notifyDefaultOptions.msg, options)
}
function showPrimary(msg: string, options?: NotifyOptions) {
show('primary', msg, options)
}
function showSuccess(msg: string, options?: NotifyOptions) {
show('success', msg, options)
}
function showDanger(msg: string, options?: NotifyOptions) {
show('danger', msg, options)
}
function showWarning(msg: string, options?: NotifyOptions) {
show('warning', msg, options)
}
function showCustom(msg: string, options?: NotifyOptions) {
show('custom', msg, options)
}
function hide() {
notifyOptions.value = Object.assign(cloneDeep(notifyOptions.value), {
visible: false,
})
}
return {
showNotify: legacyShow,
hideNotify: hide,
show,
primary: showPrimary,
success: showSuccess,
danger: showDanger,
warning: showWarning,
custom: showCustom,
hide,
}
}