@knocklabs/react-core 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -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/en.js +1 -1
- package/dist/cjs/modules/i18n/languages/en.js.map +1 -1
- package/dist/cjs/modules/i18n/languages/index.js.map +1 -1
- package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js +1 -1
- package/dist/cjs/modules/ms-teams/context/KnockMsTeamsProvider.js.map +1 -1
- package/dist/cjs/modules/ms-teams/hooks/useConnectedMsTeamsChannels.js +2 -0
- package/dist/cjs/modules/ms-teams/hooks/useConnectedMsTeamsChannels.js.map +1 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js +1 -1
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsAuth.js.map +1 -1
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsChannels.js +2 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsChannels.js.map +1 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsTeams.js +2 -0
- package/dist/cjs/modules/ms-teams/hooks/useMsTeamsTeams.js.map +1 -0
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js +1 -1
- package/dist/cjs/modules/slack/context/KnockSlackProvider.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js +1 -1
- package/dist/cjs/modules/slack/hooks/useConnectedSlackChannels.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackAuth.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackChannels.js +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackChannels.js.map +1 -1
- package/dist/cjs/modules/slack/hooks/useSlackConnectionStatus.js.map +1 -1
- package/dist/esm/index.mjs +36 -30
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/modules/core/utils.mjs +1 -1
- package/dist/esm/modules/core/utils.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/en.mjs +3 -0
- package/dist/esm/modules/i18n/languages/en.mjs.map +1 -1
- package/dist/esm/modules/i18n/languages/index.mjs.map +1 -1
- package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs +23 -20
- package/dist/esm/modules/ms-teams/context/KnockMsTeamsProvider.mjs.map +1 -1
- package/dist/esm/modules/ms-teams/hooks/useConnectedMsTeamsChannels.mjs +78 -0
- package/dist/esm/modules/ms-teams/hooks/useConnectedMsTeamsChannels.mjs.map +1 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs +4 -2
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsAuth.mjs.map +1 -1
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsChannels.mjs +41 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsChannels.mjs.map +1 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsTeams.mjs +50 -0
- package/dist/esm/modules/ms-teams/hooks/useMsTeamsTeams.mjs.map +1 -0
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs +27 -25
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs +58 -41
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +18 -17
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +13 -12
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs +6 -6
- package/dist/esm/modules/slack/hooks/useSlackConnectionStatus.mjs.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces.d.ts +5 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/modules/core/utils.d.ts +2 -2
- package/dist/types/modules/core/utils.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 +3 -0
- package/dist/types/modules/i18n/languages/index.d.ts.map +1 -1
- package/dist/types/modules/ms-teams/hooks/index.d.ts +3 -0
- package/dist/types/modules/ms-teams/hooks/index.d.ts.map +1 -1
- package/dist/types/modules/ms-teams/hooks/useConnectedMsTeamsChannels.d.ts +15 -0
- package/dist/types/modules/ms-teams/hooks/useConnectedMsTeamsChannels.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsChannels.d.ts +14 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsChannels.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsTeams.d.ts +13 -0
- package/dist/types/modules/ms-teams/hooks/useMsTeamsTeams.d.ts.map +1 -0
- package/dist/types/modules/ms-teams/index.d.ts +1 -0
- package/dist/types/modules/ms-teams/index.d.ts.map +1 -1
- package/dist/types/modules/ms-teams/interfaces.d.ts +11 -0
- package/dist/types/modules/ms-teams/interfaces.d.ts.map +1 -0
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts +12 -2
- package/dist/types/modules/slack/context/KnockSlackProvider.d.ts.map +1 -1
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts +6 -6
- package/dist/types/modules/slack/hooks/useConnectedSlackChannels.d.ts.map +1 -1
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts +1 -1
- package/dist/types/modules/slack/hooks/useSlackConnectionStatus.d.ts.map +1 -1
- package/dist/types/modules/slack/index.d.ts +1 -1
- package/dist/types/modules/slack/index.d.ts.map +1 -1
- package/dist/types/modules/slack/{constants.d.ts → interfaces.d.ts} +3 -5
- package/dist/types/modules/slack/interfaces.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/interfaces.ts +4 -0
- package/src/modules/core/utils.ts +3 -3
- package/src/modules/i18n/languages/en.ts +5 -0
- package/src/modules/i18n/languages/index.ts +3 -0
- package/src/modules/ms-teams/hooks/index.ts +3 -0
- package/src/modules/ms-teams/hooks/useConnectedMsTeamsChannels.ts +100 -0
- package/src/modules/ms-teams/hooks/useMsTeamsChannels.ts +53 -0
- package/src/modules/ms-teams/hooks/useMsTeamsTeams.ts +112 -0
- package/src/modules/ms-teams/index.ts +1 -0
- package/src/modules/ms-teams/interfaces.ts +11 -0
- package/src/modules/slack/context/KnockSlackProvider.tsx +25 -8
- package/src/modules/slack/hooks/useConnectedSlackChannels.ts +56 -61
- package/src/modules/slack/hooks/useSlackAuth.ts +5 -5
- package/src/modules/slack/hooks/useSlackChannels.ts +2 -2
- package/src/modules/slack/hooks/useSlackConnectionStatus.ts +3 -3
- package/src/modules/slack/index.ts +1 -1
- package/src/modules/slack/{constants.ts → interfaces.ts} +3 -4
- package/dist/types/modules/slack/constants.d.ts.map +0 -1
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useKnockSlackClient } from "..";
|
|
2
2
|
import { SlackChannelConnection } from "@knocklabs/client";
|
|
3
|
-
import {
|
|
3
|
+
import { GenericData } from "@knocklabs/types";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import useSWR from "swr";
|
|
4
6
|
|
|
7
|
+
import { RecipientObject } from "../../..";
|
|
5
8
|
import { useKnockClient } from "../../core";
|
|
6
9
|
import { useTranslations } from "../../i18n";
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
const QUERY_KEY = "SLACK_CONNECTED_CHANNELS";
|
|
12
|
+
|
|
13
|
+
type UseConnectedSlackChannelsProps = {
|
|
14
|
+
slackChannelsRecipientObject: RecipientObject;
|
|
10
15
|
};
|
|
11
16
|
|
|
12
|
-
type
|
|
17
|
+
type UseConnectedSlackChannelsOutput = {
|
|
13
18
|
data: SlackChannelConnection[] | null;
|
|
14
19
|
updateConnectedChannels: (
|
|
15
20
|
connectedChannels: SlackChannelConnection[],
|
|
16
|
-
) => void
|
|
21
|
+
) => Promise<void>;
|
|
17
22
|
loading: boolean;
|
|
18
23
|
error: string | null;
|
|
19
24
|
updating: boolean;
|
|
@@ -21,72 +26,62 @@ type UseSlackChannelOutput = {
|
|
|
21
26
|
|
|
22
27
|
function useConnectedSlackChannels({
|
|
23
28
|
slackChannelsRecipientObject: { objectId, collection },
|
|
24
|
-
}:
|
|
29
|
+
}: UseConnectedSlackChannelsProps): UseConnectedSlackChannelsOutput {
|
|
25
30
|
const { t } = useTranslations();
|
|
26
31
|
const knock = useKnockClient();
|
|
27
32
|
const { connectionStatus, knockSlackChannelId } = useKnockSlackClient();
|
|
28
|
-
|
|
29
|
-
null | SlackChannelConnection[]
|
|
30
|
-
>(null);
|
|
33
|
+
|
|
31
34
|
const [error, setError] = useState<string | null>(null);
|
|
32
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
33
35
|
const [isUpdating, setIsUpdating] = useState(false);
|
|
34
36
|
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
collection,
|
|
40
|
-
objectId,
|
|
41
|
-
channelId: knockSlackChannelId,
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
getConnectedChannels()
|
|
45
|
-
.then((res) => {
|
|
46
|
-
if (res?.data?.connections) {
|
|
47
|
-
setConnectedChannels(res?.data?.connections);
|
|
48
|
-
} else {
|
|
49
|
-
setConnectedChannels([]);
|
|
50
|
-
}
|
|
51
|
-
setError(null);
|
|
52
|
-
setIsLoading(false);
|
|
53
|
-
})
|
|
54
|
-
.catch(() => {
|
|
55
|
-
setConnectedChannels([]);
|
|
56
|
-
setError(null);
|
|
57
|
-
setIsLoading(false);
|
|
58
|
-
});
|
|
59
|
-
}, [collection, knock.objects, knockSlackChannelId, objectId]);
|
|
60
|
-
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (
|
|
63
|
-
connectionStatus === "connected" &&
|
|
64
|
-
!connectedChannels &&
|
|
65
|
-
!error &&
|
|
66
|
-
!isLoading
|
|
67
|
-
) {
|
|
68
|
-
fetchAndSetConnectedChannels();
|
|
69
|
-
}
|
|
70
|
-
}, [
|
|
71
|
-
connectedChannels,
|
|
72
|
-
fetchAndSetConnectedChannels,
|
|
37
|
+
const {
|
|
38
|
+
data: connectedChannels,
|
|
39
|
+
mutate,
|
|
40
|
+
isValidating,
|
|
73
41
|
isLoading,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
42
|
+
} = useSWR<SlackChannelConnection[]>(
|
|
43
|
+
// Only fetch when Slack is connected
|
|
44
|
+
connectionStatus === "connected"
|
|
45
|
+
? [QUERY_KEY, knockSlackChannelId, collection, objectId]
|
|
46
|
+
: null,
|
|
47
|
+
async () => {
|
|
48
|
+
return knock.objects
|
|
49
|
+
.getChannelData({
|
|
50
|
+
collection,
|
|
51
|
+
objectId,
|
|
52
|
+
channelId: knockSlackChannelId,
|
|
53
|
+
})
|
|
54
|
+
.then((res) => res.data?.connections ?? [])
|
|
55
|
+
.catch(() => []);
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
onSuccess: () => {
|
|
59
|
+
setError(null);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
);
|
|
77
63
|
|
|
78
64
|
const updateConnectedChannels = async (
|
|
79
65
|
channelsToSendToKnock: SlackChannelConnection[],
|
|
80
66
|
) => {
|
|
81
67
|
setIsUpdating(true);
|
|
82
68
|
try {
|
|
83
|
-
await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
69
|
+
await mutate(
|
|
70
|
+
() =>
|
|
71
|
+
knock.objects
|
|
72
|
+
.setChannelData({
|
|
73
|
+
objectId,
|
|
74
|
+
collection,
|
|
75
|
+
channelId: knockSlackChannelId,
|
|
76
|
+
data: { connections: channelsToSendToKnock },
|
|
77
|
+
})
|
|
78
|
+
.then((res) => (res as GenericData).data?.connections ?? []),
|
|
79
|
+
{
|
|
80
|
+
populateCache: true,
|
|
81
|
+
revalidate: false,
|
|
82
|
+
optimisticData: channelsToSendToKnock,
|
|
83
|
+
},
|
|
84
|
+
);
|
|
90
85
|
} catch (_error) {
|
|
91
86
|
setError(t("slackChannelSetError") || "");
|
|
92
87
|
}
|
|
@@ -94,10 +89,10 @@ function useConnectedSlackChannels({
|
|
|
94
89
|
};
|
|
95
90
|
|
|
96
91
|
return {
|
|
97
|
-
data: connectedChannels,
|
|
92
|
+
data: connectedChannels ?? null,
|
|
98
93
|
updateConnectedChannels,
|
|
99
94
|
updating: isUpdating,
|
|
100
|
-
loading: isLoading,
|
|
95
|
+
loading: isLoading || isValidating,
|
|
101
96
|
error,
|
|
102
97
|
};
|
|
103
98
|
}
|
|
@@ -23,7 +23,7 @@ function useSlackAuth(
|
|
|
23
23
|
additionalScopes?: string[],
|
|
24
24
|
): UseSlackAuthOutput {
|
|
25
25
|
const knock = useKnockClient();
|
|
26
|
-
const { setConnectionStatus, knockSlackChannelId,
|
|
26
|
+
const { setConnectionStatus, knockSlackChannelId, tenantId, setActionLabel } =
|
|
27
27
|
useKnockSlackClient();
|
|
28
28
|
|
|
29
29
|
const combinedScopes =
|
|
@@ -36,7 +36,7 @@ function useSlackAuth(
|
|
|
36
36
|
setConnectionStatus("disconnecting");
|
|
37
37
|
try {
|
|
38
38
|
const revoke = await knock.slack.revokeAccessToken({
|
|
39
|
-
tenant,
|
|
39
|
+
tenant: tenantId,
|
|
40
40
|
knockChannelId: knockSlackChannelId,
|
|
41
41
|
});
|
|
42
42
|
|
|
@@ -51,7 +51,7 @@ function useSlackAuth(
|
|
|
51
51
|
}, [
|
|
52
52
|
setConnectionStatus,
|
|
53
53
|
knock.slack,
|
|
54
|
-
|
|
54
|
+
tenantId,
|
|
55
55
|
knockSlackChannelId,
|
|
56
56
|
setActionLabel,
|
|
57
57
|
]);
|
|
@@ -61,7 +61,7 @@ function useSlackAuth(
|
|
|
61
61
|
state: JSON.stringify({
|
|
62
62
|
redirect_url: redirectUrl,
|
|
63
63
|
access_token_object: {
|
|
64
|
-
object_id:
|
|
64
|
+
object_id: tenantId,
|
|
65
65
|
collection: TENANT_OBJECT_COLLECTION,
|
|
66
66
|
},
|
|
67
67
|
channel_id: knockSlackChannelId,
|
|
@@ -74,7 +74,7 @@ function useSlackAuth(
|
|
|
74
74
|
return `${SLACK_AUTHORIZE_URL}?${new URLSearchParams(rawParams)}`;
|
|
75
75
|
}, [
|
|
76
76
|
redirectUrl,
|
|
77
|
-
|
|
77
|
+
tenantId,
|
|
78
78
|
knockSlackChannelId,
|
|
79
79
|
knock.apiKey,
|
|
80
80
|
knock.userToken,
|
|
@@ -45,12 +45,12 @@ function useSlackChannels({
|
|
|
45
45
|
queryOptions,
|
|
46
46
|
}: UseSlackChannelsProps): UseSlackChannelOutput {
|
|
47
47
|
const knock = useKnockClient();
|
|
48
|
-
const { knockSlackChannelId,
|
|
48
|
+
const { knockSlackChannelId, tenantId, connectionStatus } =
|
|
49
49
|
useKnockSlackClient();
|
|
50
50
|
|
|
51
51
|
const fetchChannels = (queryKey: QueryKey) => {
|
|
52
52
|
return knock.slack.getChannels({
|
|
53
|
-
tenant,
|
|
53
|
+
tenant: tenantId,
|
|
54
54
|
knockChannelId: knockSlackChannelId,
|
|
55
55
|
queryOptions: {
|
|
56
56
|
...queryOptions,
|
|
@@ -34,7 +34,7 @@ const formatSlackErrorMessage = (errorMessage: string) => {
|
|
|
34
34
|
function useSlackConnectionStatus(
|
|
35
35
|
knock: Knock,
|
|
36
36
|
knockSlackChannelId: string,
|
|
37
|
-
|
|
37
|
+
tenantId: string,
|
|
38
38
|
): UseSlackConnectionStatusOutput {
|
|
39
39
|
const { t } = useTranslations();
|
|
40
40
|
const [connectionStatus, setConnectionStatus] =
|
|
@@ -48,7 +48,7 @@ function useSlackConnectionStatus(
|
|
|
48
48
|
|
|
49
49
|
try {
|
|
50
50
|
const authRes = await knock.slack.authCheck({
|
|
51
|
-
tenant,
|
|
51
|
+
tenant: tenantId,
|
|
52
52
|
knockChannelId: knockSlackChannelId,
|
|
53
53
|
});
|
|
54
54
|
|
|
@@ -87,7 +87,7 @@ function useSlackConnectionStatus(
|
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
checkAuthStatus();
|
|
90
|
-
}, [connectionStatus,
|
|
90
|
+
}, [connectionStatus, tenantId, knockSlackChannelId, knock.slack, t]);
|
|
91
91
|
|
|
92
92
|
return {
|
|
93
93
|
connectionStatus,
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|