mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-24 09:28:31 +00:00
* initial commit * redesign column manager * redesign string column type in the table * setting the color of the input field for string column type * setting bg of popover body * design the style tab of string column type * adjusted spaces in the properties and style elements in the column manager * fixed typo error * removed unwanted line * redesign the validation section of number column type manager * added the placeholder value for string column type min and max length in the validation section * replace text with icons for horizontal alignment in the style tab * show delete icon outside of the menu actions for each column in the table inspector * Revert "redesign string column type in the table" This reverts commita440f3fc23, which made changes for string column type in the table component on the canvas * making flex fill for horizontal alignment icon buttons in the style tab of column manager in the table * Bug fixed: event manager is not working in toggle column type * added decimalPlaces prop to number column manager * added text color and cell background props to style tab of number column manager * added few validations for number * created boolean column type consisting input checkbox working as toggle switch * allow user to select boolean column type from the component manager and display boolean column in the table on the canvas * making boolean component content consistent with the horizontal alignment * making Boolean column type functional adding editable and non-editale content to display on table * fixed horizonta alignment issue for boolean column * Revert "fixed horizonta alignment issue for boolean column" This reverts commitd41499a1ed. * making input elment vertically aligned * added generalised cell interaction * added props for boolean column types in column manager of table * added feature to provide custom bg to toggle switch * removed default value to toggleOnBg and toggleOffBg * conditionally displaying hardcoded value if toggleBg is not available * change the file and component name of existing customSelect to customDropdown * change component name * remove unwanted code * added select option to the column type dropdown field * Created component for select column type * rendering custom select component for select column type * adding border danger for invalid value * redesign column manager for select column type * bug fixed : disabling control to select column type when editable is off * changing the name key to label for select column type options * partially implemented make default option feature * Implemented default option for select column type * added text color prop in a styles tab to select column type * adding indigo color to selected option to select column type menu list * avoid breaking table if array is not provided for dynamicOption field * Organize the column manager and related files * Added validation fields in text column manager * Added text color to text area column type * Added validation to text column type * Avoiding bg to persisit for few column tupes, who dont have background field * bug fixed : other valdiation are not rendering for string column type * bug fixed: on hover always danger border is displayed for each cell * Cell density enhancement * Returning empty array for validationList for few column types * handling validation list by merging organizing-column-manager * Changed the select component in the properties tab of column popover * Changed the UI of validation according to new design also few column popover and action popover UI changes * Adding fx code block in style tab for text color and cell bg color * fixing UI of select column type column manager according to new UI * creating multiselect column and its UI wrt option list * added overlay trigger to multiselect * feat : added design theme new colors * fix : adding new color swatch to input components * fix : colors, number input with height less than 16px and number input arrow in padding none mdode * fix : icon color * few color fixes * overlay trigger for multi-select column type * color picker bug fixed * color changes * column type input text is not consistent with the dark theme- fixed * custom select single value container bug * manking add new row, hide column and download popover background consistent with the dark theme * Making add new row consistent with the updated UI changes * feat : link column type table * fix: default underline color * fix : sentence casing * added missing transformation field * fixes * fixing tab opening condition * fix : backward compatibility * supported multiple badges , tags for cell density propety * added feature to duplicate column * made td container overflow hidden * provided 100% width to Image fit prop in styles tab * oveflow hidden prop changes * revert unwanted change * change the gap between columns in column lists inside table inspector * Deprecate few column types in table * Fix * Fixes * change the functionality of cell density feature * Fix msg * Revamp date picker in table * Fix * fix : darkmode colors * revert * Supported cell density feature for multiple badges * making badges aligned center * madde tags column consistent with cell density feature * Remove imports * enhancing the code density feature * Making radio column consistent with the cell density feature * Fix unixtimestamp * Fix CSS issues * making tags and badges overlay appear only when content is overflowed * CSS fixes * Fix * Fix dark mode issues * making background transparent for deprecating columns making overlay visible on horizontal overflow * New revamped styles * fix box shadow * Migrations to move visibility and disabled states from styles to properties * undo change * refactored custom select component * patch fixes * bug fixed action popover was inconsistent with dark theme * testing * update custom select column type * fixes * Avoided options being populated in columns * removed consoles * making custom select align center vertically * on focus , we used to see on hover effect, avoiding it * Design review changes * Made text and string text-container according to design * vertical positioning of select and multiselect * overlay for deprecated columns * regex placeholder * Icons for number column type * Design feedback changes * Design fixes * box shadow on select menu list in canvas * added missing feature of decimal places and make increment and decrement icon vertically aligned * Fix design issues * Solve lint issues * Design theme revert changes * color of column list on hover and active is updated * fixes * changing the font weight of labels in styles tab of column manager * fix * Revert design theme * label change * horizontal alignment of select and datepicker columns * Reverted back to textarea for text column type * sync package-lock.json * fix import * UI fixes * Css changes * feat: Update default table data (#9312) * updated default table data * fix : table breaking * fix : datepikcer crashing table * fix : data * fix :: table image height (#9307) * fix : Table datepicker UI fixes (#9324) * fix : datepicker ui * update * fix * refactor: removed unused codes * add overlay * add overlay * Fix datepicker when date and time both are disabled * Fix paddings and margins * fix : default states in datepicker in table (#9335) * feat : update default data with images (#9338) * Design feedback * fix multiselect column type issues * Fix datepicker header width * Fix dropdown * Fix options loading state * Fix select issues * Fix multiselect default option * fix overlay trigger multiselect * fix: fixed issue with overlay display and cell content alignment for text * fix: Multiselect popover (#9394) * fix: popover only needed when content overflows * fix * fix: update zindex of edited text column * fix: show overlay when text in string overlay overflows * Fix multiselect default options * fix: show error message for editable string cloumn * Fix date issues * Fix date fixes * fix: more info popup close on mouse leave * Fix unix timestamp issue * Migration: set default demo data for older data (#9423) * fix: backfill old default data if user did not add a data * fix: backfill old default data if user did not add a data * Table column redeisgn demo string fix (#9415) * fix: show error message on table input validations * fix: error message alignments * Fix import issue for datepicker * wrapping the contant of multiselect selected options (#9429) * Fix popover in multiselect * Add multiselect popover only when content wrap is false or max row height is custom * Fix : String column types bug fixes (#9431) * Bug fixed: Hiding max row height field when content wrap is disabled * Removed border bottom when striped table style is applied * removed unwanted code * Apply hover effect on non-editable cell * Fixed width applied to multiselect popover * Fixed multiselect popover when content wrap is auto * Fix : arrow indicators vertical alignment in number column (#9440) * Fix: vertcial alignment of arrows * added hover effect on even rows * removed important * fix : Link column ui bugs , console error fix when hovering table (#9437) * fix : link column ui ux * update icons * Fix: focus editable string column on click of anywhere in cell (#9435) * Bug fixed: Hiding max row height field when content wrap is disabled * Removed border bottom when striped table style is applied * removed unwanted code * Apply hover effect on non-editable cell * Not able to edit the cell if clicked on the edges --------- Co-authored-by: manishkushare <kushare.manish9@gmail.com> * fix: number input overlap with increment/decrement button (#9406) * Number input arrow bug (#9441) * Fix: vertcial alignment of arrows * added hover effect on even rows * removed important * number are overflowing on arrows fixed --------- Co-authored-by: manishkushare <kushare.manish9@gmail.com> --------- Co-authored-by: stepinfwd <stepinfwd@gmail.com> Co-authored-by: Nakul Nagargade <nakul@tooljet.com> Co-authored-by: Nakul Nagargade <133095394+nakulnagargade@users.noreply.github.com> Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
177 lines
5.3 KiB
JavaScript
177 lines
5.3 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
import DOMPurify from 'dompurify';
|
|
// eslint-disable-next-line import/no-unresolved
|
|
import Markdown from 'react-markdown';
|
|
import './text.scss';
|
|
import Loader from '@/ToolJetUI/Loader/Loader';
|
|
|
|
const VERTICAL_ALIGNMENT_VS_CSS_VALUE = {
|
|
top: 'flex-start',
|
|
center: 'center',
|
|
bottom: 'flex-end',
|
|
};
|
|
|
|
export const Text = function Text({ height, properties, fireEvent, styles, darkMode, setExposedVariable, dataCy }) {
|
|
let {
|
|
textSize,
|
|
textColor,
|
|
textAlign,
|
|
backgroundColor,
|
|
fontWeight,
|
|
decoration,
|
|
transformation,
|
|
fontStyle,
|
|
lineHeight,
|
|
textIndent,
|
|
letterSpacing,
|
|
wordSpacing,
|
|
fontVariant,
|
|
boxShadow,
|
|
verticalAlignment,
|
|
borderColor,
|
|
borderRadius,
|
|
isScrollRequired,
|
|
} = styles;
|
|
const { loadingState, textFormat, disabledState } = properties;
|
|
const [text, setText] = useState(() => computeText());
|
|
const [visibility, setVisibility] = useState(properties.visibility);
|
|
const [isLoading, setLoading] = useState(loadingState);
|
|
const [isDisabled, setIsDisabled] = useState(disabledState);
|
|
const color = ['#000', '#000000'].includes(textColor) ? (darkMode ? '#fff' : '#000') : textColor;
|
|
|
|
useEffect(() => {
|
|
if (visibility !== properties.visibility) setVisibility(properties.visibility);
|
|
if (isLoading !== loadingState) setLoading(loadingState);
|
|
if (isDisabled !== disabledState) setIsDisabled(disabledState);
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [properties.visibility, loadingState, disabledState]);
|
|
|
|
useEffect(() => {
|
|
const text = computeText();
|
|
setText(text);
|
|
setExposedVariable('text', text);
|
|
|
|
setExposedVariable('setText', async function (text) {
|
|
setText(text);
|
|
setExposedVariable('text', text);
|
|
});
|
|
setExposedVariable('clear', async function (text) {
|
|
setText('');
|
|
setExposedVariable('text', '');
|
|
});
|
|
setExposedVariable('isVisible', properties.visibility);
|
|
setExposedVariable('isLoading', loadingState);
|
|
setExposedVariable('isDisabled', disabledState);
|
|
|
|
setExposedVariable('visibility', async function (value) {
|
|
setVisibility(value);
|
|
});
|
|
|
|
setExposedVariable('setVisibility', async function (value) {
|
|
setVisibility(value);
|
|
});
|
|
|
|
setExposedVariable('setLoading', async function (value) {
|
|
setLoading(value);
|
|
});
|
|
|
|
setExposedVariable('setDisable', async function (value) {
|
|
setIsDisabled(value);
|
|
});
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [
|
|
properties.text,
|
|
setText,
|
|
setVisibility,
|
|
properties.visibility,
|
|
loadingState,
|
|
disabledState,
|
|
setIsDisabled,
|
|
setLoading,
|
|
]);
|
|
|
|
function computeText() {
|
|
return properties.text === 0 || properties.text === false ? properties.text?.toString() : properties.text;
|
|
}
|
|
|
|
const handleClick = () => {
|
|
fireEvent('onClick');
|
|
};
|
|
|
|
const computedStyles = {
|
|
height: `${height}px`,
|
|
backgroundColor: darkMode && ['#edeff5'].includes(backgroundColor) ? '#2f3c4c' : backgroundColor,
|
|
color,
|
|
display: visibility ? 'flex' : 'none',
|
|
fontWeight: fontWeight ? fontWeight : fontWeight === '0' ? 0 : 'normal',
|
|
lineHeight: lineHeight ?? 1.5,
|
|
textDecoration: decoration ?? 'none',
|
|
textTransform: transformation ?? 'none',
|
|
fontStyle: fontStyle ?? 'none',
|
|
fontVariant: fontVariant ?? 'normal',
|
|
textIndent: `${textIndent}px` ?? '0px',
|
|
letterSpacing: `${letterSpacing}px` ?? '0px',
|
|
wordSpacing: `${wordSpacing}px` ?? '0px',
|
|
boxShadow,
|
|
border: '1px solid',
|
|
borderColor: darkMode && ['#f2f2f5'].includes(borderColor) ? '#2f3c4c' : borderColor ? borderColor : 'transparent',
|
|
borderRadius: borderRadius ? `${borderRadius}px` : '0px',
|
|
fontSize: `${textSize}px`,
|
|
};
|
|
|
|
const commonStyles = {
|
|
width: '100%',
|
|
height: '100%',
|
|
overflowY: isScrollRequired == 'enabled' ? 'auto' : 'hidden',
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
justifyContent: VERTICAL_ALIGNMENT_VS_CSS_VALUE[verticalAlignment],
|
|
textAlign,
|
|
overflowX: isScrollRequired === 'disabled' && 'hidden',
|
|
};
|
|
|
|
const commonScrollStyle = {
|
|
overflowY: isScrollRequired == 'enabled' ? 'scroll' : 'hidden',
|
|
};
|
|
|
|
return (
|
|
<div
|
|
data-disabled={isDisabled}
|
|
className="text-widget"
|
|
style={computedStyles}
|
|
data-cy={dataCy}
|
|
onMouseOver={() => {
|
|
fireEvent('onHover');
|
|
}}
|
|
onClick={handleClick}
|
|
>
|
|
{!isLoading && (
|
|
<div style={commonStyles} className="text-widget-section">
|
|
{textFormat === 'plainText' && <div style={commonScrollStyle}>{text}</div>}
|
|
{textFormat === 'markdown' && (
|
|
<div style={commonScrollStyle}>
|
|
<Markdown className={'reactMarkdown'}>{text}</Markdown>
|
|
</div>
|
|
)}
|
|
{(textFormat === 'html' || !textFormat) && (
|
|
<div
|
|
style={commonScrollStyle}
|
|
dangerouslySetInnerHTML={{
|
|
__html: DOMPurify.sanitize(text || ''),
|
|
}}
|
|
/>
|
|
)}
|
|
</div>
|
|
)}
|
|
{isLoading === true && (
|
|
<div style={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
<center>
|
|
<Loader width="16" absolute={false} />
|
|
</center>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|