diff --git a/src/components/notice.tsx b/src/components/notice.tsx new file mode 100644 index 0000000..e0db851 --- /dev/null +++ b/src/components/notice.tsx @@ -0,0 +1,17 @@ +import { ExclamationTriangleIcon } from "@heroicons/react/24/outline" + +export const ErrorNotice = ({header, body, icon}: {header?: string, body?: string, icon?: boolean}) => { + return <> + {header ? ( + <div className="rounded-xl mx-auto w-fit px-4 py-4 bg-red-100 border-red-300 border text-center font-semibold text-red-600"> + {icon ? ( + <div className="mx-auto grid place-items-center"> + <ExclamationTriangleIcon className="w-10 h-10" /> + </div> + ) : undefined} + <span className="text-lg font-semibold text-red-500">{header}</span> + {body ? (<p className="font-normal text-stone-600 text-sm mx-8 my-2">{body}</p>) : undefined} + </div> + ) : undefined} + </> +} \ No newline at end of file diff --git a/src/pages/resources/index.tsx b/src/pages/resources/index.tsx index d27cb1d..dbcb3f9 100644 --- a/src/pages/resources/index.tsx +++ b/src/pages/resources/index.tsx @@ -8,6 +8,7 @@ import { parseQueryData } from "~/utils/parseSearchForm"; import Footer from "~/components/Footer"; import Header from "~/components/Header"; import { LoadingBarChart } from "~/components/LoadingBarChart"; +import { ErrorNotice } from "~/components/notice"; const Resources = () => { const router = useRouter(); @@ -31,9 +32,16 @@ const Resources = () => { const printLink = `${router.route}/print?${printQueryStr}`; const ConditionalTable = () => { - if (!resourceQuery.data) { + if (resourceQuery.isLoading) { return <LoadingBarChart width={200} height={200} />; } + + if (!resourceQuery.data || resourceQuery.isError) { + return <div className="my-28"> + <ErrorNotice icon header="Unable to pull available resources. Please try again." + body="If this issue persists, please contact a site administrator" /> + </div> + } const totalPages = Math.ceil(resourceQuery.data.count / queryData.perPage);