All Versions
10
Latest Version
Avg Release Cycle
32 days
Latest Release
193 days ago

Changelog History

  • v8.0.0-beta.1

    November 14, 2019

    💥 Breaking changes

    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)

    🆕 New features (also present in the upcoming version 7.3.0)

    • 🔌 We're introducing 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)
    • 🔌 We also added a 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)

    🔄 Changes

    • Resolved a problem with data not being added to the table properly with the columnSorting option enabled. (#2685)
    • 🛠 Fixed a problem with loadData not resetting the row order changed by the manualRowMove plugin. (#3568)
    • 🛠 Fixed a bug, where using alter's insert_row after using the loadData method and sorting the data would add unintentional additional rows to the table. (#3809)
    • 🛠 Fixed a bug, where blank rows appeared in the middle of the table after using loadData along with the minSpareRows option. (#3937)
    • 🛠 Fixed a problem with the columnSummary plugin not working properly after adding new rows using the Context Menu and sorting the data. (#3924)
    • 🛠 Fixed a bug, where calling loadData with an object-based data source would not work properly. (#4204)
    • 🛠 Fixed a problem with the Hidden Columns settings being reset after calling updateSettings. (#4121)
    • 🛠 Fixed a bug with the filters plugin using incorrect indexes after moving and/or sorting the table. (#4442)
    • 🛠 Fixed a bug that caused a column to contain improper data after moving it to index 0. (#4470)
    • 🛠 Fixed a bug with the afterRowMove hook receiving an improper target argument. (#4501)
    • 🛠 Fixed a problem with the manualColumnFreeze plugin enabling manualColumnMove, even if it was declared as false. (#4553)
    • 🛠 Fixed a problem with plugins using arrayMappers not working properly after updating the dataset. (#4567)
    • 🛠 Fixed a bug, where calling loadData with minSpareRows and manualRowMove enabled caused the table to improperly load the data. (#4576)
    • 🛠 Fixed a bug, where enabling columnSorting caused the manualColumnFreeze to be unusable. (#4601)
    • 🛠 Fixed a problem, where the columns were assigned improper widths after inserting additional columns or removing any of them. (#4666)
    • 🛠 Fixed a bug, where moving rows was impossible while persistentState was enabled. (#4713)
    • 🛠 Fixed a bug, where manualColumnMove didn't work if the dataset was empty. (#4926)
    • 🛠 Fixed a bug with the collapseAll method from the collapsibleColumns plugin did not work properly if columnSorting was enabled. (#4999)
    • 🚚 Created a shared row mapper for the columnSorting, manualRowMove, and trimRows plugins. (#5065)
    • ♻️ Refactored the manualRowMove plugin to match the new architecture. (#5068)
    • 🛠 Fixed a bug, where calling loadData with minSpareRows enabled would cause unwanted blank rows to appear. (#5707)
    • 🛠 Fixed a bug with the afterColumnMove hook receiving an improper target argument. (#5173)
    • 🛠 Fixed a problem, where filtering data after moving rows would not work properly. (#5178)
    • 🛠 Fixed a bug, where calling loadData made NaN appear in the column headers. (#5369)
    • 🛠 Fixed a bug with the skipColumnOnPaste option not working properly when using columnSorting and hiddenColumns. (#5824)
    • 🛠 Fixed a bug with the trimRows plugin did not work properly after moving rows. (#5860)
    • 🛠 Fixed a problem with minSpareRows not working properly with the trimRows plugin being used. (#5862)
    • 🛠 Fixed a problem, where it was impossible to filter the data declared in the nestedRows plugin. (#5889)
    • 🛠 Fixed a bug, where filtering and sorting data would cause the toVisualRow method to return the wrong results. (#5890)
    • 🛠 Fixed a bug with the filters and trimRows plugins not working properly alongside each other. (#5915)
    • 🛠 Fixed a bug, where manualColumnMove would not work properly when the data object properties count would be lower than the table column count. (#5931)
    • 🛠 Fixed a bug with the trimRows plugin did not work properly with the startRows option. (#5953)
    • 🛠 Fixed a problem, where using loadData after sorting would not work as expected. (#5956)
    • 🛠 Fixed a problem with the beforeColumnMove and afterColumnMove hooks not containing information about their destination indexes. (#6005)
    • 🛠 Fixed a problem where using filters and minSpareRows would make the table add an empty row at the beginning of the table. (#6278)
    • 🛠 Fixed a bug with the manualRowMove plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. (#6088)
    • 🛠 Fixed a bug, where the toVisualRow method returned null when using the trimRows and columnSorting plugins together. (#6310)
    • 🛠 Fixed a problem, where calling updateSettings in the afterColumnMove hook callback would have no effect. (#4480)
    • 🛠 Fixed a bug, where calling loadData would make the filters plugin to not behave as expected. (#5244)
    • 🛠 Fixed a bug, where detaching a child from a parent in the nestedRows plugin would cause a +/- button misalignment. (#5900)
    • 🛠 Fixed a problem with the columnSummary plugin creating a doubled summary row. (#5794)
    • 🛠 Fixed a bug, where moving children between parents using the nestedRows plugin would throw an error. (#6066)
    • 🛠 Fixed a bug, where adding rows by modifying the data by reference while using the nestedRows plugin would throw an error. (#3914)
    • 🛠 Fixed a bug, where merging cells would conflict with the columnSorting plugin. (#6086)
    • 🛠 Fixed a bug, where the row headers would stay visible after removing all the table columns. (#6412)

    Includes changes from 7.3.0

    • 🛠 Fixed a problem with table resizing on every scroll event on Firefox, when no table height was defined. (#6344)
    • ⚡️ Updated the puppeteer package in the devDependencies section to get rid of the npm audit security error. (#6393)
    • ✂ Removed the unneeded CNAME_ file from the repo. (#6389)
    • 🛠 Fixed a problem, where pasting data from Excel caused Handsontable to throw an error. (#6217)
    • 🛠 Fixed a bug, where data pasted from Excel would get improperly formatted in Handsontable. (#6258)
    • 🛠 Fixed a bug, where the & < > ' " characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)
  • v7.4.2

    February 19, 2020

    🔄 Changes

    • 🛠 Fixed an issue where the cell value could not be edited on mobile devices. (#6707)
    • 🛠 Fixed an issue where white lines appeared at the bottom of cell headers. (#6459)
    • 🛠 Fixed a bug, where resizing the window (while using Angular) would result in Handsontable not stretching properly and throwing an error. (#6710)
  • v7.4.1

    February 19, 2020
  • v7.4.0

    February 12, 2020

    🔄 Changes

    • 🛠 Fixed the problem, where the onCellMouseUp hook was fired for all mouse buttons except the right one, which was not consistent with the onCellMouseDown hook.
      To make the changes more consistent with the native 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)
    • ⚡️ Updated moment, pikaday and numbro to their latest versions. (#6610)
    • 🛠 Fixed a bug with numbers not being presented properly with the pt_BR culture setting. (#5569)
    • Extended the Babel config with the possibility to use private methods, optional chaining and nullish coalescing operator. (#6308)
    • ⚡️ Updated some of the internal configs, updated dev-dependencies, housekeeping etc. (#6560, #6609, #6612, #6629, #6574, #6565)
  • v7.3.0

    December 12, 2019

    🆕 New features

    • 🔖 Version 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)
    • 🔌 We also added a 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)

    🔄 Changes

    • 🛠 Fixed a problem with table resizing on every scroll event on Firefox, when no table height was defined. (#6344)
    • ⚡️ Updated the puppeteer package in the devDependencies section to get rid of the npm audit security error. (#6393)
    • ✂ Removed the unneeded CNAME_ file from the repo. (#6389)
    • 🛠 Fixed a problem, where pasting data from Excel caused Handsontable to throw an error. (#6217)
    • 🛠 Fixed a bug, where data pasted from Excel would get improperly formatted in Handsontable. (#6258)
    • 🛠 Fixed a bug, where the & < > ' " characters in the pasted data would be automatically changed to their equivalent HTML entities. (#1535)
    • 🛠 Fixed a bug, where opening the system's context menu, hitting ESC and moving the cursor outside of the container would scroll the table. (#5846)
    • 🛠 Fixed a problem, where right-clicking on a disabled entry in Handsontable's context menu would open the system's context menu. (#5846)
    • 🛠 Fixed a bug, where right-clicking on an active entry in Handsontable's context menu would open another context menu. (#5846)
    • 🛠 Fixed a test case for Context Menu's scrolling. (#6449)
    • ✅ Modified the container size in the the tests' DOM helper file. (#6446)
  • v7.2.2

    October 23, 2019

    🔄 Changes

    • Rolled back backward-incompatible changes in the TypeScript definition file introduced in 7.2.0. (#6351)
    • 🛠 Fixed a problem, where the Handsontable.helper.htmlToGridSettings threw an error on IE11, when the target table was a part of an iframe. (#6350)
  • v7.2.1

    October 16, 2019

    🔄 Changes

    • 🛠 Fix a problem caused by #6269, which made the move/resize handles hidden under the headers. (#6341)
  • v7.2.0

    October 15, 2019

    🔄 Changes

    • ➕ Added cellProperties to the arguments of search's queryMethod so that it would be possible to tell what kind of data was being queried. (#4944)
    • 🛠 Fixed a bug with a disappearing column header, when the height option is was set to auto. (#6302)
    • 🛠 Fixed a problem with an error being thrown when trying the clear a column with the first cell set to readOnly. (#6246)
    • 🛠 Fixed a bug where it was impossible to set data for a readOnly-typed cell, when any cell was selected. (#6214)
    • 🛠 Fixed a problem with an error being thrown when pasting data to readOnly-typed cells. (#6209)
    • 🛠 Fixed a problem with the Undo feature not working for columns defined as functions. (#6147)
    • 🛠 Fixed a bug where this.TD was undefined in the editor's prepare method when fixedColumnsLeft and viewportColumnRenderingOffset were both set. (#6043)
    • 🛠 Fixed a bug where the cell selection frame overlapped the bottom fixed rows. (#5947)
    • 🛠 Fixed a problem with an error being thrown after initializing an empty table or removing all the data from the table and clicking the corner header. (#5126)
    • 🛠 Fixed a problem with reloading data with a new set in the Nested Rows plugin. (#6339)
    • Rewrote some of the Walkontable methods to return correct information about the table. (#6191)
    • Made some improvements to the TypeScript definition file. (#6168, #6107, #6102, #6239, #6266)
    • 👌 Improved the documentation and definition files regarding the after- hooks for creating and removing rows/columns. (#6296)
    • 👌 Improved the documentation for the totalColumn option. (#6281)
    • ➕ Added a lint:fix script to be able to fix the lint errors from the CLI. (#6260)
    • 🛠 Fixed all the tests for Windows and added run-script, walkontable.watch. (#6187)
    • ✂ Removed the unused check-es3-syntax-cli package to fix Github's security alert. (#6319)
    • ⚡️ Updated the dependencies to fix errors thrown by npm audit (#6318)
  • v7.1.1

    August 12, 2019

    🔄 Changes

    • ♻️ Refactored the Walkontable table renderers. (#6089)
    • 🔄 Changed the underlying format for empty cells. From now on, all empty cells are stored internally as null. The only exceptions are:
      • empty cells that have been edited and saved as an empty string,
      • empty cells that have been copied and pasted.
        In both of these cases, they are stored as an empty string ('').
        (#4106)
    • ✂ Removed the yarn.lock file from the repository and updated the Node version in the Travis configuration file. (#6161)
    • ➕ Added a missing rootInstanceSymbol property to Handsontable to allow using new Handsontable.Core properly. (#6040)
    • 🛠 Fixed a bug, where copying/pasting/deleting data for autocomplete-typed cells caused an error to be thrown. (#6033)
    • 🐎 Refactored the Custom Borders plugin to resolve problems with its performance. (#6052)
    • ⚡️ Optimized the use of arrays for the V8 engine in the parseTable module. (#6060)
    • 🛠 Fixed a problem where scrolling the dropdown menu scrolled the entire table. (#5913)
    • 🛠 Fixed a bug where removing a change in the beforeChange hook callback broke the table. (#5893)
    • 🛠 Fixed a problem where cutting the value from a checkbox-typed cell made it switch to #bad-value#. (#4106)
    • 🛠 Fixed a bug where the getCell method returned undefined, while it wasn't supposed to. (#6079)
    • ⚡️ Updated Jasmine and made changes to the tests and tests configuration in order for them to pass in the browser and prevent memory leaks. (#6077, #6096)
    • 🔄 Changed the way the afterColumnMove hook works, now it won't fire if beforeColumnMove hook callback canceled the action. (#5958)
    • 🛠 Fixed a problem with the Undo feature reverting the editing actions that didn't make any changes to the data. (#4072)
    • 🛠 Fixed a bug, where the dropdown editor did not work properly, when there were multiple Handsontable instances implemented on the page. (#6122)
    • 🛠 Fixed the tests for Windows. (#5878)
    • 🛠 Fixed the npm audit security errors. (#6130)
    • 🛠 Fixed a problem with scrolling not working properly when hovering over the Handsontable container. (#5212)
    • ♻️ Refactored the toMatchHTML Jasmine matcher to make tests pass on Firefox. (#6148)
    • 🛠 Fixed the getCell method for fixed bottom rows, which caused the selection not to work properly. (#6084)
    • 🛠 Fixed a bug, where the table height increased every time the window had been resized. (#3433)
    • Corrected some minor mistakes in the JSDocs and Typescript definitions. (#6123, #6125, #6142, #6152, #6158, #6160, #6129)
  • v7.1.0

    June 11, 2019

    🔄 Changes

    • ➕ Added a new feature, allowing users to parse HTML tables into Handsontable settings and Handsontable instances to plain HTML tables. This change introduces these new API methods:
      • Handsontable.helper.instanceToHTML: (instance: Handsontable.Core) => string - parses the provided Handsontable instance to an HTML table as a string
      • Handsontable.helper.htmlToGridSettings(element: Element | string, rootDocument?: Document) => Handsontable.DefaultSettings - analyses a static HTML table and returns a Handsontable-compatible settings object
      • hotInstance.toTableElement: () => HTMLTableElement - converts the Handsontable instance to a static HTML table
      • hotInstance.toHTML: () => string - same as Handsontable.helper.instanceToHTML, but the instance is already bound

    (#5684)

    • 🛠 Fixed a bug, where it wasn't possible to block Undo/Redo plugin keyboard shortcuts. (#6028)
    • 🚚 Corrected the ManualColumnMove type definitions. (#6011)
    • 🛠 Fixed a problem with pasting multi-line data from Excel and Google Sheets. (#5970, #5622)
    • 🛠 Fixed a bug, where it was impossible to paste merged cells from Excel. (#5940)
    • 🛠 Fixed a problem with copying cells with longer contents from Excel or Google Sheets. (#5925)
    • 🛠 Fixed a problem with Handsontable not adding the carriage return character to the pasted data. (#5826, #5647)
    • 🛠 Fixed some NestedRows performance issues on large datasets. (#5711)
    • 🛠 Fixed a bug, where placing SVG in a cell caused a ManualColumnMove error. (#4120)
    • 🛠 Fixed a bug, where using the Undo functionality, the selection was not reverted to its original position. (#6017)
    • 🛠 Fixed a bug, where the getCell method, when used with the topmost argument set to true, did not return the correct cell elements from the bottom overlay. (#5896)
    • ➕ Added a possibility to return false from the beforeCreateCol hook to stop the column creation. (#5691)