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;