From 00fa1e97ff3437507fda4818fc85ef5ea9fd49e5 Mon Sep 17 00:00:00 2001 From: Oleg Isonen Date: Sat, 3 Feb 2024 16:41:29 +0100 Subject: [PATCH] chore: Reorganize project settings (#2865) ## Description No functional changes, only namings and structure - each section, separate module ## Steps for reproduction 1. open project settings 2. expect no changes ## Code Review - [ ] hi @TrySound , I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 5de6) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env.example` and the `builder/env-check.js` if mandatory --- apps/builder/app/builder/builder.tsx | 2 +- .../image-control.tsx | 1 + .../features/project-settings/index.ts | 2 + .../project-settings/meta-section.tsx | 117 ++++++++ .../project-settings.stories.tsx | 0 .../project-settings/project-settings.tsx | 114 ++++++++ .../project-settings/publish-section.tsx | 46 +++ .../redirect-settings.tsx} | 2 +- .../builder/features/seo/project-settings.tsx | 267 ------------------ .../panels/pages/page-settings.tsx | 4 +- 10 files changed, 285 insertions(+), 270 deletions(-) rename apps/builder/app/builder/features/{seo => project-settings}/image-control.tsx (88%) create mode 100644 apps/builder/app/builder/features/project-settings/index.ts create mode 100644 apps/builder/app/builder/features/project-settings/meta-section.tsx rename apps/builder/app/builder/features/{seo => project-settings}/project-settings.stories.tsx (100%) create mode 100644 apps/builder/app/builder/features/project-settings/project-settings.tsx create mode 100644 apps/builder/app/builder/features/project-settings/publish-section.tsx rename apps/builder/app/builder/features/{seo/project-redirects.tsx => project-settings/redirect-settings.tsx} (99%) delete mode 100644 apps/builder/app/builder/features/seo/project-settings.tsx diff --git a/apps/builder/app/builder/builder.tsx b/apps/builder/app/builder/builder.tsx index 2b1c12194f..33a5419d9a 100644 --- a/apps/builder/app/builder/builder.tsx +++ b/apps/builder/app/builder/builder.tsx @@ -48,7 +48,7 @@ import { useSyncPageUrl } from "~/shared/pages"; import { useMount } from "~/shared/hook-utils/use-mount"; import { subscribeCommands } from "~/builder/shared/commands"; import { AiCommandBar } from "./features/ai/ai-command-bar"; -import { ProjectSettings } from "./features/seo/project-settings"; +import { ProjectSettings } from "./features/project-settings"; import type { UserPlanFeatures } from "~/shared/db/user-plan-features.server"; import { $userPlanFeatures } from "./shared/nano-states"; import { useNavigatorLayout } from "./features/sidebar-left/navigator"; diff --git a/apps/builder/app/builder/features/seo/image-control.tsx b/apps/builder/app/builder/features/project-settings/image-control.tsx similarity index 88% rename from apps/builder/app/builder/features/seo/image-control.tsx rename to apps/builder/app/builder/features/project-settings/image-control.tsx index a9bfea7269..5da33350ef 100644 --- a/apps/builder/app/builder/features/seo/image-control.tsx +++ b/apps/builder/app/builder/features/project-settings/image-control.tsx @@ -2,6 +2,7 @@ import { FloatingPanel } from "~/builder/shared/floating-panel"; import { ImageManager } from "~/builder/shared/image-manager"; import type { ReactElement } from "react"; +// @todo should be moved to shared as its being reused in another feature export const ImageControl = (props: { onAssetIdChange: (assetId: string) => void; children: ReactElement; diff --git a/apps/builder/app/builder/features/project-settings/index.ts b/apps/builder/app/builder/features/project-settings/index.ts new file mode 100644 index 0000000000..cf35363562 --- /dev/null +++ b/apps/builder/app/builder/features/project-settings/index.ts @@ -0,0 +1,2 @@ +export * from "./project-settings"; +export * from "./image-control"; diff --git a/apps/builder/app/builder/features/project-settings/meta-section.tsx b/apps/builder/app/builder/features/project-settings/meta-section.tsx new file mode 100644 index 0000000000..3fd0973833 --- /dev/null +++ b/apps/builder/app/builder/features/project-settings/meta-section.tsx @@ -0,0 +1,117 @@ +import { useStore } from "@nanostores/react"; +import { + Grid, + InputField, + Label, + theme, + Text, + TextArea, + Separator, + Button, + css, +} from "@webstudio-is/design-system"; +import { ImageControl } from "./image-control"; +import { $assets } from "~/shared/nano-states"; +import env from "~/shared/env"; +import { Image, createImageLoader } from "@webstudio-is/image"; +import { useIds } from "~/shared/form-utils"; +import type { ProjectMeta } from "@webstudio-is/sdk"; + +const imgStyle = css({ + width: 72, + height: 72, + borderRadius: theme.borderRadius[4], + borderWidth: 1, + borderStyle: "solid", + borderColor: theme.colors.borderMain, +}); + +export const MetaSection = (props: { + meta: ProjectMeta; + onMetaChange: (value: ProjectMeta) => void; +}) => { + const ids = useIds(["siteName", "favicon", "code"]); + const handleChange = + (name: Name) => + (value: ProjectMeta[Name]) => { + props.onMetaChange({ + ...props.meta, + [name]: value, + }); + }; + + const assets = useStore($assets); + const asset = assets.get(props.meta.faviconAssetId ?? ""); + + const favIconUrl = asset ? `${asset.name}` : undefined; + + const imageLoader = createImageLoader({ + imageBaseUrl: env.IMAGE_BASE_URL, + }); + + return ( + <> + + + handleChange("siteName")(event.target.value)} + placeholder="Current Project Name" + name="Name" + autoFocus + /> + + + + + + Favicon + + + + + + Upload a 32 x 32 px image to display in browser tabs. + + + + + + + + + + + + Custom Code + + Custom code and scripts will be added at the end of the <head> + tag to every page across the published project. + +