@knocklabs/react-core 0.3.0-rc.0 → 0.3.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 (113) hide show
  1. package/CHANGELOG.md +33 -4
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/cjs/modules/core/context/KnockProvider.js +1 -1
  4. package/dist/cjs/modules/core/context/KnockProvider.js.map +1 -1
  5. package/dist/cjs/modules/core/utils.js +1 -1
  6. package/dist/cjs/modules/core/utils.js.map +1 -1
  7. package/dist/cjs/modules/feed/context/KnockFeedProvider.js +1 -1
  8. package/dist/cjs/modules/feed/context/KnockFeedProvider.js.map +1 -1
  9. package/dist/cjs/modules/i18n/languages/en.js +1 -1
  10. package/dist/cjs/modules/i18n/languages/en.js.map +1 -1
  11. package/dist/cjs/modules/i18n/languages/index.js.map +1 -1
  12. package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js +2 -0
  13. package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js.map +1 -0
  14. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js +2 -0
  15. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js.map +1 -0
  16. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js +2 -0
  17. package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js.map +1 -0
  18. package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +1 -1
  19. package/dist/cjs/modules/slack/hooks/useSlackAuth.js +1 -1
  20. package/dist/cjs/modules/slack/hooks/useSlackAuth.js.map +1 -1
  21. package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -1
  22. package/dist/esm/index.mjs +42 -40
  23. package/dist/esm/index.mjs.map +1 -1
  24. package/dist/esm/modules/core/context/KnockProvider.mjs +14 -14
  25. package/dist/esm/modules/core/context/KnockProvider.mjs.map +1 -1
  26. package/dist/esm/modules/core/utils.mjs +13 -4
  27. package/dist/esm/modules/core/utils.mjs.map +1 -1
  28. package/dist/esm/modules/feed/context/KnockFeedProvider.mjs +13 -19
  29. package/dist/esm/modules/feed/context/KnockFeedProvider.mjs.map +1 -1
  30. package/dist/esm/modules/i18n/languages/en.mjs +9 -0
  31. package/dist/esm/modules/i18n/languages/en.mjs.map +1 -1
  32. package/dist/esm/modules/i18n/languages/index.mjs.map +1 -1
  33. package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs +45 -0
  34. package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs.map +1 -0
  35. package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs +51 -0
  36. package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs.map +1 -0
  37. package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs +38 -0
  38. package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs.map +1 -0
  39. package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +2 -2
  40. package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -1
  41. package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -1
  42. package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -1
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/modules/core/context/KnockProvider.d.ts +0 -1
  46. package/dist/types/modules/core/context/KnockProvider.d.ts.map +1 -1
  47. package/dist/types/modules/core/hooks/useAuthenticatedKnockClient.d.ts +0 -1
  48. package/dist/types/modules/core/utils.d.ts +6 -1
  49. package/dist/types/modules/core/utils.d.ts.map +1 -1
  50. package/dist/types/modules/feed/context/KnockFeedProvider.d.ts +0 -1
  51. package/dist/types/modules/feed/context/KnockFeedProvider.d.ts.map +1 -1
  52. package/dist/types/modules/feed/hooks/useFeedSettings.d.ts +0 -1
  53. package/dist/types/modules/feed/hooks/useNotificationStore.d.ts +0 -1
  54. package/dist/types/modules/feed/hooks/useNotifications.d.ts +0 -1
  55. package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts +0 -1
  56. package/dist/types/modules/i18n/languages/de.d.ts +0 -1
  57. package/dist/types/modules/i18n/languages/en.d.ts +0 -1
  58. package/dist/types/modules/i18n/languages/en.d.ts.map +1 -1
  59. package/dist/types/modules/i18n/languages/index.d.ts +9 -0
  60. package/dist/types/modules/i18n/languages/index.d.ts.map +1 -1
  61. package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts +20 -0
  62. package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts.map +1 -0
  63. package/dist/types/modules/ms-teams/context/index.d.ts +2 -0
  64. package/dist/types/modules/ms-teams/context/index.d.ts.map +1 -0
  65. package/dist/types/modules/ms-teams/hooks/index.d.ts +3 -0
  66. package/dist/types/modules/ms-teams/hooks/index.d.ts.map +1 -0
  67. package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts +7 -0
  68. package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts.map +1 -0
  69. package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts +13 -0
  70. package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts.map +1 -0
  71. package/dist/types/modules/ms-teams/index.d.ts.map +1 -0
  72. package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +0 -1
  73. package/dist/types/modules/slack/hooks/useSlackChannels.d.ts +0 -1
  74. package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +0 -1
  75. package/package.json +11 -12
  76. package/src/index.ts +1 -1
  77. package/src/modules/core/context/KnockProvider.tsx +8 -6
  78. package/src/modules/core/utils.ts +21 -1
  79. package/src/modules/feed/context/KnockFeedProvider.tsx +6 -11
  80. package/src/modules/i18n/languages/en.ts +10 -0
  81. package/src/modules/i18n/languages/index.ts +9 -0
  82. package/src/modules/ms-teams/context/KnockMsTeamsProvider.tsx +74 -0
  83. package/src/modules/ms-teams/context/index.ts +1 -0
  84. package/src/modules/ms-teams/hooks/index.ts +2 -0
  85. package/src/modules/ms-teams/hooks/useMsTeamsAuth.ts +84 -0
  86. package/src/modules/ms-teams/hooks/useMsTeamsConnectionStatus.ts +82 -0
  87. package/src/modules/ms-teams/index.ts +2 -0
  88. package/src/modules/slack/hooks/useConnectedSlackChannels.ts +1 -1
  89. package/src/modules/slack/hooks/useSlackAuth.ts +1 -1
  90. package/src/modules/slack/hooks/useSlackConnectionStatus.ts +1 -1
  91. package/dist/cjs/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js +0 -2
  92. package/dist/cjs/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js.map +0 -1
  93. package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.js +0 -2
  94. package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.js.map +0 -1
  95. package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs +0 -33
  96. package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs.map +0 -1
  97. package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.mjs +0 -41
  98. package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.mjs.map +0 -1
  99. package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts +0 -16
  100. package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts.map +0 -1
  101. package/dist/types/modules/in-app-messages/context/index.d.ts +0 -2
  102. package/dist/types/modules/in-app-messages/context/index.d.ts.map +0 -1
  103. package/dist/types/modules/in-app-messages/hooks/index.d.ts +0 -2
  104. package/dist/types/modules/in-app-messages/hooks/index.d.ts.map +0 -1
  105. package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts +0 -21
  106. package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts.map +0 -1
  107. package/dist/types/modules/in-app-messages/index.d.ts.map +0 -1
  108. package/src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx +0 -68
  109. package/src/modules/in-app-messages/context/index.ts +0 -1
  110. package/src/modules/in-app-messages/hooks/index.ts +0 -1
  111. package/src/modules/in-app-messages/hooks/useInAppMessages.ts +0 -89
  112. package/src/modules/in-app-messages/index.ts +0 -3
  113. /package/dist/types/modules/{in-app-messages → ms-teams}/index.d.ts +0 -0
