@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.
Files changed (186) hide show
  1. package/dist/cjs/components/Bell.cjs +63 -0
  2. package/dist/cjs/components/Bell.cjs.map +1 -0
  3. package/dist/cjs/components/Bell.d.cts +12 -0
  4. package/dist/cjs/components/Inbox.cjs +198 -0
  5. package/dist/cjs/components/Inbox.cjs.map +1 -0
  6. package/dist/cjs/components/Inbox.d.cts +9 -0
  7. package/dist/cjs/components/InboxContent.cjs +94 -0
  8. package/dist/cjs/components/InboxContent.cjs.map +1 -0
  9. package/dist/cjs/components/InboxContent.d.cts +16 -0
  10. package/dist/cjs/components/Mounter.cjs +51 -0
  11. package/dist/cjs/components/Mounter.cjs.map +1 -0
  12. package/dist/cjs/components/Mounter.d.cts +11 -0
  13. package/dist/cjs/components/Notifications.cjs +88 -0
  14. package/dist/cjs/components/Notifications.cjs.map +1 -0
  15. package/dist/cjs/components/Notifications.d.cts +14 -0
  16. package/dist/cjs/components/NovuUI.cjs +60 -0
  17. package/dist/cjs/components/NovuUI.cjs.map +1 -0
  18. package/dist/cjs/components/NovuUI.d.cts +12 -0
  19. package/dist/cjs/components/Preferences.cjs +54 -0
  20. package/dist/cjs/components/Preferences.cjs.map +1 -0
  21. package/dist/cjs/components/Preferences.d.cts +5 -0
  22. package/dist/cjs/components/Renderer.cjs +70 -0
  23. package/dist/cjs/components/Renderer.cjs.map +1 -0
  24. package/dist/cjs/components/Renderer.d.cts +8 -0
  25. package/dist/cjs/components/index.cjs +35 -0
  26. package/dist/cjs/components/index.cjs.map +1 -0
  27. package/dist/cjs/components/index.d.cts +11 -0
  28. package/dist/cjs/context/NovuUIContext.cjs +40 -0
  29. package/dist/cjs/context/NovuUIContext.cjs.map +1 -0
  30. package/dist/cjs/context/NovuUIContext.d.cts +14 -0
  31. package/dist/cjs/context/RendererContext.cjs +40 -0
  32. package/dist/cjs/context/RendererContext.cjs.map +1 -0
  33. package/dist/cjs/context/RendererContext.d.cts +15 -0
  34. package/dist/cjs/hooks/NovuProvider.cjs +101 -0
  35. package/dist/cjs/hooks/NovuProvider.cjs.map +1 -0
  36. package/dist/cjs/hooks/NovuProvider.d.cts +20 -0
  37. package/dist/cjs/hooks/index.cjs +40 -0
  38. package/dist/cjs/hooks/index.cjs.map +1 -0
  39. package/dist/cjs/hooks/index.d.cts +7 -0
  40. package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs +52 -0
  41. package/dist/cjs/hooks/internal/useBrowserTabsChannel.cjs.map +1 -0
  42. package/dist/cjs/hooks/internal/useBrowserTabsChannel.d.cts +8 -0
  43. package/dist/cjs/hooks/internal/useDataRef.cjs +36 -0
  44. package/dist/cjs/hooks/internal/useDataRef.cjs.map +1 -0
  45. package/dist/cjs/hooks/internal/useDataRef.d.cts +5 -0
  46. package/dist/cjs/hooks/internal/useWebsocketEvent.cjs +57 -0
  47. package/dist/cjs/hooks/internal/useWebsocketEvent.cjs.map +1 -0
  48. package/dist/cjs/hooks/internal/useWebsocketEvent.d.cts +8 -0
  49. package/dist/cjs/hooks/useCounts.cjs +104 -0
  50. package/dist/cjs/hooks/useCounts.cjs.map +1 -0
  51. package/dist/cjs/hooks/useCounts.d.cts +21 -0
  52. package/dist/cjs/hooks/useNotifications.cjs +121 -0
  53. package/dist/cjs/hooks/useNotifications.cjs.map +1 -0
  54. package/dist/cjs/hooks/useNotifications.d.cts +34 -0
  55. package/dist/cjs/hooks/usePreferences.cjs +80 -0
  56. package/dist/cjs/hooks/usePreferences.cjs.map +1 -0
  57. package/dist/cjs/hooks/usePreferences.d.cts +19 -0
  58. package/dist/cjs/index.cjs +27 -0
  59. package/dist/cjs/index.cjs.map +1 -0
  60. package/dist/cjs/index.d.cts +14 -0
  61. package/dist/cjs/server/index.cjs +92 -0
  62. package/dist/cjs/server/index.cjs.map +1 -0
  63. package/dist/cjs/server/index.d.cts +29 -0
  64. package/dist/cjs/themes/index.cjs +25 -0
  65. package/dist/cjs/themes/index.cjs.map +1 -0
  66. package/dist/cjs/utils/createContextAndHook.cjs +63 -0
  67. package/dist/cjs/utils/createContextAndHook.cjs.map +1 -0
  68. package/dist/cjs/utils/createContextAndHook.d.cts +19 -0
  69. package/dist/cjs/utils/requestLock.cjs +52 -0
  70. package/dist/cjs/utils/requestLock.cjs.map +1 -0
  71. package/dist/cjs/utils/requestLock.d.cts +3 -0
  72. package/dist/cjs/utils/types.cjs +19 -0
  73. package/dist/cjs/utils/types.cjs.map +1 -0
  74. package/dist/cjs/utils/types.d.cts +54 -0
  75. package/dist/client/{index.d.mts → components/index.d.mts} +23 -6
  76. package/dist/client/{index.d.ts → components/index.d.ts} +23 -6
  77. package/dist/client/{index.js → components/index.js} +92 -8
  78. package/dist/client/components/index.js.map +1 -0
  79. package/dist/client/{index.mjs → components/index.mjs} +77 -8
  80. package/dist/client/components/index.mjs.map +1 -0
  81. package/dist/{hooks → client/hooks}/index.js +8 -0
  82. package/dist/client/hooks/index.js.map +1 -0
  83. package/dist/client/hooks/index.mjs.map +1 -0
  84. package/dist/client/themes/index.d.ts +1 -0
  85. package/dist/{themes → client/themes}/index.js +4 -0
  86. package/dist/client/themes/index.js.map +1 -0
  87. package/dist/client/themes/index.mjs.map +1 -0
  88. package/dist/esm/components/Bell.d.ts +12 -0
  89. package/dist/esm/components/Bell.js +28 -0
  90. package/dist/esm/components/Bell.js.map +1 -0
  91. package/dist/esm/components/Inbox.d.ts +9 -0
  92. package/dist/esm/components/Inbox.js +163 -0
  93. package/dist/esm/components/Inbox.js.map +1 -0
  94. package/dist/esm/components/InboxContent.d.ts +16 -0
  95. package/dist/esm/components/InboxContent.js +59 -0
  96. package/dist/esm/components/InboxContent.js.map +1 -0
  97. package/dist/esm/components/Mounter.d.ts +11 -0
  98. package/dist/esm/components/Mounter.js +26 -0
  99. package/dist/esm/components/Mounter.js.map +1 -0
  100. package/dist/esm/components/Notifications.d.ts +14 -0
  101. package/dist/esm/components/Notifications.js +53 -0
  102. package/dist/esm/components/Notifications.js.map +1 -0
  103. package/dist/esm/components/NovuUI.d.ts +12 -0
  104. package/dist/esm/components/NovuUI.js +35 -0
  105. package/dist/esm/components/NovuUI.js.map +1 -0
  106. package/dist/esm/components/Preferences.d.ts +5 -0
  107. package/dist/esm/components/Preferences.js +19 -0
  108. package/dist/esm/components/Preferences.js.map +1 -0
  109. package/dist/esm/components/Renderer.d.ts +8 -0
  110. package/dist/esm/components/Renderer.js +44 -0
  111. package/dist/esm/components/Renderer.js.map +1 -0
  112. package/dist/esm/components/index.d.ts +11 -0
  113. package/dist/esm/components/index.js +8 -0
  114. package/dist/esm/components/index.js.map +1 -0
  115. package/dist/esm/context/NovuUIContext.d.ts +14 -0
  116. package/dist/esm/context/NovuUIContext.js +13 -0
  117. package/dist/esm/context/NovuUIContext.js.map +1 -0
  118. package/dist/esm/context/RendererContext.d.ts +15 -0
  119. package/dist/esm/context/RendererContext.js +13 -0
  120. package/dist/esm/context/RendererContext.js.map +1 -0
  121. package/dist/esm/hooks/NovuProvider.d.ts +20 -0
  122. package/dist/esm/hooks/NovuProvider.js +73 -0
  123. package/dist/esm/hooks/NovuProvider.js.map +1 -0
  124. package/dist/esm/hooks/index.d.ts +7 -0
  125. package/dist/esm/hooks/index.js +10 -0
  126. package/dist/esm/hooks/index.js.map +1 -0
  127. package/dist/esm/hooks/internal/useBrowserTabsChannel.d.ts +8 -0
  128. package/dist/esm/hooks/internal/useBrowserTabsChannel.js +27 -0
  129. package/dist/esm/hooks/internal/useBrowserTabsChannel.js.map +1 -0
  130. package/dist/esm/hooks/internal/useDataRef.d.ts +5 -0
  131. package/dist/esm/hooks/internal/useDataRef.js +11 -0
  132. package/dist/esm/hooks/internal/useDataRef.js.map +1 -0
  133. package/dist/esm/hooks/internal/useWebsocketEvent.d.ts +8 -0
  134. package/dist/esm/hooks/internal/useWebsocketEvent.js +32 -0
  135. package/dist/esm/hooks/internal/useWebsocketEvent.js.map +1 -0
  136. package/dist/esm/hooks/useCounts.d.ts +21 -0
  137. package/dist/esm/hooks/useCounts.js +76 -0
  138. package/dist/esm/hooks/useCounts.js.map +1 -0
  139. package/dist/esm/hooks/useNotifications.d.ts +34 -0
  140. package/dist/esm/hooks/useNotifications.js +96 -0
  141. package/dist/esm/hooks/useNotifications.js.map +1 -0
  142. package/dist/esm/hooks/usePreferences.d.ts +19 -0
  143. package/dist/esm/hooks/usePreferences.js +55 -0
  144. package/dist/esm/hooks/usePreferences.js.map +1 -0
  145. package/dist/esm/index.d.ts +14 -0
  146. package/dist/esm/index.js +4 -0
  147. package/dist/esm/index.js.map +1 -0
  148. package/dist/esm/server/index.d.ts +29 -0
  149. package/dist/esm/server/index.js +56 -0
  150. package/dist/esm/server/index.js.map +1 -0
  151. package/dist/esm/themes/index.d.ts +1 -0
  152. package/dist/esm/themes/index.js +3 -0
  153. package/dist/esm/themes/index.js.map +1 -0
  154. package/dist/esm/utils/createContextAndHook.d.ts +19 -0
  155. package/dist/esm/utils/createContextAndHook.js +27 -0
  156. package/dist/esm/utils/createContextAndHook.js.map +1 -0
  157. package/dist/esm/utils/requestLock.d.ts +3 -0
  158. package/dist/esm/utils/requestLock.js +27 -0
  159. package/dist/esm/utils/requestLock.js.map +1 -0
  160. package/dist/esm/utils/types.d.ts +54 -0
  161. package/dist/esm/utils/types.js +1 -0
  162. package/dist/esm/utils/types.js.map +1 -0
  163. package/dist/server/{server.d.mts → index.d.mts} +26 -5
  164. package/dist/server/{server.d.ts → index.d.ts} +26 -5
  165. package/dist/server/{server.js → index.js} +17 -20
  166. package/dist/server/index.js.map +1 -0
  167. package/dist/server/{server.mjs → index.mjs} +16 -19
  168. package/dist/server/index.mjs.map +1 -0
  169. package/hooks/package.json +3 -3
  170. package/package.json +61 -39
  171. package/server/package.json +5 -0
  172. package/themes/package.json +3 -3
  173. package/dist/client/index.js.map +0 -1
  174. package/dist/client/index.mjs.map +0 -1
  175. package/dist/hooks/index.js.map +0 -1
  176. package/dist/hooks/index.mjs.map +0 -1
  177. package/dist/server/server.js.map +0 -1
  178. package/dist/server/server.mjs.map +0 -1
  179. package/dist/themes/index.js.map +0 -1
  180. package/dist/themes/index.mjs.map +0 -1
  181. /package/dist/{themes/index.d.mts → cjs/themes/index.d.cts} +0 -0
  182. /package/dist/{hooks → client/hooks}/index.d.mts +0 -0
  183. /package/dist/{hooks → client/hooks}/index.d.ts +0 -0
  184. /package/dist/{hooks → client/hooks}/index.mjs +0 -0
  185. /package/dist/{themes/index.d.ts → client/themes/index.d.mts} +0 -0
  186. /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,8 @@
1
+ declare const useBrowserTabsChannel: <T = unknown>({ channelName, onMessage, }: {
2
+ channelName: string;
3
+ onMessage: (args: T) => void;
4
+ }) => {
5
+ postMessage: (data: T) => void;
6
+ };
7
+
8
+ export { useBrowserTabsChannel };
@@ -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,5 @@
1
+ import * as React from 'react';
2
+
3
+ declare const useDataRef: <T>(data: T) => React.MutableRefObject<T>;
4
+
5
+ export { useDataRef };
@@ -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';