From add49d071d0a4967b98b20a6c800bc288e3598db Mon Sep 17 00:00:00 2001 From: "Elf M. Sternberg" Date: Wed, 16 Sep 2020 17:37:51 -0700 Subject: [PATCH] Final version, barring the critique and the peer review. This commit concludes most of the desired functionality: search, full-card, and a much better layout engine (mostly because someone else wrote it). Also included is a Dockerfile. --- Dockerfile | 6 + LICENSE.md | 355 ++++++++++++++++++++++++ Makefile | 7 +- README.md | 146 +++++++--- public/fonts/Metamorphous-Regular.ttf | Bin 0 -> 131708 bytes public/fonts/Metamorphous-Regular.woff2 | Bin 0 -> 35332 bytes src/App.scss | 27 +- src/App.tsx | 26 +- src/cards/Cards.tsx | 35 ++- src/cards/FullCard.tsx | 184 ++++++------ src/cards/Search.tsx | 40 +++ src/cards/types.ts | 1 + src/styles/_fonts.scss | 10 + 13 files changed, 693 insertions(+), 144 deletions(-) create mode 100644 Dockerfile create mode 100644 LICENSE.md create mode 100644 public/fonts/Metamorphous-Regular.ttf create mode 100644 public/fonts/Metamorphous-Regular.woff2 create mode 100644 src/cards/Search.tsx diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3f25c34 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM node:current-alpine +WORKDIR /code +ADD . /code +RUN yarn && yarn build +CMD [ "yarn", "run", "http-server", "build/" ] +EXPOSE 8080 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..cd44203 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,355 @@ +Mozilla Public License Version 2.0 +================================== + +### 1. Definitions + +**1.1. “Contributor”** + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +**1.2. “Contributor Version”** + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +**1.3. “Contribution”** + means Covered Software of a particular Contributor. + +**1.4. “Covered Software”** + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +**1.5. “Incompatible With Secondary Licenses”** + means + +* **(a)** that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or +* **(b)** that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +**1.6. “Executable Form”** + means any form of the work other than Source Code Form. + +**1.7. “Larger Work”** + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +**1.8. “License”** + means this document. + +**1.9. “Licensable”** + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +**1.10. “Modifications”** + means any of the following: + +* **(a)** any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or +* **(b)** any new file in Source Code Form that contains any Covered + Software. + +**1.11. “Patent Claims” of a Contributor** + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +**1.12. “Secondary License”** + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +**1.13. “Source Code Form”** + means the form of the work preferred for making modifications. + +**1.14. “You” (or “Your”)** + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, “control” means **(a)** the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or **(b)** ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + +### 2. License Grants and Conditions + +#### 2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +* **(a)** under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and +* **(b)** under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +#### 2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +#### 2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +* **(a)** for any code that a Contributor has removed from Covered Software; + or +* **(b)** for infringements caused by: **(i)** Your and any other third party's + modifications of Covered Software, or **(ii)** the combination of its + Contributions with other software (except as part of its Contributor + Version); or +* **(c)** under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +#### 2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +#### 2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +#### 2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +#### 2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + + +### 3. Responsibilities + +#### 3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +#### 3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +* **(a)** such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +* **(b)** You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +#### 3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +#### 3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +#### 3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + + +### 4. Inability to Comply Due to Statute or Regulation + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: **(a)** comply with +the terms of this License to the maximum extent possible; and **(b)** +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + + +### 5. Termination + +**5.1.** The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated **(a)** provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and **(b)** on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +**5.2.** If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + + +### 6. Disclaimer of Warranty + +> Covered Software is provided under this License on an “as is” +> basis, without warranty of any kind, either expressed, implied, or +> statutory, including, without limitation, warranties that the +> Covered Software is free of defects, merchantable, fit for a +> particular purpose or non-infringing. The entire risk as to the +> quality and performance of the Covered Software is with You. +> Should any Covered Software prove defective in any respect, You +> (not any Contributor) assume the cost of any necessary servicing, +> repair, or correction. This disclaimer of warranty constitutes an +> essential part of this License. No use of any Covered Software is +> authorized under this License except under this disclaimer. + +### 7. Limitation of Liability + +> Under no circumstances and under no legal theory, whether tort +> (including negligence), contract, or otherwise, shall any +> Contributor, or anyone who distributes Covered Software as +> permitted above, be liable to You for any direct, indirect, +> special, incidental, or consequential damages of any character +> including, without limitation, damages for lost profits, loss of +> goodwill, work stoppage, computer failure or malfunction, or any +> and all other commercial damages or losses, even if such party +> shall have been informed of the possibility of such damages. This +> limitation of liability shall not apply to liability for death or +> personal injury resulting from such party's negligence to the +> extent applicable law prohibits such limitation. Some +> jurisdictions do not allow the exclusion or limitation of +> incidental or consequential damages, so this exclusion and +> limitation may not apply to You. + + +### 8. Litigation + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + + +### 9. Miscellaneous + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + + +### 10. Versions of the License + +#### 10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +#### 10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +#### 10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +## Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +## Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/Makefile b/Makefile index 23fd9c7..efcdfd9 100644 --- a/Makefile +++ b/Makefile @@ -21,9 +21,14 @@ install: ./node_modules/.yarn-integrity ## Install any yarn packages necessary build: ./build/asset-manifest.json ## Build the package if it is out of date .PHONY: serve -serve: build/asset-manifest.json ## Do everything necessary to get up and running +serve: build/asset-manifest.json ## Do everything necessary to run an optimized build yarn run http-server build/ .PHONY: dev dev: ./node_modules/.yarn-integrity ## Run the server in "dev" mode, with hot reload yarn start + +.PHONY: dockerize +dockerize: ## Generate a docker image with an optimized build and a simple fileserver + docker build --tag elderscrolling:1.0 . + diff --git a/README.md b/README.md index e24a263..ea226d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Elder Scroll Display +# Elder Scroll: Legends Coding Challenge + +Don't you love homework? ## Synopsis @@ -17,10 +19,10 @@ set out in the Code Challenge are: - ✓ As the user scrolls down the page, load and append additional cards using "infinite scroll." - ✓ Retrieve additional pages of results as-needed but do not load more than 20 cards with each request. -- Allow the user to search for cards by Name. +- ✓ Allow the user to search for cards by Name. - ✓ Use modern open-source web technologies to implement your solution (React, Backbone, Angular, Vue, Underscore, etc.). -- Provide instructions for prerequisites, installation, and application setup and build in a +- ✓ Provide instructions for prerequisites, installation, and application setup and build in a README file. ### Evaluation Criteria @@ -40,10 +42,12 @@ set out in the Code Challenge are: - Documentation: https://docs.elderscrollslegends.io/, https://docs.elderscrollslegends.io/#api_v1cards_list -NOTE: The Elder Scrolls Legends API is a free, third-party service built -by an independent developer; it is not affiliated with Highspot, or with -the intellectual property owners of Elder Scrolls Legends. Please help -us use it responsibly. +The API includes this note: + +> NOTE: The Elder Scrolls Legends API is a free, third-party service +> built by an independent developer; it is not affiliated with Highspot, +> or with the intellectual property owners of Elder Scrolls +> Legends. Please help us use it responsibly. ## Initial impressions @@ -69,35 +73,113 @@ theme: white on black, with a paper texture from my design library desaturated, darkened, and rendered a seamless tile, using the Google 'Marcellus' font, which kinda sorta looks Tolkeinesque. -## Progress +## Requirements -It looks pretty. +The following are all you need to have installed in order to get +started: -![ElderScrolling](./ElderScrolling.png) +- NodeJS >= 10.0 +- Yarn >= 1.18 +- Git >= 2.0 -Criticism: "Cards" is doing too much, and not enough. It would make -more sense to have a moving window, showing no more than what it would -take to show the user what is expected at that moment, with the ability -to load high and low, keeping only what the user is _looking at_ in the -DOM tree. +Fetch the latest version from the git repository (this repository uses +the new "not master" terminology, so it may not be immediately visible +until you checkout the 'canon' branch), then install any prerequisites. -Proposal: Cards needs a CardCollection proxy object, which the Cards view -object (personal convention: TSX files are named for what they show, -semantically; TS files may be suffixed with "Model" or "Collection", -a'la Backbone, to seperate them from the views, if needed; "Model" -objects are very rarely needed) taps it as the user moves up and down; -the IntersectionObserver tool would be pretty good for this; and if the -proxy actually _cached_ the fields it had already seen, it wouldn't be -slow at all. +Assuming you have GNU Make installed: -The proxy object could also support the search feature by keeping two -collections: one of the "whole" set, and one of the "last search" set; -the proxy could swap between them as needed. +``` shellsession +$ git clone https://git.elfsternberg.com/elf/elder_scrolling +$ cd elder_scrolling +$ git checkout canon +$ make serve +``` + +If you do NOT have GNU Make installed: + +``` shellsession +$ git clone https://git.elfsternberg.com/elf/elder_scrolling +$ cd elder_scrolling +$ git checkout canon +$ yarn +$ yarn build +$ yarn run http-server build/ +``` + +In both of the above, the server will be available on port 8080. + +To run in dev mode: + +``` shellsession +$ git clone https://git.elfsternberg.com/elf/elder_scrolling +$ cd elder_scrolling +$ git checkout canon +$ yarn +$ yarn server +``` + +The server will be available on port 3000. + +If you have docker installed, you may run the app this way: + +``` shellsession +$ git clone https://git.elfsternberg.com/elf/elder_scrolling +$ cd elder_scrolling +$ git checkout canon +$ docker build --tag elderscrolling:1.0 . +$ docker run --publish 8080:8080 --name elderscrolling --detach elderscrolling:1.0 +``` + +The server will be available on port 8080. To stop the docker session, +remove it from the server, and clean up your disk space afterward: + +``` shellsession +$ docker kill elderscrolling +$ docker rm elderscrolling +$ docker rmi elderscrolling:1.0 +``` + +Note that this will not remove the node-alpine image on top of which +elderscrolling is build. + +## Observations + +This was a lot of fun. I don't know how "cheating" it was to use the +react-grid-layout library, or react-modal, but I'm always glad to let +the professionals do the work. Working "around" the way hooks really, +really want to avoid expensive paints, in order to get the search +feature working, was a lesson I know I've had before, but it always +frustrates me when I come across it. + +There are lot of other things that could be done with the app, but this +is "good enough" for now without throwing something like Semantic or +Material at it. It's possible to search on fields other than `name`, +for example, and it would be nifty to be able to, say, see all the +Unique cards, or all the Creature cards, and so forth. That wasn't in +the requirements, and I've given you folks 8 hours already. + +That may seem like a lot for such a minor project, but it's been awhile +since I last worked with React at this level, and it's also been awhile +since I got Emacs up and running with a proper JSX back-end. The LSP +server is pretty good, but there are still some rough edges. Using +`prettier` a lot, and setting the code into `strict` as much as +possible, was as helpful as always. + +I think I'm going to take apart the scrolling library I used. It's a +native JS application with a React wrapper, rather than a full-on React +app "written in React," and I feel that there are lessons inside it I +could use. + +## LICENSE + +The Elder Scrolls, The Elder Scrolls: Legends, ZeniMax, Bethesda, +Bethesda Softworks and related logos are registered trademarks or +trademarks of ZeniMax Media Inc. This product is not produced, endorsed, +supported, or affiliated with ZeniMax Media Inc. + +The original software contained in this repository is copyright [Kenneth +M. "Elf" Sternberg](https://elfsternberg.com) (c) 2020 as is licensed +with the Mozilla Public License vers. 2.0. A copy of the license file is +included in the root folder. -Enhancement: Well, it could use a "zoom" feature with a nice overlay. -It might even be lovely to have a second page with all the things I -haven't shown, like attributes, subtype, rarity (not, not the pony), -or keywords. -Enhancement: It is possible to search based on set, attributes, and so -forth, so a sidebar with those as filters would also be kinda cool. diff --git a/public/fonts/Metamorphous-Regular.ttf b/public/fonts/Metamorphous-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a778e73e9135972904df83b88a0a8a09f2bbb6d0 GIT binary patch literal 131708 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 literal 0 HcmV?d00001 diff --git a/public/fonts/Metamorphous-Regular.woff2 b/public/fonts/Metamorphous-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e246e69891c8179be7013a4ac99fe74ee278c7ce GIT binary patch literal 35332 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 sK8WUSvfXUMNL td { padding-right: 2rem; } -.fullcard tr td:nth-child(3) { - padding-left: 8rem; +.fullcard .content { + display: flex; + flex-direction: row; + flex-wrap: wrap; + + > div { + width: 32%; + } } - body * { font-family: "Marcellus"; } @@ -41,6 +46,7 @@ header { flex-wrap: wrap; flex-direction: row; justify-content: space-between; + align-items: baseline; width: 100%; min-height: 64px; @@ -54,6 +60,7 @@ header { margin-left: 15px; h1 { + font-family: "Metamorphous"; text-shadow: 0 0 2px rgba(252, 252, 252, 0.8); font-weight: 400; font-size: 4.6rem; @@ -97,6 +104,18 @@ header { text-align: center; } +.searchform { + label, input { + border-radius: 8px; + display: inline-block; + margin-right: 1.0rem; + + &:last-child { + margin-right: 0; + } + } +} + #page-bottom { min-height: 4rem; } diff --git a/src/App.tsx b/src/App.tsx index 8fff071..67a2f80 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,22 +1,40 @@ -import React from "react"; +import * as React from "react"; import "./App.scss"; import { Cards } from "./cards/Cards"; +import { SearchBox } from "./cards/Search"; + +const { useState } = React; + +const PAGE_SIZE = 20; +const firstUrl = "https://api.elderscrollslegends.io/v1/cards"; + +const buildUrl = (searchTerm: string) => { + const querySize = `pageSize=${PAGE_SIZE}`; + if (searchTerm === "") { + return firstUrl + "?" + querySize; + } + + const codedSearchTerm = searchTerm.trim().replace(/\s+/g, "%20"); + return firstUrl + `?name=${codedSearchTerm}&${querySize}`; +}; function App() { + const [searchTerm, setSearchTerm] = useState(""); + return (
-

