import { useEffect, useState } from "react"; import { NavLink, useLocation, useNavigate, useParams } from "react-router-dom"; import { shortcutService, userService, workspaceService } from "../services"; import { useAppSelector } from "../store"; import { unknownWorkspace, unknownWorkspaceUser } from "../store/modules/workspace"; import useLoading from "../hooks/useLoading"; import Icon from "../components/Icon"; import toastHelper from "../components/Toast"; import Dropdown from "../components/common/Dropdown"; import Header from "../components/Header"; import ShortcutListView from "../components/ShortcutListView"; import MemberListView from "../components/MemberListView"; import WorkspaceSetting from "../components/WorkspaceSetting"; import CreateShortcutDialog from "../components/CreateShortcutDialog"; import UpsertWorkspaceUserDialog from "../components/UpsertWorkspaceUserDialog"; interface State { workspace: Workspace; workspaceUser: WorkspaceUser; userList: WorkspaceUser[]; showCreateShortcutDialog: boolean; showUpsertWorkspaceUserDialog: boolean; } const WorkspaceDetail: React.FC = () => { const navigate = useNavigate(); const params = useParams(); const location = useLocation(); const user = useAppSelector((state) => state.user.user) as User; const { shortcutList } = useAppSelector((state) => state.shortcut); const [state, setState] = useState({ workspace: unknownWorkspace, workspaceUser: unknownWorkspaceUser, userList: [], showCreateShortcutDialog: false, showUpsertWorkspaceUserDialog: false, }); const loadingState = useLoading(); useEffect(() => { if (!userService.getState().user) { navigate("/user/auth"); return; } const workspace = workspaceService.getWorkspaceByName(params.workspaceName ?? ""); if (!workspace) { toastHelper.error("workspace not found"); return; } loadingState.setLoading(); Promise.all([ shortcutService.fetchWorkspaceShortcuts(workspace.id), workspaceService.getWorkspaceUser(workspace.id, user.id), workspaceService.getWorkspaceUserList(workspace.id), ]) .then(([, workspaceUser, workspaceUserList]) => { setState({ ...state, workspace, workspaceUser, userList: workspaceUserList, }); }) .finally(() => { loadingState.setFinish(); }); }, [params.workspaceName]); useEffect(() => { if (location.hash !== "#shortcuts" && location.hash !== "#members" && location.hash !== "#setting") { navigate("#shortcuts"); } }, [location.hash]); const handleCreateShortcutButtonClick = () => { setState({ ...state, showCreateShortcutDialog: true, }); }; const handleUpsertWorkspaceMemberButtonClick = () => { setState({ ...state, showUpsertWorkspaceUserDialog: true, }); }; return ( <>
Shortcuts Members Setting
Add new... } actions={ <> } actionsClassName="!w-32" />
{loadingState.isLoading ? (
loading
) : ( <> {location.hash === "#shortcuts" && } {location.hash === "#members" && ( )} {location.hash === "#setting" && } )}
{state.showCreateShortcutDialog && ( { setState({ ...state, showCreateShortcutDialog: false, }); }} onConfirm={() => { setState({ ...state, showCreateShortcutDialog: false, }); if (location.hash !== "#shortcuts") { navigate("#shortcuts"); } }} /> )} {state.showUpsertWorkspaceUserDialog && ( { setState({ ...state, showUpsertWorkspaceUserDialog: false, }); }} onConfirm={async () => { const workspaceUserList = await workspaceService.getWorkspaceUserList(state.workspace.id); setState({ ...state, userList: workspaceUserList, showUpsertWorkspaceUserDialog: false, }); if (location.hash !== "#members") { navigate("#members"); } }} /> )} ); }; export default WorkspaceDetail;