@novu/react 2.6.6 → 3.0.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Bell.cjs +63 -0
- package/dist/cjs/components/Bell.cjs.map +1 -0
- package/dist/cjs/components/Bell.d.cts +12 -0
- package/dist/cjs/components/Inbox.cjs +198 -0
- package/dist/cjs/components/Inbox.cjs.map +1 -0
- package/dist/cjs/components/Inbox.d.cts +9 -0
- package/dist/cjs/components/InboxContent.cjs +94 -0
- package/dist/cjs/components/InboxContent.cjs.map +1 -0
- package/dist/cjs/components/InboxContent.d.cts +16 -0
- package/dist/cjs/components/Mounter.cjs +51 -0
- package/dist/cjs/components/Mounter.cjs.map +1 -0
- package/dist/cjs/components/Mounter.d.cts +11 -0
- package/dist/cjs/components/Notifications.cjs +88 -0
- package/dist/cjs/components/Notifications.cjs.map +1 -0
- package/dist/cjs/components/Notifications.d.cts +14 -0
- package/dist/cjs/components/NovuUI.cjs +60 -0
- package/dist/cjs/components/NovuUI.cjs.map +1 -0
- package/dist/cjs/components/NovuUI.d.cts +12 -0
- package/dist/cjs/components/Preferences.cjs +54 -0
- package/dist/cjs/components/Preferences.cjs.map +1 -0
- package/dist/cjs/components/Preferences.d.cts +5 -0
- package/dist/cjs/components/Renderer.cjs +70 -0
- package/dist/cjs/components/Renderer.cjs.map +1 -0
- package/dist/cjs/components/Renderer.d.cts +8 -0
- package/dist/cjs/components/index.cjs +35 -0
- package/dist/cjs/components/index.cjs.map +1 -0
- package/dist/cjs/components/index.d.cts +11 -0
- package/dist/cjs/context/NovuUIContext.cjs +40 -0
- package/dist/cjs/context/NovuUIContext.cjs.map +1 -0
- package/dist/cjs/context/NovuUIContext.d.cts +14 -0
- package/dist/cjs/context/RendererContext.cjs +40 -0
- package/dist/cjs/context/RendererContext.cjs.map +1 -0
- package/dist/cjs/context/RendererContext.d.cts +15 -0
- package/dist/cjs/hooks/NovuProvider.cjs +101 -0
- package/dist/cjs/hooks/NovuProvider.cjs.map +1 -0
- package/dist/cjs/hooks/NovuProvider.d.cts +20 -0
- package/dist/cjs/hooks/index.cjs +40 -0
- package/dist/cjs/hooks/index.cjs.map +1 -0
- package/dist/cjs/hooks/index.d.cts +7 -0
- package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs +52 -0
- package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs.map +1 -0
- package/dist/cjs/hooks/internal/useBrowserTabsChannel.d.cts +8 -0
- package/dist/cjs/hooks/internal/useDataRef.cjs +36 -0
- package/dist/cjs/hooks/internal/useDataRef.cjs.map +1 -0
- package/dist/cjs/hooks/internal/useDataRef.d.cts +5 -0
- package/dist/cjs/hooks/internal/useWebsocketEvent.cjs +57 -0
- package/dist/cjs/hooks/internal/useWebsocketEvent.cjs.map +1 -0
- package/dist/cjs/hooks/internal/useWebsocketEvent.d.cts +8 -0
- package/dist/cjs/hooks/useCounts.cjs +104 -0
- package/dist/cjs/hooks/useCounts.cjs.map +1 -0
- package/dist/cjs/hooks/useCounts.d.cts +21 -0
- package/dist/cjs/hooks/useNotifications.cjs +121 -0
- package/dist/cjs/hooks/useNotifications.cjs.map +1 -0
- package/dist/cjs/hooks/useNotifications.d.cts +34 -0
- package/dist/cjs/hooks/usePreferences.cjs +80 -0
- package/dist/cjs/hooks/usePreferences.cjs.map +1 -0
- package/dist/cjs/hooks/usePreferences.d.cts +19 -0
- package/dist/cjs/index.cjs +27 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +14 -0
- package/dist/cjs/server/index.cjs +92 -0
- package/dist/cjs/server/index.cjs.map +1 -0
- package/dist/cjs/server/index.d.cts +29 -0
- package/dist/cjs/themes/index.cjs +25 -0
- package/dist/cjs/themes/index.cjs.map +1 -0
- package/dist/cjs/utils/createContextAndHook.cjs +63 -0
- package/dist/cjs/utils/createContextAndHook.cjs.map +1 -0
- package/dist/cjs/utils/createContextAndHook.d.cts +19 -0
- package/dist/cjs/utils/requestLock.cjs +52 -0
- package/dist/cjs/utils/requestLock.cjs.map +1 -0
- package/dist/cjs/utils/requestLock.d.cts +3 -0
- package/dist/cjs/utils/types.cjs +19 -0
- package/dist/cjs/utils/types.cjs.map +1 -0
- package/dist/cjs/utils/types.d.cts +54 -0
- package/dist/client/{index.d.mts → components/index.d.mts} +23 -6
- package/dist/client/{index.d.ts → components/index.d.ts} +23 -6
- package/dist/client/{index.js → components/index.js} +92 -8
- package/dist/client/components/index.js.map +1 -0
- package/dist/client/{index.mjs → components/index.mjs} +77 -8
- package/dist/client/components/index.mjs.map +1 -0
- package/dist/{hooks → client/hooks}/index.js +8 -0
- package/dist/client/hooks/index.js.map +1 -0
- package/dist/client/hooks/index.mjs.map +1 -0
- package/dist/client/themes/index.d.ts +1 -0
- package/dist/{themes → client/themes}/index.js +4 -0
- package/dist/client/themes/index.js.map +1 -0
- package/dist/client/themes/index.mjs.map +1 -0
- package/dist/esm/components/Bell.d.ts +12 -0
- package/dist/esm/components/Bell.js +28 -0
- package/dist/esm/components/Bell.js.map +1 -0
- package/dist/esm/components/Inbox.d.ts +9 -0
- package/dist/esm/components/Inbox.js +163 -0
- package/dist/esm/components/Inbox.js.map +1 -0
- package/dist/esm/components/InboxContent.d.ts +16 -0
- package/dist/esm/components/InboxContent.js +59 -0
- package/dist/esm/components/InboxContent.js.map +1 -0
- package/dist/esm/components/Mounter.d.ts +11 -0
- package/dist/esm/components/Mounter.js +26 -0
- package/dist/esm/components/Mounter.js.map +1 -0
- package/dist/esm/components/Notifications.d.ts +14 -0
- package/dist/esm/components/Notifications.js +53 -0
- package/dist/esm/components/Notifications.js.map +1 -0
- package/dist/esm/components/NovuUI.d.ts +12 -0
- package/dist/esm/components/NovuUI.js +35 -0
- package/dist/esm/components/NovuUI.js.map +1 -0
- package/dist/esm/components/Preferences.d.ts +5 -0
- package/dist/esm/components/Preferences.js +19 -0
- package/dist/esm/components/Preferences.js.map +1 -0
- package/dist/esm/components/Renderer.d.ts +8 -0
- package/dist/esm/components/Renderer.js +44 -0
- package/dist/esm/components/Renderer.js.map +1 -0
- package/dist/esm/components/index.d.ts +11 -0
- package/dist/esm/components/index.js +8 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/context/NovuUIContext.d.ts +14 -0
- package/dist/esm/context/NovuUIContext.js +13 -0
- package/dist/esm/context/NovuUIContext.js.map +1 -0
- package/dist/esm/context/RendererContext.d.ts +15 -0
- package/dist/esm/context/RendererContext.js +13 -0
- package/dist/esm/context/RendererContext.js.map +1 -0
- package/dist/esm/hooks/NovuProvider.d.ts +20 -0
- package/dist/esm/hooks/NovuProvider.js +73 -0
- package/dist/esm/hooks/NovuProvider.js.map +1 -0
- package/dist/esm/hooks/index.d.ts +7 -0
- package/dist/esm/hooks/index.js +10 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/internal/useBrowserTabsChannel.d.ts +8 -0
- package/dist/esm/hooks/internal/useBrowserTabsChannel.js +27 -0
- package/dist/esm/hooks/internal/useBrowserTabsChannel.js.map +1 -0
- package/dist/esm/hooks/internal/useDataRef.d.ts +5 -0
- package/dist/esm/hooks/internal/useDataRef.js +11 -0
- package/dist/esm/hooks/internal/useDataRef.js.map +1 -0
- package/dist/esm/hooks/internal/useWebsocketEvent.d.ts +8 -0
- package/dist/esm/hooks/internal/useWebsocketEvent.js +32 -0
- package/dist/esm/hooks/internal/useWebsocketEvent.js.map +1 -0
- package/dist/esm/hooks/useCounts.d.ts +21 -0
- package/dist/esm/hooks/useCounts.js +76 -0
- package/dist/esm/hooks/useCounts.js.map +1 -0
- package/dist/esm/hooks/useNotifications.d.ts +34 -0
- package/dist/esm/hooks/useNotifications.js +96 -0
- package/dist/esm/hooks/useNotifications.js.map +1 -0
- package/dist/esm/hooks/usePreferences.d.ts +19 -0
- package/dist/esm/hooks/usePreferences.js +55 -0
- package/dist/esm/hooks/usePreferences.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/server/index.d.ts +29 -0
- package/dist/esm/server/index.js +56 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/themes/index.d.ts +1 -0
- package/dist/esm/themes/index.js +3 -0
- package/dist/esm/themes/index.js.map +1 -0
- package/dist/esm/utils/createContextAndHook.d.ts +19 -0
- package/dist/esm/utils/createContextAndHook.js +27 -0
- package/dist/esm/utils/createContextAndHook.js.map +1 -0
- package/dist/esm/utils/requestLock.d.ts +3 -0
- package/dist/esm/utils/requestLock.js +27 -0
- package/dist/esm/utils/requestLock.js.map +1 -0
- package/dist/esm/utils/types.d.ts +54 -0
- package/dist/esm/utils/types.js +1 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/server/{server.d.mts → index.d.mts} +26 -5
- package/dist/server/{server.d.ts → index.d.ts} +26 -5
- package/dist/server/{server.js → index.js} +17 -20
- package/dist/server/index.js.map +1 -0
- package/dist/server/{server.mjs → index.mjs} +16 -19
- package/dist/server/index.mjs.map +1 -0
- package/hooks/package.json +3 -3
- package/package.json +61 -39
- package/server/package.json +5 -0
- package/themes/package.json +3 -3
- package/dist/client/index.js.map +0 -1
- package/dist/client/index.mjs.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/index.mjs.map +0 -1
- package/dist/server/server.js.map +0 -1
- package/dist/server/server.mjs.map +0 -1
- package/dist/themes/index.js.map +0 -1
- package/dist/themes/index.mjs.map +0 -1
- /package/dist/{themes/index.d.mts → cjs/themes/index.d.cts} +0 -0
- /package/dist/{hooks → client/hooks}/index.d.mts +0 -0
- /package/dist/{hooks → client/hooks}/index.d.ts +0 -0
- /package/dist/{hooks → client/hooks}/index.mjs +0 -0
- /package/dist/{themes/index.d.ts → client/themes/index.d.mts} +0 -0
- /package/dist/{themes → client/themes}/index.mjs +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/hooks/internal/useBrowserTabsChannel.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const useBrowserTabsChannel = <T = unknown>({\n channelName,\n onMessage,\n}: {\n channelName: string;\n onMessage: (args: T) => void;\n}) => {\n const [tabsChannel] = useState(\n typeof BroadcastChannel !== 'undefined' ? new BroadcastChannel(channelName) : undefined\n );\n\n const postMessage = (data: T) => {\n tabsChannel?.postMessage(data);\n };\n\n useEffect(() => {\n const listener = (event: MessageEvent<T>) => {\n onMessage(event.data);\n };\n\n tabsChannel?.addEventListener('message', listener);\n\n return () => {\n tabsChannel?.removeEventListener('message', listener);\n };\n }, []);\n\n return { postMessage };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoC;AAE7B,IAAM,wBAAwB,CAAc;AAAA,EACjD;AAAA,EACA;AACF,MAGM;AACJ,QAAM,CAAC,WAAW,QAAI;AAAA,IACpB,OAAO,qBAAqB,cAAc,IAAI,iBAAiB,WAAW,IAAI;AAAA,EAChF;AAEA,QAAM,cAAc,CAAC,SAAY;AAC/B,+CAAa,YAAY;AAAA,EAC3B;AAEA,8BAAU,MAAM;AACd,UAAM,WAAW,CAAC,UAA2B;AAC3C,gBAAU,MAAM,IAAI;AAAA,IACtB;AAEA,+CAAa,iBAAiB,WAAW;AAEzC,WAAO,MAAM;AACX,iDAAa,oBAAoB,WAAW;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,YAAY;AACvB;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/internal/useDataRef.ts
|
|
21
|
+
var useDataRef_exports = {};
|
|
22
|
+
__export(useDataRef_exports, {
|
|
23
|
+
useDataRef: () => useDataRef
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(useDataRef_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var useDataRef = (data) => {
|
|
28
|
+
const ref = (0, import_react.useRef)(data);
|
|
29
|
+
ref.current = data;
|
|
30
|
+
return ref;
|
|
31
|
+
};
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
useDataRef
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=useDataRef.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/hooks/internal/useDataRef.ts"],"sourcesContent":["import { useRef } from 'react';\n\nexport const useDataRef = <T>(data: T) => {\n const ref = useRef(data);\n ref.current = data;\n\n return ref;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AAEhB,IAAM,aAAa,CAAI,SAAY;AACxC,QAAM,UAAM,qBAAO,IAAI;AACvB,MAAI,UAAU;AAEd,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/internal/useWebsocketEvent.ts
|
|
21
|
+
var useWebsocketEvent_exports = {};
|
|
22
|
+
__export(useWebsocketEvent_exports, {
|
|
23
|
+
useWebSocketEvent: () => useWebSocketEvent
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(useWebsocketEvent_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_NovuProvider = require("../NovuProvider.cjs");
|
|
28
|
+
var import_requestLock = require("../../utils/requestLock.cjs");
|
|
29
|
+
var import_useBrowserTabsChannel = require("./useBrowserTabsChannel.cjs");
|
|
30
|
+
var useWebSocketEvent = ({
|
|
31
|
+
event: webSocketEvent,
|
|
32
|
+
eventHandler: onMessage
|
|
33
|
+
}) => {
|
|
34
|
+
const novu = (0, import_NovuProvider.useNovu)();
|
|
35
|
+
const { postMessage } = (0, import_useBrowserTabsChannel.useBrowserTabsChannel)({ channelName: `nv.${webSocketEvent}`, onMessage });
|
|
36
|
+
const updateReadCount = (data) => {
|
|
37
|
+
onMessage(data);
|
|
38
|
+
postMessage(data);
|
|
39
|
+
};
|
|
40
|
+
(0, import_react.useEffect)(() => {
|
|
41
|
+
let cleanup;
|
|
42
|
+
const resolveLock = (0, import_requestLock.requestLock)(`nv.${webSocketEvent}`, () => {
|
|
43
|
+
cleanup = novu.on(webSocketEvent, updateReadCount);
|
|
44
|
+
});
|
|
45
|
+
return () => {
|
|
46
|
+
if (cleanup) {
|
|
47
|
+
cleanup();
|
|
48
|
+
}
|
|
49
|
+
resolveLock();
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
52
|
+
};
|
|
53
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
54
|
+
0 && (module.exports = {
|
|
55
|
+
useWebSocketEvent
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=useWebsocketEvent.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/hooks/internal/useWebsocketEvent.ts"],"sourcesContent":["import { EventHandler, Events, SocketEventNames } from '@novu/js';\nimport { useEffect } from 'react';\nimport { useNovu } from '../NovuProvider';\nimport { requestLock } from '../../utils/requestLock';\nimport { useBrowserTabsChannel } from './useBrowserTabsChannel';\n\nexport const useWebSocketEvent = <E extends SocketEventNames>({\n event: webSocketEvent,\n eventHandler: onMessage,\n}: {\n event: E;\n eventHandler: (args: Events[E]) => void;\n}) => {\n const novu = useNovu();\n const { postMessage } = useBrowserTabsChannel({ channelName: `nv.${webSocketEvent}`, onMessage });\n\n const updateReadCount: EventHandler<Events[E]> = (data) => {\n onMessage(data);\n postMessage(data);\n };\n\n useEffect(() => {\n let cleanup: () => void;\n const resolveLock = requestLock(`nv.${webSocketEvent}`, () => {\n cleanup = novu.on(webSocketEvent, updateReadCount);\n });\n\n return () => {\n if (cleanup) {\n cleanup();\n }\n\n resolveLock();\n };\n }, []);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA0B;AAC1B,0BAAwB;AACxB,yBAA4B;AAC5B,mCAAsC;AAE/B,IAAM,oBAAoB,CAA6B;AAAA,EAC5D,OAAO;AAAA,EACP,cAAc;AAChB,MAGM;AACJ,QAAM,WAAO,6BAAQ;AACrB,QAAM,EAAE,YAAY,QAAI,oDAAsB,EAAE,aAAa,MAAM,cAAc,IAAI,UAAU,CAAC;AAEhG,QAAM,kBAA2C,CAAC,SAAS;AACzD,cAAU,IAAI;AACd,gBAAY,IAAI;AAAA,EAClB;AAEA,8BAAU,MAAM;AACd,QAAI;AACJ,UAAM,kBAAc,gCAAY,MAAM,cAAc,IAAI,MAAM;AAC5D,gBAAU,KAAK,GAAG,gBAAgB,eAAe;AAAA,IACnD,CAAC;AAED,WAAO,MAAM;AACX,UAAI,SAAS;AACX,gBAAQ;AAAA,MACV;AAEA,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,CAAC;AACP;","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SocketEventNames, Events } from '@novu/js';
|
|
2
|
+
|
|
3
|
+
declare const useWebSocketEvent: <E extends SocketEventNames>({ event: webSocketEvent, eventHandler: onMessage, }: {
|
|
4
|
+
event: E;
|
|
5
|
+
eventHandler: (args: Events[E]) => void;
|
|
6
|
+
}) => void;
|
|
7
|
+
|
|
8
|
+
export { useWebSocketEvent };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/useCounts.ts
|
|
21
|
+
var useCounts_exports = {};
|
|
22
|
+
__export(useCounts_exports, {
|
|
23
|
+
useCounts: () => useCounts
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(useCounts_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_js = require("@novu/js");
|
|
28
|
+
var import_NovuProvider = require("./NovuProvider.cjs");
|
|
29
|
+
var import_useWebsocketEvent = require("./internal/useWebsocketEvent.cjs");
|
|
30
|
+
var useCounts = (props) => {
|
|
31
|
+
const { filters, onSuccess, onError } = props;
|
|
32
|
+
const { notifications } = (0, import_NovuProvider.useNovu)();
|
|
33
|
+
const [error, setError] = (0, import_react.useState)();
|
|
34
|
+
const [counts, setCounts] = (0, import_react.useState)();
|
|
35
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(true);
|
|
36
|
+
const [isFetching, setIsFetching] = (0, import_react.useState)(false);
|
|
37
|
+
const sync = async (notification) => {
|
|
38
|
+
const existingCounts = counts ?? new Array(filters.length).fill(void 0);
|
|
39
|
+
let countFiltersToFetch = [];
|
|
40
|
+
if (notification) {
|
|
41
|
+
for (let i = 0; i < existingCounts.length; i++) {
|
|
42
|
+
const filter = filters[i];
|
|
43
|
+
if ((0, import_js.areTagsEqual)(filter.tags, notification.tags)) {
|
|
44
|
+
countFiltersToFetch.push(filter);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
countFiltersToFetch = filters;
|
|
49
|
+
}
|
|
50
|
+
if (countFiltersToFetch.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
setIsFetching(true);
|
|
54
|
+
const countsRes = await notifications.count({ filters: countFiltersToFetch });
|
|
55
|
+
setIsFetching(false);
|
|
56
|
+
setIsLoading(false);
|
|
57
|
+
if (countsRes.error) {
|
|
58
|
+
setError(countsRes.error);
|
|
59
|
+
onError == null ? void 0 : onError(countsRes.error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const data = countsRes.data;
|
|
63
|
+
onSuccess == null ? void 0 : onSuccess(data.counts);
|
|
64
|
+
setCounts((oldCounts) => {
|
|
65
|
+
const newCounts = [];
|
|
66
|
+
const countsReceived = data.counts;
|
|
67
|
+
for (let i = 0; i < existingCounts.length; i++) {
|
|
68
|
+
const countReceived = countsReceived.find((c) => {
|
|
69
|
+
var _a;
|
|
70
|
+
return (0, import_js.areTagsEqual)(c.filter.tags, (_a = existingCounts[i]) == null ? void 0 : _a.filter.tags);
|
|
71
|
+
});
|
|
72
|
+
newCounts.push(countReceived || oldCounts[i]);
|
|
73
|
+
}
|
|
74
|
+
return newCounts;
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
(0, import_useWebsocketEvent.useWebSocketEvent)({
|
|
78
|
+
event: "notifications.notification_received",
|
|
79
|
+
eventHandler: (data) => {
|
|
80
|
+
sync(data.result);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
(0, import_useWebsocketEvent.useWebSocketEvent)({
|
|
84
|
+
event: "notifications.unread_count_changed",
|
|
85
|
+
eventHandler: () => {
|
|
86
|
+
sync();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
(0, import_react.useEffect)(() => {
|
|
90
|
+
setError(void 0);
|
|
91
|
+
setIsLoading(true);
|
|
92
|
+
setIsFetching(false);
|
|
93
|
+
sync();
|
|
94
|
+
}, [JSON.stringify(filters)]);
|
|
95
|
+
const refetch = async () => {
|
|
96
|
+
await sync();
|
|
97
|
+
};
|
|
98
|
+
return { counts, error, refetch, isLoading, isFetching };
|
|
99
|
+
};
|
|
100
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
101
|
+
0 && (module.exports = {
|
|
102
|
+
useCounts
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=useCounts.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useCounts.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Notification, NotificationFilter, NovuError, areTagsEqual } from '@novu/js';\nimport { useNovu } from './NovuProvider';\nimport { useWebSocketEvent } from './internal/useWebsocketEvent';\n\ntype Count = {\n count: number;\n filter: NotificationFilter;\n};\n\nexport type UseCountsProps = {\n filters: NotificationFilter[];\n onSuccess?: (data: Count[]) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseCountsResult = {\n counts?: Count[];\n error?: NovuError;\n isLoading: boolean; // initial loading\n isFetching: boolean; // the request is in flight\n refetch: () => Promise<void>;\n};\n\nexport const useCounts = (props: UseCountsProps): UseCountsResult => {\n const { filters, onSuccess, onError } = props;\n const { notifications } = useNovu();\n const [error, setError] = useState<NovuError>();\n const [counts, setCounts] = useState<Count[]>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n\n const sync = async (notification?: Notification) => {\n const existingCounts = counts ?? (new Array(filters.length).fill(undefined) as (Count | undefined)[]);\n let countFiltersToFetch: NotificationFilter[] = [];\n if (notification) {\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < existingCounts.length; i++) {\n const filter = filters[i];\n if (areTagsEqual(filter.tags, notification.tags)) {\n countFiltersToFetch.push(filter);\n }\n }\n } else {\n countFiltersToFetch = filters;\n }\n\n if (countFiltersToFetch.length === 0) {\n return;\n }\n\n setIsFetching(true);\n const countsRes = await notifications.count({ filters: countFiltersToFetch });\n setIsFetching(false);\n setIsLoading(false);\n if (countsRes.error) {\n setError(countsRes.error);\n onError?.(countsRes.error);\n\n return;\n }\n const data = countsRes.data!;\n onSuccess?.(data.counts);\n\n setCounts((oldCounts) => {\n const newCounts: Count[] = [];\n const countsReceived = data.counts;\n\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < existingCounts.length; i++) {\n const countReceived = countsReceived.find((c) => areTagsEqual(c.filter.tags, existingCounts[i]?.filter.tags));\n\n newCounts.push(countReceived || oldCounts![i]);\n }\n\n return newCounts;\n });\n };\n\n useWebSocketEvent({\n event: 'notifications.notification_received',\n eventHandler: (data) => {\n sync(data.result);\n },\n });\n\n useWebSocketEvent({\n event: 'notifications.unread_count_changed',\n eventHandler: () => {\n sync();\n },\n });\n\n useEffect(() => {\n setError(undefined);\n setIsLoading(true);\n setIsFetching(false);\n sync();\n }, [JSON.stringify(filters)]);\n\n const refetch = async () => {\n await sync();\n };\n\n return { counts, error, refetch, isLoading, isFetching };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoC;AACpC,gBAA0E;AAC1E,0BAAwB;AACxB,+BAAkC;AAqB3B,IAAM,YAAY,CAAC,UAA2C;AACnE,QAAM,EAAE,SAAS,WAAW,QAAQ,IAAI;AACxC,QAAM,EAAE,cAAc,QAAI,6BAAQ;AAClC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAC9C,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAkB;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAElD,QAAM,OAAO,OAAO,iBAAgC;AAClD,UAAM,iBAAiB,UAAW,IAAI,MAAM,QAAQ,MAAM,EAAE,KAAK,MAAS;AAC1E,QAAI,sBAA4C,CAAC;AACjD,QAAI,cAAc;AAEhB,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,cAAM,SAAS,QAAQ,CAAC;AACxB,gBAAI,wBAAa,OAAO,MAAM,aAAa,IAAI,GAAG;AAChD,8BAAoB,KAAK,MAAM;AAAA,QACjC;AAAA,MACF;AAAA,IACF,OAAO;AACL,4BAAsB;AAAA,IACxB;AAEA,QAAI,oBAAoB,WAAW,GAAG;AACpC;AAAA,IACF;AAEA,kBAAc,IAAI;AAClB,UAAM,YAAY,MAAM,cAAc,MAAM,EAAE,SAAS,oBAAoB,CAAC;AAC5E,kBAAc,KAAK;AACnB,iBAAa,KAAK;AAClB,QAAI,UAAU,OAAO;AACnB,eAAS,UAAU,KAAK;AACxB,yCAAU,UAAU;AAEpB;AAAA,IACF;AACA,UAAM,OAAO,UAAU;AACvB,2CAAY,KAAK;AAEjB,cAAU,CAAC,cAAc;AACvB,YAAM,YAAqB,CAAC;AAC5B,YAAM,iBAAiB,KAAK;AAG5B,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,cAAM,gBAAgB,eAAe,KAAK,CAAC,MAAG;AAtEtD;AAsEyD,6CAAa,EAAE,OAAO,OAAM,oBAAe,CAAC,MAAhB,mBAAmB,OAAO,IAAI;AAAA,SAAC;AAE5G,kBAAU,KAAK,iBAAiB,UAAW,CAAC,CAAC;AAAA,MAC/C;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,kDAAkB;AAAA,IAChB,OAAO;AAAA,IACP,cAAc,CAAC,SAAS;AACtB,WAAK,KAAK,MAAM;AAAA,IAClB;AAAA,EACF,CAAC;AAED,kDAAkB;AAAA,IAChB,OAAO;AAAA,IACP,cAAc,MAAM;AAClB,WAAK;AAAA,IACP;AAAA,EACF,CAAC;AAED,8BAAU,MAAM;AACd,aAAS,MAAS;AAClB,iBAAa,IAAI;AACjB,kBAAc,KAAK;AACnB,SAAK;AAAA,EACP,GAAG,CAAC,KAAK,UAAU,OAAO,CAAC,CAAC;AAE5B,QAAM,UAAU,YAAY;AAC1B,UAAM,KAAK;AAAA,EACb;AAEA,SAAO,EAAE,QAAQ,OAAO,SAAS,WAAW,WAAW;AACzD;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NotificationFilter, NovuError } from '@novu/js';
|
|
2
|
+
|
|
3
|
+
type Count = {
|
|
4
|
+
count: number;
|
|
5
|
+
filter: NotificationFilter;
|
|
6
|
+
};
|
|
7
|
+
type UseCountsProps = {
|
|
8
|
+
filters: NotificationFilter[];
|
|
9
|
+
onSuccess?: (data: Count[]) => void;
|
|
10
|
+
onError?: (error: NovuError) => void;
|
|
11
|
+
};
|
|
12
|
+
type UseCountsResult = {
|
|
13
|
+
counts?: Count[];
|
|
14
|
+
error?: NovuError;
|
|
15
|
+
isLoading: boolean;
|
|
16
|
+
isFetching: boolean;
|
|
17
|
+
refetch: () => Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
declare const useCounts: (props: UseCountsProps) => UseCountsResult;
|
|
20
|
+
|
|
21
|
+
export { type UseCountsProps, type UseCountsResult, useCounts };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/useNotifications.ts
|
|
21
|
+
var useNotifications_exports = {};
|
|
22
|
+
__export(useNotifications_exports, {
|
|
23
|
+
useNotifications: () => useNotifications
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(useNotifications_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_js = require("@novu/js");
|
|
28
|
+
var import_NovuProvider = require("./NovuProvider.cjs");
|
|
29
|
+
var useNotifications = (props) => {
|
|
30
|
+
const { tags, read, archived = false, limit, onSuccess, onError } = props || {};
|
|
31
|
+
const filterRef = (0, import_react.useRef)(void 0);
|
|
32
|
+
const { notifications, on } = (0, import_NovuProvider.useNovu)();
|
|
33
|
+
const [data, setData] = (0, import_react.useState)();
|
|
34
|
+
const [error, setError] = (0, import_react.useState)();
|
|
35
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(true);
|
|
36
|
+
const [isFetching, setIsFetching] = (0, import_react.useState)(false);
|
|
37
|
+
const [hasMore, setHasMore] = (0, import_react.useState)(false);
|
|
38
|
+
const length = data == null ? void 0 : data.length;
|
|
39
|
+
const after = length ? data[length - 1].id : void 0;
|
|
40
|
+
const sync = (event) => {
|
|
41
|
+
if (!event.data || filterRef.current && !(0, import_js.isSameFilter)(filterRef.current, event.data.filter)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
setData(event.data.notifications);
|
|
45
|
+
setHasMore(event.data.hasMore);
|
|
46
|
+
};
|
|
47
|
+
(0, import_react.useEffect)(() => {
|
|
48
|
+
const cleanup = on("notifications.list.updated", sync);
|
|
49
|
+
return () => {
|
|
50
|
+
cleanup();
|
|
51
|
+
};
|
|
52
|
+
}, []);
|
|
53
|
+
(0, import_react.useEffect)(() => {
|
|
54
|
+
const newFilter = { tags, read, archived };
|
|
55
|
+
if (filterRef.current && (0, import_js.isSameFilter)(filterRef.current, newFilter)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
notifications.clearCache({ filter: filterRef.current });
|
|
59
|
+
filterRef.current = newFilter;
|
|
60
|
+
fetchNotifications({ refetch: true });
|
|
61
|
+
}, [tags, read, archived]);
|
|
62
|
+
const fetchNotifications = async (options) => {
|
|
63
|
+
if (options == null ? void 0 : options.refetch) {
|
|
64
|
+
setError(void 0);
|
|
65
|
+
setIsLoading(true);
|
|
66
|
+
setIsFetching(false);
|
|
67
|
+
}
|
|
68
|
+
setIsFetching(true);
|
|
69
|
+
const response = await notifications.list({
|
|
70
|
+
tags,
|
|
71
|
+
read,
|
|
72
|
+
archived,
|
|
73
|
+
limit,
|
|
74
|
+
after: (options == null ? void 0 : options.refetch) ? void 0 : after
|
|
75
|
+
});
|
|
76
|
+
if (response.error) {
|
|
77
|
+
setError(response.error);
|
|
78
|
+
onError == null ? void 0 : onError(response.error);
|
|
79
|
+
} else {
|
|
80
|
+
onSuccess == null ? void 0 : onSuccess(response.data.notifications);
|
|
81
|
+
setData(response.data.notifications);
|
|
82
|
+
setHasMore(response.data.hasMore);
|
|
83
|
+
}
|
|
84
|
+
setIsLoading(false);
|
|
85
|
+
setIsFetching(false);
|
|
86
|
+
};
|
|
87
|
+
const refetch = () => {
|
|
88
|
+
notifications.clearCache({ filter: { tags, read, archived } });
|
|
89
|
+
return fetchNotifications({ refetch: true });
|
|
90
|
+
};
|
|
91
|
+
const fetchMore = async () => {
|
|
92
|
+
if (!hasMore || isFetching) return;
|
|
93
|
+
return fetchNotifications();
|
|
94
|
+
};
|
|
95
|
+
const readAll = async () => {
|
|
96
|
+
return await notifications.readAll({ tags });
|
|
97
|
+
};
|
|
98
|
+
const archiveAll = async () => {
|
|
99
|
+
return await notifications.archiveAll({ tags });
|
|
100
|
+
};
|
|
101
|
+
const archiveAllRead = async () => {
|
|
102
|
+
return await notifications.archiveAllRead({ tags });
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
readAll,
|
|
106
|
+
archiveAll,
|
|
107
|
+
archiveAllRead,
|
|
108
|
+
notifications: data,
|
|
109
|
+
error,
|
|
110
|
+
isLoading,
|
|
111
|
+
isFetching,
|
|
112
|
+
refetch,
|
|
113
|
+
fetchMore,
|
|
114
|
+
hasMore
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
118
|
+
0 && (module.exports = {
|
|
119
|
+
useNotifications
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=useNotifications.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useNotifications.ts"],"sourcesContent":["import { useState, useEffect, useRef } from 'react';\nimport { ListNotificationsResponse, Notification, NovuError, isSameFilter, NotificationFilter } from '@novu/js';\nimport { useNovu } from './NovuProvider';\n\nexport type UseNotificationsProps = {\n tags?: string[];\n read?: boolean;\n archived?: boolean;\n limit?: number;\n onSuccess?: (data: Notification[]) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseNotificationsResult = {\n notifications?: Notification[];\n error?: NovuError;\n isLoading: boolean;\n isFetching: boolean;\n hasMore: boolean;\n readAll: () => Promise<{\n data?: void | undefined;\n error?: NovuError | undefined;\n }>;\n archiveAll: () => Promise<{\n data?: void | undefined;\n error?: NovuError | undefined;\n }>;\n archiveAllRead: () => Promise<{\n data?: void | undefined;\n error?: NovuError | undefined;\n }>;\n refetch: () => Promise<void>;\n fetchMore: () => Promise<void>;\n};\n\nexport const useNotifications = (props?: UseNotificationsProps): UseNotificationsResult => {\n const { tags, read, archived = false, limit, onSuccess, onError } = props || {};\n const filterRef = useRef<NotificationFilter | undefined>(undefined);\n const { notifications, on } = useNovu();\n const [data, setData] = useState<Array<Notification>>();\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n const [hasMore, setHasMore] = useState(false);\n const length = data?.length;\n const after = length ? data[length - 1].id : undefined;\n\n const sync = (event: { data?: ListNotificationsResponse }) => {\n if (!event.data || (filterRef.current && !isSameFilter(filterRef.current, event.data.filter))) {\n return;\n }\n setData(event.data.notifications);\n setHasMore(event.data.hasMore);\n };\n\n useEffect(() => {\n const cleanup = on('notifications.list.updated', sync);\n\n return () => {\n cleanup();\n };\n }, []);\n\n useEffect(() => {\n const newFilter = { tags, read, archived };\n if (filterRef.current && isSameFilter(filterRef.current, newFilter)) {\n return;\n }\n\n notifications.clearCache({ filter: filterRef.current });\n filterRef.current = newFilter;\n\n fetchNotifications({ refetch: true });\n }, [tags, read, archived]);\n\n const fetchNotifications = async (options?: { refetch: boolean }) => {\n if (options?.refetch) {\n setError(undefined);\n setIsLoading(true);\n setIsFetching(false);\n }\n setIsFetching(true);\n const response = await notifications.list({\n tags,\n read,\n archived,\n limit,\n after: options?.refetch ? undefined : after,\n });\n if (response.error) {\n setError(response.error);\n onError?.(response.error);\n } else {\n onSuccess?.(response.data!.notifications);\n setData(response.data!.notifications);\n setHasMore(response.data!.hasMore);\n }\n setIsLoading(false);\n setIsFetching(false);\n };\n\n const refetch = () => {\n notifications.clearCache({ filter: { tags, read, archived } });\n\n return fetchNotifications({ refetch: true });\n };\n\n const fetchMore = async () => {\n if (!hasMore || isFetching) return;\n\n return fetchNotifications();\n };\n\n const readAll = async () => {\n return await notifications.readAll({ tags });\n };\n\n const archiveAll = async () => {\n return await notifications.archiveAll({ tags });\n };\n\n const archiveAllRead = async () => {\n return await notifications.archiveAllRead({ tags });\n };\n\n return {\n readAll,\n archiveAll,\n archiveAllRead,\n notifications: data,\n error,\n isLoading,\n isFetching,\n refetch,\n fetchMore,\n hasMore,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Notification, NovuError } from '@novu/js';
|
|
2
|
+
|
|
3
|
+
type UseNotificationsProps = {
|
|
4
|
+
tags?: string[];
|
|
5
|
+
read?: boolean;
|
|
6
|
+
archived?: boolean;
|
|
7
|
+
limit?: number;
|
|
8
|
+
onSuccess?: (data: Notification[]) => void;
|
|
9
|
+
onError?: (error: NovuError) => void;
|
|
10
|
+
};
|
|
11
|
+
type UseNotificationsResult = {
|
|
12
|
+
notifications?: Notification[];
|
|
13
|
+
error?: NovuError;
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
isFetching: boolean;
|
|
16
|
+
hasMore: boolean;
|
|
17
|
+
readAll: () => Promise<{
|
|
18
|
+
data?: void | undefined;
|
|
19
|
+
error?: NovuError | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
archiveAll: () => Promise<{
|
|
22
|
+
data?: void | undefined;
|
|
23
|
+
error?: NovuError | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
archiveAllRead: () => Promise<{
|
|
26
|
+
data?: void | undefined;
|
|
27
|
+
error?: NovuError | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
refetch: () => Promise<void>;
|
|
30
|
+
fetchMore: () => Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
declare const useNotifications: (props?: UseNotificationsProps) => UseNotificationsResult;
|
|
33
|
+
|
|
34
|
+
export { type UseNotificationsProps, type UseNotificationsResult, useNotifications };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/usePreferences.ts
|
|
21
|
+
var usePreferences_exports = {};
|
|
22
|
+
__export(usePreferences_exports, {
|
|
23
|
+
usePreferences: () => usePreferences
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(usePreferences_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_NovuProvider = require("./NovuProvider.cjs");
|
|
28
|
+
var usePreferences = (props) => {
|
|
29
|
+
const { onSuccess, onError } = props || {};
|
|
30
|
+
const [data, setData] = (0, import_react.useState)();
|
|
31
|
+
const { preferences, on } = (0, import_NovuProvider.useNovu)();
|
|
32
|
+
const [error, setError] = (0, import_react.useState)();
|
|
33
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(true);
|
|
34
|
+
const [isFetching, setIsFetching] = (0, import_react.useState)(false);
|
|
35
|
+
const sync = (event) => {
|
|
36
|
+
if (!event.data) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setData(event.data);
|
|
40
|
+
};
|
|
41
|
+
(0, import_react.useEffect)(() => {
|
|
42
|
+
fetchPreferences();
|
|
43
|
+
const listUpdatedCleanup = on("preferences.list.updated", sync);
|
|
44
|
+
const listPendingCleanup = on("preferences.list.pending", sync);
|
|
45
|
+
const listResolvedCleanup = on("preferences.list.resolved", sync);
|
|
46
|
+
return () => {
|
|
47
|
+
listUpdatedCleanup();
|
|
48
|
+
listPendingCleanup();
|
|
49
|
+
listResolvedCleanup();
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
52
|
+
const fetchPreferences = async () => {
|
|
53
|
+
setIsFetching(true);
|
|
54
|
+
const response = await preferences.list(props == null ? void 0 : props.filter);
|
|
55
|
+
if (response.error) {
|
|
56
|
+
setError(response.error);
|
|
57
|
+
onError == null ? void 0 : onError(response.error);
|
|
58
|
+
} else {
|
|
59
|
+
onSuccess == null ? void 0 : onSuccess(response.data);
|
|
60
|
+
}
|
|
61
|
+
setIsLoading(false);
|
|
62
|
+
setIsFetching(false);
|
|
63
|
+
};
|
|
64
|
+
const refetch = () => {
|
|
65
|
+
preferences.cache.clearAll();
|
|
66
|
+
return fetchPreferences();
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
preferences: data,
|
|
70
|
+
error,
|
|
71
|
+
isLoading,
|
|
72
|
+
isFetching,
|
|
73
|
+
refetch
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
77
|
+
0 && (module.exports = {
|
|
78
|
+
usePreferences
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=usePreferences.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/usePreferences.ts"],"sourcesContent":["import { NovuError, Preference } from '@novu/js';\nimport { useEffect, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UsePreferencesProps = {\n filter?: { tags?: string[] };\n onSuccess?: (data: Preference[]) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UsePreferencesResult = {\n preferences?: Preference[];\n error?: NovuError;\n isLoading: boolean; // initial loading\n isFetching: boolean; // the request is in flight\n refetch: () => Promise<void>;\n};\n\nexport const usePreferences = (props?: UsePreferencesProps): UsePreferencesResult => {\n const { onSuccess, onError } = props || {};\n const [data, setData] = useState<Preference[]>();\n const { preferences, on } = useNovu();\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n\n const sync = (event: { data?: Preference[] }) => {\n if (!event.data) {\n return;\n }\n setData(event.data);\n };\n\n useEffect(() => {\n fetchPreferences();\n\n const listUpdatedCleanup = on('preferences.list.updated', sync);\n const listPendingCleanup = on('preferences.list.pending', sync);\n const listResolvedCleanup = on('preferences.list.resolved', sync);\n\n return () => {\n listUpdatedCleanup();\n listPendingCleanup();\n listResolvedCleanup();\n };\n }, []);\n\n const fetchPreferences = async () => {\n setIsFetching(true);\n const response = await preferences.list(props?.filter);\n if (response.error) {\n setError(response.error);\n onError?.(response.error);\n } else {\n onSuccess?.(response.data!);\n }\n setIsLoading(false);\n setIsFetching(false);\n };\n\n const refetch = () => {\n preferences.cache.clearAll();\n\n return fetchPreferences();\n };\n\n return {\n preferences: data,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAoC;AACpC,0BAAwB;AAgBjB,IAAM,iBAAiB,CAAC,UAAsD;AACnF,QAAM,EAAE,WAAW,QAAQ,IAAI,SAAS,CAAC;AACzC,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAuB;AAC/C,QAAM,EAAE,aAAa,GAAG,QAAI,6BAAQ;AACpC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAC9C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,IAAI;AAC/C,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAElD,QAAM,OAAO,CAAC,UAAmC;AAC/C,QAAI,CAAC,MAAM,MAAM;AACf;AAAA,IACF;AACA,YAAQ,MAAM,IAAI;AAAA,EACpB;AAEA,8BAAU,MAAM;AACd,qBAAiB;AAEjB,UAAM,qBAAqB,GAAG,4BAA4B,IAAI;AAC9D,UAAM,qBAAqB,GAAG,4BAA4B,IAAI;AAC9D,UAAM,sBAAsB,GAAG,6BAA6B,IAAI;AAEhE,WAAO,MAAM;AACX,yBAAmB;AACnB,yBAAmB;AACnB,0BAAoB;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAmB,YAAY;AACnC,kBAAc,IAAI;AAClB,UAAM,WAAW,MAAM,YAAY,KAAK,+BAAO,MAAM;AACrD,QAAI,SAAS,OAAO;AAClB,eAAS,SAAS,KAAK;AACvB,yCAAU,SAAS;AAAA,IACrB,OAAO;AACL,6CAAY,SAAS;AAAA,IACvB;AACA,iBAAa,KAAK;AAClB,kBAAc,KAAK;AAAA,EACrB;AAEA,QAAM,UAAU,MAAM;AACpB,gBAAY,MAAM,SAAS;AAE3B,WAAO,iBAAiB;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Preference, NovuError } from '@novu/js';
|
|
2
|
+
|
|
3
|
+
type UsePreferencesProps = {
|
|
4
|
+
filter?: {
|
|
5
|
+
tags?: string[];
|
|
6
|
+
};
|
|
7
|
+
onSuccess?: (data: Preference[]) => void;
|
|
8
|
+
onError?: (error: NovuError) => void;
|
|
9
|
+
};
|
|
10
|
+
type UsePreferencesResult = {
|
|
11
|
+
preferences?: Preference[];
|
|
12
|
+
error?: NovuError;
|
|
13
|
+
isLoading: boolean;
|
|
14
|
+
isFetching: boolean;
|
|
15
|
+
refetch: () => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
declare const usePreferences: (props?: UsePreferencesProps) => UsePreferencesResult;
|
|
18
|
+
|
|
19
|
+
export { type UsePreferencesProps, type UsePreferencesResult, usePreferences };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
|
|
17
|
+
// src/index.ts
|
|
18
|
+
var src_exports = {};
|
|
19
|
+
module.exports = __toCommonJS(src_exports);
|
|
20
|
+
__reExport(src_exports, require("./components/index.cjs"), module.exports);
|
|
21
|
+
__reExport(src_exports, require("./hooks/index.cjs"), module.exports);
|
|
22
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
23
|
+
0 && (module.exports = {
|
|
24
|
+
...require("./components/index.cjs"),
|
|
25
|
+
...require("./hooks/index.cjs")
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './components';\nexport * from './hooks';\nexport type * from './utils/types';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,mCAAd;AACA,wBAAc,8BADd;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Bell, BellProps } from './components/Bell.cjs';
|
|
2
|
+
export { Inbox, InboxProps } from './components/Inbox.cjs';
|
|
3
|
+
export { Preferences } from './components/Preferences.cjs';
|
|
4
|
+
export { NotificationProps, Notifications } from './components/Notifications.cjs';
|
|
5
|
+
export { InboxContent, InboxContentProps } from './components/InboxContent.cjs';
|
|
6
|
+
export { InternalNovuProvider, NovuProvider, NovuProviderProps, useNovu, useUnsafeNovu } from './hooks/NovuProvider.cjs';
|
|
7
|
+
export { UseNotificationsProps, UseNotificationsResult, useNotifications } from './hooks/useNotifications.cjs';
|
|
8
|
+
export { UsePreferencesProps, UsePreferencesResult, usePreferences } from './hooks/usePreferences.cjs';
|
|
9
|
+
export { UseCountsProps, UseCountsResult, useCounts } from './hooks/useCounts.cjs';
|
|
10
|
+
export { BaseProps, BellRenderer, BodyRenderer, DefaultInboxProps, DefaultProps, NoRendererProps, NotificationRendererProps, NotificationsRenderer, SubjectBodyRendererProps, SubjectRenderer, WithChildrenProps } from './utils/types.cjs';
|
|
11
|
+
export { Notification } from '@novu/js/ui';
|
|
12
|
+
import 'react';
|
|
13
|
+
import 'react/jsx-runtime';
|
|
14
|
+
import '@novu/js';
|