@novu/react 3.11.0 → 3.12.0-rc.1

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 (101) hide show
  1. package/README.md +10 -18
  2. package/dist/cjs/components/Inbox.cjs +5 -1
  3. package/dist/cjs/components/Inbox.cjs.map +1 -1
  4. package/dist/cjs/components/NovuUI.cjs +3 -1
  5. package/dist/cjs/components/NovuUI.cjs.map +1 -1
  6. package/dist/cjs/components/NovuUI.d.cts +9 -9
  7. package/dist/cjs/components/index.cjs +7 -1
  8. package/dist/cjs/components/index.cjs.map +1 -1
  9. package/dist/cjs/components/index.d.cts +5 -0
  10. package/dist/cjs/components/subscription/DefaultSubscription.cjs +59 -0
  11. package/dist/cjs/components/subscription/DefaultSubscription.cjs.map +1 -0
  12. package/dist/cjs/components/subscription/DefaultSubscription.d.cts +11 -0
  13. package/dist/cjs/components/subscription/Subscription.cjs +80 -0
  14. package/dist/cjs/components/subscription/Subscription.cjs.map +1 -0
  15. package/dist/cjs/components/subscription/Subscription.d.cts +22 -0
  16. package/dist/cjs/components/subscription/SubscriptionButton.cjs +91 -0
  17. package/dist/cjs/components/subscription/SubscriptionButton.cjs.map +1 -0
  18. package/dist/cjs/components/subscription/SubscriptionButton.d.cts +8 -0
  19. package/dist/cjs/components/subscription/SubscriptionPreferences.cjs +91 -0
  20. package/dist/cjs/components/subscription/SubscriptionPreferences.cjs.map +1 -0
  21. package/dist/cjs/components/subscription/SubscriptionPreferences.d.cts +8 -0
  22. package/dist/cjs/hooks/NovuProvider.cjs +21 -18
  23. package/dist/cjs/hooks/NovuProvider.cjs.map +1 -1
  24. package/dist/cjs/hooks/index.cjs +11 -1
  25. package/dist/cjs/hooks/index.cjs.map +1 -1
  26. package/dist/cjs/hooks/index.d.cts +7 -1
  27. package/dist/cjs/hooks/useCreateSubscription.cjs +61 -0
  28. package/dist/cjs/hooks/useCreateSubscription.cjs.map +1 -0
  29. package/dist/cjs/hooks/useCreateSubscription.d.cts +17 -0
  30. package/dist/cjs/hooks/useDeleteSubscription.cjs +61 -0
  31. package/dist/cjs/hooks/useDeleteSubscription.cjs.map +1 -0
  32. package/dist/cjs/hooks/useDeleteSubscription.d.cts +17 -0
  33. package/dist/cjs/hooks/useSubscription.cjs +156 -0
  34. package/dist/cjs/hooks/useSubscription.cjs.map +1 -0
  35. package/dist/cjs/hooks/useSubscription.d.cts +21 -0
  36. package/dist/cjs/hooks/useSubscriptions.cjs +121 -0
  37. package/dist/cjs/hooks/useSubscriptions.cjs.map +1 -0
  38. package/dist/cjs/hooks/useSubscriptions.d.cts +36 -0
  39. package/dist/cjs/hooks/useUpdateSubscription.cjs +61 -0
  40. package/dist/cjs/hooks/useUpdateSubscription.cjs.map +1 -0
  41. package/dist/cjs/hooks/useUpdateSubscription.d.cts +18 -0
  42. package/dist/cjs/index.cjs +18 -2
  43. package/dist/cjs/index.cjs.map +1 -1
  44. package/dist/cjs/index.d.cts +14 -3
  45. package/dist/cjs/server/index.cjs +61 -2
  46. package/dist/cjs/server/index.cjs.map +1 -1
  47. package/dist/cjs/server/index.d.cts +18 -4
  48. package/dist/cjs/utils/appearance.cjs.map +1 -1
  49. package/dist/cjs/utils/appearance.d.cts +3 -3
  50. package/dist/cjs/utils/types.cjs.map +1 -1
  51. package/dist/cjs/utils/types.d.cts +32 -11
  52. package/dist/esm/components/Inbox.js +5 -1
  53. package/dist/esm/components/Inbox.js.map +1 -1
  54. package/dist/esm/components/NovuUI.d.ts +9 -9
  55. package/dist/esm/components/NovuUI.js +3 -1
  56. package/dist/esm/components/NovuUI.js.map +1 -1
  57. package/dist/esm/components/index.d.ts +5 -0
  58. package/dist/esm/components/index.js +3 -0
  59. package/dist/esm/components/index.js.map +1 -1
  60. package/dist/esm/components/subscription/DefaultSubscription.d.ts +11 -0
  61. package/dist/esm/components/subscription/DefaultSubscription.js +34 -0
  62. package/dist/esm/components/subscription/DefaultSubscription.js.map +1 -0
  63. package/dist/esm/components/subscription/Subscription.d.ts +22 -0
  64. package/dist/esm/components/subscription/Subscription.js +45 -0
  65. package/dist/esm/components/subscription/Subscription.js.map +1 -0
  66. package/dist/esm/components/subscription/SubscriptionButton.d.ts +8 -0
  67. package/dist/esm/components/subscription/SubscriptionButton.js +56 -0
  68. package/dist/esm/components/subscription/SubscriptionButton.js.map +1 -0
  69. package/dist/esm/components/subscription/SubscriptionPreferences.d.ts +8 -0
  70. package/dist/esm/components/subscription/SubscriptionPreferences.js +56 -0
  71. package/dist/esm/components/subscription/SubscriptionPreferences.js.map +1 -0
  72. package/dist/esm/hooks/NovuProvider.js +22 -19
  73. package/dist/esm/hooks/NovuProvider.js.map +1 -1
  74. package/dist/esm/hooks/index.d.ts +7 -1
  75. package/dist/esm/hooks/index.js +5 -0
  76. package/dist/esm/hooks/index.js.map +1 -1
  77. package/dist/esm/hooks/useCreateSubscription.d.ts +17 -0
  78. package/dist/esm/hooks/useCreateSubscription.js +36 -0
  79. package/dist/esm/hooks/useCreateSubscription.js.map +1 -0
  80. package/dist/esm/hooks/useDeleteSubscription.d.ts +17 -0
  81. package/dist/esm/hooks/useDeleteSubscription.js +36 -0
  82. package/dist/esm/hooks/useDeleteSubscription.js.map +1 -0
  83. package/dist/esm/hooks/useSubscription.d.ts +21 -0
  84. package/dist/esm/hooks/useSubscription.js +129 -0
  85. package/dist/esm/hooks/useSubscription.js.map +1 -0
  86. package/dist/esm/hooks/useSubscriptions.d.ts +36 -0
  87. package/dist/esm/hooks/useSubscriptions.js +96 -0
  88. package/dist/esm/hooks/useSubscriptions.js.map +1 -0
  89. package/dist/esm/hooks/useUpdateSubscription.d.ts +18 -0
  90. package/dist/esm/hooks/useUpdateSubscription.js +36 -0
  91. package/dist/esm/hooks/useUpdateSubscription.js.map +1 -0
  92. package/dist/esm/index.d.ts +14 -3
  93. package/dist/esm/index.js +32 -3
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/server/index.d.ts +18 -4
  96. package/dist/esm/server/index.js +53 -2
  97. package/dist/esm/server/index.js.map +1 -1
  98. package/dist/esm/utils/appearance.d.ts +3 -3
  99. package/dist/esm/utils/appearance.js.map +1 -1
  100. package/dist/esm/utils/types.d.ts +32 -11
  101. package/package.json +11 -11
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/subscription/SubscriptionPreferences.tsx"],"sourcesContent":["import type { SubscriptionPreferencesWrapperProps } from '@novu/js/ui';\nimport React from 'react';\nimport { useNovuUI } from '../../context/NovuUIContext';\nimport { Mounter } from '../Mounter';\n\nexport type SubscriptionPreferencesProps = Partial<SubscriptionPreferencesWrapperProps>;\n\nexport const SubscriptionPreferences = React.memo(\n ({\n topicKey,\n identifier,\n preferences,\n onClick,\n onDeleteError,\n onDeleteSuccess,\n onCreateError,\n onCreateSuccess,\n }: SubscriptionPreferencesProps) => {\n const { novuUI } = useNovuUI();\n\n const mount = React.useCallback(\n (element: HTMLElement) => {\n if (!topicKey || !preferences) {\n return;\n }\n\n return novuUI.mountComponent({\n name: 'SubscriptionPreferences',\n element,\n props: {\n topicKey,\n identifier,\n preferences,\n onClick,\n onDeleteError,\n onDeleteSuccess,\n onCreateError,\n onCreateSuccess,\n },\n });\n },\n [\n novuUI,\n topicKey,\n identifier,\n preferences,\n onClick,\n onDeleteError,\n onDeleteSuccess,\n onCreateError,\n onCreateSuccess,\n ]\n );\n\n return <Mounter mount={mount} />;\n }\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,2BAA0B;AAC1B,qBAAwB;AAmDb;AA/CJ,IAAM,0BAA0B,aAAAA,QAAM;AAAA,EAC3C,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,MAAoC;AAClC,UAAM,EAAE,OAAO,QAAI,gCAAU;AAE7B,UAAM,QAAQ,aAAAA,QAAM;AAAA,MAClB,CAAC,YAAyB;AACxB,YAAI,CAAC,YAAY,CAAC,aAAa;AAC7B;AAAA,QACF;AAEA,eAAO,OAAO,eAAe;AAAA,UAC3B,MAAM;AAAA,UACN;AAAA,UACA,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,4CAAC,0BAAQ,OAAc;AAAA,EAChC;AACF;","names":["React"]}
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SubscriptionPreferencesWrapperProps } from '@novu/js/ui';
3
+ import React__default from 'react';
4
+
5
+ type SubscriptionPreferencesProps = Partial<SubscriptionPreferencesWrapperProps>;
6
+ declare const SubscriptionPreferences: React__default.MemoExoticComponent<({ topicKey, identifier, preferences, onClick, onDeleteError, onDeleteSuccess, onCreateError, onCreateSuccess, }: SubscriptionPreferencesProps) => react_jsx_runtime.JSX.Element>;
7
+
8
+ export { SubscriptionPreferences, type SubscriptionPreferencesProps };
@@ -30,13 +30,16 @@ var import_js = require("@novu/js");
30
30
  var import_internal = require("@novu/js/internal");
