2023-11-03 00:03:08 +01:00
'use client' ;
import React from 'react'
2023-11-03 19:08:20 +01:00
import Bingo from './bingo'
2023-11-03 00:03:08 +01:00
2023-11-03 15:38:26 +01:00
function FisherYatesShuffle ( array :string [ ] ) : string [ ] {
for ( let i = array . length - 1 ; i > 0 ; i -- ) {
const j = Math . floor ( Math . random ( ) * ( i + 1 ) ) ;
const temp = array [ i ] ;
array [ i ] = array [ j ] ;
array [ j ] = temp ;
}
return array ;
}
2023-11-03 00:03:08 +01:00
export default function BingoController ( ) {
const [ size , setSize ] = React . useState ( 5 ) ;
2023-11-03 15:21:59 +01:00
const buzzwords = [ "Cloud" , "Cyber" , "Distruptive Technology" , "AI" , "Metaverse" , "Gamification" , "Web 2.0/3.0" , "Industry 4.0" , "Internet of Things" , "Multiexperience" , "Big Data" , "Crypto" , "[Insert bullshit here] as a service" , "Emerging Market" , "Streamline" ] ;
const [ items , setItems ] = React . useState ( buzzwords ) ;
2023-11-03 00:03:08 +01:00
const sizeError = ( ( items . length % size ) != 0 ) ;
return (
< >
2023-11-03 12:19:27 +01:00
< div className = "w-3/4 flex flex-row m-auto" >
2023-11-03 00:03:08 +01:00
< Bingo size = { size } items = { items } / >
2023-11-03 15:21:59 +01:00
< form className = "w-1/3" >
2023-11-03 19:10:25 +01:00
< input type = "range" min = { 3 } max = { 5 } value = { size } className = "range range-primary" step = { 1 } onChange = { ( { target : { value :s } } ) = > setSize ( + s ) } / >
2023-11-03 15:21:59 +01:00
< div className = "w-full flex justify-between text-xs px-2" >
< span > 3 x3 < / span >
< span > 4 x4 < / span >
< span > 5 x5 < / span >
< / div >
2023-11-03 15:38:26 +01:00
< a className = "btn btn-primary" onClick = { ( ) = > setItems ( FisherYatesShuffle ( buzzwords ) ) } > Regenerate < / a >
2023-11-03 15:21:59 +01:00
< / form >
2023-11-03 12:19:27 +01:00
< / div >
2023-11-03 19:13:02 +01:00
{ 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 > }
2023-11-03 00:03:08 +01:00
< / >
) ;
}