From cab8de5c6b246e1aa1376fa2b8666f09b44b6469 Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Mon, 10 Aug 2020 11:12:06 +0300
Subject: refator: Feed -> PollList

---
 src/components/PollsList/PollsList.tsx | 75 ++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 src/components/PollsList/PollsList.tsx

(limited to 'src/components/PollsList/PollsList.tsx')

diff --git a/src/components/PollsList/PollsList.tsx b/src/components/PollsList/PollsList.tsx
new file mode 100644
index 0000000..0fd8fa4
--- /dev/null
+++ b/src/components/PollsList/PollsList.tsx
@@ -0,0 +1,75 @@
+import React from 'react';
+import { Poll } from 'which-types';
+import { WindowScroller, AutoSizer, List } from 'react-virtualized';
+import PollCard from '../PollCard/PollCard';
+
+
+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 = (poll: Poll) => {
+      const newPolls = [...polls];
+      newPolls[index] = poll;
+
+      // 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>
+    );
+  };
+
+  return (
+    <WindowScroller>
+      {({
+        height,
+        isScrolling,
+        registerChild,
+        onChildScroll,
+        scrollTop
+      }) => (
+        <AutoSizer disableHeight>
+          {({ width }) => (
+            <div ref={registerChild}>
+              <List
+                autoHeight
+                height={height}
+                isScrolling={isScrolling}
+                onScroll={onChildScroll}
+                rowCount={polls.length}
+                rowHeight={550}
+                rowRenderer={RenderItem}
+                scrollTop={scrollTop}
+                width={width}
+                containerStyle={{ pointerEvents: 'auto' }}
+                overscanRowCount={1}
+              />
+            </div>
+          )}
+        </AutoSizer>
+      )}
+    </WindowScroller>
+  );
+};
+
+export default PollsList;
+
-- 
cgit v1.2.3