31
31
  var import_react = require("react");
32
32
  var import_jsx_runtime = require("react/jsx-runtime");
33
- var version = "3.11.0";
33
+ var version = "3.12.0-rc.1";
34
34
  var name = "@novu/react";
35
35
  var baseUserAgent = `${name}@${version}`;
36
36
  var NovuContext = (0, import_react.createContext)(void 0);
37
37
  var NovuProvider = (props) => {
38
38
  const { subscriberId, ...propsWithoutSubscriberId } = props;
39
- const subscriberObj = (0, import_internal.buildSubscriber)({ subscriberId, subscriber: props.subscriber });
39
+ const subscriberObj = (0, import_react.useMemo)(
40
+ () => (0, import_internal.buildSubscriber)({ subscriberId, subscriber: props.subscriber }),
41
+ [subscriberId, props.subscriber]
42
+ );
40
43
  const applicationIdentifier = propsWithoutSubscriberId.applicationIdentifier ? propsWithoutSubscriberId.applicationIdentifier : "";
41
44
  const providerProps = {
42
45
  ...propsWithoutSubscriberId,
@@ -47,7 +50,10 @@ var NovuProvider = (props) => {
47
50
  };
48
51
  var InternalNovuProvider = (props) => {
49
52
  const applicationIdentifier = props.applicationIdentifier || "";
50
- const subscriberObj = (0, import_internal.buildSubscriber)({ subscriberId: props.subscriberId, subscriber: props.subscriber });
53
+ const subscriberObj = (0, import_react.useMemo)(
54
+ () => (0, import_internal.buildSubscriber)({ subscriberId: props.subscriberId, subscriber: props.subscriber }),
55
+ [props.subscriberId, props.subscriber]
56
+ );
51
57
  const {
52
58
  children,
53
59
  subscriberHash,
@@ -74,22 +80,19 @@ var InternalNovuProvider = (props) => {
74
80
  defaultSchedule,
75
81
  context
76
82
  }),
77
- [applicationIdentifier, backendUrl, apiUrl, socketUrl, useCache, userAgentType]
83
+ [
84
+ applicationIdentifier,
85
+ subscriberHash,
86
+ subscriberObj,
87
+ context,
88
+ contextHash,
89
+ backendUrl,
90
+ apiUrl,
91
+ socketUrl,
92
+ useCache,
93
+ userAgentType
94
+ ]
78
95
  );
79
- (0, import_react.useEffect)(() => {
80
- novu.changeSubscriber({
81
- subscriber: subscriberObj,
82
- subscriberHash: props.subscriberHash
83
- });
84
- }, [subscriberObj.subscriberId, props.subscriberHash, novu]);
85
- (0, import_react.useEffect)(() => {
86
- if (context && contextHash) {
87
- novu.changeContext({
88
- context,
89
- contextHash
90
- });
91
- }
92
- }, [context, contextHash, novu]);
93
96
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NovuContext.Provider, { value: novu, children });
94
97
  };
