mirror of
https://github.com/supabase/supabase.git
synced 2026-10-14 13:49:09 +03:00
* add new ui for restore to new project * rm false * fix typeerr badly * add form with name and new project pass * fix flash in loading > results state change * restore api types * update api types, add pitr picker * add additional monthly spend section * fix loading state jump * update copy * update api types * update to new clone status api res * fix mutation missing vars * dont render logical backups in list * fix state issue on submit * better pitr empty state * Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com> * Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx Co-authored-by: Joshen Lim <joshenlimek@gmail.com> * Apply suggestions from code review Co-authored-by: Joshen Lim <joshenlimek@gmail.com> Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com> * update api types to accept recoveryTimeTarget for PITR restores * simplify pitr code a bit cleanup state bugs * cleanup * add PITR submit * dont show restore btn unless status is complete * update api types * fix backups nav * markdown descs and fix type err in nav * check if project is cloned * fix: make source project data optional * fix datepicker highlighted day style * fix tz picker * check if its same or before/after in isWithinRange * update api types fix issue with clones * unsus * fix markdown rendering issues * add badge * Update database roles and permissions description * Update restore message text in PITR form component * Update key attribute to item.id in DatabaseBackupsNav component * Add conditional rendering for multiple available dates * Refactor dialog section styles in restore-to-new-project.tsx * Update null to undefined in conditional text assignment * reuse component in pitr backups * Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com> * Update link to original project in RestoreToNewProject * fix prettier --------- Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com> Co-authored-by: Crispy1975 <12525875+Crispy1975@users.noreply.github.com>
90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import { CheckIcon, ChevronsUpDown, Globe } from 'lucide-react'
|
|
import { useState } from 'react'
|
|
import {
|
|
Button,
|
|
CommandEmpty_Shadcn_,
|
|
CommandGroup_Shadcn_,
|
|
CommandInput_Shadcn_,
|
|
CommandItem_Shadcn_,
|
|
CommandList_Shadcn_,
|
|
Command_Shadcn_,
|
|
PopoverContent_Shadcn_,
|
|
PopoverTrigger_Shadcn_,
|
|
Popover_Shadcn_,
|
|
ScrollArea,
|
|
cn,
|
|
} from 'ui'
|
|
|
|
import { ALL_TIMEZONES } from './PITR.constants'
|
|
import type { Timezone } from './PITR.types'
|
|
|
|
interface TimezoneSelectionProps {
|
|
selectedTimezone: Timezone
|
|
onSelectTimezone: (timezone: Timezone) => void
|
|
}
|
|
|
|
export const TimezoneSelection = ({
|
|
selectedTimezone,
|
|
onSelectTimezone,
|
|
}: TimezoneSelectionProps) => {
|
|
const [open, setOpen] = useState(false)
|
|
|
|
const timezoneOptions = ALL_TIMEZONES.map((option) => option.text)
|
|
|
|
return (
|
|
<div className="w-full">
|
|
<Popover_Shadcn_ open={open} onOpenChange={setOpen}>
|
|
<PopoverTrigger_Shadcn_ asChild>
|
|
<Button
|
|
role="combobox"
|
|
aria-expanded={open}
|
|
className="w-[350px] justify-between"
|
|
size="small"
|
|
icon={<Globe />}
|
|
iconRight={<ChevronsUpDown size={14} strokeWidth={1.5} />}
|
|
>
|
|
{selectedTimezone
|
|
? timezoneOptions.find((option) => option === selectedTimezone.text)
|
|
: 'Select timezone...'}
|
|
</Button>
|
|
</PopoverTrigger_Shadcn_>
|
|
<PopoverContent_Shadcn_ className="w-[350px] p-0">
|
|
<Command_Shadcn_>
|
|
<CommandInput_Shadcn_ placeholder="Search timezone..." className="h-9" />
|
|
<CommandList_Shadcn_>
|
|
<CommandEmpty_Shadcn_>No timezones found...</CommandEmpty_Shadcn_>
|
|
<CommandGroup_Shadcn_>
|
|
<ScrollArea className="h-72">
|
|
{timezoneOptions.map((option) => (
|
|
<CommandItem_Shadcn_
|
|
key={option}
|
|
value={option}
|
|
onSelect={(text) => {
|
|
const selectedTimezone = ALL_TIMEZONES.find(
|
|
(option) => option.text === text
|
|
)
|
|
if (selectedTimezone) {
|
|
onSelectTimezone(selectedTimezone)
|
|
setOpen(false)
|
|
}
|
|
}}
|
|
>
|
|
{option}
|
|
<CheckIcon
|
|
className={cn(
|
|
'ml-auto h-4 w-4',
|
|
selectedTimezone.text === option ? 'opacity-100' : 'opacity-0'
|
|
)}
|
|
/>
|
|
</CommandItem_Shadcn_>
|
|
))}
|
|
</ScrollArea>
|
|
</CommandGroup_Shadcn_>
|
|
</CommandList_Shadcn_>
|
|
</Command_Shadcn_>
|
|
</PopoverContent_Shadcn_>
|
|
</Popover_Shadcn_>
|
|
</div>
|
|
)
|
|
}
|