6 Commits

Author SHA1 Message Date
487f5f854e Updated version to 0.3.1 2023-11-16 02:42:04 +01:00
9f189a9a44 Patched shuffle function to copy array
The inline implementation of shuffle caused React not to detect
changes, because the reference didn't change. Copying the array
with slice(), thus changing the reference, fixed the issue.
2023-11-16 02:21:52 +01:00
69661a3b12 Changed version number to 0.3.0 2023-11-05 14:12:33 +01:00
175c6c6086 Made Bingo controls responsive 2023-11-05 14:11:10 +01:00
ddb7f41fd0 Switched active Bingo items to accent color 2023-11-05 13:45:55 +01:00
75d6ceacb0 Made Bingo resize with screen size 2023-11-05 13:26:41 +01:00
5 changed files with 8 additions and 7 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.2.1", "version": "0.3.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.2.1", "version": "0.3.1",
"dependencies": { "dependencies": {
"next": "14.0.1", "next": "14.0.1",
"react": "^18", "react": "^18",

View File

@@ -1,6 +1,6 @@
{ {
"name": "buzzword-bingo", "name": "buzzword-bingo",
"version": "0.2.1", "version": "0.3.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",

View File

@@ -13,7 +13,7 @@ export default function Bingo({size, items}: Props){
rows[i] = activeItems.slice(i * size, (i + 1) * size); rows[i] = activeItems.slice(i * size, (i + 1) * size);
} }
return( return(
<table className='w-1/2 table bg-primary text-primary-content m-auto'> <table className='w-1/2 table table-xs sm:table-sm md:table-md bg-primary text-primary-content m-auto'>
<tbody> <tbody>
{rows.map((item, index) => <BingoRow key={index} items={item}/>)} {rows.map((item, index) => <BingoRow key={index} items={item}/>)}
</tbody> </tbody>

View File

@@ -4,6 +4,7 @@ import React from 'react'
import Bingo from './bingo' import Bingo from './bingo'
function FisherYatesShuffle(array:string[]):string[]{ function FisherYatesShuffle(array:string[]):string[]{
array = array.slice();
for(let i = array.length - 1; i > 0; i--){ for(let i = array.length - 1; i > 0; i--){
const j = Math.floor(Math.random() * (i + 1)); const j = Math.floor(Math.random() * (i + 1));
const temp = array[i]; const temp = array[i];
@@ -23,13 +24,13 @@ export default function BingoController(){
<div className="w-3/4 flex flex-col m-auto gap-4"> <div className="w-3/4 flex flex-col m-auto gap-4">
<Bingo size={size} items={items}/> <Bingo size={size} items={items}/>
<form className="w-1/3 m-auto"> <form className="w-1/3 m-auto">
<input type="range" min={3} max={5} value={size} className="range range-secondary" step={1} onChange={({target:{value:s}}) => setSize(+s)}/> <input type="range" min={3} max={5} value={size} className="range range-xs sm:range-sm md:range-md range-secondary" step={1} onChange={({target:{value:s}}) => setSize(+s)}/>
<div className="w-full flex justify-between text-sm px-2 mb-2"> <div className="w-full flex justify-between text-sm px-2 mb-2">
<span>3x3</span> <span>3x3</span>
<span>4x4</span> <span>4x4</span>
<span>5x5</span> <span>5x5</span>
</div> </div>
<a className="btn btn-secondary" onClick={() => setItems(FisherYatesShuffle(buzzwords))}>Regenerate</a> <a className="btn btn-xs sm:btn-sm md:btn-md btn-secondary" onClick={() => setItems(FisherYatesShuffle(buzzwords))}>Regenerate</a>
</form> </form>
</div> </div>
{sizeError && <div className="alert alert-warning"><svg xmlns="http://www.w3.org/2000/svg" className="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><span>Warning: Mismatch between item count and size</span></div>} {sizeError && <div className="alert alert-warning"><svg xmlns="http://www.w3.org/2000/svg" className="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg><span>Warning: Mismatch between item count and size</span></div>}

View File

@@ -9,6 +9,6 @@ export default function BingoItem({text}: Props){
const [clicked, setClicked] = React.useState(false); const [clicked, setClicked] = React.useState(false);
return( return(
<td><a className={clsx("btn btn-ghost w-full", {"bg-primary-focus":clicked})} onClick={() => setClicked(!clicked)}>{text}</a></td> <td><a className={clsx("btn btn-xs sm:btn-sm md:btn-md w-full", {"btn-ghost":(!clicked)}, {"btn-accent":clicked})} onClick={() => setClicked(!clicked)}>{text}</a></td>
); );
} }