ToolJet/frontend/src/Editor/Components/Icon.jsx
Kavin Venkatachalam 3a78cf6155
[Feature]: Icon Widget (#3936)
* Created Icon Widget

* Installed tabler icons

* Updated visibility logic for icon widget

* Added doc for icon widget

* Updated hidden field & moved hidden logic to cx

* Dark theme for icon widget & updated visibility

* Moved visibility logic to useEffect

* Updated visibility CSA label

* Removed resolveWidgetFieldValuekey usage in the Icon widget

* Moved register action to useEffect

* Removed registerActions on useEffect

* Add setIconVisibility to dependency array of registerAction

Co-authored-by: Sherfin Shamsudeen <sherfin94@gmail.com>
2022-09-27 11:18:32 +05:30

48 lines
1.3 KiB
JavaScript

import React, { useState, useEffect } from 'react';
// eslint-disable-next-line import/no-unresolved
import * as Icons from '@tabler/icons';
import cx from 'classnames';
export const Icon = ({ properties, styles, fireEvent, width, height, registerAction, darkMode }) => {
const { icon } = properties;
const { iconColor, visibility } = styles;
const IconElement = Icons[icon];
const color = iconColor === '#000' ? (darkMode ? '#fff' : '#000') : iconColor;
const [showIcon, setIconVisibility] = useState(true);
useEffect(() => {
showIcon !== visibility && setIconVisibility(visibility);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [visibility]);
registerAction(
'setVisibility',
async function (visibility) {
setIconVisibility(visibility);
},
[setIconVisibility]
);
registerAction('click', async function () {
fireEvent('onClick');
});
return (
<div className={cx('icon-widget', { 'd-none': !showIcon })}>
<IconElement
color={color}
style={{ width, height }}
onClick={(event) => {
event.stopPropagation();
fireEvent('onClick');
}}
onMouseOver={(event) => {
event.stopPropagation();
fireEvent('onHover');
}}
/>
</div>
);
};