diff --git a/packages/aesirx-bi-app/package.json b/packages/aesirx-bi-app/package.json
index f414cd69..41684398 100644
--- a/packages/aesirx-bi-app/package.json
+++ b/packages/aesirx-bi-app/package.json
@@ -1,6 +1,6 @@
{
"name": "aesirx-bi-app",
- "version": "2.8.0",
+ "version": "2.8.1",
"license": "GPL-3.0-only",
"author": "AesirX",
"main": "dist/index.js",
diff --git a/packages/aesirx-bi-app/src/containers/Dashboard/Dashboard.jsx b/packages/aesirx-bi-app/src/containers/Dashboard/Dashboard.jsx
index d1a5936d..b63b7229 100644
--- a/packages/aesirx-bi-app/src/containers/Dashboard/Dashboard.jsx
+++ b/packages/aesirx-bi-app/src/containers/Dashboard/Dashboard.jsx
@@ -190,11 +190,21 @@ const Dashboard = observer(
-
- Local
-
-
- Page
+ {this.props.integration && this.props.isFreemium ? (
+ <>>
+ ) : (
+
+ Local
+
+ )}
+
+
+ Page
+
@@ -207,17 +217,29 @@ const Dashboard = observer(
const urlParams = item?.url && new URL(item?.url);
return (
-
-
-
-
-
-
-
- UTM Value & Engagement Score
-
-
- {dataAttributeUtm?.list?.data && (
-
- )}
-
-
+ {props.integration && props.isFreemium ? (
+ <>>
+ ) : (
+ <>
+ UTM Value & Engagement Score
+
+
+ {dataAttributeUtm?.list?.data && (
+
+ )}
+
+
+ >
+ )}
List Campaign
{dataAttributeList?.toAttributeList()?.length && (
diff --git a/packages/aesirx-bi-app/src/containers/UTMTrackingPage/index.jsx b/packages/aesirx-bi-app/src/containers/UTMTrackingPage/index.jsx
index 5f612221..91c7fdf8 100644
--- a/packages/aesirx-bi-app/src/containers/UTMTrackingPage/index.jsx
+++ b/packages/aesirx-bi-app/src/containers/UTMTrackingPage/index.jsx
@@ -42,7 +42,7 @@ const UTMTrackingPage = observer(
);
}
render() {
- const { integration = false } = this.props;
+ const { integration = false, isFreemium = true } = this.props;
const { integrationLink, activeDomain } = this.biListViewModel;
const match = matchPath(history.location.pathname, {
@@ -67,6 +67,7 @@ const UTMTrackingPage = observer(
(this.componentRef = el)}
diff --git a/packages/aesirx-bi-app/src/containers/VisitorsPage/Visitors.jsx b/packages/aesirx-bi-app/src/containers/VisitorsPage/Visitors.jsx
index 21b4d088..192b34ac 100644
--- a/packages/aesirx-bi-app/src/containers/VisitorsPage/Visitors.jsx
+++ b/packages/aesirx-bi-app/src/containers/VisitorsPage/Visitors.jsx
@@ -201,61 +201,65 @@ const VisitorsPage = observer(
handleChangeLink={this.handleChangeLink}
{...this.props}
/>
-
-
-
{t('txt_user_experience')}
- {this.props.integration ? (
-
this.handleChangeLink(e, `/flow-list`)}
- className={'text-success me-2 text-nowrap fw-semibold'}
- >
- {t('txt_view_more')}
-
+ {this.props.integration && this.props.isFreemium ? (
+ <>>
+ ) : (
+
+
+
+ {this.visitorsListViewModel?.statusFlowList === PAGE_STATUS.LOADING ? (
+
+ ) : this.visitorsListViewModel?.flowListTableData?.list ? (
+
{
+ await this.visitorsListViewModel.handleFilterFlowList({ page: value });
+ }}
+ selectPageSize={async (value) => {
+ await this.visitorsListViewModel.handleFilterFlowList({
+ page: 1,
+ page_size: value,
+ });
+ }}
+ status={status}
+ sortAPI={true}
+ handleSort={this.handleSortFlowList}
+ sortBy={this.visitorsListViewModel?.sortByFlowList}
+ {...this.props}
+ />
) : (
-
- {t('txt_view_more')}
-
+
)}
-
- {this.visitorsListViewModel?.statusFlowList === PAGE_STATUS.LOADING ? (
-
- ) : this.visitorsListViewModel?.flowListTableData?.list ? (
-
{
- await this.visitorsListViewModel.handleFilterFlowList({ page: value });
- }}
- selectPageSize={async (value) => {
- await this.visitorsListViewModel.handleFilterFlowList({
- page: 1,
- page_size: value,
- });
- }}
- status={status}
- sortAPI={true}
- handleSort={this.handleSortFlowList}
- sortBy={this.visitorsListViewModel?.sortByFlowList}
- {...this.props}
- />
- ) : (
-
- )}
-
+ )}
);
}
diff --git a/packages/aesirx-bi-app/src/containers/VisitorsPage/index.jsx b/packages/aesirx-bi-app/src/containers/VisitorsPage/index.jsx
index 64aa30fe..d1051745 100644
--- a/packages/aesirx-bi-app/src/containers/VisitorsPage/index.jsx
+++ b/packages/aesirx-bi-app/src/containers/VisitorsPage/index.jsx
@@ -44,7 +44,7 @@ const VisitorsContainer = observer(
}
render() {
- const { integration = false } = this.props;
+ const { integration = false, isFreemium = true } = this.props;
const { integrationLink, activeDomain } = this.biListViewModel;
const matchVisitor = matchPath(history.location.pathname, {
path: process.env.REACT_APP_INTERGRATION ? '/bi' : '' + '/visitors',
@@ -105,6 +105,7 @@ const VisitorsContainer = observer(
integrationLink={integrationLink}
activeDomain={activeDomain}
ref={(el) => (this.componentRef = el)}
+ isFreemium={isFreemium}
/>
);
diff --git a/packages/aesirx-bi-app/src/integration/lib/MainLayoutIntegration.jsx b/packages/aesirx-bi-app/src/integration/lib/MainLayoutIntegration.jsx
index 249c0f9b..a106dc8f 100644
--- a/packages/aesirx-bi-app/src/integration/lib/MainLayoutIntegration.jsx
+++ b/packages/aesirx-bi-app/src/integration/lib/MainLayoutIntegration.jsx
@@ -3,7 +3,7 @@
* @license GNU General Public License version 3, see LICENSE.
*/
-import React, { lazy, Suspense, useState } from 'react';
+import React, { lazy, Suspense, useEffect, useState } from 'react';
import { BiStoreProvider, useBiViewModel } from '../../store/BiStore/BiViewModelContextProvider';
import { BiViewModel } from '../../store/BiStore/BiViewModel';
@@ -16,8 +16,8 @@ import { authRoutes, mainRoutes } from '../../routes/routes';
import { DataStream } from '../../components/DataStream';
import { appLanguages } from '../../translations';
import SbarLeftIntegration from './SbarLeftIntegration';
-import { Storage } from 'aesirx-lib';
-import { mainMenu } from 'routes/menu';
+import { env, Storage } from 'aesirx-lib';
+import { freemiumMainMenu, mainMenu } from 'routes/menu';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { useTranslation } from 'react-i18next';
import { Dropdown } from 'react-bootstrap';
@@ -46,7 +46,7 @@ const biViewModel = new BiViewModel();
const MainLayoutIntegration = (props) => {
const isAuthenticated = Storage.getItem('auth');
-
+ const isFreemium = props?.isFreemium ?? true;
return (
{
isLogin={() => true}
componentHeader={}
integration={true}
- leftMenu={}
+ isFreemium={isFreemium}
+ leftMenu={}
rootId="#biapp"
noavatar={true}
isColorMode={false}
@@ -65,7 +66,7 @@ const MainLayoutIntegration = (props) => {
{!isAuthenticated && window.env.STORAGE === 'external' ? (
) : (
-
+
)}
@@ -78,6 +79,24 @@ String.prototype.startsWith = function (str) {
};
const RenderComponent = ({ link, ...props }) => {
+ const isFreemium = props?.isFreemium ?? true;
+
+ if (
+ isFreemium &&
+ ([
+ 'woocommerce',
+ 'woocommerce-product',
+ 'consents',
+ 'consents-template',
+ 'consents-advance',
+ 'flow-list',
+ ].includes(link) ||
+ link.startsWith('flow') ||
+ link.startsWith('events-detail'))
+ ) {
+ return ;
+ }
+
switch (link) {
case 'visitors':
return ;
@@ -153,6 +172,8 @@ const App = observer((props) => {
biListViewModel: { integrationLink, activeDomain, setIntegrationLink },
} = useBiViewModel();
const { t } = useTranslation();
+ const [menuList, setMenuList] = useState(mainMenu);
+
const handleChangeLink = (e, link) => {
e.preventDefault();
if (link) {
@@ -160,11 +181,17 @@ const App = observer((props) => {
}
};
+ useEffect(() => {
+ if (props?.isFreemium) {
+ setMenuList(freemiumMainMenu);
+ }
+ }, [props?.isFreemium]);
+
return (
}>
- {mainMenu ? (
+ {menuList ? (
- {mainMenu?.map((menuList, menuListKey) => {
+ {menuList?.map((menuList, menuListKey) => {
return (
{menuList?.link && (
@@ -216,8 +243,13 @@ const App = observer((props) => {
) : (
handleChangeLink(e, menuList?.page)}
+ href={`${menuList?.page === 'cmp' ? `${env.REACT_APP_CMP_LINK}` : '#'} `}
+ {...(menuList?.page === 'cmp' ? { target: '_blank' } : {})}
+ onClick={(e) => {
+ if (menuList?.page !== 'cmp') {
+ handleChangeLink(e, menuList?.page);
+ }
+ }}
className={`d-flex align-items-center me-3 px-4 py-10 text-decoration-none fw-medium border rounded-pill ${
integrationLink === menuList.page ? 'active' : ''
}`}
diff --git a/packages/aesirx-bi-app/src/integration/lib/SbarLeftIntegration.jsx b/packages/aesirx-bi-app/src/integration/lib/SbarLeftIntegration.jsx
index 08866de6..2465c92e 100644
--- a/packages/aesirx-bi-app/src/integration/lib/SbarLeftIntegration.jsx
+++ b/packages/aesirx-bi-app/src/integration/lib/SbarLeftIntegration.jsx
@@ -11,15 +11,17 @@ import { env } from 'aesirx-lib';
import { Collapse } from 'react-bootstrap';
import { useBiViewModel } from '../../store/BiStore/BiViewModelContextProvider';
-import { mainMenu } from '../../routes/menu';
+import { mainMenu, freemiumMainMenu } from '../../routes/menu';
-const SbarLeftIntegration = observer(() => {
+const SbarLeftIntegration = observer((props) => {
const [isOpenCollapse, setIsOpenCollapse] = useState('default');
const [dataStreamActive, setDataStreamActive] = useState(
env.REACT_APP_DATA_STREAM && JSON.parse(env.REACT_APP_DATA_STREAM)[0].domain
);
const biStore = useBiViewModel();
const { t } = useTranslation();
+
+ const [menuList, setMenuList] = useState(mainMenu);
const handleOpen = (clickedIndex, parentIndex) => {
if (isOpenCollapse === clickedIndex.toString()) {
if (parentIndex) {
@@ -55,6 +57,12 @@ const SbarLeftIntegration = observer(() => {
fetchData();
}, [biStore.biListViewModel.activeDomain, dataStreamActive]);
+ useEffect(() => {
+ if (props?.isFreemium) {
+ setMenuList(freemiumMainMenu);
+ }
+ }, [props?.isFreemium]);
+
return (