95
98
  var useNovu = () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/NovuProvider.tsx"],"sourcesContent":["import { Novu, NovuOptions } from '@novu/js';\nimport { buildSubscriber } from '@novu/js/internal';\nimport { createContext, ReactNode, useContext, useEffect, useMemo } from 'react';\n\n// @ts-expect-error\nconst version = PACKAGE_VERSION;\n// @ts-expect-error\nconst name = PACKAGE_NAME;\nconst baseUserAgent = `${name}@${version}`;\n\nexport type NovuProviderProps = NovuOptions & {\n children: ReactNode;\n};\n\nconst NovuContext = createContext<Novu | undefined>(undefined);\n\nexport const NovuProvider = (props: NovuProviderProps) => {\n const { subscriberId, ...propsWithoutSubscriberId } = props;\n const subscriberObj = buildSubscriber({ subscriberId, subscriber: props.subscriber });\n const applicationIdentifier = propsWithoutSubscriberId.applicationIdentifier\n ? propsWithoutSubscriberId.applicationIdentifier\n : '';\n\n const providerProps: NovuProviderProps = {\n ...propsWithoutSubscriberId,\n applicationIdentifier,\n subscriber: subscriberObj,\n };\n\n return (\n <InternalNovuProvider {...providerProps} applicationIdentifier={applicationIdentifier} userAgentType=\"hooks\">\n {props.children}\n </InternalNovuProvider>\n );\n};\n\n/**\n * @internal Should be used internally not to be exposed outside of the library\n * This is needed to differentiate between the hooks and components user agents\n * Better to use this internally to avoid confusion.\n */\nexport const InternalNovuProvider = (props: NovuProviderProps & { userAgentType: 'components' | 'hooks' }) => {\n const applicationIdentifier = props.applicationIdentifier || '';\n const subscriberObj = buildSubscriber({ subscriberId: props.subscriberId, subscriber: props.subscriber });\n\n const {\n children,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n useCache,\n userAgentType,\n defaultSchedule,\n context,\n } = props;\n\n const novu = useMemo(\n () =>\n new Novu({\n applicationIdentifier,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n useCache,\n __userAgent: `${baseUserAgent} ${userAgentType}`,\n subscriber: subscriberObj,\n defaultSchedule,\n context,\n }),\n [applicationIdentifier, backendUrl, apiUrl, socketUrl, useCache, userAgentType]\n );\n\n useEffect(() => {\n novu.changeSubscriber({\n subscriber: subscriberObj,\n subscriberHash: props.subscriberHash,\n });\n }, [subscriberObj.subscriberId, props.subscriberHash, novu]);\n\n useEffect(() => {\n if (context && contextHash) {\n novu.changeContext({\n context,\n contextHash,\n });\n }\n }, [context, contextHash, novu]);\n\n return <NovuContext.Provider value={novu}>{children}</NovuContext.Provider>;\n};\n\nexport const useNovu = () => {\n const context = useContext(NovuContext);\n if (!context) {\n throw new Error('useNovu must be used within a <NovuProvider />');\n }\n\n return context;\n};\n\nexport const useUnsafeNovu = () => {\n const context = useContext(NovuContext);\n\n return context;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkC;AAClC,sBAAgC;AAChC,mBAAyE;AA4BrE;AAzBJ,IAAM,UAAU;AAEhB,IAAM,OAAO;AACb,IAAM,gBAAgB,GAAG,IAAI,IAAI,OAAO;AAMxC,IAAM,kBAAc,4BAAgC,MAAS;AAEtD,IAAM,eAAe,CAAC,UAA6B;AACxD,QAAM,EAAE,cAAc,GAAG,yBAAyB,IAAI;AACtD,QAAM,oBAAgB,iCAAgB,EAAE,cAAc,YAAY,MAAM,WAAW,CAAC;AACpF,QAAM,wBAAwB,yBAAyB,wBACnD,yBAAyB,wBACzB;AAEJ,QAAM,gBAAmC;AAAA,IACvC,GAAG;AAAA,IACH;AAAA,IACA,YAAY;AAAA,EACd;AAEA,SACE,4CAAC,wBAAsB,GAAG,eAAe,uBAA8C,eAAc,SAClG,gBAAM,UACT;AAEJ;AAOO,IAAM,uBAAuB,CAAC,UAAyE;AAC5G,QAAM,wBAAwB,MAAM,yBAAyB;AAC7D,QAAM,oBAAgB,iCAAgB,EAAE,cAAc,MAAM,cAAc,YAAY,MAAM,WAAW,CAAC;AAExG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAO;AAAA,IACX,MACE,IAAI,eAAK;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,GAAG,aAAa,IAAI,aAAa;AAAA,MAC9C,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,uBAAuB,YAAY,QAAQ,WAAW,UAAU,aAAa;AAAA,EAChF;AAEA,8BAAU,MAAM;AACd,SAAK,iBAAiB;AAAA,MACpB,YAAY;AAAA,MACZ,gBAAgB,MAAM;AAAA,IACxB,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,cAAc,MAAM,gBAAgB,IAAI,CAAC;AAE3D,8BAAU,MAAM;AACd,QAAI,WAAW,aAAa;AAC1B,WAAK,cAAc;AAAA,QACjB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,SAAS,aAAa,IAAI,CAAC;AAE/B,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,MAAO,UAAS;AACtD;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,SAAO;AACT;AAEO,IAAM,gBAAgB,MAAM;AACjC,QAAM,cAAU,yBAAW,WAAW;AAEtC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/NovuProvider.tsx"],"sourcesContent":["import { Novu, NovuOptions } from '@novu/js';\nimport { buildSubscriber } from '@novu/js/internal';\nimport { createContext, ReactNode, useContext, useMemo } from 'react';\n\n// @ts-expect-error\nconst version = PACKAGE_VERSION;\n// @ts-expect-error\nconst name = PACKAGE_NAME;\nconst baseUserAgent = `${name}@${version}`;\n\nexport type NovuProviderProps = NovuOptions & {\n children: ReactNode;\n};\n\nconst NovuContext = createContext<Novu | undefined>(undefined);\n\nexport const NovuProvider = (props: NovuProviderProps) => {\n const { subscriberId, ...propsWithoutSubscriberId } = props;\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId, subscriber: props.subscriber }),\n [subscriberId, props.subscriber]\n );\n const applicationIdentifier = propsWithoutSubscriberId.applicationIdentifier\n ? propsWithoutSubscriberId.applicationIdentifier\n : '';\n\n const providerProps: NovuProviderProps = {\n ...propsWithoutSubscriberId,\n applicationIdentifier,\n subscriber: subscriberObj,\n };\n\n return (\n <InternalNovuProvider {...providerProps} applicationIdentifier={applicationIdentifier} userAgentType=\"hooks\">\n {props.children}\n </InternalNovuProvider>\n );\n};\n\n/**\n * @internal Should be used internally not to be exposed outside of the library\n * This is needed to differentiate between the hooks and components user agents\n * Better to use this internally to avoid confusion.\n */\nexport const InternalNovuProvider = (props: NovuProviderProps & { userAgentType: 'components' | 'hooks' }) => {\n const applicationIdentifier = props.applicationIdentifier || '';\n const subscriberObj = useMemo(\n () => buildSubscriber({ subscriberId: props.subscriberId, subscriber: props.subscriber }),\n [props.subscriberId, props.subscriber]\n );\n\n const {\n children,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n useCache,\n userAgentType,\n defaultSchedule,\n context,\n } = props;\n\n const novu = useMemo(\n () =>\n new Novu({\n applicationIdentifier,\n subscriberHash,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n useCache,\n __userAgent: `${baseUserAgent} ${userAgentType}`,\n subscriber: subscriberObj,\n defaultSchedule,\n context,\n }),\n [\n applicationIdentifier,\n subscriberHash,\n subscriberObj,\n context,\n contextHash,\n backendUrl,\n apiUrl,\n socketUrl,\n useCache,\n userAgentType,\n ]\n );\n\n return <NovuContext.Provider value={novu}>{children}</NovuContext.Provider>;\n};\n\nexport const useNovu = () => {\n const context = useContext(NovuContext);\n if (!context) {\n throw new Error('useNovu must be used within a <NovuProvider />');\n }\n\n return context;\n};\n\nexport const useUnsafeNovu = () => {\n const context = useContext(NovuContext);\n\n return context;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAkC;AAClC,sBAAgC;AAChC,mBAA8D;AA+B1D;AA5BJ,IAAM,UAAU;AAEhB,IAAM,OAAO;AACb,IAAM,gBAAgB,GAAG,IAAI,IAAI,OAAO;AAMxC,IAAM,kBAAc,4BAAgC,MAAS;AAEtD,IAAM,eAAe,CAAC,UAA6B;AACxD,QAAM,EAAE,cAAc,GAAG,yBAAyB,IAAI;AACtD,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACpE,CAAC,cAAc,MAAM,UAAU;AAAA,EACjC;AACA,QAAM,wBAAwB,yBAAyB,wBACnD,yBAAyB,wBACzB;AAEJ,QAAM,gBAAmC;AAAA,IACvC,GAAG;AAAA,IACH;AAAA,IACA,YAAY;AAAA,EACd;AAEA,SACE,4CAAC,wBAAsB,GAAG,eAAe,uBAA8C,eAAc,SAClG,gBAAM,UACT;AAEJ;AAOO,IAAM,uBAAuB,CAAC,UAAyE;AAC5G,QAAM,wBAAwB,MAAM,yBAAyB;AAC7D,QAAM,oBAAgB;AAAA,IACpB,UAAM,iCAAgB,EAAE,cAAc,MAAM,cAAc,YAAY,MAAM,WAAW,CAAC;AAAA,IACxF,CAAC,MAAM,cAAc,MAAM,UAAU;AAAA,EACvC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,WAAO;AAAA,IACX,MACE,IAAI,eAAK;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,GAAG,aAAa,IAAI,aAAa;AAAA,MAC9C,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,MAAO,UAAS;AACtD;AAEO,IAAM,UAAU,MAAM;AAC3B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,SAAO;AACT;AAEO,IAAM,gBAAgB,MAAM;AACjC,QAAM,cAAU,yBAAW,WAAW;AAEtC,SAAO;AACT;","names":[]}
