atomic-server icon indicating copy to clipboard operation
atomic-server copied to clipboard

More powerful table / spreadsheet feature

Open joepio opened this issue 4 years ago • 0 comments

Tables are the ultimate poweruser tool. They show a lot of information, and are great for editing and organizing stuff. There's a reason why tools like excel, notion and airtable are so popular.

Considerations

  • Peformance. The current approach does not scale well to large tables. It creates dom nodes for every single cell. This could be fixed by using react-virtualized or using some other fancy lazy rendering library
  • Selecting / copy / paste. Being able to select a bunch of fields, rows or columns, copy the data, and paste it somewhere else. Ideally also make sure it pastes from / into other spreadsheet apps.
  • Adjusting the class. Or modelling from the collection view. This fits really well into how most people use excel / sheets / airtable.
  • Keyboard support. Navigation with arrow keys, get into edit mode with enter, esc to exit, etc.

Inspiration and options

  • Glide Data Grid. Impressive performance.
  • https://nadbm.github.io/react-datasheet/. Not great performance.
  • https://handsontable.com/docs/8.3.1/demo-scrolling.html
  • Zinggrid: https://www.zinggrid.com/demos/website-visitors

User stories

  • Airtable reddit 1, 2

ToDo / deliverables

  • [x] New table view
    • [x] Virtualized & paginated
    • [x] Resizable (state should probably be stored server-side, is possible)
    • [x] Sort (using Collections)
    • [ ] Filter (using Collections)
    • [ ] (optional) multiple views possible? Save view server-side
    • [ ] Refactor existing tables, try making them re-use the same things (= get rid of existing collection view and folder list view, probably)
    • [ ] Manual re-order (probably store a float datatype property on every resource)
    • [ ] Context menu per row (open in normal view, history, edit, etc.), could be in dialog
  • [x] Keyboard support
    • [x] Move up / down / left / right
    • [x] Use enter to go into edit mode, escape to exit
    • [ ] (optional) Search inside table using /
  • [x] Improved data model editing
    • [x] atomicdata-dev/atomic-data-browser#276
    • [x] Improved modal / overlay form for properties
    • [x] Improved enum support (colors / shortnames / icons?)
    • [x] Edit property with context menu
  • [x] Copy/paste support
    • [x] From HTML (e.g. excel)
    • [x] To HTML (tab + newline delineated, escape markdown / strings)
  • [x] Atomic-Server changes https://github.com/atomicdata-dev/atomic-data-rust/issues/538
    • [x] Table Model
    • [x] Hierarchical type constraints ?
    • [x] URL constraints ?
  • [x] Atomic-Data-Docs changes
    • [x] Update docs, add and describe tables model
  • [ ] Create reddit post

Current bugs

  • [x] Needs refresh after property edit
  • [x] No keyboard-only adding of 'select' instances, needs mouse
  • [x] Multi select keyboard behavior weird: shift+arrow expands selection, but after going back to regular arrow keys the initial focus is used instead of the expanded focus.
  • [x] Drag mouse support for selection (if not too hard)
  • [x] #816
  • [x] Name field should probably always be enabled in new tables. Description maybe too.
  • [x] Can't click on 'select' items (only keyboard). Make sure this is tested.
  • [x] Selecting second item with keyboard not working
  • [x] Tab navigation with keyboard wrong when hovering over select field, should skip on one tab, currently always enters 'edit' mode

joepio avatar Mar 04 '21 11:03 joepio