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 ? (
more info
) : (
)}
{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 (
);
};
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 ? (
) : (
<>>
)}
);
};
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 (
);
};
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}
Resource
|
Skills
|
Description
|
{resourceElements}
{resources && resources.length > 4 ? (
) : undefined}
);
};
export default ResourceTable;