@knocklabs/react-core 0.2.29 → 0.3.0-rc-2.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 +6 -16
- 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.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/in-app-messages/context/KnockInAppMessagesChannelProvider.js +2 -0
- package/dist/cjs/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js.map +1 -0
- package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.js +2 -0
- package/dist/cjs/modules/in-app-messages/hooks/useInAppMessages.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 +36 -30
- 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.map +1 -1
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs +20 -14
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs.map +1 -1
- package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs +33 -0
- package/dist/esm/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs.map +1 -0
- package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.mjs +41 -0
- package/dist/esm/modules/in-app-messages/hooks/useInAppMessages.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 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/core/context/KnockProvider.d.ts +1 -0
- package/dist/types/modules/core/context/KnockProvider.d.ts.map +1 -1
- package/dist/types/modules/core/hooks/useAuthenticatedKnockClient.d.ts +1 -0
- package/dist/types/modules/core/utils.d.ts +1 -0
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts +1 -0
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts.map +1 -1
- package/dist/types/modules/feed/hooks/useFeedSettings.d.ts +1 -0
- package/dist/types/modules/feed/hooks/useNotificationStore.d.ts +1 -0
- package/dist/types/modules/feed/hooks/useNotifications.d.ts +1 -0
- package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts +1 -0
- package/dist/types/modules/i18n/languages/de.d.ts +1 -0
- package/dist/types/modules/i18n/languages/en.d.ts +1 -0
- package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts +16 -0
- package/dist/types/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.d.ts.map +1 -0
- package/dist/types/modules/in-app-messages/context/index.d.ts +2 -0
- package/dist/types/modules/in-app-messages/context/index.d.ts.map +1 -0
- package/dist/types/modules/in-app-messages/hooks/index.d.ts +2 -0
- package/dist/types/modules/in-app-messages/hooks/index.d.ts.map +1 -0
- package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts +21 -0
- package/dist/types/modules/in-app-messages/hooks/useInAppMessages.d.ts.map +1 -0
- package/dist/types/modules/in-app-messages/index.d.ts +3 -0
- package/dist/types/modules/in-app-messages/index.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +1 -0
- package/dist/types/modules/slack/hooks/useSlackChannels.d.ts +1 -0
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +1 -0
- package/package.json +10 -8
- package/src/index.ts +1 -0
- package/src/modules/core/context/KnockProvider.tsx +6 -8
- package/src/modules/core/hooks/useStableOptions.ts +2 -2
- package/src/modules/core/utils.ts +1 -1
- package/src/modules/feed/context/KnockFeedProvider.tsx +11 -6
- package/src/modules/in-app-messages/context/KnockInAppMessagesChannelProvider.tsx +68 -0
- package/src/modules/in-app-messages/context/index.ts +1 -0
- package/src/modules/in-app-messages/hooks/index.ts +1 -0
- package/src/modules/in-app-messages/hooks/useInAppMessages.ts +87 -0
- package/src/modules/in-app-messages/index.ts +3 -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/CHANGELOG.md
CHANGED
|
@@ -1,26 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.2.
|
|
3
|
+
## 0.3.0-rc-2.0
|
|
4
4
|
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
- Updated dependencies [26db496]
|
|
8
|
-
- Updated dependencies [988aaf9]
|
|
9
|
-
- @knocklabs/client@0.10.17
|
|
10
|
-
|
|
11
|
-
## 0.2.28
|
|
12
|
-
|
|
13
|
-
### Patch Changes
|
|
14
|
-
|
|
15
|
-
- Updated dependencies [bc99374]
|
|
16
|
-
- @knocklabs/client@0.10.16
|
|
5
|
+
### Minor Changes
|
|
17
6
|
|
|
18
|
-
|
|
7
|
+
- f442962: feat: add in app messages client, hooks, provider, and components
|
|
19
8
|
|
|
20
9
|
### Patch Changes
|
|
21
10
|
|
|
22
|
-
- Updated dependencies [
|
|
23
|
-
|
|
11
|
+
- Updated dependencies [1b3ad4b]
|
|
12
|
+
- Updated dependencies [f442962]
|
|
13
|
+
- @knocklabs/client@0.11.0-rc-2.0
|
|
24
14
|
|
|
25
15
|
## 0.2.26
|
|
26
16
|
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./modules/core/context/KnockProvider.js"),a=require("./modules/core/hooks/useAuthenticatedKnockClient.js"),u=require("./modules/core/hooks/useStableOptions.js"),l=require("./modules/core/constants.js"),e=require("./modules/core/utils.js"),s=require("./modules/feed/context/KnockFeedProvider.js"),d=require("./modules/feed/hooks/useNotifications.js"),k=require("./modules/feed/hooks/useFeedSettings.js"),o=require("./modules/feed/hooks/useNotificationStore.js"),t=require("./modules/in-app-messages/context/KnockInAppMessagesChannelProvider.js"),r=require("./modules/in-app-messages/hooks/useInAppMessages.js"),i=require("./modules/slack/context/KnockSlackProvider.js"),S=require("./modules/slack/hooks/useSlackConnectionStatus.js"),C=require("./modules/slack/hooks/useSlackChannels.js"),K=require("./modules/slack/hooks/useConnectedSlackChannels.js"),p=require("./modules/slack/hooks/useSlackAuth.js"),c=require("./modules/i18n/context/KnockI18nProvider.js"),v=require("./modules/i18n/hooks/useTranslations.js"),P=require("./modules/i18n/languages/index.js");exports.KnockProvider=n.KnockProvider;exports.useKnockClient=n.useKnockClient;exports.useAuthenticatedKnockClient=a;exports.useStableOptions=u;exports.FilterStatus=l.FilterStatus;exports.feedProviderKey=e.feedProviderKey;exports.formatBadgeCount=e.formatBadgeCount;exports.formatTimestamp=e.formatTimestamp;exports.renderNodeOrFallback=e.renderNodeOrFallback;exports.slackProviderKey=e.slackProviderKey;exports.toSentenceCase=e.toSentenceCase;exports.KnockFeedProvider=s.KnockFeedProvider;exports.useKnockFeed=s.useKnockFeed;exports.useNotifications=d;exports.useFeedSettings=k;exports.useCreateNotificationStore=o.useCreateNotificationStore;exports.useNotificationStore=o.default;exports.KnockInAppMessagesChannelProvider=t.KnockInAppMessagesChannelProvider;exports.useInAppMessagesChannel=t.useInAppMessagesChannel;exports.useInAppMessage=r.useInAppMessage;exports.useInAppMessages=r.useInAppMessages;exports.KnockSlackProvider=i.KnockSlackProvider;exports.useKnockSlackClient=i.useKnockSlackClient;exports.useSlackConnectionStatus=S;exports.useSlackChannels=C;exports.useConnectedSlackChannels=K;exports.useSlackAuth=p;exports.I18nContext=c.I18nContext;exports.KnockI18nProvider=c.KnockI18nProvider;exports.useTranslations=v.useTranslations;exports.locales=P.locales;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),b=require("../../i18n/context/KnockI18nProvider.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),b=require("../../i18n/context/KnockI18nProvider.js"),K=require("../hooks/useAuthenticatedKnockClient.js");require("fast-deep-equal");function m(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 o=m(f),i=o.createContext(null),P=({apiKey:e,host:n,logLevel:t,userId:r,userToken:s,onUserTokenExpiring:c,timeBeforeExpirationInMs:u,children:a,i18n:l})=>{const d=o.useMemo(()=>({host:n,onUserTokenExpiring:c,timeBeforeExpirationInMs:u,logLevel:t}),[n,c,u,t]),k=K(e,r,s,d);return o.createElement(i.Provider,{value:{knock:k}},o.createElement(b.KnockI18nProvider,{i18n:l},a))},p=()=>{const e=o.useContext(i);if(!e)throw new Error("useKnockClient must be used within a KnockProvider");return e.knock};exports.KnockProvider=P;exports.useKnockClient=p;
|
|
2
2
|
//# sourceMappingURL=KnockProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockProvider.js","sources":["../../../../../src/modules/core/context/KnockProvider.tsx"],"sourcesContent":["import Knock, { AuthenticateOptions, LogLevel } from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { I18nContent, KnockI18nProvider } from \"../../i18n\";\nimport { useAuthenticatedKnockClient } from \"../hooks\";\n\nexport interface KnockProviderState {\n knock: Knock;\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"KnockProvider.js","sources":["../../../../../src/modules/core/context/KnockProvider.tsx"],"sourcesContent":["import Knock, { AuthenticateOptions, LogLevel } from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { I18nContent, KnockI18nProvider } from \"../../i18n\";\nimport { useAuthenticatedKnockClient } from \"../hooks\";\n\nexport interface KnockProviderState {\n knock: Knock;\n}\n\nconst KnockContext = React.createContext<KnockProviderState | null>(null);\n\nexport interface KnockProviderProps {\n // Knock client props\n apiKey: string;\n host?: string;\n // Authentication props\n userId: string;\n userToken?: string;\n onUserTokenExpiring?: AuthenticateOptions[\"onUserTokenExpiring\"];\n timeBeforeExpirationInMs?: AuthenticateOptions[\"timeBeforeExpirationInMs\"];\n\n // i18n translations\n i18n?: I18nContent;\n\n logLevel?: LogLevel;\n}\n\nexport const KnockProvider: React.FC<PropsWithChildren<KnockProviderProps>> = ({\n apiKey,\n host,\n logLevel,\n userId,\n userToken,\n onUserTokenExpiring,\n timeBeforeExpirationInMs,\n children,\n i18n,\n}) => {\n // We memoize the options here so that we don't create a new object on every re-render\n const authenticateOptions = React.useMemo(\n () => ({\n host,\n onUserTokenExpiring,\n timeBeforeExpirationInMs,\n logLevel,\n }),\n [host, onUserTokenExpiring, timeBeforeExpirationInMs, logLevel],\n );\n\n const knock = useAuthenticatedKnockClient(\n apiKey,\n userId,\n userToken,\n authenticateOptions,\n );\n\n return (\n <KnockContext.Provider\n value={{\n knock,\n }}\n >\n <KnockI18nProvider i18n={i18n}>{children}</KnockI18nProvider>\n </KnockContext.Provider>\n );\n};\n\nexport const useKnockClient = (): Knock => {\n const context = React.useContext(KnockContext);\n if (!context) {\n throw new Error(\"useKnockClient must be used within a KnockProvider\");\n }\n return context.knock;\n};\n"],"names":["KnockContext","React","createContext","KnockProvider","apiKey","host","logLevel","userId","userToken","onUserTokenExpiring","timeBeforeExpirationInMs","children","i18n","authenticateOptions","useMemo","knock","useAuthenticatedKnockClient","KnockI18nProvider","useKnockClient","context","useContext","Error"],"mappings":"yjBAWMA,EAAeC,EAAMC,cAAyC,IAAI,EAkB3DC,EAAiEA,CAAC,CAC7EC,OAAAA,EACAC,KAAAA,EACAC,SAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,oBAAAA,EACAC,yBAAAA,EACAC,SAAAA,EACAC,KAAAA,CACF,IAAM,CAEEC,MAAAA,EAAsBZ,EAAMa,QAChC,KAAO,CACLT,KAAAA,EACAI,oBAAAA,EACAC,yBAAAA,EACAJ,SAAAA,CAAAA,GAEF,CAACD,EAAMI,EAAqBC,EAA0BJ,CAAQ,CAChE,EAEMS,EAAQC,EACZZ,EACAG,EACAC,EACAK,CACF,EAEA,OACGZ,EAAA,cAAAD,EAAa,SAAb,CACC,MAAO,CACLe,MAAAA,CAAAA,CAGF,EAAAd,EAAA,cAACgB,EAAAA,kBAAkB,CAAA,KAAAL,CAAA,EAAaD,CAAS,CAC3C,CAEJ,EAEaO,EAAiBA,IAAa,CACnCC,MAAAA,EAAUlB,EAAMmB,WAAWpB,CAAY,EAC7C,GAAI,CAACmB,EACG,MAAA,IAAIE,MAAM,oDAAoD,EAEtE,OAAOF,EAAQJ,KACjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const n=require("fast-deep-equal"),r=require("react"),s=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},c=s(n);function a(t){const u=r.useRef();return r.useMemo(()=>{const e=u.current;return e&&c.default(t,e)?e:(u.current=t,t)},[t])}module.exports=a;
|
|
2
2
|
//# sourceMappingURL=useStableOptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStableOptions.js","sources":["../../../../../src/modules/core/hooks/useStableOptions.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"useStableOptions.js","sources":["../../../../../src/modules/core/hooks/useStableOptions.ts"],"sourcesContent":["import fastDeepEqual from \"fast-deep-equal\";\nimport { useMemo, useRef } from \"react\";\n\nexport default function useStableOptions<T>(options: T): T {\n const optionsRef = useRef<T>();\n\n return useMemo(() => {\n const currentOptions = optionsRef.current;\n\n if (currentOptions && fastDeepEqual(options, currentOptions)) {\n return currentOptions;\n }\n\n optionsRef.current = options;\n return options;\n }, [options]);\n}\n"],"names":["useStableOptions","options","optionsRef","useRef","useMemo","currentOptions","current","fastDeepEqual"],"mappings":"kIAGA,SAAwBA,EAAoBC,EAAe,CACzD,MAAMC,EAAaC,EAAAA,SAEnB,OAAOC,UAAQ,IAAM,CACnB,MAAMC,EAAiBH,EAAWI,QAElC,OAAID,GAAkBE,EAAAA,QAAcN,EAASI,CAAc,EAClDA,GAGTH,EAAWI,QAAUL,EACdA,EAAAA,EACN,CAACA,CAAO,CAAC,CACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport { intlFormatDistance, parseISO } from \"date-fns\";\nimport { ReactNode } from \"react\";\n\nexport function formatBadgeCount(count: number): string | number {\n return count > 9 ? \"9+\" : count;\n}\n\ntype FormatTimestampOptions = {\n locale?: string | string[];\n};\n\nexport function formatTimestamp(\n ts: string,\n options: FormatTimestampOptions = {},\n) {\n try {\n const parsedTs = parseISO(ts);\n const formatted = intlFormatDistance(parsedTs, new Date(), {\n locale: options.locale,\n });\n\n return formatted;\n } catch (
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport { intlFormatDistance, parseISO } from \"date-fns\";\nimport { ReactNode } from \"react\";\n\nexport function formatBadgeCount(count: number): string | number {\n return count > 9 ? \"9+\" : count;\n}\n\ntype FormatTimestampOptions = {\n locale?: string | string[];\n};\n\nexport function formatTimestamp(\n ts: string,\n options: FormatTimestampOptions = {},\n) {\n try {\n const parsedTs = parseISO(ts);\n const formatted = intlFormatDistance(parsedTs, new Date(), {\n locale: options.locale,\n });\n\n return formatted;\n } catch (e) {\n return ts;\n }\n}\n\nexport function toSentenceCase(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function renderNodeOrFallback(node: ReactNode, fallback: ReactNode) {\n return node !== undefined ? node : fallback;\n}\n\n/*\n Used to build a consistent key for the KnockFeedProvider so that React knows when\n to trigger a re-render of the context when a key property changes.\n*/\nexport function feedProviderKey(\n userId: string | undefined,\n feedId: string,\n options: FeedClientOptions = {},\n) {\n return [\n userId,\n feedId,\n options.source,\n options.tenant,\n options.has_tenant,\n options.archived,\n ]\n .filter((f) => f !== null && f !== undefined)\n .join(\"-\");\n}\n\n/*\n Used to build a consistent key for the KnockSlackProvider so that React knows when\n to trigger a re-render of the context when a key property changes.\n*/\nexport function slackProviderKey({\n knockSlackChannelId,\n tenant,\n connectionStatus,\n errorLabel,\n}: {\n knockSlackChannelId: string;\n tenant: string;\n connectionStatus: string;\n errorLabel: string | null;\n}) {\n return [knockSlackChannelId, tenant, connectionStatus, errorLabel]\n .filter((f) => f !== null && f !== undefined)\n .join(\"-\");\n}\n"],"names":["formatBadgeCount","count","formatTimestamp","ts","options","parsedTs","parseISO","formatted","intlFormatDistance","Date","locale","toSentenceCase","string","charAt","toUpperCase","slice","renderNodeOrFallback","node","fallback","undefined","feedProviderKey","userId","feedId","source","tenant","has_tenant","archived","filter","f","join","slackProviderKey","knockSlackChannelId","connectionStatus","errorLabel"],"mappings":"4GAIO,SAASA,EAAiBC,EAAgC,CACxDA,OAAAA,EAAQ,EAAI,KAAOA,CAC5B,CAMO,SAASC,EACdC,EACAC,EAAkC,GAClC,CACI,GAAA,CACIC,MAAAA,EAAWC,WAASH,CAAE,EAKrBI,OAJWC,EAAAA,mBAAmBH,EAAU,IAAII,KAAQ,CACzDC,OAAQN,EAAQM,MAAAA,CACjB,OAGS,CACHP,OAAAA,CACT,CACF,CAEO,SAASQ,EAAeC,EAAwB,CAC9CA,OAAAA,EAAOC,OAAO,CAAC,EAAEC,cAAgBF,EAAOG,MAAM,CAAC,CACxD,CAEgBC,SAAAA,EAAqBC,EAAiBC,EAAqB,CAClED,OAAAA,IAASE,OAAYF,EAAOC,CACrC,CAMO,SAASE,EACdC,EACAC,EACAlB,EAA6B,CAAA,EAC7B,CACO,MAAA,CACLiB,EACAC,EACAlB,EAAQmB,OACRnB,EAAQoB,OACRpB,EAAQqB,WACRrB,EAAQsB,QAAQ,EAEfC,UAAcC,GAAM,IAAuB,EAC3CC,KAAK,GAAG,CACb,CAMO,SAASC,EAAiB,CAC/BC,oBAAAA,EACAP,OAAAA,EACAQ,iBAAAA,EACAC,WAAAA,CAMF,EAAG,CACD,MAAO,CAACF,EAAqBP,EAAQQ,EAAkBC,CAAU,EAC9DN,OAAcC,GAAAA,GAAM,IAAuB,EAC3CC,KAAK,GAAG,CACb"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),a=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("fast-deep-equal");const l=require("../../core/utils.js"),f=require("../hooks/useNotifications.js"),k=require("../hooks/useNotificationStore.js");function v(e){if(e&&typeof e=="object"&&"default"in e)return e;const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const c=v(d),u=c.createContext(void 0),K=({feedId:e,children:r,defaultFeedOptions:t={},colorMode:o="light"})=>{let n;try{n=a.useKnockClient()}catch{throw new Error("KnockFeedProvider must be used within a KnockProvider.")}const i=f(n,e,t),s=k.useCreateNotificationStore(i);return c.createElement(u.Provider,{key:l.feedProviderKey(n.userId,e,t),value:{knock:n,feedClient:i,useFeedStore:s,colorMode:o}},r)},b=()=>{const e=c.useContext(u);if(!e)throw new Error("useKnockFeed must be used within a KnockFeedProvider");return e};exports.KnockFeedProvider=K;exports.useKnockFeed=b;
|
|
2
2
|
//# sourceMappingURL=KnockFeedProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockFeedProvider.js","sources":["../../../../../src/modules/feed/context/KnockFeedProvider.tsx"],"sourcesContent":["import Knock, {\n Feed,\n FeedClientOptions,\n FeedStoreState,\n} from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { UseBoundStore } from \"zustand\";\n\nimport { useKnockClient } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\nimport { feedProviderKey } from \"../../core/utils\";\nimport { useCreateNotificationStore } from \"../hooks\";\nimport useNotifications from \"../hooks/useNotifications\";\n\nexport interface KnockFeedProviderState {\n knock: Knock;\n feedClient: Feed;\n useFeedStore: UseBoundStore<FeedStoreState>;\n colorMode: ColorMode;\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"KnockFeedProvider.js","sources":["../../../../../src/modules/feed/context/KnockFeedProvider.tsx"],"sourcesContent":["import Knock, {\n Feed,\n FeedClientOptions,\n FeedStoreState,\n} from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { UseBoundStore } from \"zustand\";\n\nimport { useKnockClient } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\nimport { feedProviderKey } from \"../../core/utils\";\nimport { useCreateNotificationStore } from \"../hooks\";\nimport useNotifications from \"../hooks/useNotifications\";\n\nexport interface KnockFeedProviderState {\n knock: Knock;\n feedClient: Feed;\n useFeedStore: UseBoundStore<FeedStoreState>;\n colorMode: ColorMode;\n}\n\nconst KnockFeedContext = React.createContext<\n KnockFeedProviderState | undefined\n>(undefined);\n\nexport interface KnockFeedProviderProps {\n // Feed props\n feedId: string;\n\n // Extra options\n colorMode?: ColorMode;\n\n // Feed client options\n defaultFeedOptions?: FeedClientOptions;\n}\n\nexport const KnockFeedProvider: React.FC<\n PropsWithChildren<KnockFeedProviderProps>\n> = ({ feedId, children, defaultFeedOptions = {}, colorMode = \"light\" }) => {\n let knock: Knock;\n try {\n knock = useKnockClient();\n } catch (error) {\n throw new Error(\"KnockFeedProvider must be used within a KnockProvider.\");\n }\n\n const feedClient = useNotifications(knock, feedId, defaultFeedOptions);\n const useFeedStore = useCreateNotificationStore(feedClient);\n\n return (\n <KnockFeedContext.Provider\n key={feedProviderKey(knock.userId, feedId, defaultFeedOptions)}\n value={{\n knock,\n feedClient,\n useFeedStore,\n colorMode,\n }}\n >\n {children}\n </KnockFeedContext.Provider>\n );\n};\n\nexport const useKnockFeed = (): KnockFeedProviderState => {\n const context = React.useContext(KnockFeedContext);\n if (!context) {\n throw new Error(\"useKnockFeed must be used within a KnockFeedProvider\");\n }\n\n return context;\n};\n"],"names":["KnockFeedContext","React","createContext","undefined","KnockFeedProvider","feedId","children","defaultFeedOptions","colorMode","knock","useKnockClient","Error","feedClient","useNotifications","useFeedStore","useCreateNotificationStore","feedProviderKey","userId","useKnockFeed","context","useContext"],"mappings":"4pBAsBMA,EAAmBC,EAAMC,cAE7BC,MAAS,EAaEC,EAETA,CAAC,CAAEC,OAAAA,EAAQC,SAAAA,EAAUC,mBAAAA,EAAqB,CAAC,EAAGC,UAAAA,EAAY,OAAQ,IAAM,CACtEC,IAAAA,EACA,GAAA,CACFA,EAAQC,EAAe,eAAA,OACT,CACR,MAAA,IAAIC,MAAM,wDAAwD,CAC1E,CAEA,MAAMC,EAAaC,EAAiBJ,EAAOJ,EAAQE,CAAkB,EAC/DO,EAAeC,6BAA2BH,CAAU,EAGxD,OAAAX,EAAA,cAACD,EAAiB,SAAjB,CACC,IAAKgB,kBAAgBP,EAAMQ,OAAQZ,EAAQE,CAAkB,EAC7D,MAAO,CACLE,MAAAA,EACAG,WAAAA,EACAE,aAAAA,EACAN,UAAAA,CAAAA,GAGDF,CACH,CAEJ,EAEaY,EAAeA,IAA8B,CAClDC,MAAAA,EAAUlB,EAAMmB,WAAWpB,CAAgB,EACjD,GAAI,CAACmB,EACG,MAAA,IAAIR,MAAM,sDAAsD,EAGjEQ,OAAAA,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("../hooks/useSlackConnectionStatus.js"),b=require("react");require("swr/infinite");const S=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("../hooks/useSlackConnectionStatus.js"),b=require("react");require("swr/infinite");const S=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("fast-deep-equal");const f=require("../../core/utils.js");require("../../i18n/context/KnockI18nProvider.js");function v(e){if(e&&typeof e=="object"&&"default"in e)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const n=v(b),u=n.createContext(null),P=({knockSlackChannelId:e,tenant:t,children:r})=>{const o=S.useKnockClient(),{connectionStatus:c,setConnectionStatus:s,errorLabel:i,setErrorLabel:a,actionLabel:l,setActionLabel:d}=k(o,e,t);return n.createElement(u.Provider,{key:f.slackProviderKey({knockSlackChannelId:e,tenant:t,connectionStatus:c,errorLabel:i}),value:{connectionStatus:c,setConnectionStatus:s,errorLabel:i,setErrorLabel:a,actionLabel:l,setActionLabel:d,knockSlackChannelId:e,tenant:t}},r)},p=()=>{const e=n.useContext(u);if(e===void 0)throw new Error("useKnockSlackClient must be used within a KnockSlackProvider");return e};exports.KnockSlackProvider=P;exports.useKnockSlackClient=p;
|
|
2
2
|
//# sourceMappingURL=KnockSlackProvider.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const K=require("../context/KnockSlackProvider.js"),e=require("react");require("../../i18n/context/KnockI18nProvider.js");const b=require("../../i18n/hooks/useTranslations.js");require("swr/infinite");const y=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("
|
|
1
|
+
"use strict";const K=require("../context/KnockSlackProvider.js"),e=require("react");require("../../i18n/context/KnockI18nProvider.js");const b=require("../../i18n/hooks/useTranslations.js");require("swr/infinite");const y=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("fast-deep-equal");require("date-fns");function E({slackChannelsRecipientObject:{objectId:t,collection:a}}){const{t:q}=b.useTranslations(),c=y.useKnockClient(),{connectionStatus:h,knockSlackChannelId:s}=K.useKnockSlackClient(),[o,l]=e.useState(null),[r,i]=e.useState(null),[u,d]=e.useState(!1),[p,k]=e.useState(!1),C=e.useCallback(()=>{d(!0),(async()=>await c.objects.getChannelData({collection:a,objectId:t,channelId:s}))().then(n=>{var S,g;(S=n==null?void 0:n.data)!=null&&S.connections?l((g=n==null?void 0:n.data)==null?void 0:g.connections):l([]),i(null),d(!1)}).catch(()=>{l([]),i(null),d(!1)})},[a,c.objects,s,t]);return e.useEffect(()=>{h==="connected"&&!o&&!r&&!u&&C()},[o,C,u,r,h]),{data:o,updateConnectedChannels:async f=>{k(!0);try{await c.objects.setChannelData({objectId:t,collection:a,channelId:s,data:{connections:f}}),C()}catch{i(q("slackChannelSetError")||"")}k(!1)},updating:p,loading:u,error:r}}module.exports=E;
|
|
2
2
|
//# sourceMappingURL=useConnectedSlackChannels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectedSlackChannels.js","sources":["../../../../../src/modules/slack/hooks/useConnectedSlackChannels.ts"],"sourcesContent":["import { ContainerObject, useKnockSlackClient } from \"..\";\nimport { SlackChannelConnection } from \"@knocklabs/client\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\nimport { useTranslations } from \"../../i18n\";\n\ntype UseSlackChannelsProps = {\n slackChannelsRecipientObject: ContainerObject;\n};\n\ntype UseSlackChannelOutput = {\n data: SlackChannelConnection[] | null;\n updateConnectedChannels: (\n connectedChannels: SlackChannelConnection[],\n ) => void;\n loading: boolean;\n error: string | null;\n updating: boolean;\n};\n\nfunction useConnectedSlackChannels({\n slackChannelsRecipientObject: { objectId, collection },\n}: UseSlackChannelsProps): UseSlackChannelOutput {\n const { t } = useTranslations();\n const knock = useKnockClient();\n const { connectionStatus, knockSlackChannelId } = useKnockSlackClient();\n const [connectedChannels, setConnectedChannels] = useState<\n null | SlackChannelConnection[]\n >(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState(false);\n\n const fetchAndSetConnectedChannels = useCallback(() => {\n setIsLoading(true);\n const getConnectedChannels = async () =>\n await knock.objects.getChannelData({\n collection,\n objectId,\n channelId: knockSlackChannelId,\n });\n\n getConnectedChannels()\n .then((res) => {\n if (res?.data?.connections) {\n setConnectedChannels(res?.data?.connections);\n } else {\n setConnectedChannels([]);\n }\n setError(null);\n setIsLoading(false);\n })\n .catch(() => {\n setConnectedChannels([]);\n setError(null);\n setIsLoading(false);\n });\n }, [collection, knock.objects, knockSlackChannelId, objectId]);\n\n useEffect(() => {\n if (\n connectionStatus === \"connected\" &&\n !connectedChannels &&\n !error &&\n !isLoading\n ) {\n fetchAndSetConnectedChannels();\n }\n }, [\n connectedChannels,\n fetchAndSetConnectedChannels,\n isLoading,\n error,\n connectionStatus,\n ]);\n\n const updateConnectedChannels = async (\n channelsToSendToKnock: SlackChannelConnection[],\n ) => {\n setIsUpdating(true);\n try {\n await knock.objects.setChannelData({\n objectId,\n collection,\n channelId: knockSlackChannelId,\n data: { connections: channelsToSendToKnock },\n });\n fetchAndSetConnectedChannels();\n } catch (
|
|
1
|
+
{"version":3,"file":"useConnectedSlackChannels.js","sources":["../../../../../src/modules/slack/hooks/useConnectedSlackChannels.ts"],"sourcesContent":["import { ContainerObject, useKnockSlackClient } from \"..\";\nimport { SlackChannelConnection } from \"@knocklabs/client\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\nimport { useTranslations } from \"../../i18n\";\n\ntype UseSlackChannelsProps = {\n slackChannelsRecipientObject: ContainerObject;\n};\n\ntype UseSlackChannelOutput = {\n data: SlackChannelConnection[] | null;\n updateConnectedChannels: (\n connectedChannels: SlackChannelConnection[],\n ) => void;\n loading: boolean;\n error: string | null;\n updating: boolean;\n};\n\nfunction useConnectedSlackChannels({\n slackChannelsRecipientObject: { objectId, collection },\n}: UseSlackChannelsProps): UseSlackChannelOutput {\n const { t } = useTranslations();\n const knock = useKnockClient();\n const { connectionStatus, knockSlackChannelId } = useKnockSlackClient();\n const [connectedChannels, setConnectedChannels] = useState<\n null | SlackChannelConnection[]\n >(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState(false);\n\n const fetchAndSetConnectedChannels = useCallback(() => {\n setIsLoading(true);\n const getConnectedChannels = async () =>\n await knock.objects.getChannelData({\n collection,\n objectId,\n channelId: knockSlackChannelId,\n });\n\n getConnectedChannels()\n .then((res) => {\n if (res?.data?.connections) {\n setConnectedChannels(res?.data?.connections);\n } else {\n setConnectedChannels([]);\n }\n setError(null);\n setIsLoading(false);\n })\n .catch(() => {\n setConnectedChannels([]);\n setError(null);\n setIsLoading(false);\n });\n }, [collection, knock.objects, knockSlackChannelId, objectId]);\n\n useEffect(() => {\n if (\n connectionStatus === \"connected\" &&\n !connectedChannels &&\n !error &&\n !isLoading\n ) {\n fetchAndSetConnectedChannels();\n }\n }, [\n connectedChannels,\n fetchAndSetConnectedChannels,\n isLoading,\n error,\n connectionStatus,\n ]);\n\n const updateConnectedChannels = async (\n channelsToSendToKnock: SlackChannelConnection[],\n ) => {\n setIsUpdating(true);\n try {\n await knock.objects.setChannelData({\n objectId,\n collection,\n channelId: knockSlackChannelId,\n data: { connections: channelsToSendToKnock },\n });\n fetchAndSetConnectedChannels();\n } catch (error) {\n setError(t(\"slackChannelSetError\") || \"\");\n }\n setIsUpdating(false);\n };\n\n return {\n data: connectedChannels,\n updateConnectedChannels,\n updating: isUpdating,\n loading: isLoading,\n error,\n };\n}\n\nexport default useConnectedSlackChannels;\n"],"names":["useConnectedSlackChannels","slackChannelsRecipientObject","objectId","collection","t","useTranslations","knock","useKnockClient","connectionStatus","knockSlackChannelId","useKnockSlackClient","connectedChannels","setConnectedChannels","useState","error","setError","isLoading","setIsLoading","isUpdating","setIsUpdating","fetchAndSetConnectedChannels","useCallback","objects","getChannelData","channelId","then","res","data","connections","catch","useEffect","updateConnectedChannels","channelsToSendToKnock","setChannelData","updating","loading"],"mappings":"yVAqBA,SAASA,EAA0B,CACjCC,6BAA8B,CAAEC,SAAAA,EAAUC,WAAAA,CAAW,CAChC,EAA0B,CACzC,KAAA,CAAEC,EAAAA,GAAMC,EAAgB,gBAAA,EACxBC,EAAQC,EAAAA,iBACR,CAAEC,iBAAAA,EAAkBC,oBAAAA,GAAwBC,EAAoB,oBAAA,EAChE,CAACC,EAAmBC,CAAoB,EAAIC,WAEhD,IAAI,EACA,CAACC,EAAOC,CAAQ,EAAIF,WAAwB,IAAI,EAChD,CAACG,EAAWC,CAAY,EAAIJ,WAAS,EAAK,EAC1C,CAACK,EAAYC,CAAa,EAAIN,WAAS,EAAK,EAE5CO,EAA+BC,EAAAA,YAAY,IAAM,CACrDJ,EAAa,EAAI,GACY,SAC3B,MAAMX,EAAMgB,QAAQC,eAAe,CACjCpB,WAAAA,EACAD,SAAAA,EACAsB,UAAWf,CAAAA,CACZ,GAEkB,EAClBgB,KAAcC,GAAA,UACTA,EAAAA,GAAAA,YAAAA,EAAKC,OAALD,MAAAA,EAAWE,YACQF,GAAAA,EAAAA,GAAAA,YAAAA,EAAKC,OAALD,YAAAA,EAAWE,WAAW,EAE3ChB,EAAqB,CAAE,CAAA,EAEzBG,EAAS,IAAI,EACbE,EAAa,EAAK,CAAA,CACnB,EACAY,MAAM,IAAM,CACXjB,EAAqB,CAAE,CAAA,EACvBG,EAAS,IAAI,EACbE,EAAa,EAAK,CAAA,CACnB,CAAA,EACF,CAACd,EAAYG,EAAMgB,QAASb,EAAqBP,CAAQ,CAAC,EAE7D4B,OAAAA,EAAAA,UAAU,IAAM,CAEZtB,IAAqB,aACrB,CAACG,GACD,CAACG,GACD,CAACE,GAE4BI,GAC/B,EACC,CACDT,EACAS,EACAJ,EACAF,EACAN,CAAgB,CACjB,EAoBM,CACLmB,KAAMhB,EACNoB,wBApB8B,MAC9BC,GACG,CACHb,EAAc,EAAI,EACd,GAAA,CACIb,MAAAA,EAAMgB,QAAQW,eAAe,CACjC/B,SAAAA,EACAC,WAAAA,EACAqB,UAAWf,EACXkB,KAAM,CAAEC,YAAaI,CAAsB,CAAA,CAC5C,EAC4BZ,SACf,CACLhB,EAAAA,EAAE,sBAAsB,GAAK,EAAE,CAC1C,CACAe,EAAc,EAAK,CAAA,EAMnBe,SAAUhB,EACViB,QAASnB,EACTF,MAAAA,CAAAA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const S=require("../context/KnockSlackProvider.js"),k=require("react");require("../../i18n/context/KnockI18nProvider.js");require("swr/infinite");const _=require("../../core/context/KnockProvider.js"),C=require("@knocklabs/client");require("fast-deep-equal");require("date-fns");const d="https://slack.com/oauth/v2/authorize",l=["chat:write","chat:write.public","channels:read","groups:read"];function A(s,a,o){const e=_.useKnockClient(),{setConnectionStatus:c,knockSlackChannelId:n,tenant:r,setActionLabel:i}=S.useKnockSlackClient(),u=o&&o.length>0?Array.from(new Set(l.concat(o))):l,h=k.useCallback(async()=>{i(null),c("disconnecting");try{const t=await e.slack.revokeAccessToken({tenant:r,knockChannelId:n});c(t==="ok"?"disconnected":"error")}catch{c("error")}},[c,e.slack,r,n,i]);return{buildSlackAuthUrl:k.useCallback(()=>{const t={state:JSON.stringify({redirect_url:a,access_token_object:{object_id:r,collection:C.TENANT_OBJECT_COLLECTION},channel_id:n,public_key:e.apiKey,user_token:e.userToken}),client_id:s,scope:u.join(",")};return`${d}?${new URLSearchParams(t)}`},[a,r,n,e.apiKey,e.userToken,s,u]),disconnectFromSlack:h}}module.exports=A;
|
|
2
2
|
//# sourceMappingURL=useSlackAuth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSlackAuth.js","sources":["../../../../../src/modules/slack/hooks/useSlackAuth.ts"],"sourcesContent":["import { useKnockSlackClient } from \"..\";\nimport { TENANT_OBJECT_COLLECTION } from \"@knocklabs/client\";\nimport { useCallback } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\n\nconst SLACK_AUTHORIZE_URL = \"https://slack.com/oauth/v2/authorize\";\nconst DEFAULT_SLACK_SCOPES = [\n \"chat:write\",\n \"chat:write.public\",\n \"channels:read\",\n \"groups:read\",\n];\n\ntype UseSlackAuthOutput = {\n buildSlackAuthUrl: () => string;\n disconnectFromSlack: () => void;\n};\n\nfunction useSlackAuth(\n slackClientId: string,\n redirectUrl?: string,\n additionalScopes?: string[],\n): UseSlackAuthOutput {\n const knock = useKnockClient();\n const { setConnectionStatus, knockSlackChannelId, tenant, setActionLabel } =\n useKnockSlackClient();\n\n const combinedScopes =\n additionalScopes && additionalScopes.length > 0\n ? Array.from(new Set(DEFAULT_SLACK_SCOPES.concat(additionalScopes)))\n : DEFAULT_SLACK_SCOPES;\n\n const disconnectFromSlack = useCallback(async () => {\n setActionLabel(null);\n setConnectionStatus(\"disconnecting\");\n try {\n const revoke = await knock.slack.revokeAccessToken({\n tenant,\n knockChannelId: knockSlackChannelId,\n });\n\n if (revoke === \"ok\") {\n setConnectionStatus(\"disconnected\");\n } else {\n setConnectionStatus(\"error\");\n }\n } catch (
|
|
1
|
+
{"version":3,"file":"useSlackAuth.js","sources":["../../../../../src/modules/slack/hooks/useSlackAuth.ts"],"sourcesContent":["import { useKnockSlackClient } from \"..\";\nimport { TENANT_OBJECT_COLLECTION } from \"@knocklabs/client\";\nimport { useCallback } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\n\nconst SLACK_AUTHORIZE_URL = \"https://slack.com/oauth/v2/authorize\";\nconst DEFAULT_SLACK_SCOPES = [\n \"chat:write\",\n \"chat:write.public\",\n \"channels:read\",\n \"groups:read\",\n];\n\ntype UseSlackAuthOutput = {\n buildSlackAuthUrl: () => string;\n disconnectFromSlack: () => void;\n};\n\nfunction useSlackAuth(\n slackClientId: string,\n redirectUrl?: string,\n additionalScopes?: string[],\n): UseSlackAuthOutput {\n const knock = useKnockClient();\n const { setConnectionStatus, knockSlackChannelId, tenant, setActionLabel } =\n useKnockSlackClient();\n\n const combinedScopes =\n additionalScopes && additionalScopes.length > 0\n ? Array.from(new Set(DEFAULT_SLACK_SCOPES.concat(additionalScopes)))\n : DEFAULT_SLACK_SCOPES;\n\n const disconnectFromSlack = useCallback(async () => {\n setActionLabel(null);\n setConnectionStatus(\"disconnecting\");\n try {\n const revoke = await knock.slack.revokeAccessToken({\n tenant,\n knockChannelId: knockSlackChannelId,\n });\n\n if (revoke === \"ok\") {\n setConnectionStatus(\"disconnected\");\n } else {\n setConnectionStatus(\"error\");\n }\n } catch (error) {\n setConnectionStatus(\"error\");\n }\n }, [\n setConnectionStatus,\n knock.slack,\n tenant,\n knockSlackChannelId,\n setActionLabel,\n ]);\n\n const buildSlackAuthUrl = useCallback(() => {\n const rawParams = {\n state: JSON.stringify({\n redirect_url: redirectUrl,\n access_token_object: {\n object_id: tenant,\n collection: TENANT_OBJECT_COLLECTION,\n },\n channel_id: knockSlackChannelId,\n public_key: knock.apiKey,\n user_token: knock.userToken,\n }),\n client_id: slackClientId,\n scope: combinedScopes.join(\",\"),\n };\n return `${SLACK_AUTHORIZE_URL}?${new URLSearchParams(rawParams)}`;\n }, [\n redirectUrl,\n tenant,\n knockSlackChannelId,\n knock.apiKey,\n knock.userToken,\n slackClientId,\n combinedScopes,\n ]);\n\n return {\n buildSlackAuthUrl,\n disconnectFromSlack,\n };\n}\n\nexport default useSlackAuth;\n"],"names":["SLACK_AUTHORIZE_URL","DEFAULT_SLACK_SCOPES","useSlackAuth","slackClientId","redirectUrl","additionalScopes","knock","useKnockClient","setConnectionStatus","knockSlackChannelId","tenant","setActionLabel","useKnockSlackClient","combinedScopes","length","Array","from","Set","concat","disconnectFromSlack","useCallback","revoke","slack","revokeAccessToken","knockChannelId","buildSlackAuthUrl","rawParams","state","JSON","stringify","redirect_url","access_token_object","object_id","collection","TENANT_OBJECT_COLLECTION","channel_id","public_key","apiKey","user_token","userToken","client_id","scope","join","URLSearchParams"],"mappings":"oSAMA,MAAMA,EAAsB,uCACtBC,EAAuB,CAC3B,aACA,oBACA,gBACA,aAAa,EAQf,SAASC,EACPC,EACAC,EACAC,EACoB,CACpB,MAAMC,EAAQC,EAAAA,iBACR,CAAEC,oBAAAA,EAAqBC,oBAAAA,EAAqBC,OAAAA,EAAQC,eAAAA,GACxDC,EAAoB,oBAAA,EAEhBC,EACJR,GAAoBA,EAAiBS,OAAS,EAC1CC,MAAMC,KAAK,IAAIC,IAAIhB,EAAqBiB,OAAOb,CAAgB,CAAC,CAAC,EACjEJ,EAEAkB,EAAsBC,EAAAA,YAAY,SAAY,CAClDT,EAAe,IAAI,EACnBH,EAAoB,eAAe,EAC/B,GAAA,CACF,MAAMa,EAAS,MAAMf,EAAMgB,MAAMC,kBAAkB,CACjDb,OAAAA,EACAc,eAAgBf,CAAAA,CACjB,EAGCD,EADEa,IAAW,KACO,eAEA,OAFc,OAItB,CACdb,EAAoB,OAAO,CAC7B,CAAA,EACC,CACDA,EACAF,EAAMgB,MACNZ,EACAD,EACAE,CAAc,CACf,EA4BM,MAAA,CACLc,kBA3BwBL,EAAAA,YAAY,IAAM,CAC1C,MAAMM,EAAY,CAChBC,MAAOC,KAAKC,UAAU,CACpBC,aAAc1B,EACd2B,oBAAqB,CACnBC,UAAWtB,EACXuB,WAAYC,EAAAA,wBACd,EACAC,WAAY1B,EACZ2B,WAAY9B,EAAM+B,OAClBC,WAAYhC,EAAMiC,SAAAA,CACnB,EACDC,UAAWrC,EACXsC,MAAO5B,EAAe6B,KAAK,GAAG,CAAA,EAEhC,MAAO,GAAG1C,CAAmB,IAAI,IAAI2C,gBAAgBjB,CAAS,CAAC,EACjE,EAAG,CACDtB,EACAM,EACAD,EACAH,EAAM+B,OACN/B,EAAMiC,UACNpC,EACAU,CAAc,CACf,EAICM,oBAAAA,CAAAA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const I=require("../context/KnockSlackProvider.js"),d=require("react");require("../../i18n/context/KnockI18nProvider.js");const K=require("swr/infinite"),L=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("
|
|
1
|
+
"use strict";const I=require("../context/KnockSlackProvider.js"),d=require("react");require("../../i18n/context/KnockI18nProvider.js");const K=require("swr/infinite"),L=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("fast-deep-equal");require("date-fns");const N=n=>n&&typeof n=="object"&&"default"in n?n:{default:n},g=N(K),A=1e3,R=200,M="private_channel,public_channel",S="SLACK_CHANNELS";function z(n,c){return n===0?[S,""]:c&&["",null].includes(c.next_cursor)?null:[S,c.next_cursor??""]}function T({queryOptions:n}){var h,C;const c=L.useKnockClient(),{knockSlackChannelId:x,tenant:E,connectionStatus:a}=I.useKnockSlackClient(),m=t=>c.slack.getChannels({tenant:E,knockChannelId:x,queryOptions:{...n,cursor:t?t[1]:"",limit:(n==null?void 0:n.limitPerPage)||R,types:(n==null?void 0:n.types)||M}}),{data:e,error:i,isLoading:l,isValidating:r,size:u,setSize:f,mutate:P}=g.default(z,m,{initialSize:0}),s=(e==null?void 0:e.length)||0,k=s===0||e&&((h=e[s])==null?void 0:h.next_cursor)&&((C=e[s])==null?void 0:C.next_cursor)!=="",o=d.useMemo(()=>(e??[]).flatMap(t=>t==null?void 0:t.slack_channels).filter(t=>!!t),[e]),_=(n==null?void 0:n.maxCount)||A;return d.useEffect(()=>{a==="connected"&&!i&&k&&!l&&!r&&o.length<_&&f(u+1)},[o.length,f,u,k,l,r,_,i,a]),{data:o,isLoading:l||r,refetch:()=>P()}}module.exports=T;
|
|
2
2
|
//# sourceMappingURL=useSlackChannels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSlackConnectionStatus.js","sources":["../../../../../src/modules/slack/hooks/useSlackConnectionStatus.ts"],"sourcesContent":["import Knock from \"@knocklabs/client\";\nimport { useEffect, useState } from \"react\";\n\nimport { useTranslations } from \"../../i18n\";\n\nexport type ConnectionStatus =\n | \"connecting\"\n | \"connected\"\n | \"disconnected\"\n | \"error\"\n | \"disconnecting\";\n\ntype UseSlackConnectionStatusOutput = {\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (status: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (errorLabel: string) => void;\n actionLabel: string | null;\n setActionLabel: (actionLabel: string | null) => void;\n};\n\n/**\n * Transforms a slack error message into\n * a formatted one. Slack error messages: https://api.slack.com/methods/auth.test#errors\n *\n * Ex.: \"account_inactive\" -> \"Account inactive\"\n */\nconst formatSlackErrorMessage = (errorMessage: string) => {\n const firstLetter = errorMessage.substring(0, 1).toUpperCase();\n const rest = errorMessage.substring(1);\n return firstLetter?.concat(rest).replace(\"_\", \" \");\n};\n\nfunction useSlackConnectionStatus(\n knock: Knock,\n knockSlackChannelId: string,\n tenant: string,\n): UseSlackConnectionStatusOutput {\n const { t } = useTranslations();\n const [connectionStatus, setConnectionStatus] =\n useState<ConnectionStatus>(\"connecting\");\n const [errorLabel, setErrorLabel] = useState<string | null>(null);\n const [actionLabel, setActionLabel] = useState<string | null>(null);\n\n useEffect(() => {\n const checkAuthStatus = async () => {\n if (connectionStatus !== \"connecting\") return;\n\n try {\n const authRes = await knock.slack.authCheck({\n tenant,\n knockChannelId: knockSlackChannelId,\n });\n\n if (authRes.connection?.ok) {\n return setConnectionStatus(\"connected\");\n }\n\n if (!authRes.connection?.ok) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is a normal response for a tenant that doesn't have an access\n // token set on it, meaning it's not connected to Slack, so we\n // give it a \"disconnected\" status instead of an error status.\n if (\n authRes.code === \"ERR_BAD_REQUEST\" &&\n authRes.response?.data?.message === t(\"slackAccessTokenNotSet\")\n ) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is for an error coming directly from Slack.\n if (!authRes.connection?.ok && authRes.connection?.error) {\n const errorLabel = formatSlackErrorMessage(authRes.connection?.error);\n setErrorLabel(errorLabel);\n setConnectionStatus(\"error\");\n return;\n }\n\n // This is for any Knock errors that would require a reconnect.\n\n setConnectionStatus(\"error\");\n } catch (
|
|
1
|
+
{"version":3,"file":"useSlackConnectionStatus.js","sources":["../../../../../src/modules/slack/hooks/useSlackConnectionStatus.ts"],"sourcesContent":["import Knock from \"@knocklabs/client\";\nimport { useEffect, useState } from \"react\";\n\nimport { useTranslations } from \"../../i18n\";\n\nexport type ConnectionStatus =\n | \"connecting\"\n | \"connected\"\n | \"disconnected\"\n | \"error\"\n | \"disconnecting\";\n\ntype UseSlackConnectionStatusOutput = {\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (status: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (errorLabel: string) => void;\n actionLabel: string | null;\n setActionLabel: (actionLabel: string | null) => void;\n};\n\n/**\n * Transforms a slack error message into\n * a formatted one. Slack error messages: https://api.slack.com/methods/auth.test#errors\n *\n * Ex.: \"account_inactive\" -> \"Account inactive\"\n */\nconst formatSlackErrorMessage = (errorMessage: string) => {\n const firstLetter = errorMessage.substring(0, 1).toUpperCase();\n const rest = errorMessage.substring(1);\n return firstLetter?.concat(rest).replace(\"_\", \" \");\n};\n\nfunction useSlackConnectionStatus(\n knock: Knock,\n knockSlackChannelId: string,\n tenant: string,\n): UseSlackConnectionStatusOutput {\n const { t } = useTranslations();\n const [connectionStatus, setConnectionStatus] =\n useState<ConnectionStatus>(\"connecting\");\n const [errorLabel, setErrorLabel] = useState<string | null>(null);\n const [actionLabel, setActionLabel] = useState<string | null>(null);\n\n useEffect(() => {\n const checkAuthStatus = async () => {\n if (connectionStatus !== \"connecting\") return;\n\n try {\n const authRes = await knock.slack.authCheck({\n tenant,\n knockChannelId: knockSlackChannelId,\n });\n\n if (authRes.connection?.ok) {\n return setConnectionStatus(\"connected\");\n }\n\n if (!authRes.connection?.ok) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is a normal response for a tenant that doesn't have an access\n // token set on it, meaning it's not connected to Slack, so we\n // give it a \"disconnected\" status instead of an error status.\n if (\n authRes.code === \"ERR_BAD_REQUEST\" &&\n authRes.response?.data?.message === t(\"slackAccessTokenNotSet\")\n ) {\n return setConnectionStatus(\"disconnected\");\n }\n\n // This is for an error coming directly from Slack.\n if (!authRes.connection?.ok && authRes.connection?.error) {\n const errorLabel = formatSlackErrorMessage(authRes.connection?.error);\n setErrorLabel(errorLabel);\n setConnectionStatus(\"error\");\n return;\n }\n\n // This is for any Knock errors that would require a reconnect.\n\n setConnectionStatus(\"error\");\n } catch (error) {\n setConnectionStatus(\"error\");\n }\n };\n\n checkAuthStatus();\n }, [connectionStatus, tenant, knockSlackChannelId, knock.slack, t]);\n\n return {\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n };\n}\n\nexport default useSlackConnectionStatus;\n"],"names":["formatSlackErrorMessage","errorMessage","firstLetter","substring","toUpperCase","rest","concat","replace","useSlackConnectionStatus","knock","knockSlackChannelId","tenant","t","useTranslations","connectionStatus","setConnectionStatus","useState","errorLabel","setErrorLabel","actionLabel","setActionLabel","useEffect","authRes","slack","authCheck","knockChannelId","connection","ok","code","response","data","message","error"],"mappings":"gJA2BMA,EAA2BC,GAAyB,CACxD,MAAMC,EAAcD,EAAaE,UAAU,EAAG,CAAC,EAAEC,cAC3CC,EAAOJ,EAAaE,UAAU,CAAC,EACrC,OAAOD,GAAAA,YAAAA,EAAaI,OAAOD,GAAME,QAAQ,IAAK,IAChD,EAEA,SAASC,EACPC,EACAC,EACAC,EACgC,CAC1B,KAAA,CAAEC,EAAAA,GAAMC,EAAgB,gBAAA,EACxB,CAACC,EAAkBC,CAAmB,EAC1CC,WAA2B,YAAY,EACnC,CAACC,EAAYC,CAAa,EAAIF,WAAwB,IAAI,EAC1D,CAACG,EAAaC,CAAc,EAAIJ,WAAwB,IAAI,EAElEK,OAAAA,EAAAA,UAAU,IAAM,EACU,SAAY,mBAClC,GAAIP,IAAqB,aAErB,GAAA,CACF,MAAMQ,EAAU,MAAMb,EAAMc,MAAMC,UAAU,CAC1Cb,OAAAA,EACAc,eAAgBf,CAAAA,CACjB,EAEGY,IAAAA,EAAAA,EAAQI,aAARJ,MAAAA,EAAoBK,GACtB,OAAOZ,EAAoB,WAAW,EAWtCO,GARE,GAACA,EAAAA,EAAQI,aAARJ,MAAAA,EAAoBK,KAQvBL,EAAQM,OAAS,qBACjBN,GAAAA,EAAAA,EAAQO,WAARP,YAAAA,EAAkBQ,OAAlBR,YAAAA,EAAwBS,WAAYnB,EAAE,wBAAwB,EAE9D,OAAOG,EAAoB,cAAc,EAI3C,GAAI,GAACO,EAAAA,EAAQI,aAARJ,MAAAA,EAAoBK,OAAML,EAAAA,EAAQI,aAARJ,MAAAA,EAAoBU,OAAO,CACxD,MAAMf,EAAajB,GAAwBsB,EAAAA,EAAQI,aAARJ,YAAAA,EAAoBU,KAAK,EACpEd,EAAcD,CAAU,EACxBF,EAAoB,OAAO,EAC3B,MACF,CAIAA,EAAoB,OAAO,OACb,CACdA,EAAoB,OAAO,CAC7B,CAAA,IAGc,EACf,CAACD,EAAkBH,EAAQD,EAAqBD,EAAMc,MAAOX,CAAC,CAAC,EAE3D,CACLE,iBAAAA,EACAC,oBAAAA,EACAE,WAAAA,EACAC,cAAAA,EACAC,YAAAA,EACAC,eAAAA,CAAAA,CAEJ"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,47 +1,53 @@
|
|
|
1
1
|
import { KnockProvider as t, useKnockClient as r } from "./modules/core/context/KnockProvider.mjs";
|
|
2
2
|
import { default as s } from "./modules/core/hooks/useAuthenticatedKnockClient.mjs";
|
|
3
3
|
import { default as f } from "./modules/core/hooks/useStableOptions.mjs";
|
|
4
|
-
import { FilterStatus as
|
|
5
|
-
import { feedProviderKey as
|
|
6
|
-
import { KnockFeedProvider as
|
|
4
|
+
import { FilterStatus as l } from "./modules/core/constants.mjs";
|
|
5
|
+
import { feedProviderKey as i, formatBadgeCount as c, formatTimestamp as d, renderNodeOrFallback as m, slackProviderKey as x, toSentenceCase as k } from "./modules/core/utils.mjs";
|
|
6
|
+
import { KnockFeedProvider as S, useKnockFeed as K } from "./modules/feed/context/KnockFeedProvider.mjs";
|
|
7
7
|
import { default as P } from "./modules/feed/hooks/useNotifications.mjs";
|
|
8
8
|
import { default as h } from "./modules/feed/hooks/useFeedSettings.mjs";
|
|
9
|
-
import { useCreateNotificationStore as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { default as
|
|
14
|
-
import { default as
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
9
|
+
import { useCreateNotificationStore as I, default as F } from "./modules/feed/hooks/useNotificationStore.mjs";
|
|
10
|
+
import { KnockInAppMessagesChannelProvider as N, useInAppMessagesChannel as b } from "./modules/in-app-messages/context/KnockInAppMessagesChannelProvider.mjs";
|
|
11
|
+
import { useInAppMessage as O, useInAppMessages as T } from "./modules/in-app-messages/hooks/useInAppMessages.mjs";
|
|
12
|
+
import { KnockSlackProvider as j, useKnockSlackClient as q } from "./modules/slack/context/KnockSlackProvider.mjs";
|
|
13
|
+
import { default as z } from "./modules/slack/hooks/useSlackConnectionStatus.mjs";
|
|
14
|
+
import { default as E } from "./modules/slack/hooks/useSlackChannels.mjs";
|
|
15
|
+
import { default as H } from "./modules/slack/hooks/useConnectedSlackChannels.mjs";
|
|
16
|
+
import { default as L } from "./modules/slack/hooks/useSlackAuth.mjs";
|
|
17
|
+
import { I18nContext as R, KnockI18nProvider as U } from "./modules/i18n/context/KnockI18nProvider.mjs";
|
|
18
|
+
import { useTranslations as W } from "./modules/i18n/hooks/useTranslations.mjs";
|
|
19
|
+
import { locales as Y } from "./modules/i18n/languages/index.mjs";
|
|
18
20
|
export {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
l as FilterStatus,
|
|
22
|
+
R as I18nContext,
|
|
23
|
+
S as KnockFeedProvider,
|
|
24
|
+
U as KnockI18nProvider,
|
|
25
|
+
N as KnockInAppMessagesChannelProvider,
|
|
23
26
|
t as KnockProvider,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
j as KnockSlackProvider,
|
|
28
|
+
i as feedProviderKey,
|
|
29
|
+
c as formatBadgeCount,
|
|
30
|
+
d as formatTimestamp,
|
|
31
|
+
Y as locales,
|
|
32
|
+
m as renderNodeOrFallback,
|
|
30
33
|
x as slackProviderKey,
|
|
31
34
|
k as toSentenceCase,
|
|
32
35
|
s as useAuthenticatedKnockClient,
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
H as useConnectedSlackChannels,
|
|
37
|
+
I as useCreateNotificationStore,
|
|
35
38
|
h as useFeedSettings,
|
|
39
|
+
O as useInAppMessage,
|
|
40
|
+
T as useInAppMessages,
|
|
41
|
+
b as useInAppMessagesChannel,
|
|
36
42
|
r as useKnockClient,
|
|
37
43
|
K as useKnockFeed,
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
q as useKnockSlackClient,
|
|
45
|
+
F as useNotificationStore,
|
|
40
46
|
P as useNotifications,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
L as useSlackAuth,
|
|
48
|
+
E as useSlackChannels,
|
|
49
|
+
z as useSlackConnectionStatus,
|
|
44
50
|
f as useStableOptions,
|
|
45
|
-
|
|
51
|
+
W as useTranslations
|
|
46
52
|
};
|
|
47
53
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import * as t from "react";
|
|
2
|
-
import { KnockI18nProvider as
|
|
3
|
-
import
|
|
4
|
-
import "
|
|
5
|
-
const
|
|
2
|
+
import { KnockI18nProvider as d } from "../../i18n/context/KnockI18nProvider.mjs";
|
|
3
|
+
import l from "../hooks/useAuthenticatedKnockClient.mjs";
|
|
4
|
+
import "fast-deep-equal";
|
|
5
|
+
const u = t.createContext(null), P = ({
|
|
6
6
|
apiKey: e,
|
|
7
7
|
host: o,
|
|
8
8
|
logLevel: n,
|
|
9
|
-
userId:
|
|
9
|
+
userId: i,
|
|
10
10
|
userToken: s,
|
|
11
11
|
onUserTokenExpiring: r,
|
|
12
12
|
timeBeforeExpirationInMs: c,
|
|
13
|
-
children:
|
|
13
|
+
children: k,
|
|
14
14
|
i18n: m
|
|
15
15
|
}) => {
|
|
16
|
-
const
|
|
16
|
+
const a = t.useMemo(() => ({
|
|
17
17
|
host: o,
|
|
18
18
|
onUserTokenExpiring: r,
|
|
19
19
|
timeBeforeExpirationInMs: c,
|
|
20
20
|
logLevel: n
|
|
21
|
-
}), [o, r, c, n]),
|
|
22
|
-
return /* @__PURE__ */ t.createElement(
|
|
23
|
-
knock:
|
|
24
|
-
} }, /* @__PURE__ */ t.createElement(
|
|
21
|
+
}), [o, r, c, n]), K = l(e, i, s, a);
|
|
22
|
+
return /* @__PURE__ */ t.createElement(u.Provider, { value: {
|
|
23
|
+
knock: K
|
|
24
|
+
} }, /* @__PURE__ */ t.createElement(d, { i18n: m }, k));
|
|
25
25
|
}, f = () => {
|
|
26
|
-
const e = t.useContext(
|
|
27
|
-
if (e
|
|
28
|
-
throw new Error("
|
|
26
|
+
const e = t.useContext(u);
|
|
27
|
+
if (!e)
|
|
28
|
+
throw new Error("useKnockClient must be used within a KnockProvider");
|
|
29
29
|
return e.knock;
|
|
30
30
|
};
|
|
31
31
|
export {
|
|
32
|
-
|
|
32
|
+
P as KnockProvider,
|
|
33
33
|
f as useKnockClient
|
|
34
34
|
};
|
|
35
35
|
//# sourceMappingURL=KnockProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockProvider.mjs","sources":["../../../../../src/modules/core/context/KnockProvider.tsx"],"sourcesContent":["import Knock, { AuthenticateOptions, LogLevel } from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { I18nContent, KnockI18nProvider } from \"../../i18n\";\nimport { useAuthenticatedKnockClient } from \"../hooks\";\n\nexport interface KnockProviderState {\n knock: Knock;\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"KnockProvider.mjs","sources":["../../../../../src/modules/core/context/KnockProvider.tsx"],"sourcesContent":["import Knock, { AuthenticateOptions, LogLevel } from \"@knocklabs/client\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { I18nContent, KnockI18nProvider } from \"../../i18n\";\nimport { useAuthenticatedKnockClient } from \"../hooks\";\n\nexport interface KnockProviderState {\n knock: Knock;\n}\n\nconst KnockContext = React.createContext<KnockProviderState | null>(null);\n\nexport interface KnockProviderProps {\n // Knock client props\n apiKey: string;\n host?: string;\n // Authentication props\n userId: string;\n userToken?: string;\n onUserTokenExpiring?: AuthenticateOptions[\"onUserTokenExpiring\"];\n timeBeforeExpirationInMs?: AuthenticateOptions[\"timeBeforeExpirationInMs\"];\n\n // i18n translations\n i18n?: I18nContent;\n\n logLevel?: LogLevel;\n}\n\nexport const KnockProvider: React.FC<PropsWithChildren<KnockProviderProps>> = ({\n apiKey,\n host,\n logLevel,\n userId,\n userToken,\n onUserTokenExpiring,\n timeBeforeExpirationInMs,\n children,\n i18n,\n}) => {\n // We memoize the options here so that we don't create a new object on every re-render\n const authenticateOptions = React.useMemo(\n () => ({\n host,\n onUserTokenExpiring,\n timeBeforeExpirationInMs,\n logLevel,\n }),\n [host, onUserTokenExpiring, timeBeforeExpirationInMs, logLevel],\n );\n\n const knock = useAuthenticatedKnockClient(\n apiKey,\n userId,\n userToken,\n authenticateOptions,\n );\n\n return (\n <KnockContext.Provider\n value={{\n knock,\n }}\n >\n <KnockI18nProvider i18n={i18n}>{children}</KnockI18nProvider>\n </KnockContext.Provider>\n );\n};\n\nexport const useKnockClient = (): Knock => {\n const context = React.useContext(KnockContext);\n if (!context) {\n throw new Error(\"useKnockClient must be used within a KnockProvider\");\n }\n return context.knock;\n};\n"],"names":["KnockContext","React","createContext","KnockProvider","apiKey","host","logLevel","userId","userToken","onUserTokenExpiring","timeBeforeExpirationInMs","children","i18n","authenticateOptions","useMemo","knock","useAuthenticatedKnockClient","KnockI18nProvider","useKnockClient","context","useContext","Error"],"mappings":";;;;AAWA,MAAMA,IAAeC,EAAMC,cAAyC,IAAI,GAkB3DC,IAAiEA,CAAC;AAAA,EAC7EC,QAAAA;AAAAA,EACAC,MAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,qBAAAA;AAAAA,EACAC,0BAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,MAAAA;AACF,MAAM;AAEEC,QAAAA,IAAsBZ,EAAMa,QAChC,OAAO;AAAA,IACLT,MAAAA;AAAAA,IACAI,qBAAAA;AAAAA,IACAC,0BAAAA;AAAAA,IACAJ,UAAAA;AAAAA,EAAAA,IAEF,CAACD,GAAMI,GAAqBC,GAA0BJ,CAAQ,CAChE,GAEMS,IAAQC,EACZZ,GACAG,GACAC,GACAK,CACF;AAEA,SACG,gBAAAZ,EAAA,cAAAD,EAAa,UAAb,EACC,OAAO;AAAA,IACLe,OAAAA;AAAAA,EAAAA,EAGF,GAAA,gBAAAd,EAAA,cAACgB,GAAkB,EAAA,MAAAL,EAAA,GAAaD,CAAS,CAC3C;AAEJ,GAEaO,IAAiBA,MAAa;AACnCC,QAAAA,IAAUlB,EAAMmB,WAAWpB,CAAY;AAC7C,MAAI,CAACmB;AACG,UAAA,IAAIE,MAAM,oDAAoD;AAEtE,SAAOF,EAAQJ;AACjB;"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
function c(
|
|
4
|
-
const t =
|
|
5
|
-
return
|
|
6
|
-
const
|
|
7
|
-
return
|
|
8
|
-
}, [
|
|
1
|
+
import u from "fast-deep-equal";
|
|
2
|
+
import { useRef as n, useMemo as f } from "react";
|
|
3
|
+
function c(e) {
|
|
4
|
+
const t = n();
|
|
5
|
+
return f(() => {
|
|
6
|
+
const r = t.current;
|
|
7
|
+
return r && u(e, r) ? r : (t.current = e, e);
|
|
8
|
+
}, [e]);
|
|
9
9
|
}
|
|
10
10
|
export {
|
|
11
11
|
c as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStableOptions.mjs","sources":["../../../../../src/modules/core/hooks/useStableOptions.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"useStableOptions.mjs","sources":["../../../../../src/modules/core/hooks/useStableOptions.ts"],"sourcesContent":["import fastDeepEqual from \"fast-deep-equal\";\nimport { useMemo, useRef } from \"react\";\n\nexport default function useStableOptions<T>(options: T): T {\n const optionsRef = useRef<T>();\n\n return useMemo(() => {\n const currentOptions = optionsRef.current;\n\n if (currentOptions && fastDeepEqual(options, currentOptions)) {\n return currentOptions;\n }\n\n optionsRef.current = options;\n return options;\n }, [options]);\n}\n"],"names":["useStableOptions","options","optionsRef","useRef","useMemo","currentOptions","current","fastDeepEqual"],"mappings":";;AAGA,SAAwBA,EAAoBC,GAAe;AACzD,QAAMC,IAAaC;AAEnB,SAAOC,EAAQ,MAAM;AACnB,UAAMC,IAAiBH,EAAWI;AAElC,WAAID,KAAkBE,EAAcN,GAASI,CAAc,IAClDA,KAGTH,EAAWI,UAAUL,GACdA;AAAAA,EAAAA,GACN,CAACA,CAAO,CAAC;AACd;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport { intlFormatDistance, parseISO } from \"date-fns\";\nimport { ReactNode } from \"react\";\n\nexport function formatBadgeCount(count: number): string | number {\n return count > 9 ? \"9+\" : count;\n}\n\ntype FormatTimestampOptions = {\n locale?: string | string[];\n};\n\nexport function formatTimestamp(\n ts: string,\n options: FormatTimestampOptions = {},\n) {\n try {\n const parsedTs = parseISO(ts);\n const formatted = intlFormatDistance(parsedTs, new Date(), {\n locale: options.locale,\n });\n\n return formatted;\n } catch (
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport { intlFormatDistance, parseISO } from \"date-fns\";\nimport { ReactNode } from \"react\";\n\nexport function formatBadgeCount(count: number): string | number {\n return count > 9 ? \"9+\" : count;\n}\n\ntype FormatTimestampOptions = {\n locale?: string | string[];\n};\n\nexport function formatTimestamp(\n ts: string,\n options: FormatTimestampOptions = {},\n) {\n try {\n const parsedTs = parseISO(ts);\n const formatted = intlFormatDistance(parsedTs, new Date(), {\n locale: options.locale,\n });\n\n return formatted;\n } catch (e) {\n return ts;\n }\n}\n\nexport function toSentenceCase(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function renderNodeOrFallback(node: ReactNode, fallback: ReactNode) {\n return node !== undefined ? node : fallback;\n}\n\n/*\n Used to build a consistent key for the KnockFeedProvider so that React knows when\n to trigger a re-render of the context when a key property changes.\n*/\nexport function feedProviderKey(\n userId: string | undefined,\n feedId: string,\n options: FeedClientOptions = {},\n) {\n return [\n userId,\n feedId,\n options.source,\n options.tenant,\n options.has_tenant,\n options.archived,\n ]\n .filter((f) => f !== null && f !== undefined)\n .join(\"-\");\n}\n\n/*\n Used to build a consistent key for the KnockSlackProvider so that React knows when\n to trigger a re-render of the context when a key property changes.\n*/\nexport function slackProviderKey({\n knockSlackChannelId,\n tenant,\n connectionStatus,\n errorLabel,\n}: {\n knockSlackChannelId: string;\n tenant: string;\n connectionStatus: string;\n errorLabel: string | null;\n}) {\n return [knockSlackChannelId, tenant, connectionStatus, errorLabel]\n .filter((f) => f !== null && f !== undefined)\n .join(\"-\");\n}\n"],"names":["formatBadgeCount","count","formatTimestamp","ts","options","parsedTs","parseISO","formatted","intlFormatDistance","Date","locale","toSentenceCase","string","charAt","toUpperCase","slice","renderNodeOrFallback","node","fallback","undefined","feedProviderKey","userId","feedId","source","tenant","has_tenant","archived","filter","f","join","slackProviderKey","knockSlackChannelId","connectionStatus","errorLabel"],"mappings":";AAIO,SAASA,EAAiBC,GAAgC;AACxDA,SAAAA,IAAQ,IAAI,OAAOA;AAC5B;AAMO,SAASC,EACdC,GACAC,IAAkC,IAClC;AACI,MAAA;AACIC,UAAAA,IAAWC,EAASH,CAAE;AAKrBI,WAJWC,EAAmBH,GAAU,oBAAII,QAAQ;AAAA,MACzDC,QAAQN,EAAQM;AAAAA,IAAAA,CACjB;AAAA,UAGS;AACHP,WAAAA;AAAAA,EACT;AACF;AAEO,SAASQ,EAAeC,GAAwB;AAC9CA,SAAAA,EAAOC,OAAO,CAAC,EAAEC,gBAAgBF,EAAOG,MAAM,CAAC;AACxD;AAEgBC,SAAAA,EAAqBC,GAAiBC,GAAqB;AAClED,SAAAA,MAASE,SAAYF,IAAOC;AACrC;AAMO,SAASE,EACdC,GACAC,GACAlB,IAA6B,CAAA,GAC7B;AACO,SAAA,CACLiB,GACAC,GACAlB,EAAQmB,QACRnB,EAAQoB,QACRpB,EAAQqB,YACRrB,EAAQsB,QAAQ,EAEfC,OAAQC,OAAMA,KAAM,IAAuB,EAC3CC,KAAK,GAAG;AACb;AAMO,SAASC,EAAiB;AAAA,EAC/BC,qBAAAA;AAAAA,EACAP,QAAAA;AAAAA,EACAQ,kBAAAA;AAAAA,EACAC,YAAAA;AAMF,GAAG;AACD,SAAO,CAACF,GAAqBP,GAAQQ,GAAkBC,CAAU,EAC9DN,OAAQC,CAAMA,MAAAA,KAAM,IAAuB,EAC3CC,KAAK,GAAG;AACb;"}
|
|
@@ -1,31 +1,37 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { useKnockClient as
|
|
1
|
+
import * as r from "react";
|
|
2
|
+
import { useKnockClient as m } from "../../core/context/KnockProvider.mjs";
|
|
3
3
|
import "@knocklabs/client";
|
|
4
|
-
import "
|
|
5
|
-
import { feedProviderKey as
|
|
6
|
-
import
|
|
7
|
-
import { useCreateNotificationStore as
|
|
8
|
-
const i =
|
|
4
|
+
import "fast-deep-equal";
|
|
5
|
+
import { feedProviderKey as u } from "../../core/utils.mjs";
|
|
6
|
+
import k from "../hooks/useNotifications.mjs";
|
|
7
|
+
import { useCreateNotificationStore as a } from "../hooks/useNotificationStore.mjs";
|
|
8
|
+
const i = r.createContext(void 0), F = ({
|
|
9
9
|
feedId: e,
|
|
10
10
|
children: c,
|
|
11
|
-
defaultFeedOptions:
|
|
11
|
+
defaultFeedOptions: t = {},
|
|
12
12
|
colorMode: s = "light"
|
|
13
13
|
}) => {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
let o;
|
|
15
|
+
try {
|
|
16
|
+
o = m();
|
|
17
|
+
} catch {
|
|
18
|
+
throw new Error("KnockFeedProvider must be used within a KnockProvider.");
|
|
19
|
+
}
|
|
20
|
+
const n = k(o, e, t), d = a(n);
|
|
21
|
+
return /* @__PURE__ */ r.createElement(i.Provider, { key: u(o.userId, e, t), value: {
|
|
16
22
|
knock: o,
|
|
17
23
|
feedClient: n,
|
|
18
|
-
useFeedStore:
|
|
24
|
+
useFeedStore: d,
|
|
19
25
|
colorMode: s
|
|
20
26
|
} }, c);
|
|
21
|
-
},
|
|
22
|
-
const e =
|
|
27
|
+
}, P = () => {
|
|
28
|
+
const e = r.useContext(i);
|
|
23
29
|
if (!e)
|
|
24
30
|
throw new Error("useKnockFeed must be used within a KnockFeedProvider");
|
|
25
31
|
return e;
|
|
26
32
|
};
|
|
27
33
|
export {
|
|
28
34
|
F as KnockFeedProvider,
|
|
29
|
-
|
|
35
|
+
P as useKnockFeed
|
|
30
36
|
};
|
|
31
37
|
//# sourceMappingURL=KnockFeedProvider.mjs.map
|