PromucFlow_constructor/app/client/src/pages/AppViewer/index.tsx

263 lines
7.8 KiB
TypeScript
Raw Normal View History

import React, { Component } from "react";
import styled, { ThemeProvider } from "styled-components";
import { connect } from "react-redux";
import { withRouter, RouteComponentProps, Route } from "react-router";
2020-03-11 13:59:46 +00:00
import { Switch } from "react-router-dom";
2019-11-25 05:07:27 +00:00
import { AppState } from "reducers";
import {
AppViewerRouteParams,
2020-02-18 10:41:52 +00:00
BuilderRouteParams,
GIT_BRANCH_QUERY_KEY,
VIEWER_FORK_PATH,
VIEWER_URL,
} from "constants/routes";
import {
PageListPayload,
ReduxActionTypes,
} from "constants/ReduxActionConstants";
import { getIsInitialized } from "selectors/appViewSelectors";
import { executeTrigger } from "actions/widgetActions";
import { ExecuteTriggerPayload } from "constants/AppsmithActionConstants/ActionConstants";
import {
BatchPropertyUpdatePayload,
batchUpdateWidgetProperty,
updateWidgetPropertyRequest,
} from "actions/controlActions";
import { EditorContext } from "components/editorComponents/EditorContextProvider";
import AppViewerPageContainer from "./AppViewerPageContainer";
2020-03-06 09:45:21 +00:00
import {
resetChildrenMetaProperty,
updateWidgetMetaProperty,
} from "actions/metaActions";
2020-04-16 13:00:53 +00:00
import { editorInitializer } from "utils/EditorUtils";
import * as Sentry from "@sentry/react";
2021-02-24 13:47:37 +00:00
import { getViewModePageList } from "selectors/editorSelectors";
2021-06-09 10:35:10 +00:00
import AddCommentTourComponent from "comments/tour/AddCommentTourComponent";
import CommentShowCaseCarousel from "comments/CommentsShowcaseCarousel";
import { getThemeDetails, ThemeMode } from "selectors/themeSelectors";
import { Theme } from "constants/DefaultTheme";
import GlobalHotKeys from "./GlobalHotKeys";
import { getSearchQuery } from "utils/helpers";
feat: property pane docking (#7361) * add tailwindcss * docked property pane * uncomment a line * make entity explorer as drawer on unpin * remove unused imports * add pin state in reducer * add menu icon in header * fix widget sidebar * fix widgets sidebar * style property pane * update property pane css * update icons in property pane * update property pane header styles * update spacing * fix few ui issues * wip: preview mode * wip:preview mode * remove unused import * comments sidebar in app and edit mode * fix order of import * use selected state for property pane * update scrollbar style * add classes to sidebar and property pane * make widgets editor fluid * make widgets editor fluid and refactor logic * resize the widgets editor if explorer is pinned * add shortcut for preview mode * fix link for tabs in edit mode * zoom in/zoom out for 0.75 * fix chart widget + table widget crashing * allow zooming of canvas * fix weird canvas draw issue + update container for handling zoom * add actions for is panning * allow panning with grab cursor * reset panning + zooming when entering preview mode * add grabbing cursor when grabbing * only prevent default when space key is pressed * dont allow zoom in preview mode * remove unused imports * fix dont allow zoom in preview mode * fix ux of panning on space hit * make fluid as the default app layout * chart spec * fix dropdown_on change spec * fix add widget table and bind spec * remove draggable property pane spec * fix container spec * fix form widget spec * fix jest test * fix the function typo * remove clicking of close button for property pane in cypress tests * remove property pane actions test * fix drag and drop test failing * add cypress selector id to back button in property pane * fix toggle js spec * fix merge conflicts from new design system * editor header * fix product updates styles + widget card * remove all unused imports * fix dynamic layout spec * fix entity explorer tab rename test failing * fix table spec * fix bind tabletextpagination spec * fix js object spec * fix entity explorer rename issue * fix cypress test * fix cypress command wrong commit * fix tab spec * fix property pane copy tests * add zoom header * zoom levels * make property pane sidebar resizable * add multi select property pane * fix widget search bug * update property pane width in state on drag end * fix viewer header * fix editor header * update editor header + remove zooming * update small style * dont allow closing of explorer when resizing * fix jest test * fix dropdown widget jest test * preview test case wip * add entity explorer pinning tests + preview mode tests * add tooltip in layout control + add padding bottom in property pane view * incorporate aakash feedbacks * fix preview mode margin issue * remove panning code * fix cypress failing test * uncomment jest test * remove redundant code * fix maincontainer test * incorporate review feedbacks * incorporate aakash feedbacks * review feedbacks * incorporate review feedbacks * incorporate qa feedbacks * fix dynamic layout spec * updated test based on latest change * dsl updated * Updated dsl * Updated dsl * resize deselects widget issue. * fix canvas height issue * fix typo * incorporate qa feedbacks * incorporate qa feedbacks * incorporate qa feedbacks * update color for setting control for widget name * fix onboarding styles conflicts * Updated tests * fix application overflow issue * updated test method Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Apple <nandan@thinkify.io>
2021-11-23 08:01:46 +00:00
import AppViewerCommentsSidebar from "./AppViewerComemntsSidebar";
2022-01-25 13:56:52 +00:00
import { showPostCompletionMessage } from "selectors/onboardingSelectors";
const SentryRoute = Sentry.withSentryRouting(Route);
2022-01-25 13:56:52 +00:00
const AppViewerBody = styled.section<{
hasPages: boolean;
showGuidedTourMessage: boolean;
isEmbeded: boolean;
}>`
display: flex;
flex-direction: row;
align-items: stretch;
justify-content: flex-start;
2022-01-25 13:56:52 +00:00
height: ${(props) => {
// embeded page will not have top header
if (props.isEmbeded) return "100vh;";
let offsetHeight = "";
if (!props.hasPages) {
offsetHeight = `${props.theme.smallHeaderHeight} - 1px`;
} else {
offsetHeight = "72px";
}
if (props.showGuidedTourMessage) {
offsetHeight += " - 100px";
}
return `calc(100vh - ${offsetHeight});`;
}};
`;
2019-11-01 05:28:56 +00:00
2021-06-09 10:35:10 +00:00
const ContainerWithComments = styled.div`
display: flex;
width: 100%;
height: 100%;
background: ${(props) => props.theme.colors.artboard};
2021-06-09 10:35:10 +00:00
`;
const AppViewerBodyContainer = styled.div<{ width?: string }>`
flex: 1;
2021-06-09 10:35:10 +00:00
overflow: auto;
margin: 0 auto;
`;
export type AppViewerProps = {
initializeAppViewer: (params: {
applicationId: string;
pageId?: string;
branch?: string;
}) => void;
2020-01-24 09:54:40 +00:00
isInitialized: boolean;
2022-01-25 13:56:52 +00:00
showGuidedTourMessage: boolean;
isInitializeError: boolean;
executeAction: (actionPayload: ExecuteTriggerPayload) => void;
2019-11-08 11:02:00 +00:00
updateWidgetProperty: (
widgetId: string,
propertyName: string,
propertyValue: any,
) => void;
2020-02-07 02:32:52 +00:00
updateWidgetMetaProperty: (
widgetId: string,
propertyName: string,
propertyValue: any,
) => void;
2020-03-06 09:45:21 +00:00
resetChildrenMetaProperty: (widgetId: string) => void;
pages: PageListPayload;
lightTheme: Theme;
batchUpdateWidgetProperty: (
widgetId: string,
updates: BatchPropertyUpdatePayload,
) => void;
2020-02-18 10:41:52 +00:00
} & RouteComponentProps<BuilderRouteParams>;
type Props = AppViewerProps & RouteComponentProps<AppViewerRouteParams>;
class AppViewer extends Component<Props> {
2020-04-16 13:00:53 +00:00
public state = {
registered: false,
isSideNavOpen: true,
2020-04-16 13:00:53 +00:00
};
componentDidMount() {
2020-04-16 13:00:53 +00:00
editorInitializer().then(() => {
this.setState({ registered: true });
});
const { applicationId, pageId } = this.props.match.params;
const {
location: { search },
} = this.props;
const branch = getSearchQuery(search, GIT_BRANCH_QUERY_KEY);
if (applicationId) {
this.props.initializeAppViewer({
branch: branch,
applicationId,
pageId,
});
}
}
componentDidUpdate(prevProps: Props) {
const { applicationId, pageId } = this.props.match.params;
const {
location: { search: prevSearch },
} = prevProps;
const {
location: { search },
} = this.props;
const prevBranch = getSearchQuery(prevSearch, GIT_BRANCH_QUERY_KEY);
const branch = getSearchQuery(search, GIT_BRANCH_QUERY_KEY);
if (branch && branch !== prevBranch && applicationId && pageId) {
this.props.initializeAppViewer({
applicationId,
pageId,
branch: branch,
});
2019-11-06 06:21:56 +00:00
}
}
2020-02-18 10:41:52 +00:00
toggleCollapse = (open: boolean) => {
this.setState({ isSideNavOpen: open });
};
public render() {
const { isInitialized, location } = this.props;
const isEmbeded = location.search.indexOf("embed=true") !== -1;
return (
<ThemeProvider theme={this.props.lightTheme}>
<GlobalHotKeys>
<EditorContext.Provider
value={{
executeAction: this.props.executeAction,
updateWidgetMetaProperty: this.props.updateWidgetMetaProperty,
resetChildrenMetaProperty: this.props.resetChildrenMetaProperty,
batchUpdateWidgetProperty: this.props.batchUpdateWidgetProperty,
}}
>
<ContainerWithComments>
feat: property pane docking (#7361) * add tailwindcss * docked property pane * uncomment a line * make entity explorer as drawer on unpin * remove unused imports * add pin state in reducer * add menu icon in header * fix widget sidebar * fix widgets sidebar * style property pane * update property pane css * update icons in property pane * update property pane header styles * update spacing * fix few ui issues * wip: preview mode * wip:preview mode * remove unused import * comments sidebar in app and edit mode * fix order of import * use selected state for property pane * update scrollbar style * add classes to sidebar and property pane * make widgets editor fluid * make widgets editor fluid and refactor logic * resize the widgets editor if explorer is pinned * add shortcut for preview mode * fix link for tabs in edit mode * zoom in/zoom out for 0.75 * fix chart widget + table widget crashing * allow zooming of canvas * fix weird canvas draw issue + update container for handling zoom * add actions for is panning * allow panning with grab cursor * reset panning + zooming when entering preview mode * add grabbing cursor when grabbing * only prevent default when space key is pressed * dont allow zoom in preview mode * remove unused imports * fix dont allow zoom in preview mode * fix ux of panning on space hit * make fluid as the default app layout * chart spec * fix dropdown_on change spec * fix add widget table and bind spec * remove draggable property pane spec * fix container spec * fix form widget spec * fix jest test * fix the function typo * remove clicking of close button for property pane in cypress tests * remove property pane actions test * fix drag and drop test failing * add cypress selector id to back button in property pane * fix toggle js spec * fix merge conflicts from new design system * editor header * fix product updates styles + widget card * remove all unused imports * fix dynamic layout spec * fix entity explorer tab rename test failing * fix table spec * fix bind tabletextpagination spec * fix js object spec * fix entity explorer rename issue * fix cypress test * fix cypress command wrong commit * fix tab spec * fix property pane copy tests * add zoom header * zoom levels * make property pane sidebar resizable * add multi select property pane * fix widget search bug * update property pane width in state on drag end * fix viewer header * fix editor header * update editor header + remove zooming * update small style * dont allow closing of explorer when resizing * fix jest test * fix dropdown widget jest test * preview test case wip * add entity explorer pinning tests + preview mode tests * add tooltip in layout control + add padding bottom in property pane view * incorporate aakash feedbacks * fix preview mode margin issue * remove panning code * fix cypress failing test * uncomment jest test * remove redundant code * fix maincontainer test * incorporate review feedbacks * incorporate aakash feedbacks * review feedbacks * incorporate review feedbacks * incorporate qa feedbacks * fix dynamic layout spec * updated test based on latest change * dsl updated * Updated dsl * Updated dsl * resize deselects widget issue. * fix canvas height issue * fix typo * incorporate qa feedbacks * incorporate qa feedbacks * incorporate qa feedbacks * update color for setting control for widget name * fix onboarding styles conflicts * Updated tests * fix application overflow issue * updated test method Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Apple <nandan@thinkify.io>
2021-11-23 08:01:46 +00:00
<AppViewerCommentsSidebar />
<AppViewerBodyContainer>
<AppViewerBody
hasPages={this.props.pages.length > 1}
isEmbeded={isEmbeded}
2022-01-25 13:56:52 +00:00
showGuidedTourMessage={this.props.showGuidedTourMessage}
>
{isInitialized && this.state.registered && (
<Switch>
<SentryRoute
component={AppViewerPageContainer}
exact
path={VIEWER_URL}
/>
<SentryRoute
component={AppViewerPageContainer}
exact
path={VIEWER_FORK_PATH}
/>
</Switch>
)}
</AppViewerBody>
</AppViewerBodyContainer>
</ContainerWithComments>
<AddCommentTourComponent />
<CommentShowCaseCarousel />
</EditorContext.Provider>
</GlobalHotKeys>
</ThemeProvider>
);
}
}
const mapStateToProps = (state: AppState) => ({
2020-01-24 09:54:40 +00:00
isInitialized: getIsInitialized(state),
2021-02-24 13:47:37 +00:00
pages: getViewModePageList(state),
lightTheme: getThemeDetails(state, ThemeMode.LIGHT),
2022-01-25 13:56:52 +00:00
showGuidedTourMessage: showPostCompletionMessage(state),
});
const mapDispatchToProps = (dispatch: any) => ({
executeAction: (actionPayload: ExecuteTriggerPayload) =>
dispatch(executeTrigger(actionPayload)),
2019-11-08 11:02:00 +00:00
updateWidgetProperty: (
widgetId: string,
propertyName: string,
propertyValue: any,
) =>
dispatch(
feat: Undo/Redo (#6654) * Scaffolding for undo-redo * undo redo working Poc commit * memory performance improvements by diffing * dont run update on undo/redo" * merging widget postion update and canvas bottom row update into one dsl update. * fix tabs widget * Visible updates per undo redo action (#6838) Co-authored-by: Rahul R <rahulramesha@Rahuls-MacBook-Pro.local> * resize atomic operation * fix switch control state issue * disallow undo/redo for snipping and comment mode * disallow undo/redo for snipping and comment mode * fix color picker issue in undo/redo * add test for replayDSL * option control fix, adding logs * minor position change undo redo updates * add test cases for replayHelpers * property Upade visual change * remove unused code * global hot key jest test for undo redo * Fixing batch updates on property change.. * add tests for toggle control in property pane * unwanted utils. * add tests for text control * add tests for deletion * add tests for dropping a new widget * adding jest test for replayUtils * add move widget tests * add tests for color picker control * add analytics for undo/redo * add analytics for undo/redo * tab addition atomic * cypress tests for propertyPane, toasts and radiowidget optionControl * replayDSL end of redo stack fix * property update changes * menu option control debounce input * color picker empty undo fix * fix cypress tests * widget add/remove atomic * revert alternative approach to handle atomic operations * update replayDSL test * add some comments * addressing review comments * flash color for property pane controls * Fixing adding of tabs widget as well. * code review comments. * merging widget postion update and canvas bottom row update into one dsl update. * fix ordering of tabs property control * meta property update canvas min height. * fixing failed specs. * Fixing entity explorer update on deleting tab from entity explorer. * address review comments and minor property update changes * fixing failing tests * merge conflicts * changes to cater widget api. * fix suggested widget table issue * draggable list for undo redo * fix widget name focus * excluding canvas updates. * fixing codeEditor update on propertySection collapse * fixed failing test case Co-authored-by: Abhinav Jha <abhinav@appsmith.com> Co-authored-by: Rahul R <rahulramesha@Rahuls-MacBook-Pro.local> Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
2021-09-21 07:55:56 +00:00
updateWidgetPropertyRequest(widgetId, propertyName, propertyValue),
2019-11-08 11:02:00 +00:00
),
2020-02-07 02:32:52 +00:00
updateWidgetMetaProperty: (
widgetId: string,
propertyName: string,
propertyValue: any,
) =>
dispatch(updateWidgetMetaProperty(widgetId, propertyName, propertyValue)),
2020-03-06 09:45:21 +00:00
resetChildrenMetaProperty: (widgetId: string) =>
dispatch(resetChildrenMetaProperty(widgetId)),
initializeAppViewer: (params: {
applicationId: string;
pageId?: string;
branch?: string;
}) => {
dispatch({
type: ReduxActionTypes.INITIALIZE_PAGE_VIEWER,
payload: params,
});
},
batchUpdateWidgetProperty: (
widgetId: string,
updates: BatchPropertyUpdatePayload,
) => dispatch(batchUpdateWidgetProperty(widgetId, updates)),
});
export default withRouter(
connect(mapStateToProps, mapDispatchToProps)(Sentry.withProfiler(AppViewer)),
);