@knocklabs/react-core 0.1.6 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/modules/core/utils.js +1 -1
- package/dist/cjs/modules/core/utils.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/de.js +1 -1
- package/dist/cjs/modules/i18n/languages/de.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/en.js +1 -1
- package/dist/cjs/modules/i18n/languages/en.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/index.js +1 -1
- package/dist/cjs/modules/i18n/languages/index.js.map +1 -1
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js +2 -0
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js.map +1 -0
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js +2 -0
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +1 -0
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js +2 -0
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js.map +1 -0
- package/dist/cjs/modules/slack/hooks/useSlackChannels.js +2 -0
- package/dist/cjs/modules/slack/hooks/useSlackChannels.js.map +1 -0
- package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js +2 -0
- package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -0
- package/dist/esm/index.mjs +35 -23
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/modules/core/utils.mjs +20 -11
- package/dist/esm/modules/core/utils.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/de.mjs +22 -1
- package/dist/esm/modules/i18n/languages/de.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/en.mjs +24 -3
- package/dist/esm/modules/i18n/languages/en.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/index.mjs +3 -3
- package/dist/esm/modules/i18n/languages/index.mjs.map +1 -1
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs +58 -0
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs.map +1 -0
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +56 -0
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -0
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +64 -0
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -0
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +53 -0
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs.map +1 -0
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs +45 -0
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/core/utils.d.ts +6 -0
- package/dist/types/modules/core/utils.d.ts.map +1 -1
- package/dist/types/modules/i18n/languages/de.d.ts.map +1 -1
- package/dist/types/modules/i18n/languages/en.d.ts.map +1 -1
- package/dist/types/modules/i18n/languages/index.d.ts +21 -0
- package/dist/types/modules/i18n/languages/index.d.ts.map +1 -1
- package/dist/types/modules/slack/constants.d.ts +12 -0
- package/dist/types/modules/slack/constants.d.ts.map +1 -0
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts +20 -0
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts.map +1 -0
- package/dist/types/modules/slack/context/index.d.ts +2 -0
- package/dist/types/modules/slack/context/index.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/index.d.ts +5 -0
- package/dist/types/modules/slack/hooks/index.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +15 -0
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useSlackAuth.d.ts +7 -0
- package/dist/types/modules/slack/hooks/useSlackAuth.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useSlackChannels.d.ts +13 -0
- package/dist/types/modules/slack/hooks/useSlackChannels.d.ts.map +1 -0
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +13 -0
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts.map +1 -0
- package/dist/types/modules/slack/index.d.ts +4 -0
- package/dist/types/modules/slack/index.d.ts.map +1 -0
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [f37d680]
|
|
8
|
+
- @knocklabs/client@0.9.1
|
|
9
|
+
|
|
10
|
+
## 0.2.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- 627e643: Add SlackKit components, hooks, client JS functions, and example apps.
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- e076109: Fix hover state for connect button.
|
|
19
|
+
- Updated dependencies [627e643]
|
|
20
|
+
- @knocklabs/client@0.9.0
|
|
21
|
+
|
|
3
22
|
## 0.1.6
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
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"),s=require("./modules/core/hooks/useAuthenticatedKnockClient.js"),c=require("./modules/core/constants.js"),e=require("./modules/core/utils.js"),o=require("./modules/feed/context/KnockFeedProvider.js"),i=require("./modules/feed/hooks/useNotifications.js"),a=require("./modules/feed/hooks/useFeedSettings.js"),r=require("./modules/slack/context/KnockSlackProvider.js"),u=require("./modules/slack/hooks/useSlackConnectionStatus.js"),l=require("./modules/slack/hooks/useSlackChannels.js"),d=require("./modules/slack/hooks/useConnectedSlackChannels.js"),k=require("./modules/slack/hooks/useSlackAuth.js"),t=require("./modules/i18n/context/KnockI18nProvider.js"),K=require("./modules/i18n/hooks/useTranslations.js"),S=require("./modules/i18n/languages/index.js");exports.KnockProvider=n.KnockProvider;exports.useKnockClient=n.useKnockClient;exports.useAuthenticatedKnockClient=s;exports.FilterStatus=c.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=o.KnockFeedProvider;exports.useKnockFeed=o.useKnockFeed;exports.useNotifications=i;exports.useFeedSettings=a;exports.KnockSlackProvider=r.KnockSlackProvider;exports.useKnockSlackClient=r.useKnockSlackClient;exports.useSlackConnectionStatus=u;exports.useSlackChannels=l;exports.useConnectedSlackChannels=d;exports.useSlackAuth=k;exports.I18nContext=t.I18nContext;exports.KnockI18nProvider=t.KnockI18nProvider;exports.useTranslations=K.useTranslations;exports.locales=S.locales;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -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 o=require("date-fns");function c(e){return e>9?"9+":e}function i(e,r={}){try{const t=o.parseISO(e);return o.intlFormatDistance(t,new Date,{locale:r.locale})}catch{return e}}function d(e){return e.charAt(0).toUpperCase()+e.slice(1)}function l(e,r){return e!==void 0?e:r}function u(e,r={}){return[e,r.source,r.tenant,r.has_tenant,r.archived].filter(t=>t!=null).join("-")}function f({knockSlackChannelId:e,tenant:r,connectionStatus:t,errorLabel:n}){return[e,r,t,n].filter(a=>a!=null).join("-")}exports.feedProviderKey=u;exports.formatBadgeCount=c;exports.formatTimestamp=i;exports.renderNodeOrFallback=l;exports.slackProviderKey=f;exports.toSentenceCase=d;
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport {
|
|
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 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","slackProviderKey","knockSlackChannelId","tenant","connectionStatus","errorLabel"],"mappings":"4GAIO,SAASA,EAAiBC,EAAgC,CACxD,OAAAA,EAAQ,EAAI,KAAOA,CAC5B,CAMO,SAASC,EACdC,EACAC,EAAkC,GAClC,CACI,GAAA,CACI,MAAAC,EAAWC,WAASH,CAAE,EAKrB,OAJWI,EAAA,mBAAmBF,EAAU,IAAI,KAAQ,CACzD,OAAQD,EAAQ,MAAA,CACjB,OAGS,CACH,OAAAD,CACT,CACF,CAEO,SAASK,EAAeC,EAAwB,CAC9C,OAAAA,EAAO,OAAO,CAAC,EAAE,cAAgBA,EAAO,MAAM,CAAC,CACxD,CAEgB,SAAAC,EAAqBC,EAAiBC,EAAqB,CAClE,OAAAD,IAAS,OAAYA,EAAOC,CACrC,CAMO,SAASC,EACdC,EACAV,EAA6B,GAC7B,CACO,MAAA,CACLU,EACAV,EAAQ,OACRA,EAAQ,OACRA,EAAQ,WACRA,EAAQ,QACV,EACG,OAAQW,GAAMA,GAAM,IAAuB,EAC3C,KAAK,GAAG,CACb,CAMO,SAASC,EAAiB,CAC/B,oBAAAC,EACA,OAAAC,EACA,iBAAAC,EACA,WAAAC,CACF,EAKG,CACD,MAAO,CAACH,EAAqBC,EAAQC,EAAkBC,CAAU,EAC9D,OAAQL,GAAMA,GAAM,IAAuB,EAC3C,KAAK,GAAG,CACb"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e={translations:{archiveNotification:"Benachrichtigung archivieren",markAllAsRead:"Alle als gelesen markieren",notifications:"Benachrichtigungen",emptyFeedTitle:"Noch keine Benachrichtigungen",emptyFeedBody:"Wir werden dich benachrichtigen, sobald wir etwas Neues für dich haben.",all:"Alle",unread:"Ungelesen",read:"Gelesen",unseen:"Ungesehen"},locale:"de"};module.exports=e;
|
|
1
|
+
"use strict";const e={translations:{archiveNotification:"Benachrichtigung archivieren",markAllAsRead:"Alle als gelesen markieren",notifications:"Benachrichtigungen",emptyFeedTitle:"Noch keine Benachrichtigungen",emptyFeedBody:"Wir werden dich benachrichtigen, sobald wir etwas Neues für dich haben.",all:"Alle",unread:"Ungelesen",read:"Gelesen",unseen:"Ungesehen",slackConnectChannel:"Kanal verbinden",slackChannelId:"Slack Kanal ID",slackConnecting:"Verbinden mit Slack...",slackDisconnecting:"Trennen der Verbindung...",slackConnect:"Mit Slack verbinden",slackConnected:"Verbunden",slackConnectContainerDescription:"Verbinden, um Benachrichtigungen in Ihrem Slack-Arbeitsbereich zu erhalten.",slackSearchbarDisconnected:"Slack ist nicht verbunden.",slackSearchbarMultipleChannels:"Mehrere Kanäle verbunden",slackSearchbarNoChannelsConnected:"Suchkanäle",slackSearchbarNoChannelsFound:"Keine schlaffen Kanäle.",slackSearchbarChannelsError:"Fehler beim Abrufen von Kanälen.",slackSearchChannels:"Suchkanäle",slackConnectionErrorExists:"Versuchen Sie, sich erneut mit Slack zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.",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.",slackChannelAlreadyConnected:"Fehler: bereits verbunden",slackError:"Fehler",slackDisconnect:"Trennen Sie die Verbindung.",slackChannelSetError:"Fehlereinstellung Kanal.",slackAccessTokenNotSet:"Zugriffstoken nicht gesetzt.",slackReconnect:"Neu verbinden"},locale:"de"};module.exports=e;
|
|
2
2
|
//# sourceMappingURL=de.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de.js","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 },\n locale: \"de\",\n};\n\nexport default de;\n"],"names":["de"],"mappings":"aAEA,MAAMA,EAAkB,CACtB,aAAc,CACZ,oBAAqB,+BACrB,cAAe,6BACf,cAAe,qBACf,eAAgB,gCAChB,cACE,0EACF,IAAK,OACL,OAAQ,YACR,KAAM,UACN,OAAQ,
|
|
1
|
+
{"version":3,"file":"de.js","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,EAAkB,CACtB,aAAc,CACZ,oBAAqB,+BACrB,cAAe,6BACf,cAAe,qBACf,eAAgB,gCAChB,cACE,0EACF,IAAK,OACL,OAAQ,YACR,KAAM,UACN,OAAQ,YACR,oBAAqB,kBACrB,eAAgB,iBAChB,gBAAiB,yBACjB,mBAAoB,4BACpB,aAAc,sBACd,eAAgB,YAChB,iCAAkC,8EAClC,2BAA4B,6BAC5B,+BAAiC,2BACjC,kCAAmC,aACnC,8BAA+B,0BAC/B,4BAA6B,mCAC7B,oBAAqB,aACrB,2BAA4B,kHAC5B,6BAA8B,gKAC9B,6BAA8B,4BAC9B,WAAY,SACZ,gBAAiB,8BACjB,qBAAsB,2BACtB,uBAAwB,+BACxB,eAAgB,eAClB,EACA,OAAQ,IACV"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const n={translations:{archiveNotification:"Archive this notification",markAllAsRead:"Mark all as read",notifications:"Notifications",emptyFeedTitle:"No notifications yet",emptyFeedBody:"We'll let you know when we've got something new for you.",all:"All",unread:"Unread",read:"Read",unseen:"Unseen",slackConnectChannel:"Connect channel",slackChannelId:"Slack channel ID",slackConnecting:"Connecting to Slack...",slackDisconnecting:"Disconnecting...",slackConnect:"Connect to Slack",slackConnected:"Connected",slackConnectContainerDescription:"Connect to get notifications in your Slack workspace.",slackSearchbarDisconnected:"Slack is not connected.",slackSearchbarMultipleChannels:"Multiple channels connected",slackSearchbarNoChannelsConnected:"Search channels",slackSearchbarNoChannelsFound:"No slack channels.",slackSearchbarChannelsError:"Error fetching channels.",slackSearchChannels:"Search channels",slackConnectionErrorExists:"Try reconnecting to Slack to find and select channels from your workspace.",slackConnectionErrorOccurred:"There was an error connecting to Slack. Try reconnecting to find and select channels from your workspace.",slackChannelAlreadyConnected:"Error: already connected",slackError:"Error",slackDisconnect:"Disconnect",slackChannelSetError:"Error setting channel.",slackAccessTokenNotSet:"Access token not set.",slackReconnect:"Reconnect"},locale:"en"};module.exports=n;
|
|
2
2
|
//# sourceMappingURL=en.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","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 },\n locale: \"en\",\n};\n\nexport default en;\n"],"names":["en"],"mappings":"aAEA,MAAMA,EAAkB,CACtB,aAAc,CACZ,oBAAqB,4BACrB,cAAe,mBACf,cAAe,gBACf,eAAgB,uBAChB,cAAe,2DACf,IAAK,MACL,OAAQ,SACR,KAAM,OACN,OAAQ,
|
|
1
|
+
{"version":3,"file":"en.js","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,EAAkB,CACtB,aAAc,CACZ,oBAAqB,4BACrB,cAAe,mBACf,cAAe,gBACf,eAAgB,uBAChB,cAAe,2DACf,IAAK,MACL,OAAQ,SACR,KAAM,OACN,OAAQ,SACR,oBAAqB,kBACrB,eAAgB,mBAChB,gBAAiB,yBACjB,mBAAoB,mBACpB,aAAc,mBACd,eAAgB,YAChB,iCAAkC,wDAClC,2BAA4B,0BAC5B,+BAAiC,8BACjC,kCAAmC,kBACnC,8BAA+B,qBAC/B,4BAA6B,2BAC7B,oBAAqB,kBACrB,2BAA4B,6EAC5B,6BAA8B,4GAC9B,6BAA8B,2BAC9B,WAAY,QACZ,gBAAiB,aACjB,qBAAsB,yBACtB,uBAAwB,wBACxB,eAAgB,WAClB,EACA,OAAQ,IACV"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./de.js"),o=require("./en.js"),t={en:o,de:e};exports.locales=t;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/modules/i18n/languages/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","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":"gIA0CaA,EAAU,CAAE,GAAAC,EAAI,GAAAC,CAAG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),S=require("../hooks/useSlackConnectionStatus.js"),u=require("@tanstack/react-query"),f=require("react"),v=require("../../core/context/KnockProvider.js");require("@knocklabs/client");const y=require("../../core/utils.js");require("../../i18n/context/KnockI18nProvider.js");function C(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 s=C(f),P=new u.QueryClient,l=s.createContext(null),j=({knockSlackChannelId:e,tenant:t,children:r})=>{const o=v.useKnockClient(),{connectionStatus:n,setConnectionStatus:a,errorLabel:c,setErrorLabel:d,actionLabel:b,setActionLabel:k}=S(o,e,t);return i.jsx(l.Provider,{value:{connectionStatus:n,setConnectionStatus:a,errorLabel:c,setErrorLabel:d,actionLabel:b,setActionLabel:k,knockSlackChannelId:e,tenant:t},children:i.jsx(u.QueryClientProvider,{client:P,children:r})},y.slackProviderKey({knockSlackChannelId:e,tenant:t,connectionStatus:n,errorLabel:c}))},p=()=>{const e=s.useContext(l);if(e===void 0)throw new Error("useKnockSlackClient must be used within a KnockSlackProvider");return e};exports.KnockSlackProvider=j;exports.useKnockSlackClient=p;
|
|
2
|
+
//# sourceMappingURL=KnockSlackProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnockSlackProvider.js","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"sourcesContent":["import { useSlackConnectionStatus } from \"..\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport * as React from \"react\";\n\nimport { slackProviderKey } from \"../../core\";\nimport { useKnockClient } from \"../../core\";\nimport { ConnectionStatus } from \"../hooks/useSlackConnectionStatus\";\n\nconst queryClient = new QueryClient();\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 children?: React.ReactElement;\n}\n\nexport const KnockSlackProvider: React.FC<KnockSlackProviderProps> = ({\n knockSlackChannelId,\n tenant,\n children,\n}) => {\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 <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\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":["queryClient","QueryClient","SlackProviderStateContext","React","KnockSlackProvider","knockSlackChannelId","tenant","children","knock","useKnockClient","connectionStatus","setConnectionStatus","errorLabel","setErrorLabel","actionLabel","setActionLabel","useSlackConnectionStatus","jsx","QueryClientProvider","slackProviderKey","useKnockSlackClient","context"],"mappings":"gtBAQMA,EAAc,IAAIC,EAAAA,YAalBC,EACJC,EAAM,cAA8C,IAAI,EAQ7CC,EAAwD,CAAC,CACpE,oBAAAC,EACA,OAAAC,EACA,SAAAC,CACF,IAAM,CACJ,MAAMC,EAAQC,EAAAA,iBAER,CACJ,iBAAAC,EACA,oBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,eAAAC,CACE,EAAAC,EAAyBR,EAAOH,EAAqBC,CAAM,EAG7D,OAAAW,EAAA,IAACf,EAA0B,SAA1B,CAOC,MAAO,CACL,iBAAAQ,EACA,oBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,eAAAC,EACA,oBAAAV,EACA,OAAAC,CACF,EAEA,SAACW,EAAA,IAAAC,EAAA,oBAAA,CAAoB,OAAQlB,EAAc,SAAAO,EAAS,CAAA,EAjB/CY,mBAAiB,CACpB,oBAAAd,EACA,OAAAC,EACA,iBAAAI,EACA,WAAAE,CAAA,CACD,CAAA,CAeP,EAEaQ,EAAsB,IAA+B,CAChE,MAAMC,EAAUlB,EAAM,WACpBD,CAAA,EAEF,GAAImB,IAAY,OACd,MAAM,IAAI,MACR,8DAAA,EAGG,OAAAA,CACT"}
|
|
@@ -0,0 +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("@tanstack/react-query");const y=require("../../core/context/KnockProvider.js");require("@knocklabs/client");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),[i,r]=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([]),r(null),d(!1)}).catch(()=>{l([]),r(null),d(!1)})},[a,c.objects,s,t]);return e.useEffect(()=>{h==="connected"&&!o&&!i&&!u&&C()},[o,C,u,i,h]),{data:o,updateConnectedChannels:async f=>{k(!0);try{await c.objects.setChannelData({objectId:t,collection:a,channelId:s,data:{connections:f}}),C()}catch{r(q("slackChannelSetError")||"")}k(!1)},updating:p,loading:u,error:i}}module.exports=E;
|
|
2
|
+
//# sourceMappingURL=useConnectedSlackChannels.js.map
|
|
@@ -0,0 +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 (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","_a","_b","useEffect","channelsToSendToKnock"],"mappings":"uUAqBA,SAASA,EAA0B,CACjC,6BAA8B,CAAE,SAAAC,EAAU,WAAAC,CAAW,CACvD,EAAiD,CACzC,KAAA,CAAE,EAAAC,GAAMC,EAAAA,kBACRC,EAAQC,EAAAA,iBACR,CAAE,iBAAAC,EAAkB,oBAAAC,CAAoB,EAAIC,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,EAAM,QAAQ,eAAe,CACjC,WAAAH,EACA,SAAAD,EACA,UAAWO,CAAA,CACZ,GAEkB,EAClB,KAAMa,GAAQ,UACTC,EAAAD,GAAA,YAAAA,EAAK,OAAL,MAAAC,EAAW,YACQX,GAAAY,EAAAF,GAAA,YAAAA,EAAK,OAAL,YAAAE,EAAW,WAAW,EAE3CZ,EAAqB,CAAE,CAAA,EAEzBG,EAAS,IAAI,EACbE,EAAa,EAAK,CAAA,CACnB,EACA,MAAM,IAAM,CACXL,EAAqB,CAAE,CAAA,EACvBG,EAAS,IAAI,EACbE,EAAa,EAAK,CAAA,CACnB,CAAA,EACF,CAACd,EAAYG,EAAM,QAASG,EAAqBP,CAAQ,CAAC,EAE7DuB,OAAAA,EAAAA,UAAU,IAAM,CAEZjB,IAAqB,aACrB,CAACG,GACD,CAACG,GACD,CAACE,GAE4BI,GAC/B,EACC,CACDT,EACAS,EACAJ,EACAF,EACAN,CAAA,CACD,EAoBM,CACL,KAAMG,EACN,wBApB8B,MAC9Be,GACG,CACHP,EAAc,EAAI,EACd,GAAA,CACI,MAAAb,EAAM,QAAQ,eAAe,CACjC,SAAAJ,EACA,WAAAC,EACA,UAAWM,EACX,KAAM,CAAE,YAAaiB,CAAsB,CAAA,CAC5C,EAC4BN,SACf,CACLL,EAAAX,EAAE,sBAAsB,GAAK,EAAE,CAC1C,CACAe,EAAc,EAAK,CAAA,EAMnB,SAAUD,EACV,QAASF,EACT,MAAAF,CAAA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const k=require("../context/KnockSlackProvider.js"),i=require("react");require("../../i18n/context/KnockI18nProvider.js");require("@tanstack/react-query");const l=require("../../core/context/KnockProvider.js"),d=require("@knocklabs/client");require("date-fns");const h="https://slack.com/oauth/v2/authorize",S=["chat:write","chat:write.public","channels:read","groups:read"];function _(o,s){const e=l.useKnockClient(),{setConnectionStatus:c,knockSlackChannelId:n,tenant:t,setActionLabel:a}=k.useKnockSlackClient(),u=i.useCallback(async()=>{a(null),c("disconnecting");try{const r=await e.slack.revokeAccessToken({tenant:t,knockChannelId:n});c(r==="ok"?"disconnected":"error")}catch{c("error")}},[c,e.slack,t,n,a]);return{buildSlackAuthUrl:i.useCallback(()=>{const r={state:JSON.stringify({redirect_url:s,access_token_object:{object_id:t,collection:d.TENANT_OBJECT_COLLECTION},channel_id:n,public_key:e.apiKey,user_token:e.userToken}),client_id:o,scope:S.join(",")};return`${h}?${new URLSearchParams(r)}`},[s,t,n,e.apiKey,e.userToken,o]),disconnectFromSlack:u}}module.exports=_;
|
|
2
|
+
//# sourceMappingURL=useSlackAuth.js.map
|
|
@@ -0,0 +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): 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":"kRAMA,MAAMA,EAAsB,uCACtBC,EAAuB,CAC3B,aACA,oBACA,gBACA,aACF,EAOA,SAASC,EACPC,EACAC,EACoB,CACpB,MAAMC,EAAQC,EAAAA,iBACR,CAAE,oBAAAC,EAAqB,oBAAAC,EAAqB,OAAAC,EAAQ,eAAAC,CAAA,EACxDC,EAAAA,sBAEIC,EAAsBC,EAAAA,YAAY,SAAY,CAClDH,EAAe,IAAI,EACnBH,EAAoB,eAAe,EAC/B,GAAA,CACF,MAAMO,EAAS,MAAMT,EAAM,MAAM,kBAAkB,CACjD,OAAAI,EACA,eAAgBD,CAAA,CACjB,EAGCD,EADEO,IAAW,KACO,eAEA,OAFc,OAItB,CACdP,EAAoB,OAAO,CAC7B,CAAA,EACC,CACDA,EACAF,EAAM,MACNI,EACAD,EACAE,CAAA,CACD,EA2BM,MAAA,CACL,kBA1BwBG,EAAAA,YAAY,IAAM,CAC1C,MAAME,EAAY,CAChB,MAAO,KAAK,UAAU,CACpB,aAAcX,EACd,oBAAqB,CACnB,UAAWK,EACX,WAAYO,EAAA,wBACd,EACA,WAAYR,EACZ,WAAYH,EAAM,OAClB,WAAYA,EAAM,SAAA,CACnB,EACD,UAAWF,EACX,MAAOF,EAAqB,KAAK,GAAG,CAAA,EAEtC,MAAO,GAAGD,CAAmB,IAAI,IAAI,gBAAgBe,CAAS,CAAC,EAAA,EAC9D,CACDX,EACAK,EACAD,EACAH,EAAM,OACNA,EAAM,UACNF,CAAA,CACD,EAIC,oBAAAS,CAAA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const N=require("../context/KnockSlackProvider.js"),s=require("react");require("../../i18n/context/KnockI18nProvider.js");const S=require("@tanstack/react-query"),E=require("../../core/context/KnockProvider.js");require("@knocklabs/client");require("date-fns");const I=1e3,K=200,d="private_channel,public_channel";function M({queryOptions:n}){const f=E.useKnockClient(),{knockSlackChannelId:C,tenant:_,connectionStatus:o}=N.useKnockSlackClient(),x=({pageParam:e})=>f.slack.getChannels({tenant:_,knockChannelId:C,queryOptions:{...n,cursor:e,limit:(n==null?void 0:n.limitPerPage)||K,types:(n==null?void 0:n.types)||d}}),{data:r,isLoading:a,isFetching:i,fetchNextPage:u,hasNextPage:k,refetch:m,error:h}=S.useInfiniteQuery({queryKey:["slackChannels"],queryFn:x,initialPageParam:"",getNextPageParam:e=>(e==null?void 0:e.next_cursor)===""?null:e==null?void 0:e.next_cursor}),c=s.useMemo(()=>{var e;return((e=r==null?void 0:r.pages)==null?void 0:e.flatMap(t=>t==null?void 0:t.slack_channels).filter(t=>!!t))||[]},[r==null?void 0:r.pages]),l=(n==null?void 0:n.maxCount)||I;return s.useEffect(()=>{o==="connected"&&!h&&k&&!i&&(c==null?void 0:c.length)<l&&u()},[c==null?void 0:c.length,u,k,i,l,h,o]),{data:c,isLoading:a,refetch:m}}module.exports=M;
|
|
2
|
+
//# sourceMappingURL=useSlackChannels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackChannels.js","sources":["../../../../../src/modules/slack/hooks/useSlackChannels.ts"],"sourcesContent":["import { SlackChannelQueryOptions, useKnockSlackClient } from \"..\";\nimport { SlackChannel } from \"@knocklabs/client\";\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\nimport { useEffect, useMemo } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\n\nconst MAX_COUNT = 1000;\nconst LIMIT_PER_PAGE = 200;\nconst CHANNEL_TYPES = \"private_channel,public_channel\";\n\ntype UseSlackChannelsProps = {\n queryOptions?: SlackChannelQueryOptions;\n};\n\ntype UseSlackChannelOutput = {\n data: SlackChannel[];\n isLoading: boolean;\n refetch: () => void;\n};\n\nfunction useSlackChannels({\n queryOptions,\n}: UseSlackChannelsProps): UseSlackChannelOutput {\n const knock = useKnockClient();\n const { knockSlackChannelId, tenant, connectionStatus } =\n useKnockSlackClient();\n\n const fetchChannels = ({ pageParam }: { pageParam: string }) => {\n return knock.slack.getChannels({\n tenant,\n knockChannelId: knockSlackChannelId,\n queryOptions: {\n ...queryOptions,\n cursor: pageParam,\n limit: queryOptions?.limitPerPage || LIMIT_PER_PAGE,\n types: queryOptions?.types || CHANNEL_TYPES,\n },\n });\n };\n\n const {\n data,\n isLoading,\n isFetching,\n fetchNextPage,\n hasNextPage,\n refetch,\n error,\n } = useInfiniteQuery({\n queryKey: [\"slackChannels\"],\n queryFn: fetchChannels,\n initialPageParam: \"\",\n getNextPageParam: (lastPage) =>\n lastPage?.next_cursor === \"\" ? null : lastPage?.next_cursor,\n });\n\n const slackChannels = useMemo(() => {\n return (\n data?.pages\n ?.flatMap((page) => page?.slack_channels)\n .filter((channel) => !!channel) || []\n );\n }, [data?.pages]);\n\n const maxCount = queryOptions?.maxCount || MAX_COUNT;\n\n useEffect(() => {\n if (\n connectionStatus === \"connected\" &&\n !error &&\n hasNextPage &&\n !isFetching &&\n slackChannels?.length < maxCount\n ) {\n fetchNextPage();\n }\n }, [\n slackChannels?.length,\n fetchNextPage,\n hasNextPage,\n isFetching,\n maxCount,\n error,\n connectionStatus,\n ]);\n\n return { data: slackChannels, isLoading, refetch };\n}\n\nexport default useSlackChannels;\n"],"names":["MAX_COUNT","LIMIT_PER_PAGE","CHANNEL_TYPES","useSlackChannels","queryOptions","knock","useKnockClient","knockSlackChannelId","tenant","connectionStatus","useKnockSlackClient","fetchChannels","pageParam","data","isLoading","isFetching","fetchNextPage","hasNextPage","refetch","error","useInfiniteQuery","lastPage","slackChannels","useMemo","_a","page","channel","maxCount","useEffect"],"mappings":"kRAOA,MAAMA,EAAY,IACZC,EAAiB,IACjBC,EAAgB,iCAYtB,SAASC,EAAiB,CACxB,aAAAC,CACF,EAAiD,CAC/C,MAAMC,EAAQC,EAAAA,iBACR,CAAE,oBAAAC,EAAqB,OAAAC,EAAQ,iBAAAC,GACnCC,EAAoB,oBAAA,EAEhBC,EAAgB,CAAC,CAAE,UAAAC,KAChBP,EAAM,MAAM,YAAY,CAC7B,OAAAG,EACA,eAAgBD,EAChB,aAAc,CACZ,GAAGH,EACH,OAAQQ,EACR,OAAOR,GAAA,YAAAA,EAAc,eAAgBH,EACrC,OAAOG,GAAA,YAAAA,EAAc,QAASF,CAChC,CAAA,CACD,EAGG,CACJ,KAAAW,EACA,UAAAC,EACA,WAAAC,EACA,cAAAC,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,GACEC,mBAAiB,CACnB,SAAU,CAAC,eAAe,EAC1B,QAAST,EACT,iBAAkB,GAClB,iBAAmBU,IACjBA,GAAA,YAAAA,EAAU,eAAgB,GAAK,KAAOA,GAAA,YAAAA,EAAU,WAAA,CACnD,EAEKC,EAAgBC,EAAAA,QAAQ,IAAM,OAClC,QACEC,EAAAX,GAAA,YAAAA,EAAM,QAAN,YAAAW,EACI,QAASC,GAASA,GAAA,YAAAA,EAAM,gBACzB,OAAQC,GAAY,CAAC,CAACA,KAAY,CAAA,CAAC,EAEvC,CAACb,GAAA,YAAAA,EAAM,KAAK,CAAC,EAEVc,GAAWvB,GAAA,YAAAA,EAAc,WAAYJ,EAE3C4B,OAAAA,EAAAA,UAAU,IAAM,CAEZnB,IAAqB,aACrB,CAACU,GACDF,GACA,CAACF,IACDO,GAAA,YAAAA,EAAe,QAASK,GAEVX,GAChB,EACC,CACDM,GAAA,YAAAA,EAAe,OACfN,EACAC,EACAF,EACAY,EACAR,EACAV,CAAA,CACD,EAEM,CAAE,KAAMa,EAAe,UAAAR,EAAW,QAAAI,CAAQ,CACnD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const o=require("react");require("../../i18n/context/KnockI18nProvider.js");const p=require("../../i18n/hooks/useTranslations.js"),A=c=>{const e=c.substring(0,1).toUpperCase(),r=c.substring(1);return e==null?void 0:e.concat(r).replace("_"," ")};function R(c,e,r){const{t:a}=p.useTranslations(),[s,n]=o.useState("connecting"),[f,u]=o.useState(null),[E,d]=o.useState(null);return o.useEffect(()=>{(async()=>{var i,l,S,h,k,b;if(s==="connecting")try{const t=await c.slack.authCheck({tenant:r,knockChannelId:e});if((i=t.connection)!=null&&i.ok)return n("connected");if(t.code==="ERR_BAD_REQUEST"&&((S=(l=t.response)==null?void 0:l.data)==null?void 0:S.message)===a("slackAccessTokenNotSet"))return n("disconnected");if(!((h=t.connection)!=null&&h.ok)&&((k=t.connection)!=null&&k.error)){const g=A((b=t.connection)==null?void 0:b.error);u(g),n("error");return}n("error")}catch{n("error")}})()},[s,r,e,c.slack,a]),{connectionStatus:s,setConnectionStatus:n,errorLabel:f,setErrorLabel:u,actionLabel:E,setActionLabel:d}}module.exports=R;
|
|
2
|
+
//# sourceMappingURL=useSlackConnectionStatus.js.map
|
|
@@ -0,0 +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 // 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","rest","useSlackConnectionStatus","knock","knockSlackChannelId","tenant","t","useTranslations","connectionStatus","setConnectionStatus","useState","errorLabel","setErrorLabel","actionLabel","setActionLabel","useEffect","authRes","_a","_c","_b","_d","_e","_f"],"mappings":"gJA2BMA,EAA2BC,GAAyB,CACxD,MAAMC,EAAcD,EAAa,UAAU,EAAG,CAAC,EAAE,cAC3CE,EAAOF,EAAa,UAAU,CAAC,EACrC,OAAOC,GAAA,YAAAA,EAAa,OAAOC,GAAM,QAAQ,IAAK,IAChD,EAEA,SAASC,EACPC,EACAC,EACAC,EACgC,CAC1B,KAAA,CAAE,EAAAC,GAAMC,EAAAA,kBACR,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,iBAClC,GAAIP,IAAqB,aAErB,GAAA,CACF,MAAMQ,EAAU,MAAMb,EAAM,MAAM,UAAU,CAC1C,OAAAE,EACA,eAAgBD,CAAA,CACjB,EAEG,IAAAa,EAAAD,EAAQ,aAAR,MAAAC,EAAoB,GACtB,OAAOR,EAAoB,WAAW,EAOtC,GAAAO,EAAQ,OAAS,qBACjBE,GAAAC,EAAAH,EAAQ,WAAR,YAAAG,EAAkB,OAAlB,YAAAD,EAAwB,WAAYZ,EAAE,wBAAwB,EAE9D,OAAOG,EAAoB,cAAc,EAI3C,GAAI,GAACW,EAAAJ,EAAQ,aAAR,MAAAI,EAAoB,OAAMC,EAAAL,EAAQ,aAAR,MAAAK,EAAoB,OAAO,CACxD,MAAMV,EAAab,GAAwBwB,EAAAN,EAAQ,aAAR,YAAAM,EAAoB,KAAK,EACpEV,EAAcD,CAAU,EACxBF,EAAoB,OAAO,EAC3B,MACF,CAIAA,EAAoB,OAAO,OACb,CACdA,EAAoB,OAAO,CAC7B,CAAA,IAGc,EACf,CAACD,EAAkBH,EAAQD,EAAqBD,EAAM,MAAOG,CAAC,CAAC,EAE3D,CACL,iBAAAE,EACA,oBAAAC,EACA,WAAAE,EACA,cAAAC,EACA,YAAAC,EACA,eAAAC,CAAA,CAEJ"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
import { KnockProvider as r, useKnockClient as t } from "./modules/core/context/KnockProvider.mjs";
|
|
2
|
-
import { default as
|
|
3
|
-
import { FilterStatus as
|
|
4
|
-
import { feedProviderKey as
|
|
5
|
-
import { KnockFeedProvider as x, useKnockFeed as
|
|
6
|
-
import { default as
|
|
7
|
-
import { default as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
2
|
+
import { default as n } from "./modules/core/hooks/useAuthenticatedKnockClient.mjs";
|
|
3
|
+
import { FilterStatus as f } from "./modules/core/constants.mjs";
|
|
4
|
+
import { feedProviderKey as u, formatBadgeCount as c, formatTimestamp as d, renderNodeOrFallback as m, slackProviderKey as i, toSentenceCase as k } from "./modules/core/utils.mjs";
|
|
5
|
+
import { KnockFeedProvider as x, useKnockFeed as C } from "./modules/feed/context/KnockFeedProvider.mjs";
|
|
6
|
+
import { default as S } from "./modules/feed/hooks/useNotifications.mjs";
|
|
7
|
+
import { default as P } from "./modules/feed/hooks/useFeedSettings.mjs";
|
|
8
|
+
import { KnockSlackProvider as h, useKnockSlackClient as g } from "./modules/slack/context/KnockSlackProvider.mjs";
|
|
9
|
+
import { default as A } from "./modules/slack/hooks/useSlackConnectionStatus.mjs";
|
|
10
|
+
import { default as N } from "./modules/slack/hooks/useSlackChannels.mjs";
|
|
11
|
+
import { default as b } from "./modules/slack/hooks/useConnectedSlackChannels.mjs";
|
|
12
|
+
import { default as O } from "./modules/slack/hooks/useSlackAuth.mjs";
|
|
13
|
+
import { I18nContext as q, KnockI18nProvider as w } from "./modules/i18n/context/KnockI18nProvider.mjs";
|
|
14
|
+
import { useTranslations as D } from "./modules/i18n/hooks/useTranslations.mjs";
|
|
15
|
+
import { locales as G } from "./modules/i18n/languages/index.mjs";
|
|
11
16
|
export {
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
f as FilterStatus,
|
|
18
|
+
q as I18nContext,
|
|
14
19
|
x as KnockFeedProvider,
|
|
15
|
-
|
|
20
|
+
w as KnockI18nProvider,
|
|
16
21
|
r as KnockProvider,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
h as KnockSlackProvider,
|
|
23
|
+
u as feedProviderKey,
|
|
24
|
+
c as formatBadgeCount,
|
|
25
|
+
d as formatTimestamp,
|
|
26
|
+
G as locales,
|
|
27
|
+
m as renderNodeOrFallback,
|
|
28
|
+
i as slackProviderKey,
|
|
29
|
+
k as toSentenceCase,
|
|
30
|
+
n as useAuthenticatedKnockClient,
|
|
31
|
+
b as useConnectedSlackChannels,
|
|
32
|
+
P as useFeedSettings,
|
|
25
33
|
t as useKnockClient,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
C as useKnockFeed,
|
|
35
|
+
g as useKnockSlackClient,
|
|
36
|
+
S as useNotifications,
|
|
37
|
+
O as useSlackAuth,
|
|
38
|
+
N as useSlackChannels,
|
|
39
|
+
A as useSlackConnectionStatus,
|
|
40
|
+
D as useTranslations
|
|
29
41
|
};
|
|
30
42
|
//# 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,24 +1,24 @@
|
|
|
1
|
-
import { parseISO as
|
|
1
|
+
import { parseISO as o, intlFormatDistance as c } from "date-fns";
|
|
2
2
|
function u(e) {
|
|
3
3
|
return e > 9 ? "9+" : e;
|
|
4
4
|
}
|
|
5
|
-
function
|
|
5
|
+
function l(e, r = {}) {
|
|
6
6
|
try {
|
|
7
|
-
const t =
|
|
8
|
-
return
|
|
7
|
+
const t = o(e);
|
|
8
|
+
return c(t, /* @__PURE__ */ new Date(), {
|
|
9
9
|
locale: r.locale
|
|
10
10
|
});
|
|
11
11
|
} catch {
|
|
12
12
|
return e;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function d(e) {
|
|
16
16
|
return e.charAt(0).toUpperCase() + e.slice(1);
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function f(e, r) {
|
|
19
19
|
return e !== void 0 ? e : r;
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function m(e, r = {}) {
|
|
22
22
|
return [
|
|
23
23
|
e,
|
|
24
24
|
r.source,
|
|
@@ -27,11 +27,20 @@ function d(e, r = {}) {
|
|
|
27
27
|
r.archived
|
|
28
28
|
].filter((t) => t != null).join("-");
|
|
29
29
|
}
|
|
30
|
+
function s({
|
|
31
|
+
knockSlackChannelId: e,
|
|
32
|
+
tenant: r,
|
|
33
|
+
connectionStatus: t,
|
|
34
|
+
errorLabel: n
|
|
35
|
+
}) {
|
|
36
|
+
return [e, r, t, n].filter((a) => a != null).join("-");
|
|
37
|
+
}
|
|
30
38
|
export {
|
|
31
|
-
|
|
39
|
+
m as feedProviderKey,
|
|
32
40
|
u as formatBadgeCount,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
l as formatTimestamp,
|
|
42
|
+
f as renderNodeOrFallback,
|
|
43
|
+
s as slackProviderKey,
|
|
44
|
+
d as toSentenceCase
|
|
36
45
|
};
|
|
37
46
|
//# sourceMappingURL=utils.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../../../src/modules/core/utils.ts"],"sourcesContent":["import { FeedClientOptions } from \"@knocklabs/client\";\nimport {
|
|
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","slackProviderKey","knockSlackChannelId","tenant","connectionStatus","errorLabel"],"mappings":";AAIO,SAASA,EAAiBC,GAAgC;AACxD,SAAAA,IAAQ,IAAI,OAAOA;AAC5B;AAMO,SAASC,EACdC,GACAC,IAAkC,IAClC;AACI,MAAA;AACI,UAAAC,IAAWC,EAASH,CAAE;AAKrB,WAJWI,EAAmBF,GAAU,oBAAI,QAAQ;AAAA,MACzD,QAAQD,EAAQ;AAAA,IAAA,CACjB;AAAA,UAGS;AACH,WAAAD;AAAA,EACT;AACF;AAEO,SAASK,EAAeC,GAAwB;AAC9C,SAAAA,EAAO,OAAO,CAAC,EAAE,gBAAgBA,EAAO,MAAM,CAAC;AACxD;AAEgB,SAAAC,EAAqBC,GAAiBC,GAAqB;AAClE,SAAAD,MAAS,SAAYA,IAAOC;AACrC;AAMO,SAASC,EACdC,GACAV,IAA6B,IAC7B;AACO,SAAA;AAAA,IACLU;AAAA,IACAV,EAAQ;AAAA,IACRA,EAAQ;AAAA,IACRA,EAAQ;AAAA,IACRA,EAAQ;AAAA,EACV,EACG,OAAO,CAACW,MAAMA,KAAM,IAAuB,EAC3C,KAAK,GAAG;AACb;AAMO,SAASC,EAAiB;AAAA,EAC/B,qBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,YAAAC;AACF,GAKG;AACD,SAAO,CAACH,GAAqBC,GAAQC,GAAkBC,CAAU,EAC9D,OAAO,CAACL,MAAMA,KAAM,IAAuB,EAC3C,KAAK,GAAG;AACb;"}
|
|
@@ -8,7 +8,28 @@ const e = {
|
|
|
8
8
|
all: "Alle",
|
|
9
9
|
unread: "Ungelesen",
|
|
10
10
|
read: "Gelesen",
|
|
11
|
-
unseen: "Ungesehen"
|
|
11
|
+
unseen: "Ungesehen",
|
|
12
|
+
slackConnectChannel: "Kanal verbinden",
|
|
13
|
+
slackChannelId: "Slack Kanal ID",
|
|
14
|
+
slackConnecting: "Verbinden mit Slack...",
|
|
15
|
+
slackDisconnecting: "Trennen der Verbindung...",
|
|
16
|
+
slackConnect: "Mit Slack verbinden",
|
|
17
|
+
slackConnected: "Verbunden",
|
|
18
|
+
slackConnectContainerDescription: "Verbinden, um Benachrichtigungen in Ihrem Slack-Arbeitsbereich zu erhalten.",
|
|
19
|
+
slackSearchbarDisconnected: "Slack ist nicht verbunden.",
|
|
20
|
+
slackSearchbarMultipleChannels: "Mehrere Kanäle verbunden",
|
|
21
|
+
slackSearchbarNoChannelsConnected: "Suchkanäle",
|
|
22
|
+
slackSearchbarNoChannelsFound: "Keine schlaffen Kanäle.",
|
|
23
|
+
slackSearchbarChannelsError: "Fehler beim Abrufen von Kanälen.",
|
|
24
|
+
slackSearchChannels: "Suchkanäle",
|
|
25
|
+
slackConnectionErrorExists: "Versuchen Sie, sich erneut mit Slack zu verbinden, um Kanäle in Ihrem Arbeitsbereich zu finden und auszuwählen.",
|
|
26
|
+
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.",
|
|
27
|
+
slackChannelAlreadyConnected: "Fehler: bereits verbunden",
|
|
28
|
+
slackError: "Fehler",
|
|
29
|
+
slackDisconnect: "Trennen Sie die Verbindung.",
|
|
30
|
+
slackChannelSetError: "Fehlereinstellung Kanal.",
|
|
31
|
+
slackAccessTokenNotSet: "Zugriffstoken nicht gesetzt.",
|
|
32
|
+
slackReconnect: "Neu verbinden"
|
|
12
33
|
},
|
|
13
34
|
locale: "de"
|
|
14
35
|
};
|
|
@@ -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 },\n locale: \"de\",\n};\n\nexport default de;\n"],"names":["de"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eACE;AAAA,IACF,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;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"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eACE;AAAA,IACF,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,kCAAkC;AAAA,IAClC,4BAA4B;AAAA,IAC5B,gCAAiC;AAAA,IACjC,mCAAmC;AAAA,IACnC,+BAA+B;AAAA,IAC/B,6BAA6B;AAAA,IAC7B,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA,IAC9B,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,EAClB;AAAA,EACA,QAAQ;AACV;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const n = {
|
|
2
2
|
translations: {
|
|
3
3
|
archiveNotification: "Archive this notification",
|
|
4
4
|
markAllAsRead: "Mark all as read",
|
|
@@ -8,11 +8,32 @@ const e = {
|
|
|
8
8
|
all: "All",
|
|
9
9
|
unread: "Unread",
|
|
10
10
|
read: "Read",
|
|
11
|
-
unseen: "Unseen"
|
|
11
|
+
unseen: "Unseen",
|
|
12
|
+
slackConnectChannel: "Connect channel",
|
|
13
|
+
slackChannelId: "Slack channel ID",
|
|
14
|
+
slackConnecting: "Connecting to Slack...",
|
|
15
|
+
slackDisconnecting: "Disconnecting...",
|
|
16
|
+
slackConnect: "Connect to Slack",
|
|
17
|
+
slackConnected: "Connected",
|
|
18
|
+
slackConnectContainerDescription: "Connect to get notifications in your Slack workspace.",
|
|
19
|
+
slackSearchbarDisconnected: "Slack is not connected.",
|
|
20
|
+
slackSearchbarMultipleChannels: "Multiple channels connected",
|
|
21
|
+
slackSearchbarNoChannelsConnected: "Search channels",
|
|
22
|
+
slackSearchbarNoChannelsFound: "No slack channels.",
|
|
23
|
+
slackSearchbarChannelsError: "Error fetching channels.",
|
|
24
|
+
slackSearchChannels: "Search channels",
|
|
25
|
+
slackConnectionErrorExists: "Try reconnecting to Slack to find and select channels from your workspace.",
|
|
26
|
+
slackConnectionErrorOccurred: "There was an error connecting to Slack. Try reconnecting to find and select channels from your workspace.",
|
|
27
|
+
slackChannelAlreadyConnected: "Error: already connected",
|
|
28
|
+
slackError: "Error",
|
|
29
|
+
slackDisconnect: "Disconnect",
|
|
30
|
+
slackChannelSetError: "Error setting channel.",
|
|
31
|
+
slackAccessTokenNotSet: "Access token not set.",
|
|
32
|
+
slackReconnect: "Reconnect"
|
|
12
33
|
},
|
|
13
34
|
locale: "en"
|
|
14
35
|
};
|
|
15
36
|
export {
|
|
16
|
-
|
|
37
|
+
n as default
|
|
17
38
|
};
|
|
18
39
|
//# sourceMappingURL=en.mjs.map
|
|
@@ -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 },\n locale: \"en\",\n};\n\nexport default en;\n"],"names":["en"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;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"],"mappings":"AAEA,MAAMA,IAAkB;AAAA,EACtB,cAAc;AAAA,IACZ,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,kCAAkC;AAAA,IAClC,4BAA4B;AAAA,IAC5B,gCAAiC;AAAA,IACjC,mCAAmC;AAAA,IACnC,+BAA+B;AAAA,IAC/B,6BAA6B;AAAA,IAC7B,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA,IAC9B,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,EAClB;AAAA,EACA,QAAQ;AACV;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../src/modules/i18n/languages/index.ts"],"sourcesContent":["import
|
|
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":";;AA0Ca,MAAAA,IAAU,EAAE,IAAAC,GAAI,IAAAC,EAAG;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import C from "../hooks/useSlackConnectionStatus.mjs";
|
|
3
|
+
import { QueryClient as k, QueryClientProvider as v } from "@tanstack/react-query";
|
|
4
|
+
import * as i from "react";
|
|
5
|
+
import { useKnockClient as S } from "../../core/context/KnockProvider.mjs";
|
|
6
|
+
import "@knocklabs/client";
|
|
7
|
+
import { slackProviderKey as d } from "../../core/utils.mjs";
|
|
8
|
+
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
9
|
+
const f = new k(), c = i.createContext(null), E = ({
|
|
10
|
+
knockSlackChannelId: t,
|
|
11
|
+
tenant: o,
|
|
12
|
+
children: s
|
|
13
|
+
}) => {
|
|
14
|
+
const l = S(), {
|
|
15
|
+
connectionStatus: e,
|
|
16
|
+
setConnectionStatus: u,
|
|
17
|
+
errorLabel: r,
|
|
18
|
+
setErrorLabel: a,
|
|
19
|
+
actionLabel: m,
|
|
20
|
+
setActionLabel: p
|
|
21
|
+
} = C(l, t, o);
|
|
22
|
+
return /* @__PURE__ */ n(
|
|
23
|
+
c.Provider,
|
|
24
|
+
{
|
|
25
|
+
value: {
|
|
26
|
+
connectionStatus: e,
|
|
27
|
+
setConnectionStatus: u,
|
|
28
|
+
errorLabel: r,
|
|
29
|
+
setErrorLabel: a,
|
|
30
|
+
actionLabel: m,
|
|
31
|
+
setActionLabel: p,
|
|
32
|
+
knockSlackChannelId: t,
|
|
33
|
+
tenant: o
|
|
34
|
+
},
|
|
35
|
+
children: /* @__PURE__ */ n(v, { client: f, children: s })
|
|
36
|
+
},
|
|
37
|
+
d({
|
|
38
|
+
knockSlackChannelId: t,
|
|
39
|
+
tenant: o,
|
|
40
|
+
connectionStatus: e,
|
|
41
|
+
errorLabel: r
|
|
42
|
+
})
|
|
43
|
+
);
|
|
44
|
+
}, Q = () => {
|
|
45
|
+
const t = i.useContext(
|
|
46
|
+
c
|
|
47
|
+
);
|
|
48
|
+
if (t === void 0)
|
|
49
|
+
throw new Error(
|
|
50
|
+
"useKnockSlackClient must be used within a KnockSlackProvider"
|
|
51
|
+
);
|
|
52
|
+
return t;
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
E as KnockSlackProvider,
|
|
56
|
+
Q as useKnockSlackClient
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=KnockSlackProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnockSlackProvider.mjs","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"sourcesContent":["import { useSlackConnectionStatus } from \"..\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport * as React from \"react\";\n\nimport { slackProviderKey } from \"../../core\";\nimport { useKnockClient } from \"../../core\";\nimport { ConnectionStatus } from \"../hooks/useSlackConnectionStatus\";\n\nconst queryClient = new QueryClient();\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 children?: React.ReactElement;\n}\n\nexport const KnockSlackProvider: React.FC<KnockSlackProviderProps> = ({\n knockSlackChannelId,\n tenant,\n children,\n}) => {\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 <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\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":["queryClient","QueryClient","SlackProviderStateContext","React","KnockSlackProvider","knockSlackChannelId","tenant","children","knock","useKnockClient","connectionStatus","setConnectionStatus","errorLabel","setErrorLabel","actionLabel","setActionLabel","useSlackConnectionStatus","jsx","QueryClientProvider","slackProviderKey","useKnockSlackClient","context"],"mappings":";;;;;;;;AAQA,MAAMA,IAAc,IAAIC,KAalBC,IACJC,EAAM,cAA8C,IAAI,GAQ7CC,IAAwD,CAAC;AAAA,EACpE,qBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAQC,KAER;AAAA,IACJ,kBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,EACE,IAAAC,EAAyBR,GAAOH,GAAqBC,CAAM;AAG7D,SAAA,gBAAAW;AAAA,IAACf,EAA0B;AAAA,IAA1B;AAAA,MAOC,OAAO;AAAA,QACL,kBAAAQ;AAAA,QACA,qBAAAC;AAAA,QACA,YAAAC;AAAA,QACA,eAAAC;AAAA,QACA,aAAAC;AAAA,QACA,gBAAAC;AAAA,QACA,qBAAAV;AAAA,QACA,QAAAC;AAAA,MACF;AAAA,MAEA,UAAC,gBAAAW,EAAAC,GAAA,EAAoB,QAAQlB,GAAc,UAAAO,GAAS;AAAA,IAAA;AAAA,IAjB/CY,EAAiB;AAAA,MACpB,qBAAAd;AAAA,MACA,QAAAC;AAAA,MACA,kBAAAI;AAAA,MACA,YAAAE;AAAA,IAAA,CACD;AAAA,EAAA;AAeP,GAEaQ,IAAsB,MAA+B;AAChE,QAAMC,IAAUlB,EAAM;AAAA,IACpBD;AAAA,EAAA;AAEF,MAAImB,MAAY;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGG,SAAAA;AACT;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useKnockSlackClient as b } from "../context/KnockSlackProvider.mjs";
|
|
2
|
+
import { useState as t, useCallback as y, useEffect as E } from "react";
|
|
3
|
+
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
4
|
+
import { useTranslations as I } from "../../i18n/hooks/useTranslations.mjs";
|
|
5
|
+
import "@tanstack/react-query";
|
|
6
|
+
import { useKnockClient as j } from "../../core/context/KnockProvider.mjs";
|
|
7
|
+
import "@knocklabs/client";
|
|
8
|
+
import "date-fns";
|
|
9
|
+
function T({
|
|
10
|
+
slackChannelsRecipientObject: { objectId: e, collection: a }
|
|
11
|
+
}) {
|
|
12
|
+
const { t: g } = I(), o = j(), { connectionStatus: h, knockSlackChannelId: c } = b(), [s, l] = t(null), [i, d] = t(null), [C, r] = t(!1), [S, f] = t(!1), u = y(() => {
|
|
13
|
+
r(!0), (async () => await o.objects.getChannelData({
|
|
14
|
+
collection: a,
|
|
15
|
+
objectId: e,
|
|
16
|
+
channelId: c
|
|
17
|
+
}))().then((n) => {
|
|
18
|
+
var k, m;
|
|
19
|
+
(k = n == null ? void 0 : n.data) != null && k.connections ? l((m = n == null ? void 0 : n.data) == null ? void 0 : m.connections) : l([]), d(null), r(!1);
|
|
20
|
+
}).catch(() => {
|
|
21
|
+
l([]), d(null), r(!1);
|
|
22
|
+
});
|
|
23
|
+
}, [a, o.objects, c, e]);
|
|
24
|
+
return E(() => {
|
|
25
|
+
h === "connected" && !s && !i && !C && u();
|
|
26
|
+
}, [
|
|
27
|
+
s,
|
|
28
|
+
u,
|
|
29
|
+
C,
|
|
30
|
+
i,
|
|
31
|
+
h
|
|
32
|
+
]), {
|
|
33
|
+
data: s,
|
|
34
|
+
updateConnectedChannels: async (p) => {
|
|
35
|
+
f(!0);
|
|
36
|
+
try {
|
|
37
|
+
await o.objects.setChannelData({
|
|
38
|
+
objectId: e,
|
|
39
|
+
collection: a,
|
|
40
|
+
channelId: c,
|
|
41
|
+
data: { connections: p }
|
|
42
|
+
}), u();
|
|
43
|
+
} catch {
|
|
44
|
+
d(g("slackChannelSetError") || "");
|
|
45
|
+
}
|
|
46
|
+
f(!1);
|
|
47
|
+
},
|
|
48
|
+
updating: S,
|
|
49
|
+
loading: C,
|
|
50
|
+
error: i
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
T as default
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=useConnectedSlackChannels.mjs.map
|
|
@@ -0,0 +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","_a","_b","useEffect","channelsToSendToKnock"],"mappings":";;;;;;;;AAqBA,SAASA,EAA0B;AAAA,EACjC,8BAA8B,EAAE,UAAAC,GAAU,YAAAC,EAAW;AACvD,GAAiD;AACzC,QAAA,EAAE,GAAAC,MAAMC,KACRC,IAAQC,KACR,EAAE,kBAAAC,GAAkB,qBAAAC,EAAoB,IAAIC,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;AACrD,IAAAJ,EAAa,EAAI,IACY,YAC3B,MAAMX,EAAM,QAAQ,eAAe;AAAA,MACjC,YAAAH;AAAA,MACA,UAAAD;AAAA,MACA,WAAWO;AAAA,IAAA,CACZ,GAEkB,EAClB,KAAK,CAACa,MAAQ;;AACT,OAAAC,IAAAD,KAAA,gBAAAA,EAAK,SAAL,QAAAC,EAAW,cACQX,GAAAY,IAAAF,KAAA,gBAAAA,EAAK,SAAL,gBAAAE,EAAW,WAAW,IAE3CZ,EAAqB,CAAE,CAAA,GAEzBG,EAAS,IAAI,GACbE,EAAa,EAAK;AAAA,IAAA,CACnB,EACA,MAAM,MAAM;AACX,MAAAL,EAAqB,CAAE,CAAA,GACvBG,EAAS,IAAI,GACbE,EAAa,EAAK;AAAA,IAAA,CACnB;AAAA,EAAA,GACF,CAACd,GAAYG,EAAM,SAASG,GAAqBP,CAAQ,CAAC;AAE7D,SAAAuB,EAAU,MAAM;AACd,IACEjB,MAAqB,eACrB,CAACG,KACD,CAACG,KACD,CAACE,KAE4BI;EAC/B,GACC;AAAA,IACDT;AAAA,IACAS;AAAA,IACAJ;AAAA,IACAF;AAAA,IACAN;AAAA,EAAA,CACD,GAoBM;AAAA,IACL,MAAMG;AAAA,IACN,yBApB8B,OAC9Be,MACG;AACH,MAAAP,EAAc,EAAI;AACd,UAAA;AACI,cAAAb,EAAM,QAAQ,eAAe;AAAA,UACjC,UAAAJ;AAAA,UACA,YAAAC;AAAA,UACA,WAAWM;AAAA,UACX,MAAM,EAAE,aAAaiB,EAAsB;AAAA,QAAA,CAC5C,GAC4BN;cACf;AACL,QAAAL,EAAAX,EAAE,sBAAsB,KAAK,EAAE;AAAA,MAC1C;AACA,MAAAe,EAAc,EAAK;AAAA,IAAA;AAAA,IAMnB,UAAUD;AAAA,IACV,SAASF;AAAA,IACT,OAAAF;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { useKnockSlackClient as k } from "../context/KnockSlackProvider.mjs";
|
|
2
|
+
import { useCallback as i } from "react";
|
|
3
|
+
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
4
|
+
import "@tanstack/react-query";
|
|
5
|
+
import { useKnockClient as u } from "../../core/context/KnockProvider.mjs";
|
|
6
|
+
import { TENANT_OBJECT_COLLECTION as m } from "@knocklabs/client";
|
|
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
|
+
];
|
|
14
|
+
function L(r, a) {
|
|
15
|
+
const e = u(), { setConnectionStatus: t, knockSlackChannelId: o, tenant: c, setActionLabel: s } = k(), l = i(async () => {
|
|
16
|
+
s(null), t("disconnecting");
|
|
17
|
+
try {
|
|
18
|
+
const n = await e.slack.revokeAccessToken({
|
|
19
|
+
tenant: c,
|
|
20
|
+
knockChannelId: o
|
|
21
|
+
});
|
|
22
|
+
t(n === "ok" ? "disconnected" : "error");
|
|
23
|
+
} catch {
|
|
24
|
+
t("error");
|
|
25
|
+
}
|
|
26
|
+
}, [
|
|
27
|
+
t,
|
|
28
|
+
e.slack,
|
|
29
|
+
c,
|
|
30
|
+
o,
|
|
31
|
+
s
|
|
32
|
+
]);
|
|
33
|
+
return {
|
|
34
|
+
buildSlackAuthUrl: i(() => {
|
|
35
|
+
const n = {
|
|
36
|
+
state: JSON.stringify({
|
|
37
|
+
redirect_url: a,
|
|
38
|
+
access_token_object: {
|
|
39
|
+
object_id: c,
|
|
40
|
+
collection: m
|
|
41
|
+
},
|
|
42
|
+
channel_id: o,
|
|
43
|
+
public_key: e.apiKey,
|
|
44
|
+
user_token: e.userToken
|
|
45
|
+
}),
|
|
46
|
+
client_id: r,
|
|
47
|
+
scope: h.join(",")
|
|
48
|
+
};
|
|
49
|
+
return `${p}?${new URLSearchParams(n)}`;
|
|
50
|
+
}, [
|
|
51
|
+
a,
|
|
52
|
+
c,
|
|
53
|
+
o,
|
|
54
|
+
e.apiKey,
|
|
55
|
+
e.userToken,
|
|
56
|
+
r
|
|
57
|
+
]),
|
|
58
|
+
disconnectFromSlack: l
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
L as default
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=useSlackAuth.mjs.map
|
|
@@ -0,0 +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;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOA,SAASC,EACPC,GACAC,GACoB;AACpB,QAAMC,IAAQC,KACR,EAAE,qBAAAC,GAAqB,qBAAAC,GAAqB,QAAAC,GAAQ,gBAAAC,EAAA,IACxDC,KAEIC,IAAsBC,EAAY,YAAY;AAClD,IAAAH,EAAe,IAAI,GACnBH,EAAoB,eAAe;AAC/B,QAAA;AACF,YAAMO,IAAS,MAAMT,EAAM,MAAM,kBAAkB;AAAA,QACjD,QAAAI;AAAA,QACA,gBAAgBD;AAAA,MAAA,CACjB;AAED,MACED,EADEO,MAAW,OACO,iBAEA,OAFc;AAAA,YAItB;AACd,MAAAP,EAAoB,OAAO;AAAA,IAC7B;AAAA,EAAA,GACC;AAAA,IACDA;AAAA,IACAF,EAAM;AAAA,IACNI;AAAA,IACAD;AAAA,IACAE;AAAA,EAAA,CACD;AA2BM,SAAA;AAAA,IACL,mBA1BwBG,EAAY,MAAM;AAC1C,YAAME,IAAY;AAAA,QAChB,OAAO,KAAK,UAAU;AAAA,UACpB,cAAcX;AAAA,UACd,qBAAqB;AAAA,YACnB,WAAWK;AAAA,YACX,YAAYO;AAAA,UACd;AAAA,UACA,YAAYR;AAAA,UACZ,YAAYH,EAAM;AAAA,UAClB,YAAYA,EAAM;AAAA,QAAA,CACnB;AAAA,QACD,WAAWF;AAAA,QACX,OAAOF,EAAqB,KAAK,GAAG;AAAA,MAAA;AAEtC,aAAO,GAAGD,CAAmB,IAAI,IAAI,gBAAgBe,CAAS,CAAC;AAAA,IAAA,GAC9D;AAAA,MACDX;AAAA,MACAK;AAAA,MACAD;AAAA,MACAH,EAAM;AAAA,MACNA,EAAM;AAAA,MACNF;AAAA,IAAA,CACD;AAAA,IAIC,qBAAAS;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useKnockSlackClient as s } from "../context/KnockSlackProvider.mjs";
|
|
2
|
+
import { useMemo as N, useEffect as E } from "react";
|
|
3
|
+
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
4
|
+
import { useInfiniteQuery as I } from "@tanstack/react-query";
|
|
5
|
+
import { useKnockClient as S } from "../../core/context/KnockProvider.mjs";
|
|
6
|
+
import "@knocklabs/client";
|
|
7
|
+
import "date-fns";
|
|
8
|
+
const M = 1e3, d = 200, A = "private_channel,public_channel";
|
|
9
|
+
function G({
|
|
10
|
+
queryOptions: c
|
|
11
|
+
}) {
|
|
12
|
+
const k = S(), { knockSlackChannelId: C, tenant: _, connectionStatus: r } = s(), u = ({ pageParam: n }) => k.slack.getChannels({
|
|
13
|
+
tenant: _,
|
|
14
|
+
knockChannelId: C,
|
|
15
|
+
queryOptions: {
|
|
16
|
+
...c,
|
|
17
|
+
cursor: n,
|
|
18
|
+
limit: (c == null ? void 0 : c.limitPerPage) || d,
|
|
19
|
+
types: (c == null ? void 0 : c.types) || A
|
|
20
|
+
}
|
|
21
|
+
}), {
|
|
22
|
+
data: t,
|
|
23
|
+
isLoading: x,
|
|
24
|
+
isFetching: m,
|
|
25
|
+
fetchNextPage: f,
|
|
26
|
+
hasNextPage: i,
|
|
27
|
+
refetch: a,
|
|
28
|
+
error: h
|
|
29
|
+
} = I({
|
|
30
|
+
queryKey: ["slackChannels"],
|
|
31
|
+
queryFn: u,
|
|
32
|
+
initialPageParam: "",
|
|
33
|
+
getNextPageParam: (n) => (n == null ? void 0 : n.next_cursor) === "" ? null : n == null ? void 0 : n.next_cursor
|
|
34
|
+
}), e = N(() => {
|
|
35
|
+
var n;
|
|
36
|
+
return ((n = t == null ? void 0 : t.pages) == null ? void 0 : n.flatMap((o) => o == null ? void 0 : o.slack_channels).filter((o) => !!o)) || [];
|
|
37
|
+
}, [t == null ? void 0 : t.pages]), l = (c == null ? void 0 : c.maxCount) || M;
|
|
38
|
+
return E(() => {
|
|
39
|
+
r === "connected" && !h && i && !m && (e == null ? void 0 : e.length) < l && f();
|
|
40
|
+
}, [
|
|
41
|
+
e == null ? void 0 : e.length,
|
|
42
|
+
f,
|
|
43
|
+
i,
|
|
44
|
+
m,
|
|
45
|
+
l,
|
|
46
|
+
h,
|
|
47
|
+
r
|
|
48
|
+
]), { data: e, isLoading: x, refetch: a };
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
G as default
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=useSlackChannels.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackChannels.mjs","sources":["../../../../../src/modules/slack/hooks/useSlackChannels.ts"],"sourcesContent":["import { SlackChannelQueryOptions, useKnockSlackClient } from \"..\";\nimport { SlackChannel } from \"@knocklabs/client\";\nimport { useInfiniteQuery } from \"@tanstack/react-query\";\nimport { useEffect, useMemo } from \"react\";\n\nimport { useKnockClient } from \"../../core\";\n\nconst MAX_COUNT = 1000;\nconst LIMIT_PER_PAGE = 200;\nconst CHANNEL_TYPES = \"private_channel,public_channel\";\n\ntype UseSlackChannelsProps = {\n queryOptions?: SlackChannelQueryOptions;\n};\n\ntype UseSlackChannelOutput = {\n data: SlackChannel[];\n isLoading: boolean;\n refetch: () => void;\n};\n\nfunction useSlackChannels({\n queryOptions,\n}: UseSlackChannelsProps): UseSlackChannelOutput {\n const knock = useKnockClient();\n const { knockSlackChannelId, tenant, connectionStatus } =\n useKnockSlackClient();\n\n const fetchChannels = ({ pageParam }: { pageParam: string }) => {\n return knock.slack.getChannels({\n tenant,\n knockChannelId: knockSlackChannelId,\n queryOptions: {\n ...queryOptions,\n cursor: pageParam,\n limit: queryOptions?.limitPerPage || LIMIT_PER_PAGE,\n types: queryOptions?.types || CHANNEL_TYPES,\n },\n });\n };\n\n const {\n data,\n isLoading,\n isFetching,\n fetchNextPage,\n hasNextPage,\n refetch,\n error,\n } = useInfiniteQuery({\n queryKey: [\"slackChannels\"],\n queryFn: fetchChannels,\n initialPageParam: \"\",\n getNextPageParam: (lastPage) =>\n lastPage?.next_cursor === \"\" ? null : lastPage?.next_cursor,\n });\n\n const slackChannels = useMemo(() => {\n return (\n data?.pages\n ?.flatMap((page) => page?.slack_channels)\n .filter((channel) => !!channel) || []\n );\n }, [data?.pages]);\n\n const maxCount = queryOptions?.maxCount || MAX_COUNT;\n\n useEffect(() => {\n if (\n connectionStatus === \"connected\" &&\n !error &&\n hasNextPage &&\n !isFetching &&\n slackChannels?.length < maxCount\n ) {\n fetchNextPage();\n }\n }, [\n slackChannels?.length,\n fetchNextPage,\n hasNextPage,\n isFetching,\n maxCount,\n error,\n connectionStatus,\n ]);\n\n return { data: slackChannels, isLoading, refetch };\n}\n\nexport default useSlackChannels;\n"],"names":["MAX_COUNT","LIMIT_PER_PAGE","CHANNEL_TYPES","useSlackChannels","queryOptions","knock","useKnockClient","knockSlackChannelId","tenant","connectionStatus","useKnockSlackClient","fetchChannels","pageParam","data","isLoading","isFetching","fetchNextPage","hasNextPage","refetch","error","useInfiniteQuery","lastPage","slackChannels","useMemo","_a","page","channel","maxCount","useEffect"],"mappings":";;;;;;;AAOA,MAAMA,IAAY,KACZC,IAAiB,KACjBC,IAAgB;AAYtB,SAASC,EAAiB;AAAA,EACxB,cAAAC;AACF,GAAiD;AAC/C,QAAMC,IAAQC,KACR,EAAE,qBAAAC,GAAqB,QAAAC,GAAQ,kBAAAC,MACnCC,EAAoB,GAEhBC,IAAgB,CAAC,EAAE,WAAAC,QAChBP,EAAM,MAAM,YAAY;AAAA,IAC7B,QAAAG;AAAA,IACA,gBAAgBD;AAAA,IAChB,cAAc;AAAA,MACZ,GAAGH;AAAA,MACH,QAAQQ;AAAA,MACR,QAAOR,KAAA,gBAAAA,EAAc,iBAAgBH;AAAA,MACrC,QAAOG,KAAA,gBAAAA,EAAc,UAASF;AAAA,IAChC;AAAA,EAAA,CACD,GAGG;AAAA,IACJ,MAAAW;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,MACEC,EAAiB;AAAA,IACnB,UAAU,CAAC,eAAe;AAAA,IAC1B,SAAST;AAAA,IACT,kBAAkB;AAAA,IAClB,kBAAkB,CAACU,OACjBA,KAAA,gBAAAA,EAAU,iBAAgB,KAAK,OAAOA,KAAA,gBAAAA,EAAU;AAAA,EAAA,CACnD,GAEKC,IAAgBC,EAAQ,MAAM;;AAClC,aACEC,IAAAX,KAAA,gBAAAA,EAAM,UAAN,gBAAAW,EACI,QAAQ,CAACC,MAASA,KAAA,gBAAAA,EAAM,gBACzB,OAAO,CAACC,MAAY,CAAC,CAACA,OAAY,CAAA;AAAA,EAAC,GAEvC,CAACb,KAAA,gBAAAA,EAAM,KAAK,CAAC,GAEVc,KAAWvB,KAAA,gBAAAA,EAAc,aAAYJ;AAE3C,SAAA4B,EAAU,MAAM;AAEZ,IAAAnB,MAAqB,eACrB,CAACU,KACDF,KACA,CAACF,MACDO,KAAA,gBAAAA,EAAe,UAASK,KAEVX;EAChB,GACC;AAAA,IACDM,KAAA,gBAAAA,EAAe;AAAA,IACfN;AAAA,IACAC;AAAA,IACAF;AAAA,IACAY;AAAA,IACAR;AAAA,IACAV;AAAA,EAAA,CACD,GAEM,EAAE,MAAMa,GAAe,WAAAR,GAAW,SAAAI,EAAQ;AACnD;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useState as s, useEffect as E } from "react";
|
|
2
|
+
import "../../i18n/context/KnockI18nProvider.mjs";
|
|
3
|
+
import { useTranslations as g } from "../../i18n/hooks/useTranslations.mjs";
|
|
4
|
+
const A = (o) => {
|
|
5
|
+
const n = o.substring(0, 1).toUpperCase(), r = o.substring(1);
|
|
6
|
+
return n == null ? void 0 : n.concat(r).replace("_", " ");
|
|
7
|
+
};
|
|
8
|
+
function _(o, n, r) {
|
|
9
|
+
const { t: a } = g(), [c, e] = s("connecting"), [p, u] = s(null), [b, m] = s(null);
|
|
10
|
+
return E(() => {
|
|
11
|
+
(async () => {
|
|
12
|
+
var i, l, f, S, h, k;
|
|
13
|
+
if (c === "connecting")
|
|
14
|
+
try {
|
|
15
|
+
const t = await o.slack.authCheck({
|
|
16
|
+
tenant: r,
|
|
17
|
+
knockChannelId: n
|
|
18
|
+
});
|
|
19
|
+
if ((i = t.connection) != null && i.ok)
|
|
20
|
+
return e("connected");
|
|
21
|
+
if (t.code === "ERR_BAD_REQUEST" && ((f = (l = t.response) == null ? void 0 : l.data) == null ? void 0 : f.message) === a("slackAccessTokenNotSet"))
|
|
22
|
+
return e("disconnected");
|
|
23
|
+
if (!((S = t.connection) != null && S.ok) && ((h = t.connection) != null && h.error)) {
|
|
24
|
+
const d = A((k = t.connection) == null ? void 0 : k.error);
|
|
25
|
+
u(d), e("error");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
e("error");
|
|
29
|
+
} catch {
|
|
30
|
+
e("error");
|
|
31
|
+
}
|
|
32
|
+
})();
|
|
33
|
+
}, [c, r, n, o.slack, a]), {
|
|
34
|
+
connectionStatus: c,
|
|
35
|
+
setConnectionStatus: e,
|
|
36
|
+
errorLabel: p,
|
|
37
|
+
setErrorLabel: u,
|
|
38
|
+
actionLabel: b,
|
|
39
|
+
setActionLabel: m
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
_ as default
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=useSlackConnectionStatus.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackConnectionStatus.mjs","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 // 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","rest","useSlackConnectionStatus","knock","knockSlackChannelId","tenant","t","useTranslations","connectionStatus","setConnectionStatus","useState","errorLabel","setErrorLabel","actionLabel","setActionLabel","useEffect","authRes","_a","_c","_b","_d","_e","_f"],"mappings":";;;AA2BA,MAAMA,IAA0B,CAACC,MAAyB;AACxD,QAAMC,IAAcD,EAAa,UAAU,GAAG,CAAC,EAAE,eAC3CE,IAAOF,EAAa,UAAU,CAAC;AACrC,SAAOC,KAAA,gBAAAA,EAAa,OAAOC,GAAM,QAAQ,KAAK;AAChD;AAEA,SAASC,EACPC,GACAC,GACAC,GACgC;AAC1B,QAAA,EAAE,GAAAC,MAAMC,KACR,CAACC,GAAkBC,CAAmB,IAC1CC,EAA2B,YAAY,GACnC,CAACC,GAAYC,CAAa,IAAIF,EAAwB,IAAI,GAC1D,CAACG,GAAaC,CAAc,IAAIJ,EAAwB,IAAI;AAElE,SAAAK,EAAU,MAAM;AAwCE,KAvCQ,YAAY;;AAClC,UAAIP,MAAqB;AAErB,YAAA;AACF,gBAAMQ,IAAU,MAAMb,EAAM,MAAM,UAAU;AAAA,YAC1C,QAAAE;AAAA,YACA,gBAAgBD;AAAA,UAAA,CACjB;AAEG,eAAAa,IAAAD,EAAQ,eAAR,QAAAC,EAAoB;AACtB,mBAAOR,EAAoB,WAAW;AAOtC,cAAAO,EAAQ,SAAS,uBACjBE,KAAAC,IAAAH,EAAQ,aAAR,gBAAAG,EAAkB,SAAlB,gBAAAD,EAAwB,aAAYZ,EAAE,wBAAwB;AAE9D,mBAAOG,EAAoB,cAAc;AAI3C,cAAI,GAACW,IAAAJ,EAAQ,eAAR,QAAAI,EAAoB,SAAMC,IAAAL,EAAQ,eAAR,QAAAK,EAAoB,QAAO;AACxD,kBAAMV,IAAab,GAAwBwB,IAAAN,EAAQ,eAAR,gBAAAM,EAAoB,KAAK;AACpE,YAAAV,EAAcD,CAAU,GACxBF,EAAoB,OAAO;AAC3B;AAAA,UACF;AAIA,UAAAA,EAAoB,OAAO;AAAA,gBACb;AACd,UAAAA,EAAoB,OAAO;AAAA,QAC7B;AAAA,IAAA;EAGc,GACf,CAACD,GAAkBH,GAAQD,GAAqBD,EAAM,OAAOG,CAAC,CAAC,GAE3D;AAAA,IACL,kBAAAE;AAAA,IACA,qBAAAC;AAAA,IACA,YAAAE;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA;AAEJ;"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -8,5 +8,11 @@ export declare function formatTimestamp(ts: string, options?: FormatTimestampOpt
|
|
|
8
8
|
export declare function toSentenceCase(string: string): string;
|
|
9
9
|
export declare function renderNodeOrFallback(node: ReactNode, fallback: ReactNode): ReactNode;
|
|
10
10
|
export declare function feedProviderKey(userFeedId: string, options?: FeedClientOptions): string;
|
|
11
|
+
export declare function slackProviderKey({ knockSlackChannelId, tenant, connectionStatus, errorLabel, }: {
|
|
12
|
+
knockSlackChannelId: string;
|
|
13
|
+
tenant: string;
|
|
14
|
+
connectionStatus: string;
|
|
15
|
+
errorLabel: string | null;
|
|
16
|
+
}): string;
|
|
11
17
|
export {};
|
|
12
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/modules/core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE/D;AAED,KAAK,sBAAsB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,sBAA2B,UAYrC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,aAExE;AAMD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,UAWhC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/modules/core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE/D;AAED,KAAK,sBAAsB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,sBAA2B,UAYrC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,aAExE;AAMD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,UAWhC;AAMD,wBAAgB,gBAAgB,CAAC,EAC/B,mBAAmB,EACnB,MAAM,EACN,gBAAgB,EAChB,UAAU,GACX,EAAE;IACD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,UAIA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/de.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,QAAA,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/de.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,QAAA,MAAM,EAAE,EAAE,WAmCT,CAAC;AAEF,eAAe,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,QAAA,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,QAAA,MAAM,EAAE,EAAE,WAkCT,CAAC;AAEF,eAAe,EAAE,CAAC"}
|
|
@@ -9,6 +9,27 @@ export interface Translations {
|
|
|
9
9
|
readonly unread: string;
|
|
10
10
|
readonly read: string;
|
|
11
11
|
readonly unseen: string;
|
|
12
|
+
readonly slackConnectChannel: string;
|
|
13
|
+
readonly slackChannelId: string;
|
|
14
|
+
readonly slackConnecting: string;
|
|
15
|
+
readonly slackDisconnecting: string;
|
|
16
|
+
readonly slackConnect: string;
|
|
17
|
+
readonly slackConnected: string;
|
|
18
|
+
readonly slackConnectContainerDescription: string;
|
|
19
|
+
readonly slackSearchbarDisconnected: string;
|
|
20
|
+
readonly slackSearchbarMultipleChannels: string;
|
|
21
|
+
readonly slackSearchbarNoChannelsConnected: string;
|
|
22
|
+
readonly slackSearchbarNoChannelsFound: string;
|
|
23
|
+
readonly slackSearchbarChannelsError: string;
|
|
24
|
+
readonly slackSearchChannels: string;
|
|
25
|
+
readonly slackConnectionErrorOccurred: string;
|
|
26
|
+
readonly slackConnectionErrorExists: string;
|
|
27
|
+
readonly slackChannelAlreadyConnected: string;
|
|
28
|
+
readonly slackError: string;
|
|
29
|
+
readonly slackDisconnect: string;
|
|
30
|
+
readonly slackChannelSetError: string;
|
|
31
|
+
readonly slackAccessTokenNotSet: string;
|
|
32
|
+
readonly slackReconnect: string;
|
|
12
33
|
}
|
|
13
34
|
export interface I18nContent {
|
|
14
35
|
readonly translations: Partial<Translations>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/i18n/languages/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;IAClD,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,8BAA8B,EAAE,MAAM,CAAC;IAChD,QAAQ,CAAC,iCAAiC,EAAE,MAAM,CAAC;IACnD,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,OAAO;;;CAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ContainerObject = {
|
|
2
|
+
objectId: string;
|
|
3
|
+
collection: string;
|
|
4
|
+
};
|
|
5
|
+
export type SlackChannelQueryOptions = {
|
|
6
|
+
maxCount?: number;
|
|
7
|
+
limitPerPage?: number;
|
|
8
|
+
excludeArchived?: boolean;
|
|
9
|
+
types?: string;
|
|
10
|
+
teamId?: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/modules/slack/constants.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ConnectionStatus } from "../hooks/useSlackConnectionStatus";
|
|
3
|
+
export interface KnockSlackProviderState {
|
|
4
|
+
knockSlackChannelId: string;
|
|
5
|
+
tenant: string;
|
|
6
|
+
connectionStatus: ConnectionStatus;
|
|
7
|
+
setConnectionStatus: (connectionStatus: ConnectionStatus) => void;
|
|
8
|
+
errorLabel: string | null;
|
|
9
|
+
setErrorLabel: (label: string) => void;
|
|
10
|
+
actionLabel: string | null;
|
|
11
|
+
setActionLabel: (label: string | null) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface KnockSlackProviderProps {
|
|
14
|
+
knockSlackChannelId: string;
|
|
15
|
+
tenant: string;
|
|
16
|
+
children?: React.ReactElement;
|
|
17
|
+
}
|
|
18
|
+
export declare const KnockSlackProvider: React.FC<KnockSlackProviderProps>;
|
|
19
|
+
export declare const useKnockSlackClient: () => KnockSlackProviderState;
|
|
20
|
+
//# sourceMappingURL=KnockSlackProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnockSlackProvider.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/context/KnockSlackProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAKD,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAsChE,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,uBAUtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as useSlackConnectionStatus } from "./useSlackConnectionStatus";
|
|
2
|
+
export { default as useSlackChannels } from "./useSlackChannels";
|
|
3
|
+
export { default as useConnectedSlackChannels } from "./useConnectedSlackChannels";
|
|
4
|
+
export { default as useSlackAuth } from "./useSlackAuth";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ContainerObject } from "..";
|
|
2
|
+
import { SlackChannelConnection } from "@knocklabs/client";
|
|
3
|
+
type UseSlackChannelsProps = {
|
|
4
|
+
slackChannelsRecipientObject: ContainerObject;
|
|
5
|
+
};
|
|
6
|
+
type UseSlackChannelOutput = {
|
|
7
|
+
data: SlackChannelConnection[] | null;
|
|
8
|
+
updateConnectedChannels: (connectedChannels: SlackChannelConnection[]) => void;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
error: string | null;
|
|
11
|
+
updating: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare function useConnectedSlackChannels({ slackChannelsRecipientObject: { objectId, collection }, }: UseSlackChannelsProps): UseSlackChannelOutput;
|
|
14
|
+
export default useConnectedSlackChannels;
|
|
15
|
+
//# sourceMappingURL=useConnectedSlackChannels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConnectedSlackChannels.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/hooks/useConnectedSlackChannels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAM3D,KAAK,qBAAqB,GAAG;IAC3B,4BAA4B,EAAE,eAAe,CAAC;CAC/C,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC;IACtC,uBAAuB,EAAE,CACvB,iBAAiB,EAAE,sBAAsB,EAAE,KACxC,IAAI,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,iBAAS,yBAAyB,CAAC,EACjC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GACvD,EAAE,qBAAqB,GAAG,qBAAqB,CA+E/C;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type UseSlackAuthOutput = {
|
|
2
|
+
buildSlackAuthUrl: () => string;
|
|
3
|
+
disconnectFromSlack: () => void;
|
|
4
|
+
};
|
|
5
|
+
declare function useSlackAuth(slackClientId: string, redirectUrl?: string): UseSlackAuthOutput;
|
|
6
|
+
export default useSlackAuth;
|
|
7
|
+
//# sourceMappingURL=useSlackAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackAuth.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/hooks/useSlackAuth.ts"],"names":[],"mappings":"AAcA,KAAK,kBAAkB,GAAG;IACxB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AAEF,iBAAS,YAAY,CACnB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CA2DpB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SlackChannelQueryOptions } from "..";
|
|
2
|
+
import { SlackChannel } from "@knocklabs/client";
|
|
3
|
+
type UseSlackChannelsProps = {
|
|
4
|
+
queryOptions?: SlackChannelQueryOptions;
|
|
5
|
+
};
|
|
6
|
+
type UseSlackChannelOutput = {
|
|
7
|
+
data: SlackChannel[];
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
refetch: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare function useSlackChannels({ queryOptions, }: UseSlackChannelsProps): UseSlackChannelOutput;
|
|
12
|
+
export default useSlackChannels;
|
|
13
|
+
//# sourceMappingURL=useSlackChannels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackChannels.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/hooks/useSlackChannels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAuB,MAAM,IAAI,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUjD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,iBAAS,gBAAgB,CAAC,EACxB,YAAY,GACb,EAAE,qBAAqB,GAAG,qBAAqB,CAiE/C;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Knock from "@knocklabs/client";
|
|
2
|
+
export type ConnectionStatus = "connecting" | "connected" | "disconnected" | "error" | "disconnecting";
|
|
3
|
+
type UseSlackConnectionStatusOutput = {
|
|
4
|
+
connectionStatus: ConnectionStatus;
|
|
5
|
+
setConnectionStatus: (status: ConnectionStatus) => void;
|
|
6
|
+
errorLabel: string | null;
|
|
7
|
+
setErrorLabel: (errorLabel: string) => void;
|
|
8
|
+
actionLabel: string | null;
|
|
9
|
+
setActionLabel: (actionLabel: string | null) => void;
|
|
10
|
+
};
|
|
11
|
+
declare function useSlackConnectionStatus(knock: Knock, knockSlackChannelId: string, tenant: string): UseSlackConnectionStatusOutput;
|
|
12
|
+
export default useSlackConnectionStatus;
|
|
13
|
+
//# sourceMappingURL=useSlackConnectionStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlackConnectionStatus.d.ts","sourceRoot":"","sources":["../../../../../src/modules/slack/hooks/useSlackConnectionStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AAKtC,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,WAAW,GACX,cAAc,GACd,OAAO,GACP,eAAe,CAAC;AAEpB,KAAK,8BAA8B,GAAG;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACtD,CAAC;AAcF,iBAAS,wBAAwB,CAC/B,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,GACb,8BAA8B,CA0DhC;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/slack/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAA"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@knocklabs/react-core",
|
|
3
3
|
"description": "A set of React components to build notification experiences powered by Knock",
|
|
4
4
|
"author": "@knocklabs",
|
|
5
|
-
"version": "0.1
|
|
5
|
+
"version": "0.2.1",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/cjs/index.js",
|
|
8
8
|
"module": "dist/esm/index.mjs",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"react": ">=16.8.0"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@knocklabs/client": "^0.
|
|
48
|
+
"@knocklabs/client": "^0.9.1",
|
|
49
|
+
"@tanstack/react-query": "^5.18.1",
|
|
49
50
|
"date-fns": "^3.3.1",
|
|
50
51
|
"zustand": "^3.7.2"
|
|
51
52
|
},
|