import { Extension } from "evite" import React from "react" import { notification as Notf } from "antd" import { Icons, createIconRender } from "components/Icons" import { Translation } from "react-i18next" import { Haptics } from "@capacitor/haptics" export default class NotificationController extends Extension { getSoundVolume = () => { return (window.app.settings.get("notifications_sound_volume") ?? 50) / 100 } new = (notification, options = {}) => { this.notify(notification, options) this.playHaptic(options) this.playAudio(options) } notify = (notification, options = {}) => { if (typeof notification === "string") { notification = { title: "New notification", description: notification } } Notf.open({ message: {(t) => t(notification.title)} , description: {(t) => t(notification.description)} , duration: notification.duration ?? 4, icon: React.isValidElement(notification.icon) ? notification.icon : (createIconRender(notification.icon) ?? ), }) } playHaptic = async (options = {}) => { const vibrationEnabled = options.vibrationEnabled ?? window.app.settings.get("notifications_vibrate") if (vibrationEnabled) { await Haptics.vibrate() } } playAudio = (options = {}) => { const soundEnabled = options.soundEnabled ?? window.app.settings.get("notifications_sound") const soundVolume = options.soundVolume ? options.soundVolume / 100 : this.getSoundVolume() if (soundEnabled) { window.app.SoundEngine.play("notification", { volume: soundVolume, }) } } initializers = [ function () { this.eventBus.on("changeNotificationsSoundVolume", (value) => { app.notifications.playAudio({ soundVolume: value }) }) this.eventBus.on("changeNotificationsVibrate", (value) => { app.notifications.playHaptic({ vibrationEnabled: value, }) }) } ] window = { notifications: this } }