diff --git a/src/components/DeleteScenarioModal/DeleteScenarioModal.js b/src/components/DeleteScenarioModal/DeleteScenarioModal.js
new file mode 100644
index 000000000..ff71ef6b2
--- /dev/null
+++ b/src/components/DeleteScenarioModal/DeleteScenarioModal.js
@@ -0,0 +1,131 @@
+// Copyright (c) Cosmo Tech.
+// Licensed under the MIT license.
+import React from 'react';
+import { useTranslation } from 'react-i18next';
+import PropTypes from 'prop-types';
+import { Box, Button, Dialog, IconButton, Stack, Typography } from '@mui/material';
+import { Icon } from '../Icon';
+
+export const DeleteScenarioModal = ({ open, onClose, onConfirm, scenarioName }) => {
+ const { t } = useTranslation();
+
+ const handleConfirm = () => {
+ onConfirm();
+ onClose();
+ };
+
+ return (
+
+ );
+};
+
+DeleteScenarioModal.propTypes = {
+ open: PropTypes.bool.isRequired,
+ onClose: PropTypes.func.isRequired,
+ onConfirm: PropTypes.func.isRequired,
+ scenarioName: PropTypes.string,
+};
+
+DeleteScenarioModal.defaultProps = {
+ scenarioName: '',
+};
diff --git a/src/components/DeleteScenarioModal/index.js b/src/components/DeleteScenarioModal/index.js
new file mode 100644
index 000000000..4a50af5d3
--- /dev/null
+++ b/src/components/DeleteScenarioModal/index.js
@@ -0,0 +1,4 @@
+// Copyright (c) Cosmo Tech.
+// Licensed under the MIT license.
+
+export { DeleteScenarioModal } from './DeleteScenarioModal';
diff --git a/src/components/Icon/Icon.js b/src/components/Icon/Icon.js
index 27a80e9ee..f5d8a18fa 100644
--- a/src/components/Icon/Icon.js
+++ b/src/components/Icon/Icon.js
@@ -1,6 +1,5 @@
// Copyright (c) Cosmo Tech.
// Licensed under the MIT license.
-// src/components/Icon/Icon.jsx
import * as Icons from 'lucide-react';
import React from 'react';
import PropTypes from 'prop-types';
@@ -16,7 +15,7 @@ export const Icon = ({ name, size = 16, color, className, strokeWidth = 1.5 }) =
};
Icon.propTypes = {
- name: PropTypes.oneOf(Object.keys(Icons)).isRequired,
+ name: PropTypes.string.isRequired,
size: PropTypes.number,
color: PropTypes.string,
className: PropTypes.string,
diff --git a/src/components/index.js b/src/components/index.js
index 4c3325c79..cd3161542 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -30,4 +30,5 @@ export { default as LoadingBackdrop } from './LoadingBackdrop';
export { default as StatusBar } from './StatusBar';
export { ModalWindow } from './ModalWindow';
export { PageHeader } from './PageHeader';
+export { DeleteScenarioModal } from './DeleteScenarioModal';
export { Icon } from './Icon';
diff --git a/src/views/ScenariosListing/ScenariosListingView.js b/src/views/ScenariosListing/ScenariosListingView.js
index 216af1bed..e56232c28 100644
--- a/src/views/ScenariosListing/ScenariosListingView.js
+++ b/src/views/ScenariosListing/ScenariosListingView.js
@@ -1,14 +1,20 @@
// Copyright (c) Cosmo Tech.
// Licensed under the MIT license.
-import React, { useCallback } from 'react';
+import React, { useCallback, useState } from 'react';
import { Box } from '@mui/material';
+import { DeleteScenarioModal } from '../../components';
import { useCreateScenarioButton } from '../../components/CreateScenarioButton/CreateScenarioButtonHook';
import { ScenarioListing } from '../../components/ScenarioListing';
import { useSortedScenarioList } from '../../hooks/ScenarioListHooks';
+import { useDeleteRunner } from '../../state/runner/hooks';
export const ScenariosListingView = () => {
const sortedScenarioList = useSortedScenarioList();
const { createScenario, workspaceId } = useCreateScenarioButton({});
+ const deleteRunner = useDeleteRunner();
+
+ const [deleteModalOpen, setDeleteModalOpen] = useState(false);
+ const [scenarioToDelete, setScenarioToDelete] = useState(null);
const handleCreateScenario = (form) => {
const scenarioData = {
@@ -27,6 +33,23 @@ export const ScenariosListingView = () => {
console.log('TODO: open Share modal:', dataset);
}, []);
+ const handleDeleteScenario = useCallback((scenario) => {
+ setScenarioToDelete(scenario);
+ setDeleteModalOpen(true);
+ }, []);
+
+ const handleConfirmDelete = useCallback(() => {
+ if (scenarioToDelete) {
+ deleteRunner(scenarioToDelete.id);
+ setScenarioToDelete(null);
+ }
+ }, [deleteRunner, scenarioToDelete]);
+
+ const handleCloseDeleteModal = useCallback(() => {
+ setDeleteModalOpen(false);
+ setScenarioToDelete(null);
+ }, []);
+
return (
{
onCreateScenario={handleCreateScenario}
onEditDataset={handleEditDataset}
onShareDataset={handleShareDataset}
+ onDeleteScenario={handleDeleteScenario}
+ />
+
);