| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import { useFlag } from 'common'
- import { ChevronRight } from 'lucide-react'
- import { UseFormReturn } from 'react-hook-form'
- import {
- Badge,
- cn,
- Collapsible,
- CollapsibleContent,
- CollapsibleTrigger,
- FormControl,
- FormField,
- FormItem,
- RadioGroupStacked,
- RadioGroupStackedItem,
- Tooltip,
- TooltipContent,
- TooltipTrigger,
- } from 'ui'
- import { Admonition } from 'ui-patterns'
- import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
- import { CreateProjectForm } from './ProjectCreation.schema'
- import { DocsButton } from '@/components/ui/DocsButton'
- import Panel from '@/components/ui/Panel'
- import { DOCS_URL } from '@/lib/constants'
- interface AdvancedConfigurationProps {
- form: UseFormReturn<CreateProjectForm>
- }
- export const AdvancedConfiguration = ({ form }: AdvancedConfigurationProps) => {
- const disableOrioleProjectCreation = useFlag('disableOrioleProjectCreation')
- return (
- <Panel.Content>
- <Collapsible>
- <CollapsibleTrigger className="group/advanced-trigger font-mono uppercase tracking-widest text-xs flex items-center gap-1 text-foreground-lighter/75 hover:text-foreground-light transition data-open:text-foreground-light">
- Advanced Configuration
- <ChevronRight
- size={16}
- strokeWidth={1}
- className="mr-2 group-data-open/advanced-trigger:rotate-90 group-hover/advanced-trigger:text-foreground-light transition"
- />
- </CollapsibleTrigger>
- <CollapsibleContent
- className={cn(
- 'pt-2 data-closed:animate-collapsible-up data-open:animate-collapsible-down'
- )}
- >
- <p className="text-xs text-foreground-lighter mb-6">
- These settings cannot be changed after the project is created
- </p>
- <FormField
- name="useOrioleDb"
- control={form.control}
- render={({ field }) => (
- <>
- <FormItemLayout
- layout="horizontal"
- label="Postgres Type"
- className="[&>div>label]:break-normal!"
- >
- <FormControl>
- <RadioGroupStacked
- // Due to radio group not supporting boolean values
- // value is converted to boolean
- onValueChange={(value) => field.onChange(value === 'true')}
- defaultValue={field.value.toString()}
- >
- <FormItem asChild>
- <FormControl>
- <RadioGroupStackedItem
- value="false"
- // @ts-ignore
- label={
- <>
- Postgres
- <Badge>Default</Badge>
- </>
- }
- description="Recommended for production workloads"
- className="[&>div>div>p]:text-left [&>div>div>p]:text-xs [&>div>div>label]:flex [&>div>div>label]:items-center [&>div>div>label]:gap-x-2"
- />
- </FormControl>
- </FormItem>
- <FormItem asChild>
- <FormControl>
- <Tooltip>
- <TooltipTrigger asChild>
- <RadioGroupStackedItem
- value="true"
- // @ts-ignore
- label={
- <>
- Postgres with OrioleDB
- <Badge variant="warning">Alpha</Badge>
- </>
- }
- description="Not recommended for production workloads"
- className={cn(
- '[&>div>div>p]:text-left [&>div>div>p]:text-xs [&>div>div>label]:flex [&>div>div>label]:items-center [&>div>div>label]:gap-x-2',
- form.getValues('useOrioleDb') ? 'rounded-b-none!' : ''
- )}
- disabled={disableOrioleProjectCreation}
- />
- </TooltipTrigger>
- {disableOrioleProjectCreation && (
- <TooltipContent side="right" className="w-60 text-center">
- OrioleDB is temporarily disabled for new projects. Please try again
- later.
- </TooltipContent>
- )}
- </Tooltip>
- </FormControl>
- </FormItem>
- </RadioGroupStacked>
- </FormControl>
- {form.getValues('useOrioleDb') && (
- <Admonition
- type="warning"
- className="rounded-t-none [&>div]:text-xs"
- title="OrioleDB is not production ready"
- description="Postgres with OrioleDB extension is currently in Public Alpha and not recommended for production usage yet."
- >
- <DocsButton className="mt-2" href={`${DOCS_URL}/guides/database/orioledb`} />
- </Admonition>
- )}
- </FormItemLayout>
- </>
- )}
- />
- </CollapsibleContent>
- </Collapsible>
- </Panel.Content>
- )
- }
|