import { useMemo, useState } from 'react'; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; function csrfToken() { return document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ?? ''; } function persistSelection(projectUuid, environmentUuid) { void fetch('/v5/selection', { method: 'POST', credentials: 'same-origin', headers: { Accept: 'application/json', 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrfToken(), }, body: JSON.stringify({ project_uuid: projectUuid, environment_uuid: environmentUuid, }), }); } export function AppNavbar({ flux, clusters = [], projects = [], selectedProjectUuid = null, selectedEnvironmentUuid = null, }) { const firstProject = projects[0] ?? null; const [projectUuid, setProjectUuid] = useState(selectedProjectUuid ?? firstProject?.uuid ?? ''); const selectedProject = useMemo( () => projects.find((project) => project.uuid === projectUuid) ?? firstProject, [firstProject, projectUuid, projects], ); const firstEnvironment = selectedProject?.environments?.[0] ?? null; const [environmentUuid, setEnvironmentUuid] = useState(selectedEnvironmentUuid ?? firstEnvironment?.uuid ?? ''); const selectedEnvironment = useMemo( () => selectedProject?.environments?.find((environment) => environment.uuid === environmentUuid) ?? firstEnvironment, [environmentUuid, firstEnvironment, selectedProject], ); function selectProject(nextProjectUuid) { const nextProject = projects.find((project) => project.uuid === nextProjectUuid); const nextEnvironmentUuid = nextProject?.environments?.[0]?.uuid ?? ''; setProjectUuid(nextProjectUuid); setEnvironmentUuid(nextEnvironmentUuid); persistSelection(nextProjectUuid, nextEnvironmentUuid); } function selectEnvironment(nextEnvironmentUuid) { setEnvironmentUuid(nextEnvironmentUuid); persistSelection(projectUuid, nextEnvironmentUuid); } return (
); }