Skip to content

Commit c6add95

Browse files
committed
Add Randomizer sample component
1 parent 4cb35de commit c6add95

File tree

6 files changed

+42
-0
lines changed

6 files changed

+42
-0
lines changed

src/App.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import './App.css'
2+
import { Randomizer } from './Randomizer'
23

34
function App() {
45
return (
56
<div className="App">
7+
<Randomizer />
68
</div>
79
)
810
}

src/Randomizer/Randomizer.css

Whitespace-only changes.

src/Randomizer/Randomizer.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import React, { useState, useEffect } from 'react'
2+
import { take, prepend } from '../helpers/array'
3+
import { getRandomInt } from '../helpers/random'
4+
5+
const NUMBERS_COUNT_TO_TAKE = 5
6+
7+
const getNumbersString = (numbers, takeCount) =>
8+
`${take(takeCount, numbers).join(', ')}${numbers.length > 5 ? ',...' : ''}`
9+
10+
export const Randomizer = () => {
11+
const [numbers, setNumbers] = useState([])
12+
const [numbersString, setNumbersString] = useState()
13+
14+
useEffect(() => {
15+
setNumbersString(getNumbersString(numbers, NUMBERS_COUNT_TO_TAKE))
16+
}, [numbers])
17+
18+
const handleGenerate = () => {
19+
const number = getRandomInt(0, 100)
20+
setNumbers(prepend(number, numbers))
21+
}
22+
23+
return (
24+
<div>
25+
<div>{numbersString || '<...>'}</div>
26+
<button onClick={handleGenerate}>Generate</button>
27+
</div>
28+
)
29+
}

src/Randomizer/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './Randomizer'

src/helpers/array.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export const concat = (arr1, arr2) => [...arr1, ...arr2]
2+
export const append = (item, arr) => [...arr, item]
3+
export const prepend = (item, arr) => [item, ...arr]
4+
export const take = (count, arr) => arr.slice(0, count)
5+
export const contains = (item, arr) => arr.includes(item)
6+
export const difference = (arr1, arr2) =>
7+
arr1.filter((item) => arr2.includes(item))

src/helpers/random.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// [min, max]
2+
export const getRandomInt = (min, max) =>
3+
Math.floor(min + Math.random() * (max + 1 - min))

0 commit comments

Comments
 (0)