@adaptabletools/adaptable-cjs
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
58 lines (57 loc) • 3.74 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.IconSelector = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const rebass_1 = require("rebass");
const AdaptableInput_1 = tslib_1.__importDefault(require("../../View/Components/AdaptableInput"));
const Icon_1 = require("../Icon");
const icons_1 = require("../icons");
const OverlayTrigger_1 = tslib_1.__importDefault(require("../OverlayTrigger"));
const SimpleButton_1 = tslib_1.__importDefault(require("../SimpleButton"));
const IconButton = (props) => {
return (react_1.default.createElement(SimpleButton_1.default, { onClick: () => props.onClick(), p: 2, variant: props.active ? 'raised' : 'text', tone: props.active ? 'accent' : 'none', icon: props.icon }, props.children));
};
const IconSelector = (props) => {
const [query, setQuery] = react_1.default.useState('');
const allIconsNames = Object.keys(icons_1.allIcons);
const filteredIcons = query
? allIconsNames.filter((iconName) => {
return iconName.toLowerCase().includes(query.toLowerCase());
})
: allIconsNames;
const iconsElements = filteredIcons.map((iconName) => {
return (react_1.default.createElement(rebass_1.Flex, { key: iconName },
react_1.default.createElement(IconButton, { onClick: () => props.onChange(iconName), active: iconName === props.value, icon: iconName })));
});
const customIconsElements = props.customIcons?.map((def) => {
return (react_1.default.createElement(IconButton, { key: def.name, active: false, onClick: () => props.onChange(def.name) },
react_1.default.createElement(Icon_1.IconComponent, { key: def.name, icon: def.icon })));
});
const popup = (react_1.default.createElement(rebass_1.Box, { className: "ab-IconSelector__Popup" },
react_1.default.createElement(rebass_1.Box, { mb: 2 },
react_1.default.createElement(rebass_1.Box, { mb: 2, fontSize: 4 }, "Select an Icon"),
react_1.default.createElement(AdaptableInput_1.default, { value: query, onChange: (event) => setQuery(event.target.value ?? ''), width: "100%" })),
react_1.default.createElement(rebass_1.Flex, { p: 2, style: { width: 300, maxHeight: 300, overflow: 'auto' }, flexWrap: "wrap" },
iconsElements,
" ",
customIconsElements)));
let value = 'No Icon Selected';
if (props.value in icons_1.allIcons) {
value = (react_1.default.createElement(icons_1.Icon, { style: { display: 'inline-block' }, name: props.value }));
}
else {
const icon = props.customIcons?.find((def) => def.name === props.value);
if (icon)
value = react_1.default.createElement(Icon_1.IconComponent, { icon: icon.icon });
}
return (react_1.default.createElement(rebass_1.Flex, { className: "ab-IconSelector" },
react_1.default.createElement(OverlayTrigger_1.default, { preventPortalEventPropagation: false, render: () => popup, showEvent: "mouseenter", hideEvent: "mouseleave", hideDelay: 300 },
react_1.default.createElement(SimpleButton_1.default, { className: "ab-IconSelector__trigger", textAlign: "center", onClick: () => null, variant: "raised", width: 150, justifyContent: "center" }, value)),
(props.clearable ?? true) && (react_1.default.createElement(SimpleButton_1.default, { disabled: !props.value, className: "ab-IconSelector__clear-button", ml: 2, onClick: (event) => {
event.stopPropagation();
event.preventDefault();
props.onChange('');
}, variant: "text", icon: "close" }))));
};
exports.IconSelector = IconSelector;