import { zodResolver } from '@hookform/resolvers/zod' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQuery } from '@tanstack/react-query' import { useParams } from 'common' import { useEffect, useMemo } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import { toast } from 'sonner' import { Button, Card, CardContent, CardFooter, Form, FormControl, FormField, Switch } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { PageSection, PageSectionAside, PageSectionContent, PageSectionMeta, PageSectionSummary, PageSectionTitle, } from 'ui-patterns/PageSection' import z from 'zod' import { AlertError } from '@/components/ui/AlertError' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { DocsButton } from '@/components/ui/DocsButton' import { usePostgresConfigurationUpdateMutation } from '@/data/config/postgres-config-mutation' import { postgresConfigurationQueryOptions } from '@/data/config/postgres-config-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { DOCS_URL } from '@/lib/constants' const FormSchema = z.object({ log_connections: z.boolean(), log_disconnections: z.boolean(), }) export const ConnectionLogging = () => { const { ref: projectRef } = useParams() const { data: project } = useSelectedProjectQuery() const { can: canUpdatePostgresConfiguration } = useAsyncCheckPermissions( PermissionAction.UPDATE, 'projects', { resource: { project_id: project?.id } } ) const { data: postgresConfig, error, isSuccess, isError, } = useQuery(postgresConfigurationQueryOptions({ projectRef })) const { mutate: updatePostgresConfig, isPending: isSaving } = usePostgresConfigurationUpdateMutation({ onSuccess: () => toast('Successfully updated logging settings'), }) const defaultValues = useMemo( () => ({ log_connections: postgresConfig?.log_connections ?? false, log_disconnections: postgresConfig?.log_disconnections ?? false, }), [postgresConfig] ) const form = useForm>({ resolver: zodResolver(FormSchema), values: defaultValues, }) const hasChanges = form.formState.isDirty const onSubmit: SubmitHandler> = (payload) => { if (!projectRef) return updatePostgresConfig({ projectRef, payload }) } useEffect(() => { if (isSuccess) form.reset(defaultValues) }, [isSuccess, defaultValues, form]) return ( Connection logging {isError ? ( ) : (
( )} /> ( )} /> Save
)}
) }