diff options
| author | Eugene Sokolov <eug-vs@keemail.me> | 2020-10-09 00:30:59 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-09 00:30:59 +0300 | 
| commit | a5d0f3edcd5478c81262524cbfef8273a065df36 (patch) | |
| tree | 48725733e1650fb11f59e4e8dd4f752950a26f72 /src/components/PollsList | |
| parent | bdb4d194307c9755c2083c1a11bb876abebcb6de (diff) | |
| parent | 8e9245d18ba591e93dd7dd1de9a271d0b51941a7 (diff) | |
| download | which-ui-a5d0f3edcd5478c81262524cbfef8273a065df36.tar.gz | |
Merge pull request #103 from which-ecosystem/feat/description
Add description to Poll Model
Diffstat (limited to 'src/components/PollsList')
| -rw-r--r-- | src/components/PollsList/PollsList.tsx | 20 | ||||
| -rw-r--r-- | src/components/PollsList/RenderItem.tsx | 31 | 
2 files changed, 40 insertions, 11 deletions
diff --git a/src/components/PollsList/PollsList.tsx b/src/components/PollsList/PollsList.tsx index 039639d..1ad7763 100644 --- a/src/components/PollsList/PollsList.tsx +++ b/src/components/PollsList/PollsList.tsx @@ -1,9 +1,10 @@ -import React, { useCallback, useState, useMemo } from 'react'; +import React, { useCallback, useState, useMemo, useEffect } from 'react';  import {    WindowScroller,    AutoSizer,    List, -  InfiniteLoader +  InfiniteLoader, +  CellMeasurerCache  } from 'react-virtualized';  import _ from 'lodash';  import { Poll } from 'which-types'; @@ -15,17 +16,27 @@ interface PropTypes {    mutate: (polls: Poll[], refetch: boolean) => void;  } +const cache = new CellMeasurerCache({ +  fixedWidth: true +}); +  const PAGE_SIZE = 10;  const PollsList: React.FC<PropTypes> = ({ polls, mutate }) => {    const [displayCount, setDisplayCount] = useState<number>(PAGE_SIZE); -  const rowRenderer = useCallback(({ index, style, key }) => ( +  useEffect(() => { +    cache.clearAll(); +  }, [polls]); + +  const rowRenderer = useCallback(({ index, style, key, parent }) => (      <RenderItem        polls={polls}        mutate={mutate}        index={index}        style={style} +      cache={cache} +      parent={parent}        key={key}        _key={key}      /> @@ -68,7 +79,7 @@ const PollsList: React.FC<PropTypes> = ({ polls, mutate }) => {                      isScrolling={isScrolling}                      onScroll={onChildScroll}                      rowCount={rowCount} -                    rowHeight={550} +                    rowHeight={cache.rowHeight}                      rowRenderer={rowRenderer}                      scrollTop={scrollTop}                      width={width} @@ -76,6 +87,7 @@ const PollsList: React.FC<PropTypes> = ({ polls, mutate }) => {                      overscanRowCount={2}                      onRowsRendered={onRowsRendered}                      ref={ref} +                    deferredMeasurementCache={cache}                    />                  )}                </InfiniteLoader> diff --git a/src/components/PollsList/RenderItem.tsx b/src/components/PollsList/RenderItem.tsx index beed259..28411ec 100644 --- a/src/components/PollsList/RenderItem.tsx +++ b/src/components/PollsList/RenderItem.tsx @@ -1,5 +1,7 @@  import React, { useCallback } from 'react'; +import { makeStyles } from '@material-ui/core/styles';  import { Poll } from 'which-types'; +import { CellMeasurer, CellMeasurerCache, List } from 'react-virtualized';  import PollCard from '../PollCard/PollCard'; @@ -8,23 +10,31 @@ 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  } +const useStyles = makeStyles(theme => ({ +  root: { +    paddingBottom: theme.spacing(8) +  } +})); +  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 classes = useStyles();    const poll = polls[index]; -    const setPoll = useCallback((newPoll: Poll) => {      const newPolls = [...polls];      newPolls[index] = newPoll; @@ -35,9 +45,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}`} className={classes.root} style={style}> +        <PollCard poll={poll} setPoll={setPoll} /> +      </div> +    </CellMeasurer>    );  }, compareProps);  |