diff --git a/components/ClientOnlyPortal.tsx b/components/ClientOnlyPortal.tsx index d28aa2a..eb6af5e 100644 --- a/components/ClientOnlyPortal.tsx +++ b/components/ClientOnlyPortal.tsx @@ -1,4 +1,4 @@ -import { useRef, useEffect, useState, ReactNode } from 'react'; +import { useRef, useEffect, useState, ReactNode, MutableRefObject } from 'react'; import { createPortal } from 'react-dom'; interface Props { @@ -7,7 +7,7 @@ interface Props { } export default function ClientOnlyPortal({ children, selector }: Props) { - const ref = useRef(); + const ref = useRef(null); const [mounted, setMounted] = useState(false); useEffect(() => { diff --git a/components/modal.tsx b/components/modal.tsx index 7e1397d..616139c 100644 --- a/components/modal.tsx +++ b/components/modal.tsx @@ -1,14 +1,88 @@ -import { createPortal } from "react-dom"; +import Image from "next/image"; +import { Pie } from "react-chartjs-2"; +import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js"; + +ChartJS.register(ArcElement, Tooltip, Legend); import ClientOnlyPortal from "./ClientOnlyPortal"; +import { forwardRef, MutableRefObject, Ref, RefObject, useEffect } from "react"; + +interface ModalProps { + modalOpen: boolean + toggleModal: Function + card: any +} + +const Modal = forwardRef(({modalOpen, toggleModal, card}, ref) => { + const data = { + labels: ["Power", "Toughness"], + datasets: [ + { + label: "Card Power and Toughness", + data: [card.power, card.toughness], + backgroundColor: [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)" + ], + borderColor: [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)" + ], + borderWidth: 1, + }, + ] + }; + + useEffect(() => { + if( (ref as MutableRefObject).current ) { + (ref as MutableRefObject).current.scrollTo(0, 0); + } + }, [card]) -export default function Modal({open}: { open: Function }) { return ( -
- Hello - +
+
+
+ {card && + {`${card.name}} +
+
+

{card?.name}

+

{card.oracle_text}

+

{card.flavor_text}

+
+ null + } + } + }} /> +
+
+
+
- ); -} \ No newline at end of file + ); +}); + +export default Modal; diff --git a/package-lock.json b/package-lock.json index 3ecf5e9..2200f29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,11 @@ "@types/node": "18.11.9", "@types/react": "18.0.24", "@types/react-dom": "18.0.8", + "chart.js": "^3.9.1", "lodash": "^4.17.21", "next": "13.0.1", "react": "18.2.0", + "react-chartjs-2": "^4.3.1", "react-dom": "18.2.0", "typescript": "4.8.4" }, @@ -649,6 +651,11 @@ } ] }, + "node_modules/chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1311,6 +1318,15 @@ "node": ">=0.10.0" } }, + "node_modules/react-chartjs-2": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz", + "integrity": "sha512-5i3mjP6tU7QSn0jvb8I4hudTzHJqS8l00ORJnVwI2sYu0ihpj83Lv2YzfxunfxTZkscKvZu2F2w9LkwNBhj6xA==", + "peerDependencies": { + "chart.js": "^3.5.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -1905,6 +1921,11 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==" }, + "chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2335,6 +2356,12 @@ "loose-envify": "^1.1.0" } }, + "react-chartjs-2": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz", + "integrity": "sha512-5i3mjP6tU7QSn0jvb8I4hudTzHJqS8l00ORJnVwI2sYu0ihpj83Lv2YzfxunfxTZkscKvZu2F2w9LkwNBhj6xA==", + "requires": {} + }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", diff --git a/package.json b/package.json index f914238..fb7f995 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,11 @@ "@types/node": "18.11.9", "@types/react": "18.0.24", "@types/react-dom": "18.0.8", + "chart.js": "^3.9.1", "lodash": "^4.17.21", "next": "13.0.1", "react": "18.2.0", + "react-chartjs-2": "^4.3.1", "react-dom": "18.2.0", "typescript": "4.8.4" }, diff --git a/pages/_document.tsx b/pages/_document.tsx index b855d0f..3105ab4 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -3,13 +3,11 @@ import { Html, Head, Main, NextScript } from 'next/document'; export default function Document() { return ( - - Magic Card Valuator - +
{/* Here we will mount our modal portal */} -