import {updateProjects} from 'sentry/actionCreators/pageFilters';
import {CompactSelect} from 'sentry/components/compactSelect';
import ProjectBadge from 'sentry/components/idBadge/projectBadge';
import {t} from 'sentry/locale';
import {Project} from 'sentry/types';
import useOrganization from 'sentry/utils/useOrganization';
import usePageFilters from 'sentry/utils/usePageFilters';
import useProjects from 'sentry/utils/useProjects';
import useRouter from 'sentry/utils/useRouter';
import {ALLOWED_PROJECT_IDS_FOR_ORG_SLUG} from 'sentry/views/starfish/allowedProjects';
export function StarfishProjectSelector() {
const {projects, initiallyLoaded: projectsLoaded, fetchError} = useProjects();
const organization = useOrganization();
const {selection, isReady} = usePageFilters();
const router = useRouter();
if (!projectsLoaded || !isReady) {
return (
);
}
if (fetchError) {
throw new Error('Failed to fetch projects');
}
const allowedProjectIDs: string[] =
ALLOWED_PROJECT_IDS_FOR_ORG_SLUG[organization.slug] ?? [];
const projectOptions = projects
.filter(project => allowedProjectIDs.includes(project.id))
.map(project => ({
label: ,
value: project.id,
}));
const selectedOption =
projectOptions.find(option =>
selection.projects.includes(parseInt(option.value, 10))
) ?? projectOptions[0];
const handleProjectChange = option =>
updateProjects([parseInt(option.value, 10)], router, {save: true});
if (
selection.projects.length > 1 ||
!allowedProjectIDs.includes(`${selection.projects[0]}`)
) {
handleProjectChange(projectOptions[0]);
}
return (
);
}
function ProjectOptionLabel({project}: {project: Project}) {
return ;
}