import { type PlatformLink, type AuditoryResource, type Skill, type SkillLevel, type Manufacturer, } from "@prisma/client"; import { ClipboardDocumentListIcon } from "@heroicons/react/24/outline"; import Image from "next/image"; import Link from "next/link"; import { translateEnumPlatform, translateEnumSkill } from "~/utils/enumWordLut"; import { type ChangeEvent } from "react"; import { ChevronDownIcon } from "@heroicons/react/24/outline"; import { type ParsedUrlQuery, type ParsedUrlQueryInput } from "querystring"; import { useRouter } from "next/router"; import { PriceIcon } from "~/prices/Icons"; export const ResourceInfo = ({ resource, showMoreInfo, }: { resource: AuditoryResource; showMoreInfo?: boolean; }) => { const PlatformInfo = ({ platformLinks, }: { platformLinks: PlatformLink[]; }) => { const platformsStr = platformLinks .map((platformLink) => { return translateEnumPlatform(platformLink.platform); }) .join(", "); return

{platformsStr}

; }; return (
{showMoreInfo ? (
{`${resource.name} more info
) : (
{`${resource.name}
)}

{resource.manufacturer?.name}

{resource.name}

); }; export const ResourceDescription = ({ manufacturer, description, }: { manufacturer: null | Manufacturer; description: string; }) => { const ImportantNotice = () => { if (!manufacturer) { return <>; } if (!manufacturer.required && !manufacturer.notice) { return <>; } return (

IMPORTANT

{manufacturer.notice ? manufacturer.notice : `This resource requires the patient to have a ${manufacturer.name} device`}

); }; return (

{description}

); }; const ResourceEntry = ({ resource }: { resource: AuditoryResource }) => { const ResourceSkills = ({ skills, skillLevels, }: { skills: Skill[]; skillLevels: SkillLevel[]; }) => { const SkillRanking = ({ skillLevels }: { skillLevels: SkillLevel[] }) => { return (
{skillLevels.includes("BEGINNER") ? (

Beginner

) : undefined} {skillLevels.includes("INTERMEDIATE") ? (

Intermediate

) : undefined} {skillLevels.includes("ADVANCED") ? (

Advanced

) : undefined}
); }; const Skill = ({ label }: { label: string }) => { return (
  • {label}

  • ); }; const skillsComponents = skills.map((skill, index) => { return ; }); return (
    {skillsComponents.length > 0 ? (
      {skillsComponents}
    ) : ( <> )}
    ); }; return ( ); }; interface PagesNavigationProps { query?: ParsedUrlQuery; currentPage: number; pageCount: number; resultsPerPage: number; } const PagesNavigation = ({ query, currentPage, pageCount, resultsPerPage, }: PagesNavigationProps) => { const router = useRouter(); const PageButton = ({ number }: { number: number }) => { const redirectQueryData: ParsedUrlQueryInput = { ...query }; redirectQueryData.page = number; return (
  • {number}
  • ); }; const pages = Array.from(Array(pageCount).keys()).map((pageNumber) => { return ; }); const handleChange = (event: ChangeEvent) => { if (!query) { router .push({ pathname: "/resources", query: { perPage: event.target.value, }, }) .catch((reason) => { console.error(reason); }); return; } query["perPage"] = event.target.value; router .push({ pathname: "/resources", query: { ...query, }, }) .catch((reason) => { console.error(reason); }); }; return (

    Results Per Page

      {pages}
    ); }; const ResourceTable = ({ resources, resourcesPerPage, currentPage, totalPages, query, showPageBar = true, }: { resources: AuditoryResource[]; resourcesPerPage: number; currentPage: number; totalPages: number; query: ParsedUrlQuery; showPageBar?: boolean; }) => { const resourceElements = resources.map((resource, index) => { return ; }) ?? []; return (
    {showPageBar ? ( ) : undefined} {resourceElements}
    Resource Skills Description
    {resources && resources.length > 4 ? ( ) : undefined}
    ); }; export default ResourceTable;