1import { useState, useEffect } from 'react';
2import { useLocation } from 'react-router-dom';
3import MainLayout from '../components/Layout/MainLayout';
4import { ServicesSidebar } from './ServicesSidebar';
5import TabDomains from './tabs/TabDomains';
6import DomainRequestsTable from './tabs/domains/DomainRequestsTable';
7import TabOffice365 from './tabs/TabOffice365';
8import TabHosting from './tabs/TabHosting';
9import TabDatabases from './tabs/TabDatabases';
10import TabServers from './tabs/TabServers';
11import TabAppServices from './tabs/TabAppServices';
12import './Services.css';
14export default function Services() {
15 const location = useLocation();
16 const [activeTab, setActiveTab] = useState('domains');
18 // Check if user is root tenant admin
19 const token = localStorage.getItem('token');
20 const parseJwt = (token) => {
22 const payload = token.split('.')[1];
23 return JSON.parse(atob(payload.replace(/-/g, '+').replace(/_/g, '/')));
28 const jwtPayload = token ? parseJwt(token) : null;
29 const isRootTenant = jwtPayload?.is_msp || false;
31 // Handle URL query parameter for tab
33 const params = new URLSearchParams(location.search);
34 const tab = params.get('tab');
38 }, [location.search]);
42 <div className="services-page-layout">
44 <div className="services-header">
45 <h1>Services Management</h1>
46 <p className="page-description">Manage domains, Office 365 licenses, and web hosting applications</p>
49 {/* Body with Sidebar and Content */}
50 <div className="services-body">
53 onSelect={setActiveTab}
54 isRootTenant={isRootTenant}
57 <div className="services-content">
58 {activeTab === 'domains' && <TabDomains />}
59 {activeTab === 'domain-requests' && isRootTenant && <DomainRequestsTable />}
60 {activeTab === 'apps' && <TabAppServices />}
61 {activeTab === 'office365' && <TabOffice365 />}
62 {activeTab === 'hosting' && <TabHosting />}
63 {activeTab === 'databases' && <TabDatabases />}
64 {activeTab === 'email' && (
65 <div className="card">
66 <p>Email services management coming soon.</p>
69 {activeTab === 'servers' && <TabServers />}