diff --git a/frontend/src/AppRoutes/Private.tsx b/frontend/src/AppRoutes/Private.tsx index c348f38a63..de2e772254 100644 --- a/frontend/src/AppRoutes/Private.tsx +++ b/frontend/src/AppRoutes/Private.tsx @@ -4,6 +4,7 @@ import getOrgUser from 'api/user/getOrgUser'; import { FeatureKeys } from 'constants/features'; import { LOCALSTORAGE } from 'constants/localStorage'; import ROUTES from 'constants/routes'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import history from 'lib/history'; import { isEmpty } from 'lodash-es'; import { useAppContext } from 'providers/App/App'; @@ -13,7 +14,6 @@ import { matchPath, useLocation } from 'react-router-dom'; import { LicenseState, LicenseStatus } from 'types/api/licensesV3/getActive'; import { Organization } from 'types/api/user/getOrganization'; import { USER_ROLES } from 'types/roles'; -import { isCloudUser } from 'utils/app'; import { routePermission } from 'utils/permission'; import routes, { @@ -55,7 +55,7 @@ function PrivateRoute({ children }: PrivateRouteProps): JSX.Element { ); const isOldRoute = oldRoutes.indexOf(pathname) > -1; const currentRoute = mapRoutes.get('current'); - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const [orgData, setOrgData] = useState(undefined); diff --git a/frontend/src/AppRoutes/index.tsx b/frontend/src/AppRoutes/index.tsx index da5bb898e2..2727ce88ea 100644 --- a/frontend/src/AppRoutes/index.tsx +++ b/frontend/src/AppRoutes/index.tsx @@ -10,6 +10,7 @@ import AppLayout from 'container/AppLayout'; import useAnalytics from 'hooks/analytics/useAnalytics'; import { KeyboardHotkeysProvider } from 'hooks/hotkeys/useKeyboardHotkeys'; import { useThemeConfig } from 'hooks/useDarkMode'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { LICENSE_PLAN_KEY } from 'hooks/useLicense'; import { NotificationProvider } from 'hooks/useNotifications'; import { ResourceProvider } from 'hooks/useResourceAttribute'; @@ -24,7 +25,7 @@ import { QueryBuilderProvider } from 'providers/QueryBuilder'; import { Suspense, useCallback, useEffect, useState } from 'react'; import { Route, Router, Switch } from 'react-router-dom'; import { CompatRouter } from 'react-router-dom-v5-compat'; -import { extractDomain, isCloudUser, isEECloudUser } from 'utils/app'; +import { extractDomain } from 'utils/app'; import PrivateRoute from './Private'; import defaultRoutes, { @@ -54,7 +55,10 @@ function App(): JSX.Element { const { hostname, pathname } = window.location; - const isCloudUserVal = isCloudUser(); + const { + isCloudUser: isCloudUserVal, + isEECloudUser: isEECloudUserVal, + } = useGetTenantLicense(); const enableAnalytics = useCallback( (user: IUser): void => { @@ -150,7 +154,7 @@ function App(): JSX.Element { let updatedRoutes = defaultRoutes; // if the user is a cloud user - if (isCloudUserVal || isEECloudUser()) { + if (isCloudUserVal || isEECloudUserVal) { // if the user is on basic plan then remove billing if (isOnBasicPlan) { updatedRoutes = updatedRoutes.filter( @@ -175,6 +179,7 @@ function App(): JSX.Element { isCloudUserVal, isFetchingLicenses, isFetchingUser, + isEECloudUserVal, ]); useEffect(() => { diff --git a/frontend/src/components/LaunchChatSupport/LaunchChatSupport.tsx b/frontend/src/components/LaunchChatSupport/LaunchChatSupport.tsx index d71ba59a95..53f5fa7a24 100644 --- a/frontend/src/components/LaunchChatSupport/LaunchChatSupport.tsx +++ b/frontend/src/components/LaunchChatSupport/LaunchChatSupport.tsx @@ -6,6 +6,7 @@ import logEvent from 'api/common/logEvent'; import cx from 'classnames'; import { SOMETHING_WENT_WRONG } from 'constants/api'; import { FeatureKeys } from 'constants/features'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import { defaultTo } from 'lodash-es'; import { CreditCard, HelpCircle, X } from 'lucide-react'; @@ -16,7 +17,6 @@ import { useLocation } from 'react-router-dom'; import { ErrorResponse, SuccessResponse } from 'types/api'; import { CheckoutSuccessPayloadProps } from 'types/api/billing/checkout'; import { License } from 'types/api/licenses/def'; -import { isCloudUser } from 'utils/app'; export interface LaunchChatSupportProps { eventName: string; @@ -38,7 +38,7 @@ function LaunchChatSupport({ onHoverText = '', intercomMessageDisabled = false, }: LaunchChatSupportProps): JSX.Element | null { - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const { notifications } = useNotifications(); const { licenses, @@ -77,7 +77,6 @@ function LaunchChatSupport({ ) { let isChatSupportEnabled = false; let isPremiumSupportEnabled = false; - const isCloudUserVal = isCloudUser(); if (featureFlags && featureFlags.length > 0) { isChatSupportEnabled = featureFlags.find((flag) => flag.name === FeatureKeys.CHAT_SUPPORT) @@ -99,6 +98,7 @@ function LaunchChatSupport({ }, [ featureFlags, featureFlagsFetchError, + isCloudUserVal, isFetchingFeatureFlags, isLoggedIn, licenses, diff --git a/frontend/src/components/MessagingQueueHealthCheck/AttributeCheckList.tsx b/frontend/src/components/MessagingQueueHealthCheck/AttributeCheckList.tsx index 8ab647ef34..bf4c411161 100644 --- a/frontend/src/components/MessagingQueueHealthCheck/AttributeCheckList.tsx +++ b/frontend/src/components/MessagingQueueHealthCheck/AttributeCheckList.tsx @@ -16,6 +16,7 @@ import { OnboardingStatusResponse } from 'api/messagingQueues/onboarding/getOnbo import { QueryParams } from 'constants/query'; import ROUTES from 'constants/routes'; import { History } from 'history'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { Bolt, Check, OctagonAlert, X } from 'lucide-react'; import { KAFKA_SETUP_DOC_LINK, @@ -23,7 +24,6 @@ import { } from 'pages/MessagingQueues/MessagingQueuesUtils'; import { ReactNode, useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; -import { isCloudUser } from 'utils/app'; import { v4 as uuid } from 'uuid'; interface AttributeCheckListProps { @@ -181,7 +181,7 @@ function AttributeCheckList({ const handleFilterChange = (value: AttributesFilters): void => { setFilter(value); }; - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const history = useHistory(); useEffect(() => { diff --git a/frontend/src/container/AppLayout/index.tsx b/frontend/src/container/AppLayout/index.tsx index feb354245c..1736d43b41 100644 --- a/frontend/src/container/AppLayout/index.tsx +++ b/frontend/src/container/AppLayout/index.tsx @@ -23,6 +23,7 @@ import SideNav from 'container/SideNav'; import TopNav from 'container/TopNav'; import dayjs from 'dayjs'; import { useIsDarkMode } from 'hooks/useDarkMode'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import history from 'lib/history'; import { isNull } from 'lodash-es'; @@ -54,7 +55,6 @@ import { ErrorResponse, SuccessResponse } from 'types/api'; import { CheckoutSuccessPayloadProps } from 'types/api/billing/checkout'; import { LicenseEvent } from 'types/api/licensesV3/getActive'; import { USER_ROLES } from 'types/roles'; -import { isCloudUser } from 'utils/app'; import { eventEmitter } from 'utils/getEventEmitter'; import { getFormattedDate, @@ -122,6 +122,8 @@ function AppLayout(props: AppLayoutProps): JSX.Element { const { pathname } = useLocation(); const { t } = useTranslation(['titles']); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const [getUserVersionResponse, getUserLatestVersionResponse] = useQueries([ { queryFn: getUserVersion, @@ -354,7 +356,6 @@ function AppLayout(props: AppLayoutProps): JSX.Element { ) { let isChatSupportEnabled = false; let isPremiumSupportEnabled = false; - const isCloudUserVal = isCloudUser(); if (featureFlags && featureFlags.length > 0) { isChatSupportEnabled = featureFlags.find((flag) => flag.name === FeatureKeys.CHAT_SUPPORT) @@ -376,6 +377,7 @@ function AppLayout(props: AppLayoutProps): JSX.Element { }, [ featureFlags, featureFlagsFetchError, + isCloudUserVal, isFetchingFeatureFlags, isLoggedIn, licenses, diff --git a/frontend/src/container/BillingContainer/BillingContainer.tsx b/frontend/src/container/BillingContainer/BillingContainer.tsx index 291528cfc5..5ada2e8eff 100644 --- a/frontend/src/container/BillingContainer/BillingContainer.tsx +++ b/frontend/src/container/BillingContainer/BillingContainer.tsx @@ -24,6 +24,7 @@ import Spinner from 'components/Spinner'; import { SOMETHING_WENT_WRONG } from 'constants/api'; import { REACT_QUERY_KEY } from 'constants/reactQueryKeys'; import useAxiosError from 'hooks/useAxiosError'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import { isEmpty, pick } from 'lodash-es'; import { useAppContext } from 'providers/App/App'; @@ -33,7 +34,6 @@ import { useMutation, useQuery } from 'react-query'; import { ErrorResponse, SuccessResponse } from 'types/api'; import { CheckoutSuccessPayloadProps } from 'types/api/billing/checkout'; import { License } from 'types/api/licenses/def'; -import { isCloudUser } from 'utils/app'; import { getFormattedDate, getRemainingDays } from 'utils/timeUtils'; import { BillingUsageGraph } from './BillingUsageGraph/BillingUsageGraph'; @@ -145,7 +145,7 @@ export default function BillingContainer(): JSX.Element { const handleError = useAxiosError(); - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const processUsageData = useCallback( (data: any): void => { diff --git a/frontend/src/container/GeneralSettings/GeneralSettings.tsx b/frontend/src/container/GeneralSettings/GeneralSettings.tsx index 42cc6ddbcd..f63a7feb1b 100644 --- a/frontend/src/container/GeneralSettings/GeneralSettings.tsx +++ b/frontend/src/container/GeneralSettings/GeneralSettings.tsx @@ -5,6 +5,7 @@ import setRetentionApi from 'api/settings/setRetention'; import TextToolTip from 'components/TextToolTip'; import GeneralSettingsCloud from 'container/GeneralSettingsCloud'; import useComponentPermission from 'hooks/useComponentPermission'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import find from 'lodash-es/find'; import { useAppContext } from 'providers/App/App'; @@ -23,7 +24,6 @@ import { PayloadPropsMetrics as GetRetentionPeriodMetricsPayload, PayloadPropsTraces as GetRetentionPeriodTracesPayload, } from 'types/api/settings/getRetention'; -import { isCloudUser } from 'utils/app'; import Retention from './Retention'; import StatusMessage from './StatusMessage'; @@ -394,7 +394,7 @@ function GeneralSettings({ onModalToggleHandler(type); }; - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const renderConfig = [ { diff --git a/frontend/src/container/GeneralSettings/Retention.tsx b/frontend/src/container/GeneralSettings/Retention.tsx index 172d1ee0c6..75e0d63a3e 100644 --- a/frontend/src/container/GeneralSettings/Retention.tsx +++ b/frontend/src/container/GeneralSettings/Retention.tsx @@ -1,4 +1,5 @@ import { Col, Row, Select } from 'antd'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { find } from 'lodash-es'; import { ChangeEvent, @@ -8,7 +9,6 @@ import { useRef, useState, } from 'react'; -import { isCloudUser } from 'utils/app'; import { Input, @@ -39,6 +39,9 @@ function Retention({ initialValue, ); const interacted = useRef(false); + + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + useEffect(() => { if (!interacted.current) setSelectedValue(initialValue); }, [initialValue]); @@ -91,8 +94,6 @@ function Retention({ return null; } - const isCloudUserVal = isCloudUser(); - return ( diff --git a/frontend/src/container/ListOfDashboard/DashboardsList.tsx b/frontend/src/container/ListOfDashboard/DashboardsList.tsx index 6cd1468dcf..96fdff7116 100644 --- a/frontend/src/container/ListOfDashboard/DashboardsList.tsx +++ b/frontend/src/container/ListOfDashboard/DashboardsList.tsx @@ -34,6 +34,7 @@ import { Base64Icons } from 'container/NewDashboard/DashboardSettings/General/ut import dayjs from 'dayjs'; import { useGetAllDashboard } from 'hooks/dashboard/useGetAllDashboard'; import useComponentPermission from 'hooks/useComponentPermission'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import { useSafeNavigate } from 'hooks/useSafeNavigate'; import { get, isEmpty, isUndefined } from 'lodash-es'; @@ -82,7 +83,6 @@ import { WidgetRow, Widgets, } from 'types/api/dashboard/getAll'; -import { isCloudUser } from 'utils/app'; import DashboardTemplatesModal from './DashboardTemplates/DashboardTemplatesModal'; import ImportJSON from './ImportJSON'; @@ -111,6 +111,8 @@ function DashboardsList(): JSX.Element { setListSortOrder: setSortOrder, } = useDashboard(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const [searchString, setSearchString] = useState( sortOrder.search || '', ); @@ -694,7 +696,7 @@ function DashboardsList(): JSX.Element { Create and manage dashboards for your workspace. - {isCloudUser() && ( + {isCloudUserVal && (
@@ -735,7 +737,7 @@ function DashboardsList(): JSX.Element { diff --git a/frontend/src/container/LogsError/LogsError.tsx b/frontend/src/container/LogsError/LogsError.tsx index 6143674c6b..d0f058cc3e 100644 --- a/frontend/src/container/LogsError/LogsError.tsx +++ b/frontend/src/container/LogsError/LogsError.tsx @@ -3,13 +3,15 @@ import './LogsError.styles.scss'; import { Typography } from 'antd'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import history from 'lib/history'; import { ArrowRight } from 'lucide-react'; -import { isCloudUser } from 'utils/app'; export default function LogsError(): JSX.Element { + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const handleContactSupport = (): void => { - if (isCloudUser()) { + if (isCloudUserVal) { history.push('/support'); } else { window.open('https://signoz.io/slack', '_blank'); diff --git a/frontend/src/container/NoLogs/NoLogs.tsx b/frontend/src/container/NoLogs/NoLogs.tsx index c4832e8a0e..09fd93f939 100644 --- a/frontend/src/container/NoLogs/NoLogs.tsx +++ b/frontend/src/container/NoLogs/NoLogs.tsx @@ -3,10 +3,10 @@ import './NoLogs.styles.scss'; import { Typography } from 'antd'; import logEvent from 'api/common/logEvent'; import ROUTES from 'constants/routes'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import history from 'lib/history'; import { ArrowUpRight } from 'lucide-react'; import { DataSource } from 'types/common/queryBuilder'; -import { isCloudUser } from 'utils/app'; import DOCLINKS from 'utils/docLinks'; export default function NoLogs({ @@ -14,14 +14,15 @@ export default function NoLogs({ }: { dataSource: DataSource; }): JSX.Element { - const cloudUser = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const handleLinkClick = ( e: React.MouseEvent, ): void => { e.preventDefault(); e.stopPropagation(); - if (cloudUser) { + if (isCloudUserVal) { if (dataSource === DataSource.TRACES) { logEvent('Traces Explorer: Navigate to onboarding', {}); } else if (dataSource === DataSource.LOGS) { diff --git a/frontend/src/container/ServiceApplication/ServiceMetrics/ServiceMetricTable.tsx b/frontend/src/container/ServiceApplication/ServiceMetrics/ServiceMetricTable.tsx index 20abe1490e..9541ee0936 100644 --- a/frontend/src/container/ServiceApplication/ServiceMetrics/ServiceMetricTable.tsx +++ b/frontend/src/container/ServiceApplication/ServiceMetrics/ServiceMetricTable.tsx @@ -5,6 +5,7 @@ import { ENTITY_VERSION_V4 } from 'constants/app'; import { MAX_RPS_LIMIT } from 'constants/global'; import ResourceAttributesFilter from 'container/ResourceAttributesFilter'; import { useGetQueriesRange } from 'hooks/queryBuilder/useGetQueriesRange'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useNotifications } from 'hooks/useNotifications'; import { useAppContext } from 'providers/App/App'; import { useEffect, useMemo, useState } from 'react'; @@ -14,7 +15,6 @@ import { useLocation } from 'react-router-dom'; import { AppState } from 'store/reducers'; import { ServicesList } from 'types/api/metrics/getService'; import { GlobalReducer } from 'types/reducer/globalTime'; -import { isCloudUser } from 'utils/app'; import { getTotalRPS } from 'utils/services'; import { getColumns } from '../Columns/ServiceColumn'; @@ -34,7 +34,7 @@ function ServiceMetricTable({ const { t: getText } = useTranslation(['services']); const { licenses, isFetchingLicenses } = useAppContext(); - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const queries = useGetQueriesRange(queryRangeRequestData, ENTITY_VERSION_V4, { queryKey: [ diff --git a/frontend/src/container/ServiceApplication/ServiceTraces/ServiceTracesTable.tsx b/frontend/src/container/ServiceApplication/ServiceTraces/ServiceTracesTable.tsx index 7c4f2b5f2a..fcc4c78933 100644 --- a/frontend/src/container/ServiceApplication/ServiceTraces/ServiceTracesTable.tsx +++ b/frontend/src/container/ServiceApplication/ServiceTraces/ServiceTracesTable.tsx @@ -3,11 +3,11 @@ import { Flex, Typography } from 'antd'; import { ResizeTable } from 'components/ResizeTable'; import { MAX_RPS_LIMIT } from 'constants/global'; import ResourceAttributesFilter from 'container/ResourceAttributesFilter'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useAppContext } from 'providers/App/App'; import { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useLocation } from 'react-router-dom'; -import { isCloudUser } from 'utils/app'; import { getTotalRPS } from 'utils/services'; import { getColumns } from '../Columns/ServiceColumn'; @@ -22,7 +22,7 @@ function ServiceTraceTable({ const { t: getText } = useTranslation(['services']); const { licenses, isFetchingLicenses } = useAppContext(); - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const tableColumns = useMemo(() => getColumns(search, false), [search]); useEffect(() => { diff --git a/frontend/src/container/SideNav/SideNav.tsx b/frontend/src/container/SideNav/SideNav.tsx index ef21822012..8c1305c970 100644 --- a/frontend/src/container/SideNav/SideNav.tsx +++ b/frontend/src/container/SideNav/SideNav.tsx @@ -11,6 +11,7 @@ import ROUTES from 'constants/routes'; import { GlobalShortcuts } from 'constants/shortcuts/globalShortcuts'; import { useKeyboardHotkeys } from 'hooks/hotkeys/useKeyboardHotkeys'; import useComponentPermission from 'hooks/useComponentPermission'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { LICENSE_PLAN_KEY, LICENSE_PLAN_STATUS } from 'hooks/useLicense'; import history from 'lib/history'; import { @@ -28,7 +29,7 @@ import { AppState } from 'store/reducers'; import { License } from 'types/api/licenses/def'; import AppReducer from 'types/reducer/app'; import { USER_ROLES } from 'types/roles'; -import { checkVersionState, isCloudUser, isEECloudUser } from 'utils/app'; +import { checkVersionState } from 'utils/app'; import { routeConfig } from './config'; import { getQueryString } from './helper'; @@ -86,7 +87,10 @@ function SideNav(): JSX.Element { const { registerShortcut, deregisterShortcut } = useKeyboardHotkeys(); - const isCloudUserVal = isCloudUser(); + const { + isCloudUser: isCloudUserVal, + isEECloudUser: isEECloudUserVal, + } = useGetTenantLicense(); const { t } = useTranslation(''); @@ -275,7 +279,7 @@ function SideNav(): JSX.Element { let updatedUserManagementItems: UserManagementMenuItems[] = [ manageLicenseMenuItem, ]; - if (isCloudUserVal || isEECloudUser()) { + if (isCloudUserVal || isEECloudUserVal) { const isOnboardingEnabled = featureFlags?.find((feature) => feature.name === FeatureKeys.ONBOARDING) ?.active || false; @@ -330,6 +334,7 @@ function SideNav(): JSX.Element { featureFlags, isCloudUserVal, isCurrentVersionError, + isEECloudUserVal, isLatestVersion, licenses?.licenses, onClickVersionHandler, diff --git a/frontend/src/hooks/useGetTenantLicense.ts b/frontend/src/hooks/useGetTenantLicense.ts new file mode 100644 index 0000000000..7a7f188dc0 --- /dev/null +++ b/frontend/src/hooks/useGetTenantLicense.ts @@ -0,0 +1,15 @@ +import { useAppContext } from 'providers/App/App'; +import { LicensePlatform } from 'types/api/licensesV3/getActive'; + +export const useGetTenantLicense = (): { + isCloudUser: boolean; + isEECloudUser: boolean; +} => { + const { activeLicenseV3 } = useAppContext(); + + return { + isCloudUser: activeLicenseV3?.platform === LicensePlatform.CLOUD || false, + isEECloudUser: + activeLicenseV3?.platform === LicensePlatform.SELF_HOSTED || false, + }; +}; diff --git a/frontend/src/pages/Integrations/IntegrationDetailPage/IntegrationDetailPage.tsx b/frontend/src/pages/Integrations/IntegrationDetailPage/IntegrationDetailPage.tsx index 7275c17faa..d97a54fd97 100644 --- a/frontend/src/pages/Integrations/IntegrationDetailPage/IntegrationDetailPage.tsx +++ b/frontend/src/pages/Integrations/IntegrationDetailPage/IntegrationDetailPage.tsx @@ -7,9 +7,9 @@ import { Color } from '@signozhq/design-tokens'; import { Button, Flex, Skeleton, Typography } from 'antd'; import { useGetIntegration } from 'hooks/Integrations/useGetIntegration'; import { useGetIntegrationStatus } from 'hooks/Integrations/useGetIntegrationStatus'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { defaultTo } from 'lodash-es'; import { ArrowLeft, MoveUpRight, RotateCw } from 'lucide-react'; -import { isCloudUser } from 'utils/app'; import { handleContactSupport } from '../utils'; import IntegrationDetailContent from './IntegrationDetailContent'; @@ -44,6 +44,8 @@ function IntegrationDetailPage(props: IntegrationDetailPageProps): JSX.Element { integrationId: selectedIntegration, }); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const { data: integrationStatus, isLoading: isStatusLoading, @@ -104,7 +106,7 @@ function IntegrationDetailPage(props: IntegrationDetailPageProps): JSX.Element {
handleContactSupport(isCloudUser())} + onClick={(): void => handleContactSupport(isCloudUserVal)} > Contact Support diff --git a/frontend/src/pages/Integrations/IntegrationsList.tsx b/frontend/src/pages/Integrations/IntegrationsList.tsx index 44e913165f..56d52c7d30 100644 --- a/frontend/src/pages/Integrations/IntegrationsList.tsx +++ b/frontend/src/pages/Integrations/IntegrationsList.tsx @@ -5,10 +5,10 @@ import './Integrations.styles.scss'; import { Color } from '@signozhq/design-tokens'; import { Button, List, Typography } from 'antd'; import { useGetAllIntegrations } from 'hooks/Integrations/useGetAllIntegrations'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { MoveUpRight, RotateCw } from 'lucide-react'; import { Dispatch, SetStateAction, useMemo } from 'react'; import { IntegrationsProps } from 'types/api/integrations/types'; -import { isCloudUser } from 'utils/app'; import { handleContactSupport, INTEGRATION_TYPES } from './utils'; @@ -44,6 +44,8 @@ function IntegrationsList(props: IntegrationsListProps): JSX.Element { refetch, } = useGetAllIntegrations(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + const filteredDataList = useMemo(() => { let integrationsList: IntegrationsProps[] = []; @@ -90,7 +92,7 @@ function IntegrationsList(props: IntegrationsListProps): JSX.Element {
handleContactSupport(isCloudUser())} + onClick={(): void => handleContactSupport(isCloudUserVal)} > Contact Support diff --git a/frontend/src/pages/MessagingQueues/MessagingQueues.tsx b/frontend/src/pages/MessagingQueues/MessagingQueues.tsx index a953a35616..70646230bc 100644 --- a/frontend/src/pages/MessagingQueues/MessagingQueues.tsx +++ b/frontend/src/pages/MessagingQueues/MessagingQueues.tsx @@ -8,10 +8,10 @@ import MessagingQueueHealthCheck from 'components/MessagingQueueHealthCheck/Mess import { QueryParams } from 'constants/query'; import ROUTES from 'constants/routes'; import DateTimeSelectionV2 from 'container/TopNav/DateTimeSelectionV2'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useHistory } from 'react-router-dom'; -import { isCloudUser } from 'utils/app'; import { KAFKA_SETUP_DOC_LINK, @@ -34,7 +34,7 @@ function MessagingQueues(): JSX.Element { ); }; - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); const getStartedRedirect = (link: string, sourceCard: string): void => { logEvent('Messaging Queues: Get started clicked', { diff --git a/frontend/src/pages/Settings/index.tsx b/frontend/src/pages/Settings/index.tsx index 164f260059..b6fc69d07d 100644 --- a/frontend/src/pages/Settings/index.tsx +++ b/frontend/src/pages/Settings/index.tsx @@ -1,6 +1,7 @@ import RouteTab from 'components/RouteTab'; import { FeatureKeys } from 'constants/features'; import useComponentPermission from 'hooks/useComponentPermission'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import history from 'lib/history'; import { useAppContext } from 'providers/App/App'; import { useMemo } from 'react'; @@ -12,6 +13,10 @@ import { getRoutes } from './utils'; function SettingsPage(): JSX.Element { const { pathname } = useLocation(); const { user, featureFlags, licenses } = useAppContext(); + const { + isCloudUser: isCloudAccount, + isEECloudUser: isEECloudAccount, + } = useGetTenantLicense(); const isWorkspaceBlocked = licenses?.workSpaceBlock || false; @@ -32,9 +37,19 @@ function SettingsPage(): JSX.Element { isCurrentOrgSettings, isGatewayEnabled, isWorkspaceBlocked, + isCloudAccount, + isEECloudAccount, t, ), - [user.role, isCurrentOrgSettings, isGatewayEnabled, isWorkspaceBlocked, t], + [ + user.role, + isCurrentOrgSettings, + isGatewayEnabled, + isWorkspaceBlocked, + isCloudAccount, + isEECloudAccount, + t, + ], ); return ; diff --git a/frontend/src/pages/Settings/utils.ts b/frontend/src/pages/Settings/utils.ts index c03568192a..e006e0f024 100644 --- a/frontend/src/pages/Settings/utils.ts +++ b/frontend/src/pages/Settings/utils.ts @@ -1,7 +1,6 @@ import { RouteTabProps } from 'components/RouteTab/types'; import { TFunction } from 'i18next'; import { ROLES, USER_ROLES } from 'types/roles'; -import { isCloudUser, isEECloudUser } from 'utils/app'; import { alertChannels, @@ -18,13 +17,12 @@ export const getRoutes = ( isCurrentOrgSettings: boolean, isGatewayEnabled: boolean, isWorkspaceBlocked: boolean, + isCloudAccount: boolean, + isEECloudAccount: boolean, t: TFunction, ): RouteTabProps['routes'] => { const settings = []; - const isCloudAccount = isCloudUser(); - const isEECloudAccount = isEECloudUser(); - const isAdmin = userRole === USER_ROLES.ADMIN; const isEditor = userRole === USER_ROLES.EDITOR; diff --git a/frontend/src/pages/TraceDetailV2/NoData/NoData.tsx b/frontend/src/pages/TraceDetailV2/NoData/NoData.tsx index 990981f521..09afcf4377 100644 --- a/frontend/src/pages/TraceDetailV2/NoData/NoData.tsx +++ b/frontend/src/pages/TraceDetailV2/NoData/NoData.tsx @@ -1,12 +1,13 @@ import './NoData.styles.scss'; import { Button, Typography } from 'antd'; +import { useGetTenantLicense } from 'hooks/useGetTenantLicense'; import { LifeBuoy, RefreshCw } from 'lucide-react'; import { handleContactSupport } from 'pages/Integrations/utils'; -import { isCloudUser } from 'utils/app'; function NoData(): JSX.Element { - const isCloudUserVal = isCloudUser(); + const { isCloudUser: isCloudUserVal } = useGetTenantLicense(); + return (
diff --git a/frontend/src/tests/test-utils.tsx b/frontend/src/tests/test-utils.tsx index b1423d7b3a..75772eb50b 100644 --- a/frontend/src/tests/test-utils.tsx +++ b/frontend/src/tests/test-utils.tsx @@ -16,6 +16,7 @@ import thunk from 'redux-thunk'; import store from 'store'; import { LicenseEvent, + LicensePlatform, LicenseState, LicenseStatus, } from 'types/api/licensesV3/getActive'; @@ -115,6 +116,7 @@ export function getAppContextMock( key: 'does-not-matter', state: LicenseState.ACTIVE, status: LicenseStatus.VALID, + platform: LicensePlatform.CLOUD, }, isFetchingActiveLicenseV3: false, activeLicenseV3FetchError: null, diff --git a/frontend/src/types/api/licensesV3/getActive.ts b/frontend/src/types/api/licensesV3/getActive.ts index 5e89b2a75e..94b5887891 100644 --- a/frontend/src/types/api/licensesV3/getActive.ts +++ b/frontend/src/types/api/licensesV3/getActive.ts @@ -13,6 +13,11 @@ export enum LicenseState { ACTIVE = 'ACTIVE', } +export enum LicensePlatform { + SELF_HOSTED = 'SELF_HOSTED', + CLOUD = 'CLOUD', +} + export type LicenseV3EventQueueResModel = { event: LicenseEvent; status: string; @@ -26,4 +31,5 @@ export type LicenseV3ResModel = { status: LicenseStatus; state: LicenseState; event_queue: LicenseV3EventQueueResModel; + platform: LicensePlatform; }; diff --git a/frontend/src/utils/app.ts b/frontend/src/utils/app.ts index b1e687cfee..d4227f4063 100644 --- a/frontend/src/utils/app.ts +++ b/frontend/src/utils/app.ts @@ -13,18 +13,6 @@ export function extractDomain(email: string): string { return emailParts[1]; } -export const isCloudUser = (): boolean => { - const { hostname } = window.location; - - return hostname?.endsWith('signoz.cloud'); -}; - -export const isEECloudUser = (): boolean => { - const { hostname } = window.location; - - return hostname?.endsWith('signoz.io'); -}; - export const checkVersionState = ( currentVersion: string, latestVersion: string,