diff options
author | eug-vs <eug-vs@keemail.me> | 2020-09-18 22:20:29 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-10-08 22:05:52 +0300 |
commit | 13fc0cc8ffb61d8f184707feed1f9010798c45f1 (patch) | |
tree | 12d558639845d2afee422b42821e770dd51651cb /src/components/PollsList/RenderItem.tsx | |
parent | 12b52a29d27736075d71f97937f678650bfc6339 (diff) | |
download | which-ui-13fc0cc8ffb61d8f184707feed1f9010798c45f1.tar.gz |
feat!: allow dynamic item height in PollsList
Diffstat (limited to 'src/components/PollsList/RenderItem.tsx')
-rw-r--r-- | src/components/PollsList/RenderItem.tsx | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/components/PollsList/RenderItem.tsx b/src/components/PollsList/RenderItem.tsx index beed259..ce6f0c9 100644 --- a/src/components/PollsList/RenderItem.tsx +++ b/src/components/PollsList/RenderItem.tsx @@ -1,6 +1,7 @@ import React, { useCallback } from 'react'; import { Poll } from 'which-types'; import PollCard from '../PollCard/PollCard'; +import { CellMeasurer, CellMeasurerCache, List } from 'react-virtualized'; interface PropTypes { @@ -8,6 +9,8 @@ interface PropTypes { mutate: (polls: Poll[], refetch: boolean) => void; index: number; style: React.CSSProperties; + cache: CellMeasurerCache; + parent: List; _key: string; // https://reactjs.org/warnings/special-props.html } @@ -15,13 +18,13 @@ const compareProps = (oldProps: PropTypes, newProps: PropTypes) => { if (oldProps._key !== newProps._key) return false; if (oldProps.index !== newProps.index) return false; if (oldProps.polls !== newProps.polls) return false; - // TODO: uncomment line below to listen to style updates - // if (JSON.stringify(oldProps.style)!== JSON.stringify(newProps.style)) return false; + // Only listen for height changes in style + if (oldProps.style.height !== newProps.style.height) return false; return true; }; const RenderItem: React.FC<PropTypes> = React.memo(({ - polls, mutate, index, style, _key + polls, mutate, index, style, cache, parent, _key }) => { const poll = polls[index]; @@ -35,9 +38,16 @@ const RenderItem: React.FC<PropTypes> = React.memo(({ }, [mutate, index, polls]); return ( - <div key={`${_key}-${poll._id}`} style={style}> - <PollCard poll={poll} setPoll={setPoll} /> - </div> + <CellMeasurer + cache={cache} + columnIndex={0} + rowIndex={index} + parent={parent} + > + <div key={`${_key}-${poll._id}`} style={{...style, paddingBottom: '40px' }}> + <PollCard poll={poll} setPoll={setPoll} /> + </div> + </CellMeasurer> ); }, compareProps); |