From 20ef86f11816c33425eeac2cfdf1f86c19ff9553 Mon Sep 17 00:00:00 2001 From: Hetu Nandu Date: Wed, 4 Nov 2020 17:10:59 +0530 Subject: [PATCH] Improve app initialisation for timeouts (#1412) Fixes: #1510 Co-authored-by: Arpit Mohan --- app/client/src/actions/applicationActions.ts | 1 - app/client/src/actions/initActions.ts | 15 ++ app/client/src/api/Api.tsx | 32 +-- .../src/assets/images/timeout-image.png | Bin 0 -> 112354 bytes app/client/src/constants/AppConstants.ts | 17 ++ .../src/constants/ReduxActionConstants.tsx | 1 + app/client/src/constants/messages.ts | 3 + app/client/src/pages/AppViewer/index.tsx | 16 +- app/client/src/pages/Editor/index.tsx | 23 +- app/client/src/pages/common/PageNotFound.tsx | 6 +- app/client/src/pages/common/ServerTimeout.tsx | 56 +++++ .../reducers/uiReducers/appViewReducer.tsx | 8 + .../src/reducers/uiReducers/editorReducer.tsx | 12 +- app/client/src/sagas/ErrorSagas.tsx | 4 +- app/client/src/sagas/InitSagas.ts | 211 ++++++++---------- app/client/src/sagas/PageSagas.tsx | 63 +++++- app/client/src/selectors/appViewSelectors.tsx | 5 + app/client/src/selectors/editorSelectors.tsx | 7 +- 18 files changed, 327 insertions(+), 153 deletions(-) create mode 100644 app/client/src/assets/images/timeout-image.png create mode 100644 app/client/src/pages/common/ServerTimeout.tsx diff --git a/app/client/src/actions/applicationActions.ts b/app/client/src/actions/applicationActions.ts index 9bfdd46847..6a636d4828 100644 --- a/app/client/src/actions/applicationActions.ts +++ b/app/client/src/actions/applicationActions.ts @@ -1,5 +1,4 @@ import { ReduxAction, ReduxActionTypes } from "constants/ReduxActionConstants"; -import { EditorModes } from "../components/editorComponents/CodeEditor/EditorConfig"; import { APP_MODE } from "../reducers/entityReducers/appReducer"; import { UpdateApplicationPayload } from "api/ApplicationApi"; diff --git a/app/client/src/actions/initActions.ts b/app/client/src/actions/initActions.ts index 9c3854e816..446c85ec8a 100644 --- a/app/client/src/actions/initActions.ts +++ b/app/client/src/actions/initActions.ts @@ -2,6 +2,7 @@ import { ReduxActionTypes, ReduxAction, InitializeEditorPayload, + ReduxActionErrorTypes, } from "constants/ReduxActionConstants"; export const initEditor = ( @@ -14,3 +15,17 @@ export const initEditor = ( pageId, }, }); + +export const initEditorError = (): ReduxAction<{ show: false }> => ({ + type: ReduxActionErrorTypes.INITIALIZE_EDITOR_ERROR, + payload: { + show: false, + }, +}); + +export const initViewerError = (): ReduxAction<{ show: false }> => ({ + type: ReduxActionErrorTypes.INITIALIZE_PAGE_VIEWER_ERROR, + payload: { + show: false, + }, +}); diff --git a/app/client/src/api/Api.tsx b/app/client/src/api/Api.tsx index 894461bdcf..d3503b35dd 100644 --- a/app/client/src/api/Api.tsx +++ b/app/client/src/api/Api.tsx @@ -4,13 +4,10 @@ import { API_REQUEST_HEADERS, } from "constants/ApiConstants"; import { ActionApiResponse } from "./ActionAPI"; -import { - AUTH_LOGIN_URL, - PAGE_NOT_FOUND_URL, - SERVER_ERROR_URL, -} from "constants/routes"; +import { AUTH_LOGIN_URL, PAGE_NOT_FOUND_URL } from "constants/routes"; import history from "utils/history"; import { convertObjectToQueryParams } from "utils/AppsmithUtils"; +import { SERVER_API_TIMEOUT_ERROR } from "../constants/messages"; //TODO(abhinav): Refactor this to make more composable. export const apiRequestConfig = { @@ -22,8 +19,10 @@ export const apiRequestConfig = { const axiosInstance: AxiosInstance = axios.create(); +export const axiosConnectionAbortedCode = "ECONNABORTED"; const executeActionRegex = /actions\/execute/; -const currentUserRegex = /\/me$/; +const timeoutErrorRegex = /timeout of (\d+)ms exceeded/; + axiosInstance.interceptors.request.use((config: any) => { return { ...config, timer: performance.now() }; }); @@ -50,20 +49,25 @@ axiosInstance.interceptors.response.use( return response.data; }, function(error: any) { + // Return if the call was cancelled via cancel token if (axios.isCancel(error)) { return; } - if (error.code === "ECONNABORTED") { - if (error.config && error.config.url.match(currentUserRegex)) { - history.replace({ pathname: SERVER_ERROR_URL }); - } - return Promise.reject({ - message: "Please check your internet connection", - }); - } + // Return modified response if action execution failed if (error.config && error.config.url.match(executeActionRegex)) { return makeExecuteActionResponse(error.response); } + // Return error if any timeout happened in other api calls + if ( + error.code === axiosConnectionAbortedCode && + error.message && + error.message.match(timeoutErrorRegex) + ) { + return Promise.reject({ + ...error, + message: SERVER_API_TIMEOUT_ERROR, + }); + } if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx diff --git a/app/client/src/assets/images/timeout-image.png b/app/client/src/assets/images/timeout-image.png new file mode 100644 index 0000000000000000000000000000000000000000..c0eef6cfb5ce78703dbb4a2f8f7e3ffc86622238 GIT binary patch literal 112354 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%0As&J`*pSTifIWdIO!Hn(G5GriJPxAI2St4_ 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∈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 literal 0 HcmV?d00001 diff --git a/app/client/src/constants/AppConstants.ts b/app/client/src/constants/AppConstants.ts index f20b1da124..be0cf7b4ee 100644 --- a/app/client/src/constants/AppConstants.ts +++ b/app/client/src/constants/AppConstants.ts @@ -8,3 +8,20 @@ const APP_STORE_NAMESPACE = "APPSMITH_LOCAL_STORE"; export const getAppStoreName = (appId: string) => `${APP_STORE_NAMESPACE}-${appId}`; + +export const getAppStore = (appId: string) => { + const appStoreName = getAppStoreName(appId); + let storeString = "{}"; + // Check if localStorage exists + if (localStorage) { + const appStore = localStorage.getItem(appStoreName); + if (appStore) storeString = appStore; + } + let store; + try { + store = JSON.parse(storeString); + } catch (e) { + store = {}; + } + return store; +}; diff --git a/app/client/src/constants/ReduxActionConstants.tsx b/app/client/src/constants/ReduxActionConstants.tsx index d4d4974207..b6f1c79152 100644 --- a/app/client/src/constants/ReduxActionConstants.tsx +++ b/app/client/src/constants/ReduxActionConstants.tsx @@ -296,6 +296,7 @@ export type ReduxActionType = typeof ReduxActionTypes[keyof typeof ReduxActionTy export const ReduxActionErrorTypes: { [key: string]: string } = { INITIALIZE_EDITOR_ERROR: "INITIALIZE_EDITOR_ERROR", + INITIALIZE_PAGE_VIEWER_ERROR: "INITIALIZE_PAGE_VIEWER_ERROR", API_ERROR: "API_ERROR", WIDGET_DELETE_ERROR: "WIDGET_DELETE_ERROR", UPDATE_APPLICATION_ERROR: "UPDATE_APPLICATION_ERROR", diff --git a/app/client/src/constants/messages.ts b/app/client/src/constants/messages.ts index f8e936a8fe..d56633edc7 100644 --- a/app/client/src/constants/messages.ts +++ b/app/client/src/constants/messages.ts @@ -168,3 +168,6 @@ export const GOOGLE_RECAPTCHA_KEY_ERROR = "Google Re-Captcha Token Generation failed! Please check the Re-captcha Site Key."; export const GOOGLE_RECAPTCHA_DOMAIN_ERROR = "Google Re-Captcha Token Generation failed! Please check the allowed domains."; + +export const SERVER_API_TIMEOUT_ERROR = + "Appsmith server is taking too long to respond. Please try again after some time"; diff --git a/app/client/src/pages/AppViewer/index.tsx b/app/client/src/pages/AppViewer/index.tsx index 90806b79ca..0927ccea15 100644 --- a/app/client/src/pages/AppViewer/index.tsx +++ b/app/client/src/pages/AppViewer/index.tsx @@ -10,7 +10,10 @@ import { getApplicationViewerPageURL, } from "constants/routes"; import { ReduxActionTypes } from "constants/ReduxActionConstants"; -import { getIsInitialized } from "selectors/appViewSelectors"; +import { + getIsInitialized, + getIsInitializeError, +} from "selectors/appViewSelectors"; import { executeAction } from "actions/widgetActions"; import { ExecuteActionPayload } from "constants/ActionConstants"; import { updateWidgetPropertyRequest } from "actions/controlActions"; @@ -23,6 +26,8 @@ import { } from "actions/metaActions"; import { editorInitializer } from "utils/EditorUtils"; import * as Sentry from "@sentry/react"; +import log from "loglevel"; +import ServerTimeout from "../common/ServerTimeout"; const SentryRoute = Sentry.withSentryRouting(Route); const AppViewerBody = styled.section` @@ -36,6 +41,7 @@ const AppViewerBody = styled.section` export type AppViewerProps = { initializeAppViewer: (applicationId: string, pageId?: string) => void; isInitialized: boolean; + isInitializeError: boolean; executeAction: (actionPayload: ExecuteActionPayload) => void; updateWidgetProperty: ( widgetId: string, @@ -62,7 +68,7 @@ class AppViewer extends Component< this.setState({ registered: true }); }); const { applicationId, pageId } = this.props.match.params; - console.log({ applicationId, pageId }); + log.debug({ applicationId, pageId }); if (applicationId) { this.props.initializeAppViewer(applicationId, pageId); } @@ -73,7 +79,10 @@ class AppViewer extends Component< }; public render() { - const { isInitialized } = this.props; + const { isInitialized, isInitializeError } = this.props; + if (isInitializeError) { + return ; + } return ( ({ isInitialized: getIsInitialized(state), + isInitializeError: getIsInitializeError(state), }); const mapDispatchToProps = (dispatch: any) => ({ diff --git a/app/client/src/pages/Editor/index.tsx b/app/client/src/pages/Editor/index.tsx index 8dc1b7b639..139cc9ffcc 100644 --- a/app/client/src/pages/Editor/index.tsx +++ b/app/client/src/pages/Editor/index.tsx @@ -1,7 +1,7 @@ import React, { Component } from "react"; import { Helmet } from "react-helmet"; import { connect } from "react-redux"; -import { withRouter, RouteComponentProps } from "react-router-dom"; +import { RouteComponentProps, withRouter } from "react-router-dom"; import { BuilderRouteParams, getApplicationViewerPageURL, @@ -13,15 +13,16 @@ import TouchBackend from "react-dnd-touch-backend"; import { getCurrentApplicationId, getCurrentPageId, - getPublishingError, - getIsEditorLoading, getIsEditorInitialized, + getIsEditorInitializeError, + getIsEditorLoading, getIsPublishingApplication, + getPublishingError, } from "selectors/editorSelectors"; import { - Dialog, - Classes, AnchorButton, + Classes, + Dialog, Hotkey, Hotkeys, Spinner, @@ -40,11 +41,12 @@ import ConfirmRunModal from "pages/Editor/ConfirmRunModal"; import * as Sentry from "@sentry/react"; import { copyWidget, - pasteWidget, - deleteSelectedWidget, cutWidget, + deleteSelectedWidget, + pasteWidget, } from "actions/widgetActions"; import { isMac } from "utils/helpers"; +import ServerTimeout from "../common/ServerTimeout"; type EditorProps = { currentApplicationId?: string; @@ -53,6 +55,7 @@ type EditorProps = { isPublishing: boolean; isEditorLoading: boolean; isEditorInitialized: boolean; + isEditorInitializeError: boolean; errorPublishing: boolean; copySelectedWidget: () => void; pasteCopiedWidget: () => void; @@ -189,6 +192,8 @@ class Editor extends Component { nextProps.isPublishing !== this.props.isPublishing || nextProps.isEditorLoading !== this.props.isEditorLoading || nextProps.errorPublishing !== this.props.errorPublishing || + nextProps.isEditorInitializeError !== + this.props.isEditorInitializeError || nextState.isDialogOpen !== this.state.isDialogOpen || nextState.registered !== this.state.registered ); @@ -200,6 +205,9 @@ class Editor extends Component { }); }; public render() { + if (this.props.isEditorInitializeError) { + return ; + } if (!this.props.isEditorInitialized || !this.state.registered) { return ( @@ -260,6 +268,7 @@ const mapStateToProps = (state: AppState) => ({ isPublishing: getIsPublishingApplication(state), isEditorLoading: getIsEditorLoading(state), isEditorInitialized: getIsEditorInitialized(state), + isEditorInitializeError: getIsEditorInitializeError(state), user: getCurrentUser(state), }); diff --git a/app/client/src/pages/common/PageNotFound.tsx b/app/client/src/pages/common/PageNotFound.tsx index ed0e2d4076..e81f1e8f41 100644 --- a/app/client/src/pages/common/PageNotFound.tsx +++ b/app/client/src/pages/common/PageNotFound.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { RouterProps } from "react-router"; +import { RouteComponentProps, withRouter } from "react-router"; import styled from "styled-components"; import Button from "components/editorComponents/Button"; import PageUnavailableImage from "assets/images/404-image.png"; @@ -20,7 +20,7 @@ const Wrapper = styled.div` } `; -class PageNotFound extends React.PureComponent { +class PageNotFound extends React.PureComponent { public render() { return ( <> @@ -54,4 +54,4 @@ class PageNotFound extends React.PureComponent { } } -export default PageNotFound; +export default withRouter(PageNotFound); diff --git a/app/client/src/pages/common/ServerTimeout.tsx b/app/client/src/pages/common/ServerTimeout.tsx new file mode 100644 index 0000000000..8c2727c741 --- /dev/null +++ b/app/client/src/pages/common/ServerTimeout.tsx @@ -0,0 +1,56 @@ +import React from "react"; +import styled from "styled-components"; +import AppTimeoutImage from "assets/images/timeout-image.png"; + +const Wrapper = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + height: calc(100vh - ${props => props.theme.headerHeight}); + .bold-text { + font-weight: ${props => props.theme.fontWeights[3]}; + font-size: 24px; + } + .page-unavailable-img { + width: 35%; + } + .button-position { + margin: auto; + } +`; + +const RetryButton = styled.button` + background-color: #f3672a; + color: white; + height: 40px; + width: 300px; + border: none; + cursor: pointer; + font-weight: 600; + font-size: 17px; +`; + +const ServerTimeout = () => { + return ( + + Page Unavailable +
+

+ Appsmith server is taking too long to respond +

+

Please retry after some time

+ window.location.reload()}> + {"Retry"} + +
+
+ ); +}; + +export default ServerTimeout; diff --git a/app/client/src/reducers/uiReducers/appViewReducer.tsx b/app/client/src/reducers/uiReducers/appViewReducer.tsx index 5fc46771c2..31c7d24476 100644 --- a/app/client/src/reducers/uiReducers/appViewReducer.tsx +++ b/app/client/src/reducers/uiReducers/appViewReducer.tsx @@ -5,12 +5,14 @@ import { ReduxAction, ReduxActionTypes, PageListPayload, + ReduxActionErrorTypes, } from "constants/ReduxActionConstants"; import { FetchPublishedPageSuccessPayload } from "actions/pageActions"; const initialState: AppViewReduxState = { isFetchingPage: false, initialized: false, + initializeError: false, pages: [], pageWidgetId: "0", }; @@ -24,6 +26,11 @@ const appViewReducer = createReducer(initialState, { ) => { return { ...state, initialized: true }; }, + [ReduxActionErrorTypes.INITIALIZE_PAGE_VIEWER_ERROR]: ( + state: AppViewReduxState, + ) => { + return { ...state, initializeError: true }; + }, [ReduxActionTypes.FETCH_PUBLISHED_PAGE_INIT]: (state: AppViewReduxState) => { return { ...state, dsl: undefined, isFetchingPage: true }; }, @@ -45,6 +52,7 @@ const appViewReducer = createReducer(initialState, { export interface AppViewReduxState { initialized: boolean; + initializeError: boolean; dsl?: ContainerWidgetProps; isFetchingPage: boolean; currentLayoutId?: string; diff --git a/app/client/src/reducers/uiReducers/editorReducer.tsx b/app/client/src/reducers/uiReducers/editorReducer.tsx index 3e9d9d73ad..f46aa352f4 100644 --- a/app/client/src/reducers/uiReducers/editorReducer.tsx +++ b/app/client/src/reducers/uiReducers/editorReducer.tsx @@ -5,12 +5,11 @@ import { ReduxActionTypes, ReduxActionErrorTypes, } from "constants/ReduxActionConstants"; -import { WidgetProps } from "widgets/BaseWidget"; -import { ContainerWidgetProps } from "widgets/ContainerWidget"; import moment from "moment"; const initialState: EditorReduxState = { initialized: false, + initializationError: false, loadingStates: { publishing: false, publishingError: false, @@ -68,11 +67,8 @@ const editorReducer = createReducer(initialState, { ) => { return { ...state, - loadingStates: { - ...state.loadingStates, - loading: false, - loadingError: true, - }, + initializationError: true, + initialized: false, }; }, [ReduxActionTypes.PUBLISH_APPLICATION_INIT]: (state: EditorReduxState) => { @@ -178,7 +174,7 @@ const editorReducer = createReducer(initialState, { export interface EditorReduxState { initialized: boolean; - dsl?: ContainerWidgetProps; + initializationError: boolean; pageWidgetId?: string; currentLayoutId?: string; currentPageName?: string; diff --git a/app/client/src/sagas/ErrorSagas.tsx b/app/client/src/sagas/ErrorSagas.tsx index 9d245866eb..7dfcb2ba6a 100644 --- a/app/client/src/sagas/ErrorSagas.tsx +++ b/app/client/src/sagas/ErrorSagas.tsx @@ -11,6 +11,7 @@ import { put, takeLatest, call } from "redux-saga/effects"; import { ERROR_401, ERROR_500, ERROR_0 } from "constants/messages"; import { ToastType } from "react-toastify"; import log from "loglevel"; +import { axiosConnectionAbortedCode } from "../api/Api"; export function* callAPI(apiCall: any, requestPayload: any) { try { @@ -60,7 +61,7 @@ export function getResponseErrorMessage(response: ApiResponse) { : undefined; } -type ErrorPayloadType = { code?: number; message?: string }; +type ErrorPayloadType = { code?: number | string; message?: string }; let ActionErrorDisplayMap: { [key: string]: (error: ErrorPayloadType) => string; } = {}; @@ -92,6 +93,7 @@ export function* errorSaga( type, payload: { error, show = true }, } = errorAction; + const message = error && error.message ? error.message : ActionErrorDisplayMap[type](error); diff --git a/app/client/src/sagas/InitSagas.ts b/app/client/src/sagas/InitSagas.ts index e0d822ca1a..70332af810 100644 --- a/app/client/src/sagas/InitSagas.ts +++ b/app/client/src/sagas/InitSagas.ts @@ -1,7 +1,14 @@ -import { all, call, put, select, take, takeLatest } from "redux-saga/effects"; +import { + all, + call, + put, + select, + take, + takeLatest, + race, +} from "redux-saga/effects"; import { InitializeEditorPayload, - Page, ReduxAction, ReduxActionErrorTypes, ReduxActionTypes, @@ -21,126 +28,86 @@ import { fetchActions, fetchActionsForView } from "actions/actionActions"; import { fetchApplication } from "actions/applicationActions"; import AnalyticsUtil from "utils/AnalyticsUtil"; import { getCurrentApplication } from "selectors/applicationSelectors"; -import { AppState } from "reducers"; -import PageApi, { FetchPageResponse } from "api/PageApi"; -import { validateResponse } from "./ErrorSagas"; -import { extractCurrentDSL } from "utils/WidgetPropsUtils"; import { APP_MODE } from "reducers/entityReducers/appReducer"; -import { getAppStoreName } from "constants/AppConstants"; +import { getAppStore } from "constants/AppConstants"; import { getDefaultPageId } from "./selectors"; - -const getAppStore = (appId: string) => { - const appStoreName = getAppStoreName(appId); - const storeString = localStorage.getItem(appStoreName) || "{}"; - let store; - try { - store = JSON.parse(storeString); - } catch (e) { - store = {}; - } - return store; -}; +import { populatePageDSLsSaga } from "./PageSagas"; +import { initEditorError, initViewerError } from "../actions/initActions"; function* initializeEditorSaga( initializeEditorAction: ReduxAction, ) { const { applicationId, pageId } = initializeEditorAction.payload; - // Step 1: Set App Mode. Start getting all the data needed - yield put(setAppMode(APP_MODE.EDIT)); - yield put({ type: ReduxActionTypes.START_EVALUATION }); - yield all([ - put(fetchPageList(applicationId, APP_MODE.EDIT)), - put(fetchEditorConfigs()), - put(fetchActions(applicationId)), - put(fetchPage(pageId)), - put(fetchApplication(applicationId, APP_MODE.EDIT)), - ]); - // Step 2: Wait for all data to be in the state - yield all([ - take(ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS), - take(ReduxActionTypes.FETCH_PAGE_SUCCESS), - take(ReduxActionTypes.SWITCH_CURRENT_PAGE_ID), - take(ReduxActionTypes.FETCH_ACTIONS_SUCCESS), - ]); - - // Step 3: Call all the APIs which needs Organization Id from PageList API response. - yield all([put(fetchPlugins()), put(fetchDatasources())]); - - // Step 4: Wait for all data to be in the state - yield all([ - take(ReduxActionTypes.FETCH_PLUGINS_SUCCESS), - take(ReduxActionTypes.FETCH_DATASOURCES_SUCCESS), - ]); - - // Step 5: Set app store - yield put(updateAppStore(getAppStore(applicationId))); - - const currentApplication = yield select(getCurrentApplication); - - const appName = currentApplication ? currentApplication.name : ""; - const appId = currentApplication ? currentApplication.id : ""; - - AnalyticsUtil.logEvent("EDITOR_OPEN", { - appId: appId, - appName: appName, - }); - - // Step 6: Notify UI that the editor is ready to go - yield put({ - type: ReduxActionTypes.INITIALIZE_EDITOR_SUCCESS, - }); - yield call(populatePageDSLsSaga); -} - -function* fetchPageDSLSaga(pageId: string) { try { - const fetchPageResponse: FetchPageResponse = yield call(PageApi.fetchPage, { - id: pageId, + yield put(setAppMode(APP_MODE.EDIT)); + yield put({ type: ReduxActionTypes.START_EVALUATION }); + yield all([ + put(fetchPageList(applicationId, APP_MODE.EDIT)), + put(fetchEditorConfigs()), + put(fetchActions(applicationId)), + put(fetchPage(pageId)), + put(fetchApplication(applicationId, APP_MODE.EDIT)), + ]); + + const resultOfPrimaryCalls = yield race({ + success: all([ + take(ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS), + take(ReduxActionTypes.FETCH_PAGE_SUCCESS), + take(ReduxActionTypes.FETCH_APPLICATION_SUCCESS), + take(ReduxActionTypes.FETCH_ACTIONS_SUCCESS), + ]), + failure: take([ + ReduxActionErrorTypes.FETCH_PAGE_LIST_ERROR, + ReduxActionErrorTypes.FETCH_PAGE_ERROR, + ReduxActionErrorTypes.FETCH_APPLICATION_ERROR, + ReduxActionErrorTypes.FETCH_ACTIONS_ERROR, + ]), }); - const isValidResponse = yield validateResponse(fetchPageResponse); - if (isValidResponse) { - return { - pageId: pageId, - dsl: extractCurrentDSL(fetchPageResponse), - }; + + if (resultOfPrimaryCalls.failure) { + yield put(initEditorError()); + return; } - } catch (error) { - yield put({ - type: ReduxActionTypes.FETCH_PAGE_DSL_ERROR, - payload: { - pageId: pageId, - error, - show: false, - }, - }); - } -} -export function* populatePageDSLsSaga() { - try { - yield put({ - type: ReduxActionTypes.POPULATE_PAGEDSLS_INIT, + yield all([put(fetchPlugins()), put(fetchDatasources())]); + + const resultOfSecondaryCalls = yield race({ + success: all([ + take(ReduxActionTypes.FETCH_PLUGINS_SUCCESS), + take(ReduxActionTypes.FETCH_DATASOURCES_SUCCESS), + ]), + failure: take([ + ReduxActionErrorTypes.FETCH_PLUGINS_ERROR, + ReduxActionErrorTypes.FETCH_DATASOURCES_ERROR, + ]), }); - const pageIds: string[] = yield select((state: AppState) => - state.entities.pageList.pages.map((page: Page) => page.pageId), - ); - const pageDSLs = yield all( - pageIds.map((pageId: string) => { - return call(fetchPageDSLSaga, pageId); - }), - ); - yield put({ - type: ReduxActionTypes.FETCH_PAGE_DSLS_SUCCESS, - payload: pageDSLs, + + if (resultOfSecondaryCalls.failure) { + yield put(initEditorError()); + return; + } + + yield put(updateAppStore(getAppStore(applicationId))); + + const currentApplication = yield select(getCurrentApplication); + + const appName = currentApplication ? currentApplication.name : ""; + const appId = currentApplication ? currentApplication.id : ""; + + AnalyticsUtil.logEvent("EDITOR_OPEN", { + appId: appId, + appName: appName, }); - } catch (error) { + yield put({ - type: ReduxActionErrorTypes.POPULATE_PAGEDSLS_ERROR, - payload: { - error, - }, + type: ReduxActionTypes.INITIALIZE_EDITOR_SUCCESS, }); + } catch (e) { + yield put(initEditorError()); + return; } + + yield call(populatePageDSLsSaga); } export function* initializeAppViewerSaga( @@ -156,11 +123,23 @@ export function* initializeAppViewerSaga( put(fetchApplication(applicationId, APP_MODE.PUBLISHED)), ]); - yield all([ - take(ReduxActionTypes.FETCH_ACTIONS_VIEW_MODE_SUCCESS), - take(ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS), - take(ReduxActionTypes.FETCH_APPLICATION_SUCCESS), - ]); + const resultOfPrimaryCalls = yield race({ + success: all([ + take(ReduxActionTypes.FETCH_ACTIONS_VIEW_MODE_SUCCESS), + take(ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS), + take(ReduxActionTypes.FETCH_APPLICATION_SUCCESS), + ]), + failure: take([ + ReduxActionErrorTypes.FETCH_ACTIONS_VIEW_MODE_ERROR, + ReduxActionErrorTypes.FETCH_PAGE_LIST_ERROR, + ReduxActionErrorTypes.FETCH_APPLICATION_ERROR, + ]), + }); + + if (resultOfPrimaryCalls.failure) { + yield put(initViewerError()); + return; + } yield put(updateAppStore(getAppStore(applicationId))); const defaultPageId = yield select(getDefaultPageId); @@ -168,7 +147,15 @@ export function* initializeAppViewerSaga( if (toLoadPageId) { yield put(fetchPublishedPage(toLoadPageId, true)); - yield take(ReduxActionTypes.FETCH_PUBLISHED_PAGE_SUCCESS); + + const resultOfFetchPage = yield race({ + success: take(ReduxActionTypes.FETCH_PUBLISHED_PAGE_SUCCESS), + failure: take(ReduxActionErrorTypes.FETCH_PUBLISHED_PAGE_ERROR), + }); + if (resultOfFetchPage.failure) { + yield put(initViewerError()); + return; + } yield put(setAppMode(APP_MODE.PUBLISHED)); yield put(updateAppStore(getAppStore(applicationId))); diff --git a/app/client/src/sagas/PageSagas.tsx b/app/client/src/sagas/PageSagas.tsx index fd1ea55832..129297a4dc 100644 --- a/app/client/src/sagas/PageSagas.tsx +++ b/app/client/src/sagas/PageSagas.tsx @@ -1,6 +1,7 @@ import CanvasWidgetsNormalizer from "normalizers/CanvasWidgetsNormalizer"; import { AppState } from "reducers"; import { + Page, PageListPayload, ReduxAction, ReduxActionErrorTypes, @@ -43,7 +44,6 @@ import { select, takeLatest, takeLeading, - take, } from "redux-saga/effects"; import history from "utils/history"; import { BUILDER_PAGE_URL } from "constants/routes"; @@ -117,6 +117,16 @@ export function* fetchPageListSaga( PerformanceTracker.stopAsyncTracking( PerformanceTransactionName.FETCH_PAGE_LIST_API, ); + } else { + PerformanceTracker.stopAsyncTracking( + PerformanceTransactionName.FETCH_PAGE_LIST_API, + ); + yield put({ + type: ReduxActionErrorTypes.FETCH_PAGE_LIST_ERROR, + payload: { + error: response.responseMeta.error, + }, + }); } } catch (error) { PerformanceTracker.stopAsyncTracking( @@ -608,6 +618,57 @@ export function* setDataUrl() { yield put(setUrlData(urlData)); } +function* fetchPageDSLSaga(pageId: string) { + try { + const fetchPageResponse: FetchPageResponse = yield call(PageApi.fetchPage, { + id: pageId, + }); + const isValidResponse = yield validateResponse(fetchPageResponse); + if (isValidResponse) { + return { + pageId: pageId, + dsl: extractCurrentDSL(fetchPageResponse), + }; + } + } catch (error) { + yield put({ + type: ReduxActionTypes.FETCH_PAGE_DSL_ERROR, + payload: { + pageId: pageId, + error, + show: false, + }, + }); + } +} + +export function* populatePageDSLsSaga() { + try { + yield put({ + type: ReduxActionTypes.POPULATE_PAGEDSLS_INIT, + }); + const pageIds: string[] = yield select((state: AppState) => + state.entities.pageList.pages.map((page: Page) => page.pageId), + ); + const pageDSLs = yield all( + pageIds.map((pageId: string) => { + return call(fetchPageDSLSaga, pageId); + }), + ); + yield put({ + type: ReduxActionTypes.FETCH_PAGE_DSLS_SUCCESS, + payload: pageDSLs, + }); + } catch (error) { + yield put({ + type: ReduxActionErrorTypes.POPULATE_PAGEDSLS_ERROR, + payload: { + error, + }, + }); + } +} + export default function* pageSagas() { yield all([ takeLatest(ReduxActionTypes.FETCH_PAGE_INIT, fetchPageSaga), diff --git a/app/client/src/selectors/appViewSelectors.tsx b/app/client/src/selectors/appViewSelectors.tsx index 477ded716b..f289a3160a 100644 --- a/app/client/src/selectors/appViewSelectors.tsx +++ b/app/client/src/selectors/appViewSelectors.tsx @@ -32,6 +32,11 @@ export const getIsInitialized = createSelector( (view: AppViewReduxState) => view.initialized, ); +export const getIsInitializeError = createSelector( + getAppViewState, + (view: AppViewReduxState) => view.initializeError, +); + export const getCurrentDSLPageId = createSelector( getPageListState, (pageList: PageListReduxState) => pageList.currentPageId, diff --git a/app/client/src/selectors/editorSelectors.tsx b/app/client/src/selectors/editorSelectors.tsx index 1f1c4da845..2a787d1fd5 100644 --- a/app/client/src/selectors/editorSelectors.tsx +++ b/app/client/src/selectors/editorSelectors.tsx @@ -20,14 +20,12 @@ import { getDataTree } from "selectors/dataTreeSelectors"; import _ from "lodash"; import { ContainerWidgetProps } from "widgets/ContainerWidget"; import { DataTreeWidget, ENTITY_TYPE } from "entities/DataTree/dataTreeFactory"; -import { getActions, getWidgetsMeta } from "sagas/selectors"; +import { getActions } from "sagas/selectors"; -import * as log from "loglevel"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; import { getCanvasWidgets } from "./entitiesSelector"; -import { MetaState } from "../reducers/entityReducers/metaReducer"; import { WidgetTypes } from "../constants/WidgetConstants"; const getWidgetConfigs = (state: AppState) => state.entities.widgetConfig; @@ -45,6 +43,9 @@ const getWidgets = (state: AppState): CanvasWidgetsReduxState => export const getIsEditorInitialized = (state: AppState) => state.ui.editor.initialized; +export const getIsEditorInitializeError = (state: AppState): boolean => + state.ui.editor.initializationError; + export const getIsEditorLoading = (state: AppState) => state.ui.editor.loadingStates.loading;