import Link from "next/link"; import { useRouter } from "next/router"; import { t } from "@lingui/core/macro"; import { keepPreviousData } from "@tanstack/react-query"; import { env } from "next-runtime-env"; import { useEffect, useState } from "react"; import { HiLink, HiOutlineLockClosed } from "react-icons/hi2"; import Button from "~/components/Button"; import Modal from "~/components/modal"; import { PageHead } from "~/components/PageHead"; import PatternedBackground from "~/components/PatternedBackground"; import Popup from "~/components/Popup"; import ThemeToggle from "~/components/ThemeToggle"; import { useModal } from "~/providers/modal"; import { usePopup } from "~/providers/popup"; import { api } from "~/utils/api"; import { convertDueDateFiltersToRanges } from "~/utils/dueDateFilters"; import { formatToArray } from "~/utils/helpers"; import Card from "~/views/board/components/Card"; import Filters from "~/views/board/components/Filters"; import { CardModal } from "./CardModal"; const IS_CLOUD = env("NEXT_PUBLIC_KAN_ENV") === "cloud"; const HIDE_POWERED_BY = env("NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY") === "true"; export default function PublicBoardView() { const router = useRouter(); const { showPopup } = usePopup(); const [isRouteLoaded, setIsRouteLoaded] = useState(false); const { openModal } = useModal(); const boardSlug = Array.isArray(router.query.boardSlug) ? router.query.boardSlug[0] : router.query.boardSlug; const workspaceSlug = Array.isArray(router.query.workspaceSlug) ? router.query.workspaceSlug[0] : router.query.workspaceSlug; const dueDateFilters = formatToArray(router.query.dueDate) as ( | "overdue" | "today" | "tomorrow" | "next-week" | "next-month" | "no-due-date" )[]; const { data, isLoading } = api.board.bySlug.useQuery( { boardSlug: boardSlug ?? "", workspaceSlug: workspaceSlug ?? "", members: formatToArray(router.query.members), labels: formatToArray(router.query.labels), lists: formatToArray(router.query.lists), dueDate: convertDueDateFiltersToRanges(dueDateFilters), }, { enabled: router.isReady && !!boardSlug, placeholderData: keepPreviousData, }, ); const CopyBoardLink = () => { return ( ); }; const pathWithoutQuery = router.asPath.split("?")[0]; const splitPath = pathWithoutQuery?.split("/") ?? []; const cardPublicId = splitPath.length > 3 ? splitPath[3] : null; useEffect(() => { if (!isRouteLoaded && router.isReady) { setIsRouteLoaded(true); if (cardPublicId) { openModal("CARD"); } } }, [ router.isReady, isRouteLoaded, setIsRouteLoaded, cardPublicId, openModal, ]); return ( <>
{isLoading || !router.isReady ? (
) : (

{data?.name}

)} {data && (
{t`View only`}
)}
{isLoading || !router.isReady ? (
) : !data && !isLoading && router.isReady && !!boardSlug ? (

{t`Board not found`}

{t`This board is private or does not exist`}

) : (
{data?.lists.map((list) => (
{list.name}
{list.cards.map((card) => { return ( { openModal("CARD"); }} > ); })}
))}
)}
{IS_CLOUD && ( kan.bn )} {!IS_CLOUD && !HIDE_POWERED_BY && ( {`Powered by`} kan.bn )}
); }