import styled from "styled-components"; import * as Sentry from "@sentry/react"; import { useDispatch } from "react-redux"; import React, { useState, useCallback, useMemo } from "react"; import { Route, Switch, matchPath, useLocation } from "react-router"; import EditorsRouter from "./routes"; import BottomBar from "./BottomBar"; import { DEFAULT_ENTITY_EXPLORER_WIDTH, DEFAULT_PROPERTY_PANE_WIDTH, } from "constants/AppConstants"; import WidgetsEditor from "./WidgetsEditor"; import { updateExplorerWidthAction } from "actions/explorerActions"; import { BUILDER_CHECKLIST_URL, BUILDER_URL } from "constants/routes"; import OnboardingChecklist from "./FirstTimeUserOnboarding/Checklist"; import EntityExplorerSidebar from "components/editorComponents/Sidebar"; import PropertyPaneSidebar from "components/editorComponents/PropertyPaneSidebar"; const SentryRoute = Sentry.withSentryRouting(Route); const Container = styled.div` display: flex; height: calc( 100vh - ${(props) => props.theme.smallHeaderHeight} - ${(props) => props.theme.bottomBarHeight} ); background-color: ${(props) => props.theme.appBackground}; `; function MainContainer() { const dispatch = useDispatch(); const location = useLocation(); const [sidebarWidth, setSidebarWidth] = useState( DEFAULT_ENTITY_EXPLORER_WIDTH, ); const [propertyPaneWidth, setPropertyPaneWidth] = useState( DEFAULT_PROPERTY_PANE_WIDTH, ); /** * on entity explorer sidebar width change * * @return void */ const onLeftSidebarWidthChange = useCallback((newWidth) => { setSidebarWidth(newWidth); }, []); /** * on entity explorer sidebar drag end * * @return void */ const onLeftSidebarDragEnd = useCallback(() => { dispatch(updateExplorerWidthAction(sidebarWidth)); }, [sidebarWidth]); /** * on property pane sidebar drag end * * @return void */ const onRightSidebarDragEnd = useCallback(() => { dispatch(updateExplorerWidthAction(propertyPaneWidth)); }, [propertyPaneWidth]); /** * on property pane sidebar width change */ const onRightSidebarWidthChange = useCallback((newWidth) => { setPropertyPaneWidth(newWidth); }, []); /** * checks if property pane should be rendered or not * * @return boolean */ const shouldRenderPropertyPane = useMemo(() => { const match = matchPath(location.pathname, { path: BUILDER_URL, exact: true, }); // match is found, that means current URL is BUILDER_URL i.e our editor if (match) return true; return false; }, [location]); return ( <>
{shouldRenderPropertyPane && ( )}
); } MainContainer.displayName = "MainContainer"; export default MainContainer;