slack integration reinstall

This commit is contained in:
Sheen Capadngan
2024-09-02 21:05:30 +08:00
parent 07fd489982
commit f509464947
2 changed files with 58 additions and 16 deletions

View File

@@ -21,7 +21,7 @@ import {
type TSlackServiceFactoryDep = {
slackIntegrationDAL: Pick<
TSlackIntegrationDALFactory,
"create" | "findOne" | "findById" | "updateById" | "deleteById"
"create" | "findOne" | "findById" | "updateById" | "deleteById" | "transaction"
>;
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission">;
projectDAL: Pick<TProjectDALFactory, "findById">;
@@ -62,15 +62,43 @@ export const slackServiceFactory = ({
plainText: Buffer.from(botAccessToken, "utf8")
});
await slackIntegrationDAL.create({
projectId,
teamId,
teamName,
slackUserId,
slackAppId,
slackBotId,
slackBotUserId,
encryptedBotAccessToken
await slackIntegrationDAL.transaction(async (tx) => {
const slackIntegration = await slackIntegrationDAL.findOne(
{
projectId
},
tx
);
if (slackIntegration) {
return slackIntegrationDAL.updateById(
slackIntegration.id,
{
teamId,
teamName,
slackUserId,
slackAppId,
slackBotId,
slackBotUserId,
encryptedBotAccessToken
},
tx
);
}
return slackIntegrationDAL.create(
{
projectId,
teamId,
teamName,
slackUserId,
slackAppId,
slackBotId,
slackBotUserId,
encryptedBotAccessToken
},
tx
);
});
};

View File

@@ -59,6 +59,7 @@ export const NotificationTab = () => {
const router = useRouter();
const [isConnectToSlackLoading, setIsConnectToSlackLoading] = useToggle(false);
const [isReinstallLoading, setIsReinstallLoading] = useToggle(false);
const secretRequestNotifState = watch("isSecretRequestNotificationEnabled");
const accessRequestNotifState = watch("isAccessRequestNotificationEnabled");
@@ -95,6 +96,13 @@ export const NotificationTab = () => {
});
};
const triggerSlackInstall = async () => {
const slackInstallUrl = await fetchSlackInstallUrl(currentWorkspace?.id);
if (slackInstallUrl) {
router.push(slackInstallUrl);
}
};
useEffect(() => {
if (slackIntegration) {
setValue(
@@ -131,10 +139,7 @@ export const NotificationTab = () => {
isLoading={isConnectToSlackLoading}
onClick={async () => {
setIsConnectToSlackLoading.on();
const slackInstallUrl = await fetchSlackInstallUrl(currentWorkspace?.id);
if (slackInstallUrl) {
router.push(slackInstallUrl);
}
await triggerSlackInstall();
}}
>
Connect to Slack
@@ -144,8 +149,16 @@ export const NotificationTab = () => {
<form onSubmit={handleSubmit(handleIntegrationSave)}>
<div>Connected Slack workspace: {slackIntegration.teamName}</div>
<div className="mt-2 mb-6">
<Button colorSchema="secondary" size="xs">
Reinstall integration
<Button
colorSchema="secondary"
size="xs"
isLoading={isReinstallLoading}
onClick={async () => {
setIsReinstallLoading.on();
await triggerSlackInstall();
}}
>
Reinstall
</Button>
<Button
colorSchema="secondary"
@@ -156,6 +169,7 @@ export const NotificationTab = () => {
Delete
</Button>
</div>
<h2 className="mb-2 flex-1 text-lg font-semibold text-mineshaft-100">Events</h2>
<Controller
control={control}
name="isSecretRequestNotificationEnabled"