Skip to content

Commit

Permalink
Merge pull request #106 from kart2004/main
Browse files Browse the repository at this point in the history
Confirmation dialog for plugin deletion
  • Loading branch information
ashmilhussain authored Oct 11, 2024
2 parents 181f7e5 + 01f39e3 commit ac6d3a2
Show file tree
Hide file tree
Showing 2 changed files with 160 additions and 120 deletions.
134 changes: 75 additions & 59 deletions ui/src/pages/Configuration/ConfigurationList.jsx
Original file line number Diff line number Diff line change
@@ -1,74 +1,90 @@
import SearchInput from "src/components/SearchInput/SearchInput"
import Table from "src/components/Table/Table"
import Tag from "src/components/Tag/Tag"
// ConfigurationList.jsx

import React from "react";
import SearchInput from "src/components/SearchInput/SearchInput";
import Table from "src/components/Table/Table";
import Tag from "src/components/Tag/Tag";
import { GoPencil } from "react-icons/go";
import { HiOutlinePlusCircle } from "react-icons/hi";
import { LuTrash2 } from "react-icons/lu";
import Button from "src/components/Button/Button";
import style from "./Configuration.module.css"
import style from "./Configuration.module.css";
import { Link } from "react-router-dom";
import { BACKEND_SERVER_URL } from "src/config/const";
import confirmDialog from "src/utils/ConfirmDialog";

