import React from "react";
import {
Popover,
Classes,
PopoverInteractionKind,
Position,
Icon,
} from "@blueprintjs/core";
import { IconWrapper } from "constants/IconConstants";
import styled from "styled-components";
import { Colors } from "constants/Colors";
import { ReactComponent as VisibleIcon } from "assets/icons/control/columns-visibility.svg";
import Button from "components/editorComponents/Button";
import { ReactTableColumnProps } from "./Constants";
import { TableIconWrapper } from "./TableStyledWrappers";
import TableActionIcon from "./TableActionIcon";
const DropDownWrapper = styled.div`
display: flex;
flex-direction: column;
background: white;
z-index: 1;
border-radius: 4px;
border: 1px solid ${Colors.ATHENS_GRAY};
max-height: 500px;
max-width: 400px;
overflow: hidden scroll;
`;
const OptionWrapper = styled.div<{ selected: boolean }>`
display: flex;
width: calc(100% - 20px);
justify-content: space-between;
align-items: center;
height: 32px;
box-sizing: border-box;
padding: 8px;
color: ${Colors.OXFORD_BLUE};
opacity: ${(props) => (props.selected ? 1 : 0.7)};
min-width: 200px;
cursor: pointer;
margin: 10px 10px 0 10px;
background: ${Colors.WHITE};
.option-title {
font-weight: 500;
font-size: 14px;
line-height: 24px;
}
`;
const StyledOption = styled.div`
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 90%;
`;
const ButtonWrapper = styled.div`
display: flex;
width: 100%;
justify-content: flex-end;
align-items; center;
height: 40px;
box-sizing: border-box;
min-width: 224px;
padding: 5px 15px;
background: ${Colors.WHITE};
box-shadow: 0px -1px 2px rgba(67, 70, 74, 0.12);
margin-top: 10px;
`;
interface TableColumnsVisibilityProps {
columns: ReactTableColumnProps[];
hiddenColumns?: string[];
updateHiddenColumns: (hiddenColumns?: string[]) => void;
}
function VisibilityIcon(props: { visible?: boolean }) {
return props.visible ? (
) : (
);
}
function TableColumnsVisibility(props: TableColumnsVisibilityProps) {
const [selected, selectMenu] = React.useState(false);
if (props.columns.length === 0) {
return (
);
}
const columns = props.columns.sort(
(a: ReactTableColumnProps, b: ReactTableColumnProps) => {
return a.accessor > b.accessor ? 1 : b.accessor > a.accessor ? -1 : 0;
},
);
return (
{
selectMenu(false);
}}
position={Position.BOTTOM}
usePortal
>
{
selectMenu(selected);
}}
selected={selected}
tooltip="Hidden Fields"
>
{columns.map((option: ReactTableColumnProps, index: number) => (
{
const hiddenColumns = Array.isArray(props.hiddenColumns)
? props.hiddenColumns.slice()
: [];
if (!option.isHidden) {
hiddenColumns.push(option.accessor);
} else {
hiddenColumns.splice(hiddenColumns.indexOf(option.accessor), 1);
}
props.updateHiddenColumns(hiddenColumns);
}}
selected={!option.isHidden}
>
{option.Header}
))}
);
}
export default TableColumnsVisibility;