mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-24 09:28:31 +00:00
* 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>
48 lines
1.3 KiB
JavaScript
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>
|
|
);
|
|
};
|