const ConfigurationList = ({configurations = [], onPluginDelete})=>{
const ConfigurationList = ({ configurations = [], onPluginDelete }) => {

const handleDelete = (pluginId) => {
confirmDialog(
"Confirmation",
"Are you sure you want to delete this?",
undefined,
undefined,
"Delete",
() => {
onPluginDelete(pluginId);
}
);
};

let tableColumns = [

{
name: 'Name',
selector: row =><div className="inline-flex-align-center"><img className={style.ConnectorIcon} src={`${BACKEND_SERVER_URL}${row.icon}`}/> { row.connector_name} </div>,
// width: "400px"
},
{
name: 'Description',
// selector: row => row.connector_description?.slice(0,60) + "...",
selector: row => <div style={{overflow: "hidden", width: "calc(50vh)"}}>{row.connector_description}</div>
},
{
name: 'Status',
selector: row => <Tag type="success">{row.enable == true ? "Completed" : "Documention Pending"}</Tag>,
width: "200px"
},
{
name: '',
selector: row => <>
<div className={style.ConnectorAction}>
<span>
<Link to={`/plugins/${row.connector_type}/${row.connector_key}/${row.connector_id}/details`} ><GoPencil size={20} color="#3893FF" /> </Link>
</span>
{/* <span>
<TbMessagePlus size={20} color="#3893FF"/>
</span> */}
<span>
<LuTrash2 size={20} onClick={()=>onPluginDelete(row.connector_id)} color="#FF7F6D"/>
</span>
</div>

</>,
width: "200px"
}

]

let tableColumns = [

{
name: 'Name',
selector: row =><div className="inline-flex-align-center"><img className={style.ConnectorIcon} src={`${BACKEND_SERVER_URL}${row.icon}`}/> { row.connector_name} </div>,
// width: "400px"
},
{
name: 'Description',
// selector: row => row.connector_description?.slice(0,60) + "...",
selector: row => <div style={{overflow: "hidden", width: "calc(50vh)"}}>{row.connector_description}</div>
},
{
name: 'Status',
selector: row => <Tag type="success">{row.enable == true ? "Completed" : "Documention Pending"}</Tag>,
width: "200px"
},
{
name: '',
selector: row => <>
<div className={style.ConnectorAction}>
<span>
<Link to={`/plugins/${row.connector_type}/${row.connector_key}/${row.connector_id}/details`} ><GoPencil size={20} color="#3893FF" /> </Link>
</span>
{/* <span>
<TbMessagePlus size={20} color="#3893FF"/>
</span> */}
<span>
<LuTrash2 size={20} onClick={() => handleDelete(row.connector_id)} color="#FF7F6D" />

return(
<>
<div>
<div className={` ${style.SearchContainer}`}>
<div className="flex-grow-1">
<SearchInput style={{width: "349px"}}/>
</div>
<div>
<Link to={"/plugins/sources"}>
<Button className="icon-button">Add Plugins <HiOutlinePlusCircle/> </Button>
</Link>
</div>
</span>
</div>

</>,
width: "200px"
}

]
return(
<>
<div>
<div className={` ${style.SearchContainer}`}>
<div className="flex-grow-1">
<SearchInput style={{width: "349px"}}/>
</div>
<div>
<Link to={"/plugins/sources"}>
<Button className="icon-button">Add Plugins <HiOutlinePlusCircle/> </Button>
</Link>
</div>
<Table columns={tableColumns} data={configurations} />
</div>

</>
)
<Table columns={tableColumns} data={configurations} />
</div>

</>
)
}

export default ConfigurationList
export default ConfigurationList
146 changes: 85 additions & 61 deletions ui/src/utils/ConfirmDialog.jsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import {confirmAlert} from "react-confirm-alert"
import { confirmAlert } from "react-confirm-alert";
import 'react-confirm-alert/src/react-confirm-alert.css';

const defaultValue = {
icon:<svg xmlns="http://www.w3.org/2000/svg" width="31" height="30" viewBox="0 0 31 30" fill="none">
<path d="M15.5 20V15M15.5 10H15.5125M28 15C28 21.9036 22.4036 27.5 15.5 27.5C8.59644 27.5 3 21.9036 3 15C3 8.09644 8.59644 2.5 15.5 2.5C22.4036 2.5 28 8.09644 28 15Z" stroke="#FF7F6D" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>,
cancelButtonText : "Cancel",
icon: <svg xmlns="http://www.w3.org/2000/svg" width="31" height="30" viewBox="0 0 31 30" fill="none">
<path d="M15.5 20V15M15.5 10H15.5125M28 15C28 21.9036 22.4036 27.5 15.5 27.5C8.59644 27.5 3 21.9036 3 15C3 8.09644 8.59644 2.5 15.5 2.5C22.4036 2.5 28 8.09644 28 15Z" stroke="#FF7F6D" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" />
</svg>,
cancelButtonText: "Cancel",
confirmButtonText: "Delete",
deleteButtonIconsvg:<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M10.6667 4.00016V3.46683C10.6667 2.72009 10.6667 2.34672 10.5213 2.06151C10.3935 1.81063 10.1895 1.60665 9.93865 1.47882C9.65344 1.3335 9.28007 1.3335 8.53333 1.3335H7.46667C6.71993 1.3335 6.34656 1.3335 6.06135 1.47882C5.81046 1.60665 5.60649 1.81063 5.47866 2.06151C5.33333 2.34672 5.33333 2.72009 5.33333 3.46683V4.00016M6.66667 7.66683V11.0002M9.33333 7.66683V11.0002M2 4.00016H14M12.6667 4.00016V11.4668C12.6667 12.5869 12.6667 13.147 12.4487 13.5748C12.2569 13.9511 11.951 14.2571 11.5746 14.4488C11.1468 14.6668 10.5868 14.6668 9.46667 14.6668H6.53333C5.41323 14.6668 4.85318 14.6668 4.42535 14.4488C4.04903 14.2571 3.74307 13.9511 3.55132 13.5748C3.33333 13.147 3.33333 12.5869 3.33333 11.4668V4.00016" stroke="#FF7F6D" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>,
onCancel: ()=>{},
onConfirm: ()=>{}
}
deleteButtonIconsvg: <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M10.6667 4.00016V3.46683C10.6667 2.72009 10.6667 2.34672 10.5213 2.06151C10.3935 1.81063 10.1895 1.60665 9.93865 1.47882C9.65344 1.3335 9.28007 1.3335 8.53333 1.3335H7.46667C6.71993 1.3335 6.34656 1.3335 6.06135 1.47882C5.81046 1.60665 5.60649 1.81063 5.47866 2.06151C5.33333 2.34672 5.33333 2.72009 5.33333 3.46683V4.00016M6.66667 7.66683V11.0002M9.33333 7.66683V11.0002M2 4.00016H14M12.6667 4.00016V11.4668C12.6667 12.5869 12.6667 13.147 12.4487 13.5748C12.2569 13.9511 11.951 14.2571 11.5746 14.4488C11.1468 14.6668 10.5868 14.6668 9.46667 14.6668H6.53333C5.41323 14.6668 4.85318 14.6668 4.42535 14.4488C4.04903 14.2571 3.74307 13.9511 3.55132 13.5748C3.33333 13.147 3.33333 12.5869 3.33333 11.4668V4.00016" stroke="#FF7F6D" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
</svg>,
cancelButtonIconsvg: <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<circle cx="8" cy="8" r="7.5" stroke="#3893FF" strokeWidth="1"/>
<path d="M5 5L11 11M11 5L5 11" stroke="#3893FF" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
</svg>,
onCancel: () => { },
onConfirm: () => { }
};