The Elder Scrolls

+

Elder Scroll Legends

-

Search goes here

+
- +
); diff --git a/src/cards/Cards.tsx b/src/cards/Cards.tsx index d18cd95..e2f1f6c 100644 --- a/src/cards/Cards.tsx +++ b/src/cards/Cards.tsx @@ -1,8 +1,7 @@ import * as React from "react"; -import { useState, useEffect, useRef } from "react"; import { Loading } from "./Loading"; import { Card } from "./Card"; -import { JustifiedLayout, GridLayout } from "@egjs/react-infinitegrid"; +import { GridLayout } from "@egjs/react-infinitegrid"; import ReactModal from "react-modal"; import { FullCard, fullcardStyles } from "./FullCard"; import { @@ -12,41 +11,49 @@ import { CardStateHandler } from "./types"; -const PAGE_SIZE = 20; +const { useState, useCallback, useEffect } = React; -const firstUrl = `https://api.elderscrollslegends.io/v1/cards?pageSize=${PAGE_SIZE}&page=1`; +export const Cards = ({ rootUrl }: { rootUrl: string }) => { + const emptyCards: CardState = { + cards: [], + first: rootUrl, + next: rootUrl, + maxCards: -1 + }; -const emptyCards: CardState = { - cards: [], - next: firstUrl, - maxCards: -1 -}; - -export const Cards = () => { const [cards, setCards]: CardStateHandler = useState(emptyCards); const [loading, setLoading]: [boolean, Function] = useState(false); const [currentCard, setCurrentCard]: [CardProps | null, Function] = useState( null ); - const loadItems = () => { + // Good GRIEF, the things we have to do convince React to actually + // draw sometimes. + useEffect(() => { + if (cards.first !== rootUrl) { + setCards(emptyCards); + } + }, [cards.first, rootUrl, emptyCards]); + + // Debounce that annoying loopback. + const loadItems = useCallback(() => { if (cards.next === null || cards.cards.length === cards.maxCards) { return; } - setLoading(true); const request = new Request(cards.next); fetch(request) .then(response => response.json()) .then((data: CardRequestProps) => { setCards({ + ...cards, cards: [...cards.cards, ...data.cards], next: data._links && data._links.next ? data._links.next : null, maxcards: data._totalCount }); setLoading(false); }); - }; + }, [cards]); const loadMoreCards = (options: any) => { if (options.startLoading !== null) { diff --git a/src/cards/FullCard.tsx b/src/cards/FullCard.tsx index b83e606..03de283 100644 --- a/src/cards/FullCard.tsx +++ b/src/cards/FullCard.tsx @@ -15,97 +15,103 @@ export const FullCard = ({ card }: { card: CardProps | null }) => { return (
- {card.name}
-

{card.name}

-

{card.text}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Type - {card.type} - Cost - {card.cost}
- Subtypes - {card.subtypes.join(", ")} - Power - {card.power}
- Rarity - {card.rarity} - Health - {card.health}
- Set - {card.set.name} - Soul Summon - {card.soulSummon}
- Attributes - {card.attributes.join(", ")} - Soul Trap - {card.soulTrap}
- Keywords - {card.keywords} -
- - - - - - - - - - - - -
- Set Name: - {card.set.name}
- Type: - {card.type}
- {card.collectible ?

This card is considered collectible.

: ""} - {card.unique ? ( -

- This card is unique. Unique cards may only be used once per deck. -

- ) : ( - "" - )} +
+ {card.name} +

{card.name}

+

{card.text}

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Type + {card.type}
+ Subtypes + {card.subtypes ? card.subtypes.join(", ") : ""}
+ Set Name: + {card.set.name}
+ Rarity + {card.rarity}
+ Set + {card.set.name}
+ Attributes + {card.attributes.join(", ")}
+ Keywords + {card.keywords}
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Cost + {card.cost}
+ Power + {card.power}
+ Health + {card.health}
+ Soul Summon + {card.soulSummon}
+ Soul Trap + {card.soulTrap}
+
+ {card.collectible ?

This card is considered collectible.

: ""} + {card.unique ? ( +

This card is unique. Unique cards may only be used once per deck.

+ ) : ( + "" + )}
); }; diff --git a/src/cards/Search.tsx b/src/cards/Search.tsx new file mode 100644 index 0000000..0888036 --- /dev/null +++ b/src/cards/Search.tsx @@ -0,0 +1,40 @@ +import * as React from "react"; + +const { useState } = React; + +interface SearchBoxProps { + initialValue: string; + onSearch: Function; +} + +type ChangeEvent = React.ChangeEvent; +type ClickEvent = React.MouseEvent; + +export const SearchBox = ({ + initialValue, + onSearch +}: SearchBoxProps): JSX.Element => { + const [value, setValue] = useState(initialValue || ""); + + const onChange = (event: ChangeEvent) => { + setValue(event.target.value); + }; + + const onClick = (_event: ClickEvent) => { + onSearch(value); + }; + + const onClear = (_event: ClickEvent) => { + setValue(""); + onSearch(""); + }; + + return ( +
+ + + + +
+ ); +}; diff --git a/src/cards/types.ts b/src/cards/types.ts index 840bbf7..6ac199c 100644 --- a/src/cards/types.ts +++ b/src/cards/types.ts @@ -38,6 +38,7 @@ export interface CardRequestProps { export interface CardState { cards: CardProps[]; + first: string | null; next: string | null; maxCards: number; } diff --git a/src/styles/_fonts.scss b/src/styles/_fonts.scss index c257074..f79e580 100644 --- a/src/styles/_fonts.scss +++ b/src/styles/_fonts.scss @@ -9,3 +9,13 @@ $unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U unicode-range: $unicode-range; } + +@font-face { + font-family: 'Metamorphous'; + font-style: normal; + font-weight: 400; + src: url("/fonts/Metamorphous-Regular.woff2") format("woff"), + url("/fonts/Metamorphous-Regular.ttf") format("truetype"); + unicode-range: $unicode-range; +} +