mirror of
https://github.com/aykhans/slash-e.git
synced 2025-04-18 21:19:44 +00:00
chore: update workspace selector
This commit is contained in:
parent
c34c7a7fd4
commit
de83467c45
@ -1,12 +1,17 @@
|
|||||||
import { Link, useNavigate } from "react-router-dom";
|
import { Link, useNavigate, useParams } from "react-router-dom";
|
||||||
import { useAppSelector } from "../store";
|
import { useAppSelector } from "../store";
|
||||||
import { userService } from "../services";
|
import { userService } from "../services";
|
||||||
import Icon from "./Icon";
|
import Icon from "./Icon";
|
||||||
import Dropdown from "./common/Dropdown";
|
import Dropdown from "./common/Dropdown";
|
||||||
|
import Only from "./common/OnlyWhen";
|
||||||
|
import showCreateWorkspaceDialog from "./CreateWorkspaceDialog";
|
||||||
|
|
||||||
const Header: React.FC = () => {
|
const Header: React.FC = () => {
|
||||||
|
const params = useParams();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { user } = useAppSelector((state) => state.user);
|
const { user } = useAppSelector((state) => state.user);
|
||||||
|
const { workspaceList } = useAppSelector((state) => state.workspace);
|
||||||
|
const activedWorkspace = workspaceList.find((workspace) => workspace.name === params.workspaceName ?? "");
|
||||||
|
|
||||||
const handleSignOutButtonClick = async () => {
|
const handleSignOutButtonClick = async () => {
|
||||||
await userService.doSignOut();
|
await userService.doSignOut();
|
||||||
@ -16,9 +21,50 @@ const Header: React.FC = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="w-full bg-amber-50">
|
<div className="w-full bg-amber-50">
|
||||||
<div className="w-full max-w-4xl mx-auto px-3 py-4 flex flex-row justify-between items-center">
|
<div className="w-full max-w-4xl mx-auto px-3 py-4 flex flex-row justify-between items-center">
|
||||||
<Link to={"/"} className="text-xl font-mono font-medium cursor-pointer">
|
<div className="flex flex-row justify-start items-center">
|
||||||
|
<Link to={"/"} className="text-base font-mono font-medium cursor-pointer">
|
||||||
Corgi
|
Corgi
|
||||||
</Link>
|
</Link>
|
||||||
|
<Only when={workspaceList.length > 0 && activedWorkspace !== undefined}>
|
||||||
|
<>
|
||||||
|
<span className="font-mono mx-2 text-gray-200">/</span>
|
||||||
|
<Dropdown
|
||||||
|
trigger={
|
||||||
|
<button className="flex flex-row justify-end items-center cursor-pointer">
|
||||||
|
<span className="font-mono">{activedWorkspace?.name}</span>
|
||||||
|
<Icon.ChevronDown className="ml-1 w-5 h-auto text-gray-600" />
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
actions={
|
||||||
|
<>
|
||||||
|
{workspaceList.map((workspace) => {
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
key={workspace.id}
|
||||||
|
to={`/${workspace.name}`}
|
||||||
|
className="w-full px-3 leading-10 flex flex-row justify-between items-center text-left cursor-pointer rounded whitespace-nowrap hover:bg-gray-100"
|
||||||
|
>
|
||||||
|
<span className="truncate">{workspace.name}</span>
|
||||||
|
<Only when={workspace.name === activedWorkspace?.name}>
|
||||||
|
<Icon.Check className="w-4 h-auto ml-1 shrink-0" />
|
||||||
|
</Only>
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
<hr className="w-full border-t my-1 border-t-gray-100" />
|
||||||
|
<button
|
||||||
|
className="w-full flex flex-row justify-start items-center px-3 leading-10 rounded cursor-pointer hover:bg-gray-100"
|
||||||
|
onClick={() => showCreateWorkspaceDialog()}
|
||||||
|
>
|
||||||
|
<Icon.Plus className="w-4 h-auto mr-1" /> Create Workspace
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
actionsClassName="!w-48 !-left-4"
|
||||||
|
></Dropdown>
|
||||||
|
</>
|
||||||
|
</Only>
|
||||||
|
</div>
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
{user ? (
|
{user ? (
|
||||||
<Dropdown
|
<Dropdown
|
||||||
@ -32,19 +78,19 @@ const Header: React.FC = () => {
|
|||||||
<>
|
<>
|
||||||
<Link
|
<Link
|
||||||
to={`/user/${user?.id}`}
|
to={`/user/${user?.id}`}
|
||||||
className="w-full px-3 leading-8 text-left cursor-pointer rounded whitespace-nowrap hover:bg-gray-100"
|
className="w-full flex flex-row justify-start items-center px-3 leading-10 text-left cursor-pointer rounded whitespace-nowrap hover:bg-gray-100"
|
||||||
>
|
>
|
||||||
My information
|
<Icon.User className="w-4 h-auto mr-1" /> My Account
|
||||||
</Link>
|
</Link>
|
||||||
<button
|
<button
|
||||||
className="w-full px-3 leading-8 text-left cursor-pointer rounded whitespace-nowrap hover:bg-gray-100"
|
className="w-full flex flex-row justify-start items-center px-3 leading-10 text-left cursor-pointer rounded whitespace-nowrap hover:bg-gray-100"
|
||||||
onClick={() => handleSignOutButtonClick()}
|
onClick={() => handleSignOutButtonClick()}
|
||||||
>
|
>
|
||||||
Sign out
|
<Icon.LogOut className="w-4 h-auto mr-1" /> Sign out
|
||||||
</button>
|
</button>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
actionsClassName="!w-36"
|
actionsClassName="!w-40"
|
||||||
></Dropdown>
|
></Dropdown>
|
||||||
) : (
|
) : (
|
||||||
<span className="cursor-pointer" onClick={() => navigate("/user/auth")}>
|
<span className="cursor-pointer" onClick={() => navigate("/user/auth")}>
|
||||||
|
@ -33,22 +33,16 @@ const WorkspaceDetail: React.FC = () => {
|
|||||||
...state,
|
...state,
|
||||||
workspace,
|
workspace,
|
||||||
});
|
});
|
||||||
|
loadingState.setLoading();
|
||||||
Promise.all([shortcutService.fetchWorkspaceShortcuts(workspace.id)]).finally(() => {
|
Promise.all([shortcutService.fetchWorkspaceShortcuts(workspace.id)]).finally(() => {
|
||||||
loadingState.setFinish();
|
loadingState.setFinish();
|
||||||
});
|
});
|
||||||
}, []);
|
}, [params.workspaceName]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full h-full flex flex-col justify-start items-start">
|
<div className="w-full h-full flex flex-col justify-start items-start">
|
||||||
<Header />
|
<Header />
|
||||||
<div className="mx-auto max-w-4xl w-full px-3 py-6 flex flex-col justify-start items-start">
|
<div className="mx-auto max-w-4xl w-full px-3 py-6 flex flex-col justify-start items-start">
|
||||||
<div className="w-full flex flex-row justify-start items-center mb-4">
|
|
||||||
<Link to={"/"} className="font-mono text-gray-600 cursor-pointer hover:underline">
|
|
||||||
Home
|
|
||||||
</Link>
|
|
||||||
<span className="font-mono text-gray-200 mx-4">/</span>
|
|
||||||
<span className="font-mono text-gray-600">Workspace: {state?.workspace.name}</span>
|
|
||||||
</div>
|
|
||||||
<div className="w-full flex flex-row justify-between items-center mb-4">
|
<div className="w-full flex flex-row justify-between items-center mb-4">
|
||||||
<span className="font-mono text-gray-400">Shortcut List</span>
|
<span className="font-mono text-gray-400">Shortcut List</span>
|
||||||
<button
|
<button
|
||||||
|
Loading…
x
Reference in New Issue
Block a user