useListItemCheckboxState.tsx 576 B

123456789101112131415161718192021222324
  1. import {useCallback, useMemo, useState} from 'react';
  2. export default function useListItemCheckboxState() {
  3. const [state, setState] = useState<Record<string, boolean>>({});
  4. const checked = useMemo(() => {
  5. const isChecked = (feedbackId: string) => state[feedbackId];
  6. const feedbackIds = Object.keys(state);
  7. return feedbackIds.filter(isChecked);
  8. }, [state]);
  9. const toggleChecked = useCallback((id: string) => {
  10. setState(prev => {
  11. prev[id] = !prev[id];
  12. return {...prev};
  13. });
  14. }, []);
  15. return {
  16. checked,
  17. toggleChecked,
  18. };
  19. }