import { useState, useEffect } from 'react';
import { FolderOpen, Users, HardDrive, Wifi, Copy, CheckCheck } from 'lucide-react';
import { fileAPI } from '../services/api';
import { useConfig } from '../contexts/ConfigContext';
function CopyButton({ text }) {
const [copied, setCopied] = useState(false);
const copy = () => {
navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 1500);
};
return (
);
}
function InfoRow({ label, value }) {
return (
);
}
function Files() {
const { domain = 'cell', service_ips = {}, service_configs = {} } = useConfig();
const filesHost = `files.${domain}`;
const webdavHost = `webdav.${domain}`;
const filesIp = service_ips.vip_files || '172.20.0.22';
const webdavIp = service_ips.vip_webdav || '172.20.0.24';
const filesCfg = service_configs.files || {};
const webdavPort = filesCfg.port ?? 8080;
const filegatorPort = filesCfg.manager_port ?? 8082;
const [users, setUsers] = useState([]);
const [status, setStatus] = useState(null);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
fetchFilesData();
}, []);
const fetchFilesData = async () => {
try {
const [usersResponse, statusResponse] = await Promise.all([
fileAPI.getUsers(),
fileAPI.getStatus()
]);
setUsers(usersResponse.data);
setStatus(statusResponse.data);
} catch (error) {
console.error('Failed to fetch files data:', error);
} finally {
setIsLoading(false);
}
};
if (isLoading) {
return (
);
}
return (
File Storage
FileGator (browser) + WebDAV (native clients)
{/* File Manager */}
Web file manager
Browser-based file manager. Requires VPN.
{/* WebDAV */}
WebDAV (mount as drive)
Mount in macOS Finder, Windows Explorer, or any WebDAV client.
{/* OS quick guide */}
Mount as network drive
macOS (Finder)
Go → Connect to Server → http://{webdavHost}
Windows
Map Network Drive → \\{webdavHost}\DavWWWRoot or use http://{webdavHost} in "Connect to a Web Site"
iOS (Files app)
Files → ... → Connect to Server → http://{webdavHost}
Android
Use Solid Explorer or FX File Explorer → Add cloud → WebDAV → http://{webdavHost}
{/* Status */}
Service Status
{status ? (
FileGator:
Running
WebDAV:
Running
) : (
Status unavailable
)}
{/* Users */}
{users.length > 0 && (
Storage Users
{users.map((user, index) => (
{user.username}
{user.storage_used || '0'} MB
))}
)}
);
}
export default Files;