Poker ranges

.modal {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.8);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.modal img {
max-height: 90vh;
max-width: 90vw;
object-fit: contain;
}

 

const Modal = ({ image, onClose }) => (

{image.alt}

);

const App = () => {
const [selectedPosition, setSelectedPosition] = useState(‘all’);
const [selectedStack, setSelectedStack] = useState(‘all’);
const [selectedImage, setSelectedImage] = useState(null);

const positions = [‘UTG’, ‘UTG+1’, ‘LJ’, ‘HJ’, ‘CO’, ‘BTN’, ‘SB’];
const stacks = [’10bb’, ’15bb’, ’30bb’, ’40bb’, ’80bb’];

const ranges = positions.flatMap(position =>
stacks.map(stack => ({
id: `${position}-${stack}`,
position,
stack,
src: `RFI ${position} ${stack}.jpg`
}))
);

const filteredRanges = ranges.filter(range =>
(selectedPosition === ‘all’ || range.position === selectedPosition) &&
(selectedStack === ‘all’ || range.stack === selectedStack)
);

return (

Poker Opening Ranges

setSelectedPosition(e.target.value)}
>Alle posities{positions.map(pos => ({pos}))}

setSelectedStack(e.target.value)}
>Alle stacks{stacks.map(stack => ({stack}))}

{filteredRanges.map((range) => (

{range.position}

Stack: {range.stack}

{`${range.position} setSelectedImage(range)}
/>

))}

{selectedImage && (
setSelectedImage(null)}
/>
)}

);
};

const { useState } = React;
ReactDOM.render(, document.getElementById(‘root’));