import { isEqual } from 'lodash' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { useData } from '../../hooks/useData' import { api } from '../../services/api' import type { Colors, Fonts } from '../../styles/stitches.config' import { theme } from '../../styles/stitches.config' import type { Data } from '../../types/Data' import { getLocalStorageData, removeLocalStorageData, setLocalStorageData } from '../../utils/localStorage' import type { ButtonVariantProps } from '../Button' import { Home } from '../Home' import { DescriptionInput } from './DescriptionInput' import { NameInput } from './NameInput' import { Content, Preview, Wrapper } from './styles' type DashProps = { initialData: Data } export function Dash({ initialData }: DashProps) { const { push } = useRouter() const { data, setData } = useData() const [isLoading, setIsLoading] = useState(true) const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false) useEffect(() => { if (isLoading) { const storageData = getLocalStorageData() if (storageData) setData(storageData) else setData(initialData) setIsLoading(false) } if (!isLoading && !isEqual(initialData, data)) { setHasUnsavedChanges(true) setLocalStorageData(data) } else { setHasUnsavedChanges(false) } }, [data, initialData, isLoading, setData]) const handleSave = async () => { try { await api.put('data', { data }) removeLocalStorageData() setHasUnsavedChanges(false) push('/') } catch (error) { console.error(error) } } const handleChangeBackground = (background: Colors) => { setData({ ...data, settings: { ...data.settings, colors: { ...data.settings.colors, background } } }) } const handleChangeButtonsSchema = (schema: ButtonVariantProps['schema']) => { setData({ ...data, settings: { ...data.settings, buttonsSchema: schema } }) } const handleChangeOutline = (outline: ButtonVariantProps['outline']) => { setData({ ...data, settings: { ...data.settings, outline } }) } const handleChangeFont = (font: Fonts) => { setData({ ...data, settings: { ...data.settings, font } }) } return (

Dash{' '} {hasUnsavedChanges && ( <> - has unsaved changes )}

handleChangeOutline(!data.settings.outline as ButtonVariantProps['outline']) } />
) }