@knocklabs/react-core 0.3.1 → 0.3.2
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 +15 -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.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 +26 -25
- package/dist/esm/modules/slack/context/KnockSlackProvider.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useConnectedSlackChannels.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs +15 -15
- package/dist/esm/modules/slack/hooks/useSlackAuth.mjs.map +1 -1
- package/dist/esm/modules/slack/hooks/useSlackChannels.mjs +10 -10
- 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 +7 -6
- 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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useKnockMsTeamsClient } from "..";
|
|
2
|
+
import { MsTeamsChannelConnection } from "@knocklabs/client";
|
|
3
|
+
import { GenericData } from "@knocklabs/types";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import useSWR from "swr";
|
|
6
|
+
|
|
7
|
+
import { RecipientObject } from "../../..";
|
|
8
|
+
import { useKnockClient } from "../../core";
|
|
9
|
+
import { useTranslations } from "../../i18n";
|
|
10
|
+
|
|
11
|
+
const QUERY_KEY = "MS_TEAMS_CONNECTED_CHANNELS";
|
|
12
|
+
|
|
13
|
+
type UseConnectedMsTeamsChannelsProps = {
|
|
14
|
+
msTeamsChannelsRecipientObject: RecipientObject;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type UseConnectedMsTeamsChannelsOutput = {
|
|
18
|
+
data: MsTeamsChannelConnection[] | null;
|
|
19
|
+
updateConnectedChannels: (
|
|
20
|
+
connectedChannels: MsTeamsChannelConnection[],
|
|
21
|
+
) => Promise<void>;
|
|
22
|
+
loading: boolean;
|
|
23
|
+
error: string | null;
|
|
24
|
+
updating: boolean;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function useConnectedMsTeamsChannels({
|
|
28
|
+
msTeamsChannelsRecipientObject: { objectId, collection },
|
|
29
|
+
}: UseConnectedMsTeamsChannelsProps): UseConnectedMsTeamsChannelsOutput {
|
|
30
|
+
const { t } = useTranslations();
|
|
31
|
+
const knock = useKnockClient();
|
|
32
|
+
const { connectionStatus, knockMsTeamsChannelId } = useKnockMsTeamsClient();
|
|
33
|
+
|
|
34
|
+
const [error, setError] = useState<string | null>(null);
|
|
35
|
+
const [isUpdating, setIsUpdating] = useState(false);
|
|
36
|
+
|
|
37
|
+
const {
|
|
38
|
+
data: connectedChannels,
|
|
39
|
+
mutate,
|
|
40
|
+
isValidating,
|
|
41
|
+
isLoading,
|
|
42
|
+
} = useSWR<MsTeamsChannelConnection[]>(
|
|
43
|
+
// Only fetch when Microsoft Teams is connected
|
|
44
|
+
connectionStatus === "connected"
|
|
45
|
+
? [QUERY_KEY, knockMsTeamsChannelId, collection, objectId]
|
|
46
|
+
: null,
|
|
47
|
+
async () => {
|
|
48
|
+
return knock.objects
|
|
49
|
+
.getChannelData({
|
|
50
|
+
collection,
|
|
51
|
+
objectId,
|
|
52
|
+
channelId: knockMsTeamsChannelId,
|
|
53
|
+
})
|
|
54
|
+
.then((res) => res.data?.connections ?? [])
|
|
55
|
+
.catch(() => []);
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
onSuccess: () => {
|
|
59
|
+
setError(null);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const updateConnectedChannels = async (
|
|
65
|
+
channelsToSendToKnock: MsTeamsChannelConnection[],
|
|
66
|
+
) => {
|
|
67
|
+
setIsUpdating(true);
|
|
68
|
+
try {
|
|
69
|
+
await mutate(
|
|
70
|
+
() =>
|
|
71
|
+
knock.objects
|
|
72
|
+
.setChannelData({
|
|
73
|
+
objectId,
|
|
74
|
+
collection,
|
|
75
|
+
channelId: knockMsTeamsChannelId,
|
|
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
|
+
);
|
|
85
|
+
} catch (_error) {
|
|
86
|
+
setError(t("msTeamsChannelSetError") || "");
|
|
87
|
+
}
|
|
88
|
+
setIsUpdating(false);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
data: connectedChannels ?? null,
|
|
93
|
+
updateConnectedChannels,
|
|
94
|
+
updating: isUpdating,
|
|
95
|
+
loading: isLoading || isValidating,
|
|
96
|
+
error,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export default useConnectedMsTeamsChannels;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { GetMsTeamsChannelsResponse, MsTeamsChannel } from "@knocklabs/client";
|
|
2
|
+
import useSWR from "swr";
|
|
3
|
+
|
|
4
|
+
import { useKnockClient } from "../../core";
|
|
5
|
+
import { useKnockMsTeamsClient } from "../context";
|
|
6
|
+
import { MsTeamsChannelQueryOptions } from "../interfaces";
|
|
7
|
+
|
|
8
|
+
const QUERY_KEY = "MS_TEAMS_CHANNELS";
|
|
9
|
+
|
|
10
|
+
type UseMsTeamsChannelsProps = {
|
|
11
|
+
teamId?: string;
|
|
12
|
+
queryOptions?: MsTeamsChannelQueryOptions;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type UseMsTeamsChannelsOutput = {
|
|
16
|
+
data: MsTeamsChannel[];
|
|
17
|
+
isLoading: boolean;
|
|
18
|
+
refetch: () => void;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function useMsTeamsChannels({
|
|
22
|
+
teamId,
|
|
23
|
+
queryOptions,
|
|
24
|
+
}: UseMsTeamsChannelsProps): UseMsTeamsChannelsOutput {
|
|
25
|
+
const knock = useKnockClient();
|
|
26
|
+
const { knockMsTeamsChannelId, tenantId } = useKnockMsTeamsClient();
|
|
27
|
+
|
|
28
|
+
const fetchChannels = () =>
|
|
29
|
+
knock.msTeams.getChannels({
|
|
30
|
+
knockChannelId: knockMsTeamsChannelId,
|
|
31
|
+
tenant: tenantId,
|
|
32
|
+
teamId: teamId!,
|
|
33
|
+
queryOptions: {
|
|
34
|
+
$filter: queryOptions?.filter,
|
|
35
|
+
$select: queryOptions?.select,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const { data, isLoading, isValidating, mutate } =
|
|
40
|
+
useSWR<GetMsTeamsChannelsResponse>(
|
|
41
|
+
teamId ? [QUERY_KEY, teamId] : null,
|
|
42
|
+
fetchChannels,
|
|
43
|
+
{ revalidateOnFocus: false },
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
data: data?.ms_teams_channels ?? [],
|
|
48
|
+
isLoading: isLoading || isValidating,
|
|
49
|
+
refetch: () => mutate(),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default useMsTeamsChannels;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { GetMsTeamsTeamsResponse, MsTeamsTeam } from "@knocklabs/client";
|
|
2
|
+
import { useEffect, useMemo } from "react";
|
|
3
|
+
import useSWRInfinite from "swr/infinite";
|
|
4
|
+
|
|
5
|
+
import { useKnockClient } from "../../core";
|
|
6
|
+
import { useKnockMsTeamsClient } from "../context";
|
|
7
|
+
import { MsTeamsTeamQueryOptions } from "../interfaces";
|
|
8
|
+
|
|
9
|
+
const MAX_COUNT = 1000;
|
|
10
|
+
|
|
11
|
+
const QUERY_KEY = "MS_TEAMS_TEAMS";
|
|
12
|
+
|
|
13
|
+
type UseMsTeamsTeamsProps = {
|
|
14
|
+
queryOptions?: MsTeamsTeamQueryOptions;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type UseMsTeamsTeamsOutput = {
|
|
18
|
+
data: MsTeamsTeam[];
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
refetch: () => void;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
type QueryKey = [key: string, skiptoken: string] | null;
|
|
24
|
+
|
|
25
|
+
function getQueryKey(
|
|
26
|
+
pageIndex: number,
|
|
27
|
+
previousPageData: GetMsTeamsTeamsResponse,
|
|
28
|
+
): QueryKey {
|
|
29
|
+
// First page so just pass empty
|
|
30
|
+
if (pageIndex === 0) {
|
|
31
|
+
return [QUERY_KEY, ""];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// If there's no more data then return an empty next skiptoken
|
|
35
|
+
if (previousPageData && ["", null].includes(previousPageData.skip_token)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Next skiptoken exists so pass it
|
|
40
|
+
return [QUERY_KEY, previousPageData.skip_token ?? ""];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function useMsTeamsTeams({
|
|
44
|
+
queryOptions = {},
|
|
45
|
+
}: UseMsTeamsTeamsProps): UseMsTeamsTeamsOutput {
|
|
46
|
+
const knock = useKnockClient();
|
|
47
|
+
const { knockMsTeamsChannelId, tenantId, connectionStatus } =
|
|
48
|
+
useKnockMsTeamsClient();
|
|
49
|
+
|
|
50
|
+
const fetchTeams = (queryKey: QueryKey) =>
|
|
51
|
+
knock.msTeams.getTeams({
|
|
52
|
+
knockChannelId: knockMsTeamsChannelId,
|
|
53
|
+
tenant: tenantId,
|
|
54
|
+
queryOptions: {
|
|
55
|
+
$skiptoken: queryKey?.[1],
|
|
56
|
+
$top: queryOptions?.limitPerPage,
|
|
57
|
+
$filter: queryOptions?.filter,
|
|
58
|
+
$select: queryOptions?.select,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const { data, error, isLoading, isValidating, setSize, mutate } =
|
|
63
|
+
useSWRInfinite<GetMsTeamsTeamsResponse>(getQueryKey, fetchTeams, {
|
|
64
|
+
initialSize: 0,
|
|
65
|
+
revalidateOnFocus: false,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const lastPage = data?.at(-1);
|
|
69
|
+
const hasNextPage = lastPage === undefined || !!lastPage.skip_token;
|
|
70
|
+
|
|
71
|
+
const teams = useMemo(
|
|
72
|
+
() =>
|
|
73
|
+
(data ?? [])
|
|
74
|
+
.flatMap((page) => page?.ms_teams_teams)
|
|
75
|
+
.filter((team) => !!team),
|
|
76
|
+
[data],
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const maxCount = queryOptions?.maxCount || MAX_COUNT;
|
|
80
|
+
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (
|
|
83
|
+
connectionStatus === "connected" &&
|
|
84
|
+
!error &&
|
|
85
|
+
hasNextPage &&
|
|
86
|
+
!isLoading &&
|
|
87
|
+
!isValidating &&
|
|
88
|
+
teams.length < maxCount
|
|
89
|
+
) {
|
|
90
|
+
// Fetch a page at a time until we have nothing else left to fetch
|
|
91
|
+
// or we've already hit the max amount of teams to fetch
|
|
92
|
+
setSize((size) => size + 1);
|
|
93
|
+
}
|
|
94
|
+
}, [
|
|
95
|
+
teams.length,
|
|
96
|
+
setSize,
|
|
97
|
+
hasNextPage,
|
|
98
|
+
isLoading,
|
|
99
|
+
isValidating,
|
|
100
|
+
maxCount,
|
|
101
|
+
error,
|
|
102
|
+
connectionStatus,
|
|
103
|
+
]);
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
data: teams,
|
|
107
|
+
isLoading: isLoading || isValidating,
|
|
108
|
+
refetch: () => mutate(),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export default useMsTeamsTeams;
|
|
@@ -8,6 +8,10 @@ import { ConnectionStatus } from "../hooks/useSlackConnectionStatus";
|
|
|
8
8
|
|
|
9
9
|
export interface KnockSlackProviderState {
|
|
10
10
|
knockSlackChannelId: string;
|
|
11
|
+
tenantId: string;
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use `tenantId` instead. This field will be removed in a future release.
|
|
14
|
+
*/
|
|
11
15
|
tenant: string;
|
|
12
16
|
connectionStatus: ConnectionStatus;
|
|
13
17
|
setConnectionStatus: (connectionStatus: ConnectionStatus) => void;
|
|
@@ -20,14 +24,25 @@ export interface KnockSlackProviderState {
|
|
|
20
24
|
const SlackProviderStateContext =
|
|
21
25
|
React.createContext<KnockSlackProviderState | null>(null);
|
|
22
26
|
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
export type KnockSlackProviderProps =
|
|
28
|
+
| {
|
|
29
|
+
knockSlackChannelId: string;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Use `tenantId` instead. This field will be removed in a future release.
|
|
32
|
+
*/
|
|
33
|
+
tenant: string;
|
|
34
|
+
}
|
|
35
|
+
| {
|
|
36
|
+
knockSlackChannelId: string;
|
|
37
|
+
tenantId: string;
|
|
38
|
+
};
|
|
27
39
|
|
|
28
40
|
export const KnockSlackProvider: React.FC<
|
|
29
41
|
PropsWithChildren<KnockSlackProviderProps>
|
|
30
|
-
> = (
|
|
42
|
+
> = (props) => {
|
|
43
|
+
const { knockSlackChannelId, children } = props;
|
|
44
|
+
const tenantId = "tenantId" in props ? props.tenantId : props.tenant;
|
|
45
|
+
|
|
31
46
|
const knock = useKnockClient();
|
|
32
47
|
|
|
33
48
|
const {
|
|
@@ -37,13 +52,13 @@ export const KnockSlackProvider: React.FC<
|
|
|
37
52
|
setErrorLabel,
|
|
38
53
|
actionLabel,
|
|
39
54
|
setActionLabel,
|
|
40
|
-
} = useSlackConnectionStatus(knock, knockSlackChannelId,
|
|
55
|
+
} = useSlackConnectionStatus(knock, knockSlackChannelId, tenantId);
|
|
41
56
|
|
|
42
57
|
return (
|
|
43
58
|
<SlackProviderStateContext.Provider
|
|
44
59
|
key={slackProviderKey({
|
|
45
60
|
knockSlackChannelId,
|
|
46
|
-
|
|
61
|
+
tenantId,
|
|
47
62
|
connectionStatus,
|
|
48
63
|
errorLabel,
|
|
49
64
|
})}
|
|
@@ -55,7 +70,9 @@ export const KnockSlackProvider: React.FC<
|
|
|
55
70
|
actionLabel,
|
|
56
71
|
setActionLabel,
|
|
57
72
|
knockSlackChannelId,
|
|
58
|
-
tenant
|
|
73
|
+
// Assign the same value to both tenant and tenantId for backwards compatibility
|
|
74
|
+
tenant: tenantId,
|
|
75
|
+
tenantId,
|
|
59
76
|
}}
|
|
60
77
|
>
|
|
61
78
|
{children}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useKnockSlackClient } from "..";
|
|
2
2
|
import { SlackChannelConnection } from "@knocklabs/client";
|
|
3
3
|
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
|
|
5
|
+
import { RecipientObject } from "../../..";
|
|
5
6
|
import { useKnockClient } from "../../core";
|
|
6
7
|
import { useTranslations } from "../../i18n";
|
|
7
8
|
|
|
8
|
-
type
|
|
9
|
-
slackChannelsRecipientObject:
|
|
9
|
+
type UseConnectedSlackChannelsProps = {
|
|
10
|
+
slackChannelsRecipientObject: RecipientObject;
|
|
10
11
|
};
|
|
11
12
|
|
|
12
|
-
type
|
|
13
|
+
type UseConnectedSlackChannelOutput = {
|
|
13
14
|
data: SlackChannelConnection[] | null;
|
|
14
15
|
updateConnectedChannels: (
|
|
15
16
|
connectedChannels: SlackChannelConnection[],
|
|
16
|
-
) => void
|
|
17
|
+
) => Promise<void>;
|
|
17
18
|
loading: boolean;
|
|
18
19
|
error: string | null;
|
|
19
20
|
updating: boolean;
|
|
@@ -21,7 +22,7 @@ type UseSlackChannelOutput = {
|
|
|
21
22
|
|
|
22
23
|
function useConnectedSlackChannels({
|
|
23
24
|
slackChannelsRecipientObject: { objectId, collection },
|
|
24
|
-
}:
|
|
25
|
+
}: UseConnectedSlackChannelsProps): UseConnectedSlackChannelOutput {
|
|
25
26
|
const { t } = useTranslations();
|
|
26
27
|
const knock = useKnockClient();
|
|
27
28
|
const { connectionStatus, knockSlackChannelId } = useKnockSlackClient();
|
|
@@ -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"}
|