mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-22 05:57:20 +00:00
* fix : color for all new columns
* revert
* Fix: selection of copy of selected component for ease (#9818)
* fix: selection of copy of selected component for ease
* add pre selection for clonig as well
* add clone check
* fixes selection of components on empty canvas
* Fix: sizing issues in horizontal divider (#9942)
* fix horizontal divider sizing issues
* fix dark mode color in horizontal divider and remove unused class
* add custom fallback for images when not found (#9943)
* cherry pick error message log changes and fix tjdb error logs in debugger (#9951)
* Fix: mouse release on canvas when properties/styles values selected (#9732)
* fix: mouse release on canvas when properties/styles values selected
* fix: event name
* fix: rest api headers empty state while creating new query (#9729)
* fix: selection issue in table row while editing (#9944)
* allow selection in table cell
* update classname for selection
* display date picker date as text instead of input in read only mode
* Add new revamped multiselect widget (#9837)
* init textinput revamp
* updated styles panel
* bugfix
* updates
* fix :: accordion
* fix :: styling
* add box shadow , additional property,tooltip
* fix conditional render for styles
* feat :: fixed order of each property and styles
* feat :: styling input
* bugfix
* feat :: add option to add icon
* add option to add icon
* adding option to toggle visibility
* updated password input with new design
* chnaging component location
* bugfix
* style fixes
* fix :: added loader
* updated :: few detailing
* few bugfixes
* fix :: for form widget label
* fixes
* added option to add icon color
* including label field for password input
* fix for label
* fix
* test fix backward compatibility for height
* updates
* revert
* adding key for distinguishing older and newer widgets
* testing
* test
* test
* update
* update
* migration testing
* limit vertical resizing in textinput
* testing
* throw test
* test
* adding check for label length
* fixing edge cases
* removing resize
* backward compatibility height
* backward compatibility
* number input review fixes
* added exposed items
* fixing csa
* ui fixes
* fix height compatibility
* feat :: csa for all inputs and exposed variables
* backward compatibility fixes and validation fixes
* fixes :: textinput positioning of loader and icon
* fix :: password input
* cleanup and fixes
* fixes
* cleanup
* fixes
* review fixes
* review fixes
* typo fix
* fix padding
* review fixes styles component panel
* fix naming
* fix padding
* feat :: toggle switch revamp
* init checkbox
* fixes
* fixes
* switch fixes
* validation fix
* fixes
* cleanup
* height fix
* fix height toggle
* updates
* fix :: icons position
* updates
* cleanup
* updates events , csa
* cleanup
* backward compatibility
* clean
* backward compatibility fix
* label fixed to one line
* feat :: change validation from properties
* ui fixes
* icon name
* removed 'px' text from tooltip
* added onchange event for checkbox
* fixes placeholder
* few updates :: removing label in form
* ui in form
* fire onchange
* update :: number input validation behaviour
* testing fixes
* added side handlers
* removing unwanted fx
* disabling fx for padding field
* ordering change
* fix
* label issue + restricted side handler
* fix :: box shadow bug
* fix
* on change event doesnt propagate exposed vars correctly
* adding debounce for slider value change
* fix :: for modal ooen bug during onfocus event
* test slider
* fix :: bugs regarding state update in checbox , slider , slider bug
* update slider with radix slider
* bugfix
* update tooltip
* fix toggle switch
* fixes : inspector
* fix : checkbox label
* Remove date-fns depedency from table datepicker
* Revert Remove date-fns depedency from table datepicker
* feat : checkbox completed
* update checkbox review changes
* feat : toggle component
* feat : added new toggle component
* fix : colors
* updated review changes
* update name for old and new version
* update
* case change
* update
* update icon
* removed padding from checkbox and toggle
* fix naming
* product review and bugfixes : changes
* fix : checkbox setvalue action
* Update setvalue action in toggle
* fixed: section for legacy and new components
* add new version of dropdown
* Add same styles as other input components
* fix height issues
* Add new revamped multiselect widget
* Fix design review
* fix design issues
* Fix
* Fix merge issues
* Add menu portal target
* resolve code comments
* widget config changes
* add hover for clear icon
* fix
* Fix review comments
* Multiselect changes after dropdown merge
* exposed variables
* Delete unused components
* Multiselect fixes
* Dropdown CSS fixes and multiselect fixes
* Fix merge issues
* fix
* Add highlight text
* Change multiselect UI
* fix error message
* fix multiselect opening closing
* placeholder fix
* fix highlighting in multiselect
* fix : testing bugs
* fix : default value
* Fix merge issues
* Fix Qa bugs
* Fix QA bugs
* Fix codehinter default values
* fix fireEvent on focus
* Fixes
* Provide minwidth to dropdown and multiselect
* Fix search input value not getting updated
---------
Co-authored-by: stepinfwd <stepinfwd@gmail.com>
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
* Fix: remove mandatory key from password input (#9786)
* Remove date-fns depedency from table datepicker
* Revert Remove date-fns depedency from table datepicker
* remove mandatory key from password input
---------
Co-authored-by: Nakul Nagargade <nakul@tooljet.com>
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
* feat : Query manager separated to different tabs (#9823)
* change toggle for query manager and revamp preview
* feat : query manger body revamp
* updates
* fix : tranformation switch
* preview integration
* loader safari changes and overflow fix
* fix
* fix : settings tab QM
* revert few changes to fix datasources page
* revert header options change
* zindex fix for query-pane
* fix : events ui
* fix :events widget manager
* code optimised for this file
* QM header fixes
* dark mode changes
* fix : info icon
* open preview drawer on run query
* fix : query manager query section icons update
* update color
* design feedbacks and make preview panel resizable
* update toggle for preview result & increate draggable area
* fix :review changes
* merge fixes
* Merge branch 'appbuilder-1.8' into feature/query-manager-body
* fix : codehinter in disabled state
* ui fix
* code refactor
* cleanup
* fix fontsize in datasource selector popup
* fix border issue in preview container and increase draggable area
* fix : review fixes
* fix: fixed text css formatting for safari support
* Revert "code refactor"
This reverts commit 4763dd11a3.
* typo
* fix : not able to select text in preview
* fix : not able to view add params
* fix selection issue in preview
* fix : add scroll in query manager when preview is blocking view
---------
Co-authored-by: Kartik Gupta <gupta.kartik18kg@gmail.com>
* Fixes: select all click behaviour on label (#10108)
* fixes: select all click behaviour on label
* fix: legacy component names
* fix: selecto issue (#10107)
* Fix : Prevent component autofill (#10040)
* fix : prevent other component from autofilling data when password is filled from browser suggestions
* optimise
* feat: skip onDragStop execution if drag event is empty (#10118)
* feat: skip onDragStop execution if drag event is empty
* fix: added additonal logs for error
* display query preview data in preview panel and display transformation failure stacktrace data in previewpanel as well (#10129)
* Fix while adding new rows in table components when ever entered the text and pressed enter it doubles the text (#10112)
* Integration bugfixes appbuilder 1.8 (#10109)
* fix : query maanager duplicate and preview issue
* fix : multiselect breaking on making dynamic options null
* fix : preview and query panel integration bugs
* fix : placeholder
* fix : doc links
* fix : scroll in TJDB filter section
* fix : portal for multiselect
* fixes
* fix : image column table alignment
* fix : doc link for multiselect
* fix : codehinter state being persited across components
* fix :export app qery manager items not coming in correct order
* fix: search icon position
* code refactor
---------
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
* add z-index to app name info header container (#10116)
* Fix dropdown and multiselect crash on integer labels (#10128)
* cast integer labels to string
* add null check for label and provide default value for empty labels
* empty and null handle for schemas and other values
* revert changes
* Fix: dark mode on preview names (#10136)
* fix: dark mode of preview names
* fix background color of preview
* fix tjdb query import (#10134)
* fix :revert radio button name change (#10153)
* Fix: select issue on multiselect (#10137)
* remove portal from multiselect
* fix: dynamic values for options in dropdown/multiselect
* remove fx from default option
* Fix: delete on options delete in dropdown (#10192)
* fix: delete on options delete
* fix: overlapping of multiselect on parent container
* fix: outside click of multiselect
* hotfix : Table breaking on importing older apps with null value in column (#10185)
* fix : table breaking on importing older apps with null value in column
* fix : table crash , codehinter not saving values upon page change
* remove low priority wrapper from autosave
* remove logs
* added delay to autosave as callback
* fix: dropdown crash on invalid data (#10202)
* revert to previous transformation code , fix darkmode color (#10216)
* fix : doclink for dropdown (#10217)
* fix : Transformations value getting cleared / not getting saved (#10218)
* fix : transformation value not getting saved
* remove dependency
* chore: version update for release
---------
Co-authored-by: stepinfwd <stepinfwd@gmail.com>
Co-authored-by: vjaris42 <vjy239@gmail.com>
Co-authored-by: Kartik Gupta <gupta.kartik18kg@gmail.com>
Co-authored-by: Nakul Nagargade <133095394+nakulnagargade@users.noreply.github.com>
Co-authored-by: Nakul Nagargade <nakul@tooljet.com>
Co-authored-by: Akshay <akshaysasidharan93@gmail.com>
180 lines
4.9 KiB
JavaScript
180 lines
4.9 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
import { validateWidget, determineJustifyContentValue } from '@/_helpers/utils';
|
|
import OverlayTrigger from 'react-bootstrap/OverlayTrigger';
|
|
|
|
const StringColumn = ({
|
|
isEditable,
|
|
darkMode,
|
|
handleCellValueChange,
|
|
cellTextColor,
|
|
cellValue,
|
|
column,
|
|
currentState,
|
|
containerWidth,
|
|
cell,
|
|
horizontalAlignment,
|
|
isMaxRowHeightAuto,
|
|
cellSize,
|
|
maxRowHeightValue,
|
|
}) => {
|
|
const validationData = validateWidget({
|
|
validationObject: {
|
|
regex: {
|
|
value: column.regex,
|
|
},
|
|
minLength: {
|
|
value: column.minLength,
|
|
},
|
|
maxLength: {
|
|
value: column.maxLength,
|
|
},
|
|
customRule: {
|
|
value: column.customRule,
|
|
},
|
|
},
|
|
widgetValue: cellValue,
|
|
currentState,
|
|
customResolveObjects: { cellValue },
|
|
});
|
|
const { isValid, validationError } = validationData;
|
|
const cellStyles = {
|
|
color: cellTextColor ?? 'inherit',
|
|
};
|
|
const ref = React.useRef(null);
|
|
const [showOverlay, setShowOverlay] = useState(false);
|
|
const [hovered, setHovered] = useState(false);
|
|
const [isEditing, setIsEditing] = useState(false);
|
|
useEffect(() => {
|
|
if (hovered) {
|
|
setShowOverlay(true);
|
|
} else {
|
|
setShowOverlay(false);
|
|
}
|
|
}, [hovered]);
|
|
|
|
useEffect(() => {
|
|
if (!isEditable && isEditing) {
|
|
setIsEditing(false);
|
|
}
|
|
}, [isEditable]);
|
|
|
|
const _renderString = () => (
|
|
<div
|
|
ref={ref}
|
|
contentEditable={'true'}
|
|
className={`${!isValid ? 'is-invalid' : ''} h-100 text-container long-text-input d-flex align-items-center ${
|
|
darkMode ? ' textarea-dark-theme' : ''
|
|
} justify-content-${determineJustifyContentValue(horizontalAlignment)}`}
|
|
tabIndex={-1}
|
|
style={{
|
|
color: cellTextColor ? cellTextColor : 'inherit',
|
|
outline: 'none',
|
|
border: 'none',
|
|
background: 'inherit',
|
|
position: 'relative',
|
|
height: '100%',
|
|
}}
|
|
readOnly={!isEditable}
|
|
onBlur={(e) => {
|
|
setIsEditing(false);
|
|
if (cellValue !== e.target.textContent) {
|
|
handleCellValueChange(cell.row.index, column.key || column.name, e.target.textContent, cell.row.original);
|
|
}
|
|
}}
|
|
onKeyDown={(e) => {
|
|
if (e.key === 'Enter') {
|
|
ref.current.blur();
|
|
if (cellValue !== e.target.textContent) {
|
|
handleCellValueChange(cell.row.index, column.key || column.name, e.target.textContent, cell.row.original);
|
|
}
|
|
}
|
|
}}
|
|
onFocus={(e) => {
|
|
setIsEditing(true);
|
|
e.stopPropagation();
|
|
}}
|
|
>
|
|
{String(cellValue)}
|
|
</div>
|
|
);
|
|
|
|
const getOverlay = () => {
|
|
return (
|
|
<div
|
|
className={`overlay-cell-table ${darkMode && 'dark-theme'}`}
|
|
onMouseEnter={() => setHovered(true)}
|
|
onMouseLeave={() => setHovered(false)}
|
|
style={{ color: 'var(--text-primary)' }}
|
|
>
|
|
<span
|
|
style={{
|
|
width: `${containerWidth}px`,
|
|
}}
|
|
>
|
|
{String(cellValue)}
|
|
</span>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const _showOverlay =
|
|
ref?.current &&
|
|
(ref?.current?.clientWidth < ref?.current?.children[0]?.offsetWidth ||
|
|
ref?.current?.clientHeight < ref?.current?.children[0]?.offsetHeight);
|
|
return (
|
|
<>
|
|
<OverlayTrigger
|
|
placement="bottom"
|
|
overlay={_showOverlay ? getOverlay() : <div></div>}
|
|
trigger={_showOverlay && ['hover', 'focus']}
|
|
rootClose={true}
|
|
show={_showOverlay && showOverlay && !isEditing}
|
|
>
|
|
{!isEditable ? (
|
|
<div
|
|
className={`d-flex align-items-center h-100 w-100 justify-content-${determineJustifyContentValue(
|
|
horizontalAlignment
|
|
)}`}
|
|
style={cellStyles}
|
|
onMouseMove={() => {
|
|
if (!hovered) setHovered(true);
|
|
}}
|
|
onMouseLeave={() => {
|
|
setHovered(false);
|
|
}}
|
|
ref={ref}
|
|
>
|
|
<span
|
|
style={{
|
|
maxHeight: isMaxRowHeightAuto
|
|
? 'auto'
|
|
: maxRowHeightValue
|
|
? maxRowHeightValue
|
|
: cellSize === 'condensed'
|
|
? '39px'
|
|
: '45px',
|
|
}}
|
|
>
|
|
{String(cellValue)}
|
|
</span>
|
|
</div>
|
|
) : (
|
|
<div className="h-100 d-flex flex-column justify-content-center position-relative">
|
|
<div
|
|
onMouseMove={() => {
|
|
if (!hovered) setHovered(true);
|
|
}}
|
|
onMouseLeave={() => setHovered(false)}
|
|
className={`${!isValid ? 'is-invalid h-100' : ''} ${isEditing ? 'h-100 content-editing' : ''} h-100`}
|
|
>
|
|
{_renderString()}
|
|
</div>
|
|
<div className={`${isValid ? '' : 'invalid-feedback text-truncate'} `}>{validationError}</div>
|
|
</div>
|
|
)}
|
|
</OverlayTrigger>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default StringColumn;
|