import React, { Component } from "react"; import { Link, RouteComponentProps } from "react-router-dom"; import { connect } from "react-redux"; import { getIsFetchingPage } from "selectors/appViewSelectors"; import styled from "styled-components"; import { AppViewerRouteParams, BUILDER_PAGE_URL } from "constants/routes"; import { AppState } from "reducers"; import { theme } from "constants/DefaultTheme"; import { Icon, NonIdealState, Spinner } from "@blueprintjs/core"; import Centered from "components/designSystems/appsmith/CenteredWrapper"; import AppPage from "./AppPage"; import { getCanvasWidgetDsl, getCurrentApplicationId, getCurrentPageName, } from "selectors/editorSelectors"; import RequestConfirmationModal from "pages/Editor/RequestConfirmationModal"; import { getCurrentApplication } from "selectors/applicationSelectors"; import { isPermitted, PERMISSION_TYPE, } from "../Applications/permissionHelpers"; import { fetchPublishedPage } from "actions/pageActions"; import { DSLWidget } from "widgets/constants"; const Section = styled.section` background: ${(props) => props.theme.colors.artboard}; height: max-content; min-height: 100%; margin: 0 auto; position: relative; overflow-x: auto; overflow-y: auto; `; type AppViewerPageContainerProps = { isFetchingPage: boolean; widgets?: DSLWidget; currentPageName?: string; currentAppName?: string; fetchPage: (pageId: string, bustCache?: boolean) => void; currentAppPermissions?: string[]; applicationId: string; } & RouteComponentProps; class AppViewerPageContainer extends Component { componentDidUpdate(previously: AppViewerPageContainerProps) { const { pageId } = this.props.match.params; if ( pageId && previously.location.pathname !== this.props.location.pathname ) { this.props.fetchPage(pageId); } } render() { let appsmithEditorLink; if ( this.props.currentAppPermissions && isPermitted( this.props.currentAppPermissions, PERMISSION_TYPE.MANAGE_APPLICATION, ) ) { appsmithEditorLink = (

Please add widgets to this page in the  Appsmith Editor

); } const pageNotFound = ( } title="This page seems to be blank" /> ); const pageLoading = ( ); if (this.props.isFetchingPage) { return pageLoading; } else if (!this.props.isFetchingPage && this.props.widgets) { return (
{!( this.props.widgets.children && this.props.widgets.children.length > 0 ) && pageNotFound}
); } } } const mapStateToProps = (state: AppState) => { const currentApp = getCurrentApplication(state); return { isFetchingPage: getIsFetchingPage(state), widgets: getCanvasWidgetDsl(state), currentPageName: getCurrentPageName(state), currentAppName: currentApp?.name, currentAppPermissions: currentApp?.userPermissions, applicationId: getCurrentApplicationId(state), }; }; const mapDispatchToProps = (dispatch: any) => ({ fetchPage: (pageId: string, bustCache = false) => dispatch(fetchPublishedPage(pageId, bustCache)), }); export default connect( mapStateToProps, mapDispatchToProps, )(AppViewerPageContainer);