diff --git a/src/App.tsx b/src/App.tsx
index 1bb6ac7..401d4a9 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -17,6 +17,7 @@ import UseShare from "./components/UseShare";
import LearnContent from "./components/Content";
import FloatingFAB from "./components/FabButton";
import ResizableContainer from "./components/ResizableContainer";
+import FileUpload from "./components/FileUpload";
const { Content } = Layout;
@@ -129,7 +130,7 @@ const App = () => {
display: "flex",
justifyContent: "center",
alignItems: "center",
- minHeight: "calc(100vh - 64px - 70px)", // Adjust for Navbar and Footer height
+ minHeight: "calc(100vh - 64px - 70px)",
}}
>
@@ -159,6 +160,7 @@ const App = () => {
>
+
@@ -173,19 +175,19 @@ const App = () => {
}}
>
- }
- rightPane={}
- initialLeftWidth={66}
- minLeftWidth={30}
- minRightWidth={30}
-/>
+ leftPane={
+
+ }
+ rightPane={}
+ initialLeftWidth={66}
+ minLeftWidth={30}
+ minRightWidth={30}
+ />
diff --git a/src/components/FileUpload.tsx b/src/components/FileUpload.tsx
new file mode 100644
index 0000000..7590a61
--- /dev/null
+++ b/src/components/FileUpload.tsx
@@ -0,0 +1,64 @@
+import React, { useCallback } from 'react';
+import { Upload, Button, message } from 'antd';
+import { UploadOutlined } from '@ant-design/icons';
+import type { UploadFile } from 'antd/es/upload/interface';
+import useAppStore from '../store/store';
+
+const { Dragger } = Upload;
+
+const FileUpload: React.FC = () => {
+ const { setTemplateMarkdown, setModelCto, setData } = useAppStore();
+
+ const handleFileUpload = useCallback(async (file: File) => {
+ try {
+ const content = await file.text();
+
+ // Determine file type based on extension
+ const fileExtension = file.name.split('.').pop()?.toLowerCase();
+
+ switch (fileExtension) {
+ case 'md':
+ await setTemplateMarkdown(content);
+ message.success('Template file loaded successfully');
+ break;
+ case 'cto':
+ await setModelCto(content);
+ message.success('Model file loaded successfully');
+ break;
+ case 'json':
+ await setData(content);
+ message.success('Data file loaded successfully');
+ break;
+ default:
+ message.error('Unsupported file type. Please upload .md, .cto, or .json files');
+ }
+ } catch (error) {
+ message.error('Failed to read file');
+ console.error('File upload error:', error);
+ }
+ }, [setTemplateMarkdown, setModelCto, setData]);
+
+ const uploadProps = {
+ name: 'file',
+ multiple: false,
+ accept: '.md,.cto,.json',
+ beforeUpload: (file: File) => {
+ handleFileUpload(file);
+ return false; // Prevent default upload behavior
+ },
+ };
+
+ return (
+
+
+
+
+ Click or drag file to upload
+
+ Support for .md (Template), .cto (Model), or .json (Data) files
+
+
+ );
+};
+
+export default FileUpload;
\ No newline at end of file