import React, { useEffect, useState, useCallback, useContext } from 'react'; import { useNavigate, useLocation } from "react-router-dom"; import Branding from "../components/Branding.jsx"; import { ToastContainer, toast } from "react-toastify"; import { Button } from '@mui/material'; import { getTheme } from '../theme.jsx'; import { Context } from '../context/ContextApi.jsx'; import PartnerSettings from '../components/PartnerSettings.jsx'; import PartnersUsecasesTab from '../components/PartnersUsecasesTab.jsx'; import PartnersApps from '../components/PartnerApps.jsx'; import PartnerArticles from '../components/PartnersArticles.jsx'; const PartnerTab = (props) => { const location = useLocation(); const navigate = useNavigate(); const { userdata, globalUrl, serverside, isCloud, setSelectedOrganization, selectedOrganization, handleGetOrg, handleStatusChange, isLoaded, removeCookie } = props; const [selectedTab, setSelectedTab] = useState('partner_settings'); const [loadingPartnerData, setLoadingPartnerData] = useState(false); const [curIndex, setCurIndex] = React.useState(0); const [partnerData, setPartnerData] = React.useState({ name: "", description: "", image_url: "", landscape_image_url: "", website_url: "", article_url: "", expertise: [], usecases: [], services: [], solutions: [], country: "", region: "", partner_type: {}, }); const tabsOnPartnerTab = [ 'Partner Settings', 'Usecases', 'Apps', 'AI Agents', 'Articles', 'Branding']; const { themeMode } = useContext(Context); const theme = getTheme(themeMode); useEffect(() => { if(!isCloud || !userdata?.active_org?.is_partner) { // If the user is not a partner or if it's not a cloud environment do not make api call :) return; } setLoadingPartnerData(true); const url = globalUrl + "/api/v1/partners/" + userdata?.active_org?.id; fetch(url, { method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", }, credentials: "include", }) .then((response) => { if (response.status !== 200) { toast("Failed to get partner data") } return response.json(); }) .then((responseJson) => { if(responseJson.success) { setPartnerData(responseJson?.partner); console.log("responseJson", responseJson) setLoadingPartnerData(false); }else{ setLoadingPartnerData(false); toast(responseJson?.reason) } }) .catch((error) => { setLoadingPartnerData(false); }) }, [globalUrl]); // Used to auto select the tab based on the url : partner_tab useEffect(() => { const queryParams = new URLSearchParams(location.search); const tabName = queryParams.get('partner_tab'); if (tabName) { const decodedTabName = decodeURIComponent(tabName); setSelectedTab(decodedTabName); if (decodedTabName === 'partner_settings') { setCurIndex(0); } else if(decodedTabName === 'usecases'){ setCurIndex(1) }else if (decodedTabName === 'apps'){ setCurIndex(2); } else if (decodedTabName === 'aiagents') { setCurIndex(3); } else if (decodedTabName === 'articles') { setCurIndex(4); } else if (decodedTabName === 'branding') { setCurIndex(5); } } }, [location.search]); // Tab click on partner tab const handleTabClick = (tabName) => { const formattedTabName = tabName.toLowerCase().replace(/[\s&]+/g, ''); const encodedTabName = encodeURIComponent(formattedTabName); setSelectedTab(formattedTabName); document.title = `Shuffle - partner - ${formattedTabName}`; navigate(`?partner_tab=${encodedTabName}`); }; // Rendering the content based on the selected tab const renderContent = () => { switch (selectedTab) { case 'partner_settings': return ; case 'usecases': return ; case `apps`: return ; case 'articles' : return ; case `ai_agents`: return ; case 'branding': return ; default: return ; } }; const isTabDisabled = (tabName) => { // If user is a support user, enable all tabs if (userdata?.support) { return false; } // For non-support users, apply the following restrictions: // For onPrem only partner settings and branding are enabled if ( !isCloud && (tabName === "Usecases" || tabName === "Apps" || tabName === "AI Agents" || tabName === "Articles") ) { return true; } // Disable Apps, Articles, and AI Agents for all non-support users if ( tabName === "Apps" || tabName === "Articles" || tabName === "AI Agents" ) { return true; } // Disable Usecases tab for cloud users if not a partner or is in a sub-org if (isCloud && tabName === "Usecases") { if ( !userdata?.active_org?.is_partner || userdata?.active_org?.is_sub_org ) { return true; } } // Disable Branding tab if not an integration partner const isIntegrationPartner = userdata && userdata?.org_status?.includes("integration_partner") && !userdata?.org_status?.includes("sub_org"); if (tabName === "Branding" && !isIntegrationPartner) { return true; } // Enable the tab by default return false; } return (
{tabsOnPartnerTab?.map((tabName, index) => (
))}
{renderContent()}
); }; export default PartnerTab;