import React, { useState, useEffect } from 'react'; import { Card } from '../Card/Card'; import { List, ListItem } from '../List/List'; import { Checkbox } from '../Checkbox/Checkbox'; import { Button } from '../Button/Button'; import { Stack } from '../Stack/Stack'; import { Text } from '../Text/Text'; import { useTheme } from '../../core'; interface Item { id: string; label: string; } interface TransferListProps { initialLeft: Item[]; initialRight: Item[]; leftTitle?: string; rightTitle?: string; } export const TransferList: React.FC = ({ initialLeft, initialRight, leftTitle = 'Choices', rightTitle = 'Chosen' }) => { const { theme } = useTheme(); const [left, setLeft] = useState(initialLeft); const [right, setRight] = useState(initialRight); const [checked, setChecked] = useState(new Set()); const leftChecked = left.filter(item => checked.has(item.id)); const rightChecked = right.filter(item => checked.has(item.id)); const handleToggle = (item: Item) => { const newChecked = new Set(checked); if (newChecked.has(item.id)) { newChecked.delete(item.id); } else { newChecked.add(item.id); } setChecked(newChecked); }; const moveRight = () => { setRight(right.concat(leftChecked)); setLeft(left.filter(item => !checked.has(item.id))); const newChecked = new Set(checked); leftChecked.forEach(item => newChecked.delete(item.id)); setChecked(newChecked); }; const moveLeft = () => { setLeft(left.concat(rightChecked)); setRight(right.filter(item => !checked.has(item.id))); const newChecked = new Set(checked); rightChecked.forEach(item => newChecked.delete(item.id)); setChecked(newChecked); }; const CustomList = ({ title, items }: { title: string, items: Item[] }) => ( {items.map(item => ( handleToggle(item)} style={{ cursor: 'pointer', padding: `${theme.spacing.sm} 0`}}> ))} ); return (
); };