JavaScript data grid with a spreadsheet look & feel. Works with React, Angular, and Vue. Supported by the Handsontable team ⚡
TrimRows
, HiddenRows
and HiddenColumns
plugins for big datasets with many trimmed/hidden indexes. #7223
afterRemoveRow
hook #7179
HiddenColumns
plugin. #6395
NestedRows
plugin enabled, resulted in an error. #7132
ColumnSummary
was enabled without defined row ranges. #7174
updateSettings
was breaking column sorting in specific cases. #7228
fixedColumnsLeft
was defined, rows had their left borders missing after disabling the row headers using updateSettings
. #5735
window
object. #7260
NestedRows
plugin was enabled. Repaired some other minor moving-related bugs as well. #6067
updateSettings
. #6004
This version introduces a completely new architecture for row and column management - index mapper, which is responsible for the storage and management of index values. In prior versions, the calculation between physical and visual indexes was based on callbacks between hooks. That solution slowly led to inconsistencies and the calculation was imperfect in some cases. To fix that there was a major change in the whole system of mapping the indexes. The current solution offers an easier and more straightforward way to perform CRUD and move operations on rows and columns. It keeps all data in one place so getting and managing information is easier and less prone to bugs.
The existing features were adapted to benefit from the new architecture. Apart from that, extra methods and hooks were added and there are few depreciations and removals, too.
render()
will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray
or setDataAtCell
.modifyRow
, modifyCol
, unmodifyRow
, unmodifyCol
hooks are no longer needed and were removed. Their
functionality can be achived by using API. More information in the 8.0.0 migration guide.skipLengthCache
hook was removed, indexMapper
is now responsible for the cache and length.manualColumnFreeze
plugin doesn't use the manualColumnMove
plugin anymore.collapsibleColumns
plugin doesn't use the hiddenColumns
plugin anymore.nestedRows
and filters
plugins don't use the trimRows
plugin anymore.minSpareRows
and minRows
options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows
plugin won't have an impact on the number of displayed rows).toPhysicalRow
and toVisualColumn
now return null
for non-existant rows/columns. #5945
afterLoadData
hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData
, followed by initialLoad
.manualColumnFreeze
plugin will now put the unfrozen columns right next to the last frozen one.RecordTranslator
object and the t
property available in the plugins were removed.afterLoadData
, afterFilter
, etc.) are now called just before the render
call.nestedRows
plugin is enabled
, moving rows will be possible only using the UI or by calling the dragRows
method of the manualRowMove
plugin.beforeRowResize
, afterRowResize
, beforeColumnResize
, afterColumnResize
hooks have the order of their arguments rearranged for the sake of consistency with other hooks and to fix an issue where multiple hooks didn't get the modified value in the pipeline: #3328
collapsibleColumns
' toggleCollapsibleSection
method: #6193
HiddenColumns
and CollapsibleColumns
. They will be compatible with upcoming IndexMappers
#5945 along with other adjustments #6547:
beforeValueRender
, beforeRenderer
, afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
etc. will be executed just for some of the columns (just the rendered ones).getColWidth
for hidden index will return 0 – it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns.modifyColWidth
hook will not be called internally. However, it will be executed when the user will call the getColWidth
.beforeValueRender
, beforeRenderer
, afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
etc. will be executed just for some of the columns (just the rendered ones).listen
function from the core API used to accept modifyDocumentFocus
as optional parameter, this parameter was removed.CustomBorders
plugin was adapted to work with HiddenColumns
properly. From now on hiding cells at the start or the end of the range will also hide their borders. Hiding a single cell with borders will hide all of its borders. #7083
CollapsibleColumns
will no longer use HiddenColumns
plugin to work. #6204
HiddenColumns
to be compatible with upcoming IndexMappers
. #6547
hiddenRow
and hiddenColumn
hooks were removed. They were used to check if a given index is hidden in the HiddenColumns
and HiddenRows
plugins. Since now there may be more sources of hiding indexes they have been replaced by IndexMapper
with the new isHidden
method. It keeps the broad information about hidden indexes and their sources.rowOffset
and colOffset
were removed since they aliased the methods from Walkontable. #6547
HiddenRows
to new IndexMapper
architecture are #6177:
HiddenRows
to new IndexMapper
architecture. #6177
NestedHeaders
plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
RMB
) click on the corner when there is no data will show all options disabled. #6547
LMB
) click on the top left corner will now select all cells along with their headers. #6547
GanttChart
plugin. #7022
updateSettings
to the source data is possible only by the usage of setSourceDataAtCell
#6664
columns
or data
inside the settings
object when calling the updateSettings
method will result in resetting states corresponding to rows and columns (ie. row/column sequence, column width, row height, freezed columns etc.). The same behavior can be seen when using loadData
. In such cases, it is assumed that a new dataset is introduced upon calling updateSettings
or loadData
. #6547
batch
method. #5945 along with other adjustments (https://github.com/handsontable/handsontable/issues/7068)observeChanges
plugin is no longer enabled by columnSorting
and became deprecated. #5945
HeaderTooltips
plugin becomes deprecated and will be removed in the next major version. #7023
modifySourceData
hook and setSourceDataAtCell
method. #6664
scrollViewportTo
method: optional considerHiddenIndexes
which is a boolean
. #6547
autofill
in the beforeAutofill
hook. #4441
afterAutoFill
hook. #6135
instance.undoRedo
. #6346
countRenderableColumns
method to the TableView
. #6177
CustomBorders
typings. #6788
beforeSetCellMeta
hook with an ability to cancel the changes. #5388
manualRowMove
and manualColumnMove
plugins work #5945
CellMeta
manager was refactored for future features and improvements. #6254
rowHeights
. #6149
RMB
) click on the corner, column and row headers will show just some options, defined by newly created specification #7082
afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
will be executable only on visible (meaning, rendered) rows and columns. #6547
getColWidth
for hidden index will return 0 - it used to return 0.1 #6547
modifyColWidth
hook isn't called internally. However, it will be executed when the user will call the getColWidth
. #6547
beforeValueRender
, beforeRenderer
, afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
etc. will be executed just for some of the columns (just the renderable ones). #6547
ContextMenu
, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise. #6547
NestedHeaders
plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
CustomBorders
plugin was adapted to work with HiddenColumns
properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083
render()
will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray
or setDataAtCell
. #5945
manualColumnFreeze
plugin doesn't use the manualColumnMove
, the collapsibleColumns
plugin doesn't use the hiddenColumns
plugin, nestedRows
plugin doesn't use the trimRows
plugin, filters
plugin doesn't use the trimRows
plugin anymore. #5945 along with other adjustments #6547:minSpareRows
and minRows
options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows
plugin won't have an impact on the number of displayed rows). #5945
toPhysicalRow
and toVisualColumn
now return null
for non-existant rows/columns. #5945
afterLoadData
hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData
, followed by initialLoad
. #5945
manualColumnFreeze
plugin unfreezes the column just after the "line of freeze". #5945
RecordTranslator
object and the t
property available in the plugins were removed. #5945
afterLoadData
, afterFilter
, etc.) are now called just before the render
call. #5945
nestedRows
plugin is enabled
, moving rows will be possible only using the UI or by calling the dragRows
method of the manualRowMove
plugin. #5945
beforeRowResize
, afterRowResize
, beforeColumnResize
, afterColumnResize
hooks have the order of their arguments rearranged for the sake of consistency with other hooks. #3328
collapsibleColumns
' toggleCollapsibleSection
method. #6193
moment
, numbro
and pikaday
dependencies to their latest versions. #6610
z-index
properties between the overlays. #6269
HeaderTooltips
plugin becomes deprecated and will be removed in the next major version. #7023
firstVisibleColumn
CSS class as no longer needed. #6547
beforeChange
callback. #6792
debug
key (key, css, docs). #6672
hiddenRow
and hiddenColumn
hooks. #6547
modifyDocumentFocus
from the listen
function. #6547
rowOffset
and colOffset
public API methods since they aliased the methods from Walkontable. #6547
GanttChart
plugin. #7022
modifyRow
, modifyCol
, unmodifyRow
, unmodifyCol
and skipLengthCache
hooks are no longer needed and were removed. #5945
columnSorting
option enabled. #2685
loadData
not resetting the row order changed by the manualRowMove
plugin. #3568
alter
's insert_row
after using the loadData
method and sorting the data would add unintentional additional rows to the table. #3809
loadData
along with the minSpareRows
option. #3937
columnSummary
plugin not working properly after adding new rows using the Context Menu and sorting the data. #3924
loadData
with an object-based data source would not work properly. #4204
filters
plugin using incorrect indexes after moving and/or sorting the table. #4442
0
. #4470
afterRowMove
hook receiving an improper target
argument. #4501
manualColumnFreeze
plugin enabling manualColumnMove
, even if it was declared as false
. #4553
loadData
with minSpareRows
and manualRowMove
enabled caused the table to improperly load the data. #4576
columnSorting
caused the manualColumnFreeze
to be unusable. #4601
persistentState
was enabled. #4713
manualColumnMove
didn't work if the dataset was empty. #4926
loadData
with minSpareRows
enabled would cause unwanted blank rows to appear. #5707
afterColumnMove
hook receiving an improper target
argument. #5173
loadData
made NaN
appear in the column headers. #5369
skipColumnOnPaste
option not working properly when using columnSorting
and hiddenColumns
. #5824
trimRows
plugin did not work properly after moving rows. #5860
minSpareRows
not working properly with the trimRows
plugin being used. #5862
toVisualRow
method to return the wrong results. #5890
filters
and trimRows
plugins not working properly alongside each other. #5915
manualColumnMove
would not work properly when the data object properties count would be lower than the table column count. #5931
trimRows
plugin did not work properly with the startRows
option. #5953
loadData
after sorting would not work as expected. #5956
beforeColumnMove
and afterColumnMove
hooks not containing information about their destination indexes. #6005
filters
and minSpareRows
would make the table add an empty row at the beginning of the table. #6278
manualRowMove
plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. #6088
toVisualRow
method returned null
when using the trimRows
and columnSorting
plugins together. #6310
updateSettings
in the afterColumnMove
hook callback would have no effect. #4480
loadData
would make the filters
plugin to not behave as expected. #5244
nestedRows
plugin would cause a +/-
button misalignment. #5900
columnSummary
plugin creating a doubled summary row. #5794
nestedRows
plugin would throw an error. #6066
columnSorting
plugin. #6086
updateSettings
. #4121
hiddenColumns
and stretchH
showed a redundant horizontal scrollbar. #4181
stretchH
was enabled, the last column was displayed. #4370
updateSettings
performance was very low because of hiddenColumns
being rendered. #4381
hiddenColumns
did not work properly with columnSorting
. #5571
manualColumnMove
should work with hiddenColumns
. #5598
hiddenColumns
option interfered with the keyboard movement. #5704
collapsibleColumns
were set to true
it was impossible to exit selection mode. #5875
hiddenColumns
did not work properly with autoWrapRow/autoWrapCol
. #5877
nestedHeaders
duplicated a header name if more columns are added. #5882
hiddenColumns
plugin unset cell's renderer
. #5883
hiddenColumns
had stored visual indexes and should have used physical indexes. #5909
columns
caused an issue with showing column once it was hidden. #6426
colHeader
was truncated after moving hiddenColumn
. #6463
columnSorting
to true
(on initialization or via updateSettings
) made headers non-collapsible programmatically via collapseAll
method. #4999
customBorders
plugin was missing in the definition file. #6477
wtHiderand
and wtHolder
in overlays. #3873
updateSettings
could not update tableClassName
. #6295
minSpareCols
with undo
added too many columns. #6363
readOnly
for column was erased (did not apply) if filters were used. #6559
beforeRemoveCol
or beforeRemoverow
. #6332
readOnly
state for some cells was lost when rows with trimRows
turned on were removed. #6990
hiddenColumns
were used. #6978
selectAll
when the first row was hidden. #6975
nestedRows
blocked table from loading if data was not provided. #6928
trimRows
and hiddenRows
with specific settings broke borders. #6904
startPosition
. #6840
Handsontable.plugins.ContextMenu
. #6347
manualColumnMove
did not modify the columns
in updateSettings
. #5200
updateSettings
. #3770
currentColClassName
did not work properly with nestedHeaders
. #5861
stretchH
. #6186
getSourceData
functions returned wrong data for nested rows. #5771
nestedRows
. #4154
getByRange
for sourceData did not work properly with nested object data. #6548
window.frameElement
threw errors in MSEdge, IE and Safari. #6478
DataSource.countColumns
returned invalid number of columns for nested objects. #3958
mergedCells
with hidden cells caused problems with rendering. #7020
ctrl + a
. #6355
onMouseOut
event caused critical errors when hovering over vertical scrollbar. #6699
NestedHeaders
did not allow to define header level as an empty array. #7035
nestedHeaders
as a single empty array stoped the table from rendering. #7036
hot.updateSettings
was called in afterSelection
. #3726
exportToFile
in the specific case. #4176
afterRowResize
hook shared incorrect results in the second parameter. #6430
null
. #7074
updateSettings
changed the index of frozen columns via freezeColumn
method. #6843
updateSettings
which was part of the selection caused scroll to the bottom. #5849
setCellMeta
. #4793
clear
method removed the focus from the table. #7099
clear
method did not work for hidden data. #7097
beforeRowMove
arguments. #6539
nestedRows
. #5133
afterOnCellMouseDown
returned (0,0) coords after clicking on the topleft corner. #3978
manualColumnMove
was not restored when using loadData
. #5207
manualColumnMove
operation affected the column order of data loaded by loadData
. #5591
nestedRows
did not allow to keep rowHeaders
after collapsing. #5874
walkontable.css
and handsontable.css
stylesheets were out of sync. #6381
colHeaders
order was not updated after manual move with empty object data source. #6413
PreventOverflow
feature did not work if multiColumnSorting
plugin was enabled. #6514
updateSettings
. #6575
columnSummary
, Filters
and spare rows were causing 'RangeError: Maximum call stack size exceeded'. #6695
afterSelectionEnd
returned incorrect data when clicking on a column when all rows were hidden. #7045
trimWhitespace
to false
. #6232
BACKSPACE
not working properly in the filter by value input. #6842
deepObjectSize
function. #6821
fixedRowsTop
and fixedRowsBottom
higher than rows length. #6718
SPACE
. #4882
preventOverflow
with updateSettings
were used. #4303
drag
and via a CTRL/CMD + A
shortcut. #6327
We are excited to announce we have just released the second beta version of 8.0.0. This blog post describes changes that happened after the release of the first beta, for the previous changes please see the previous blog post.
After implementing a new architecture for managing row and column indexes several parts of the library had te be adapted. It mainly includes adjusting the existing hooks to work properly with the new solution for managing the indexes. This is the last step before releasing a stable 8.0.0 version.
We adapted the library to work with the new architecture for row and column management.
HiddenColumns
and CollapsibleColumns
. They will be compatible with upcoming IndexMappers
#6547 along with other adjustments #6178:
afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
will be executable only on visible (meaning, rendered) rows and columns.getColWidth
for hidden index will return 0 - it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns.modifyColWidth
hook will not be called internally. However, it will be executed when the user will call the getColWidth
.beforeValueRender
, beforeRenderer
, afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
etc. will be executed just for some of the columns (just the rendered ones).listen
function from the core API used to accept modifyDocumentFocus
as optional parameter, this parameter was removed.CustomBorders
plugin was adapted to work with HiddenColumns
properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083.CollapsibleColumns
will no longer use HiddenColumns
plugin to work. #6204
HiddenColumns
to be compatible with upcoming IndexMappers
. #6179
IndexMapper
:
getPhysicalIndex
to getPhysicalFromVisualIndex
getVisualIndex
to getVisualFromPhysicalIndex
isSkipped
to isTrimmed
getNotSkippedIndexes
to getNotTrimmedIndexes
getNotSkippedIndexesLength
to getNotTrimmedIndexesLength
SkipMap
to TrimmingMap
VisualIndexToPhysicalIndexMap
to IndexesSequence
.hiddenRow
and hiddenColumn
hooks were removed. They were used to check if a given index is hidden in the HiddenColumns
and HiddenRows
plugins. Since now there may be more sources of hiding indexes they have been replaced by IndexMapper
with the new isHidden
method. It keeps the broad information about hidden indexes and their sources.rowOffset
and colOffset
were removed since they aliased the methods from Walkontable #6547
HiddenRows
to new IndexMapper
architecture #6177:
HiddenRows
to new IndexMapper
architecture.HiddenRows
plugin. #6887
ContextMenu
, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise. #6949
NestedHeaders
plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers #6716.modifySourceData
hook and setSourceDataAtRowProp
, setSourceDataAtCell
methods. #6664
GanttChart
plugin #7022
HeaderTooltips
plugin becomes deprecated and will be removed in the next major version. #7023
modifySourceData
hook and setSourceDataAtRowProp
, setSourceDataAtCell
methods. #6664.HidingMap
. It works similar to the TrimmingMap
. #6547
getPhysicalFromRenderableIndex: (renderableIndex: number) => number | null,
getVisualFromRenderableIndex: (renderableIndex: number) => number | null,
getRenderableFromVisualIndex: (visualIndex: number) => number | null,
isHidden: (physicalIndex: number) => boolean,
getFirstNotHiddenIndex: (fromVisualIndex: number, incrementBy: number, searchAlsoOtherWayAround?: boolean, indexForNextSearch?: number) => number | null,
getNotHiddenIndexes: (readFromCache?: boolean) => number[],
getNotHiddenIndexesLength: () => number,
getRenderableIndexes: (readFromCache?: boolean) => number[],
getRenderableIndexesLength: () => number
.scrollViewportTo
method: optional considerHiddenIndexes
which is a boolean
. #6547
autofill
in the beforeAutofill
hook #4441
afterAutoFill
hook. #6135
fixedRowsBottom
. #6269
deepObjectSize
function. #6821
instance.undoRedo
. #6346
countRenderableColumns
method to the TableView
#6887
CustomBorders
typings. #6788
beforeSetCellMeta
hook with an ability to cancel the changes. #5388
CellMeta
manager was refactored for future features and improvements. #6233
rowHeights
. #6149
afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
will be executable only on visible (meaning, rendered) rows and columns. #6547
getColWidth
for hidden index will return 0 - it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns. #6547
modifyColWidth
hook isn't called internally. However, it will be executed when the user will call the getColWidth
. #6547
getPhysicalIndex
method was renamed to getPhysicalFromVisualIndex
.#6547
getVisualIndex
method was renamed to getVisualFromPhysicalIndex
.#6547
isSkipped
method was renamed to isTrimmed
.#6547
getNotSkippedIndexes
method was renamed to getNotTrimmedIndexes
.#6547
getNotSkippedIndexesLength
method was renamed to getNotTrimmedIndexesLength
.#6547
SkipMap
class was renamed to TrimmingMap
.#6547
VisualIndexToPhysicalIndexMap
class was renamed to IndexesSequence
.#6547
beforeValueRender
, beforeRenderer
, afterRenderer
, modifyColWidth
, beforeStretchingColumnWidth
etc. will be executed just for some of the columns (just the rendered ones). #6547
ContextMenu
, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise.NestedHeaders
plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
CustomBorders
plugin was adapted to work with HiddenColumns
properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083
CollapsibleColumns
will no longer use HiddenColumns
plugin to work. #6204
HeaderTooltips
plugin becomes deprecated and will be removed in the next major version. #7023
beforeChange
callback. #6792
debug
key (key, css, docs). #6672
hiddenRow
and hiddenColumn
hooks. #6547
modifyDocumentFocus
from the listen
function.rowOffset
and colOffset
public API methods since they aliased the methods from Walkontable #6547
GanttChart
plugin #7022
updateSettings
. #4121
hiddenColumns
and stretchH
showed a redundant horizontal scrollbar. #4181
stretchH
was enabled, the last column was displayed. #4370
updateSettings
performance was very low because of hiddenColumns
being rendered. #4381
nestedHeaders
plugin. #4716
hiddenColumns
did not work properly with columnSorting
. #5571
manualColumnMove
should work with hiddenColumns
. #5598
hiddenColumns
option interfered with the keyboard movement. #5704
collapsibleColumns
were set to true
it was impossible to exit selection mode. #5875
hiddenColumns
did not work properly with autoWrapRow/autoWrapCol
. #5877
nestedHeaders
duplicated a header name if more columns are added. #5882
hiddenColumns
plugin unset cell's renderer
. #5883
hiddenColumns
had stored visual indexes and should have used physical indexes. #5909
columns
caused an issue with showing column once it was hidden. #6426
colHeader
was truncated after moving hiddenColumn
. #6463
columnSorting
to true
(on initialization or via updateSettings
) made headers non-collapsible programmatically via collapseAll
method. #4999
customBorders
plugin was missing in the definition file. #6477
wtHider
and wtHolder
in overlays. #3873
updateSettings
could not update tableClassName
. #6295
minSpareCols
with undo
added too many columns. #6363
readOnly
for column was erased (did not apply) if filters were used. #6559
beforeRemoveCol
or beforeRemoverow
. #6332
readOnly
state for some cells was lost when rows with trimRows
turned on were removed. #6990
hiddenColumns
were used. #6978
selectAll
when the first row was hidden. #6975
nestedRows
blocked table from loading if data was not provided. #6928
trimRows
and hiddenRows
with specific settings broke borders. #6904
startPosition
. #6840
Handsontable.plugins.ContextMenu
. #6347
manualColumnMove
did not modify the columns
in updateSettings
. #5200
updateSettings
. #3770
currentColClassName
did not work properly with nestedHeaders
. #5861
stretchH
. #6186
getSourceData
functions returned wrong data for nested rows. #5771
nestedRows
. #4154
getByRange
for sourceData did not work properly with nested object data. #6548
window.frameElement
threw errors in MSEdge, IE and Safari. #6478
DataSource.countColumns
returned invalid number of columns for nested objects. #3958
mergedCells
with hidden cells caused problems with rendering. #7020
ctrl + a
. #6355
onMouseOut
event caused critical errors when hovering over vertical scrollbar. #6699
NestedHeaders
did not allow to define header level as an empty array. #7035
nestedHeaders
as a single empty array stoped the table from rendering. #7036
hot.updateSettings
was called in afterSelection
. #3726
exportToFile
in the specific case. #4176
afterRowResize
hook shared incorrect results in the second parameter. #6430
null
. #7074
updateSettings
changed the index of frozen columns via freezeColumn
method. #6843
updateSettings
which was part of the selection caused scroll to the bottom. #5849
setCellMeta
. #4793
clear
method removed the focus from the table. #7099
clear
method did not work for hidden data. #7097
beforeRowMove
arguments. #6539
onCellMouseUp
hook was fired for all mouse buttons except the right one, which was not consistent with the onCellMouseDown
hook. dblclick
event (which is triggered only for the left mouse button), the onCellDblClick
and onCellCornerDblClick
hooks were modified to also fire only for the left mouse button. (#6507)moment
, pikaday
and numbro
to their latest versions. (#6610)pt_BR
culture setting. (#5569)7.3.0
introduces a new option to the Context Menu plugin - uiContainer
. It allows declaring a DOM container, where all the Context Menu's element will be placed. It may come espacially handy when using Handsontable inside of an iframe
or some other content-trimming context. (#6283, #6417)uiContainer
option to the Copy/Paste plugin. It works in a similar way to the one described above, but is used to declare the container for the Copy/Paste plugin's DOM elements. (#6343)puppeteer
package in the devDependencies
section to get rid of the npm audit
security error. (#6393)CNAME_
file from the repo. (#6389)& < > ' "
characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)We implemented a new architecture for row and column management.
It allows an easier and more straightforward way to perform CRUD and moving operations on rows and columns. This change forced us to create some breaking changes:
The observeChanges
plugin is no longer enabled by columnSorting
and became deprecated.
Modifying the table's data by reference and calling render()
will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray
or setDataAtCell
.
The modifyRow
, modifyCol
, unmodifyRow
, unmodifyCol
and skipLengthCache
hooks are no longer needed and were removed.
The manualColumnFreeze
plugin doesn't use the manualColumnMove
plugin anymore.
The collapsibleColumns
plugin doesn't use the hiddenColumns
plugin anymore.
The nestedRows
plugin doesn't use the trimRows
plugin anymore.
The filters
plugin doesn't use the trimRows
plugin anymore.
The minSpareRows
and minRows
options will ensure that the number of visible rows corresponds to the value provided to them (for example, the trimRows
plugin won't have an impact on the number of displayed rows).
Methods like toPhysicalRow
, toVisualColumn
, etc. now return null
for non-existant rows/columns.
The afterLoadData
hook receives a different set of arguments. It used to be just the initialLoad
flag, now the first argument is sourceData
, followed by initialLoad
.
The manualColumnFreeze
plugin will now put the unfrozen columns right next to the last frozen one.
The RecordTranslator
object and the t
property available in the plugins were removed.
after
-prefixed hooks (afterLoadData
, afterFilter
, etc.) are now called just before the render
call.
Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they "stick" to their adjacent rows/columns). It also applies to moved rows and columns.
When the nestedRows
plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows
method of the manualRowMove
plugin.
For more in-depth information about these changes, see the description of pull request #5945. (#5751)
The beforeRowResize
, afterRowResize
, beforeColumnResize
, afterColumnResize
hooks have the order of their arguments rearranged for the sake of consistency with other hooks:
Was:
(currentIndex: number, newSize: number, isDoubleClick: boolean)
Is:
(newSize: number, index: number, isDoubleClick: boolean)
(#3328)
Change the argument structure in collapsibleColumns
' toggleCollapsibleSection
method.
Was:
(coords: object, action: string)
Is:
coords: Array<object>, action: string)
(#6193)
7.3.0
)uiContainer
. It allows declaring a DOM container, where all the Context Menu's element will be placed. It may come espacially handy when using Handsontable inside of an iframe
or some other content-trimming context. (#6283, #6417)uiContainer
option to the Copy/Paste plugin. It works in a similar way to the one described above, but is used to declare the container for the Copy/Paste plugin's DOM elements. (#6343)columnSorting
option enabled. (#2685)loadData
not resetting the row order changed by the manualRowMove
plugin. (#3568)alter
's insert_row
after using the loadData
method and sorting the data would add unintentional additional rows to the table. (#3809)loadData
along with the minSpareRows
option. (#3937)columnSummary
plugin not working properly after adding new rows using the Context Menu and sorting the data. (#3924)loadData
with an object-based data source would not work properly. (#4204)updateSettings
. (#4121)filters
plugin using incorrect indexes after moving and/or sorting the table. (#4442)0
. (#4470)afterRowMove
hook receiving an improper target
argument. (#4501)manualColumnFreeze
plugin enabling manualColumnMove
, even if it was declared as false
. (#4553)arrayMappers
not working properly after updating the dataset. (#4567)loadData
with minSpareRows
and manualRowMove
enabled caused the table to improperly load the data. (#4576)columnSorting
caused the manualColumnFreeze
to be unusable. (#4601)persistentState
was enabled. (#4713)manualColumnMove
didn't work if the dataset was empty. (#4926)collapseAll
method from the collapsibleColumns
plugin did not work properly if columnSorting
was enabled. (#4999)columnSorting
, manualRowMove
, and trimRows
plugins. (#5065)manualRowMove
plugin to match the new architecture. (#5068)loadData
with minSpareRows
enabled would cause unwanted blank rows to appear. (#5707)afterColumnMove
hook receiving an improper target
argument. (#5173)loadData
made NaN
appear in the column headers. (#5369)skipColumnOnPaste
option not working properly when using columnSorting
and hiddenColumns
. (#5824)trimRows
plugin did not work properly after moving rows. (#5860)minSpareRows
not working properly with the trimRows
plugin being used. (#5862)nestedRows
plugin. (#5889)toVisualRow
method to return the wrong results. (#5890)filters
and trimRows
plugins not working properly alongside each other. (#5915)manualColumnMove
would not work properly when the data object properties count would be lower than the table column count. (#5931)trimRows
plugin did not work properly with the startRows
option. (#5953)loadData
after sorting would not work as expected. (#5956)beforeColumnMove
and afterColumnMove
hooks not containing information about their destination indexes. (#6005)filters
and minSpareRows
would make the table add an empty row at the beginning of the table. (#6278)manualRowMove
plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. (#6088)toVisualRow
method returned null
when using the trimRows
and columnSorting
plugins together. (#6310)updateSettings
in the afterColumnMove
hook callback would have no effect. (#4480)loadData
would make the filters
plugin to not behave as expected. (#5244)nestedRows
plugin would cause a +/-
button misalignment. (#5900)columnSummary
plugin creating a doubled summary row. (#5794)nestedRows
plugin would throw an error. (#6066)nestedRows
plugin would throw an error. (#3914)columnSorting
plugin. (#6086)7.3.0
puppeteer
package in the devDependencies
section to get rid of the npm audit
security error. (#6393)CNAME_
file from the repo. (#6389)& < > ' "
characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)cellProperties
to the arguments of search's queryMethod
so that it would be possible to tell what kind of data was being queried. (#4944)height
option is was set to auto
. (#6302)readOnly
. (#6246)readOnly
-typed cell, when any cell was selected. (#6214)readOnly
-typed cells. (#6209)Undo
feature not working for columns defined as functions. (#6147)this.TD
was undefined
in the editor's prepare
method when fixedColumnsLeft
and viewportColumnRenderingOffset
were both set. (#6043)after-
hooks for creating and removing rows/columns. (#6296)totalColumn
option. (#6281)lint:fix
script to be able to fix the lint errors from the CLI. (#6260)walkontable.watch
. (#6187)check-es3-syntax-cli
package to fix Github's security alert. (#6319)npm audit
(#6318)