@mytiki/receipt-capacitor
Version:
The TIKI Receipt library adds to your Vue.js + Capacitor **mobile app** a Data Reward program for your users to share their receipts in-exchange for **cash from Tiki inc**.
141 lines (140 loc) • 4.28 kB
JavaScript
import { W as s } from "./main-f214b458.mjs";
import "vue";
class c extends s {
constructor() {
super(...arguments), this.pending = [], this.deliveredNotifications = [], this.hasNotificationSupport = () => {
if (!("Notification" in window) || !Notification.requestPermission)
return !1;
if (Notification.permission !== "granted")
try {
new Notification("");
} catch (i) {
if (i.name == "TypeError")
return !1;
}
return !0;
};
}
async getDeliveredNotifications() {
const i = [];
for (const t of this.deliveredNotifications) {
const e = {
title: t.title,
id: parseInt(t.tag),
body: t.body
};
i.push(e);
}
return {
notifications: i
};
}
async removeDeliveredNotifications(i) {
for (const t of i.notifications) {
const e = this.deliveredNotifications.find((n) => n.tag === String(t.id));
e == null || e.close(), this.deliveredNotifications = this.deliveredNotifications.filter(() => !e);
}
}
async removeAllDeliveredNotifications() {
for (const i of this.deliveredNotifications)
i.close();
this.deliveredNotifications = [];
}
async createChannel() {
throw this.unimplemented("Not implemented on web.");
}
async deleteChannel() {
throw this.unimplemented("Not implemented on web.");
}
async listChannels() {
throw this.unimplemented("Not implemented on web.");
}
async schedule(i) {
if (!this.hasNotificationSupport())
throw this.unavailable("Notifications not supported in this browser.");
for (const t of i.notifications)
this.sendNotification(t);
return {
notifications: i.notifications.map((t) => ({
id: t.id
}))
};
}
async getPending() {
return {
notifications: this.pending
};
}
async registerActionTypes() {
throw this.unimplemented("Not implemented on web.");
}
async cancel(i) {
this.pending = this.pending.filter((t) => !i.notifications.find((e) => e.id === t.id));
}
async areEnabled() {
const { display: i } = await this.checkPermissions();
return {
value: i === "granted"
};
}
async requestPermissions() {
if (!this.hasNotificationSupport())
throw this.unavailable("Notifications not supported in this browser.");
return { display: this.transformNotificationPermission(await Notification.requestPermission()) };
}
async checkPermissions() {
if (!this.hasNotificationSupport())
throw this.unavailable("Notifications not supported in this browser.");
return { display: this.transformNotificationPermission(Notification.permission) };
}
transformNotificationPermission(i) {
switch (i) {
case "granted":
return "granted";
case "denied":
return "denied";
default:
return "prompt";
}
}
sendPending() {
var i;
const t = [], e = (/* @__PURE__ */ new Date()).getTime();
for (const n of this.pending)
!((i = n.schedule) === null || i === void 0) && i.at && n.schedule.at.getTime() <= e && (this.buildNotification(n), t.push(n));
this.pending = this.pending.filter((n) => !t.find((o) => o === n));
}
sendNotification(i) {
var t;
if (!((t = i.schedule) === null || t === void 0) && t.at) {
const e = i.schedule.at.getTime() - (/* @__PURE__ */ new Date()).getTime();
this.pending.push(i), setTimeout(() => {
this.sendPending();
}, e);
return;
}
this.buildNotification(i);
}
buildNotification(i) {
const t = new Notification(i.title, {
body: i.body,
tag: String(i.id)
});
return t.addEventListener("click", this.onClick.bind(this, i), !1), t.addEventListener("show", this.onShow.bind(this, i), !1), t.addEventListener("close", () => {
this.deliveredNotifications = this.deliveredNotifications.filter(() => !this);
}, !1), this.deliveredNotifications.push(t), t;
}
onClick(i) {
const t = {
actionId: "tap",
notification: i
};
this.notifyListeners("localNotificationActionPerformed", t);
}
onShow(i) {
this.notifyListeners("localNotificationReceived", i);
}
}
export {
c as LocalNotificationsWeb
};