[breaking]: FreeSewing v4 (#7297)
Refer to the CHANGELOG for all info. --------- Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com> Co-authored-by: Josh Munic <jpmunic@gmail.com> Co-authored-by: Jonathan Haas <haasjona@gmail.com>
This commit is contained in:
parent
d22fbe78d9
commit
51dc1d9732
6626 changed files with 142053 additions and 150606 deletions
40
packages/react/hooks/useSelection/index.mjs
Normal file
40
packages/react/hooks/useSelection/index.mjs
Normal file
|
@ -0,0 +1,40 @@
|
|||
import React, { useState } from 'react'
|
||||
|
||||
export const useSelection = (items) => {
|
||||
const [selection, setSelection] = useState({})
|
||||
|
||||
/*
|
||||
* This variable keeps track of how many are selected
|
||||
*/
|
||||
const count = Object.keys(selection).length
|
||||
|
||||
/*
|
||||
* This method toggles a single item in the selection
|
||||
*/
|
||||
const toggle = (id) => {
|
||||
const newSelection = { ...selection }
|
||||
if (newSelection[id]) delete newSelection[id]
|
||||
else newSelection[id] = 1
|
||||
setSelection(newSelection)
|
||||
}
|
||||
|
||||
/*
|
||||
* This method toggles all on or off
|
||||
*/
|
||||
const toggleAll = () => {
|
||||
if (count === items.length) setSelection({})
|
||||
else {
|
||||
const newSelection = {}
|
||||
for (const item of items) newSelection[item.id] = 1
|
||||
setSelection(newSelection)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
count,
|
||||
selection,
|
||||
setSelection,
|
||||
toggle,
|
||||
toggleAll,
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue