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