feat: add template card page

This commit is contained in:
Henry
2025-10-08 22:04:52 +01:00
parent 18e85ef6be
commit 4220b2bff9
4 changed files with 49 additions and 17 deletions

View File

@@ -0,0 +1,18 @@
import type { NextPageWithLayout } from "~/pages/_app";
import { getDashboardLayout } from "~/components/Dashboard";
import Popup from "~/components/Popup";
import CardView, { CardRightPanel } from "~/views/card";
const CardPage: NextPageWithLayout = () => {
return (
<>
<CardView isTemplate />
<Popup />
</>
);
};
CardPage.getLayout = (page) =>
getDashboardLayout(page, <CardRightPanel isTemplate />, true);
export default CardPage;

View File

@@ -39,7 +39,7 @@ import VisibilityButton from "./components/VisibilityButton";
type PublicListId = string; type PublicListId = string;
export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) { export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
const params = useParams() as { boardId: string[] } | null; const params = useParams() as { boardId: string | string[] } | null;
const router = useRouter(); const router = useRouter();
const utils = api.useUtils(); const utils = api.useUtils();
const { showPopup } = usePopup(); const { showPopup } = usePopup();
@@ -49,7 +49,13 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
useState<PublicListId>(""); useState<PublicListId>("");
const [isInitialLoading, setIsInitialLoading] = useState(true); const [isInitialLoading, setIsInitialLoading] = useState(true);
const boardId = params?.boardId.length ? params.boardId[0] : null; const boardId = params?.boardId
? Array.isArray(params.boardId)
? params.boardId[0]
: params.boardId
: null;
console.log("params", params);
const updateBoard = api.board.update.useMutation(); const updateBoard = api.board.update.useMutation();
@@ -497,7 +503,11 @@ export default function BoardPage({ isTemplate }: { isTemplate?: boolean }) {
e.preventDefault(); e.preventDefault();
}} }}
key={card.publicId} key={card.publicId}
href={`/cards/${card.publicId}`} href={
isTemplate
? `/templates/${boardId}/cards/${card.publicId}`
: `/cards/${card.publicId}`
}
className={`mb-2 flex !cursor-pointer flex-col ${ className={`mb-2 flex !cursor-pointer flex-col ${
card.publicId.startsWith( card.publicId.startsWith(
"PLACEHOLDER", "PLACEHOLDER",

View File

@@ -37,7 +37,7 @@ interface FormValues {
description: string; description: string;
} }
export function CardRightPanel() { export function CardRightPanel({ isTemplate }: { isTemplate?: boolean }) {
const router = useRouter(); const router = useRouter();
const cardId = Array.isArray(router.query.cardId) const cardId = Array.isArray(router.query.cardId)
? router.query.cardId[0] ? router.query.cardId[0]
@@ -121,19 +121,21 @@ export function CardRightPanel() {
isLoading={!card} isLoading={!card}
/> />
</div> </div>
<div className="flex w-full flex-row"> {!isTemplate && (
<p className="my-2 mb-2 w-[100px] text-sm font-medium">{t`Members`}</p> <div className="flex w-full flex-row">
<MemberSelector <p className="my-2 mb-2 w-[100px] text-sm font-medium">{t`Members`}</p>
cardPublicId={cardId ?? ""} <MemberSelector
members={formattedMembers} cardPublicId={cardId ?? ""}
isLoading={!card} members={formattedMembers}
/> isLoading={!card}
</div> />
</div>
)}
</div> </div>
); );
} }
export default function CardPage() { export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
const router = useRouter(); const router = useRouter();
const utils = api.useUtils(); const utils = api.useUtils();
const { const {
@@ -228,7 +230,7 @@ export default function CardPage() {
<> <>
<Link <Link
className="whitespace-nowrap font-bold leading-[2.3rem] tracking-tight text-light-900 dark:text-dark-900 sm:text-[1.2rem]" className="whitespace-nowrap font-bold leading-[2.3rem] tracking-tight text-light-900 dark:text-dark-900 sm:text-[1.2rem]"
href={`/boards/${board?.publicId}`} href={`${isTemplate ? "/templates" : "/boards"}/${board?.publicId}`}
> >
{board?.name} {board?.name}
</Link> </Link>
@@ -296,9 +298,11 @@ export default function CardPage() {
isAdmin={workspace.role === "admin"} isAdmin={workspace.role === "admin"}
/> />
</div> </div>
<div className="mt-6"> {!isTemplate && (
<NewCommentForm cardPublicId={cardId} /> <div className="mt-6">
</div> <NewCommentForm cardPublicId={cardId} />
</div>
)}
</div> </div>
</> </>
)} )}