aboutsummaryrefslogtreecommitdiff
path: root/src/components/PollsList/PollsList.tsx
diff options
context:
space:
mode:
authorEugene Sokolov <eug-vs@keemail.me>2020-08-14 20:45:22 +0300
committerGitHub <noreply@github.com>2020-08-14 20:45:22 +0300
commit845eaf8d28fdd992faf0fba0dcafdc61ef53ef35 (patch)
treecc4e4065a9bae7e8e9d574ee6886080855975b24 /src/components/PollsList/PollsList.tsx
parent9073af9512687e724a5237d55a85656abb3305e5 (diff)
parent21e5bf9ee3dc4f284c10f7915921e1e407b65b5a (diff)
downloadwhich-ui-845eaf8d28fdd992faf0fba0dcafdc61ef53ef35.tar.gz
Merge pull request #83 from which-ecosystem/better-ux
Crazy performance boost
Diffstat (limited to 'src/components/PollsList/PollsList.tsx')
-rw-r--r--src/components/PollsList/PollsList.tsx45
1 files changed, 14 insertions, 31 deletions
diff --git a/src/components/PollsList/PollsList.tsx b/src/components/PollsList/PollsList.tsx
index c95bfde..41f9966 100644
--- a/src/components/PollsList/PollsList.tsx
+++ b/src/components/PollsList/PollsList.tsx
@@ -1,41 +1,24 @@
-import React from 'react';
+import React, { useCallback } from 'react';
import { Poll } from 'which-types';
import { WindowScroller, AutoSizer, List } from 'react-virtualized';
-import PollCard from '../PollCard/PollCard';
-
+import RenderItem from './RenderItem';
interface PropTypes {
polls: Poll[];
mutate: (polls: Poll[], refetch: boolean) => void;
}
-interface RenderPropTypes {
- index: number;
- key: string;
- style: React.CSSProperties;
-}
-
-
const PollsList: React.FC<PropTypes> = ({ polls, mutate }) => {
- const RenderItem: React.FC<RenderPropTypes> = ({ index, style, key }) => {
- const poll = polls[index];
-
- const setPoll = (newPoll: Poll) => {
- const newPolls = [...polls];
- newPolls[index] = newPoll;
-
- // Force-update list-size so everything re-renders
- mutate([], false);
- mutate(newPolls, false);
- };
-
- return (
- // To re-render on list resize, add this info to key
- <div key={`${key}-${poll._id}-${polls.length}`} style={style}>
- <PollCard poll={poll} setPoll={setPoll} />
- </div>
- );
- };
+ const rowRenderer = useCallback(({ index, style, key }) => (
+ <RenderItem
+ polls={polls}
+ mutate={mutate}
+ index={index}
+ style={style}
+ key={key}
+ _key={key}
+ />
+ ), [polls, mutate]);
return (
<WindowScroller>
@@ -56,11 +39,11 @@ const PollsList: React.FC<PropTypes> = ({ polls, mutate }) => {
onScroll={onChildScroll}
rowCount={polls.length}
rowHeight={550}
- rowRenderer={RenderItem}
+ rowRenderer={rowRenderer}
scrollTop={scrollTop}
width={width}
containerStyle={{ pointerEvents: 'auto' }}
- overscanRowCount={1}
+ overscanRowCount={2}
/>
</div>
)}