CardCheck.jsx 1.56 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
import React, { useState, useEffect } from 'react';
import { Checkbox } from 'antd';
import styles from './PushTest.less';
const CheckboxGroup = Checkbox.Group;

const CardCheck = props => {
  const { cardMsg, cardIndex, callback } = props;
  const [checkedList, setCheckedList] = useState();
  const [indeterminate, setIndeterminate] = useState(false);
  const [checkAll, setCheckAll] = useState(false);

  const [plainOptions, setPlainOptions] = useState([]);

  useEffect(() => {
    setPlainOptions(cardMsg.plainOptions);
  }, []);
  useEffect(() => {
    callback(checkedList, cardIndex);
  }, [checkedList]);
  const onChange = list => {
    console.log(list);
    setCheckedList(list);
    setIndeterminate(!!list.length && list.length < plainOptions.length);
    setCheckAll(list.length === plainOptions.length);
  };
  const onCheckAllChange = e => {
    setCheckedList(
      e.target.checked ? plainOptions.map(item => item.value) : [],
    );
    setIndeterminate(false);
    setCheckAll(e.target.checked);
  };
  return (
    <div className={styles.divBox}>
      <div className={styles.topCheckbox}>
        <Checkbox
          indeterminate={indeterminate}
          onChange={e => onCheckAllChange(e)}
          checked={checkAll}
        >
          {cardMsg.groupName}
        </Checkbox>
      </div>
      <div className={styles.bottomCheckbox} style={{ marginTop: '10px' }}>
        <CheckboxGroup
          options={plainOptions}
          value={checkedList}
          onChange={list => onChange(list)}
        />
      </div>
    </div>
  );
};

export default CardCheck;