Initial commit
This commit is contained in:
parent
b421869487
commit
534b0f9356
11
src/App.css
11
src/App.css
@ -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;
|
||||||
|
@ -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
45
src/Gallery.tsx
Normal 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
13
src/GalleryCard.tsx
Normal 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;
|
@ -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')
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user