From ac65e6ede095aacbb6840f88864ada256d0e38d3 Mon Sep 17 00:00:00 2001 From: lby Date: Sun, 23 Apr 2023 21:06:59 +0800 Subject: [PATCH 1/7] feat: sandbox alpha --- web/.vscode/settings.json | 5 +- .../molecules/PluginEditor/core/hooks.ts | 6 + .../molecules/PluginEditor/core/index.tsx | 2 + .../EarthEditor/core/CanvasArea/hooks.ts | 5 + .../EarthEditor/core/CanvasArea/index.tsx | 2 + .../PluginFrame/PluginIFrame/index.tsx | 43 +++-- .../Plugins/PluginFrame/SafeIFrame/hooks.ts | 169 ++++++++++++++++++ .../PluginFrame/SafeIFrame/index.stories.tsx | 49 +++++ .../Plugins/PluginFrame/SafeIFrame/index.tsx | 79 ++++++++ web/src/core/Crust/Plugins/hooks.ts | 3 + web/src/core/Crust/Plugins/types.ts | 2 + .../Crust/Plugins/useExperimentalSandbox.ts | 6 + web/src/core/Crust/index.tsx | 1 + web/src/core/Visualizer/index.tsx | 1 + 14 files changed, 360 insertions(+), 13 deletions(-) create mode 100644 web/src/core/Crust/Plugins/PluginFrame/SafeIFrame/hooks.ts create mode 100644 web/src/core/Crust/Plugins/PluginFrame/SafeIFrame/index.stories.tsx create mode 100644 web/src/core/Crust/Plugins/PluginFrame/SafeIFrame/index.tsx create mode 100644 web/src/core/Crust/Plugins/useExperimentalSandbox.ts diff --git a/web/.vscode/settings.json b/web/.vscode/settings.json index 170b9e5d8..aab1ef6ee 100644 --- a/web/.vscode/settings.json +++ b/web/.vscode/settings.json @@ -3,5 +3,8 @@ "yaml.schemas": { "https://json.schemastore.org/github-workflow": "/.github/workflows/**/*.yml" }, - "vitest.commandLine": "yarn run vitest watch" + "vitest.commandLine": "yarn run vitest watch", + "i18n-ally.localesPaths": [ + "src/i18n" + ] } diff --git a/web/src/components/molecules/PluginEditor/core/hooks.ts b/web/src/components/molecules/PluginEditor/core/hooks.ts index 8d66590d8..15460c6bf 100644 --- a/web/src/components/molecules/PluginEditor/core/hooks.ts +++ b/web/src/components/molecules/PluginEditor/core/hooks.ts @@ -187,6 +187,11 @@ export default () => { [], ); + const useExperimentalSandbox = useMemo( + () => new URLSearchParams(window.location.search).has("useSandbox"), + [], + ); + return { sourceCode, layers, @@ -197,6 +202,7 @@ export default () => { showAlignSystem, showInfobox, engineMeta, + useExperimentalSandbox, setSourceCode, setMode, setInfoboxSize, diff --git a/web/src/components/molecules/PluginEditor/core/index.tsx b/web/src/components/molecules/PluginEditor/core/index.tsx index 80aa20104..9511c7b65 100644 --- a/web/src/components/molecules/PluginEditor/core/index.tsx +++ b/web/src/components/molecules/PluginEditor/core/index.tsx @@ -19,6 +19,7 @@ const PluginEditor: React.FC = () => { showInfobox, layers, engineMeta, + useExperimentalSandbox, setSourceCode, setMode, setInfoboxSize, @@ -48,6 +49,7 @@ const PluginEditor: React.FC = () => { widgetAlignSystem={widgets.alignSystem} layers={layers} meta={engineMeta} + useExperimentalSandbox={useExperimentalSandbox} />
{ [], ); + const useExperimentalSandbox = useMemo(() => { + return !!sceneProperty?.experimental?.experimental_sandbox; + }, [sceneProperty]); + return { sceneId, rootLayerId, @@ -319,6 +323,7 @@ export default (isBuilt?: boolean) => { widgetAlignEditorActivated, engineMeta, layerSelectionReason, + useExperimentalSandbox, selectLayer, selectBlock, onBlockChange, diff --git a/web/src/components/organisms/EarthEditor/core/CanvasArea/index.tsx b/web/src/components/organisms/EarthEditor/core/CanvasArea/index.tsx index 6d62c751d..bbc3a71e6 100644 --- a/web/src/components/organisms/EarthEditor/core/CanvasArea/index.tsx +++ b/web/src/components/organisms/EarthEditor/core/CanvasArea/index.tsx @@ -32,6 +32,7 @@ const CanvasArea: React.FC = ({ isBuilt, inEditor }) => { widgetAlignEditorActivated, engineMeta, layerSelectionReason, + useExperimentalSandbox, selectLayer, selectBlock, onBlockChange, @@ -83,6 +84,7 @@ const CanvasArea: React.FC = ({ isBuilt, inEditor }) => { widgetAlignSystemEditing={widgetAlignEditorActivated} meta={engineMeta} layerSelectionReason={layerSelectionReason} + useExperimentalSandbox={useExperimentalSandbox} onLayerSelect={selectLayer} onCameraChange={onCameraChange} onWidgetLayoutUpdate={onWidgetUpdate} diff --git a/web/src/core/Crust/Plugins/PluginFrame/PluginIFrame/index.tsx b/web/src/core/Crust/Plugins/PluginFrame/PluginIFrame/index.tsx index 62d3ada2f..f01b27324 100644 --- a/web/src/core/Crust/Plugins/PluginFrame/PluginIFrame/index.tsx +++ b/web/src/core/Crust/Plugins/PluginFrame/PluginIFrame/index.tsx @@ -2,7 +2,9 @@ import { forwardRef, ForwardRefRenderFunction, IframeHTMLAttributes, ReactNode, import type { RefObject } from "react"; import { createPortal } from "react-dom"; +import useExperimentalSandbox from "../../useExperimentalSandbox"; import IFrame, { AutoResize } from "../IFrame"; +import SafeIframe from "../SafeIFrame"; import useHooks, { Ref } from "./hooks"; @@ -50,21 +52,38 @@ const PluginIFrame: ForwardRefRenderFunction = ( handleLoad, } = useHooks({ ready, ref, visible, type, enabled, onRender }); + const experimentalSandbox = useExperimentalSandbox(); + const children = ( <> {html ? ( -