import React, { useState, useEffect, useCallback } from "react"; import * as Skeleton from "react-loading-skeleton"; import "react-loading-skeleton/dist/skeleton.css"; import Workspace from "@/models/workspace"; import ManageWorkspace, { useManageWorkspaceModal, } from "../../Modals/MangeWorkspace"; import paths from "@/utils/paths"; import { useParams } from "react-router-dom"; import { GearSix, SquaresFour, UploadSimple } from "@phosphor-icons/react"; import truncate from "truncate"; import useUser from "@/hooks/useUser"; import ThreadContainer from "./ThreadContainer"; import { Link, useMatch } from "react-router-dom"; export default function ActiveWorkspaces() { const { slug } = useParams(); const [loading, setLoading] = useState(true); const [workspaces, setWorkspaces] = useState([]); const [selectedWs, setSelectedWs] = useState(null); const [hoverStates, setHoverStates] = useState({}); const [gearHover, setGearHover] = useState({}); const [uploadHover, setUploadHover] = useState({}); const { showing, showModal, hideModal } = useManageWorkspaceModal(); const { user } = useUser(); const isInWorkspaceSettings = !!useMatch("/workspace/:slug/settings/:tab"); useEffect(() => { async function getWorkspaces() { const workspaces = await Workspace.all(); setLoading(false); setWorkspaces(workspaces); } getWorkspaces(); }, []); const handleMouseEnter = useCallback((workspaceId) => { setHoverStates((prev) => ({ ...prev, [workspaceId]: true })); }, []); const handleMouseLeave = useCallback((workspaceId) => { setHoverStates((prev) => ({ ...prev, [workspaceId]: false })); }, []); const handleGearMouseEnter = useCallback((workspaceId) => { setGearHover((prev) => ({ ...prev, [workspaceId]: true })); }, []); const handleGearMouseLeave = useCallback((workspaceId) => { setGearHover((prev) => ({ ...prev, [workspaceId]: false })); }, []); const handleUploadMouseEnter = useCallback((workspaceId) => { setUploadHover((prev) => ({ ...prev, [workspaceId]: true })); }, []); const handleUploadMouseLeave = useCallback((workspaceId) => { setUploadHover((prev) => ({ ...prev, [workspaceId]: false })); }, []); if (loading) { return ( <> ); } return (
{workspaces.map((workspace) => { const isActive = workspace.slug === slug; const isHovered = hoverStates[workspace.id]; return (
handleMouseEnter(workspace.id)} onMouseLeave={() => handleMouseLeave(workspace.id)} key={workspace.id} role="listitem" >

{isActive || isHovered ? truncate(workspace.name, 15) : truncate(workspace.name, 20)}

{(isActive || isHovered || gearHover[workspace.id]) && user?.role !== "default" ? (
handleGearMouseEnter(workspace.id)} onMouseLeave={() => handleGearMouseLeave(workspace.id)} className="rounded-md flex items-center justify-center text-[#A7A8A9] hover:text-white ml-auto" aria-label="General appearance settings" >
) : null}
{isActive && ( )}
); })} {showing && ( )}
); }