This is an automated email from the ASF dual-hosted git repository.

mintsweet pushed a commit to branch fix-8001
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git

commit e59988f107dc551745bfb10584e0ce4323083bbd
Author: mintsweet <[email protected]>
AuthorDate: Fri Sep 6 18:57:41 2024 +1200

    fix: webhook will be deleted when disconnected from project
---
 .../register/webhook/components/delete-dialog.tsx  |  4 +-
 .../src/plugins/register/webhook/connection.tsx    | 45 +++++++++++++++++-----
 config-ui/src/routes/project/webhook/index.tsx     |  5 ++-
 3 files changed, 40 insertions(+), 14 deletions(-)

diff --git 
a/config-ui/src/plugins/register/webhook/components/delete-dialog.tsx 
b/config-ui/src/plugins/register/webhook/components/delete-dialog.tsx
index 846d51eca..8b05c3cd4 100644
--- a/config-ui/src/plugins/register/webhook/components/delete-dialog.tsx
+++ b/config-ui/src/plugins/register/webhook/components/delete-dialog.tsx
@@ -27,10 +27,9 @@ import { operator } from '@/utils';
 interface Props {
   initialId: ID;
   onCancel: () => void;
-  onSubmitAfter?: (id: ID) => void;
 }
 
-export const DeleteDialog = ({ initialId, onCancel, onSubmitAfter }: Props) => 
{
+export const DeleteDialog = ({ initialId, onCancel }: Props) => {
   const [operating, setOperating] = useState(false);
 
   const dispatch = useAppDispatch();
@@ -41,7 +40,6 @@ export const DeleteDialog = ({ initialId, onCancel, 
onSubmitAfter }: Props) => {
     });
 
     if (success) {
-      onSubmitAfter?.(initialId);
       onCancel();
     }
   };
diff --git a/config-ui/src/plugins/register/webhook/connection.tsx 
b/config-ui/src/plugins/register/webhook/connection.tsx
index 4ad661db3..32bfd6f5e 100644
--- a/config-ui/src/plugins/register/webhook/connection.tsx
+++ b/config-ui/src/plugins/register/webhook/connection.tsx
@@ -17,24 +17,26 @@
  */
 
 import { useState } from 'react';
-import { EyeOutlined, FormOutlined, DeleteOutlined, PlusOutlined } from 
'@ant-design/icons';
-import { Flex, Table, Space, Button } from 'antd';
+import { EyeOutlined, FormOutlined, CloseCircleOutlined, DeleteOutlined, 
PlusOutlined } from '@ant-design/icons';
+import { Flex, Table, Space, Button, Modal } from 'antd';
 
+import { Message } from '@/components';
 import { useAppSelector } from '@/hooks';
 import { selectWebhooks } from '@/features/connections';
 import { IWebhook } from '@/types';
 
 import { CreateDialog, ViewDialog, EditDialog, DeleteDialog } from 
'./components';
 
-type Type = 'add' | 'edit' | 'show' | 'delete';
+type Type = 'add' | 'edit' | 'show' | 'delete' | 'remove';
 
 interface Props {
+  fromProject?: boolean;
   filterIds?: ID[];
-  onCreateAfter?: (id: ID) => void;
-  onDeleteAfter?: (id: ID) => void;
+  onAssociate?: (id: ID) => void;
+  onRemove?: (id: ID) => void;
 }
 
-export const WebHookConnection = ({ filterIds, onCreateAfter, onDeleteAfter }: 
Props) => {
+export const WebHookConnection = ({ filterIds, fromProject = false, 
onAssociate, onRemove }: Props) => {
   const [type, setType] = useState<Type>();
   const [currentID, setCurrentID] = useState<ID>();
 
@@ -76,7 +78,21 @@ export const WebHookConnection = ({ filterIds, 
onCreateAfter, onDeleteAfter }: P
               <Space>
                 <Button type="primary" icon={<EyeOutlined />} onClick={() => 
handleShowDialog('show', row)} />
                 <Button type="primary" icon={<FormOutlined />} onClick={() => 
handleShowDialog('edit', row)} />
-                <Button type="primary" icon={<DeleteOutlined />} onClick={() 
=> handleShowDialog('delete', row)} />
+                {fromProject ? (
+                  <Button
+                    type="primary"
+                    danger
+                    icon={<CloseCircleOutlined />}
+                    onClick={() => handleShowDialog('remove', row)}
+                  />
+                ) : (
+                  <Button
+                    type="primary"
+                    danger
+                    icon={<DeleteOutlined />}
+                    onClick={() => handleShowDialog('delete', row)}
+                  />
+                )}
               </Space>
             ),
           },
@@ -89,11 +105,20 @@ export const WebHookConnection = ({ filterIds, 
onCreateAfter, onDeleteAfter }: P
           Add a Webhook
         </Button>
       </Flex>
-      {type === 'add' && <CreateDialog open onCancel={handleHideDialog} 
onSubmitAfter={(id) => onCreateAfter?.(id)} />}
+      {type === 'add' && <CreateDialog open onCancel={handleHideDialog} 
onSubmitAfter={(id) => onAssociate?.(id)} />}
       {type === 'show' && currentID && <ViewDialog initialId={currentID} 
onCancel={handleHideDialog} />}
       {type === 'edit' && currentID && <EditDialog initialId={currentID} 
onCancel={handleHideDialog} />}
-      {type === 'delete' && currentID && (
-        <DeleteDialog initialId={currentID} onCancel={handleHideDialog} 
onSubmitAfter={(id) => onDeleteAfter?.(id)} />
+      {type === 'delete' && currentID && <DeleteDialog initialId={currentID} 
onCancel={handleHideDialog} />}
+      {type === 'remove' && currentID && (
+        <Modal
+          open
+          title="Remove this Webhook?"
+          okText="Confirm"
+          onCancel={handleHideDialog}
+          onOk={() => onRemove?.(currentID)}
+        >
+          <Message content="This will only remove the webhook from this 
project. To permanently delete the webhook, please visit the Connections page." 
/>
+        </Modal>
       )}
     </Flex>
   );
diff --git a/config-ui/src/routes/project/webhook/index.tsx 
b/config-ui/src/routes/project/webhook/index.tsx
index fafd41d05..9d267b243 100644
--- a/config-ui/src/routes/project/webhook/index.tsx
+++ b/config-ui/src/routes/project/webhook/index.tsx
@@ -71,6 +71,7 @@ export const ProjectWebhook = () => {
 
     if (success) {
       setVersion(version + 1);
+      handleCancel();
     }
   };
 
@@ -96,6 +97,7 @@ export const ProjectWebhook = () => {
 
     if (success) {
       setVersion(version + 1);
+      handleCancel();
     }
   };
 
@@ -115,6 +117,7 @@ export const ProjectWebhook = () => {
 
     if (success) {
       setVersion(version + 1);
+      handleCancel();
     }
   };
 
@@ -161,7 +164,7 @@ export const ProjectWebhook = () => {
           )}
         </>
       ) : (
-        <WebHookConnection filterIds={webhookIds} onCreateAfter={handleCreate} 
onDeleteAfter={handleDelete} />
+        <WebHookConnection fromProject filterIds={webhookIds} 
onAssociate={handleCreate} onRemove={handleDelete} />
       )}
     </>
   );

Reply via email to