@@ -1,41 +0,0 @@
1
- import { InAppMessagesClient as a } from "@knocklabs/client";
2
- import { useStore as m } from "@tanstack/react-store";
3
- import { useMemo as c, useEffect as g } from "react";
4
- import "../../core/context/KnockProvider.mjs";
5
- import f from "../../core/hooks/useStableOptions.mjs";
6
- import "date-fns";
7
- import { useInAppMessagesChannel as l } from "../context/KnockInAppMessagesChannelProvider.mjs";
8
- const M = (t, o = {}) => {
9
- const {
10
- inAppMessagesChannelClient: e
11
- } = l(), n = f(o), s = c(() => new a(e, t, n), [e, t, n]), {
12
- messages: r,
13
- networkStatus: p,
14
- loading: i
15
- } = m(e.store, (u) => s.getQueryInfoSelector(u));
16
- return g(() => (s.subscribe(), s.fetch(), () => {
17
- s.unsubscribe();
18
- }), []), {
19
- messages: r,
20
- networkStatus: p,
21
- loading: i,
22
- inAppMessagesClient: s
23
- };
24
- }, O = (t, o = {}) => {
25
- const {
26
- messages: e,
27
- ...n
28
- } = M(t, {
29
- ...o,
30
- page_size: 1
31
- });
32
- return {
33
- message: e[0],
34
- ...n
35
- };
36
- };
37
- export {
38
- O as useInAppMessage,
39
- M as useInAppMessages
40
- };
41
- //# sourceMappingURL=useInAppMessages.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useInAppMessages.mjs","sources":["../../../../../src/modules/in-app-messages/hooks/useInAppMessages.ts"],"sourcesContent":["import {\n InAppMessage,\n InAppMessagesClient,\n InAppMessagesClientOptions,\n NetworkStatus,\n} from \"@knocklabs/client\";\nimport { GenericData } from \"@knocklabs/types\";\nimport { useStore } from \"@tanstack/react-store\";\nimport { useEffect, useMemo } from \"react\";\n\nimport { useStableOptions } from \"../../core\";\nimport { useInAppMessagesChannel } from \"../context\";\n\nexport interface UseInAppMessagesOptions extends InAppMessagesClientOptions {}\n\nexport interface UseInAppMessagesResponse<\n TContent extends GenericData,\n TData extends GenericData,\n> {\n messages: InAppMessage<TContent, TData>[];\n networkStatus: NetworkStatus;\n loading: boolean;\n inAppMessagesClient: InAppMessagesClient;\n}\n\nexport const useInAppMessages = <\n TContent extends GenericData = GenericData,\n TData extends GenericData = GenericData,\n>(\n messageType: string,\n options: UseInAppMessagesOptions = {},\n): UseInAppMessagesResponse<TContent, TData> => {\n const { inAppMessagesChannelClient } = useInAppMessagesChannel();\n\n const stableOptions = useStableOptions(options);\n\n const inAppMessagesClient = useMemo(() => {\n return new InAppMessagesClient(\n inAppMessagesChannelClient,\n messageType,\n stableOptions,\n );\n }, [inAppMessagesChannelClient, messageType, stableOptions]);\n\n const { messages, networkStatus, loading } = useStore(\n inAppMessagesChannelClient.store,\n (state) => inAppMessagesClient.getQueryInfoSelector<TContent, TData>(state),\n );\n\n useEffect(() => {\n inAppMessagesClient.subscribe();\n inAppMessagesClient.fetch();\n\n return () => {\n inAppMessagesClient.unsubscribe();\n };\n // Run only once at mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { messages, networkStatus, loading, inAppMessagesClient };\n};\n\nexport type UseInAppMessageOptions = Omit<UseInAppMessagesOptions, \"page_size\">;\n\nexport interface UseInAppMessageResponse<\n TContent extends GenericData,\n TData extends GenericData,\n> extends GenericData {\n message?: InAppMessage<TContent, TData>;\n networkStatus: NetworkStatus;\n loading: boolean;\n inAppMessagesClient: InAppMessagesClient;\n}\n\nexport const useInAppMessage = <\n TContent extends GenericData = GenericData,\n TData extends GenericData = GenericData,\n>(\n messageType: string,\n options: UseInAppMessageOptions = {},\n): UseInAppMessageResponse<TContent, TData> => {\n const { messages, ...rest } = useInAppMessages<TContent, TData>(messageType, {\n ...options,\n page_size: 1,\n });\n\n return { message: messages[0], ...rest };\n};\n"],"names":["useInAppMessages","messageType","options","inAppMessagesChannelClient","useInAppMessagesChannel","stableOptions","useStableOptions","inAppMessagesClient","useMemo","InAppMessagesClient","messages","networkStatus","loading","useStore","store","state","getQueryInfoSelector","useEffect","subscribe","fetch","unsubscribe","useInAppMessage","rest","page_size","message"],"mappings":";;;;;;;AAyBO,MAAMA,IAAmB,CAI9BC,GACAC,IAAmC,OACW;AACxC,QAAA;AAAA,IAAEC,4BAAAA;AAAAA,MAA+BC,EAAwB,GAEzDC,IAAgBC,EAAiBJ,CAAO,GAExCK,IAAsBC,EAAQ,MAC3B,IAAIC,EACTN,GACAF,GACAI,CACF,GACC,CAACF,GAA4BF,GAAaI,CAAa,CAAC,GAErD;AAAA,IAAEK,UAAAA;AAAAA,IAAUC,eAAAA;AAAAA,IAAeC,SAAAA;AAAAA,EAAAA,IAAYC,EAC3CV,EAA2BW,OAC1BC,OAAUR,EAAoBS,qBAAsCD,CAAK,CAC5E;AAEAE,SAAAA,EAAU,OACRV,EAAoBW,UAAU,GAC9BX,EAAoBY,MAAM,GAEnB,MAAM;AACXZ,IAAAA,EAAoBa,YAAY;AAAA,EAAA,IAIjC,CAAE,CAAA,GAEE;AAAA,IAAEV,UAAAA;AAAAA,IAAUC,eAAAA;AAAAA,IAAeC,SAAAA;AAAAA,IAASL,qBAAAA;AAAAA,EAAAA;AAC7C,GAcac,IAAkB,CAI7BpB,GACAC,IAAkC,OACW;AACvC,QAAA;AAAA,IAAEQ,UAAAA;AAAAA,IAAU,GAAGY;AAAAA,EAAAA,IAAStB,EAAkCC,GAAa;AAAA,IAC3E,GAAGC;AAAAA,IACHqB,WAAW;AAAA,EAAA,CACZ;AAEM,SAAA;AAAA,IAAEC,SAASd,EAAS,CAAC;AAAA,IAAG,GAAGY;AAAAA,EAAAA;AACpC;"}
@@ -1,16 +0,0 @@
1
- import { InAppMessagesChannelClient, InAppMessagesClientOptions } from '@knocklabs/client';
2
- import { ColorMode } from '../../core/constants';
3
-
4
- import * as React from "react";
5
- export interface KnockInAppMessagesChannelProviderState {
6
- inAppMessagesChannelClient: InAppMessagesChannelClient;
7
- colorMode: ColorMode;
8
- }
9
- export interface KnockInAppMessagesChannelProviderProps {
10
- channelId: string;
11
- defaultOptions?: InAppMessagesClientOptions;
12
- colorMode?: ColorMode;
13
- }
14
- export declare const KnockInAppMessagesChannelProvider: React.FC<React.PropsWithChildren<KnockInAppMessagesChannelProviderProps>>;
15
- export declare const useInAppMessagesChannel: () => KnockInAppMessagesChannelProviderState;
16
- //# sourceMappingURL=KnockInAppMessagesChannelProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KnockInAppMessagesChannelProvider.d.ts","sourceRoot":"","sources":["../../../../../src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,WAAW,sCAAsC;IACrD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,sCAAsC;IAErD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAG5C,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAMD,eAAO,MAAM,iCAAiC,EAAE,KAAK,CAAC,EAAE,CACtD,KAAK,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,CA2BhE,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAC9B,sCASH,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './KnockInAppMessagesChannelProvider';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/in-app-messages/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from './useInAppMessages';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/in-app-messages/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -1,21 +0,0 @@
1
- import { InAppMessage, InAppMessagesClient, InAppMessagesClientOptions, NetworkStatus } from '@knocklabs/client';
2
- import { GenericData } from '@knocklabs/types';
3
-
4
- export interface UseInAppMessagesOptions extends InAppMessagesClientOptions {
5
- }
6
- export interface UseInAppMessagesResponse<TContent extends GenericData, TData extends GenericData> {
7
- messages: InAppMessage<TContent, TData>[];
8
- networkStatus: NetworkStatus;
9
- loading: boolean;
10
- inAppMessagesClient: InAppMessagesClient;
11
- }
12
- export declare const useInAppMessages: <TContent extends GenericData = GenericData, TData extends GenericData = GenericData>(messageType: string, options?: UseInAppMessagesOptions) => UseInAppMessagesResponse<TContent, TData>;
13
- export type UseInAppMessageOptions = Omit<UseInAppMessagesOptions, "page_size">;
14
- export interface UseInAppMessageResponse<TContent extends GenericData, TData extends GenericData> extends GenericData {
15
- message?: InAppMessage<TContent, TData>;
16
- networkStatus: NetworkStatus;
17
- loading: boolean;
18
- inAppMessagesClient: InAppMessagesClient;
19
- }
20
- export declare const useInAppMessage: <TContent extends GenericData = GenericData, TData extends GenericData = GenericData>(messageType: string, options?: UseInAppMessageOptions) => UseInAppMessageResponse<TContent, TData>;
21
- //# sourceMappingURL=useInAppMessages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useInAppMessages.d.ts","sourceRoot":"","sources":["../../../../../src/modules/in-app-messages/hooks/useInAppMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,MAAM,WAAW,uBAAwB,SAAQ,0BAA0B;CAAG;AAE9E,MAAM,WAAW,wBAAwB,CACvC,QAAQ,SAAS,WAAW,EAC5B,KAAK,SAAS,WAAW;IAEzB,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAC1C,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,SAAS,WAAW,gBAC5B,KAAK,SAAS,WAAW,6BAEZ,MAAM,YACV,uBAAuB,KAC/B,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CA8B1C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;AAEhF,MAAM,WAAW,uBAAuB,CACtC,QAAQ,SAAS,WAAW,EAC5B,KAAK,SAAS,WAAW,CACzB,SAAQ,WAAW;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,GAC1B,QAAQ,SAAS,WAAW,gBAC5B,KAAK,SAAS,WAAW,6BAEZ,MAAM,YACV,sBAAsB,KAC9B,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAOzC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/in-app-messages/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -1,68 +0,0 @@
1
- import Knock, {
2
- InAppMessagesChannelClient,
3
- InAppMessagesClientOptions,
4
- } from "@knocklabs/client";
5
- import * as React from "react";
6
-
7
- import { useKnockClient, useStableOptions } from "../../core";
8
- import { ColorMode } from "../../core/constants";
9
-
10
- export interface KnockInAppMessagesChannelProviderState {
11
- inAppMessagesChannelClient: InAppMessagesChannelClient;
12
- colorMode: ColorMode;
13
- }
14
-
15
- export interface KnockInAppMessagesChannelProviderProps {
16
- // In-App Message props
17
- channelId: string;
18
- defaultOptions?: InAppMessagesClientOptions;
19
-
20
- // Extra options
21
- colorMode?: ColorMode;
22
- }
23
-
24
- const KnockInAppMessagesContext = React.createContext<
25
- KnockInAppMessagesChannelProviderState | undefined
26
- >(undefined);
27
-
28
- export const KnockInAppMessagesChannelProvider: React.FC<
29
- React.PropsWithChildren<KnockInAppMessagesChannelProviderProps>
30
- > = ({ children, channelId, colorMode = "light", defaultOptions }) => {
31
- let knock: Knock;
32
- try {
33
- knock = useKnockClient();
34
- } catch (error) {
35
- throw new Error(
36
- "KnockInAppMessagesChannelProvider must be used within a KnockProvider.",
37
- );
38
- }
39
-
40
- const stableOptions = useStableOptions(defaultOptions);
41
-
42
- const inAppMessagesChannelClient = React.useMemo(() => {
43
- return new InAppMessagesChannelClient(knock, channelId, stableOptions);
44
- }, [knock, channelId, stableOptions]);
45
-
46
- return (
47
- <KnockInAppMessagesContext.Provider
48
- value={{
49
- inAppMessagesChannelClient,
50
- colorMode,
51
- }}
52
- >
53
- {children}
54
- </KnockInAppMessagesContext.Provider>
55
- );
56
- };
57
-
58
- export const useInAppMessagesChannel =
59
- (): KnockInAppMessagesChannelProviderState => {
60
- const context = React.useContext(KnockInAppMessagesContext);
61
- if (!context) {
62
- throw new Error(
63
- "useInAppMessagesChannel must be used within a KnockInAppMessagesChannelProvider",
64
- );
65
- }
66
-
67
- return context;
68
- };
@@ -1 +0,0 @@
1
- export * from "./KnockInAppMessagesChannelProvider";
@@ -1 +0,0 @@
1
- export * from "./useInAppMessages";
@@ -1,89 +0,0 @@
1
- import {
2
- InAppMessage,
3
- InAppMessagesClient,
4
- InAppMessagesClientOptions,
5
- NetworkStatus,
6
- } from "@knocklabs/client";
7
- import { GenericData } from "@knocklabs/types";
8
- import { useStore } from "@tanstack/react-store";
9
- import { useEffect, useMemo } from "react";
10
-
11
- import { useStableOptions } from "../../core";
12
- import { useInAppMessagesChannel } from "../context";
13
-
14
- export interface UseInAppMessagesOptions extends InAppMessagesClientOptions {}
15
-
16
- export interface UseInAppMessagesResponse<
17
- TContent extends GenericData,
18
- TData extends GenericData,
19
- > {
20
- messages: InAppMessage<TContent, TData>[];
21
- networkStatus: NetworkStatus;
22
- loading: boolean;
23
- inAppMessagesClient: InAppMessagesClient;
24
- }
25
-
26
- export const useInAppMessages = <
27
- TContent extends GenericData = GenericData,
28
- TData extends GenericData = GenericData,
29
- >(
30
- messageType: string,
31
- options: UseInAppMessagesOptions = {},
32
- ): UseInAppMessagesResponse<TContent, TData> => {
33
- const { inAppMessagesChannelClient } = useInAppMessagesChannel();
34
-
35
- const stableOptions = useStableOptions(options);
36
-
37
- const inAppMessagesClient = useMemo(() => {
38
- return new InAppMessagesClient(
39
- inAppMessagesChannelClient,
40
- messageType,
41
- stableOptions,
42
- );
43
- }, [inAppMessagesChannelClient, messageType, stableOptions]);
44
-
45
- const { messages, networkStatus, loading } = useStore(
46
- inAppMessagesChannelClient.store,
47
- (state) => inAppMessagesClient.getQueryInfoSelector<TContent, TData>(state),
48
- );
49
-
50
- useEffect(() => {
51
- inAppMessagesClient.subscribe();
52
- inAppMessagesClient.fetch();
53
-
54
- return () => {
55
- inAppMessagesClient.unsubscribe();
56
- };
57
- // Run only once at mount.
58
- // eslint-disable-next-line react-hooks/exhaustive-deps
59
- }, []);
60
-
61
- return { messages, networkStatus, loading, inAppMessagesClient };
62
- };
63
-
64
- export type UseInAppMessageOptions = Omit<UseInAppMessagesOptions, "page_size">;
65
-
66
- export interface UseInAppMessageResponse<
67
- TContent extends GenericData,
68
- TData extends GenericData,
69
- > extends GenericData {
70
- message?: InAppMessage<TContent, TData>;
71
- networkStatus: NetworkStatus;
72
- loading: boolean;
73
- inAppMessagesClient: InAppMessagesClient;
74
- }
75
-
76
- export const useInAppMessage = <
77
- TContent extends GenericData = GenericData,
78
- TData extends GenericData = GenericData,
79
- >(
80
- messageType: string,
81
- options: UseInAppMessageOptions = {},
82
- ): UseInAppMessageResponse<TContent, TData> => {
83
- const { messages, ...rest } = useInAppMessages<TContent, TData>(messageType, {
84
- ...options,
85
- page_size: 1,
86
- });
87
-
88
- return { message: messages[0], ...rest };
89
- };
@@ -1,3 +0,0 @@
1
- export * from "./context";
2
- export * from "./hooks";
3
- // TODO: Double check exports are exporting only necessary values