diff --git a/app/client/src/ce/hooks/datasourceEditorHooks.tsx b/app/client/src/ce/hooks/datasourceEditorHooks.tsx
index 385a328f0c24..b2795eb61493 100644
--- a/app/client/src/ce/hooks/datasourceEditorHooks.tsx
+++ b/app/client/src/ce/hooks/datasourceEditorHooks.tsx
@@ -1,34 +1,34 @@
-import { generateTemplateFormURL } from "@appsmith/RouteBuilder";
+import React from "react";
+import { useSelector } from "react-redux";
+import NewActionButton from "pages/Editor/DataSourceEditor/NewActionButton";
+import { EditorNames } from "./";
+import type { Datasource } from "entities/Datasource";
+import type { ApiDatasourceForm } from "entities/Datasource/RestAPIForm";
+import { Button } from "design-system";
import {
GENERATE_NEW_PAGE_BUTTON_TEXT,
createMessage,
} from "@appsmith/constants/messages";
-import { ActionParentEntityType } from "@appsmith/entities/Engine/actionHelpers";
-import { FEATURE_FLAG } from "@appsmith/entities/FeatureFlag";
-import type { AppState } from "@appsmith/reducers";
-import { getPlugin } from "@appsmith/selectors/entitiesSelector";
import AnalyticsUtil from "@appsmith/utils/AnalyticsUtil";
-import {
- getHasCreatePagePermission,
- hasCreateDSActionPermissionInApp,
-} from "@appsmith/utils/BusinessFeatures/permissionPageHelpers";
-import { Button } from "design-system";
-import type { Datasource } from "entities/Datasource";
-import type { ApiDatasourceForm } from "entities/Datasource/RestAPIForm";
-import NewActionButton from "pages/Editor/DataSourceEditor/NewActionButton";
-import { useShowPageGenerationOnHeader } from "pages/Editor/DataSourceEditor/hooks";
-import React from "react";
-import { useSelector } from "react-redux";
+import history from "utils/history";
+import { generateTemplateFormURL } from "@appsmith/RouteBuilder";
import {
getCurrentApplication,
getCurrentApplicationId,
getCurrentPageId,
getPagePermissions,
} from "selectors/editorSelectors";
-import { isEnabledForPreviewData } from "utils/editorContextUtils";
-import history from "utils/history";
+import { useShowPageGenerationOnHeader } from "pages/Editor/DataSourceEditor/hooks";
+import type { AppState } from "@appsmith/reducers";
+import {
+ getHasCreatePagePermission,
+ hasCreateDSActionPermissionInApp,
+} from "@appsmith/utils/BusinessFeatures/permissionPageHelpers";
+import { FEATURE_FLAG } from "@appsmith/entities/FeatureFlag";
import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
-import { EditorNames } from "./";
+import { ActionParentEntityType } from "@appsmith/entities/Engine/actionHelpers";
+import { isEnabledForPreviewData } from "utils/editorContextUtils";
+import { getPlugin } from "@appsmith/selectors/entitiesSelector";
export interface HeaderActionProps {
datasource: Datasource | ApiDatasourceForm | undefined;
@@ -48,9 +48,6 @@ export const useHeaderActions = (
) => {
const pageId = useSelector(getCurrentPageId);
const isFeatureEnabled = useFeatureFlag(FEATURE_FLAG.license_gac_enabled);
- const releaseDragDropBuildingBlocks = useFeatureFlag(
- FEATURE_FLAG.release_drag_drop_building_blocks_enabled,
- );
const userAppPermissions = useSelector(
(state: AppState) => getCurrentApplication(state)?.userPermissions ?? [],
);
@@ -68,10 +65,6 @@ export const useHeaderActions = (
const isPluginAllowedToPreviewData =
!!plugin && isEnabledForPreviewData(datasource as Datasource, plugin);
- const shouldShowSecondaryGenerateButton = releaseDragDropBuildingBlocks
- ? false
- : !!isPluginAllowedToPreviewData;
-
if (editorType === EditorNames.APPLICATION) {
const canCreateDatasourceActions = hasCreateDSActionPermissionInApp({
isEnabled: isFeatureEnabled,
@@ -106,7 +99,7 @@ export const useHeaderActions = (
datasource={datasource as Datasource}
disabled={!canCreateDatasourceActions || !isPluginAuthorized}
eventFrom="datasource-pane"
- isNewQuerySecondaryButton={shouldShowSecondaryGenerateButton}
+ isNewQuerySecondaryButton={!!isPluginAllowedToPreviewData}
pluginType={pluginType}
/>
);
diff --git a/app/client/src/pages/Editor/DatasourceInfo/DatasourceViewModeSchema.tsx b/app/client/src/pages/Editor/DatasourceInfo/DatasourceViewModeSchema.tsx
index b0d668b26e0a..3f2e78e3a189 100644
--- a/app/client/src/pages/Editor/DatasourceInfo/DatasourceViewModeSchema.tsx
+++ b/app/client/src/pages/Editor/DatasourceInfo/DatasourceViewModeSchema.tsx
@@ -77,9 +77,6 @@ const DatasourceViewModeSchema = (props: Props) => {
);
const isFeatureEnabled = useFeatureFlag(FEATURE_FLAG.license_gac_enabled);
- const releaseDragDropBuildingBlocks = useFeatureFlag(
- FEATURE_FLAG.release_drag_drop_building_blocks_enabled,
- );
const editorType = useEditorType(history.location.pathname);
@@ -233,9 +230,7 @@ const DatasourceViewModeSchema = (props: Props) => {
// if there was a failure in the fetching of the data
// if tableName from schema is availble
// if the user has permissions
- // if drag and drop building blocks are not enabled
const showGeneratePageBtn =
- !releaseDragDropBuildingBlocks &&
!isDatasourceStructureLoading &&
!isLoading &&
!failedFetchingPreviewData &&
diff --git a/app/client/src/pages/Editor/DatasourceInfo/GoogleSheetSchema.tsx b/app/client/src/pages/Editor/DatasourceInfo/GoogleSheetSchema.tsx
index 5d8f8fc8d83c..4d126e81505f 100644
--- a/app/client/src/pages/Editor/DatasourceInfo/GoogleSheetSchema.tsx
+++ b/app/client/src/pages/Editor/DatasourceInfo/GoogleSheetSchema.tsx
@@ -347,9 +347,6 @@ function GoogleSheetSchema(props: Props) {
);
const isFeatureEnabled = useFeatureFlag(FEATURE_FLAG.license_gac_enabled);
- const releaseDragDropBuildingBlocks = useFeatureFlag(
- FEATURE_FLAG.release_drag_drop_building_blocks_enabled,
- );
const editorType = useEditorType(history.location.pathname);
@@ -375,7 +372,6 @@ function GoogleSheetSchema(props: Props) {
);
const showGeneratePageBtn =
- !releaseDragDropBuildingBlocks &&
!isLoading &&
!isError &&
sheetData?.length &&
diff --git a/app/client/src/pages/Editor/DatasourceInfo/HideGeneratePageButton.test.tsx b/app/client/src/pages/Editor/DatasourceInfo/HideGeneratePageButton.test.tsx
deleted file mode 100644
index 001589da2361..000000000000
--- a/app/client/src/pages/Editor/DatasourceInfo/HideGeneratePageButton.test.tsx
+++ /dev/null
@@ -1,556 +0,0 @@
-import {
- DATASOURCE_GENERATE_PAGE_BUTTON,
- NEW_AI_BUTTON_TEXT,
- NEW_API_BUTTON_TEXT,
- NEW_QUERY_BUTTON_TEXT,
- createMessage,
-} from "@appsmith/constants/messages";
-import { getNumberOfEntitiesInCurrentPage } from "@appsmith/selectors/entitiesSelector";
-import "@testing-library/jest-dom";
-import { render, screen } from "@testing-library/react";
-import { PluginType } from "entities/Action";
-import { DatasourceConnectionMode, type Datasource } from "entities/Datasource";
-import { SSLType } from "entities/Datasource/RestAPIForm";
-import { unitTestBaseMockStore } from "layoutSystems/common/dropTarget/unitTestUtils";
-import React from "react";
-import { Provider, useSelector } from "react-redux";
-import { useParams } from "react-router";
-import configureStore from "redux-mock-store";
-import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
-import { DSFormHeader } from "../DataSourceEditor/DSFormHeader";
-import DatasourceViewModeSchema from "./DatasourceViewModeSchema";
-import GoogleSheetSchema from "./GoogleSheetSchema";
-/* eslint-disable @typescript-eslint/no-var-requires */
-const reactRouter = require("react-router");
-
-jest.mock("utils/hooks/useFeatureFlag");
-jest.mock("react-router", () => ({
- ...jest.requireActual("react-router"),
- useParams: jest.fn(),
-}));
-jest.mock("react-redux", () => ({
- ...jest.requireActual("react-redux"),
- useSelector: jest.fn(),
-}));
-
-const mockStore = configureStore([]);
-
-const mockSetDatasourceViewModeFlag = jest.fn();
-
-const renderBaseDatasourceComponent = () => {
- render(
-
-
- ,
- );
-};
-
-const renderGoogleSheetDSComponent = () => {
- render(
-
-
- ,
- );
-};
-
-const renderDSFormHeader = () => {
- render(
-
- true}
- viewMode
- />
- ,
- );
-};
-
-const getCreateButtonText = (pluginType: PluginType) => {
- switch (pluginType) {
- case PluginType.DB:
- case PluginType.SAAS:
- return createMessage(NEW_QUERY_BUTTON_TEXT);
- case PluginType.AI:
- return createMessage(NEW_AI_BUTTON_TEXT);
- default:
- return createMessage(NEW_API_BUTTON_TEXT);
- }
-};
-
-describe("DatasourceViewModeSchema Component", () => {
- it("1. should not render the 'generate page' button when release_drag_drop_building_blocks_enabled is enabled", () => {
- (useFeatureFlag as jest.Mock).mockReturnValue(true);
- (useParams as jest.Mock).mockReturnValue({
- pageId: unitTestBaseMockStore.entities.pageList.currentPageId,
- });
- (useSelector as jest.Mock).mockImplementation((selector) => {
- if (selector === getNumberOfEntitiesInCurrentPage) {
- return 0;
- }
- return selector(baseStoreForSpec); // Default case for other selectors
- });
- renderBaseDatasourceComponent();
-
- // Check that the "generate page" button is not rendered
- const generatePageButton = screen.queryByText(
- createMessage(DATASOURCE_GENERATE_PAGE_BUTTON),
- );
- expect(generatePageButton).not.toBeInTheDocument();
- });
-
- it("2. should render new query button as primary when release_drag_drop_building_blocks_enabled is enabled", () => {
- (useFeatureFlag as jest.Mock).mockReturnValue(true);
- const mockHistoryPush = jest.fn();
- const mockHistoryReplace = jest.fn();
- const mockHistoryLocation = {
- pathname: "/",
- search: "",
- hash: "",
- state: {},
- };
-
- jest.spyOn(reactRouter, "useHistory").mockReturnValue({
- push: mockHistoryPush,
- replace: mockHistoryReplace,
- location: mockHistoryLocation,
- });
-
- jest.spyOn(reactRouter, "useLocation").mockReturnValue(mockHistoryLocation);
-
- renderDSFormHeader();
-
- // Check that the "New Query" button is rendered as primary
- const newQuerySpan = screen.getByText(getCreateButtonText(PluginType.DB));
- const newQueryButton = newQuerySpan.closest("button");
- expect(newQueryButton).toHaveAttribute("kind", "primary");
- });
-});
-
-describe("GoogleSheetSchema Component", () => {
- it("should not render the 'generate page' button when release_drag_drop_building_blocks_enabled is enabled", () => {
- (useFeatureFlag as jest.Mock).mockReturnValue(true);
- (useParams as jest.Mock).mockReturnValue({
- pageId: unitTestBaseMockStore.entities.pageList.currentPageId,
- });
- (useSelector as jest.Mock).mockImplementation((selector) => {
- if (selector === getNumberOfEntitiesInCurrentPage) {
- return 0;
- }
- return selector(baseStoreForSpec); // Default case for other selectors
- });
- renderGoogleSheetDSComponent();
-
- // Check that the "generate page" button is not rendered
- const generatePageButton = screen.queryByText(
- createMessage(DATASOURCE_GENERATE_PAGE_BUTTON),
- );
- expect(generatePageButton).not.toBeInTheDocument();
- });
-});
-
-const mockDatasource: Datasource = {
- id: "667941878b418b52eb273895",
- userPermissions: [
- "execute:datasources",
- "delete:datasources",
- "manage:datasources",
- "read:datasources",
- ],
- name: "Users",
- pluginId: "656eeb1024ec7f5154c9ba00",
- workspaceId: "6679402f8b418b52eb27388d",
- datasourceStorages: {
- unused_env: {
- datasourceId: "667941878b418b52eb273895",
- environmentId: "unused_env",
- datasourceConfiguration: {
- url: "",
- connection: {
- mode: DatasourceConnectionMode.READ_WRITE,
- ssl: {
- authType: SSLType.DEFAULT,
- authTypeControl: false,
- certificateFile: {} as any,
- },
- },
- authentication: {
- authenticationType: "dbAuth",
- username: "users",
- },
- },
- isConfigured: true,
- isValid: true,
- },
- },
- invalids: [],
- messages: [],
- isMock: true,
-};
-
-const baseStoreForSpec = {
- entities: {
- ...unitTestBaseMockStore.entities,
- plugins: {
- list: [
- {
- id: "656eeb1024ec7f5154c9ba00",
- userPermissions: [],
- name: "PostgreSQL",
- type: "DB",
- packageName: "postgres-plugin",
- iconLocation: "https://assets.appsmith.com/logo/postgresql.svg",
- documentationLink:
- "https://docs.appsmith.com/reference/datasources/querying-postgres#create-crud-queries",
- responseType: "TABLE",
- uiComponent: "DbEditorForm",
- datasourceComponent: "AutoForm",
- generateCRUDPageComponent: "PostgreSQL",
- allowUserDatasources: true,
- isRemotePlugin: false,
- templates: {
- CREATE:
- "INSERT INTO users\n (name, gender, email)\nVALUES\n (\n {{ nameInput.text }},\n {{ genderDropdown.selectedOptionValue }},\n {{ emailInput.text }}\n );",
- SELECT:
- "SELECT * FROM <> LIMIT 10;\n\n-- Please enter a valid table name and hit RUN",
- UPDATE:
- "UPDATE users\n SET status = 'APPROVED'\n WHERE id = {{ usersTable.selectedRow.id }};\n",
- DELETE: "DELETE FROM users WHERE id = -1;",
- },
- remotePlugin: false,
- new: false,
- },
- {
- id: "656eeb1024ec7f5154c9ba01",
- userPermissions: [],
- name: "REST API",
- type: "API",
- packageName: "restapi-plugin",
- iconLocation: "https://assets.appsmith.com/RestAPI.png",
- uiComponent: "ApiEditorForm",
- datasourceComponent: "RestAPIDatasourceForm",
- allowUserDatasources: true,
- isRemotePlugin: false,
- templates: {},
- remotePlugin: false,
- new: false,
- },
- ],
- },
- datasources: {
- list: [
- {
- id: "667941878b418b52eb273895",
- userPermissions: [
- "execute:datasources",
- "delete:datasources",
- "manage:datasources",
- "read:datasources",
- ],
- name: "Users",
- pluginId: "656eeb1024ec7f5154c9ba00",
- workspaceId: "6679402f8b418b52eb27388d",
- datasourceStorages: {
- unused_env: {
- id: "667941878b418b52eb273896",
- datasourceId: "667941878b418b52eb273895",
- environmentId: "unused_env",
- datasourceConfiguration: {
- connection: {
- mode: "READ_WRITE",
- ssl: {
- authType: "DEFAULT",
- },
- },
- endpoints: [
- {
- host: "mockdb.internal.appsmith.com",
- },
- ],
- authentication: {
- authenticationType: "dbAuth",
- username: "users",
- databaseName: "users",
- },
- },
- isConfigured: true,
- invalids: [],
- messages: [],
- isValid: true,
- },
- },
- invalids: [],
- messages: [],
- isRecentlyCreated: true,
- isMock: true,
- isValid: true,
- new: false,
- },
- ],
- loading: false,
- isTesting: false,
- isListing: false,
- fetchingDatasourceStructure: {
- "66793e2a8b418b52eb27388a": false,
- "667941878b418b52eb273895": false,
- },
- structure: {
- "66793e2a8b418b52eb27388a": {
- tables: [
- {
- type: "TABLE",
- schema: "public",
- name: "public.users",
- columns: [
- {
- name: "id",
- type: "int4",
- defaultValue: "nextval('users_id_seq'::regclass)",
- isAutogenerated: true,
- },
- {
- name: "gender",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "latitude",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "longitude",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "dob",
- type: "timestamptz",
- isAutogenerated: false,
- },
- {
- name: "phone",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "email",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "image",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "country",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "name",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "created_at",
- type: "timestamp",
- isAutogenerated: false,
- },
- {
- name: "updated_at",
- type: "timestamp",
- isAutogenerated: false,
- },
- ],
- keys: [
- {
- name: "users_pkey",
- columnNames: ["id"],
- type: "primary key",
- },
- ],
- templates: [
- {
- title: "SELECT",
- body: 'SELECT * FROM public."users" LIMIT 10;',
- suggested: true,
- },
- {
- title: "INSERT",
- body: 'INSERT INTO public."users" ("gender", "latitude", "longitude", "dob", "phone", "email", "image", "country", "name", "created_at", "updated_at")\n VALUES (\'\', \'\', \'\', TIMESTAMP WITH TIME ZONE \'2019-07-01 06:30:00 CET\', \'\', \'\', \'\', \'\', \'\', TIMESTAMP \'2019-07-01 10:00:00\', TIMESTAMP \'2019-07-01 10:00:00\');',
- suggested: false,
- },
- {
- title: "UPDATE",
- body: 'UPDATE public."users" SET\n "gender" = \'\',\n "latitude" = \'\',\n "longitude" = \'\',\n "dob" = TIMESTAMP WITH TIME ZONE \'2019-07-01 06:30:00 CET\',\n "phone" = \'\',\n "email" = \'\',\n "image" = \'\',\n "country" = \'\',\n "name" = \'\',\n "created_at" = TIMESTAMP \'2019-07-01 10:00:00\',\n "updated_at" = TIMESTAMP \'2019-07-01 10:00:00\'\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!',
- suggested: false,
- },
- {
- title: "DELETE",
- body: 'DELETE FROM public."users"\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!',
- suggested: false,
- },
- ],
- },
- ],
- },
- "667941878b418b52eb273895": {
- tables: [
- {
- type: "TABLE",
- schema: "public",
- name: "public.users",
- columns: [
- {
- name: "id",
- type: "int4",
- defaultValue: "nextval('users_id_seq'::regclass)",
- isAutogenerated: true,
- },
- {
- name: "gender",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "latitude",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "longitude",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "dob",
- type: "timestamptz",
- isAutogenerated: false,
- },
- {
- name: "phone",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "email",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "image",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "country",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "name",
- type: "text",
- isAutogenerated: false,
- },
- {
- name: "created_at",
- type: "timestamp",
- isAutogenerated: false,
- },
- {
- name: "updated_at",
- type: "timestamp",
- isAutogenerated: false,
- },
- ],
- keys: [
- {
- name: "users_pkey",
- columnNames: ["id"],
- type: "primary key",
- },
- ],
- templates: [
- {
- title: "SELECT",
- body: 'SELECT * FROM public."users" LIMIT 10;',
- suggested: true,
- },
- {
- title: "INSERT",
- body: 'INSERT INTO public."users" ("gender", "latitude", "longitude", "dob", "phone", "email", "image", "country", "name", "created_at", "updated_at")\n VALUES (\'\', \'\', \'\', TIMESTAMP WITH TIME ZONE \'2019-07-01 06:30:00 CET\', \'\', \'\', \'\', \'\', \'\', TIMESTAMP \'2019-07-01 10:00:00\', TIMESTAMP \'2019-07-01 10:00:00\');',
- suggested: false,
- },
- {
- title: "UPDATE",
- body: 'UPDATE public."users" SET\n "gender" = \'\',\n "latitude" = \'\',\n "longitude" = \'\',\n "dob" = TIMESTAMP WITH TIME ZONE \'2019-07-01 06:30:00 CET\',\n "phone" = \'\',\n "email" = \'\',\n "image" = \'\',\n "country" = \'\',\n "name" = \'\',\n "created_at" = TIMESTAMP \'2019-07-01 10:00:00\',\n "updated_at" = TIMESTAMP \'2019-07-01 10:00:00\'\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may update every row in the table!',
- suggested: false,
- },
- {
- title: "DELETE",
- body: 'DELETE FROM public."users"\n WHERE 1 = 0; -- Specify a valid condition here. Removing the condition may delete everything in the table!',
- suggested: false,
- },
- ],
- },
- ],
- },
- },
- isFetchingMockDataSource: false,
- mockDatasourceList: [
- {
- pluginType: "db",
- packageName: "mongo-plugin",
- description: "This contains a standard movies collection",
- name: "Movies",
- },
- {
- pluginType: "db",
- packageName: "postgres-plugin",
- description: "This contains a standard users information",
- name: "Users",
- },
- ],
- executingDatasourceQuery: false,
- isReconnectingModalOpen: false,
- unconfiguredList: [],
- isDatasourceBeingSaved: false,
- isDatasourceBeingSavedFromPopup: false,
- gsheetToken: "",
- gsheetProjectID: "",
- gsheetStructure: {
- spreadsheets: {},
- sheets: {},
- columns: {},
- isFetchingSpreadsheets: false,
- isFetchingSheets: false,
- isFetchingColumns: false,
- },
- recentDatasources: [],
- isDeleting: false,
- },
- },
- ui: {
- ...unitTestBaseMockStore.ui,
- datasourcePane: {
- selectedTableName: "users",
- },
- datasourceName: {
- isSaving: [mockDatasource.id],
- errors: [mockDatasource.id],
- },
- },
-};