import React from 'react'; import { makeStyles, Theme, createStyles } from '@material-ui/core/styles'; import Grid from '@material-ui/core/Grid'; import List from '@material-ui/core/List'; import Card from '@material-ui/core/Card'; import CardHeader from '@material-ui/core/CardHeader'; import ListItem from '@material-ui/core/ListItem'; import ListItemText from '@material-ui/core/ListItemText'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import Checkbox from '@material-ui/core/Checkbox'; import Button from '@material-ui/core/Button'; import Divider from '@material-ui/core/Divider'; const useStyles = makeStyles((theme: Theme) => createStyles({ root: { margin: 'auto', }, cardHeader: { padding: theme.spacing(1, 2), }, list: { width: 200, height: 230, backgroundColor: theme.palette.background.paper, overflow: 'auto', }, button: { margin: theme.spacing(0.5, 0), }, }), ); function not(a: number[], b: number[]) { return a.filter((value) => b.indexOf(value) === -1); } function intersection(a: number[], b: number[]) { return a.filter((value) => b.indexOf(value) !== -1); } function union(a: number[], b: number[]) { return [...a, ...not(b, a)]; } export default function TransferList() { const classes = useStyles(); const [checked, setChecked] = React.useState([]); const [left, setLeft] = React.useState([0, 1, 2, 3]); const [right, setRight] = React.useState([4, 5, 6, 7]); const leftChecked = intersection(checked, left); const rightChecked = intersection(checked, right); const handleToggle = (value: number) => () => { const currentIndex = checked.indexOf(value); const newChecked = [...checked]; if (currentIndex === -1) { newChecked.push(value); } else { newChecked.splice(currentIndex, 1); } setChecked(newChecked); }; const numberOfChecked = (items: number[]) => intersection(checked, items).length; const handleToggleAll = (items: number[]) => () => { if (numberOfChecked(items) === items.length) { setChecked(not(checked, items)); } else { setChecked(union(checked, items)); } }; const handleCheckedRight = () => { setRight(right.concat(leftChecked)); setLeft(not(left, leftChecked)); setChecked(not(checked, leftChecked)); }; const handleCheckedLeft = () => { setLeft(left.concat(rightChecked)); setRight(not(right, rightChecked)); setChecked(not(checked, rightChecked)); }; const customList = (title: React.ReactNode, items: number[]) => ( } title={title} subheader={`${numberOfChecked(items)}/${items.length} selected`} /> {items.map((value: number) => { const labelId = `transfer-list-all-item-${value}-label`; return ( ); })} ); return ( {customList('Choices', left)} {customList('Chosen', right)} ); }