diff --git a/guardian-admin-dashboard/src/pages/OrgAssignmentPage.jsx b/guardian-admin-dashboard/src/pages/OrgAssignmentPage.jsx index 2f5587c80..37a33f2f2 100644 --- a/guardian-admin-dashboard/src/pages/OrgAssignmentPage.jsx +++ b/guardian-admin-dashboard/src/pages/OrgAssignmentPage.jsx @@ -13,14 +13,19 @@ import { import { Link } from "react-router-dom"; import Button from "../components/common/Button"; import Dropdown from "../components/common/Dropdown"; -import { getMyOrganizations } from "../services/orgService"; +import OrgDetailPage from './OrgDetailPage'; +import { getOrganizations, createOrganization } from "../services/orgService"; + +const initialFormData = { + name: '', + description: '', + active: 'true', +}; function formatDate(dateValue) { if (!dateValue) return "-"; - const date = new Date(dateValue); if (Number.isNaN(date.getTime())) return "-"; - return date.toLocaleDateString("en-AU", { day: "2-digit", month: "short", @@ -33,15 +38,20 @@ export default function OrgAssignmentPage() { const [selectedOrgId, setSelectedOrgId] = useState(""); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); + const [selectedViewOrg, setSelectedViewOrg] = useState(null); + + const [showForm, setShowForm] = useState(false); + const [formData, setFormData] = useState(initialFormData); + const [submitting, setSubmitting] = useState(false); + const [formError, setFormError] = useState(''); + const [successMessage, setSuccessMessage] = useState(''); const fetchOrganizations = useCallback(async () => { setLoading(true); setError(""); - try { - const response = await getMyOrganizations(); + const response = await getOrganizations(); const orgs = Array.isArray(response?.orgs) ? response.orgs : []; - setOrganizations(orgs); setSelectedOrgId((prev) => prev || orgs[0]?._id || ""); } catch (err) { @@ -64,28 +74,58 @@ export default function OrgAssignmentPage() { label: org.name, })); - const stats = selectedOrg - ? [ - { - title: "Staff Members", - value: selectedOrg.staff?.length ?? 0, - icon: Users, - description: "Staff currently linked with this organisation.", - }, - { - title: "Status", - value: selectedOrg.active ? "Active" : "Inactive", - icon: ShieldCheck, - description: "Current organisation status from backend data.", - }, - { - title: "Created On", - value: formatDate(selectedOrg.created_at), - icon: CalendarDays, - description: "Date this organisation record was created.", - }, - ] - : []; + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData((prev) => ({ ...prev, [name]: value })); + }; + + const resetForm = () => { + setFormData(initialFormData); + }; + + const handleToggleForm = () => { + setShowForm((prev) => !prev); + setFormError(''); + setSuccessMessage(''); + if (showForm) resetForm(); + }; + + const handleAddOrganization = async (e) => { + e.preventDefault(); + + if (!formData.name || !formData.description) { + setFormError('Name and description are required.'); + setSuccessMessage(''); + return; + } + + try { + setSubmitting(true); + setFormError(''); + setSuccessMessage(''); + + const payload = { + name: formData.name, + description: formData.description, + active: formData.active === 'true', + }; + + const response = await createOrganization(payload); + + setSuccessMessage('Organisation created successfully.'); + resetForm(); + setShowForm(false); + await fetchOrganizations(); + } catch (err) { + console.error('Add organization error:', err); + setFormError( + err?.response?.data?.message || err?.message || 'Failed to add organisation.' + ); + setSuccessMessage(''); + } finally { + setSubmitting(false); + } + }; if (loading) { return ( @@ -106,7 +146,6 @@ export default function OrgAssignmentPage() {
{error}
-