import type { OrganisationResponse, UserRecord } from "@issue/shared"; import { useCallback, useEffect, useState } from "react"; import { OrganisationSelect } from "@/components/organisation-select"; import { SettingsPageLayout } from "@/components/settings-page-layout"; import { getAuthHeaders } from "@/lib/utils"; const SERVER_URL = import.meta.env.VITE_SERVER_URL?.trim() || "http://localhost:3000"; function Organisations() { const user = JSON.parse(localStorage.getItem("user") || "{}") as UserRecord; const [organisations, setOrganisations] = useState([]); const [selectedOrganisation, setSelectedOrganisation] = useState(null); const refetchOrganisations = useCallback( async (options?: { selectOrganisationId?: number }) => { try { const res = await fetch(`${SERVER_URL}/organisation/by-user?userId=${user.id}`, { headers: getAuthHeaders(), }); if (!res.ok) { console.error(await res.text()); setOrganisations([]); setSelectedOrganisation(null); return; } const data = (await res.json()) as Array; setOrganisations(data); if (options?.selectOrganisationId) { const created = data.find((o) => o.Organisation.id === options.selectOrganisationId); if (created) { setSelectedOrganisation(created); return; } } setSelectedOrganisation((prev) => { if (!prev) return data[0] || null; const stillExists = data.find((o) => o.Organisation.id === prev.Organisation.id); return stillExists || data[0] || null; }); } catch (err) { console.error("error fetching organisations:", err); setOrganisations([]); setSelectedOrganisation(null); } }, [user.id], ); useEffect(() => { void refetchOrganisations(); }, [refetchOrganisations]); useEffect(() => { setSelectedOrganisation((prev) => prev || organisations[0] || null); }, [organisations]); return (
{ await refetchOrganisations({ selectOrganisationId: organisationId }); }} />
{selectedOrganisation ? (

{selectedOrganisation.Organisation.name}

Slug: {selectedOrganisation.Organisation.slug}

Role: {selectedOrganisation.OrganisationMember.role}

{selectedOrganisation.Organisation.description ? (

{selectedOrganisation.Organisation.description}

) : (

No description

)}
) : (

No organisations yet.

)}
); } export default Organisations;