import Link from 'next/link' import { useRouter } from 'next/router' import { ParsedUrlQuery } from 'querystring' import { Button, Dropdown, IconPlus, Popover } from 'ui' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants' // [Fran] the idea is to let users change projects without losing the current page, // but at the same time we need to redirect correctly between urls that might be // unique to a project e.g. '/project/projectRef/editor/tableId' // Right now, I'm gonna assume that any router query after the projectId, // is a unique project id/marker so we'll redirect the user to the // highest common route with just projectRef in the router queries. export const sanitizeRoute = (route: string, routerQueries: ParsedUrlQuery) => { const queryArray = Object.entries(routerQueries) if (queryArray.length > 1) { // [Joshen] Ideally we shouldn't use hard coded numbers, but temp workaround // for storage bucket route since its longer const isStorageBucketRoute = 'bucketId' in routerQueries return route .split('/') .slice(0, isStorageBucketRoute ? 5 : 4) .join('/') } else { return route } } const ProjectDropdown = () => { const selectedOrganization = useSelectedOrganization() const selectedProject = useSelectedProject() const { data: allProjects } = useProjectsQuery() const selectedOrganizationSlug = selectedOrganization?.slug const router = useRouter() const sanitizedRoute = sanitizeRoute(router.route, router.query) return IS_PLATFORM ? ( {allProjects ?.filter((x) => x.status !== PROJECT_STATUS.INACTIVE) .sort((a, b) => a.name.localeCompare(b.name)) .map((x) => ( {x.name} ))} }>New project } > ) : ( ) } export default ProjectDropdown