From be117665be87bbdc697652543fb49fbdfd853d4b Mon Sep 17 00:00:00 2001 From: Frank Delaguila Date: Sun, 6 Nov 2022 15:47:44 -0700 Subject: [PATCH] BIG styling changes/fixes. Additions like slight animations, etc --- components/modal.tsx | 26 ++++++++++-------- pages/index.tsx | 34 ++++++++++++++++++----- styles/globals.css | 65 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 19 deletions(-) diff --git a/components/modal.tsx b/components/modal.tsx index a3efb59..29761b2 100644 --- a/components/modal.tsx +++ b/components/modal.tsx @@ -1,3 +1,4 @@ +import { forwardRef, MutableRefObject, useEffect, useState } from "react"; import Image from "next/image"; import { Pie } from "react-chartjs-2"; import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js"; @@ -5,7 +6,6 @@ import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js"; ChartJS.register(ArcElement, Tooltip, Legend); import ClientOnlyPortal from "./ClientOnlyPortal"; -import { forwardRef, MutableRefObject, useEffect } from "react"; interface ModalProps { modalOpen: boolean @@ -14,6 +14,7 @@ interface ModalProps { } const Modal = forwardRef(({modalOpen, toggleModal, card}, ref) => { + const [randomQuote, setRandomQuote] = useState(""); const data = { labels: ["Power", "Toughness"], datasets: [ @@ -34,6 +35,7 @@ const Modal = forwardRef(({modalOpen, toggleModal, c }; useEffect(() => { + fetch('https://api.quotable.io/random').then( res => res.json() ).then( quote => setRandomQuote(`${quote.content} — ${quote.author}`)); if( (ref as MutableRefObject).current ) { (ref as MutableRefObject).current.scrollTo(0, 0); } @@ -48,17 +50,17 @@ const Modal = forwardRef(({modalOpen, toggleModal, c }`} > <> -
+
(({modalOpen, toggleModal, c }} >

- {card.flavor_text} + {card.flavor_text || randomQuote}

diff --git a/pages/index.tsx b/pages/index.tsx index f18f6b3..8a2eaf4 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -7,7 +7,19 @@ import { debounce } from 'lodash'; import Modal from '../components/modal'; -export default function Home() { +export async function getStaticProps(context) { + + const res = await fetch(`https://api.scryfall.com/cards/search?q=${encodeURIComponent('knight')}`); + const {data} = await res.json(); + + return { + props: { + initialCards: data + } + } +} + +export default function Home(props) { const [search, setSearch] = useState(''); const [selectedCard, setSelectedCard] = useState({}); @@ -43,10 +55,8 @@ export default function Home() { .catch( err => { console.log(err); setLoading(false); - if( err.code === 'not_found' ) { - setErrorMessage(err.details); - setError(true); - } + setErrorMessage(err.details); + setError(true); } ); } }; @@ -55,7 +65,6 @@ export default function Home() { useEffect(() => { invoke('greet', { name: 'World' }).then(console.log).catch(console.error); - return () => { debounceSearch.cancel(); } @@ -80,7 +89,18 @@ export default function Home() {
{ cards.length === 0 ? -
Please search for a card
+
+
+ {props.initialCards.map( (card: any) => + {`${card.name} + ).slice(0, 5) + } +
+

Please search for a card!

+
:
{loading && search !== "" ? diff --git a/styles/globals.css b/styles/globals.css index edf4b34..2d2f31b 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -42,6 +42,71 @@ top: 0; } +.search-placeholder .card-container > .card { + @apply rounded-md; + position: absolute; + width: 120px; + height: auto; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + transition: transform 0.2s ease-in-out; +} + +/* + CARD POSITIONING +*/ +.search-placeholder .card:nth-child(1) { + left: 50%; + transform: rotate(-2deg) translate(-95%, -55%); +} +.search-placeholder .card:nth-child(2) { + left: 50%; + transform: rotate(-1.2deg) translate(-85%, -55%); +} +.search-placeholder .card:nth-child(3) { + left: 55%; + transform: rotate(-1deg) translate(-90%, -55%); +} +.search-placeholder .card:nth-child(4) { + left: 60%; + transform: translate(-85%, -53%); +} +.search-placeholder .card:nth-child(5) { + left: 65%; + transform: rotate(2deg) translate(-80%, -50%); +} +/* + END: CARD POSITIONING +*/ + +/* + CARD POSITIONING ON HOVER OF CONTAINER +*/ +.card-container:hover .card:nth-child(1) { + left: 50%; + transform: rotate(-2deg) translate(-105%, -54%); +} +.card-container:hover .card:nth-child(2) { + left: 50%; + transform: rotate(-1.2deg) translate(-90%, -56%); +} +.card-container:hover .card:nth-child(3) { + left: 55%; + transform: rotate(-1deg) translate(-88%, -54%); +} +.card-container:hover .card:nth-child(4) { + left: 60%; + transform: translate(-82%, -55%); +} +.card-container:hover .card:nth-child(5) { + left: 65%; + transform: rotate(2deg) translate(-78%, -55%); +} +/* + END: CARD POSITIONING ON HOVER OF CONTAINER +*/ + .spinner { display: inline-block; width: 80px;