Git Product home page Git Product logo

druid_table's Introduction

druid_table

A table/grid widget for druid ( the rust widget library). WIP. This project was to learn rust.

  • Virtualized rows and columns, ie data does not have to reside in memory and there is nothing stored per row/column/cell (if fixed sizes are used).
  • Custom cell and header rendering
  • Columns can be static or data derived
  • Selections (single cell + row & column) with keyboard control
  • Sorting (multi column, asc/desc) - up front specified right now. Interactive by double clicking in column headers (CTRL for multi select).
  • Trait based design for customisation (and possible monomorphisation benefits) :
    • Data sources:
      • Currently im::Vector is supported out of the box.
      • The interface works for both virtualized and concrete data sources by reference. Minimum copying required.
    • Columns:
      • The default configured columns that are boxed onto the heap, allowing composition. Columns can be adapted with lenses or functions (to pull fields out of your row type).
      • Implement your own "CellsDelegate" if configuration up front won't work - for example deriving columns from the data (DB result sets).
    • Axes:
      • The default AxisMeasures allow user driven column resizing - right now this takes up O(n) memory in items on that axis.
      • The FixedAxisMeasure stores no data, so is better for huge virtual tables. See examples/bigtable - tested on a quintillion cells!

Planned:

  • Fuller configuration (improved builder)
  • Filter
  • Pushdown of sort and filter (eg db backend)
  • Column and row pinning
  • Editing
  • Selection/ clipboard
  • WASM / + JS wrapper (aspirational)
  • Support slow data sources (loading)
  • Support fast data sources (ticking)

Later:

  • Reduce memory usage of resizable columns to O(n) in the number of columns resized
  • Aggregation (w/push down)
  • Pivoting (w/push down)
  • Tree view - not sure if this is just a weird column that hides rows

Much later:

  • More optimised data representations for large in memory datasets - possibly MVCC and columnar. Maybe an add on.

Requires my own druid fork until 1108 is merged

This shows it in action and also a bug where the header resize continues when leaving the widget. Thats been fixed! ezgif-4-bbc742141fc1

Can be considered for inclusion when its a bit further along.

druid_table's People

Contributors

rjwittams avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.