diff --git a/src/components/CreateProjectModal.tsx b/src/components/CreateProjectModal.tsx new file mode 100644 index 0000000..0d8a696 --- /dev/null +++ b/src/components/CreateProjectModal.tsx @@ -0,0 +1,108 @@ +import React, { useState } from 'react' +import apiClient from '../api/client' + +interface CreateProjectModalProps { + isOpen: boolean + onClose: () => void + onCreated: () => void +} + +export default function CreateProjectModal({ isOpen, onClose, onCreated }: CreateProjectModalProps) { + const [formData, setFormData] = useState({ + name: '', + description: '', + giteaOwner: 'admin', + giteaRepoName: '', + }) + const [loading, setLoading] = useState(false) + const [error, setError] = useState('') + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + setLoading(true) + setError('') + + try { + await apiClient.post('/projects', formData) + onCreated() + onClose() + setFormData({ name: '', description: '', giteaOwner: 'admin', giteaRepoName: '' }) + } catch (err: any) { + setError(err.response?.data?.message || 'Failed to create project') + } finally { + setLoading(false) + } + } + + if (!isOpen) return null + + return ( +
+
+

Create New Project

+ + {error && ( +
+ {error} +
+ )} + +
+
+ + setFormData({ ...formData, name: e.target.value })} + className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + required + /> +
+ +
+ +