From 357faa5b187bf21254e09e8f25277f17b9e98934 Mon Sep 17 00:00:00 2001 From: Brandon Egger <brandonegger64@gmail.com> Date: Tue, 30 May 2023 00:19:41 -0500 Subject: [PATCH] print preview improvements --- src/components/Footer.tsx | 8 ++++---- src/components/Header.tsx | 11 ++++------- src/components/ResourceTable.tsx | 2 +- src/pages/resources/index.tsx | 29 +++++++++++++++++++---------- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 074851f..5b80a0f 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -138,9 +138,9 @@ const FooterLabeledSection = ({ const Footer: NextPage = () => { return ( - <div className="w-full bg-neutral-800"> + <footer className="w-full break-inside-avoid bg-neutral-800"> {/** yellow stripe */} - <div className="print:border-t-0 border-t-[1px] border-neutral-400 bg-yellow-400 p-[4px]"></div> + <div className="border-t-[1px] border-neutral-400 bg-yellow-400 p-[4px] print:border-t-0"></div> {/** Main footer area */} <div className="mx-auto flex max-w-5xl flex-col-reverse justify-between p-4 print:flex-row md:flex-row"> @@ -185,7 +185,7 @@ const Footer: NextPage = () => { </div> {/** Header and tabs */} - <div className="mx-auto print:inline-block flex flex-row divide-x divide-neutral-500 text-neutral-200 sm:px-4 md:mx-0"> + <div className="mx-auto flex flex-row divide-x divide-neutral-500 text-neutral-200 print:inline-block sm:px-4 md:mx-0"> <span className="print:hidden"> <FooterLabeledSection title="Quick Links"> <div className="flex flex-col space-y-2 pt-4"> @@ -204,7 +204,7 @@ const Footer: NextPage = () => { </FooterLabeledSection> </div> </div> - </div> + </footer> ); }; diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 6a34162..9d79c34 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -114,7 +114,7 @@ const NavBar = () => { const Header: NextPage = () => { return ( - <> + <header> {/** Main view */} <div id="logo-row" @@ -138,10 +138,7 @@ const Header: NextPage = () => { {/** Print view */} <div className="hidden flex-row justify-center print:block print:flex"> - <div - style={{ printColorAdjust: "exact" }} - className="rounded-xl border border-black p-2" - > + <div className="rounded-xl border border-black bg-yellow-100 p-2"> <Image alt="Ear listening" src="/listening-ear.svg" @@ -150,13 +147,13 @@ const Header: NextPage = () => { /> </div> <div id="header-title" className="grid w-48 place-items-center"> - <h1 className="text-center text-lg font-bold text-neutral-200"> + <h1 className="text-center text-lg font-bold text-neutral-400"> Center for Auditory Training Resources </h1> <span>auditorytraining.info</span> </div> </div> - </> + </header> ); }; diff --git a/src/components/ResourceTable.tsx b/src/components/ResourceTable.tsx index 51d8ce3..f6ce3a9 100644 --- a/src/components/ResourceTable.tsx +++ b/src/components/ResourceTable.tsx @@ -216,7 +216,7 @@ const ResourceEntry = ({ resource }: { resource: AuditoryResource }) => { }; return ( - <tr className="divide-x-[1px] divide-slate-400"> + <tr className="break-inside-avoid divide-x-[1px] divide-slate-400"> <td className="max-w-xs"> <ResourceInfo showMoreInfo resource={resource} /> </td> diff --git a/src/pages/resources/index.tsx b/src/pages/resources/index.tsx index 44902e0..e88d389 100644 --- a/src/pages/resources/index.tsx +++ b/src/pages/resources/index.tsx @@ -7,27 +7,28 @@ import { api } from "~/utils/api"; import { parseQueryData } from "~/utils/parseSearchForm"; import Footer from "~/components/Footer"; import Header from "~/components/Header"; +import { useState } from "react"; const Resources = () => { const router = useRouter(); + const [queryState, setQueryState] = useState(parseQueryData(router.query)); - const queryData = parseQueryData(router.query); - const currentPage = queryData.page; + const currentPage = queryState.page; const resourceQuery = api.auditoryResource.search.useQuery({ - skip: (queryData.page - 1) * queryData.perPage, - take: queryData.perPage, - ages: queryData.age, - platforms: queryData.platforms, - skill_levels: queryData.skill_levels, - skills: queryData.skills, + skip: (queryState.page - 1) * queryState.perPage, + take: queryState.perPage, + ages: queryState.age, + platforms: queryState.platforms, + skill_levels: queryState.skill_levels, + skills: queryState.skills, }); if (!resourceQuery.data) { return <></>; } - const totalPages = Math.ceil(resourceQuery.data.count / queryData.perPage); + const totalPages = Math.ceil(resourceQuery.data.count / queryState.perPage); return ( <> @@ -55,6 +56,14 @@ const Resources = () => { <section className="mt-auto"> <button onClick={() => { + const queryAllResources = { ...queryState }; + queryAllResources.page = 1; + queryAllResources.perPage = resourceQuery.data.count; + + setQueryState(queryAllResources); + window.onafterprint = () => { + setQueryState(parseQueryData(router.query)); + }; window.print(); }} className="inline-block space-x-2 rounded-md border border-neutral-900 bg-yellow-200 px-4 py-2 align-middle font-semibold shadow shadow-black/50 duration-200 ease-out hover:bg-yellow-300 hover:shadow-md print:hidden" @@ -65,7 +74,7 @@ const Resources = () => { </section> </div> <ResourceTable - resourcesPerPage={queryData.perPage} + resourcesPerPage={queryState.perPage} resources={resourceQuery.data.resources} totalPages={totalPages} query={router.query}