import React, { memo, useMemo } from "react"; import { useSelector } from "react-redux"; import { getRenderMode } from "selectors/editorSelectors"; import { getLayoutSystemType } from "selectors/layoutSystemSelectors"; import type { WidgetProps } from "widgets/BaseWidget"; import withWidgetProps from "widgets/withWidgetProps"; import { getLayoutSystem } from "./withLayoutSystemWidgetHOC"; // ToDo(#27615): destructure withWidgetProps to withCanvasProps by picking only necessary props of a canvas. /** * Canvas of a Layout System is the module that provides necessary utilities to position and order widgets. * Canvas also provides editing layout system specific editing experiences like Drag and Drop, Drag to Select, Widget Grouping, etc. * This Component Hydrates canvas with enhanced properties from withWidgetProps and picks the layout system specific Canvas Implementation. */ const LayoutSystemBasedCanvas = memo((props: WidgetProps) => { const renderMode = useSelector(getRenderMode); const layoutSystemType = useSelector(getLayoutSystemType); const { canvasSystem } = useMemo( () => getLayoutSystem(renderMode, layoutSystemType), [ { renderMode, layoutSystemType, }, ], ); const { Canvas, propertyEnhancer } = canvasSystem; return ; }); const HydratedLayoutSystemBasedCanvas = withWidgetProps( LayoutSystemBasedCanvas as any, ); export const renderAppsmithCanvas = (props: WidgetProps) => { return ; };