📦 EqualifyEverything / equalify

📄 BlockersTableColumnToggle.tsx · 66 lines
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
56
57
58
59
60
61
62
63
64
65
66import { Table } from "@tanstack/react-table";
import style from "./BlockersTableColumnToggle.module.scss";
import * as Popover from "@radix-ui/react-popover";
import { Blocker } from "./BlockersTable";
import { MdOutlineClose } from "react-icons/md";
import { LuSettings2 } from "react-icons/lu";
import { StyledButton } from "./StyledButton";

interface BlockersTableColumnToggleProps {
  table: Table<Blocker>
}
interface StringMap {
  [key: string]: string;
}
const labelMap: StringMap = {
  'type': "Type",
  'url': "URL",
  'messages': "Issue",
  'content': "Code",
  'tags': "Tags",
  'categories': "Category",
  'id': "Ignore"
}

export const BlockersTableColumnToggle = ({ table }: BlockersTableColumnToggleProps) => {

  return (
    <div className={style["BlockersTableColumnToggle"]}>
      <Popover.Root>
        <Popover.Trigger asChild className={style["blockersTableToggleButton"]}>
          <StyledButton
            variant="naked"
            className="large"
            icon={<LuSettings2 />}
            label={"Show/Hide Table Columns"}
            showLabel={false}
            onClick={() => { }}
          />
        </Popover.Trigger>
        <Popover.Portal>
          <Popover.Content sideOffset={5} className={style["popoverContent"]}>
            <fieldset className={style["popoverFieldset"]}>
              <legend className="font-small">Show/Hide Columns</legend>
              {table.getAllColumns().map((column) => (
                <label key={column.id}>
                  <input
                    checked={column.getIsVisible()}
                    onChange={column.getToggleVisibilityHandler()}
                    type="checkbox"
                  />
                  {labelMap[column.id]}
                </label>
              ))}
            </fieldset>
            <Popover.Close aria-label="Close" className={style["popoverClose"]}>
              <MdOutlineClose />
            </Popover.Close>
            <Popover.Arrow className={style["popoverArrow"]} />
          </Popover.Content>
        </Popover.Portal>
      </Popover.Root>

    </div >
  );
};