import React, { Component } from "react"; import { RouteComponentProps, Link } from "react-router-dom"; import { connect } from "react-redux"; import { ReduxActionTypes } from "constants/ReduxActionConstants"; import { getIsFetchingPage } from "selectors/appViewSelectors"; import styled from "styled-components"; import { ContainerWidgetProps } from "widgets/ContainerWidget"; import { WidgetProps } from "widgets/BaseWidget"; import { AppViewerRouteParams, BUILDER_PAGE_URL } from "constants/routes"; import { AppState } from "reducers"; import { theme } from "constants/DefaultTheme"; import { NonIdealState, Icon, Spinner } from "@blueprintjs/core"; import Centered from "components/designSystems/appsmith/CenteredWrapper"; import AppPage from "./AppPage"; import { getCanvasWidgetDsl, getCurrentPageName, } from "selectors/editorSelectors"; import ConfirmRunModal from "pages/Editor/ConfirmRunModal"; import { getCurrentApplication } from "selectors/applicationSelectors"; const Section = styled.section` background: ${props => props.theme.colors.bodyBG}; height: 100%; width: 100%; position: relative; overflow-x: auto; overflow-y: auto; `; type AppViewerPageContainerProps = { isFetchingPage: boolean; widgets?: ContainerWidgetProps; currentPageName?: string; currentAppName?: string; fetchPage: (pageId: string, bustCache?: boolean) => void; } & RouteComponentProps; class AppViewerPageContainer extends Component { componentDidMount() { const { pageId } = this.props.match.params; if (pageId) { this.props.fetchPage(pageId, true); } } componentDidUpdate(previously: AppViewerPageContainerProps) { const { pageId } = this.props.match.params; if ( pageId && previously.location.pathname !== this.props.location.pathname ) { this.props.fetchPage(pageId); } } render() { const pageNotFound = ( } title="This page seems to be blank" description={

Please add widgets to this page in the  Appsmith Editor

} />
); const pageLoading = ( ); if (this.props.isFetchingPage) { return pageLoading; } else if ( !this.props.isFetchingPage && !( this.props.widgets && this.props.widgets.children && this.props.widgets.children.length > 0 ) ) { return pageNotFound; } else if (!this.props.isFetchingPage && this.props.widgets) { return (
); } } } const mapStateToProps = (state: AppState) => { const currentApp = getCurrentApplication(state); const props = { isFetchingPage: getIsFetchingPage(state), widgets: getCanvasWidgetDsl(state), currentPageName: getCurrentPageName(state), currentAppName: currentApp?.name, }; return props; }; const mapDispatchToProps = (dispatch: any) => ({ fetchPage: (pageId: string, bustCache = false) => dispatch({ type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_INIT, payload: { pageId, bustCache, }, }), }); export default connect( mapStateToProps, mapDispatchToProps, )(AppViewerPageContainer);