Initial commit

This commit is contained in:
Dominic Zimmer 2020-10-22 16:56:16 +02:00
parent b421869487
commit 534b0f9356
5 changed files with 75 additions and 7 deletions

View File

@ -1,5 +1,7 @@
.App { body {
text-align: center; margin: 8px;
padding: 10px;
background-color: #1e1e1e;
} }
.App-logo { .App-logo {
@ -13,6 +15,11 @@
} }
} }
.img-card {
width: 95px;
padding: 0px 1px 0px 1px;
}
.App-header { .App-header {
background-color: #282c34; background-color: #282c34;
min-height: 100vh; min-height: 100vh;

View File

@ -1,14 +1,17 @@
import React from 'react'; import React from 'react';
import logo from './logo.svg'; import logo from './logo.svg';
import './App.css'; import './App.css';
import BoldText from './BoldText';
function App() {
const App : React.FC<{}> = () => {
return ( return (
<div className="App"> <div className="App">
<header className="App-header"> <header className="App-header">
<img src={logo} className="App-logo" alt="logo" /> <img src={logo} className="App-logo" alt="logo" />
<p> <p>
Edit <code>src/App.tsx</code> and save to reload. Edit <code>src/App.tsx</code> and <BoldText></BoldText> to reload.
</p> </p>
<a <a
className="App-link" className="App-link"
@ -21,6 +24,6 @@ function App() {
</header> </header>
</div> </div>
); );
} };
export default App; export default App;

45
src/Gallery.tsx Normal file
View File

@ -0,0 +1,45 @@
import React, { Fragment, useEffect, useState } from 'react';
import './App.css';
import GalleryCard from './GalleryCard';
const defaultSet: any = (size: number) => {
const newSet = new Set<number>();
for (var i: number = 1; i <= size; i++) newSet.add(i);
return newSet;
}
const loadSet: (() => Set<number>) = () => {
var href: string = document.location.href;
var afterHref: string = href.indexOf("#") === -1 ? "" : href.substring(href.indexOf("#") + 1);
var numbers = afterHref === "" ? [] : afterHref.split(",").filter(s => s !== "").map(i => parseInt(i));
return new Set<number>([...numbers]);
};
const Gallery: React.FC<{ size: number }> = ({ size }) => {
const originalSet: Set<number> = defaultSet(size);
const [collection, setCollection] = useState(loadSet());
function addToCollection(toRemove: number) {
return setCollection(previousState => new Set<number>([...Array.from(previousState), toRemove]));
}
function getStateString() {
var s = Array.from(collection).sort((a, b) => a - b).join(",")
return s;
}
useEffect(() => {
var href = document.location.href;
var pureHref = (href.indexOf("#") === -1) ? href : href.substring(0, href.indexOf("#"));
document.location.href = `${pureHref}#${getStateString()}`;
});
return (
<Fragment>
{Array.from(originalSet).filter(element => !collection.has(element)).map((value, key, theset) =>
<GalleryCard id={value} key={value} clickHandler={(e: React.MouseEvent) => addToCollection(value)} />
)}
</Fragment>)
};
export default Gallery;

13
src/GalleryCard.tsx Normal file
View File

@ -0,0 +1,13 @@
import React from 'react';
import './App.css';
const GalleryCard: React.FC<{ id: number, clickHandler: any }> = ({ id, clickHandler }) => {
return <img
onClick={clickHandler}
className="img-card"
alt={`Pokemon card with number ${String(id)}`}
src={`https://dominic.leafbla.de/cards/res/${String(id).padStart(3, '0')}.jpg`}
/>;
};
export default GalleryCard;

View File

@ -1,12 +1,12 @@
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import './index.css'; import './index.css';
import App from './App'; import Gallery from './Gallery';
import * as serviceWorker from './serviceWorker'; import * as serviceWorker from './serviceWorker';
ReactDOM.render( ReactDOM.render(
<React.StrictMode> <React.StrictMode>
<App /> <Gallery size={150}/>
</React.StrictMode>, </React.StrictMode>,
document.getElementById('root') document.getElementById('root')
); );