1. Fixed on page load actions getting called multiple times. 2. Now Evaluation only happens once we complete the fetching of the page's all entities including js objects and actions, this avoids cases where actions are not defined when ran. Co-authored-by: Rishabh-Rathod <rishabh.rathod@appsmith.com>
111 lines
3.1 KiB
TypeScript
111 lines
3.1 KiB
TypeScript
import React, { useMemo } from "react";
|
|
import { Link, RouteComponentProps, withRouter } from "react-router-dom";
|
|
import { useSelector } from "react-redux";
|
|
import { getIsFetchingPage } from "selectors/appViewSelectors";
|
|
import styled from "styled-components";
|
|
import { AppViewerRouteParams } from "constants/routes";
|
|
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,
|
|
getCurrentPageName,
|
|
selectURLSlugs,
|
|
} from "selectors/editorSelectors";
|
|
import RequestConfirmationModal from "pages/Editor/RequestConfirmationModal";
|
|
import { getCurrentApplication } from "selectors/applicationSelectors";
|
|
import {
|
|
isPermitted,
|
|
PERMISSION_TYPE,
|
|
} from "../Applications/permissionHelpers";
|
|
import { builderURL } from "RouteBuilder";
|
|
|
|
const Section = styled.section<{
|
|
height: number;
|
|
}>`
|
|
height: 100%;
|
|
min-height: ${({ height }) => height}px;
|
|
margin: 0 auto;
|
|
position: relative;
|
|
overflow-x: auto;
|
|
overflow-y: auto;
|
|
`;
|
|
|
|
type AppViewerPageContainerProps = RouteComponentProps<AppViewerRouteParams>;
|
|
|
|
function AppViewerPageContainer(props: AppViewerPageContainerProps) {
|
|
const currentPageName = useSelector(getCurrentPageName);
|
|
const widgets = useSelector(getCanvasWidgetDsl);
|
|
const isFetchingPage = useSelector(getIsFetchingPage);
|
|
const currentApplication = useSelector(getCurrentApplication);
|
|
const { match } = props;
|
|
const { applicationSlug, pageSlug } = useSelector(selectURLSlugs);
|
|
|
|
// get appsmith editr link
|
|
const appsmithEditorLink = useMemo(() => {
|
|
if (
|
|
currentApplication?.userPermissions &&
|
|
isPermitted(
|
|
currentApplication?.userPermissions,
|
|
PERMISSION_TYPE.MANAGE_APPLICATION,
|
|
)
|
|
) {
|
|
return (
|
|
<p>
|
|
Please add widgets to this page in the
|
|
<Link
|
|
to={builderURL({
|
|
applicationSlug: applicationSlug,
|
|
pageSlug: pageSlug,
|
|
pageId: props.match.params.pageId as string,
|
|
})}
|
|
>
|
|
Appsmith Editor
|
|
</Link>
|
|
</p>
|
|
);
|
|
}
|
|
}, [currentApplication?.userPermissions]);
|
|
|
|
const pageNotFound = (
|
|
<Centered>
|
|
<NonIdealState
|
|
description={appsmithEditorLink}
|
|
icon={
|
|
<Icon
|
|
color={theme.colors.primaryOld}
|
|
icon="page-layout"
|
|
iconSize={theme.fontSizes[9]}
|
|
/>
|
|
}
|
|
title="This page seems to be blank"
|
|
/>
|
|
</Centered>
|
|
);
|
|
|
|
const pageLoading = (
|
|
<Centered>
|
|
<Spinner />
|
|
</Centered>
|
|
);
|
|
|
|
if (isFetchingPage) return pageLoading;
|
|
|
|
if (!(widgets.children && widgets.children.length > 0)) return pageNotFound;
|
|
|
|
return (
|
|
<Section height={widgets.bottomRow}>
|
|
<AppPage
|
|
appName={currentApplication?.name}
|
|
dsl={widgets}
|
|
pageId={match.params.pageId}
|
|
pageName={currentPageName}
|
|
/>
|
|
<RequestConfirmationModal />
|
|
</Section>
|
|
);
|
|
}
|
|
|
|
export default withRouter(AppViewerPageContainer);
|