Show HN: A work in progress large table virtualization component

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
surveyjs.io
featured
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
  • _____

    Discontinued 💎 Das Bang-Architektur-Rahmenwerk! ist eine Ansichtsbibliothek, die benutzerdefinierte Elemente für das neue Zeitalter druckt. Es enthält asynchrone Vorlagenwerte, JS-Vorlagensyntax, <!void-elements /> und minimale DOM-Aktualisierungen ohne virtuelles DOM. [Moved to: https://github.com/i5ik/das.bang.froomwerk]

  • -------------------

    - It's possible to scroll it now infinitely (and performantly) for the duration of the very large background element.

    - Major problem was I initially was listening for intersection of cells individually on each row, but if a row had already travelled off screen due to a vertical scroll, it would not be possible for its cells to 'intersect' with the viewport element (the window, in Intersection Observer API parlance, the "root"), and so no intersection for that cell would occur, and so cells in that row would not be updated. And if they were not updated, they would not be onscreen when the row was in future removed from the pool and positioned back on screen, and so its cells could no longer be updated, as there would be no cells within that scroll viewport to intersect anymore. The solution to this was to create a logical grouping of cells into columns, and handle any intersection observations for any cell in a column, at once, and apply them to all cells in a column. So the whole column would be updated. Before I fixed this, repeated scrolling (particularly in opposite diagonal directions) would erode the cells present, gradually decreasing their number, and throwing many out of their column alignments.

    - Also performance was another issue that's now mostly resolved tho I think I can do better. Basically too much work was happening on handling each Intersection record and we were not ignoring records that triggered the same work to be redone (such as intersection events from each cell in a column). These redundant records are now ignored (but mostly in a haphazard manner that could cause browser dependent bugs).

    Next steps

    ----------

    - Add all of the outstanding features (scroll snap, row / col size dragging) from the table component.

    - Style it to make it look nice

    - Fix the outstanding border 'off by 1' bugs.

    - Sync up the 'view portal' with a 'data portal' (movable portal over a very large set of data), and print the correct data corresponding to the current scroll position in the table

    - Add the row and column headers using CSS sticky.

    This is the only comment I'll make in this thread, thanks for reading, and hit me up with questions at my email if you want: [email protected]

    [bt]: https://i5ik.github.io/_____/7guis/ (scroll down to the last 7GUIs component)

    [bp]: https://github.com/palantir/blueprint/issues/390

    [ft]: https://fulmicoton.com/fattable/index2.html

    [sc]: https://showcase.sproutcore.com/#demos/Big%20Data%20Lists

    [ct]: https://canvas-datagrid.js.org/demo.html

    [mi]: https://developer.mozilla.org/en-US/docs/Web/API/Intersectio...

    [other]:

    https://js.devexpress.com/Demos/Widgetsgallery/Demo/DataGrid...

    https://codepen.io/enigmatic/pen/JGvwEv

    https://www.htmlelements.com/demos/grid/overview/

  • @blueprintjs/core

    A React-based UI toolkit for the web

  • -------------------

    - It's possible to scroll it now infinitely (and performantly) for the duration of the very large background element.

    - Major problem was I initially was listening for intersection of cells individually on each row, but if a row had already travelled off screen due to a vertical scroll, it would not be possible for its cells to 'intersect' with the viewport element (the window, in Intersection Observer API parlance, the "root"), and so no intersection for that cell would occur, and so cells in that row would not be updated. And if they were not updated, they would not be onscreen when the row was in future removed from the pool and positioned back on screen, and so its cells could no longer be updated, as there would be no cells within that scroll viewport to intersect anymore. The solution to this was to create a logical grouping of cells into columns, and handle any intersection observations for any cell in a column, at once, and apply them to all cells in a column. So the whole column would be updated. Before I fixed this, repeated scrolling (particularly in opposite diagonal directions) would erode the cells present, gradually decreasing their number, and throwing many out of their column alignments.

    - Also performance was another issue that's now mostly resolved tho I think I can do better. Basically too much work was happening on handling each Intersection record and we were not ignoring records that triggered the same work to be redone (such as intersection events from each cell in a column). These redundant records are now ignored (but mostly in a haphazard manner that could cause browser dependent bugs).

    Next steps

    ----------

    - Add all of the outstanding features (scroll snap, row / col size dragging) from the table component.

    - Style it to make it look nice

    - Fix the outstanding border 'off by 1' bugs.

    - Sync up the 'view portal' with a 'data portal' (movable portal over a very large set of data), and print the correct data corresponding to the current scroll position in the table

    - Add the row and column headers using CSS sticky.

    This is the only comment I'll make in this thread, thanks for reading, and hit me up with questions at my email if you want: [email protected]

    [bt]: https://i5ik.github.io/_____/7guis/ (scroll down to the last 7GUIs component)

    [bp]: https://github.com/palantir/blueprint/issues/390

    [ft]: https://fulmicoton.com/fattable/index2.html

    [sc]: https://showcase.sproutcore.com/#demos/Big%20Data%20Lists

    [ct]: https://canvas-datagrid.js.org/demo.html

    [mi]: https://developer.mozilla.org/en-US/docs/Web/API/Intersectio...

    [other]:

    https://js.devexpress.com/Demos/Widgetsgallery/Demo/DataGrid...

    https://codepen.io/enigmatic/pen/JGvwEv

    https://www.htmlelements.com/demos/grid/overview/

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

    SurveyJS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Ask HN: Features for GPU price-per-hour tracker for A100/H100s

    1 project | news.ycombinator.com | 14 Apr 2024
  • Top 5 UI Component Libraries for React.js

    1 project | dev.to | 11 Apr 2024
  • Exploring 5 Top UI Frameworks for React

    1 project | dev.to | 26 Mar 2024
  • React Component Libraries

    13 projects | dev.to | 13 Mar 2024
  • Material UI vs. Chakra UI: Which One to Choose?

    2 projects | dev.to | 6 Mar 2024