diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..dc31c684e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "memphis", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{} diff --git a/ui_src/package-lock.json b/ui_src/package-lock.json index aee69dfe0..44fa2cc85 100644 --- a/ui_src/package-lock.json +++ b/ui_src/package-lock.json @@ -110,6 +110,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -1525,6 +1526,7 @@ "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1533,6 +1535,7 @@ "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -1626,6 +1629,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -1751,6 +1755,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -1823,6 +1828,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -1873,6 +1879,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -1895,6 +1902,7 @@ "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.2", @@ -9465,6 +9473,7 @@ "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -9645,6 +9654,7 @@ "version": "1.0.30001549", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -10232,7 +10242,8 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.5.0", @@ -11635,7 +11646,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.556", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.556.tgz", - "integrity": "sha512-6RPN0hHfzDU8D56E72YkDvnLw5Cj2NMXZGg3UkgyoHxjVhG99KZpsKgBWMmTy0Ei89xwan+rbRsVB9yzATmYzQ==" + "integrity": "sha512-6RPN0hHfzDU8D56E72YkDvnLw5Cj2NMXZGg3UkgyoHxjVhG99KZpsKgBWMmTy0Ei89xwan+rbRsVB9yzATmYzQ==", + "dev": true }, "node_modules/element-resize-event": { "version": "3.0.6", @@ -11975,6 +11987,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -13802,6 +13815,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -19018,6 +19032,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -19730,6 +19745,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -21233,7 +21249,8 @@ "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -27518,6 +27535,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -29477,20 +29495,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/typewise": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", @@ -29811,6 +29815,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -31067,7 +31072,8 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", diff --git a/ui_src/src/App.js b/ui_src/src/App.js index 6a564f62a..b1a346550 100644 --- a/ui_src/src/App.js +++ b/ui_src/src/App.js @@ -15,7 +15,6 @@ import 'App.scss'; import { Switch, Route, withRouter } from 'react-router-dom'; import React, { useCallback, useContext, useEffect, useRef, useState } from 'react'; import { JSONCodec, StringCodec, connect } from 'nats.ws'; -import { useStiggContext } from '@stigg/react-sdk'; import { useMediaQuery } from 'react-responsive'; import { useHistory } from 'react-router-dom'; import { message, notification } from 'antd'; @@ -27,18 +26,16 @@ import { LOCAL_STORAGE_INTERNAL_WS_PASS, LOCAL_STORAGE_CONNECTION_TOKEN, LOCAL_STORAGE_TOKEN, - LOCAL_STORAGE_USER_PASS_BASED_AUTH, - USER_IMAGE, - LOCAL_STORAGE_PLAN + LOCAL_STORAGE_USER_PASS_BASED_AUTH } from 'const/localStorageConsts'; -import { CLOUD_URL, HANDLE_REFRESH_INTERVAL, WS_PREFIX } from 'config'; -import { isCheckoutCompletedTrue, isCloud } from 'services/valueConvertor'; +import { HANDLE_REFRESH_INTERVAL, WS_PREFIX } from 'config'; +import { isCheckoutCompletedTrue } from 'services/valueConvertor'; import { ReactComponent as InfoNotificationIcon } from 'assets/images/infoNotificationIcon.svg'; import { handleRefreshTokenRequest, httpRequest } from 'services/http'; import { ReactComponent as RedirectIcon } from 'assets/images/redirectIcon.svg'; import { ReactComponent as SuccessIcon } from 'assets/images/successIcon.svg'; import { ReactComponent as CloseIcon } from 'assets/images/closeNotification.svg'; -import { showMessages, useGetAllowedActions } from 'services/genericServices'; +import { showMessages } from 'services/genericServices'; import StationOverview from 'domain/stationOverview'; import { ReactComponent as ErrorIcon } from 'assets/images/errorIcon.svg'; import MessageJourney from 'domain/messageJourney'; @@ -52,21 +49,18 @@ import PrivateRoute from 'PrivateRoute'; import AuthService from 'services/auth'; import Overview from 'domain/overview'; import Loader from 'components/loader'; -import Functions from 'domain/functions'; import { Context } from 'hooks/store'; import pathDomains from 'router'; import Users from 'domain/users'; -import { planType } from "const/globalConst"; +import { planType } from 'const/globalConst'; let SysLogs = undefined; let Login = undefined; let Signup = undefined; -if (!isCloud()) { - SysLogs = require('domain/sysLogs').default; - Login = require('domain/login').default; - Signup = require('domain/signup').default; -} +SysLogs = require('domain/sysLogs').default; +Login = require('domain/login').default; +Signup = require('domain/signup').default; const App = withRouter(() => { const [state, dispatch] = useContext(Context); @@ -76,69 +70,20 @@ const App = withRouter(() => { const urlParams = new URLSearchParams(window.location.search); const firebase_id_token = urlParams.get('firebase_id_token'); const firebase_organization_id = urlParams.get('firebase_organization_id'); - const [cloudLogedIn, setCloudLogedIn] = useState(isCloud() ? false : true); - const [refreshPlan, setRefreshPlan] = useState(isCloud() ? true : false); + const [cloudLogedIn, setCloudLogedIn] = useState(true); + const [refreshPlan, setRefreshPlan] = useState(false); const [persistedNotifications, setPersistedNotifications] = useState(() => { const storedNotifications = JSON.parse(localStorage.getItem('persistedNotifications')); return storedNotifications || []; }); const [displayedNotifications, setDisplayedNotifications] = useState([]); const [systemMessage, setSystemMessage] = useState([]); - const { stigg } = isCloud() && useStiggContext(); - const getAllowedActions = useGetAllowedActions(); const stateRef = useRef([]); stateRef.current = [cloudLogedIn, persistedNotifications]; - const handleLoginWithToken = async () => { - try { - const data = await httpRequest('POST', ApiEndpoints.LOGIN, { firebase_id_token, firebase_organization_id }, {}, {}, false); - if (data) { - stigg.setCustomerId(data.account_name); - localStorage.setItem(USER_IMAGE, data.user_image); - AuthService.saveToLocalStorage(data); - dispatch({ type: 'SET_USER_DATA', payload: data }); - try { - let wsHost = localStorage.getItem(LOCAL_STORAGE_WS_HOST); - wsHost = `${WS_PREFIX}://${wsHost}`; - let conn; - if (localStorage.getItem(LOCAL_STORAGE_USER_PASS_BASED_AUTH) === 'true') { - const account_id = localStorage.getItem(LOCAL_STORAGE_ACCOUNT_ID); - const internal_ws_pass = localStorage.getItem(LOCAL_STORAGE_INTERNAL_WS_PASS); - conn = await connect({ - servers: [wsHost], - user: '$memphis_user$' + account_id, - pass: internal_ws_pass, - timeout: '5000' - }); - } else { - const connection_token = localStorage.getItem(LOCAL_STORAGE_CONNECTION_TOKEN); - conn = await connect({ - servers: [wsHost], - token: '::' + connection_token, - timeout: '5000' - }); - } - dispatch({ type: 'SET_SOCKET_DETAILS', payload: conn }); - } catch (error) { - throw new Error(error); - } - } - history.push('/overview'); - setCloudLogedIn(true); - } catch (error) { - setCloudLogedIn(true); - console.log(error); - } - }; - useEffect(() => { - if (isCloud() && firebase_id_token) { - const fetchData = async () => { - await handleLoginWithToken(); - }; - fetchData(); - } else setCloudLogedIn(true); + setCloudLogedIn(true); }, []); useEffect(() => { @@ -161,8 +106,6 @@ const App = withRouter(() => { } else if (localStorage.getItem(LOCAL_STORAGE_TOKEN)) { const handleRefreshData = await handleRefreshTokenRequest(); dispatch({ type: 'SET_USER_DATA', payload: handleRefreshData }); - isCloud() && stigg.setCustomerId(handleRefreshData.account_name); - isCloud() && localStorage.setItem(LOCAL_STORAGE_PLAN, handleRefreshData.plan); if (handleRefreshData !== '') { if (firstTime) { try { @@ -193,9 +136,7 @@ const App = withRouter(() => { } return true; } - } else { - isCloud() ? window.location.replace(CLOUD_URL) : history.push(pathDomains.signup); - } + } else history.push(pathDomains.signup); }, []); const handleUpdatePlan = async () => { @@ -204,7 +145,6 @@ const App = withRouter(() => { dispatch({ type: 'SET_ENTITLEMENTS', payload: data?.entitelments }); dispatch({ type: 'SET_PLAN_TYPE', payload: data.plan === planType.FREE }); setRefreshPlan(false); - await getAllowedActions(); showMessages('success', 'Your plan has been successfully updated.'); } catch (error) { setRefreshPlan(false); @@ -382,335 +322,157 @@ const App = withRouter(() => { {systemMessage?.length > 0 && displaySystemMessage()}
{' '} - {!authCheck && - cloudLogedIn && - !refreshPlan && - (!isCloud() ? ( - - - - - -
- } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - }>} /> - }>} /> - }>} - /> - }>} - /> - - - - } - > - } - /> - - - - - ) : ( - - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - {/* - - - } - > - } - /> */} - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - - - - } - > - } - /> - }>} /> - }>} /> - }>} - /> - }>} /> - }>} /> - }>} - /> + {!authCheck && cloudLogedIn && !refreshPlan && ( + + + + + + + } + > + } + /> + + + + } + > + } + /> + + + + } + > + } + /> + + + + } + > + } + /> + + + + } + > + } + /> + + + + } + > + } + /> + + + + } + > + } + /> - - - - } - > - } - /> - - - - - ))} + + + + } + > + } + /> + + + + } + > + } + /> + }>} /> + }>} /> + }>} + /> + }>} + /> + + + + } + > + } + /> + + + + + )} ); diff --git a/ui_src/src/PrivateRoute.js b/ui_src/src/PrivateRoute.js index 25a6bd9b7..0a47e8e30 100644 --- a/ui_src/src/PrivateRoute.js +++ b/ui_src/src/PrivateRoute.js @@ -14,22 +14,13 @@ import React from 'react'; import { Route, Redirect } from 'react-router-dom'; import AuthService from 'services/auth'; -import { isCloud } from 'services/valueConvertor'; -import { CLOUD_URL } from 'config'; import pathDomains from 'router'; function PrivateRoute(props) { const { component: Component, ...rest } = props; if (AuthService.isValidToken()) { return Component} />; - } else { - if (isCloud()) { - AuthService.clearLocalStorage(); - window.location.replace(CLOUD_URL); - } else { - return ; - } - } + } else return ; } export default PrivateRoute; diff --git a/ui_src/src/components/Tabs/index.js b/ui_src/src/components/Tabs/index.js index 13c63c5e0..0adee9ccb 100644 --- a/ui_src/src/components/Tabs/index.js +++ b/ui_src/src/components/Tabs/index.js @@ -22,7 +22,6 @@ import React from 'react'; import TooltipComponent from 'components/tooltip/tooltip'; import CheckboxComponent from 'components/checkBox'; import { PriorityHighRounded } from '@material-ui/icons'; -import CloudOnly from 'components/cloudOnly'; const CustomTabs = ({ tabs, onChange, value, disabled, length, tooltip, icon = false, checkbox = false, defaultActiveKey, tabsCounter, icons }) => { return ( @@ -39,10 +38,7 @@ const CustomTabs = ({ tabs, onChange, value, disabled, length, tooltip, icon = f {icons && icons[index] && !icon && icons[index]} {checkbox && } - <> - {`${tab?.name || tab} ${tabsCounter ? `(${tabsCounter[index]})` : ''} `} - {tab?.cloudOnly && } - + <>{`${tab?.name || tab} ${tabsCounter ? `(${tabsCounter[index]})` : ''} `} {length && length[index] && icon && (
diff --git a/ui_src/src/components/cloudModal/index.js b/ui_src/src/components/cloudModal/index.js deleted file mode 100644 index ab7c09a20..000000000 --- a/ui_src/src/components/cloudModal/index.js +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2022-2023 The Memphis.dev Authors -// Licensed under the Memphis Business Source License 1.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// Changed License: [Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0), as published by the Apache Foundation. -// -// https://github.com/memphisdev/memphis/blob/master/LICENSE -// -// Additional Use Grant: You may make use of the Licensed Work (i) only as part of your own product or service, provided it is not a message broker or a message queue product or service; and (ii) provided that you do not use, provide, distribute, or make available the Licensed Work as a Service. -// A "Service" is a commercial offering, product, hosted, or managed service, that allows third parties (other than your own employees and contractors acting on your behalf) to access and/or use the Licensed Work or a substantial set of the features or functionality of the Licensed Work to third parties as a software-as-a-service, platform-as-a-service, infrastructure-as-a-service or other similar services that compete with Licensor products or services. - -import './style.scss'; - -import React from 'react'; -import { ReactComponent as FunctionIntegrateIcon } from 'assets/images/functionIntegrate.svg'; -import BundleBanner from 'assets/images/banners/bundle1.webp'; -import CloudBanner from 'assets/images/banners/cloud2.webp'; -import FunctionsBanner from 'assets/images/banners/function3.webp'; -import UpgradeBanner from 'assets/images/banners/upgrade4.webp'; -import UpgradePlans from 'components/upgradePlans'; -import Modal from 'components/modal'; -import Button from 'components/button'; -import { sendTrace } from 'services/genericServices'; - -const CloudModal = ({ type, open, handleClose }) => { - const content = { - bundle: { - title: , - subtitle: ( - <> - Get Your Open-Source Today! - - ), - banner: BundleBanner, - leftBtn: 'Learn More', - leftBtnLink: 'https://memphis.dev/open-source-support-bundle/', - rightBtn: 'Book a Call', - rightBtnLink: 'https://meetings.hubspot.com/yaniv-benhemo' - }, - cloud: { - title: , - subtitle: 'Embrace serverless, enjoy peace of mind, and experience enhanced resilience.', - banner: CloudBanner, - leftBtn: 'Learn More', - leftBtnLink: 'https://memphis.dev/memphis-dev-cloud/', - rightBtn: 'Create a free account', - rightBtnLink: 'https://cloud.memphis.dev/' - }, - upgrade: { - title: ( - <> - - - - ), - subtitle: 'To Unlock More Features And Enhance Your Experience!', - banner: UpgradeBanner, - leftBtn: 'Chat With Your Account Manager', - leftBtnLink: 'https://meetings.hubspot.com/yaniv-benhemo/upgrade-call', - rightBtn: 'Upgrade Now', - rightBtnLink: '' - }, - functions: { - title: ( - <> - - - - ), - subtitle: 'Discover A Faster And Smarter Way To Do Event-driven And Stream Processing', - banner: FunctionsBanner, - leftBtn: 'Learn More', - leftBtnLink: 'https://functions.memphis.dev/', - rightBtn: 'Book a demo', - rightBtnLink: 'https://meetings.hubspot.com/yaniv-benhemo/demo-for-memphis-functions' - } - }; - - return ( - - -
- -
- {content[type]?.title} - -
- } - displayButtons={false} - width="560px" - height="390px" - clickOutside={handleClose} - open={open} - className="cloud-modal" - > -
- banner -
- -