@@ -31,9 +31,14 @@ module.exports = __toCommonJS(hooks_exports);
31
31
  var import_js = require("@novu/js");
32
32
  var import_NovuProvider = require("./NovuProvider.cjs");
33
33
  __reExport(hooks_exports, require("./useCounts.cjs"), module.exports);
34
+ __reExport(hooks_exports, require("./useCreateSubscription.cjs"), module.exports);
35
+ __reExport(hooks_exports, require("./useDeleteSubscription.cjs"), module.exports);
34
36
  __reExport(hooks_exports, require("./useNotifications.cjs"), module.exports);
35
37
  __reExport(hooks_exports, require("./usePreferences.cjs"), module.exports);
36
38
  __reExport(hooks_exports, require("./useSchedule.cjs"), module.exports);
39
+ __reExport(hooks_exports, require("./useSubscription.cjs"), module.exports);
40
+ __reExport(hooks_exports, require("./useSubscriptions.cjs"), module.exports);
41
+ __reExport(hooks_exports, require("./useUpdateSubscription.cjs"), module.exports);
37
42
  // Annotate the CommonJS export names for ESM import in node:
38
43
  0 && (module.exports = {
39
44
  NovuProvider,
@@ -42,8 +47,13 @@ __reExport(hooks_exports, require("./useSchedule.cjs"), module.exports);
42
47
  WorkflowCriticalityEnum,
43
48
  useNovu,
44
49
  ...require("./useCounts.cjs"),
50
+ ...require("./useCreateSubscription.cjs"),
51
+ ...require("./useDeleteSubscription.cjs"),
45
52
  ...require("./useNotifications.cjs"),
46
53
  ...require("./usePreferences.cjs"),
47
- ...require("./useSchedule.cjs")
54
+ ...require("./useSchedule.cjs"),
55
+ ...require("./useSubscription.cjs"),
56
+ ...require("./useSubscriptions.cjs"),
57
+ ...require("./useUpdateSubscription.cjs")
48
58
  });
