UNPKG

@magicbell/react-headless

Version:

Hooks to build a notification inbox

45 lines 2.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = WebPushNotificationsSubscriber; const tslib_1 = require("tslib"); const ramda_1 = require("ramda"); const react_1 = require("react"); const push_js_1 = require("../../lib/push.js"); const index_js_1 = tslib_1.__importDefault(require("../../stores/config/index.js")); /** * Headless component to create subscriptions to web push notifications. * * @example * <WebPushNotificationsSubscriber> * {({ createSubscription }) => * <button onClick={createSubscription}>Subscribe</button>} * <WebPushNotificationsSubscriber> */ function WebPushNotificationsSubscriber({ children, serviceWorkerPath = '/service-worker.js', skipServiceWorkerRegistration = false, }) { const config = (0, index_js_1.default)(); const isSafari = 'safari' in window; const isPushAPISupported = 'PushManager' in window; (0, react_1.useEffect)(() => { if (!skipServiceWorkerRegistration) { navigator.serviceWorker.register(serviceWorkerPath); } }, [serviceWorkerPath, skipServiceWorkerRegistration]); const createSubscription = async () => { if (!config) { return Promise.reject(new Error('Context for MagicBell was not found')); } if (isSafari) { const authenticationToken = (0, ramda_1.path)(['safari', 'authenticationToken'], config.channels?.webPush.config); const websitePushID = (0, ramda_1.path)(['safari', 'websitePushId'], config.channels?.webPush.config); const webServiceUrl = (0, ramda_1.path)(['safari', 'webServiceUrl'], config.channels?.webPush.config); return (0, push_js_1.createSafariPushSubscription)(authenticationToken, webServiceUrl, websitePushID); } if (isPushAPISupported) { return navigator.serviceWorker.ready.then(async (registration) => { await (0, push_js_1.createPushSubscription)(registration.pushManager, config); }); } }; return children({ createSubscription, isPushAPISupported }); } //# sourceMappingURL=WebPushNotificationsSubscriber.js.map