EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
Services.jsx
Go to the documentation of this file.
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';
13
14export default function Services() {
15 const location = useLocation();
16 const [activeTab, setActiveTab] = useState('domains');
17
18 // Check if user is root tenant admin
19 const token = localStorage.getItem('token');
20 const parseJwt = (token) => {
21 try {
22 const payload = token.split('.')[1];
23 return JSON.parse(atob(payload.replace(/-/g, '+').replace(/_/g, '/')));
24 } catch {
25 return null;
26 }
27 };
28 const jwtPayload = token ? parseJwt(token) : null;
29 const isRootTenant = jwtPayload?.is_msp || false;
30
31 // Handle URL query parameter for tab
32 useEffect(() => {
33 const params = new URLSearchParams(location.search);
34 const tab = params.get('tab');
35 if (tab) {
36 setActiveTab(tab);
37 }
38 }, [location.search]);
39
40 return (
41 <MainLayout>
42 <div className="services-page-layout">
43 {/* Page Header */}
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>
47 </div>
48
49 {/* Body with Sidebar and Content */}
50 <div className="services-body">
51 <ServicesSidebar
52 selected={activeTab}
53 onSelect={setActiveTab}
54 isRootTenant={isRootTenant}
55 />
56
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>
67 </div>
68 )}
69 {activeTab === 'servers' && <TabServers />}
70 </div>
71 </div>
72 </div>
73 </MainLayout>
74 );
75}