import React, { useEffect, useState } from 'react'; import cx from 'classnames'; var tinycolor = require('tinycolor2'); export const Button = function Button({ height, properties, styles, fireEvent, registerAction, component, currentState, }) { const { backgroundColor, textColor, borderRadius, loaderColor, disabledState, borderColor } = styles; const [label, setLabel] = useState(properties.text); const [disable, setDisable] = useState(disabledState); const [visibility, setVisibility] = useState(styles.visibility); const [loading, setLoading] = useState(properties.loadingState); useEffect(() => setLabel(properties.text), [properties.text]); useEffect(() => { disable !== disabledState && setDisable(disabledState); }, [disabledState]); useEffect(() => { visibility !== styles.visibility && setVisibility(styles.visibility); }, [styles.visibility]); useEffect(() => { loading !== properties.loadingState && setLoading(properties.loadingState); }, [properties.loadingState]); const computedStyles = { backgroundColor, color: textColor, width: '100%', borderRadius: `${borderRadius}px`, height, display: visibility ? '' : 'none', '--tblr-btn-color-darker': tinycolor(backgroundColor).darken(8).toString(), '--loader-color': tinycolor(loaderColor ?? '#fff').toString(), borderColor: borderColor, }; registerAction('click', async function () { fireEvent('onClick'); }); registerAction( 'setText', async function (text) { setLabel(text); }, [setLabel] ); registerAction( 'disable', async function (value) { setDisable(value); }, [setDisable] ); registerAction( 'visibility', async function (value) { setVisibility(value); }, [setVisibility] ); registerAction( 'loading', async function (value) { setLoading(value); }, [setLoading] ); const hasCustomBackground = backgroundColor.charAt() === '#'; if (hasCustomBackground) { computedStyles['--tblr-btn-color-darker'] = tinycolor(backgroundColor).darken(8).toString(); } return (
); };