import { type PlatformLink, type PaymentType, type AuditoryResource, type Skill, type SkillLevel } from '@prisma/client'; import { CurrencyDollarIcon, ArrowPathRoundedSquareIcon } from '@heroicons/react/24/solid'; 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, type Dispatch, type SetStateAction, useState } from 'react'; import { ChevronDownIcon } from '@heroicons/react/24/outline'; import { type ParsedUrlQuery, type ParsedUrlQueryInput } from 'querystring'; const ResourceEntry = ({resource}: {resource: AuditoryResource}) => { const ResourceInfo = ({resource}: {resource: AuditoryResource}) => { const PriceIcons = ({type}: {type: PaymentType}) => { switch(type) { case "FREE": { return (
free
) } case "SUBSCRIPTION_MONTHLY": {
} case "SUBSCRIPTION_WEEKLY": { return (
) } } } const PlatformInfo = ({platformLinks}: {platformLinks: PlatformLink[]}) => { const platformsStr = platformLinks.map((platformLink) => { return translateEnumPlatform(platformLink.platform); }).join(', '); return (

{platformsStr}

) } return (
{`${resource.name} more info

{resource.manufacturer}

{resource.name}

) } const ResourceDescription = ({description}: {description: string}) => { return (

{description}

) } 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; updateResultsPerPage: Dispatch>; } const PagesNavigation = ({query, currentPage, pageCount, resultsPerPage, updateResultsPerPage}: PagesNavigationProps) => { 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) => { updateResultsPerPage(parseInt(event.target.value)); }; return (

    Results Per Page

      {pages}
    ) } const ResourceTable = ({resources, currentPage, query}: {resources?: AuditoryResource[], currentPage: number, query?: ParsedUrlQuery}) => { const [resourcesPerPage, setResourcesPerPage] = useState(10); const totalPages = Math.ceil((resources?.length ?? 0) / resourcesPerPage); const pageResources = resources?.slice(resourcesPerPage*(currentPage-1), (resourcesPerPage*currentPage)) ?? []; const resourceElements = pageResources?.map((resource, index) => { return (); }) ?? []; return(
    {resourceElements}
    Resource Skills Description
    ); }; export default ResourceTable;