const confirmDialogStyle = {
dialogBody: {
Expand All @@ -22,7 +26,7 @@ const confirmDialogStyle = {
width: "329px"
},
iconContainer: {
textAlign: "center"
textAlign: "center"
},
icon: {
margin: "auto",
Expand Down Expand Up @@ -63,13 +67,12 @@ const confirmDialogStyle = {
border: "none",
focus: "none",
color: "#3893FF",
/* Small text */
fontFamily: "Inter",
fontSize: "16px",
fontStyle: "normal",
fontWeight: "500",
lineHeight: "150%",
marginRight:"10px"
marginLeft: "10px"
},
deleteButton: {
padding: "3px 13px",
Expand All @@ -78,68 +81,89 @@ const confirmDialogStyle = {
border: "none",
focus: "none",
color: "#FF7F6D",
/* Small text */
fontFamily: "Inter",
fontSize: "16px",
fontStyle: "normal",
fontWeight: "500",
lineHeight: "150%",
marginLeft:"10px"
marginRight: "10px"
},
buttonContentAlign:{
display:"flex",
flexDirection:"row"
buttonContentAlign: {
display: "flex",
flexDirection: "row"
},
ButtonIcon: {
marginLeft: "5px"
}
};

}

const confirmDialog = (
title,
message,
deleteButtonIconsvg = defaultValue.deleteButtonIconsvg,
cancelButtonIconsvg = defaultValue.cancelButtonIconsvg,
confirmButtonText = defaultValue.confirmButtonText,
onConfirm = defaultValue.onConfirm,
config = {}
) => {
const allConfig = { ...defaultValue, ...config };

const confirmDailog = (title, message,deleteButtonIconsvg, cancelButtonIconsvg, confirmButtonText = "Delete", onConfirm = ()=>{}, config = {} )=>{

let allConfig = {...defaultValue, ...config}
confirmAlert({
closeOnEscape: true,
customUI: ({onClose})=>{
return(<div>
<div style={confirmDialogStyle.dialogBody}>
<div style={confirmDialogStyle.iconContainer}>
<svg style={confirmDialogStyle.icon} xmlns="http://www.w3.org/2000/svg" width="31" height="30" viewBox="0 0 31 30" fill="none">
<path d="M15.5 20V15M15.5 10H15.5125M28 15C28 21.9036 22.4036 27.5 15.5 27.5C8.59644 27.5 3 21.9036 3 15C3 8.09644 8.59644 2.5 15.5 2.5C22.4036 2.5 28 8.09644 28 15Z" stroke="#FF7F6D" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div style={confirmDialogStyle.dialogText}>
<h6 style={confirmDialogStyle.dialogMainText}>{title}</h6>
<p style={confirmDialogStyle.dialogSubText}>{message}</p>
</div>
<div style={confirmDialogStyle.actionContainer}>
<button style={confirmDialogStyle.cancelButton} onClick={onClose}>

<div style={confirmDialogStyle.buttonContentAlign}>
<div style={confirmDialogStyle.ButtonIcon}>
{ cancelButtonIconsvg}
customUI: ({ onClose }) => {
return (
<div>
<div style={confirmDialogStyle.dialogBody}>
<div style={confirmDialogStyle.iconContainer}>
{allConfig.icon || defaultValue.icon}
</div>
<div style={confirmDialogStyle.dialogText}>
<h6 style={confirmDialogStyle.dialogMainText}>{title}</h6>
<p style={confirmDialogStyle.dialogSubText}>{message}</p>
</div>
<div style={confirmDialogStyle.actionContainer}>
<button
style={confirmDialogStyle.deleteButton}
onClick={() => {
onConfirm();
onClose();
}}
>
<div style={confirmDialogStyle.buttonContentAlign}>
<div>
{confirmButtonText}
</div>
{deleteButtonIconsvg && (
<div style={confirmDialogStyle.ButtonIcon}>
{deleteButtonIconsvg}
</div>
)}
</div>
<div>
{allConfig.cancelButtonText}
</div>
</div>
</button>
<button style={confirmDialogStyle.deleteButton} onClick={()=>{ onConfirm }}>

<div style={confirmDialogStyle.buttonContentAlign}>
<div className={confirmDialogStyle.ButtonIcon}>
{deleteButtonIconsvg}
</div>
<div>
{confirmButtonText}
<button
style={confirmDialogStyle.cancelButton}
onClick={() => {
allConfig.onCancel();
onClose();
}}
>
<div style={confirmDialogStyle.buttonContentAlign}>
<div>
{allConfig.cancelButtonText}
</div>
{cancelButtonIconsvg && (
<div style={confirmDialogStyle.ButtonIcon}>
{cancelButtonIconsvg}
</div>
)}
</div>
</div>

</button>
</button>
</div>
</div>
</div>
</div>)
);
}
})
}
});
};

export default confirmDailog
export default confirmDialog;

0 comments on commit ac6d3a2

Please sign in to comment.