Releases: epam/UUI
v4.9.1
4.9.1 - 01.12.2022
What's New
- [LockContext]: reworked lock context:
- make
tryRelease
method public tryRelease
argument inacquire
now optional, if isn't passed release lock immediately on requestwithLock
now run passed action and get lock until action running
- make
- [useForm]: added close method, which try to leave form and ask to save unsaved changes
- [DatePickers]: added support for typing value according predefined set of formats
What’s Fixed
- fixed sans semi-bold font url
- [LazyDataSource]: fixed row handle check while tree wasn't initiated
- [NumericInput] prevent value change onScroll
- [NumericInput]: set empty string value on onBlur event in case of invalid input value
- [DND]: fixed container scrolling on element dragging
- [ApiContext]: fixed manual error handling for recovery errors
v4.9.0
4.9.0 - 17.11.2022
This release includes all changes from '4.9.0-rc.1' version
What's New
- [ColumnsConfigurationModal]: redesign and rework logic, added possibility to pin columns from modal
- [PickerInput]: now we predefine search with selected value on picker open, but apply it to search on first change
- [ModalContext]: added argument to abort method
What’s Fixed
- [RawProps]: fixed wrong type for HtmlDivElement
- [TableColumnFilters]: fixed scroll position in 'Show only selected' mode in Loveship
- [Checkbox]: added indeterminate state to the aria-checked attribute
- [Alert]: added min-width to prevent breaking it on extra small devices
- [useForm]: fixed form reset to initialValue after save. Fix value replacing if new 'props.value' was passed
- [LazyDataSource]: added 'null' type for 'parentId' and 'parent' properties in LazyDataSourceApiRequestContext
- [LazyDataSource]: fixed selectAll action for lazyDS with cascadeSelection = false
- [useForm]: re-create handleSave callback if 'props.save' functions is changed
- [DataTableRow]: added possibility to forward ref
- [PresetPanel]: bug and style fixes
- [FiltersPanel]: bug and style fixes
v4.9.0-rc.1
4.9.0-rc.1 - 24.10.2022
What's New
This release prepares UUI for full-featured editable tables support. Editable tables were possible before this - via hooking into renderRow, building a separate component for row, and certain tricks to re-render it w/o re-rendering whole table. However, this was a complex and feature-limited approach.
In this release, we add first-class support for editable cells, and adjust our infrastructure to support various other features to make DataTables editable. You can find example and documentation how to create editable table here.
With this release you already can build editable tables. However, we are planning to improve certain parts in the future releases, e.g. simplify adding/removing/moving rows in tables.
-
[Breaking Change]: DataSources and DataTables-related interfaces refactored:
- DataTableRowProps type is moved from @epam/uui-components to @epam/uui-core
- columns prop is moved from DataRowProps to DataTableRowProps interface
- if you have your own DataTable implementation, you'd need to replace renderRow callback type to use the DataTableRowProps interface instead of DataRowProps
- DataTableCell interface extended to support editable cells (backward compatible)
-
ArrayDataSource -
items
prop value can now be updated dynamically.
Prior to this fix, the only way to updateitems
, is to add them asuseArrayDataSource
dependencies. This forces DataSource to re-create everything, forcing re-render of all tables' rows. This was slow, especially if you need to make cells editable - i.e. re-render on each keystroke. Now, you can safely remove your items from deps: useArrayDataSource(..., ~~~[items]~~~), which will improve performance. -
DataSources:
getRowOptions
is called on each update, allowing to dynamically change rows behavior. For example, you can dynamically enable/disable checkboxes in Tables or PickerInputs. -
DataSources: getRowOptions - DataRowOptions now implements
IEditable<TItem>
interface. This allows to make rows editable, by passing value/onValueChange directly, or by using lens.toProps():getRowOptions(item) => lens.prop(item.id).toProps()
-
[Breaking Change]: DataTableCell layout reworked.
- Cells and tables tweaked to support vertical borders, hover/focus border effects for editable cells
- Now, cell content is rendered in flexbox context (was block). Please review cells layout (alignment and width of the cells content)
- DataTableColumn - new prop: justifyContent, which sets appropriate flexbox property. Can be used to align items horizontally. If omitted, we use existing textAlign property to set it. I.e. you can still use textAlign: left/center/right to align textual cell content.
- DataTableCell renders focus/hover effects (borders) on their own. We removed these effects from all inputs with mode='cell'.
-
[Breaking Change]: DataTable columns widths props are simplified. Columns width are defined by width (in pixels), and (optionally) grow - which defines a part of empty space for column to occupy. Props affected:
- shrink prop - marked @deprecated. It will be removed in future versions.
'shrink' prop wasn't supported even before this change, so you can safely remove it from all columns.
Column can't 'shrink' (become less than width), as we add horizontal scrolling instead of shrinking in case all columns doesn't fit. - 'width' prop is now required (was optional).
If you didn't have 'width' on a column, most probably you mean width=0 and have grow=1 - to make the column to occupy all empty space. You can set width: 0 explicitly in such cases. - 'minWidth' prop now doesn't work as flex-item prop, it only serves as minimum width for manual column resizing. Default is minWidth = width.
- shrink prop - marked @deprecated. It will be removed in future versions.
-
[Breaking Change]: DataSources doesn't work with array/object ids by-default. In certain cases, we used IDs like [123, 'group-row'] to handle scenarios when there are different types of entities, with overlapping ids. E.g. item groups, and actual records in grouping table case. They are no-longer supported by default.
- If you use such ids, set
complexIds = true
prop when creating DataSource. In this case, DataSource will use JSON.stringify to use IDs as Map keys internally. This was default behavior prior this change, which has impact on performance, so it's made optional - number and string ids are supported correctly by default
- If you use such ids, set
-
useForm now provides two new callbacks: setValue and replaceValue.
They work the same way as setState of React.useState.
Besides a plain new form value, both can accept a function(currentValue: T) => T
. This option is useful if you want to useuseCallback
to memoize operations on the whole state of the form.
setValue acts as a usual user-made change to a form - sets isChanged, creates undo checkpoint, etc.
replaceValue doesn't update isChanged, and can be used for technical needs. E.g. to store values like 'currentTab' in the form state. -
Metadata type - 'all' prop now infer the type of array element or object values (was typed as 'any')
-
Lenses now memoizes all methods calls (.prop, .item, etc.).
This allows to not re-create onValueChange callbacks on re-renders.
In turn, it opens a way to use React.memo/shouldComponentUpdate optimization for IEditable components. -
[PresetsPanel]: Added new
PresetsPanel
component, which allows you to save your current filtration into presets and manage them. See demo here. -
[AdaptivePanel]: Added new
AdaptivePanel
component. This component helps you to layout elements inside container and hide items by their priorities if they didn't fit. -
[MainMenu]: reworked based on
AdaptivePanel
, now you can provide menu elements in new format viaitems
prop. But we also left working old approach with children, so no action is required from your side. -
[Numeric Input] - reworked to display number is locale format (e.g. with decimal and thousands separators) while not being edited.
- Formatting can be disabled with the
disableLocaleFormatting
prop - min/max are no longer required. By default, NumericInput only accepts positive whole numbers.
- A lot of display options are now possible via NumberFormatOptions: currencies, units, flexible min/max fractional digits limits, etc.
- See more at the docs page
- Formatting can be disabled with the
-
[RangeDatePicker]: Added onFocus and onBlur props
-
[PickerInput]: added ability to pass rawProps to modal window
-
[Modals]: added
disableCloseByEsc
prop toModalBlocker
-
[Accordion]: API improvements, added opportunity to overwrite title.
-
[DropdownMenuButton]: added possibility to provide onClick for icon
-
[FilterToolbar][Breaking change]: renamed
FilterToolbar
component toFilterPanel
-
[FilterPanel]: added numeric filter type
-
[FilterPanel]: improvements and bugfixes
-
Build target for packages is changed from ES5 to ES6. This shouldn't affect existing apps, as most app builds into ES5 anyway, including the latest CRA.
What’s Fixed
- Fixed
rawProps
prop typings - [DndActor]: improved 'inside' position calculation
- [useForm]:
- fixed revert/undo/redo behavior after save
onValueChange
now triggers internal validation logic (as with changes made with lenses)- refactored to remove unnecessary re-renders in some cases
- ArrayDataSource/ArrayListView now generates row indexes starting from 0 (was from 1)
- [Button]: Added default type 'button' for all buttons.
- [RangeDatePicker]: fixed styles for presets block
- [Datepicker]: fixed unnecessary onValueChange calls
- [LabeledInput]: changed paddings for validationMessage
- [PickerInput]: fixed issues with focusing at PickerToggler
- [NumericInput]: added behavior for input without value and with min prop on focus lost
- [MainMenu]: fixed styles for non-clickable elements
- [ErrorHandler]: fixed context listeners unsubscribing on second render
- [ColumnConfigurationModal]: fix column dnd on first position
- [TabButton]: reworked notify dot styles, placed after caption element, change paddings
- [PickerInput]: fixed row selecting by 'enter' pressing
v4.8.5
4.8.5 - 15.09.2022
What’s Fixed
- [RTE]: fix readonly mode
- [ErrorHandler]: fix 'dark' theme error container styles
v4.8.4
4.8.4 - 09.09.2022
What’s Fixed
- [RTE]: fix wrong image size on first render
- [RTE]: fix cursor jumping on new text typing in chrome 105+ version
- [RTE]: fix image reducing to the minimum size when trying to resize it without focus on it
v4.8.3
4.8.3 - 01.09.2022
What’s Fixed
-
[PickerInput]: disabled elements in multi-picker no longer can be deleted with cross at tag in the input. Before this fix, cross icon was visible, and clicking it caused crash
-
[LazyDataSource]: Select All now selects only currently visible items. Prior the fix, all items which was loaded before (e.g. with other/no filters) was selected.
-
[useVirtual]: Improved visible range computation:
Virtual lists now adjust visible area in fixed-sized 'blocks'. E.g. topIndex, visibleCount, and from/count in LazyDataSource requests will be always divisible by Block Size. This helps to avoid cases when only several rows are requested on small scrolls. This also can help with pageNo/pageSize-oriented API. Block size defaults to 20, and configurable with
blockSize
prop.We also render more rows above and below visible area to avoid blank areas and loading rows when scrolling at normal speed. This is also configurable with
overdrawRows
setting (defaults to 20, meaning at least 20 rows above/below the visible area are rendered)This change also fixes the problem when lazy-loading stops, while the end of the list is not reached.
-
[FilterPanel]: fix filter toggler value if selected item id === 0
-
[FilterPanel]: fix add new filter error after all filters was cleared
-
[FilterPanel]: remove filter value when uncheck filter from 'Add filter' dropdown
v4.8.2
4.8.2 - 22.08.2022
What's New
- [FilterPanel]: add possibility to add predicates for filters. For this provide
predicates
array inTableFiltersConfig
- [DataTable]: add possibility to reset sorting to default value
What’s Fixed
- [PickerInput]: fix input with minCharsToSearch props. Fix toggler input size in 'multi' mode
v4.8.1
4.8.1 - 10.08.2022
What's New
- Add
rawProps
prop for the rest part of the components - Updated icon pack
- [PickerItem]: add possibility to pass icon
- [FiltersPanel]: add possibility to provide your own
renderRow
callback - [DatePicker]: add
placement
props - [DataTable]: add default 'not results found' state
- [PickerModal]: add default 'not results found' state
- [FilterToolbar]: small improvements and bugfixes
What’s Fixed
- [PickerInput]: rework styles for selected value in toggler
- [DataTable]: fix table rerender when columns prop changed
- [NumericInput]: don't allow '+' and 'e' symbols
- [LinkButton]: fix focus state
- [RangeDatePicker]: fix error when preset is
null
- [NotificationCard]: rework styles
v4.8.0
4.8.0 - 21.07.2022
What's New
- Added new
FiltersToolbar
component, which creates table filtration toolbar according to theTableFiltersConfig
object. See demo here - https://uui.epam.com/demo?id=filteredTable - [Form]: implement possibility to run form validation on field change, for this pass
validationOn: 'change'
to form props - [DropdownContainer]: reworked styles, add possibility to show arrow tip
- [Anchor]: implement open Anchor links with Ctrl or Command in new window
- [PickerInput]: add 'fixedBodyPosition' prop, to have possibility to fixed body on initial position in case when toggler moved
- [FileUpload]: rework error states
What’s Fixed
- [DropSpot]: fix drag&drop area view
- [NumericInput]: fix arrows layout hidden when input disabled or readonly
- [DropdownMenu]: fixed item active state
- [Avatar]: fix ref receiving
- [RTE]: remove unnecessary editor state update on image load
- [PickerInput]: remove close icon from tag in disabled/readonly mode
- [PickerInput]: change styles for search in body
- [Badge]: fixed semitransparent hover colors
- [Tooltip]: change tooltip logic, when the new children is passed. Fixed loop, when a lot of listeners was attached
- [RangeDatePicker]: fix preset styles
v4.7.1
4.7.1 - 06.06.2022
What's New
- [Buttons and Anchors]: support SPA links opening in new window when Ctrl/Command key pressed
What’s Fixed
- [DropSpot]: fix dnd behavior when user drag&drop file out of drag area
- [PickerInput]: fix the second line tag margin in multi mode
- [NumericInput]: hide arrows when input disabled or readonly
- [DataTable]: added missing sizes styles for header
- [ErrorHandler]: return getDefaultErrorPageProps and recoveryWordings export from loveship
- [useForm]: handle rejected promise after save
- [Burger]: fix scroll on body when burger closes
- [VirtualList]: fix auto scroll onHover on top or bottom item