| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { Check, ChevronsUpDown } from 'lucide-react'
- import { useId, useState } from 'react'
- import {
- Button,
- cn,
- Command,
- CommandEmpty,
- CommandGroup,
- CommandInput,
- CommandItem,
- CommandList,
- FormControl,
- Popover,
- PopoverContent,
- PopoverTrigger,
- ScrollArea,
- } from 'ui'
- // copied from https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html
- export const AWS_IDP_REGIONS = [
- 'af-south-1',
- 'ap-northeast-1',
- 'ap-northeast-2',
- 'ap-northeast-3',
- 'ap-south-1 ',
- 'ap-south-2 ',
- 'ap-southeast-1',
- 'ap-southeast-2',
- 'ap-southeast-3',
- 'ap-southeast-4',
- 'ca-central-1',
- 'eu-central-1',
- 'eu-central-2',
- 'eu-north-1',
- 'eu-south-1',
- 'eu-south-2',
- 'eu-west-1',
- 'eu-west-2',
- 'eu-west-3',
- 'il-central-1',
- 'me-central-1',
- 'me-south-1',
- 'sa-east-1',
- 'us-east-1',
- 'us-east-2',
- 'us-gov-west-1',
- 'us-west-1',
- 'us-west-2',
- ]
- export const AwsRegionSelector = ({
- value,
- onChange,
- }: {
- value: string
- onChange: (value: string) => void
- }) => {
- const [open, setOpen] = useState(false)
- const listboxId = useId()
- return (
- <Popover open={open} onOpenChange={setOpen}>
- <PopoverTrigger asChild>
- <FormControl>
- <Button
- type="default"
- role="combobox"
- aria-expanded={open}
- aria-controls={listboxId}
- className={cn('w-full justify-between', !value && 'text-muted-foreground')}
- size="small"
- iconRight={
- <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" strokeWidth={1} />
- }
- >
- {value ?? 'Select a region'}
- </Button>
- </FormControl>
- </PopoverTrigger>
- <PopoverContent id={listboxId} className="p-0" sameWidthAsTrigger>
- <Command>
- <CommandInput placeholder="Search AWS regions..." />
- <CommandList>
- <CommandEmpty>No regions found.</CommandEmpty>
- <CommandGroup>
- <ScrollArea className="h-72">
- {AWS_IDP_REGIONS.map((option) => (
- <CommandItem
- value={option}
- key={option}
- onSelect={(currentValue) => {
- onChange(currentValue === value ? '' : currentValue)
- setOpen(false)
- }}
- >
- <Check
- className={cn('mr-2 h-4 w-4', option === value ? 'opacity-100' : 'opacity-0')}
- />
- {option}
- </CommandItem>
- ))}
- </ScrollArea>
- </CommandGroup>
- </CommandList>
- </Command>
- </PopoverContent>
- </Popover>
- )
- }
|