@knocklabs/react-core 0.3.0-rc-2.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.
- package/CHANGELOG.md +26 -5
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/modules/core/context/KnockProvider.js +1 -1
- package/dist/cjs/modules/core/context/KnockProvider.js.map +1 -1
- package/dist/cjs/modules/core/hooks/useStableOptions.js +1 -1
- package/dist/cjs/modules/core/hooks/useStableOptions.js.map +1 -1
- package/dist/cjs/modules/core/utils.js +1 -1
- package/dist/cjs/modules/core/utils.js.map +1 -1
- package/dist/cjs/modules/feed/context/KnockFeedProvider.js +1 -1
- package/dist/cjs/modules/feed/context/KnockFeedProvider.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/en.js +1 -1
- package/dist/cjs/modules/i18n/languages/en.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/index.js.map +1 -1
- package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js +2 -0
- package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js.map +1 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js +2 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js.map +1 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js +2 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsConnectionStatus.js.map +1 -0
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js +1 -1
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js +1 -1
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackChannels.js +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -1
- package/dist/esm/index.mjs +42 -40
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/modules/core/context/KnockProvider.mjs +15 -15
- package/dist/esm/modules/core/context/KnockProvider.mjs.map +1 -1
- package/dist/esm/modules/core/hooks/useStableOptions.mjs +8 -8
- package/dist/esm/modules/core/hooks/useStableOptions.mjs.map +1 -1
- package/dist/esm/modules/core/utils.mjs +13 -4
- package/dist/esm/modules/core/utils.mjs.map +1 -1
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs +14 -20
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/en.mjs +9 -0
- package/dist/esm/modules/i18n/languages/en.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/index.mjs.map +1 -1
- package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs +45 -0
- package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs.map +1 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs +51 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs.map +1 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs +38 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsConnectionStatus.mjs.map +1 -0
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs +1 -1
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +3 -3
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +1 -1
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +1 -1
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/core/context/KnockProvider.d.ts +0 -1
- package/dist/types/modules/core/context/KnockProvider.d.ts.map +1 -1
- package/dist/types/modules/core/hooks/useAuthenticatedKnockClient.d.ts +0 -1
- package/dist/types/modules/core/utils.d.ts +6 -1
- package/dist/types/modules/core/utils.d.ts.map +1 -1
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts +0 -1
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts.map +1 -1
- package/dist/types/modules/feed/hooks/useFeedSettings.d.ts +0 -1
- package/dist/types/modules/feed/hooks/useNotificationStore.d.ts +0 -1
- package/dist/types/modules/feed/hooks/useNotifications.d.ts +0 -1
- package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts +0 -1
- package/dist/types/modules/i18n/languages/de.d.ts +0 -1
- package/dist/types/modules/i18n/languages/en.d.ts +0 -1
- package/dist/types/modules/i18n/languages/en.d.ts.map +1 -1
- package/dist/types/modules/i18n/languages/index.d.ts +9 -0
- package/dist/types/modules/i18n/languages/index.d.ts.map +1 -1
- package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts +20 -0
- package/dist/types/modules/ms-teams/context/KnockMsTeamsProvider.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/context/index.d.ts +2 -0
- package/dist/types/modules/ms-teams/context/index.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/hooks/index.d.ts +3 -0
- package/dist/types/modules/ms-teams/hooks/index.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts +7 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsAuth.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts +13 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsConnectionStatus.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/index.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +0 -1
- package/dist/types/modules/slack/hooks/useSlackChannels.d.ts +0 -1
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +0 -1
- package/package.json +8 -10
- package/src/index.ts +1 -1
- package/src/modules/core/context/KnockProvider.tsx +8 -6
- package/src/modules/core/hooks/useStableOptions.ts +2 -2
- package/src/modules/core/utils.ts +21 -1
- package/src/modules/feed/context/KnockFeedProvider.tsx +6 -11
- package/src/modules/i18n/languages/en.ts +10 -0
- package/src/modules/i18n/languages/index.ts +9 -0
- package/src/modules/ms-teams/context/KnockMsTeamsProvider.tsx +74 -0
- package/src/modules/ms-teams/context/index.ts +1 -0
- package/src/modules/ms-teams/hooks/index.ts +2 -0
- package/src/modules/ms-teams/hooks/useMsTeamsAuth.ts +84 -0
- package/src/modules/ms-teams/hooks/useMsTeamsConnectionStatus.ts +82 -0
- package/src/modules/ms-teams/index.ts +2 -0
- package/src/modules/slack/hooks/useConnectedSlackChannels.ts +1 -1
- package/src/modules/slack/hooks/useSlackAuth.ts +1 -1
- package/src/modules/slack/hooks/useSlackConnectionStatus.ts +1 -1
- package/dist/cjs/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js +0 -2
- package/dist/cjs/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js.map +0 -1
- package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.js +0 -2
- package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.js.map +0 -1
- package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs +0 -33
- package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs.map +0 -1
- package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.mjs +0 -41
- package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.mjs.map +0 -1
- package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts +0 -16
- package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts.map +0 -1
- package/dist/types/modules/in-app-messages/context/index.d.ts +0 -2
- package/dist/types/modules/in-app-messages/context/index.d.ts.map +0 -1
- package/dist/types/modules/in-app-messages/hooks/index.d.ts +0 -2
- package/dist/types/modules/in-app-messages/hooks/index.d.ts.map +0 -1
- package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts +0 -21
- package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts.map +0 -1
- package/dist/types/modules/in-app-messages/index.d.ts.map +0 -1
- package/src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx +0 -68
- package/src/modules/in-app-messages/context/index.ts +0 -1
- package/src/modules/in-app-messages/hooks/index.ts +0 -1
- package/src/modules/in-app-messages/hooks/useInAppMessages.ts +0 -87
- package/src/modules/in-app-messages/index.ts +0 -3
- /package/dist/types/modules/{in-app-messages → ms-teams}/index.d.ts +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import Knock from "@knocklabs/client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
|
|
4
|
+
import { useTranslations } from "../../i18n";
|
|
5
|
+
|
|
6
|
+
export type ConnectionStatus =
|
|
7
|
+
| "connecting"
|
|
8
|
+
| "connected"
|
|
9
|
+
| "disconnected"
|
|
10
|
+
| "error"
|
|
11
|
+
| "disconnecting";
|
|
12
|
+
|
|
13
|
+
type UseMsTeamsConnectionStatusOutput = {
|
|
14
|
+
connectionStatus: ConnectionStatus;
|
|
15
|
+
setConnectionStatus: (status: ConnectionStatus) => void;
|
|
16
|
+
errorLabel: string | null;
|
|
17
|
+
setErrorLabel: (errorLabel: string) => void;
|
|
18
|
+
actionLabel: string | null;
|
|
19
|
+
setActionLabel: (actionLabel: string | null) => void;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function useMsTeamsConnectionStatus(
|
|
23
|
+
knock: Knock,
|
|
24
|
+
knockMsTeamsChannelId: string,
|
|
25
|
+
tenantId: string,
|
|
26
|
+
): UseMsTeamsConnectionStatusOutput {
|
|
27
|
+
const { t } = useTranslations();
|
|
28
|
+
|
|
29
|
+
const [connectionStatus, setConnectionStatus] =
|
|
30
|
+
useState<ConnectionStatus>("connecting");
|
|
31
|
+
const [errorLabel, setErrorLabel] = useState<string | null>(null);
|
|
32
|
+
const [actionLabel, setActionLabel] = useState<string | null>(null);
|
|
33
|
+
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const checkAuthStatus = async () => {
|
|
36
|
+
if (connectionStatus !== "connecting") return;
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
const authRes = await knock.msTeams.authCheck({
|
|
40
|
+
tenant: tenantId,
|
|
41
|
+
knockChannelId: knockMsTeamsChannelId,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
if (authRes.connection?.ok === true) {
|
|
45
|
+
return setConnectionStatus("connected");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (authRes.connection?.ok === false) {
|
|
49
|
+
return setConnectionStatus("disconnected");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// This is a normal response for a tenant that doesn't have
|
|
53
|
+
// ms_teams_tenant_id set on it, meaning it's not connected to MS Teams,
|
|
54
|
+
// so we give it a "disconnected" status instead of an error status.
|
|
55
|
+
if (
|
|
56
|
+
authRes.code === "ERR_BAD_REQUEST" &&
|
|
57
|
+
authRes.response?.data?.message === t("msTeamsTenantIdNotSet")
|
|
58
|
+
) {
|
|
59
|
+
return setConnectionStatus("disconnected");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// This is for any Knock errors that would require a reconnect.
|
|
63
|
+
setConnectionStatus("error");
|
|
64
|
+
} catch (_error) {
|
|
65
|
+
setConnectionStatus("error");
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
checkAuthStatus();
|
|
70
|
+
}, [connectionStatus, tenantId, knockMsTeamsChannelId, knock.msTeams, t]);
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
connectionStatus,
|
|
74
|
+
setConnectionStatus,
|
|
75
|
+
errorLabel,
|
|
76
|
+
setErrorLabel,
|
|
77
|
+
actionLabel,
|
|
78
|
+
setActionLabel,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export default useMsTeamsConnectionStatus;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@knocklabs/client"),p=require("react"),l=require("../../core/context/KnockProvider.js"),g=require("../../core/hooks/useStableOptions.js");require("date-fns");function d(e){if(e&&typeof e=="object"&&"default"in e)return e;const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const s=d(p),c=s.createContext(void 0),C=({children:e,channelId:n,colorMode:t="light",defaultOptions:r})=>{let o;try{o=l.useKnockClient()}catch{throw new Error("KnockInAppMessagesChannelProvider must be used within a KnockProvider.")}const a=g(r),i=s.useMemo(()=>new u.InAppMessagesChannelClient(o,n,a),[o,n,a]);return s.createElement(c.Provider,{value:{inAppMessagesChannelClient:i,colorMode:t}},e)},h=()=>{const e=s.useContext(c);if(!e)throw new Error("useInAppMessagesChannel must be used within a KnockInAppMessagesChannelProvider");return e};exports.KnockInAppMessagesChannelProvider=C;exports.useInAppMessagesChannel=h;
|
|
2
|
-
//# sourceMappingURL=KnockInAppMessagesChannelProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"KnockInAppMessagesChannelProvider.js","sources":["../../../../../src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx"],"sourcesContent":["import Knock, {\n InAppMessagesChannelClient,\n InAppMessagesClientOptions,\n} from \"@knocklabs/client\";\nimport * as React from \"react\";\n\nimport { useKnockClient, useStableOptions } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\n\nexport interface KnockInAppMessagesChannelProviderState {\n inAppMessagesChannelClient: InAppMessagesChannelClient;\n colorMode: ColorMode;\n}\n\nexport interface KnockInAppMessagesChannelProviderProps {\n // In-App Message props\n channelId: string;\n defaultOptions?: InAppMessagesClientOptions;\n\n // Extra options\n colorMode?: ColorMode;\n}\n\nconst KnockInAppMessagesContext = React.createContext<\n KnockInAppMessagesChannelProviderState | undefined\n>(undefined);\n\nexport const KnockInAppMessagesChannelProvider: React.FC<\n React.PropsWithChildren<KnockInAppMessagesChannelProviderProps>\n> = ({ children, channelId, colorMode = \"light\", defaultOptions }) => {\n let knock: Knock;\n try {\n knock = useKnockClient();\n } catch (error) {\n throw new Error(\n \"KnockInAppMessagesChannelProvider must be used within a KnockProvider.\",\n );\n }\n\n const stableOptions = useStableOptions(defaultOptions);\n\n const inAppMessagesChannelClient = React.useMemo(() => {\n return new InAppMessagesChannelClient(knock, channelId, stableOptions);\n }, [knock, channelId, stableOptions]);\n\n return (\n <KnockInAppMessagesContext.Provider\n value={{\n inAppMessagesChannelClient,\n colorMode,\n }}\n >\n {children}\n </KnockInAppMessagesContext.Provider>\n );\n};\n\nexport const useInAppMessagesChannel =\n (): KnockInAppMessagesChannelProviderState => {\n const context = React.useContext(KnockInAppMessagesContext);\n if (!context) {\n throw new Error(\n \"useInAppMessagesChannel must be used within a KnockInAppMessagesChannelProvider\",\n );\n }\n\n return context;\n };\n"],"names":["KnockInAppMessagesContext","React","createContext","undefined","KnockInAppMessagesChannelProvider","children","channelId","colorMode","defaultOptions","knock","useKnockClient","Error","stableOptions","useStableOptions","inAppMessagesChannelClient","useMemo","InAppMessagesChannelClient","useInAppMessagesChannel","context","useContext"],"mappings":"0kBAuBMA,EAA4BC,EAAMC,cAEtCC,MAAS,EAEEC,EAETA,CAAC,CAAEC,SAAAA,EAAUC,UAAAA,EAAWC,UAAAA,EAAY,QAASC,eAAAA,CAAe,IAAM,CAChEC,IAAAA,EACA,GAAA,CACFA,EAAQC,EAAe,eAAA,OACT,CACR,MAAA,IAAIC,MACR,wEACF,CACF,CAEMC,MAAAA,EAAgBC,EAAiBL,CAAc,EAE/CM,EAA6Bb,EAAMc,QAAQ,IACxC,IAAIC,EAAAA,2BAA2BP,EAAOH,EAAWM,CAAa,EACpE,CAACH,EAAOH,EAAWM,CAAa,CAAC,EAEpC,OACGX,EAAA,cAAAD,EAA0B,SAA1B,CACC,MAAO,CACLc,2BAAAA,EACAP,UAAAA,CAAAA,GAGDF,CACH,CAEJ,EAEaY,EACXA,IAA8C,CACtCC,MAAAA,EAAUjB,EAAMkB,WAAWnB,CAAyB,EAC1D,GAAI,CAACkB,EACG,MAAA,IAAIP,MACR,iFACF,EAGKO,OAAAA,CACT"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@knocklabs/client"),l=require("@tanstack/react-store"),o=require("react");require("../../core/context/KnockProvider.js");const M=require("../../core/hooks/useStableOptions.js");require("date-fns");const A=require("../context/KnockInAppMessagesChannelProvider.js"),u=(n,r={})=>{const{inAppMessagesChannelClient:s}=A.useInAppMessagesChannel(),t=M(r),e=o.useMemo(()=>new g.InAppMessagesClient(s,n,t),[s,n,t]),{messages:a,networkStatus:c,loading:i}=l.useStore(s.store,p=>e.getQueryInfoSelector(p));return o.useEffect(()=>(e.subscribe(),e.fetch(),()=>{e.unsubscribe()}),[e]),{messages:a,networkStatus:c,loading:i,inAppMessagesClient:e}},b=(n,r={})=>{const{messages:s,...t}=u(n,{...r,page_size:1});return{message:s[0],...t}};exports.useInAppMessage=b;exports.useInAppMessages=u;
|
|
2
|
-
//# sourceMappingURL=useInAppMessages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useInAppMessages.js","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 }, [inAppMessagesClient]);\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","getQueryInfoSelector","state","useEffect","subscribe","fetch","unsubscribe","useInAppMessage","rest","page_size","message"],"mappings":"yWAyBaA,EAAmB,CAI9BC,EACAC,EAAmC,KACW,CACxC,KAAA,CAAEC,2BAAAA,GAA+BC,EAAwB,wBAAA,EAEzDC,EAAgBC,EAAiBJ,CAAO,EAExCK,EAAsBC,EAAAA,QAAQ,IAC3B,IAAIC,EAAAA,oBACTN,EACAF,EACAI,CACF,EACC,CAACF,EAA4BF,EAAaI,CAAa,CAAC,EAErD,CAAEK,SAAAA,EAAUC,cAAAA,EAAeC,QAAAA,CAAAA,EAAYC,WAC3CV,EAA2BW,SAChBP,EAAoBQ,qBAAsCC,CAAK,CAC5E,EAEAC,OAAAA,EAAAA,UAAU,KACRV,EAAoBW,UAAU,EAC9BX,EAAoBY,MAAM,EAEnB,IAAM,CACXZ,EAAoBa,YAAY,CAAA,GAEjC,CAACb,CAAmB,CAAC,EAEjB,CAAEG,SAAAA,EAAUC,cAAAA,EAAeC,QAAAA,EAASL,oBAAAA,CAAAA,CAC7C,EAcac,EAAkB,CAI7BpB,EACAC,EAAkC,KACW,CACvC,KAAA,CAAEQ,SAAAA,EAAU,GAAGY,CAAAA,EAAStB,EAAkCC,EAAa,CAC3E,GAAGC,EACHqB,UAAW,CAAA,CACZ,EAEM,MAAA,CAAEC,QAASd,EAAS,CAAC,EAAG,GAAGY,CAAAA,CACpC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { InAppMessagesChannelClient as c } from "@knocklabs/client";
|
|
2
|
-
import * as n from "react";
|
|
3
|
-
import { useKnockClient as l } from "../../core/context/KnockProvider.mjs";
|
|
4
|
-
import u from "../../core/hooks/useStableOptions.mjs";
|
|
5
|
-
import "date-fns";
|
|
6
|
-
const r = n.createContext(void 0), k = ({
|
|
7
|
-
children: e,
|
|
8
|
-
channelId: t,
|
|
9
|
-
colorMode: a = "light",
|
|
10
|
-
defaultOptions: p
|
|
11
|
-
}) => {
|
|
12
|
-
let s;
|
|
13
|
-
try {
|
|
14
|
-
s = l();
|
|
15
|
-
} catch {
|
|
16
|
-
throw new Error("KnockInAppMessagesChannelProvider must be used within a KnockProvider.");
|
|
17
|
-
}
|
|
18
|
-
const o = u(p), i = n.useMemo(() => new c(s, t, o), [s, t, o]);
|
|
19
|
-
return /* @__PURE__ */ n.createElement(r.Provider, { value: {
|
|
20
|
-
inAppMessagesChannelClient: i,
|
|
21
|
-
colorMode: a
|
|
22
|
-
} }, e);
|
|
23
|
-
}, A = () => {
|
|
24
|
-
const e = n.useContext(r);
|
|
25
|
-
if (!e)
|
|
26
|
-
throw new Error("useInAppMessagesChannel must be used within a KnockInAppMessagesChannelProvider");
|
|
27
|
-
return e;
|
|
28
|
-
};
|
|
29
|
-
export {
|
|
30
|
-
k as KnockInAppMessagesChannelProvider,
|
|
31
|
-
A as useInAppMessagesChannel
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=KnockInAppMessagesChannelProvider.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"KnockInAppMessagesChannelProvider.mjs","sources":["../../../../../src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx"],"sourcesContent":["import Knock, {\n InAppMessagesChannelClient,\n InAppMessagesClientOptions,\n} from \"@knocklabs/client\";\nimport * as React from \"react\";\n\nimport { useKnockClient, useStableOptions } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\n\nexport interface KnockInAppMessagesChannelProviderState {\n inAppMessagesChannelClient: InAppMessagesChannelClient;\n colorMode: ColorMode;\n}\n\nexport interface KnockInAppMessagesChannelProviderProps {\n // In-App Message props\n channelId: string;\n defaultOptions?: InAppMessagesClientOptions;\n\n // Extra options\n colorMode?: ColorMode;\n}\n\nconst KnockInAppMessagesContext = React.createContext<\n KnockInAppMessagesChannelProviderState | undefined\n>(undefined);\n\nexport const KnockInAppMessagesChannelProvider: React.FC<\n React.PropsWithChildren<KnockInAppMessagesChannelProviderProps>\n> = ({ children, channelId, colorMode = \"light\", defaultOptions }) => {\n let knock: Knock;\n try {\n knock = useKnockClient();\n } catch (error) {\n throw new Error(\n \"KnockInAppMessagesChannelProvider must be used within a KnockProvider.\",\n );\n }\n\n const stableOptions = useStableOptions(defaultOptions);\n\n const inAppMessagesChannelClient = React.useMemo(() => {\n return new InAppMessagesChannelClient(knock, channelId, stableOptions);\n }, [knock, channelId, stableOptions]);\n\n return (\n <KnockInAppMessagesContext.Provider\n value={{\n inAppMessagesChannelClient,\n colorMode,\n }}\n >\n {children}\n </KnockInAppMessagesContext.Provider>\n );\n};\n\nexport const useInAppMessagesChannel =\n (): KnockInAppMessagesChannelProviderState => {\n const context = React.useContext(KnockInAppMessagesContext);\n if (!context) {\n throw new Error(\n \"useInAppMessagesChannel must be used within a KnockInAppMessagesChannelProvider\",\n );\n }\n\n return context;\n };\n"],"names":["KnockInAppMessagesContext","React","createContext","undefined","KnockInAppMessagesChannelProvider","children","channelId","colorMode","defaultOptions","knock","useKnockClient","Error","stableOptions","useStableOptions","inAppMessagesChannelClient","useMemo","InAppMessagesChannelClient","useInAppMessagesChannel","context","useContext"],"mappings":";;;;;AAuBA,MAAMA,IAA4BC,EAAMC,cAEtCC,MAAS,GAEEC,IAETA,CAAC;AAAA,EAAEC,UAAAA;AAAAA,EAAUC,WAAAA;AAAAA,EAAWC,WAAAA,IAAY;AAAA,EAASC,gBAAAA;AAAe,MAAM;AAChEC,MAAAA;AACA,MAAA;AACFA,IAAAA,IAAQC,EAAe;AAAA,UACT;AACR,UAAA,IAAIC,MACR,wEACF;AAAA,EACF;AAEMC,QAAAA,IAAgBC,EAAiBL,CAAc,GAE/CM,IAA6Bb,EAAMc,QAAQ,MACxC,IAAIC,EAA2BP,GAAOH,GAAWM,CAAa,GACpE,CAACH,GAAOH,GAAWM,CAAa,CAAC;AAEpC,SACG,gBAAAX,EAAA,cAAAD,EAA0B,UAA1B,EACC,OAAO;AAAA,IACLc,4BAAAA;AAAAA,IACAP,WAAAA;AAAAA,EAAAA,KAGDF,CACH;AAEJ,GAEaY,IACXA,MAA8C;AACtCC,QAAAA,IAAUjB,EAAMkB,WAAWnB,CAAyB;AAC1D,MAAI,CAACkB;AACG,UAAA,IAAIP,MACR,iFACF;AAGKO,SAAAA;AACT;"}
|
|
@@ -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: s
|
|
11
|
-
} = l(), n = f(o), e = c(() => new a(s, t, n), [s, t, n]), {
|
|
12
|
-
messages: r,
|
|
13
|
-
networkStatus: p,
|
|
14
|
-
loading: i
|
|
15
|
-
} = m(s.store, (u) => e.getQueryInfoSelector(u));
|
|
16
|
-
return g(() => (e.subscribe(), e.fetch(), () => {
|
|
17
|
-
e.unsubscribe();
|
|
18
|
-
}), [e]), {
|
|
19
|
-
messages: r,
|
|
20
|
-
networkStatus: p,
|
|
21
|
-
loading: i,
|
|
22
|
-
inAppMessagesClient: e
|
|
23
|
-
};
|
|
24
|
-
}, O = (t, o = {}) => {
|
|
25
|
-
const {
|
|
26
|
-
messages: s,
|
|
27
|
-
...n
|
|
28
|
-
} = M(t, {
|
|
29
|
-
...o,
|
|
30
|
-
page_size: 1
|
|
31
|
-
});
|
|
32
|
-
return {
|
|
33
|
-
message: s[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 }, [inAppMessagesClient]);\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,IAEjC,CAACb,CAAmB,CAAC,GAEjB;AAAA,IAAEG,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
|
package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts.map
DELETED
|
@@ -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 +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 +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,CA4B1C,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,87 +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
|
-
}, [inAppMessagesClient]);
|
|
58
|
-
|
|
59
|
-
return { messages, networkStatus, loading, inAppMessagesClient };
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export type UseInAppMessageOptions = Omit<UseInAppMessagesOptions, "page_size">;
|
|
63
|
-
|
|
64
|
-
export interface UseInAppMessageResponse<
|
|
65
|
-
TContent extends GenericData,
|
|
66
|
-
TData extends GenericData,
|
|
67
|
-
> extends GenericData {
|
|
68
|
-
message?: InAppMessage<TContent, TData>;
|
|
69
|
-
networkStatus: NetworkStatus;
|
|
70
|
-
loading: boolean;
|
|
71
|
-
inAppMessagesClient: InAppMessagesClient;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export const useInAppMessage = <
|
|
75
|
-
TContent extends GenericData = GenericData,
|
|
76
|
-
TData extends GenericData = GenericData,
|
|
77
|
-
>(
|
|
78
|
-
messageType: string,
|
|
79
|
-
options: UseInAppMessageOptions = {},
|
|
80
|
-
): UseInAppMessageResponse<TContent, TData> => {
|
|
81
|
-
const { messages, ...rest } = useInAppMessages<TContent, TData>(messageType, {
|
|
82
|
-
...options,
|
|
83
|
-
page_size: 1,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
return { message: messages[0], ...rest };
|
|
87
|
-
};
|
|
File without changes
|