import { zodResolver } from '@hookform/resolvers/zod' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { useEffect, useState } from 'react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { Button, Card, CardContent, CardFooter, Form, FormControl, FormField, Input } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { PageSection, PageSectionContent, PageSectionMeta, PageSectionSummary, PageSectionTitle, } from 'ui-patterns/PageSection' import * as z from 'zod' import AlertError from '@/components/ui/AlertError' import { useAuthConfigQuery } from '@/data/auth/auth-config-query' import { useAuthConfigUpdateMutation } from '@/data/auth/auth-config-update-mutation' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' const schema = z.object({ SITE_URL: z.string().min(1, 'Must have a Site URL'), }) const SiteUrl = () => { const { ref: projectRef } = useParams() const { data: authConfig, error: authConfigError, isError, isPending: isLoading, } = useAuthConfigQuery({ projectRef }) const { mutate: updateAuthConfig } = useAuthConfigUpdateMutation() const [isUpdatingSiteUrl, setIsUpdatingSiteUrl] = useState(false) const { can: canUpdateConfig } = useAsyncCheckPermissions( PermissionAction.UPDATE, 'custom_config_gotrue' ) const siteUrlForm = useForm({ resolver: zodResolver(schema as any), defaultValues: { SITE_URL: '', }, }) const { isDirty } = siteUrlForm.formState useEffect(() => { if (authConfig && !isUpdatingSiteUrl) { siteUrlForm.reset({ SITE_URL: authConfig.SITE_URL || '', }) } }, [authConfig, isUpdatingSiteUrl]) const onSubmitSiteUrl = (values: any) => { setIsUpdatingSiteUrl(true) updateAuthConfig( { projectRef: projectRef!, config: values }, { onError: (error) => { toast.error(`Failed to update site URL: ${error?.message}`) setIsUpdatingSiteUrl(false) }, onSuccess: () => { toast.success('Successfully updated site URL') setIsUpdatingSiteUrl(false) }, } ) } if (isError) { return ( ) } if (isLoading) { return ( ) } return ( Site URL
( )} /> {isDirty && ( )}
) } export default SiteUrl