mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import { FC } from "react";
|
|
import Link from "next/link";
|
|
import { observer } from "mobx-react-lite";
|
|
// hooks
|
|
import { useView } from "hooks/store";
|
|
// ui
|
|
import { PhotoFilterIcon } from "@plane/ui";
|
|
// types
|
|
import { TViewTypes } from "@plane/types";
|
|
|
|
type TViewItem = {
|
|
workspaceSlug: string;
|
|
projectId: string | undefined;
|
|
viewId: string | undefined;
|
|
viewType: TViewTypes;
|
|
viewItemId: string;
|
|
};
|
|
|
|
export const ViewItem: FC<TViewItem> = observer((props) => {
|
|
const { workspaceSlug, projectId, viewId, viewType, viewItemId } = props;
|
|
// hooks
|
|
const viewStore = useView(workspaceSlug, projectId, viewType);
|
|
|
|
const view = viewStore?.viewById(viewItemId);
|
|
|
|
if (!view) return <></>;
|
|
return (
|
|
<div key={viewItemId} className="space-y-0.5 relative h-full flex flex-col justify-between">
|
|
<Link
|
|
href={`/${workspaceSlug}/workspace-views/${viewItemId}`}
|
|
className={`cursor-pointer relative p-2 px-2.5 flex justify-center items-center gap-1.5 rounded transition-all hover:bg-custom-background-80
|
|
${viewItemId === viewId ? `text-custom-primary-100 bg-custom-primary-100/10` : `border-transparent`}
|
|
`}
|
|
onClick={(e) => viewItemId === viewId && e.preventDefault()}
|
|
>
|
|
<div className="flex-shrink-0 bg-custom-background-80 rounded-sm relative w-5 h-5 flex justify-center items-center overflow-hidden">
|
|
<PhotoFilterIcon className="w-3 h-3" />
|
|
</div>
|
|
<div className="w-full max-w-[80px] inline-block text-sm line-clamp-1 truncate overflow-hidden font-medium">
|
|
{view?.name}
|
|
</div>
|
|
</Link>
|
|
<div className={`border-b-2 ${viewItemId === viewId ? `border-custom-primary-100` : `border-transparent`}`} />
|
|
</div>
|
|
);
|
|
});
|