summaryrefslogtreecommitdiffstats
path: root/browser/components/newtab/content-src/aboutwelcome/components/MultiSelect.jsx
blob: 0c1824215a3cd6dcc7e0a91131997913de3914e2 (plain)
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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

import React, { useEffect } from "react";
import { Localized } from "./MSLocalized";

export const MultiSelect = props => {
  let handleChange = event => {
    if (event.currentTarget.checked) {
      props.setActiveMultiSelect([
        ...props.activeMultiSelect,
        event.currentTarget.value,
      ]);
    } else {
      props.setActiveMultiSelect(
        props.activeMultiSelect.filter(id => id !== event.currentTarget.value)
      );
    }
  };

  let { data } = props.content.tiles;
  // When screen renders for first time, update state
  // with checkbox ids that has defaultvalue true
  useEffect(() => {
    if (!props.activeMultiSelect) {
      props.setActiveMultiSelect(
        data.map(item => item.defaultValue && item.id).filter(item => !!item)
      );
    }
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  return (
    <div className="multi-select-container">
      {props.content.tiles.data.map(({ label, id }) => (
        <div key={id + label} className="checkbox-container multi-select-item">
          <input
            type="checkbox"
            id={id}
            value={id}
            checked={props.activeMultiSelect?.includes(id)}
            onChange={handleChange}
          />
          <Localized text={label}>
            <label htmlFor={id}></label>
          </Localized>
        </div>
      ))}
    </div>
  );
};