mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
|
import { observer } from "mobx-react-lite";
|
||
|
import { useRouter } from "next/router";
|
||
|
import useSWR from "swr";
|
||
|
// components
|
||
|
import { ActiveCycleInfo } from "components/cycles";
|
||
|
// services
|
||
|
import { CycleService } from "services/cycle.service";
|
||
|
const cycleService = new CycleService();
|
||
|
// hooks
|
||
|
import { useWorkspace } from "hooks/store";
|
||
|
// helpers
|
||
|
import { renderEmoji } from "helpers/emoji.helper";
|
||
|
|
||
|
export const WorkspaceActiveCyclesList = observer(() => {
|
||
|
// router
|
||
|
const router = useRouter();
|
||
|
const { workspaceSlug } = router.query;
|
||
|
// fetching active cycles in workspace
|
||
|
const { data } = useSWR("WORKSPACE_ACTIVE_CYCLES", () => cycleService.workspaceActiveCycles(workspaceSlug as string));
|
||
|
// store
|
||
|
const { workspaceActiveCyclesSearchQuery } = useWorkspace();
|
||
|
// filter cycles based on search query
|
||
|
const filteredCycles = data?.filter(
|
||
|
(cycle) =>
|
||
|
cycle.project_detail.name.toLowerCase().includes(workspaceActiveCyclesSearchQuery.toLowerCase()) ||
|
||
|
cycle.project_detail.identifier?.toLowerCase().includes(workspaceActiveCyclesSearchQuery.toLowerCase()) ||
|
||
|
cycle.name.toLowerCase().includes(workspaceActiveCyclesSearchQuery.toLowerCase())
|
||
|
);
|
||
|
|
||
|
return (
|
||
|
<div>
|
||
|
{workspaceSlug &&
|
||
|
filteredCycles &&
|
||
|
filteredCycles.map((cycle) => (
|
||
|
<div key={cycle.id} className="px-5 py-7">
|
||
|
<div className="flex items-center gap-1.5 px-3 py-1.5">
|
||
|
{cycle.project_detail.emoji ? (
|
||
|
<span className="grid h-7 w-7 flex-shrink-0 place-items-center rounded uppercase">
|
||
|
{renderEmoji(cycle.project_detail.emoji)}
|
||
|
</span>
|
||
|
) : cycle.project_detail.icon_prop ? (
|
||
|
<div className="grid h-7 w-7 flex-shrink-0 place-items-center">
|
||
|
{renderEmoji(cycle.project_detail.icon_prop)}
|
||
|
</div>
|
||
|
) : (
|
||
|
<span className="grid h-7 w-7 flex-shrink-0 place-items-center rounded bg-gray-700 uppercase text-white">
|
||
|
{cycle.project_detail?.name.charAt(0)}
|
||
|
</span>
|
||
|
)}
|
||
|
<h2 className="text-xl font-semibold">{cycle.project_detail.name}</h2>
|
||
|
</div>
|
||
|
<ActiveCycleInfo workspaceSlug={workspaceSlug?.toString()} projectId={cycle.project} cycle={cycle} />
|
||
|
</div>
|
||
|
))}
|
||
|
</div>
|
||
|
);
|
||
|
});
|