diff --git a/app/client/src/constants/ApiConstants.tsx b/app/client/src/constants/ApiConstants.tsx index eac8f9f405..3360552b1e 100644 --- a/app/client/src/constants/ApiConstants.tsx +++ b/app/client/src/constants/ApiConstants.tsx @@ -29,3 +29,6 @@ export const GithubOAuthURL = `${OAuthURL}/github`; export const LOGIN_SUBMIT_PATH = "login"; export const SIGNUP_SUBMIT_PATH = "users"; + +export const getExportAppAPIRoute = (applicationId: string) => + `/api/v1/applications/export/${applicationId}`; diff --git a/app/client/src/pages/Applications/ApplicationCard.tsx b/app/client/src/pages/Applications/ApplicationCard.tsx index 8cd7ae6c4b..945a8565a3 100644 --- a/app/client/src/pages/Applications/ApplicationCard.tsx +++ b/app/client/src/pages/Applications/ApplicationCard.tsx @@ -49,6 +49,7 @@ import { isEllipsisActive } from "utils/helpers"; import ForkApplicationModal from "./ForkApplicationModal"; import { Toaster } from "components/ads/Toast"; import { Variant } from "components/ads/common"; +import { getExportAppAPIRoute } from "constants/ApiConstants"; type NameWrapperProps = { hasReadPermission: boolean; @@ -355,7 +356,8 @@ export function ApplicationCard(props: ApplicationCardProps) { const existingLink = document.getElementById(id); existingLink && existingLink.remove(); const link = document.createElement("a"); - link.href = `/api/v1/applications/export/${props.application.id}`; + + link.href = getExportAppAPIRoute(props.application.id); link.id = id; document.body.appendChild(link); // will fetch the file manually during cypress test run. diff --git a/app/client/src/pages/Editor/EditorAppName/NavigationMenuData.ts b/app/client/src/pages/Editor/EditorAppName/NavigationMenuData.ts index d1202a6b56..21f42371d3 100644 --- a/app/client/src/pages/Editor/EditorAppName/NavigationMenuData.ts +++ b/app/client/src/pages/Editor/EditorAppName/NavigationMenuData.ts @@ -15,6 +15,7 @@ import { APPLICATIONS_URL, PAGE_LIST_EDITOR_URL } from "constants/routes"; import { MenuItemData, MenuTypes } from "./NavigationMenuItem"; import { useCallback } from "react"; import { ExplorerURLParams } from "../Explorer/helpers"; +import { getExportAppAPIRoute } from "constants/ApiConstants"; type NavigationMenuDataProps = ThemeProp & { applicationId: string | undefined; @@ -152,6 +153,13 @@ export const GetNavigationMenuData = ({ }, ], }, + { + text: "Export Application", + onClick: () => + applicationId && openExternalLink(getExportAppAPIRoute(applicationId)), + type: MenuTypes.MENU, + isVisible: isApplicationIdPresent, + }, { text: "Delete Application", confirmText: "Are you sure?",