import * as Sentry from "@sentry/react"; import log from "loglevel"; import React from "react"; import styled from "styled-components"; import WidgetFactory from "utils/WidgetFactory"; import type { CanvasWidgetStructure } from "widgets/constants"; import { RenderModes } from "constants/WidgetConstants"; import { useSelector } from "react-redux"; import { getSelectedAppTheme } from "selectors/appThemingSelectors"; import { previewModeSelector } from "selectors/editorSelectors"; import useWidgetFocus from "utils/hooks/useWidgetFocus"; import { getIsAppSettingsPaneWithNavigationTabOpen } from "selectors/appSettingsPaneSelectors"; interface CanvasProps { widgetsStructure: CanvasWidgetStructure; pageId: string; canvasWidth: number; } const Container = styled.section<{ background: string; width: number; }>` background: ${({ background }) => background}; width: ${(props) => props.width}px; `; const Canvas = (props: CanvasProps) => { const { canvasWidth } = props; const isPreviewMode = useSelector(previewModeSelector); const isAppSettingsPaneWithNavigationTabOpen = useSelector( getIsAppSettingsPaneWithNavigationTabOpen, ); const selectedTheme = useSelector(getSelectedAppTheme); /** * background for canvas */ let backgroundForCanvas; if (isPreviewMode || isAppSettingsPaneWithNavigationTabOpen) { backgroundForCanvas = "initial"; } else { backgroundForCanvas = selectedTheme.properties.colors.backgroundColor; } const focusRef = useWidgetFocus(); try { return ( {props.widgetsStructure.widgetId && WidgetFactory.createWidget( props.widgetsStructure, RenderModes.CANVAS, )} ); } catch (error) { log.error("Error rendering DSL", error); Sentry.captureException(error); return null; } }; export default Canvas;