import { Box, Button, ButtonGroup, Center, Divider, FormControl, FormErrorMessage, FormHelperText, FormLabel, Heading, HStack, Image, Input, Stack, StackDivider, Text, Textarea, useColorModeValue, useToast, VStack } from '@chakra-ui/react' import {HiCloudUpload} from '@react-icons/all-files/hi/HiCloudUpload' import * as React from 'react' import {FieldGroup} from './FieldGroup' import {LanguageSelect} from './LanguageSelect' import {useSnekFinder} from '@jaenjs/snek-finder' import {Controller, useForm} from 'react-hook-form' import {ISite, ISiteMetadata} from '../../../types' type FormDataType = { siteMetadata: ISiteMetadata } export interface SettingsTabProps { data: ISite onUpdate: (data: FormDataType) => void } export const SettingsTab = ({data, onUpdate}: SettingsTabProps) => { const toast = useToast() const [defaultValues, setDefaultValues] = React.useState(data) React.useEffect(() => { setDefaultValues(data) reset(data) }, [data]) const { register, reset, handleSubmit, setValue, control, formState: {errors, isSubmitting, isDirty, isValid} } = useForm({ defaultValues }) const [finderReference, setFinderReference] = React.useState(null) const finder = useSnekFinder({ mode: 'selector', onSelect: ({src, name, description}) => { if (finderReference) { setValue(finderReference, src, { shouldDirty: true }) setFinderReference(null) } } }) const handleSiteImageUpload = () => { setFinderReference('siteMetadata.image') finder.toggleSelector() } const handleSiteImageDelete = () => { setValue('siteMetadata.image', '', { shouldDirty: true }) } const handleOrganizationLogoUpload = () => { setFinderReference('siteMetadata.organization.logo') finder.toggleSelector() } const handleOrganizationLogoDelete = () => { setValue('siteMetadata.organization.logo', '', { shouldDirty: true }) } const disabled = !isDirty || !isValid const onSubmit = (values: FormDataType) => { onUpdate(values) setDefaultValues(values) reset(values) toast({ title: 'Saved', description: 'Your changes have been saved.', status: 'success', duration: 5000 }) } const onReset = () => { reset(defaultValues) } const currentWindowUrl = typeof window !== 'undefined' ? window.location.href : '' return ( <> {finder.finderElement}
Settings } overflowY="scroll" px={{base: '4', md: '10'}}> Title {errors.siteMetadata?.title?.message} Url value && !/^https?:\/\//.test(value) ? 'Url must start with http:// or https://' : undefined } })} /> {errors.siteMetadata?.siteUrl?.message} Description