Skip to content

Rethink CRUD with large tables (e.g., server side rendering or graphQL) #6275

@philippotto

Description

@philippotto

Tables with many entries (e.g., annotations or tasks) are currently a bit buggy and have code that is difficult to reason about.

The main problem is that we don't fetch all items for performance reasons and rely on pagination which is controlled by the front-end. From that, multiple problems follow:

  • searching/filtering all items reliably is only possible by fetching all pages first (the user has to click on "load next page" until none are there anymore) and then using the front-end search
  • tracking which pages were already loaded does not work properly when using the search (since that likely changes the amount of pages)
  • the detection whether the front-end has loaded all pages is only a heuristic right now (but could be improved in some way of course)
    • this should probably make use of the includeTotalCount parameter
  • other bugs can easily arise (see Merge "Shared Annotations" with "My annotations" #6230 (review) as an example)

The above bugs might be fixable while keeping the current architecture, but I think it might be better to go another way. For example: To improve this situation, we could make the integration with the back-end tighter by:

  • using server side rendering for the table or
  • using something like graphql and/or relay to piggyback on their robustness
  • other alternatives?

These options probably require some research and discussion.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions