From fe2b9e376fd94a93d31ee33920c0ab8516f302a3 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Thu, 3 Oct 2024 12:47:29 +0200 Subject: [PATCH] Separate modals into components --- frontend/src/components/MainContent.js | 114 +++++++++--------- .../components/modals/CommitMessageModal.js | 31 +++++ .../src/components/modals/CreateFileModal.js | 30 +++++ .../src/components/modals/DeleteFileModal.js | 19 +++ 4 files changed, 139 insertions(+), 55 deletions(-) create mode 100644 frontend/src/components/modals/CommitMessageModal.js create mode 100644 frontend/src/components/modals/CreateFileModal.js create mode 100644 frontend/src/components/modals/DeleteFileModal.js diff --git a/frontend/src/components/MainContent.js b/frontend/src/components/MainContent.js index 39e29a1..91beee6 100644 --- a/frontend/src/components/MainContent.js +++ b/frontend/src/components/MainContent.js @@ -6,12 +6,13 @@ import { Dot, useTheme, useToasts, - Modal, - Input, } from '@geist-ui/core'; import { Code, Eye } from '@geist-ui/icons'; import FileTree from './FileTree'; import FileActions from './FileActions'; +import CreateFileModal from './modals/CreateFileModal'; +import DeleteFileModal from './modals/DeleteFileModal'; +import CommitMessageModal from './modals/CommitMessageModal'; import ContentView from './ContentView'; import { commitAndPush, saveFileContent, deleteFile } from '../services/api'; import { isImageFile } from '../utils/fileHelpers'; @@ -34,6 +35,9 @@ const MainContent = ({ const { setToast } = useToasts(); const [newFileModalVisible, setNewFileModalVisible] = useState(false); const [newFileName, setNewFileName] = useState(''); + const [deleteFileModalVisible, setDeleteFileModalVisible] = useState(false); + const [commitMessageModalVisible, setCommitMessageModalVisible] = + useState(false); useEffect(() => { if (isImageFile(selectedFile)) { @@ -59,25 +63,6 @@ const MainContent = ({ } }; - const handleCommitAndPush = async () => { - try { - const message = prompt('Enter commit message:'); - if (message) { - await commitAndPush(message); - setToast({ - text: 'Changes committed and pushed successfully', - type: 'success', - }); - await pullLatestChanges(); - } - } catch (error) { - setToast({ - text: 'Failed to commit and push changes: ' + error.message, - type: 'error', - }); - } - }; - const handleCreateFile = () => { setNewFileModalVisible(true); }; @@ -100,25 +85,44 @@ const MainContent = ({ setNewFileName(''); }; - const handleDeleteFile = async () => { - if (selectedFile) { - const confirmDelete = window.confirm( - `Are you sure you want to delete "${selectedFile}"?` - ); - if (confirmDelete) { - try { - await deleteFile(selectedFile); - setToast({ text: 'File deleted successfully', type: 'success' }); - await pullLatestChanges(); - onFileSelect(null); - } catch (error) { - setToast({ - text: 'Failed to delete file: ' + error.message, - type: 'error', - }); - } - } + const handleDeleteFile = () => { + setDeleteFileModalVisible(true); + }; + + const confirmDeleteFile = async () => { + try { + await deleteFile(selectedFile); + setToast({ text: 'File deleted successfully', type: 'success' }); + await pullLatestChanges(); + onFileSelect(null); + } catch (error) { + setToast({ + text: 'Failed to delete file: ' + error.message, + type: 'error', + }); } + setDeleteFileModalVisible(false); + }; + + const handleCommitAndPush = () => { + setCommitMessageModalVisible(true); + }; + + const confirmCommitAndPush = async (message) => { + try { + await commitAndPush(message); + setToast({ + text: 'Changes committed and pushed successfully', + type: 'success', + }); + await pullLatestChanges(); + } catch (error) { + setToast({ + text: 'Failed to commit and push changes: ' + error.message, + type: 'error', + }); + } + setCommitMessageModalVisible(false); }; const renderBreadcrumbs = () => { @@ -192,24 +196,24 @@ const MainContent = ({ - setNewFileModalVisible(false)} - > - Create New File - - setNewFileName(e.target.value)} - /> - - setNewFileModalVisible(false)}> - Cancel - - Create - + onSubmit={handleNewFileSubmit} + fileName={newFileName} + setFileName={setNewFileName} + /> + setDeleteFileModalVisible(false)} + onConfirm={confirmDeleteFile} + fileName={selectedFile} + /> + setCommitMessageModalVisible(false)} + onSubmit={confirmCommitAndPush} + /> ); }; diff --git a/frontend/src/components/modals/CommitMessageModal.js b/frontend/src/components/modals/CommitMessageModal.js new file mode 100644 index 0000000..db0ecf5 --- /dev/null +++ b/frontend/src/components/modals/CommitMessageModal.js @@ -0,0 +1,31 @@ +import React, { useState } from 'react'; +import { Modal, Input } from '@geist-ui/core'; + +const CommitMessageModal = ({ visible, onClose, onSubmit }) => { + const [message, setMessage] = useState(''); + + const handleSubmit = () => { + onSubmit(message); + setMessage(''); + }; + + return ( + + Enter Commit Message + + setMessage(e.target.value)} + /> + + + Cancel + + Commit + + ); +}; + +export default CommitMessageModal; diff --git a/frontend/src/components/modals/CreateFileModal.js b/frontend/src/components/modals/CreateFileModal.js new file mode 100644 index 0000000..09dbaa1 --- /dev/null +++ b/frontend/src/components/modals/CreateFileModal.js @@ -0,0 +1,30 @@ +import React from 'react'; +import { Modal, Input } from '@geist-ui/core'; + +const CreateFileModal = ({ + visible, + onClose, + onSubmit, + fileName, + setFileName, +}) => { + return ( + + Create New File + + setFileName(e.target.value)} + /> + + + Cancel + + Create + + ); +}; + +export default CreateFileModal; diff --git a/frontend/src/components/modals/DeleteFileModal.js b/frontend/src/components/modals/DeleteFileModal.js new file mode 100644 index 0000000..7221669 --- /dev/null +++ b/frontend/src/components/modals/DeleteFileModal.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { Modal, Text } from '@geist-ui/core'; + +const DeleteFileModal = ({ visible, onClose, onConfirm, fileName }) => { + return ( + + Delete File + + Are you sure you want to delete "{fileName}"? + + + Cancel + + Delete + + ); +}; + +export default DeleteFileModal;