Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI implement Virtualise list for Volume table #2931

Closed
ChengYanJin opened this issue Nov 16, 2020 · 0 comments · Fixed by #2938
Closed

UI implement Virtualise list for Volume table #2931

ChengYanJin opened this issue Nov 16, 2020 · 0 comments · Fixed by #2938
Assignees
Labels
complexity:easy Something that requires less than a day to fix topic:ui UI-related issues

Comments

@ChengYanJin
Copy link
Contributor

ChengYanJin commented Nov 16, 2020

Component: ui, table

Why this is needed:
Since we have thousands of rows, we may consider using a technique known as “windowing”. It only renders a small subset of the rows at any given time and can dramatically reduce the time it takes to re-render the components as well as the number of DOM nodes created.

What should be done: Virtualize list

Implementation proposal (strongly recommended):
React-table, the table library we are using has already implemented this feature.
https://codesandbox.io/s/github/tannerlinsley/react-table/tree/master/examples/virtualized-rows

Install dependencies. We’ll use react-window and also react-virtualized-auto-sizer.

import { FixedSizeList as List } from "react-window"
import AutoSizer from "react-virtualized-auto-sizer"

<AutoSizer>
  {({ height, width }) => (
    <List
      className="List"
      height={height}
      itemCount={1000}
      itemSize={35}
      width={width}
    >
      {Row}
    </List>
  )}
</AutoSizer>

Test plan:
TBD

@ChengYanJin ChengYanJin added topic:ui UI-related issues complexity:easy Something that requires less than a day to fix labels Nov 16, 2020
@ChengYanJin ChengYanJin self-assigned this Nov 18, 2020
ChengYanJin added a commit that referenced this issue Nov 19, 2020
- Update the version React-table to get the support for React v17.
- Introduce react-virtualized-auto-sizer and react-window

Refs: #2931
@ChengYanJin ChengYanJin changed the title UI implement Virtualise list for Volume/Node table UI implement Virtualise list for Node table Nov 20, 2020
@ChengYanJin ChengYanJin changed the title UI implement Virtualise list for Node table UI implement Virtualise list for Volume table Nov 20, 2020
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931

ui/table: Add flex for table row to fully use the space

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931

ui/table: Add flex for table row to fully use the space

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931

ui/table: Add flex for table row to fully use the space

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 20, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Nov 23, 2020
For non-specified instance URL, such as `/volumes`,
we should automatically choose the first one in the list.

However, since we are not aware currectVolumeName in VolumePage
component, we fall into  update the URL which triger the
VolumePage re-renders. Cause the infinite API calls.

So I move this logic to VolumePageContent which solve the issue.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 11, 2020
For non-specified instance URL, such as `/volumes`,
we should automatically choose the first one in the list.

However, since we are not aware currectVolumeName in VolumePage
component, we fall into  update the URL which triger the
VolumePage re-renders. Cause the infinite API calls.

So I move this logic to VolumePageContent which solve the issue.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 11, 2020
Since <AutoSizer> is a <div/> so it breaks the table layout,
we need to use <div/> for all the HTML tags in table
(thead, tbody, tr, td...) and retrieve the defaullt styles by className.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 11, 2020
So that the users don't need to hover on the hypen precisely

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
ChengYanJin added a commit that referenced this issue Dec 23, 2020
ChengYanJin added a commit that referenced this issue Dec 23, 2020
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931

ui/table: Add flex for table row to fully use the space

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
For non-specified instance URL, such as `/volumes`,
we should automatically choose the first one in the list.

However, since we are not aware currectVolumeName in VolumePage
component, we fall into  update the URL which triger the
VolumePage re-renders. Cause the infinite API calls.

So I move this logic to VolumePageContent which solve the issue.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
Since <AutoSizer> is a <div/> so it breaks the table layout,
we need to use <div/> for all the HTML tags in table
(thead, tbody, tr, td...) and retrieve the defaullt styles by className.

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
So that the users don't need to hover on the hypen precisely

Refs: #2931
ChengYanJin added a commit that referenced this issue Dec 23, 2020
ChengYanJin added a commit that referenced this issue Dec 23, 2020
ChengYanJin added a commit that referenced this issue Jan 6, 2021
Autosizer automatically adjusts the width and height of a single child.

Refs: #2931

ui/table: Add flex for table row to fully use the space

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
Too many "Unknown" in the table seems extremly noisy and since the
"Unknown" information is rather less important, we should replace it by
an icon with tooltip.

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
- Upgrade the react-table version to get support for react (v17.0.1)
- Introduce react-window and react-virtualized-auto-sizer for the
  virtualize list

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
For non-specified instance URL, such as `/volumes`,
we should automatically choose the first one in the list.

However, since we are not aware currectVolumeName in VolumePage
component, we fall into  update the URL which triger the
VolumePage re-renders. Cause the infinite API calls.

So I move this logic to VolumePageContent which solve the issue.

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
Since <AutoSizer> is a <div/> so it breaks the table layout,
we need to use <div/> for all the HTML tags in table
(thead, tbody, tr, td...) and retrieve the defaullt styles by className.

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
So that the users don't need to hover on the hypen precisely

Refs: #2931
ChengYanJin added a commit that referenced this issue Jan 6, 2021
ChengYanJin added a commit that referenced this issue Jan 6, 2021
ChengYanJin added a commit that referenced this issue Jan 6, 2021
Since style component can map the theme as part of the props. we don't
need to pass the theme props to the component.

Refs: #2931
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
complexity:easy Something that requires less than a day to fix topic:ui UI-related issues
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant