PromucFlow_constructor/app/client/src/pages/AppViewer/AppViewerPageContainer.tsx
Pawan Kumar 3e53df8b64
Update Default styles of Widgets (#2823)
* update default styling of widgets

* [CodeFactor] Apply fixes

* update widgets styles

* fix eslint bug

* update button colors

* update primary button color

* update primary button color

* remove px in 0px in css

* incorporate abhinav review feedbacks

* fixed global styling of popover

Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
Co-authored-by: codefactor-io <support@codefactor.io>
2021-02-08 13:00:01 +05:30

146 lines
4.2 KiB
TypeScript

import React, { Component } from "react";
import { RouteComponentProps, Link } from "react-router-dom";
import { connect } from "react-redux";
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 OnboardingCompletionDialog from "components/editorComponents/Onboarding/CompletionDialog";
import ConfirmRunModal from "pages/Editor/ConfirmRunModal";
import { getCurrentApplication } from "selectors/applicationSelectors";
import {
isPermitted,
PERMISSION_TYPE,
} from "../Applications/permissionHelpers";
import { fetchPublishedPage } from "actions/pageActions";
const Section = styled.section`
background: ${(props) => props.theme.colors.artboard};
height: 100%;
width: 100%;
position: relative;
overflow-x: auto;
overflow-y: auto;
`;
type AppViewerPageContainerProps = {
isFetchingPage: boolean;
widgets?: ContainerWidgetProps<WidgetProps>;
currentPageName?: string;
currentAppName?: string;
fetchPage: (pageId: string, bustCache?: boolean) => void;
currentAppPermissions?: string[];
} & RouteComponentProps<AppViewerRouteParams>;
class AppViewerPageContainer extends Component<AppViewerPageContainerProps> {
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 = (
<p>
Please add widgets to this page in the&nbsp;
<Link
to={BUILDER_PAGE_URL(
this.props.match.params.applicationId,
this.props.match.params.pageId,
)}
>
Appsmith Editor
</Link>
</p>
);
}
const pageNotFound = (
<Centered>
<NonIdealState
icon={
<Icon
iconSize={theme.fontSizes[9]}
icon="page-layout"
color={theme.colors.primaryOld}
/>
}
title="This page seems to be blank"
description={appsmithEditorLink}
/>
</Centered>
);
const pageLoading = (
<Centered>
<Spinner />
</Centered>
);
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 (
<Section>
<AppPage
dsl={this.props.widgets}
appName={this.props.currentAppName}
pageId={this.props.match.params.pageId}
pageName={this.props.currentPageName}
/>
<ConfirmRunModal />
<OnboardingCompletionDialog />
</Section>
);
}
}
}
const mapStateToProps = (state: AppState) => {
const currentApp = getCurrentApplication(state);
const props = {
isFetchingPage: getIsFetchingPage(state),
widgets: getCanvasWidgetDsl(state),
currentPageName: getCurrentPageName(state),
currentAppName: currentApp?.name,
currentAppPermissions: currentApp?.userPermissions,
};
return props;
};
const mapDispatchToProps = (dispatch: any) => ({
fetchPage: (pageId: string, bustCache = false) =>
dispatch(fetchPublishedPage(pageId, bustCache)),
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(AppViewerPageContainer);