@knocklabs/react-core 0.2.8 → 0.2.10
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 +14 -0
- package/dist/cjs/modules/core/constants.js.map +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/useAuthenticatedKnockClient.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/feed/hooks/useFeedSettings.js.map +1 -1
- package/dist/cjs/modules/feed/hooks/useNotifications.js.map +1 -1
- package/dist/cjs/modules/i18n/context/KnockI18nProvider.js +1 -1
- package/dist/cjs/modules/i18n/context/KnockI18nProvider.js.map +1 -1
- package/dist/cjs/modules/i18n/hooks/useTranslations.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/de.js.map +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/slack/context/KnockSlackProvider.js +1 -1
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +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/useSlackChannels.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -1
- package/dist/esm/modules/core/constants.mjs.map +1 -1
- package/dist/esm/modules/core/context/KnockProvider.mjs +25 -42
- package/dist/esm/modules/core/context/KnockProvider.mjs.map +1 -1
- package/dist/esm/modules/core/hooks/useAuthenticatedKnockClient.mjs.map +1 -1
- package/dist/esm/modules/core/utils.mjs +1 -7
- package/dist/esm/modules/core/utils.mjs.map +1 -1
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs +17 -27
- package/dist/esm/modules/feed/context/KnockFeedProvider.mjs.map +1 -1
- package/dist/esm/modules/feed/hooks/useFeedSettings.mjs +4 -1
- package/dist/esm/modules/feed/hooks/useFeedSettings.mjs.map +1 -1
- package/dist/esm/modules/feed/hooks/useNotifications.mjs +1 -8
- package/dist/esm/modules/feed/hooks/useNotifications.mjs.map +1 -1
- package/dist/esm/modules/i18n/context/KnockI18nProvider.mjs +7 -11
- package/dist/esm/modules/i18n/context/KnockI18nProvider.mjs.map +1 -1
- package/dist/esm/modules/i18n/hooks/useTranslations.mjs +4 -1
- package/dist/esm/modules/i18n/hooks/useTranslations.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/de.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/en.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/index.mjs +4 -1
- package/dist/esm/modules/i18n/languages/index.mjs.map +1 -1
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs +34 -46
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +14 -10
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +9 -22
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +17 -18
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs +3 -1
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -1
- package/dist/types/modules/core/context/KnockProvider.d.ts +2 -2
- package/dist/types/modules/core/context/KnockProvider.d.ts.map +1 -1
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts +2 -2
- package/dist/types/modules/feed/context/KnockFeedProvider.d.ts.map +1 -1
- package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts +3 -4
- package/dist/types/modules/i18n/context/KnockI18nProvider.d.ts.map +1 -1
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts +2 -2
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/modules/core/context/KnockProvider.tsx +2 -4
- package/src/modules/feed/context/KnockFeedProvider.tsx +4 -7
- package/src/modules/i18n/context/KnockI18nProvider.tsx +8 -8
- package/src/modules/slack/context/KnockSlackProvider.tsx +4 -6
- package/src/modules/slack/hooks/useSlackChannels.ts +1 -1
|
@@ -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 (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 userFeedId: string,\n options: FeedClientOptions = {},\n) {\n return [\n userFeedId,\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","intlFormatDistance","toSentenceCase","string","renderNodeOrFallback","node","fallback","feedProviderKey","userFeedId","f","
|
|
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 userFeedId: string,\n options: FeedClientOptions = {},\n) {\n return [\n userFeedId,\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","userFeedId","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,GACAjB,IAA6B,IAC7B;AACA,SAAO,CACLiB,GACAjB,EAAQkB,QACRlB,EAAQmB,QACRnB,EAAQoB,YACRpB,EAAQqB,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,40 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import d from "
|
|
4
|
-
import { useKnockClient as f } from "../../core/context/KnockProvider.mjs";
|
|
1
|
+
import * as o from "react";
|
|
2
|
+
import u from "zustand";
|
|
3
|
+
import { useKnockClient as d } from "../../core/context/KnockProvider.mjs";
|
|
5
4
|
import "@knocklabs/client";
|
|
6
5
|
import { feedProviderKey as a } from "../../core/utils.mjs";
|
|
7
6
|
import k from "../hooks/useNotifications.mjs";
|
|
8
|
-
const
|
|
9
|
-
null
|
|
10
|
-
), F = ({
|
|
7
|
+
const c = o.createContext(null), x = ({
|
|
11
8
|
feedId: e,
|
|
12
|
-
children:
|
|
13
|
-
defaultFeedOptions:
|
|
9
|
+
children: i,
|
|
10
|
+
defaultFeedOptions: t = {},
|
|
14
11
|
colorMode: s = "light"
|
|
15
12
|
}) => {
|
|
16
|
-
const
|
|
17
|
-
return /* @__PURE__ */
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
children: c
|
|
27
|
-
},
|
|
28
|
-
a(e, o)
|
|
29
|
-
);
|
|
30
|
-
}, P = () => {
|
|
31
|
-
const e = n.useContext(i);
|
|
13
|
+
const r = d(), n = k(r, e, t), m = u(n.store);
|
|
14
|
+
return /* @__PURE__ */ o.createElement(c.Provider, { key: a(e, t), value: {
|
|
15
|
+
knock: r,
|
|
16
|
+
feedClient: n,
|
|
17
|
+
useFeedStore: m,
|
|
18
|
+
colorMode: s
|
|
19
|
+
} }, i);
|
|
20
|
+
}, C = () => {
|
|
21
|
+
const e = o.useContext(c);
|
|
32
22
|
if (e === void 0)
|
|
33
23
|
throw new Error("useKnockFeed must be used within a KnockFeedProvider");
|
|
34
24
|
return e;
|
|
35
25
|
};
|
|
36
26
|
export {
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
x as KnockFeedProvider,
|
|
28
|
+
C as useKnockFeed
|
|
39
29
|
};
|
|
40
30
|
//# sourceMappingURL=KnockFeedProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockFeedProvider.mjs","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 create, { UseBoundStore } from \"zustand\";\n\nimport { useKnockClient } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\nimport { feedProviderKey } from \"../../core/utils\";\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 FeedStateContext = React.createContext<KnockFeedProviderState | null>(\n null,\n);\n\nexport interface KnockFeedProviderProps {\n // Feed props\n feedId: string;\n\n // Extra options\n
|
|
1
|
+
{"version":3,"file":"KnockFeedProvider.mjs","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 create, { UseBoundStore } from \"zustand\";\n\nimport { useKnockClient } from \"../../core\";\nimport { ColorMode } from \"../../core/constants\";\nimport { feedProviderKey } from \"../../core/utils\";\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 FeedStateContext = React.createContext<KnockFeedProviderState | null>(\n null,\n);\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 const knock = useKnockClient();\n const feedClient = useNotifications(knock, feedId, defaultFeedOptions);\n const useFeedStore = create<FeedStoreState>(feedClient.store);\n\n return (\n <FeedStateContext.Provider\n key={feedProviderKey(feedId, defaultFeedOptions)}\n value={{\n knock,\n feedClient,\n useFeedStore,\n colorMode,\n }}\n >\n {children}\n </FeedStateContext.Provider>\n );\n};\n\nexport const useKnockFeed = (): KnockFeedProviderState => {\n const context = React.useContext(FeedStateContext);\n if (context === undefined) {\n throw new Error(\"useKnockFeed must be used within a KnockFeedProvider\");\n }\n return context as KnockFeedProviderState;\n};\n"],"names":["FeedStateContext","React","createContext","KnockFeedProvider","feedId","children","defaultFeedOptions","colorMode","knock","useKnockClient","feedClient","useNotifications","useFeedStore","create","store","feedProviderKey","useKnockFeed","context","useContext","undefined","Error"],"mappings":";;;;;;AAqBA,MAAMA,IAAmBC,EAAMC,cAC7B,IACF,GAaaC,IAETA,CAAC;AAAA,EAAEC,QAAAA;AAAAA,EAAQC,UAAAA;AAAAA,EAAUC,oBAAAA,IAAqB,CAAC;AAAA,EAAGC,WAAAA,IAAY;AAAQ,MAAM;AAC1E,QAAMC,IAAQC,KACRC,IAAaC,EAAiBH,GAAOJ,GAAQE,CAAkB,GAC/DM,IAAeC,EAAuBH,EAAWI,KAAK;AAG1D,SAAA,gBAAAb,EAAA,cAACD,EAAiB,UAAjB,EACC,KAAKe,EAAgBX,GAAQE,CAAkB,GAC/C,OAAO;AAAA,IACLE,OAAAA;AAAAA,IACAE,YAAAA;AAAAA,IACAE,cAAAA;AAAAA,IACAL,WAAAA;AAAAA,EAAAA,KAGDF,CACH;AAEJ,GAEaW,IAAeA,MAA8B;AAClDC,QAAAA,IAAUhB,EAAMiB,WAAWlB,CAAgB;AACjD,MAAIiB,MAAYE;AACR,UAAA,IAAIC,MAAM,sDAAsD;AAEjEH,SAAAA;AACT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeedSettings.mjs","sources":["../../../../../src/modules/feed/hooks/useFeedSettings.ts"],"sourcesContent":["import { Feed } from \"@knocklabs/client\";\nimport { useEffect, useState } from \"react\";\n\nexport type FeedSettings = {\n features: {\n branding_required: boolean;\n };\n};\n\nfunction useFeedSettings(feedClient: Feed): {\n settings: FeedSettings | null;\n loading: boolean;\n} {\n const [settings, setSettings] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n\n // TODO: consider moving this into the feed client and into the feed store state when\n // we're using this in other areas of the feed\n useEffect(() => {\n async function getSettings() {\n const knock = feedClient.knock;\n const apiClient = knock.client();\n const feedSettingsPath = `/v1/users/${knock.userId}/feeds/${feedClient.feedId}/settings`;\n setIsLoading(true);\n\n const response = await apiClient.makeRequest({\n method: \"GET\",\n url: feedSettingsPath,\n });\n\n if (!response.error) {\n setSettings(response.body);\n }\n\n setIsLoading(false);\n }\n\n getSettings();\n }, []);\n\n return { settings, loading: isLoading };\n}\n\nexport default useFeedSettings;\n"],"names":["useFeedSettings","feedClient","settings","setSettings","useState","isLoading","setIsLoading","useEffect","getSettings","knock","apiClient","feedSettingsPath","response"],"mappings":";AASA,SAASA,EAAgBC,GAGvB;AACA,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,IAAI,GACvC,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK;
|
|
1
|
+
{"version":3,"file":"useFeedSettings.mjs","sources":["../../../../../src/modules/feed/hooks/useFeedSettings.ts"],"sourcesContent":["import { Feed } from \"@knocklabs/client\";\nimport { useEffect, useState } from \"react\";\n\nexport type FeedSettings = {\n features: {\n branding_required: boolean;\n };\n};\n\nfunction useFeedSettings(feedClient: Feed): {\n settings: FeedSettings | null;\n loading: boolean;\n} {\n const [settings, setSettings] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n\n // TODO: consider moving this into the feed client and into the feed store state when\n // we're using this in other areas of the feed\n useEffect(() => {\n async function getSettings() {\n const knock = feedClient.knock;\n const apiClient = knock.client();\n const feedSettingsPath = `/v1/users/${knock.userId}/feeds/${feedClient.feedId}/settings`;\n setIsLoading(true);\n\n const response = await apiClient.makeRequest({\n method: \"GET\",\n url: feedSettingsPath,\n });\n\n if (!response.error) {\n setSettings(response.body);\n }\n\n setIsLoading(false);\n }\n\n getSettings();\n }, []);\n\n return { settings, loading: isLoading };\n}\n\nexport default useFeedSettings;\n"],"names":["useFeedSettings","feedClient","settings","setSettings","useState","isLoading","setIsLoading","useEffect","getSettings","knock","apiClient","client","feedSettingsPath","userId","feedId","response","makeRequest","method","url","error","body","loading"],"mappings":";AASA,SAASA,EAAgBC,GAGvB;AACA,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,IAAI,GACvC,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK;AAIhDG,SAAAA,EAAU,MAAM;AACd,mBAAeC,IAAc;AAC3B,YAAMC,IAAQR,EAAWQ,OACnBC,IAAYD,EAAME,UAClBC,IAAoB,aAAYH,EAAMI,MAAO,UAASZ,EAAWa,MAAO;AAC9ER,MAAAA,EAAa,EAAI;AAEXS,YAAAA,IAAW,MAAML,EAAUM,YAAY;AAAA,QAC3CC,QAAQ;AAAA,QACRC,KAAKN;AAAAA,MAAAA,CACN;AAEG,MAACG,EAASI,SACZhB,EAAYY,EAASK,IAAI,GAG3Bd,EAAa,EAAK;AAAA,IACpB;AAEY,IAAAE;EACd,GAAG,CAAE,CAAA,GAEE;AAAA,IAAEN,UAAAA;AAAAA,IAAUmB,SAAShB;AAAAA,EAAAA;AAC9B;"}
|
|
@@ -5,14 +5,7 @@ function a(i, n, e = {}) {
|
|
|
5
5
|
t.current && t.current.dispose();
|
|
6
6
|
const r = i.feeds.initialize(n, e);
|
|
7
7
|
return r.listenForUpdates(), t.current = r, r;
|
|
8
|
-
}, [
|
|
9
|
-
i,
|
|
10
|
-
n,
|
|
11
|
-
e.source,
|
|
12
|
-
e.tenant,
|
|
13
|
-
e.has_tenant,
|
|
14
|
-
e.archived
|
|
15
|
-
]);
|
|
8
|
+
}, [i, n, e.source, e.tenant, e.has_tenant, e.archived]);
|
|
16
9
|
}
|
|
17
10
|
export {
|
|
18
11
|
a as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNotifications.mjs","sources":["../../../../../src/modules/feed/hooks/useNotifications.ts"],"sourcesContent":["import Knock, { Feed, FeedClientOptions } from \"@knocklabs/client\";\nimport { useMemo, useRef } from \"react\";\n\nfunction useNotifications(\n knock: Knock,\n feedChannelId: string,\n options: FeedClientOptions = {},\n) {\n const feedClientRef = useRef<Feed | null>();\n\n return useMemo(() => {\n if (feedClientRef.current) {\n feedClientRef.current.dispose();\n }\n\n const feedClient = knock.feeds.initialize(feedChannelId, options);\n\n feedClient.listenForUpdates();\n feedClientRef.current = feedClient;\n\n return feedClient;\n }, [\n knock,\n feedChannelId,\n options.source,\n options.tenant,\n options.has_tenant,\n options.archived,\n ]);\n}\n\nexport default useNotifications;\n"],"names":["useNotifications","knock","feedChannelId","options","feedClientRef","useRef","useMemo","feedClient"],"mappings":";AAGA,SAASA,EACPC,GACAC,GACAC,IAA6B,CAAA,GAC7B;AACA,QAAMC,IAAgBC;AAEtB,SAAOC,EAAQ,MAAM;AACnB,IAAIF,
|
|
1
|
+
{"version":3,"file":"useNotifications.mjs","sources":["../../../../../src/modules/feed/hooks/useNotifications.ts"],"sourcesContent":["import Knock, { Feed, FeedClientOptions } from \"@knocklabs/client\";\nimport { useMemo, useRef } from \"react\";\n\nfunction useNotifications(\n knock: Knock,\n feedChannelId: string,\n options: FeedClientOptions = {},\n) {\n const feedClientRef = useRef<Feed | null>();\n\n return useMemo(() => {\n if (feedClientRef.current) {\n feedClientRef.current.dispose();\n }\n\n const feedClient = knock.feeds.initialize(feedChannelId, options);\n\n feedClient.listenForUpdates();\n feedClientRef.current = feedClient;\n\n return feedClient;\n }, [\n knock,\n feedChannelId,\n options.source,\n options.tenant,\n options.has_tenant,\n options.archived,\n ]);\n}\n\nexport default useNotifications;\n"],"names":["useNotifications","knock","feedChannelId","options","feedClientRef","useRef","useMemo","current","dispose","feedClient","feeds","initialize","listenForUpdates","source","tenant","has_tenant","archived"],"mappings":";AAGA,SAASA,EACPC,GACAC,GACAC,IAA6B,CAAA,GAC7B;AACA,QAAMC,IAAgBC;AAEtB,SAAOC,EAAQ,MAAM;AACnB,IAAIF,EAAcG,WAChBH,EAAcG,QAAQC;AAGxB,UAAMC,IAAaR,EAAMS,MAAMC,WAAWT,GAAeC,CAAO;AAEhEM,WAAAA,EAAWG,iBAAiB,GAC5BR,EAAcG,UAAUE,GAEjBA;AAAAA,EACN,GAAA,CACDR,GACAC,GACAC,EAAQU,QACRV,EAAQW,QACRX,EAAQY,YACRZ,EAAQa,QAAQ,CACjB;AACH;"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function f({
|
|
6
|
-
i18n: e = o.en,
|
|
1
|
+
import e from "react";
|
|
2
|
+
import { locales as t } from "../languages/index.mjs";
|
|
3
|
+
const n = e.createContext(t.en), l = ({
|
|
4
|
+
i18n: o = t.en,
|
|
7
5
|
...r
|
|
8
|
-
}) {
|
|
9
|
-
return /* @__PURE__ */ t(c.Provider, { ...r, value: e });
|
|
10
|
-
}
|
|
6
|
+
}) => /* @__PURE__ */ e.createElement(n.Provider, { ...r, value: o });
|
|
11
7
|
export {
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
n as I18nContext,
|
|
9
|
+
l as KnockI18nProvider
|
|
14
10
|
};
|
|
15
11
|
//# sourceMappingURL=KnockI18nProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockI18nProvider.mjs","sources":["../../../../../src/modules/i18n/context/KnockI18nProvider.tsx"],"sourcesContent":["import React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"KnockI18nProvider.mjs","sources":["../../../../../src/modules/i18n/context/KnockI18nProvider.tsx"],"sourcesContent":["import React from \"react\";\nimport { FunctionComponent, PropsWithChildren } from \"react\";\n\nimport { I18nContent, locales } from \"../languages\";\n\nexport const I18nContext = React.createContext<I18nContent>(locales.en);\n\nexport interface KnockI18nProviderProps {\n i18n?: I18nContent;\n}\n\nexport const KnockI18nProvider: FunctionComponent<\n PropsWithChildren<KnockI18nProviderProps>\n> = ({ i18n = locales.en, ...props }) => {\n return <I18nContext.Provider {...props} value={i18n} />;\n};\n"],"names":["I18nContext","React","createContext","locales","en","KnockI18nProvider","i18n","props"],"mappings":";;AAKO,MAAMA,IAAcC,EAAMC,cAA2BC,EAAQC,EAAE,GAMzDC,IAETA,CAAC;AAAA,EAAEC,MAAAA,IAAOH,EAAQC;AAAAA,EAAI,GAAGG;AAAM,sCACzBP,EAAY,UAAZ,EAAyBO,GAAAA,GAAO,OAAOD,EAAQ,CAAA;"}
|
|
@@ -2,7 +2,10 @@ import { useContext as r } from "react";
|
|
|
2
2
|
import { locales as s } from "../languages/index.mjs";
|
|
3
3
|
import { I18nContext as e } from "../context/KnockI18nProvider.mjs";
|
|
4
4
|
function m() {
|
|
5
|
-
const {
|
|
5
|
+
const {
|
|
6
|
+
translations: o,
|
|
7
|
+
locale: n
|
|
8
|
+
} = r(e);
|
|
6
9
|
return {
|
|
7
10
|
locale: n,
|
|
8
11
|
t: (t) => o[t] || s.en.translations[t]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTranslations.mjs","sources":["../../../../../src/modules/i18n/hooks/useTranslations.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { I18nContent, locales } from \"../languages\";\nimport { I18nContext } from \"../context/KnockI18nProvider\";\n\nexport function useTranslations() {\n const { translations, locale } = useContext<I18nContent>(I18nContext);\n\n return {\n locale,\n t: (key: keyof typeof translations) => {\n // We always use english as the default translation when a key doesn't exist\n return translations[key] || locales.en.translations[key];\n },\n };\n}\n"],"names":["useTranslations","translations","locale","useContext","I18nContext","key","locales"],"mappings":";;;AAIO,SAASA,IAAkB;
|
|
1
|
+
{"version":3,"file":"useTranslations.mjs","sources":["../../../../../src/modules/i18n/hooks/useTranslations.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { I18nContent, locales } from \"../languages\";\nimport { I18nContext } from \"../context/KnockI18nProvider\";\n\nexport function useTranslations() {\n const { translations, locale } = useContext<I18nContent>(I18nContext);\n\n return {\n locale,\n t: (key: keyof typeof translations) => {\n // We always use english as the default translation when a key doesn't exist\n return translations[key] || locales.en.translations[key];\n },\n };\n}\n"],"names":["useTranslations","translations","locale","useContext","I18nContext","t","key","locales","en"],"mappings":";;;AAIO,SAASA,IAAkB;AAC1B,QAAA;AAAA,IAAEC,cAAAA;AAAAA,IAAcC,QAAAA;AAAAA,EAAAA,IAAWC,EAAwBC,CAAW;AAE7D,SAAA;AAAA,IACLF,QAAAA;AAAAA,IACAG,GAAGA,CAACC,MAEKL,EAAaK,CAAG,KAAKC,EAAQC,GAAGP,aAAaK,CAAG;AAAA,EACzD;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de.mjs","sources":["../../../../../src/modules/i18n/languages/de.ts"],"sourcesContent":["import { I18nContent } from \".\";\n\nconst de: I18nContent = {\n translations: {\n archiveNotification: \"Benachrichtigung archivieren\",\n markAllAsRead: \"Alle als gelesen markieren\",\n notifications: \"Benachrichtigungen\",\n emptyFeedTitle: \"Noch keine Benachrichtigungen\",\n emptyFeedBody:\n \"Wir werden dich benachrichtigen, sobald wir etwas Neues für dich haben.\",\n all: \"Alle\",\n unread: \"Ungelesen\",\n read: \"Gelesen\",\n unseen: \"Ungesehen\",\n slackConnectChannel: \"Kanal verbinden\",\n slackChannelId: \"Slack Kanal ID\",\n slackConnecting: \"Verbinden mit Slack...\",\n slackDisconnecting: \"Trennen der Verbindung...\",\n slackConnect: \"Mit Slack verbinden\",\n slackConnected: \"Verbunden\",\n slackConnectContainerDescription: \"Verbinden, um Benachrichtigungen in Ihrem Slack-Arbeitsbereich zu erhalten.\",\n slackSearchbarDisconnected: \"Slack ist nicht verbunden.\",\n slackSearchbarMultipleChannels: \"Mehrere Kanäle verbunden\",\n slackSearchbarNoChannelsConnected: \"Suchkanäle\",\n slackSearchbarNoChannelsFound: \"Keine schlaffen Kanäle.\",\n slackSearchbarChannelsError: \"Fehler beim Abrufen von Kanälen.\",\n slackSearchChannels: \"Suchkanäle\",\n slackConnectionErrorExists: \"Versuchen Sie, sich erneut mit Slack zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.\",\n slackConnectionErrorOccurred: \"Es ist ein Fehler beim Verbinden mit Slack aufgetreten. Versuchen Sie, sich erneut zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.\",\n slackChannelAlreadyConnected: \"Fehler: bereits verbunden\",\n slackError: \"Fehler\",\n slackDisconnect: \"Trennen Sie die Verbindung.\",\n slackChannelSetError: \"Fehlereinstellung Kanal.\",\n slackAccessTokenNotSet: \"Zugriffstoken nicht gesetzt.\",\n slackReconnect: \"Neu verbinden\",\n },\n locale: \"de\",\n};\n\nexport default de;\n"],"names":["de"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,
|
|
1
|
+
{"version":3,"file":"de.mjs","sources":["../../../../../src/modules/i18n/languages/de.ts"],"sourcesContent":["import { I18nContent } from \".\";\n\nconst de: I18nContent = {\n translations: {\n archiveNotification: \"Benachrichtigung archivieren\",\n markAllAsRead: \"Alle als gelesen markieren\",\n notifications: \"Benachrichtigungen\",\n emptyFeedTitle: \"Noch keine Benachrichtigungen\",\n emptyFeedBody:\n \"Wir werden dich benachrichtigen, sobald wir etwas Neues für dich haben.\",\n all: \"Alle\",\n unread: \"Ungelesen\",\n read: \"Gelesen\",\n unseen: \"Ungesehen\",\n slackConnectChannel: \"Kanal verbinden\",\n slackChannelId: \"Slack Kanal ID\",\n slackConnecting: \"Verbinden mit Slack...\",\n slackDisconnecting: \"Trennen der Verbindung...\",\n slackConnect: \"Mit Slack verbinden\",\n slackConnected: \"Verbunden\",\n slackConnectContainerDescription: \"Verbinden, um Benachrichtigungen in Ihrem Slack-Arbeitsbereich zu erhalten.\",\n slackSearchbarDisconnected: \"Slack ist nicht verbunden.\",\n slackSearchbarMultipleChannels: \"Mehrere Kanäle verbunden\",\n slackSearchbarNoChannelsConnected: \"Suchkanäle\",\n slackSearchbarNoChannelsFound: \"Keine schlaffen Kanäle.\",\n slackSearchbarChannelsError: \"Fehler beim Abrufen von Kanälen.\",\n slackSearchChannels: \"Suchkanäle\",\n slackConnectionErrorExists: \"Versuchen Sie, sich erneut mit Slack zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.\",\n slackConnectionErrorOccurred: \"Es ist ein Fehler beim Verbinden mit Slack aufgetreten. Versuchen Sie, sich erneut zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.\",\n slackChannelAlreadyConnected: \"Fehler: bereits verbunden\",\n slackError: \"Fehler\",\n slackDisconnect: \"Trennen Sie die Verbindung.\",\n slackChannelSetError: \"Fehlereinstellung Kanal.\",\n slackAccessTokenNotSet: \"Zugriffstoken nicht gesetzt.\",\n slackReconnect: \"Neu verbinden\",\n },\n locale: \"de\",\n};\n\nexport default de;\n"],"names":["de","translations","archiveNotification","markAllAsRead","notifications","emptyFeedTitle","emptyFeedBody","all","unread","read","unseen","slackConnectChannel","slackChannelId","slackConnecting","slackDisconnecting","slackConnect","slackConnected","slackConnectContainerDescription","slackSearchbarDisconnected","slackSearchbarMultipleChannels","slackSearchbarNoChannelsConnected","slackSearchbarNoChannelsFound","slackSearchbarChannelsError","slackSearchChannels","slackConnectionErrorExists","slackConnectionErrorOccurred","slackChannelAlreadyConnected","slackError","slackDisconnect","slackChannelSetError","slackAccessTokenNotSet","slackReconnect","locale"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtBC,cAAc;AAAA,IACZC,qBAAqB;AAAA,IACrBC,eAAe;AAAA,IACfC,eAAe;AAAA,IACfC,gBAAgB;AAAA,IAChBC,eACE;AAAA,IACFC,KAAK;AAAA,IACLC,QAAQ;AAAA,IACRC,MAAM;AAAA,IACNC,QAAQ;AAAA,IACRC,qBAAqB;AAAA,IACrBC,gBAAgB;AAAA,IAChBC,iBAAiB;AAAA,IACjBC,oBAAoB;AAAA,IACpBC,cAAc;AAAA,IACdC,gBAAgB;AAAA,IAChBC,kCAAkC;AAAA,IAClCC,4BAA4B;AAAA,IAC5BC,gCAAiC;AAAA,IACjCC,mCAAmC;AAAA,IACnCC,+BAA+B;AAAA,IAC/BC,6BAA6B;AAAA,IAC7BC,qBAAqB;AAAA,IACrBC,4BAA4B;AAAA,IAC5BC,8BAA8B;AAAA,IAC9BC,8BAA8B;AAAA,IAC9BC,YAAY;AAAA,IACZC,iBAAiB;AAAA,IACjBC,sBAAsB;AAAA,IACtBC,wBAAwB;AAAA,IACxBC,gBAAgB;AAAA,EAClB;AAAA,EACAC,QAAQ;AACV;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.mjs","sources":["../../../../../src/modules/i18n/languages/en.ts"],"sourcesContent":["import { I18nContent } from \".\";\n\nconst en: I18nContent = {\n translations: {\n archiveNotification: \"Archive this notification\",\n markAllAsRead: \"Mark all as read\",\n notifications: \"Notifications\",\n emptyFeedTitle: \"No notifications yet\",\n emptyFeedBody: \"We'll let you know when we've got something new for you.\",\n all: \"All\",\n unread: \"Unread\",\n read: \"Read\",\n unseen: \"Unseen\",\n slackConnectChannel: \"Connect channel\",\n slackChannelId: \"Slack channel ID\",\n slackConnecting: \"Connecting to Slack...\",\n slackDisconnecting: \"Disconnecting...\",\n slackConnect: \"Connect to Slack\",\n slackConnected: \"Connected\",\n slackConnectContainerDescription: \"Connect to get notifications in your Slack workspace.\",\n slackSearchbarDisconnected: \"Slack is not connected.\",\n slackSearchbarMultipleChannels: \"Multiple channels connected\",\n slackSearchbarNoChannelsConnected: \"Search channels\",\n slackSearchbarNoChannelsFound: \"No slack channels.\",\n slackSearchbarChannelsError: \"Error fetching channels.\",\n slackSearchChannels: \"Search channels\",\n slackConnectionErrorExists: \"Try reconnecting to Slack to find and select channels from your workspace.\",\n slackConnectionErrorOccurred: \"There was an error connecting to Slack. Try reconnecting to find and select channels from your workspace.\",\n slackChannelAlreadyConnected: \"Error: already connected\",\n slackError: \"Error\",\n slackDisconnect: \"Disconnect\",\n slackChannelSetError: \"Error setting channel.\",\n slackAccessTokenNotSet: \"Access token not set.\",\n slackReconnect: \"Reconnect\",\n },\n locale: \"en\",\n};\n\nexport default en;\n"],"names":["en"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,
|
|
1
|
+
{"version":3,"file":"en.mjs","sources":["../../../../../src/modules/i18n/languages/en.ts"],"sourcesContent":["import { I18nContent } from \".\";\n\nconst en: I18nContent = {\n translations: {\n archiveNotification: \"Archive this notification\",\n markAllAsRead: \"Mark all as read\",\n notifications: \"Notifications\",\n emptyFeedTitle: \"No notifications yet\",\n emptyFeedBody: \"We'll let you know when we've got something new for you.\",\n all: \"All\",\n unread: \"Unread\",\n read: \"Read\",\n unseen: \"Unseen\",\n slackConnectChannel: \"Connect channel\",\n slackChannelId: \"Slack channel ID\",\n slackConnecting: \"Connecting to Slack...\",\n slackDisconnecting: \"Disconnecting...\",\n slackConnect: \"Connect to Slack\",\n slackConnected: \"Connected\",\n slackConnectContainerDescription: \"Connect to get notifications in your Slack workspace.\",\n slackSearchbarDisconnected: \"Slack is not connected.\",\n slackSearchbarMultipleChannels: \"Multiple channels connected\",\n slackSearchbarNoChannelsConnected: \"Search channels\",\n slackSearchbarNoChannelsFound: \"No slack channels.\",\n slackSearchbarChannelsError: \"Error fetching channels.\",\n slackSearchChannels: \"Search channels\",\n slackConnectionErrorExists: \"Try reconnecting to Slack to find and select channels from your workspace.\",\n slackConnectionErrorOccurred: \"There was an error connecting to Slack. Try reconnecting to find and select channels from your workspace.\",\n slackChannelAlreadyConnected: \"Error: already connected\",\n slackError: \"Error\",\n slackDisconnect: \"Disconnect\",\n slackChannelSetError: \"Error setting channel.\",\n slackAccessTokenNotSet: \"Access token not set.\",\n slackReconnect: \"Reconnect\",\n },\n locale: \"en\",\n};\n\nexport default en;\n"],"names":["en","translations","archiveNotification","markAllAsRead","notifications","emptyFeedTitle","emptyFeedBody","all","unread","read","unseen","slackConnectChannel","slackChannelId","slackConnecting","slackDisconnecting","slackConnect","slackConnected","slackConnectContainerDescription","slackSearchbarDisconnected","slackSearchbarMultipleChannels","slackSearchbarNoChannelsConnected","slackSearchbarNoChannelsFound","slackSearchbarChannelsError","slackSearchChannels","slackConnectionErrorExists","slackConnectionErrorOccurred","slackChannelAlreadyConnected","slackError","slackDisconnect","slackChannelSetError","slackAccessTokenNotSet","slackReconnect","locale"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtBC,cAAc;AAAA,IACZC,qBAAqB;AAAA,IACrBC,eAAe;AAAA,IACfC,eAAe;AAAA,IACfC,gBAAgB;AAAA,IAChBC,eAAe;AAAA,IACfC,KAAK;AAAA,IACLC,QAAQ;AAAA,IACRC,MAAM;AAAA,IACNC,QAAQ;AAAA,IACRC,qBAAqB;AAAA,IACrBC,gBAAgB;AAAA,IAChBC,iBAAiB;AAAA,IACjBC,oBAAoB;AAAA,IACpBC,cAAc;AAAA,IACdC,gBAAgB;AAAA,IAChBC,kCAAkC;AAAA,IAClCC,4BAA4B;AAAA,IAC5BC,gCAAiC;AAAA,IACjCC,mCAAmC;AAAA,IACnCC,+BAA+B;AAAA,IAC/BC,6BAA6B;AAAA,IAC7BC,qBAAqB;AAAA,IACrBC,4BAA4B;AAAA,IAC5BC,8BAA8B;AAAA,IAC9BC,8BAA8B;AAAA,IAC9BC,YAAY;AAAA,IACZC,iBAAiB;AAAA,IACjBC,sBAAsB;AAAA,IACtBC,wBAAwB;AAAA,IACxBC,gBAAgB;AAAA,EAClB;AAAA,EACAC,QAAQ;AACV;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../src/modules/i18n/languages/index.ts"],"sourcesContent":["import de from \"./de\";\nimport en from \"./en\";\n\nexport interface Translations {\n readonly emptyFeedTitle: string;\n readonly emptyFeedBody: string;\n readonly notifications: string;\n readonly poweredBy: string;\n readonly markAllAsRead: string;\n readonly archiveNotification: string;\n readonly all: string;\n readonly unread: string;\n readonly read: string;\n readonly unseen: string;\n readonly slackConnectChannel: string;\n readonly slackChannelId: string;\n readonly slackConnecting: string;\n readonly slackDisconnecting: string;\n readonly slackConnect: string;\n readonly slackConnected: string;\n readonly slackConnectContainerDescription: string;\n readonly slackSearchbarDisconnected: string;\n readonly slackSearchbarMultipleChannels: string;\n readonly slackSearchbarNoChannelsConnected: string;\n readonly slackSearchbarNoChannelsFound: string;\n readonly slackSearchbarChannelsError: string;\n readonly slackSearchChannels: string;\n readonly slackConnectionErrorOccurred: string;\n readonly slackConnectionErrorExists: string;\n readonly slackChannelAlreadyConnected: string;\n readonly slackError: string;\n readonly slackDisconnect: string;\n readonly slackChannelSetError: string;\n readonly slackAccessTokenNotSet: string;\n readonly slackReconnect: string;\n}\n\nexport interface I18nContent {\n readonly translations: Partial<Translations>;\n readonly locale: string;\n}\n\nexport const locales = { en, de };\n"],"names":["locales","en","de"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../src/modules/i18n/languages/index.ts"],"sourcesContent":["import de from \"./de\";\nimport en from \"./en\";\n\nexport interface Translations {\n readonly emptyFeedTitle: string;\n readonly emptyFeedBody: string;\n readonly notifications: string;\n readonly poweredBy: string;\n readonly markAllAsRead: string;\n readonly archiveNotification: string;\n readonly all: string;\n readonly unread: string;\n readonly read: string;\n readonly unseen: string;\n readonly slackConnectChannel: string;\n readonly slackChannelId: string;\n readonly slackConnecting: string;\n readonly slackDisconnecting: string;\n readonly slackConnect: string;\n readonly slackConnected: string;\n readonly slackConnectContainerDescription: string;\n readonly slackSearchbarDisconnected: string;\n readonly slackSearchbarMultipleChannels: string;\n readonly slackSearchbarNoChannelsConnected: string;\n readonly slackSearchbarNoChannelsFound: string;\n readonly slackSearchbarChannelsError: string;\n readonly slackSearchChannels: string;\n readonly slackConnectionErrorOccurred: string;\n readonly slackConnectionErrorExists: string;\n readonly slackChannelAlreadyConnected: string;\n readonly slackError: string;\n readonly slackDisconnect: string;\n readonly slackChannelSetError: string;\n readonly slackAccessTokenNotSet: string;\n readonly slackReconnect: string;\n}\n\nexport interface I18nContent {\n readonly translations: Partial<Translations>;\n readonly locale: string;\n}\n\nexport const locales = { en, de };\n"],"names":["locales","en","de"],"mappings":";;AA0CO,MAAMA,IAAU;AAAA,EAAEC,IAAAA;AAAAA,EAAIC,IAAAA;AAAG;"}
|
|
@@ -1,58 +1,46 @@
|
|
|
1
|
-
import { jsx as p } from "react/jsx-runtime";
|
|
2
1
|
import k from "../hooks/useSlackConnectionStatus.mjs";
|
|
3
|
-
import * as
|
|
2
|
+
import * as e from "react";
|
|
4
3
|
import "swr/infinite";
|
|
5
|
-
import { useKnockClient as
|
|
4
|
+
import { useKnockClient as p } from "../../core/context/KnockProvider.mjs";
|
|
6
5
|
import "@knocklabs/client";
|
|
7
|
-
import { slackProviderKey as
|
|
6
|
+
import { slackProviderKey as S } from "../../core/utils.mjs";
|
|
8
7
|
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
9
|
-
const
|
|
10
|
-
knockSlackChannelId:
|
|
11
|
-
tenant:
|
|
12
|
-
children:
|
|
8
|
+
const c = e.createContext(null), x = ({
|
|
9
|
+
knockSlackChannelId: t,
|
|
10
|
+
tenant: o,
|
|
11
|
+
children: i
|
|
13
12
|
}) => {
|
|
14
|
-
const s =
|
|
13
|
+
const s = p(), {
|
|
15
14
|
connectionStatus: r,
|
|
16
15
|
setConnectionStatus: a,
|
|
17
|
-
errorLabel:
|
|
18
|
-
setErrorLabel:
|
|
16
|
+
errorLabel: n,
|
|
17
|
+
setErrorLabel: l,
|
|
19
18
|
actionLabel: u,
|
|
20
|
-
setActionLabel:
|
|
21
|
-
} = k(s,
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
})
|
|
43
|
-
);
|
|
44
|
-
}, w = () => {
|
|
45
|
-
const o = i.useContext(
|
|
46
|
-
n
|
|
47
|
-
);
|
|
48
|
-
if (o === void 0)
|
|
49
|
-
throw new Error(
|
|
50
|
-
"useKnockSlackClient must be used within a KnockSlackProvider"
|
|
51
|
-
);
|
|
52
|
-
return o;
|
|
19
|
+
setActionLabel: m
|
|
20
|
+
} = k(s, t, o);
|
|
21
|
+
return /* @__PURE__ */ e.createElement(c.Provider, { key: S({
|
|
22
|
+
knockSlackChannelId: t,
|
|
23
|
+
tenant: o,
|
|
24
|
+
connectionStatus: r,
|
|
25
|
+
errorLabel: n
|
|
26
|
+
}), value: {
|
|
27
|
+
connectionStatus: r,
|
|
28
|
+
setConnectionStatus: a,
|
|
29
|
+
errorLabel: n,
|
|
30
|
+
setErrorLabel: l,
|
|
31
|
+
actionLabel: u,
|
|
32
|
+
setActionLabel: m,
|
|
33
|
+
knockSlackChannelId: t,
|
|
34
|
+
tenant: o
|
|
35
|
+
} }, i);
|
|
36
|
+
}, P = () => {
|
|
37
|
+
const t = e.useContext(c);
|
|
38
|
+
if (t === void 0)
|
|
39
|
+
throw new Error("useKnockSlackClient must be used within a KnockSlackProvider");
|
|
40
|
+
return t;
|
|
53
41
|
};
|
|
54
42
|
export {
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
x as KnockSlackProvider,
|
|
44
|
+
P as useKnockSlackClient
|
|
57
45
|
};
|
|
58
46
|
//# sourceMappingURL=KnockSlackProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnockSlackProvider.mjs","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"sourcesContent":["import { useSlackConnectionStatus } from \"..\";\nimport * as React from \"react\";\n\nimport { slackProviderKey } from \"../../core\";\nimport { useKnockClient } from \"../../core\";\nimport { ConnectionStatus } from \"../hooks/useSlackConnectionStatus\";\n\nexport interface KnockSlackProviderState {\n knockSlackChannelId: string;\n tenant: string;\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (connectionStatus: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (label: string) => void;\n actionLabel: string | null;\n setActionLabel: (label: string | null) => void;\n}\n\nconst SlackProviderStateContext =\n React.createContext<KnockSlackProviderState | null>(null);\n\nexport interface KnockSlackProviderProps {\n knockSlackChannelId: string;\n tenant: string;\n
|
|
1
|
+
{"version":3,"file":"KnockSlackProvider.mjs","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"sourcesContent":["import { useSlackConnectionStatus } from \"..\";\nimport * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\n\nimport { slackProviderKey } from \"../../core\";\nimport { useKnockClient } from \"../../core\";\nimport { ConnectionStatus } from \"../hooks/useSlackConnectionStatus\";\n\nexport interface KnockSlackProviderState {\n knockSlackChannelId: string;\n tenant: string;\n connectionStatus: ConnectionStatus;\n setConnectionStatus: (connectionStatus: ConnectionStatus) => void;\n errorLabel: string | null;\n setErrorLabel: (label: string) => void;\n actionLabel: string | null;\n setActionLabel: (label: string | null) => void;\n}\n\nconst SlackProviderStateContext =\n React.createContext<KnockSlackProviderState | null>(null);\n\nexport interface KnockSlackProviderProps {\n knockSlackChannelId: string;\n tenant: string;\n}\n\nexport const KnockSlackProvider: React.FC<\n PropsWithChildren<KnockSlackProviderProps>\n> = ({ knockSlackChannelId, tenant, children }) => {\n const knock = useKnockClient();\n\n const {\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n } = useSlackConnectionStatus(knock, knockSlackChannelId, tenant);\n\n return (\n <SlackProviderStateContext.Provider\n key={slackProviderKey({\n knockSlackChannelId,\n tenant,\n connectionStatus,\n errorLabel,\n })}\n value={{\n connectionStatus,\n setConnectionStatus,\n errorLabel,\n setErrorLabel,\n actionLabel,\n setActionLabel,\n knockSlackChannelId,\n tenant,\n }}\n >\n {children}\n </SlackProviderStateContext.Provider>\n );\n};\n\nexport const useKnockSlackClient = (): KnockSlackProviderState => {\n const context = React.useContext(\n SlackProviderStateContext,\n ) as KnockSlackProviderState;\n if (context === undefined) {\n throw new Error(\n \"useKnockSlackClient must be used within a KnockSlackProvider\",\n );\n }\n return context as KnockSlackProviderState;\n};\n"],"names":["SlackProviderStateContext","React","createContext","KnockSlackProvider","knockSlackChannelId","tenant","children","knock","useKnockClient","connectionStatus","setConnectionStatus","errorLabel","setErrorLabel","actionLabel","setActionLabel","useSlackConnectionStatus","slackProviderKey","useKnockSlackClient","context","useContext","undefined","Error"],"mappings":";;;;;;;AAmBA,MAAMA,IACJC,EAAMC,cAA8C,IAAI,GAO7CC,IAETA,CAAC;AAAA,EAAEC,qBAAAA;AAAAA,EAAqBC,QAAAA;AAAAA,EAAQC,UAAAA;AAAS,MAAM;AACjD,QAAMC,IAAQC,KAER;AAAA,IACJC,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,EACEC,IAAAA,EAAyBR,GAAOH,GAAqBC,CAAM;AAE/D,SACG,gBAAAJ,EAAA,cAAAD,EAA0B,UAA1B,EACC,KAAKgB,EAAiB;AAAA,IACpBZ,qBAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACAI,kBAAAA;AAAAA,IACAE,YAAAA;AAAAA,EACD,CAAA,GACD,OAAO;AAAA,IACLF,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,YAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAV,qBAAAA;AAAAA,IACAC,QAAAA;AAAAA,EAAAA,KAGDC,CACH;AAEJ,GAEaW,IAAsBA,MAA+B;AAC1DC,QAAAA,IAAUjB,EAAMkB,WACpBnB,CACF;AACA,MAAIkB,MAAYE;AACR,UAAA,IAAIC,MACR,8DACF;AAEKH,SAAAA;AACT;"}
|
|
@@ -7,9 +7,17 @@ import { useKnockClient as j } from "../../core/context/KnockProvider.mjs";
|
|
|
7
7
|
import "@knocklabs/client";
|
|
8
8
|
import "date-fns";
|
|
9
9
|
function T({
|
|
10
|
-
slackChannelsRecipientObject: {
|
|
10
|
+
slackChannelsRecipientObject: {
|
|
11
|
+
objectId: e,
|
|
12
|
+
collection: a
|
|
13
|
+
}
|
|
11
14
|
}) {
|
|
12
|
-
const {
|
|
15
|
+
const {
|
|
16
|
+
t: g
|
|
17
|
+
} = I(), o = j(), {
|
|
18
|
+
connectionStatus: h,
|
|
19
|
+
knockSlackChannelId: c
|
|
20
|
+
} = b(), [s, l] = t(null), [i, d] = t(null), [C, r] = t(!1), [S, f] = t(!1), u = y(() => {
|
|
13
21
|
r(!0), (async () => await o.objects.getChannelData({
|
|
14
22
|
collection: a,
|
|
15
23
|
objectId: e,
|
|
@@ -23,13 +31,7 @@ function T({
|
|
|
23
31
|
}, [a, o.objects, c, e]);
|
|
24
32
|
return E(() => {
|
|
25
33
|
h === "connected" && !s && !i && !C && u();
|
|
26
|
-
}, [
|
|
27
|
-
s,
|
|
28
|
-
u,
|
|
29
|
-
C,
|
|
30
|
-
i,
|
|
31
|
-
h
|
|
32
|
-
]), {
|
|
34
|
+
}, [s, u, C, i, h]), {
|
|
33
35
|
data: s,
|
|
34
36
|
updateConnectedChannels: async (p) => {
|
|
35
37
|
f(!0);
|
|
@@ -38,7 +40,9 @@ function T({
|
|
|
38
40
|
objectId: e,
|
|
39
41
|
collection: a,
|
|
40
42
|
channelId: c,
|
|
41
|
-
data: {
|
|
43
|
+
data: {
|
|
44
|
+
connections: p
|
|
45
|
+
}
|
|
42
46
|
}), u();
|
|
43
47
|
} catch {
|
|
44
48
|
d(g("slackChannelSetError") || "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectedSlackChannels.mjs","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","objectId","collection","t","useTranslations","knock","useKnockClient","connectionStatus","knockSlackChannelId","useKnockSlackClient","connectedChannels","setConnectedChannels","useState","error","setError","isLoading","setIsLoading","isUpdating","setIsUpdating","fetchAndSetConnectedChannels","useCallback","res","
|
|
1
|
+
{"version":3,"file":"useConnectedSlackChannels.mjs","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":";;;;;;;;AAqBA,SAASA,EAA0B;AAAA,EACjCC,8BAA8B;AAAA,IAAEC,UAAAA;AAAAA,IAAUC,YAAAA;AAAAA,EAAW;AAChC,GAA0B;AACzC,QAAA;AAAA,IAAEC,GAAAA;AAAAA,MAAMC,EAAgB,GACxBC,IAAQC,KACR;AAAA,IAAEC,kBAAAA;AAAAA,IAAkBC,qBAAAA;AAAAA,MAAwBC,EAAoB,GAChE,CAACC,GAAmBC,CAAoB,IAAIC,EAEhD,IAAI,GACA,CAACC,GAAOC,CAAQ,IAAIF,EAAwB,IAAI,GAChD,CAACG,GAAWC,CAAY,IAAIJ,EAAS,EAAK,GAC1C,CAACK,GAAYC,CAAa,IAAIN,EAAS,EAAK,GAE5CO,IAA+BC,EAAY,MAAM;AACrDJ,IAAAA,EAAa,EAAI,IACY,YAC3B,MAAMX,EAAMgB,QAAQC,eAAe;AAAA,MACjCpB,YAAAA;AAAAA,MACAD,UAAAA;AAAAA,MACAsB,WAAWf;AAAAA,IAAAA,CACZ,GAEkB,EAClBgB,KAAMC,CAAQA,MAAA;;AACTA,OAAAA,IAAAA,KAAAA,gBAAAA,EAAKC,SAALD,QAAAA,EAAWE,cACQF,GAAAA,IAAAA,KAAAA,gBAAAA,EAAKC,SAALD,gBAAAA,EAAWE,WAAW,IAE3ChB,EAAqB,CAAE,CAAA,GAEzBG,EAAS,IAAI,GACbE,EAAa,EAAK;AAAA,IAAA,CACnB,EACAY,MAAM,MAAM;AACXjB,MAAAA,EAAqB,CAAE,CAAA,GACvBG,EAAS,IAAI,GACbE,EAAa,EAAK;AAAA,IAAA,CACnB;AAAA,EAAA,GACF,CAACd,GAAYG,EAAMgB,SAASb,GAAqBP,CAAQ,CAAC;AAE7D4B,SAAAA,EAAU,MAAM;AACd,IACEtB,MAAqB,eACrB,CAACG,KACD,CAACG,KACD,CAACE,KAE4BI;EAC/B,GACC,CACDT,GACAS,GACAJ,GACAF,GACAN,CAAgB,CACjB,GAoBM;AAAA,IACLmB,MAAMhB;AAAAA,IACNoB,yBApB8B,OAC9BC,MACG;AACHb,MAAAA,EAAc,EAAI;AACd,UAAA;AACIb,cAAAA,EAAMgB,QAAQW,eAAe;AAAA,UACjC/B,UAAAA;AAAAA,UACAC,YAAAA;AAAAA,UACAqB,WAAWf;AAAAA,UACXkB,MAAM;AAAA,YAAEC,aAAaI;AAAAA,UAAsB;AAAA,QAAA,CAC5C,GAC4BZ;cACf;AACLhB,QAAAA,EAAAA,EAAE,sBAAsB,KAAK,EAAE;AAAA,MAC1C;AACAe,MAAAA,EAAc,EAAK;AAAA,IAAA;AAAA,IAMnBe,UAAUhB;AAAAA,IACViB,SAASnB;AAAAA,IACTF,OAAAA;AAAAA,EAAAA;AAEJ;"}
|
|
@@ -5,14 +5,14 @@ import "swr/infinite";
|
|
|
5
5
|
import { useKnockClient as u } from "../../core/context/KnockProvider.mjs";
|
|
6
6
|
import { TENANT_OBJECT_COLLECTION as m } from "@knocklabs/client";
|
|
7
7
|
import "date-fns";
|
|
8
|
-
const p = "https://slack.com/oauth/v2/authorize", h = [
|
|
9
|
-
"chat:write",
|
|
10
|
-
"chat:write.public",
|
|
11
|
-
"channels:read",
|
|
12
|
-
"groups:read"
|
|
13
|
-
];
|
|
8
|
+
const p = "https://slack.com/oauth/v2/authorize", h = ["chat:write", "chat:write.public", "channels:read", "groups:read"];
|
|
14
9
|
function L(r, a) {
|
|
15
|
-
const e = u(), {
|
|
10
|
+
const e = u(), {
|
|
11
|
+
setConnectionStatus: t,
|
|
12
|
+
knockSlackChannelId: o,
|
|
13
|
+
tenant: c,
|
|
14
|
+
setActionLabel: s
|
|
15
|
+
} = k(), l = i(async () => {
|
|
16
16
|
s(null), t("disconnecting");
|
|
17
17
|
try {
|
|
18
18
|
const n = await e.slack.revokeAccessToken({
|
|
@@ -23,13 +23,7 @@ function L(r, a) {
|
|
|
23
23
|
} catch {
|
|
24
24
|
t("error");
|
|
25
25
|
}
|
|
26
|
-
}, [
|
|
27
|
-
t,
|
|
28
|
-
e.slack,
|
|
29
|
-
c,
|
|
30
|
-
o,
|
|
31
|
-
s
|
|
32
|
-
]);
|
|
26
|
+
}, [t, e.slack, c, o, s]);
|
|
33
27
|
return {
|
|
34
28
|
buildSlackAuthUrl: i(() => {
|
|
35
29
|
const n = {
|
|
@@ -47,14 +41,7 @@ function L(r, a) {
|
|
|
47
41
|
scope: h.join(",")
|
|
48
42
|
};
|
|
49
43
|
return `${p}?${new URLSearchParams(n)}`;
|
|
50
|
-
}, [
|
|
51
|
-
a,
|
|
52
|
-
c,
|
|
53
|
-
o,
|
|
54
|
-
e.apiKey,
|
|
55
|
-
e.userToken,
|
|
56
|
-
r
|
|
57
|
-
]),
|
|
44
|
+
}, [a, c, o, e.apiKey, e.userToken, r]),
|
|
58
45
|
disconnectFromSlack: l
|
|
59
46
|
};
|
|
60
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSlackAuth.mjs","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): UseSlackAuthOutput {\n const knock = useKnockClient();\n const { setConnectionStatus, knockSlackChannelId, tenant, setActionLabel } =\n useKnockSlackClient();\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: DEFAULT_SLACK_SCOPES.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 ]);\n\n return {\n buildSlackAuthUrl,\n disconnectFromSlack,\n };\n}\n\nexport default useSlackAuth;\n"],"names":["SLACK_AUTHORIZE_URL","DEFAULT_SLACK_SCOPES","useSlackAuth","slackClientId","redirectUrl","knock","useKnockClient","setConnectionStatus","knockSlackChannelId","tenant","setActionLabel","useKnockSlackClient","disconnectFromSlack","useCallback","revoke","rawParams","TENANT_OBJECT_COLLECTION"],"mappings":";;;;;;;AAMA,MAAMA,IAAsB,wCACtBC,IAAuB
|
|
1
|
+
{"version":3,"file":"useSlackAuth.mjs","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): UseSlackAuthOutput {\n const knock = useKnockClient();\n const { setConnectionStatus, knockSlackChannelId, tenant, setActionLabel } =\n useKnockSlackClient();\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: DEFAULT_SLACK_SCOPES.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 ]);\n\n return {\n buildSlackAuthUrl,\n disconnectFromSlack,\n };\n}\n\nexport default useSlackAuth;\n"],"names":["SLACK_AUTHORIZE_URL","DEFAULT_SLACK_SCOPES","useSlackAuth","slackClientId","redirectUrl","knock","useKnockClient","setConnectionStatus","knockSlackChannelId","tenant","setActionLabel","useKnockSlackClient","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":";;;;;;;AAMA,MAAMA,IAAsB,wCACtBC,IAAuB,CAC3B,cACA,qBACA,iBACA,aAAa;AAQf,SAASC,EACPC,GACAC,GACoB;AACpB,QAAMC,IAAQC,KACR;AAAA,IAAEC,qBAAAA;AAAAA,IAAqBC,qBAAAA;AAAAA,IAAqBC,QAAAA;AAAAA,IAAQC,gBAAAA;AAAAA,MACxDC,EAAoB,GAEhBC,IAAsBC,EAAY,YAAY;AAClDH,IAAAA,EAAe,IAAI,GACnBH,EAAoB,eAAe;AAC/B,QAAA;AACF,YAAMO,IAAS,MAAMT,EAAMU,MAAMC,kBAAkB;AAAA,QACjDP,QAAAA;AAAAA,QACAQ,gBAAgBT;AAAAA,MAAAA,CACjB;AAED,MACED,EADEO,MAAW,OACO,iBAEA,OAFc;AAAA,YAItB;AACdP,MAAAA,EAAoB,OAAO;AAAA,IAC7B;AAAA,EAAA,GACC,CACDA,GACAF,EAAMU,OACNN,GACAD,GACAE,CAAc,CACf;AA2BM,SAAA;AAAA,IACLQ,mBA1BwBL,EAAY,MAAM;AAC1C,YAAMM,IAAY;AAAA,QAChBC,OAAOC,KAAKC,UAAU;AAAA,UACpBC,cAAcnB;AAAAA,UACdoB,qBAAqB;AAAA,YACnBC,WAAWhB;AAAAA,YACXiB,YAAYC;AAAAA,UACd;AAAA,UACAC,YAAYpB;AAAAA,UACZqB,YAAYxB,EAAMyB;AAAAA,UAClBC,YAAY1B,EAAM2B;AAAAA,QAAAA,CACnB;AAAA,QACDC,WAAW9B;AAAAA,QACX+B,OAAOjC,EAAqBkC,KAAK,GAAG;AAAA,MAAA;AAEtC,aAAQ,GAAEnC,CAAoB,IAAG,IAAIoC,gBAAgBjB,CAAS,CAAE;AAAA,IAAA,GAC/D,CACDf,GACAK,GACAD,GACAH,EAAMyB,QACNzB,EAAM2B,WACN7B,CAAa,CACd;AAAA,IAICS,qBAAAA;AAAAA,EAAAA;AAEJ;"}
|
|
@@ -7,13 +7,17 @@ import "@knocklabs/client";
|
|
|
7
7
|
import "date-fns";
|
|
8
8
|
const P = 1e3, K = 200, M = "private_channel,public_channel", u = "SLACK_CHANNELS";
|
|
9
9
|
function z(n, e) {
|
|
10
|
-
return n === 0 ? [u, ""] : e && ["", null].includes(e.next_cursor) ? null : [u, e.next_cursor];
|
|
10
|
+
return n === 0 ? [u, ""] : e && ["", null].includes(e.next_cursor) ? null : [u, e.next_cursor ?? ""];
|
|
11
11
|
}
|
|
12
12
|
function G({
|
|
13
13
|
queryOptions: n
|
|
14
14
|
}) {
|
|
15
15
|
var C, _;
|
|
16
|
-
const e = I(), {
|
|
16
|
+
const e = I(), {
|
|
17
|
+
knockSlackChannelId: S,
|
|
18
|
+
tenant: d,
|
|
19
|
+
connectionStatus: a
|
|
20
|
+
} = L(), x = (c) => e.slack.getChannels({
|
|
17
21
|
tenant: d,
|
|
18
22
|
knockChannelId: S,
|
|
19
23
|
queryOptions: {
|
|
@@ -22,25 +26,20 @@ function G({
|
|
|
22
26
|
limit: (n == null ? void 0 : n.limitPerPage) || K,
|
|
23
27
|
types: (n == null ? void 0 : n.types) || M
|
|
24
28
|
}
|
|
25
|
-
}), {
|
|
29
|
+
}), {
|
|
30
|
+
data: t,
|
|
31
|
+
error: i,
|
|
32
|
+
isLoading: l,
|
|
33
|
+
isValidating: o,
|
|
34
|
+
size: f,
|
|
35
|
+
setSize: m,
|
|
36
|
+
mutate: E
|
|
37
|
+
} = A(z, x, {
|
|
26
38
|
initialSize: 0
|
|
27
|
-
}), s = (t == null ? void 0 : t.length) || 0, h = s === 0 || t && ((C = t[s]) == null ? void 0 : C.next_cursor) && ((_ = t[s]) == null ? void 0 : _.next_cursor) !== "", r = N(
|
|
28
|
-
() => (t ?? []).flatMap((c) => c == null ? void 0 : c.slack_channels).filter((c) => !!c),
|
|
29
|
-
[t]
|
|
30
|
-
), k = (n == null ? void 0 : n.maxCount) || P;
|
|
39
|
+
}), s = (t == null ? void 0 : t.length) || 0, h = s === 0 || t && ((C = t[s]) == null ? void 0 : C.next_cursor) && ((_ = t[s]) == null ? void 0 : _.next_cursor) !== "", r = N(() => (t ?? []).flatMap((c) => c == null ? void 0 : c.slack_channels).filter((c) => !!c), [t]), k = (n == null ? void 0 : n.maxCount) || P;
|
|
31
40
|
return g(() => {
|
|
32
41
|
a === "connected" && !i && h && !l && !o && r.length < k && m(f + 1);
|
|
33
|
-
}, [
|
|
34
|
-
r.length,
|
|
35
|
-
m,
|
|
36
|
-
f,
|
|
37
|
-
h,
|
|
38
|
-
l,
|
|
39
|
-
o,
|
|
40
|
-
k,
|
|
41
|
-
i,
|
|
42
|
-
a
|
|
43
|
-
]), {
|
|
42
|
+
}, [r.length, m, f, h, l, o, k, i, a]), {
|
|
44
43
|
data: r,
|
|
45
44
|
isLoading: l || o,
|
|
46
45
|
refetch: () => E()
|