import { useRouter } from 'next/router' import { ControllerRenderProps, UseFormReturn } from 'react-hook-form' import { useDefaultRegionQuery } from 'data/misc/get-default-region-query' import { PROVIDERS } from 'lib/constants' import type { CloudProvider } from 'shared-data' import { SelectContent_Shadcn_, SelectGroup_Shadcn_, SelectItem_Shadcn_, SelectTrigger_Shadcn_, SelectValue_Shadcn_, Select_Shadcn_, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { getAvailableRegions } from './ProjectCreation.utils' interface RegionSelectorProps { cloudProvider: CloudProvider field: ControllerRenderProps form: UseFormReturn layout?: 'vertical' | 'horizontal' } // [Joshen] Let's use a library to maintain the flag SVGs in the future // I tried using https://flagpack.xyz/docs/development/react/ but couldn't get it to render // ^ can try again next time export const RegionSelector = ({ cloudProvider, field, layout = 'horizontal', }: RegionSelectorProps) => { const router = useRouter() const showNonProdFields = process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' || process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging' const availableRegions = getAvailableRegions(PROVIDERS[cloudProvider].id) const regionsArray = Object.entries(availableRegions) const { isLoading: isLoadingDefaultRegion } = useDefaultRegionQuery({ cloudProvider }) return (

Select the region closest to your users for the best performance.

{showNonProdFields && (

Note: Only US (NV), Frankfurt and SG are supported for local/staging projects

)} } > {regionsArray.map(([key, value]) => { const label = value.displayName as string return (
region icon {label}
) })}
) }