ant-design-x-vue-next
Version:
Ant Design X for Vue — community continuation aligned with @ant-design/x
68 lines (67 loc) • 2.01 kB
JavaScript
import { reactive as h } from "vue";
import M from "../_util/warning.mjs";
let d = 0;
const i = class i {
constructor() {
i.permissible = typeof globalThis < "u" && !!globalThis.Notification, M(
i.permissible
);
}
get permission() {
return i.permissible ? globalThis.Notification.permission : "denied";
}
open(e) {
if (!i.permissible) return;
const { title: o, tag: n, onClick: r, duration: t, onClose: c, onError: m, onShow: a, ...b } = e || {};
if (n && i.permissionMap.has(n)) return;
d += 1;
const f = n || `x_notification_${d}`, p = new globalThis.Notification(o, b || {}), l = p.close.bind(p);
if (typeof t == "number") {
const s = setTimeout(() => {
clearTimeout(s), l();
}, t * 1e3);
}
p.onclick = (s) => {
r == null || r(s, l);
}, p.onshow = (s) => {
a == null || a(s), i.permissionMap.set(f, { close: l });
}, p.onclose = (s) => {
c == null || c(s), i.permissionMap.delete(f);
}, p.onerror = (s) => {
m == null || m(s);
};
}
async requestPermission() {
return i.permissible ? globalThis.Notification.requestPermission() : "denied";
}
useNotification() {
const e = h({
permission: this.permission
});
return [
e,
{
open: this.open.bind(this),
close: this.close.bind(this),
requestPermission: async () => {
const o = await this.requestPermission();
return e.permission = o, o;
}
}
];
}
close(e) {
i.permissible && Array.from(i.permissionMap.keys()).forEach((o) => {
var n, r, t, c;
e === void 0 && ((r = (n = i.permissionMap.get(o)) == null ? void 0 : n.close) == null || r.call(n)), e != null && e.includes(o) && ((c = (t = i.permissionMap.get(o)) == null ? void 0 : t.close) == null || c.call(t));
});
}
};
i.permissionMap = /* @__PURE__ */ new Map();
let u = i;
const w = new u();
export {
u as XNotification,
w as default,
w as notification
};