import React, { useEffect, useState, useCallback, useContext } from 'react'; import { Link, useNavigate, useLocation } from "react-router-dom"; import Billing from "../components/Billing.jsx"; import Priorities from "../components/Priorities.jsx"; import Branding from "../components/Branding.jsx"; import EditOrgTab from '../components/EditOrgTab.jsx'; import CloudSyncTab from '../components/CloudSyncTab.jsx'; import SSOTab from "../components/ssoTab.jsx" import { ToastContainer, toast } from "react-toastify"; import { Button, Tooltip, Typography, Divider, } from '@mui/material'; import { CheckCircle as CheckCircleIcon, Cancel as CancelIcon, } from '@mui/icons-material'; import { getTheme } from '../theme.jsx'; import { Context } from '../context/ContextApi.jsx'; const OrganizationTab = (props) => { const location = useLocation(); const navigate = useNavigate(); const { userdata, globalUrl, serverside, isCloud, checkLogin, notifications, setNotifications, stripeKey, setSelectedOrganization, selectedStatus, setSelectedStatus, selectedOrganization, handleGetOrg, handleStatusChange, handleEditOrg, isLoaded, removeCookie, isIntegrationPartner, isChildOrg, isGlobalUser } = props; const [selectedTab, setSelectedTab] = useState('org_config'); const [organizationFeatures, setOrganizationFeatures] = useState({}); const [billingInfo, setBillingInfo] = useState({}); const [orgRequest, setOrgRequest] = React.useState(true); const [curIndex, setCurIndex] = React.useState(0); const items = ['Org Configuration', "SSO", "Notifications", 'Billing & Stats']; const [visibleTabs, setVisibleTabs] = useState(items); const [unreadNotifications, setUnreadNotifications] = React.useState( notifications?.filter((notification) => notification.read === false)?.length ); const { themeMode, brandColor, brandName } = useContext(Context); const theme = getTheme(themeMode, brandColor); useEffect(() => { if (isIntegrationPartner && isChildOrg && !isGlobalUser) { setVisibleTabs(items.filter((item) => item !== 'Branding' && item !== 'SSO')); }else { if (userdata && userdata.active_org && userdata.active_org.role === 'admin') { setVisibleTabs(items); }else { setVisibleTabs(items.filter((item) => item !== 'SSO')); } } if (isCloud) { setVisibleTabs(items.filter((item) => item !== 'Production Status')); } },[isIntegrationPartner, isChildOrg, isGlobalUser, userdata, isCloud]); useEffect(() => { const queryParams = new URLSearchParams(location.search); const tabName = queryParams.get('admin_tab'); if (tabName) { const decodedTabName = decodeURIComponent(tabName); setSelectedTab(decodedTabName); if (decodedTabName === 'org_config') { setCurIndex(0); } else if (decodedTabName === 'prodstatus' || decodedTabName === 'productionstatus' && !isCloud) { setCurIndex(1); } else if(decodedTabName === 'sso'){ setCurIndex(isCloud ? 1 : 2) }else if (decodedTabName === 'notifications' || decodedTabName === 'priorities') { if (isIntegrationPartner && isChildOrg && !isGlobalUser) { setCurIndex(isCloud ? 1 : 2); }else { if (userdata && userdata.active_org && userdata.active_org.role === 'admin') { setCurIndex(isCloud ? 2 : 3); }else { setCurIndex(isCloud ? 1 : 2); } } } else if (decodedTabName === 'billingstats' || decodedTabName === 'billing') { if (isIntegrationPartner && isChildOrg && !isGlobalUser) { setCurIndex(isCloud ? 2 : 3); } else { if (userdata && userdata?.active_org && userdata?.active_org?.role === 'admin') { setCurIndex(isCloud ? 3 : 4); } else { setCurIndex(isCloud ? 2 : 3); } } } else if (decodedTabName === 'branding') { setCurIndex(isCloud ? 4 : 5); } // else if (decodedTabName === 'analytics') { // setCurIndex(5); // } } }, [location.search]); const handleTabClick = (tabName) => { const formattedTabName = tabName.toLowerCase().replace(/[\s&]+/g, ''); const encodedTabName = encodeURIComponent(formattedTabName); setSelectedTab(formattedTabName); document.title = brandName?.length > 0 ? `${brandName} - admin - ${formattedTabName}` : `Shuffle - admin - ${formattedTabName}`; navigate(`?admin_tab=${encodedTabName}`); }; const handleNotifications = useCallback(() => { const unreadCount = notifications?.filter((notification) => notification.read === false).length; setUnreadNotifications(unreadCount); },[unreadNotifications,notifications]); useEffect(() => { if ((unreadNotifications !== notifications?.filter((notification) => notification.read === false).length) !== unreadNotifications) { handleNotifications(); } }, [notifications]); const renderContent = () => { switch (selectedTab) { case 'org_config': return ; case 'sso': return case `notifications`: case `errors`: case `priorities`: return ( ); case 'billingstats' : case 'billing' : return ( ); // case 'branding': // return ; // case 'analytics': // return ; default: return ; } }; return (
{visibleTabs.map((tabName, index) => (
))}
{renderContent()}
); }; export default OrganizationTab;