From e01a65a3fde3ebe64e930f8bbfe495a77570ac9e Mon Sep 17 00:00:00 2001 From: Roman Pominov Date: Thu, 3 Nov 2022 17:11:44 +0400 Subject: [PATCH] split other components to view and logic --- .../sidebar-left/panels/pages/settings.tsx | 104 +++++++++++++----- 1 file changed, 74 insertions(+), 30 deletions(-) diff --git a/apps/designer/app/designer/features/sidebar-left/panels/pages/settings.tsx b/apps/designer/app/designer/features/sidebar-left/panels/pages/settings.tsx index f3ef0b879f..55e373780c 100644 --- a/apps/designer/app/designer/features/sidebar-left/panels/pages/settings.tsx +++ b/apps/designer/app/designer/features/sidebar-left/panels/pages/settings.tsx @@ -13,7 +13,7 @@ import { ChevronDoubleLeftIcon, TrashIcon } from "@webstudio-is/icons"; import { utils as projectUtils } from "@webstudio-is/project"; import type { ZodError } from "zod"; import { Header } from "../../lib/header"; -import { useState, useCallback } from "react"; +import { useState, useCallback, ComponentProps } from "react"; import { type Page } from "@webstudio-is/project"; import { usePages } from "~/designer/shared/nano-states"; import { useDebounce, useUnmount } from "react-use"; @@ -37,7 +37,8 @@ const Group = styled(Flex, { }); const fieldNames = ["name", "path"] as const; -type EditablePage = Pick; +type FieldName = typeof fieldNames[number]; +type EditablePage = Pick; const FormFields = ({ disabled, @@ -47,9 +48,9 @@ const FormFields = ({ }: { disabled?: boolean; values: EditablePage; - onChange: (event: { - field: FieldName; - value: EditablePage[FieldName]; + onChange: (event: { + field: Name; + value: EditablePage[Name]; }) => void; fieldErrors: ZodError["formErrors"]["fieldErrors"]; }) => { @@ -121,6 +122,39 @@ export const NewPageSettings = ({ const [values, setValues] = useState({ name: "", path: "" }); + const handleSubmit = () => { + fetcher.submit(values, { + method: "put", + action: `/rest/pages/${projectId}`, + }); + }; + + return ( + { + resetFieldError(field); + setValues((values) => ({ ...values, [field]: value })); + }} + /> + ); +}; + +const NewPageSettingsView = ({ + onSubmit, + isSubmitting, + onClose, + ...formFieldsProps +}: { + onSubmit: () => void; + isSubmitting: boolean; + onClose?: () => void; +} & ComponentProps) => { return ( <>
- - { - resetFieldError(field); - setValues((values) => ({ ...values, [field]: value })); - }} - /> +
{ + event.preventDefault(); + onSubmit(); + }} + > + - +
); @@ -183,7 +214,6 @@ export const PageSettings = ({ const [pages] = usePages(); const page = pages && projectUtils.pages.findById(pages, pageId); - const isHomePage = pageId === pages?.homePage.id; const [unsavedValues, setUnsavedValues] = useState>({}); const [submittedValues, setSubmittedValues] = useState>( @@ -196,9 +226,9 @@ export const PageSettings = ({ }); const handleChange = useCallback( - (event: { - field: FieldName; - value: EditablePage[FieldName]; + (event: { + field: Name; + value: EditablePage[Name]; }) => { resetFieldError(event.field); setUnsavedValues((values) => ({ ...values, [event.field]: event.value })); @@ -271,6 +301,28 @@ export const PageSettings = ({ return null; } + return ( + + ); +}; + +const PageSettingsView = ({ + isHomePage, + onDelete, + onClose, + ...formFieldsProps +}: { + isHomePage: boolean; + onDelete: () => void; + onClose?: () => void; +} & ComponentProps) => { return ( <>
{isHomePage === false && ( - + )} @@ -299,11 +347,7 @@ export const PageSettings = ({ } /> - + );