diff --git a/app/client/src/pages/Editor/SaaSEditor/DatasourceForm.tsx b/app/client/src/pages/Editor/SaaSEditor/DatasourceForm.tsx index 579a1d2baf..0d8115d91a 100644 --- a/app/client/src/pages/Editor/SaaSEditor/DatasourceForm.tsx +++ b/app/client/src/pages/Editor/SaaSEditor/DatasourceForm.tsx @@ -3,6 +3,7 @@ import styled from "styled-components"; import { get, isEqual, isNil, map, memoize, omit } from "lodash"; import { DATASOURCE_SAAS_FORM } from "@appsmith/constants/forms"; import type { Datasource } from "entities/Datasource"; +import { AuthenticationStatus } from "entities/Datasource"; import { ActionType } from "entities/Datasource"; import type { InjectedFormProps } from "redux-form"; import { @@ -125,6 +126,7 @@ interface StateProps extends JSONtoFormProps { requiredFields: Record; configDetails: Record; isEnabledForGSheetSchema: boolean; + isPluginAuthFailed: boolean; } interface DatasourceFormFunctions { discardTempDatasource: () => void; @@ -483,6 +485,7 @@ class DatasourceSaaSEditor extends JSONtoForm { isDeleting, isEnabledForGSheetSchema, isInsideReconnectModal, + isPluginAuthFailed, isPluginAuthorized, isSaving, isTesting, @@ -575,7 +578,7 @@ class DatasourceSaaSEditor extends JSONtoForm { {/* This adds error banner for google sheets datasource if the datasource is unauthorised */} {datasource && isGoogleSheetPlugin && - !isPluginAuthorized && + isPluginAuthFailed && datasourceId !== TEMP_DATASOURCE_ID ? ( { {datasource && isGoogleSheetPlugin && - !isPluginAuthorized ? ( + isPluginAuthFailed ? ( { ) : false; + // Auth could fail because of either: + // Failure to give permissions / Failure to select files / Failure on server + const isPluginAuthFailed = + !!plugin && !!formData + ? isDatasourceAuthorizedForQueryCreation( + formData, + plugin, + getCurrentEditingEnvID(), + [ + AuthenticationStatus.FAILURE, + AuthenticationStatus.FAILURE_ACCESS_DENIED, + AuthenticationStatus.FAILURE_FILE_NOT_SELECTED, + ], + ) + : false; + return { datasource, datasourceButtonConfiguration, @@ -788,6 +807,7 @@ const mapStateToProps = (state: AppState, props: any) => { showDebugger, scopeValue, isEnabledForGSheetSchema, + isPluginAuthFailed, }; }; diff --git a/app/client/src/utils/editorContextUtils.ts b/app/client/src/utils/editorContextUtils.ts index 99673f4140..d2ac009fd1 100644 --- a/app/client/src/utils/editorContextUtils.ts +++ b/app/client/src/utils/editorContextUtils.ts @@ -98,12 +98,14 @@ export function getPropertyControlFocusElement( * @param datasource Datasource * @param plugin Plugin * @param currentEnvironment string + * @param validStatusArr Array * @returns boolean */ export function isDatasourceAuthorizedForQueryCreation( datasource: Datasource, plugin: Plugin, currentEnvironment = getCurrentEnvironment(), + validStatusArr: Array = [AuthenticationStatus.SUCCESS], ): boolean { if (!datasource || !datasource.hasOwnProperty("datasourceStorages")) return false; @@ -128,12 +130,14 @@ export function isDatasourceAuthorizedForQueryCreation( ); if (isGoogleSheetPlugin) { + const authStatus = get( + datasourceStorage, + "datasourceConfiguration.authentication.authenticationStatus", + ) as AuthenticationStatus; const isAuthorized = authType === AuthType.OAUTH2 && - get( - datasourceStorage, - "datasourceConfiguration.authentication.authenticationStatus", - ) === AuthenticationStatus.SUCCESS; + !!authStatus && + validStatusArr.includes(authStatus); return isAuthorized; }