49
59
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export type {\n ChannelPreference,\n ChannelType,\n EventHandler,\n Events,\n FiltersCountResponse,\n InboxNotification,\n ListNotificationsResponse,\n Notification,\n NotificationFilter,\n NotificationStatus,\n NovuError,\n NovuOptions,\n Preference,\n PreferencesResponse,\n SocketEventNames,\n UnreadCount,\n WebSocketEvent,\n} from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\nexport { NovuProvider, useNovu } from './NovuProvider';\nexport * from './useCounts';\nexport * from './useNotifications';\nexport * from './usePreferences';\nexport * from './useSchedule';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,gBAA4E;AAC5E,0BAAsC;AACtC,0BAAc,4BArBd;AAsBA,0BAAc,mCAtBd;AAuBA,0BAAc,iCAvBd;AAwBA,0BAAc,8BAxBd;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/index.ts"],"sourcesContent":["export type * from '@novu/js';\nexport { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';\nexport { NovuProvider, useNovu } from './NovuProvider';\nexport * from './useCounts';\nexport * from './useCreateSubscription';\nexport * from './useDeleteSubscription';\nexport * from './useNotifications';\nexport * from './usePreferences';\nexport * from './useSchedule';\nexport * from './useSubscription';\nexport * from './useSubscriptions';\nexport * from './useUpdateSubscription';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAA4E;AAC5E,0BAAsC;AACtC,0BAAc,4BAHd;AAIA,0BAAc,wCAJd;AAKA,0BAAc,wCALd;AAMA,0BAAc,mCANd;AAOA,0BAAc,iCAPd;AAQA,0BAAc,8BARd;AASA,0BAAc,kCATd;AAUA,0BAAc,mCAVd;AAWA,0BAAc,wCAXd;","names":[]}
@@ -1,8 +1,14 @@
1
- export { ChannelPreference, ChannelType, EventHandler, Events, FiltersCountResponse, InboxNotification, ListNotificationsResponse, Notification, NotificationFilter, NotificationStatus, NovuError, NovuOptions, Preference, PreferenceLevel, PreferencesResponse, SeverityLevelEnum, SocketEventNames, UnreadCount, WebSocketEvent, WorkflowCriticalityEnum } from '@novu/js';
1
+ export * from '@novu/js';
2
+ export { PreferenceLevel, SeverityLevelEnum, WorkflowCriticalityEnum } from '@novu/js';
2
3
  export { NovuProvider, useNovu } from './NovuProvider.cjs';
3
4
  export { UseCountsProps, UseCountsResult, useCounts } from './useCounts.cjs';
5
+ export { UseCreateSubscriptionProps, UseCreateSubscriptionResult, useCreateSubscription } from './useCreateSubscription.cjs';
6
+ export { UseDeleteSubscriptionProps, UseDeleteSubscriptionResult, useDeleteSubscription } from './useDeleteSubscription.cjs';
4
7
  export { UseNotificationsProps, UseNotificationsResult, useNotifications } from './useNotifications.cjs';
5
8
  export { UsePreferencesProps, UsePreferencesResult, usePreferences } from './usePreferences.cjs';
6
9
  export { UseScheduleProps, UseScheduleResult, useSchedule } from './useSchedule.cjs';
10
+ export { UseSubscriptionProps, UseSubscriptionResult, useSubscription } from './useSubscription.cjs';
11
+ export { UseSubscriptionsProps, UseSubscriptionsResult, useSubscriptions } from './useSubscriptions.cjs';
12
+ export { UseUpdateSubscriptionProps, UseUpdateSubscriptionResult, useUpdateSubscription } from './useUpdateSubscription.cjs';
7
13
  import 'react/jsx-runtime';
8
14
  import 'react';
@@ -0,0 +1,61 @@
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/useCreateSubscription.ts
21
+ var useCreateSubscription_exports = {};
22
+ __export(useCreateSubscription_exports, {
23
+ useCreateSubscription: () => useCreateSubscription
24
+ });
25
+ module.exports = __toCommonJS(useCreateSubscription_exports);
26
+ var import_react = require("react");
27
+ var import_NovuProvider = require("./NovuProvider.cjs");
28
+ var useCreateSubscription = (props = {}) => {
29
+ const propsRef = (0, import_react.useRef)(props);
30
+ propsRef.current = props;
31
+ const novu = (0, import_NovuProvider.useNovu)();
32
+ const [isCreating, setIsCreating] = (0, import_react.useState)(false);
33
+ const [error, setError] = (0, import_react.useState)();
34
+ const create = (0, import_react.useCallback)(
35
+ async (args) => {
36
+ const { onSuccess, onError } = propsRef.current;
37
+ setError(void 0);
38
+ setIsCreating(true);
39
+ const response = await novu.subscriptions.create(args);
40
+ setIsCreating(false);
41
+ if (response.error) {
42
+ setError(response.error);
43
+ onError == null ? void 0 : onError(response.error);
44
+ } else if (response.data) {
45
+ onSuccess == null ? void 0 : onSuccess(response.data);
46
+ }
47
+ return response;
48
+ },
49
+ [novu]
50
+ );
51
+ return {
52
+ create,
53
+ isCreating,
54
+ error
55
+ };
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ useCreateSubscription
60
+ });
61
+ //# sourceMappingURL=useCreateSubscription.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useCreateSubscription.ts"],"sourcesContent":["import { CreateSubscriptionArgs, NovuError, TopicSubscription } from '@novu/js';\nimport { useCallback, useRef, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UseCreateSubscriptionProps = {\n onSuccess?: (data: TopicSubscription) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseCreateSubscriptionResult = {\n isCreating: boolean;\n error?: NovuError;\n create: (args: CreateSubscriptionArgs) => Promise<{\n data?: TopicSubscription | undefined;\n error?: NovuError | undefined;\n }>;\n};\n\nexport const useCreateSubscription = (props: UseCreateSubscriptionProps = {}): UseCreateSubscriptionResult => {\n const propsRef = useRef<UseCreateSubscriptionProps>(props);\n propsRef.current = props;\n const novu = useNovu();\n const [isCreating, setIsCreating] = useState(false);\n const [error, setError] = useState<NovuError>();\n\n const create = useCallback(\n async (args: CreateSubscriptionArgs) => {\n const { onSuccess, onError } = propsRef.current;\n setError(undefined);\n setIsCreating(true);\n\n const response = await novu.subscriptions.create(args);\n\n setIsCreating(false);\n\n if (response.error) {\n setError(response.error);\n onError?.(response.error);\n } else if (response.data) {\n onSuccess?.(response.data);\n }\n\n return response;\n },\n [novu]\n );\n\n return {\n create,\n isCreating,\n error,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA8C;AAC9C,0BAAwB;AAgBjB,IAAM,wBAAwB,CAAC,QAAoC,CAAC,MAAmC;AAC5G,QAAM,eAAW,qBAAmC,KAAK;AACzD,WAAS,UAAU;AACnB,QAAM,WAAO,6BAAQ;AACrB,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAClD,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAE9C,QAAM,aAAS;AAAA,IACb,OAAO,SAAiC;AACtC,YAAM,EAAE,WAAW,QAAQ,IAAI,SAAS;AACxC,eAAS,MAAS;AAClB,oBAAc,IAAI;AAElB,YAAM,WAAW,MAAM,KAAK,cAAc,OAAO,IAAI;AAErD,oBAAc,KAAK;AAEnB,UAAI,SAAS,OAAO;AAClB,iBAAS,SAAS,KAAK;AACvB,2CAAU,SAAS;AAAA,MACrB,WAAW,SAAS,MAAM;AACxB,+CAAY,SAAS;AAAA,MACvB;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,17 @@
1
+ import { TopicSubscription, NovuError, CreateSubscriptionArgs } from '@novu/js';
2
+
3
+ type UseCreateSubscriptionProps = {
4
+ onSuccess?: (data: TopicSubscription) => void;
5
+ onError?: (error: NovuError) => void;
6
+ };
7
+ type UseCreateSubscriptionResult = {
8
+ isCreating: boolean;
9
+ error?: NovuError;
10
+ create: (args: CreateSubscriptionArgs) => Promise<{
11
+ data?: TopicSubscription | undefined;
12
+ error?: NovuError | undefined;
13
+ }>;
14
+ };
15
+ declare const useCreateSubscription: (props?: UseCreateSubscriptionProps) => UseCreateSubscriptionResult;
16
+
17
+ export { type UseCreateSubscriptionProps, type UseCreateSubscriptionResult, useCreateSubscription };
@@ -0,0 +1,61 @@
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/useDeleteSubscription.ts
21
+ var useDeleteSubscription_exports = {};
22
+ __export(useDeleteSubscription_exports, {
23
+ useDeleteSubscription: () => useDeleteSubscription
24
+ });
25
+ module.exports = __toCommonJS(useDeleteSubscription_exports);
26
+ var import_react = require("react");
27
+ var import_NovuProvider = require("./NovuProvider.cjs");
28
+ var useDeleteSubscription = (props = {}) => {
29
+ const propsRef = (0, import_react.useRef)(props);
30
+ propsRef.current = props;
31
+ const novu = (0, import_NovuProvider.useNovu)();
32
+ const [isDeleting, setIsDeleting] = (0, import_react.useState)(false);
33
+ const [error, setError] = (0, import_react.useState)();
34
+ const deleteCallback = (0, import_react.useCallback)(
35
+ async (args) => {
36
+ const { onSuccess, onError } = propsRef.current;
37
+ setError(void 0);
38
+ setIsDeleting(true);
39
+ const response = await novu.subscriptions.delete(args);
40
+ setIsDeleting(false);
41
+ if (response.error) {
42
+ setError(response.error);
43
+ onError == null ? void 0 : onError(response.error);
44
+ } else if (response.data) {
45
+ onSuccess == null ? void 0 : onSuccess();
46
+ }
47
+ return response;
48
+ },
49
+ [novu]
50
+ );
51
+ return {
52
+ delete: deleteCallback,
53
+ isDeleting,
54
+ error
55
+ };
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ useDeleteSubscription
60
+ });
61
+ //# sourceMappingURL=useDeleteSubscription.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useDeleteSubscription.ts"],"sourcesContent":["import { BaseDeleteSubscriptionArgs, DeleteSubscriptionArgs, NovuError } from '@novu/js';\nimport { useCallback, useRef, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UseDeleteSubscriptionProps = {\n onSuccess?: () => void;\n onError?: (error: NovuError) => void;\n};\n\ntype DeleteResult = Promise<{\n error?: NovuError;\n}>;\n\nexport type UseDeleteSubscriptionResult = {\n isDeleting: boolean;\n error?: NovuError;\n delete: (args: DeleteSubscriptionArgs) => DeleteResult;\n};\n\nexport const useDeleteSubscription = (props: UseDeleteSubscriptionProps = {}): UseDeleteSubscriptionResult => {\n const propsRef = useRef<UseDeleteSubscriptionProps>(props);\n propsRef.current = props;\n const novu = useNovu();\n const [isDeleting, setIsDeleting] = useState(false);\n const [error, setError] = useState<NovuError>();\n\n const deleteCallback = useCallback(\n async (args: DeleteSubscriptionArgs): DeleteResult => {\n const { onSuccess, onError } = propsRef.current;\n setError(undefined);\n setIsDeleting(true);\n\n const response = await novu.subscriptions.delete(args as BaseDeleteSubscriptionArgs);\n\n setIsDeleting(false);\n\n if (response.error) {\n setError(response.error);\n onError?.(response.error);\n } else if (response.data) {\n onSuccess?.();\n }\n\n return response;\n },\n [novu]\n );\n\n return {\n delete: deleteCallback,\n isDeleting,\n error,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA8C;AAC9C,0BAAwB;AAiBjB,IAAM,wBAAwB,CAAC,QAAoC,CAAC,MAAmC;AAC5G,QAAM,eAAW,qBAAmC,KAAK;AACzD,WAAS,UAAU;AACnB,QAAM,WAAO,6BAAQ;AACrB,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAClD,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAoB;AAE9C,QAAM,qBAAiB;AAAA,IACrB,OAAO,SAA+C;AACpD,YAAM,EAAE,WAAW,QAAQ,IAAI,SAAS;AACxC,eAAS,MAAS;AAClB,oBAAc,IAAI;AAElB,YAAM,WAAW,MAAM,KAAK,cAAc,OAAO,IAAkC;AAEnF,oBAAc,KAAK;AAEnB,UAAI,SAAS,OAAO;AAClB,iBAAS,SAAS,KAAK;AACvB,2CAAU,SAAS;AAAA,MACrB,WAAW,SAAS,MAAM;AACxB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,17 @@
1
+ import { NovuError, DeleteSubscriptionArgs } from '@novu/js';
2
+
3
+ type UseDeleteSubscriptionProps = {
4
+ onSuccess?: () => void;
5
+ onError?: (error: NovuError) => void;
6
+ };
7
+ type DeleteResult = Promise<{
8
+ error?: NovuError;
9
+ }>;
10
+ type UseDeleteSubscriptionResult = {
11
+ isDeleting: boolean;
12
+ error?: NovuError;
13
+ delete: (args: DeleteSubscriptionArgs) => DeleteResult;
14
+ };
15
+ declare const useDeleteSubscription: (props?: UseDeleteSubscriptionProps) => UseDeleteSubscriptionResult;
16
+
17
+ export { type UseDeleteSubscriptionProps, type UseDeleteSubscriptionResult, useDeleteSubscription };
@@ -0,0 +1,156 @@
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/useSubscription.ts
21
+ var useSubscription_exports = {};
22
+ __export(useSubscription_exports, {
23
+ useSubscription: () => useSubscription
24
+ });
25
+ module.exports = __toCommonJS(useSubscription_exports);
26
+ var import_internal = require("@novu/js/internal");
27
+ var import_react = require("react");
28
+ var import_NovuProvider = require("./NovuProvider.cjs");
29
+ var useSubscription = (props) => {
30
+ const novu = (0, import_NovuProvider.useNovu)();
31
+ const propsRef = (0, import_react.useRef)(props);
32
+ propsRef.current = {
33
+ ...props,
34
+ identifier: props.identifier ?? (0, import_internal.buildSubscriptionIdentifier)({ topicKey: props.topicKey, subscriberId: novu.subscriberId })
35
+ };
36
+ const [subscription, setSubscription] = (0, import_react.useState)();
37
+ const subscriptionRef = (0, import_react.useRef)(null);
38
+ subscriptionRef.current = subscription ?? null;
39
+ const [error, setError] = (0, import_react.useState)();
40
+ const [isLoading, setIsLoading] = (0, import_react.useState)(true);
41
+ const [isFetching, setIsFetching] = (0, import_react.useState)(false);
42
+ const fetchSubscription = (0, import_react.useCallback)(
43
+ async (options) => {
44
+ const { topicKey, identifier, onSuccess, onError } = propsRef.current;
45
+ if (options == null ? void 0 : options.refetch) {
46
+ setError(void 0);
47
+ setIsLoading(true);
48
+ }
49
+ setIsFetching(true);
50
+ const response = await novu.subscriptions.get(
51
+ {
52
+ topicKey,
53
+ identifier
54
+ },
55
+ { refetch: options == null ? void 0 : options.refetch }
56
+ );
57
+ if (response.error) {
58
+ setError(response.error);
59
+ onError == null ? void 0 : onError(response.error);
60
+ } else if (response.data !== void 0) {
61
+ onSuccess == null ? void 0 : onSuccess(response.data);
62
+ setSubscription(response.data);
63
+ }
64
+ setIsLoading(false);
65
+ setIsFetching(false);
66
+ },
67
+ [novu]
68
+ );
69
+ (0, import_react.useEffect)(() => {
70
+ const listener = ({ data: subscription2 }) => {
71
+ const { topicKey, identifier } = propsRef.current;
72
+ if (!subscription2 || subscription2.topicKey !== topicKey || subscription2.identifier !== identifier) {
73
+ return;
74
+ }
75
+ setSubscription(subscription2);
76
+ setIsFetching(false);
77
+ };
78
+ const cleanupGetPending = novu.on("subscription.get.pending", ({ args }) => {
79
+ const { topicKey, identifier } = propsRef.current;
80
+ if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {
81
+ return;
82
+ }
83
+ setIsFetching(true);
84
+ });
85
+ const cleanupGetResolved = novu.on("subscription.get.resolved", ({ args, data, error: error2 }) => {
86
+ const { topicKey, identifier, onSuccess, onError } = propsRef.current;
87
+ if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {
88
+ return;
89
+ }
90
+ if (error2) {
91
+ setError(error2);
92
+ onError == null ? void 0 : onError(error2);
93
+ } else {
94
+ setSubscription(data ?? null);
95
+ onSuccess == null ? void 0 : onSuccess(data ?? null);
96
+ }
97
+ setIsFetching(false);
98
+ });
99
+ const cleanupCreatePending = novu.on("subscription.create.pending", ({ args }) => {
100
+ const { topicKey, identifier } = propsRef.current;
101
+ if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {
102
+ return;
103
+ }
104
+ setIsFetching(true);
105
+ });
106
+ const cleanupCreateResolved = novu.on("subscription.create.resolved", listener);
107
+ const cleanupUpdateResolved = novu.on("subscription.update.resolved", listener);
108
+ const cleanupDeletePending = novu.on("subscription.delete.pending", ({ args }) => {
109
+ var _a, _b;
110
+ const subscriptionId = (_a = subscriptionRef.current) == null ? void 0 : _a.id;
111
+ const subscriptionIdentifier = (_b = subscriptionRef.current) == null ? void 0 : _b.identifier;
112
+ if (!subscriptionId || !subscriptionIdentifier) {
113
+ return;
114
+ }
115
+ if (!args || "subscriptionId" in args && args.subscriptionId !== subscriptionId && args.subscriptionId !== subscriptionIdentifier || "subscription" in args && args.subscription.id !== subscriptionId && args.subscription.identifier !== subscriptionIdentifier) {
116
+ return;
117
+ }
118
+ setIsFetching(true);
119
+ });
120
+ const cleanupDeleteResolved = novu.on("subscription.delete.resolved", ({ args }) => {
121
+ var _a, _b;
122
+ const subscriptionId = (_a = subscriptionRef.current) == null ? void 0 : _a.id;
123
+ const subscriptionIdentifier = (_b = subscriptionRef.current) == null ? void 0 : _b.identifier;
124
+ if (!subscriptionId || !subscriptionIdentifier) {
125
+ return;
126
+ }
127
+ if ("subscriptionId" in args && args.subscriptionId === subscriptionId || "subscriptionId" in args && args.subscriptionId === subscriptionIdentifier || "subscription" in args && args.subscription.id === subscriptionId || "subscription" in args && args.subscription.identifier === subscriptionIdentifier) {
128
+ setSubscription(null);
129
+ setIsFetching(false);
130
+ }
131
+ });
132
+ void fetchSubscription({ refetch: true });
133
+ return () => {
134
+ cleanupGetPending();
135
+ cleanupGetResolved();
136
+ cleanupCreatePending();
137
+ cleanupCreateResolved();
138
+ cleanupUpdateResolved();
139
+ cleanupDeletePending();
140
+ cleanupDeleteResolved();
141
+ };
142
+ }, [novu, fetchSubscription]);
143
+ const refetch = (0, import_react.useCallback)(() => fetchSubscription({ refetch: true }), [fetchSubscription]);
144
+ return {
145
+ subscription,
146
+ error,
147
+ isLoading,
148
+ isFetching,
149
+ refetch
150
+ };
151
+ };
152
+ // Annotate the CommonJS export names for ESM import in node:
153
+ 0 && (module.exports = {
154
+ useSubscription
155
+ });
156
+ //# sourceMappingURL=useSubscription.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useSubscription.ts"],"sourcesContent":["import { NovuError, TopicSubscription } from '@novu/js';\nimport { buildSubscriptionIdentifier } from '@novu/js/internal';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNovu } from './NovuProvider';\n\nexport type UseSubscriptionProps = {\n topicKey: string;\n identifier?: string;\n onSuccess?: (data: TopicSubscription | null) => void;\n onError?: (error: NovuError) => void;\n};\n\nexport type UseSubscriptionResult = {\n subscription?: TopicSubscription | null;\n error?: NovuError;\n isLoading: boolean;\n isFetching: boolean;\n refetch: () => Promise<void>;\n};\n\n/**\n * Get a subscription for a topic.\n */\nexport const useSubscription = (props: UseSubscriptionProps): UseSubscriptionResult => {\n const novu = useNovu();\n const propsRef = useRef<UseSubscriptionProps>(props);\n propsRef.current = {\n ...props,\n identifier:\n props.identifier ?? buildSubscriptionIdentifier({ topicKey: props.topicKey, subscriberId: novu.subscriberId }),\n };\n const [subscription, setSubscription] = useState<TopicSubscription | null>();\n const subscriptionRef = useRef<TopicSubscription | null>(null);\n subscriptionRef.current = subscription ?? null;\n const [error, setError] = useState<NovuError>();\n const [isLoading, setIsLoading] = useState(true);\n const [isFetching, setIsFetching] = useState(false);\n\n const fetchSubscription = useCallback(\n async (options?: { refetch: boolean }) => {\n const { topicKey, identifier, onSuccess, onError } = propsRef.current;\n if (options?.refetch) {\n setError(undefined);\n setIsLoading(true);\n }\n\n setIsFetching(true);\n\n const response = await novu.subscriptions.get(\n {\n topicKey,\n identifier,\n },\n { refetch: options?.refetch }\n );\n\n if (response.error) {\n setError(response.error);\n onError?.(response.error);\n } else if (response.data !== undefined) {\n onSuccess?.(response.data);\n setSubscription(response.data);\n }\n setIsLoading(false);\n setIsFetching(false);\n },\n [novu]\n );\n\n useEffect(() => {\n const listener = ({ data: subscription }: { data?: TopicSubscription }) => {\n const { topicKey, identifier } = propsRef.current;\n if (!subscription || subscription.topicKey !== topicKey || subscription.identifier !== identifier) {\n return;\n }\n\n setSubscription(subscription);\n setIsFetching(false);\n };\n\n const cleanupGetPending = novu.on('subscription.get.pending', ({ args }) => {\n const { topicKey, identifier } = propsRef.current;\n if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {\n return;\n }\n setIsFetching(true);\n });\n\n const cleanupGetResolved = novu.on('subscription.get.resolved', ({ args, data, error }) => {\n const { topicKey, identifier, onSuccess, onError } = propsRef.current;\n if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {\n return;\n }\n if (error) {\n setError(error as NovuError);\n onError?.(error as NovuError);\n } else {\n setSubscription(data ?? null);\n onSuccess?.(data ?? null);\n }\n setIsFetching(false);\n });\n\n const cleanupCreatePending = novu.on('subscription.create.pending', ({ args }) => {\n const { topicKey, identifier } = propsRef.current;\n if (!args || args.topicKey !== topicKey || args.identifier !== identifier) {\n return;\n }\n setIsFetching(true);\n });\n\n const cleanupCreateResolved = novu.on('subscription.create.resolved', listener);\n\n const cleanupUpdateResolved = novu.on('subscription.update.resolved', listener);\n\n const cleanupDeletePending = novu.on('subscription.delete.pending', ({ args }) => {\n const subscriptionId = subscriptionRef.current?.id;\n const subscriptionIdentifier = subscriptionRef.current?.identifier;\n if (!subscriptionId || !subscriptionIdentifier) {\n return;\n }\n\n if (\n !args ||\n ('subscriptionId' in args &&\n args.subscriptionId !== subscriptionId &&\n args.subscriptionId !== subscriptionIdentifier) ||\n ('subscription' in args &&\n args.subscription.id !== subscriptionId &&\n args.subscription.identifier !== subscriptionIdentifier)\n ) {\n return;\n }\n setIsFetching(true);\n });\n\n const cleanupDeleteResolved = novu.on('subscription.delete.resolved', ({ args }) => {\n const subscriptionId = subscriptionRef.current?.id;\n const subscriptionIdentifier = subscriptionRef.current?.identifier;\n if (!subscriptionId || !subscriptionIdentifier) {\n return;\n }\n\n if (\n ('subscriptionId' in args && args.subscriptionId === subscriptionId) ||\n ('subscriptionId' in args && args.subscriptionId === subscriptionIdentifier) ||\n ('subscription' in args && args.subscription.id === subscriptionId) ||\n ('subscription' in args && args.subscription.identifier === subscriptionIdentifier)\n ) {\n setSubscription(null);\n setIsFetching(false);\n }\n });\n\n void fetchSubscription({ refetch: true });\n\n return () => {\n cleanupGetPending();\n cleanupGetResolved();\n cleanupCreatePending();\n cleanupCreateResolved();\n cleanupUpdateResolved();\n cleanupDeletePending();\n cleanupDeleteResolved();\n };\n }, [novu, fetchSubscription]);\n\n const refetch = useCallback(() => fetchSubscription({ refetch: true }), [fetchSubscription]);\n\n return {\n subscription,\n error,\n isLoading,\n isFetching,\n refetch,\n };\n};\n"],"mappings":"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","names":["subscription","error"]}
@@ -0,0 +1,21 @@
1
+ import { TopicSubscription, NovuError } from '@novu/js';
2
+
3
+ type UseSubscriptionProps = {
4
+ topicKey: string;
5
+ identifier?: string;
6
+ onSuccess?: (data: TopicSubscription | null) => void;
7
+ onError?: (error: NovuError) => void;
8
+ };
9
+ type UseSubscriptionResult = {
10
+ subscription?: TopicSubscription | null;
11
+ error?: NovuError;
12
+ isLoading: boolean;
13
+ isFetching: boolean;
14
+ refetch: () => Promise<void>;
15
+ };
16
+ /**
17
+ * Get a subscription for a topic.
18
+ */
19
+ declare const useSubscription: (props: UseSubscriptionProps) => UseSubscriptionResult;
20
+
21
+ export { type UseSubscriptionProps, type UseSubscriptionResult, useSubscription };