noeldelgado / react-gemini-scrollbar

:last_quarter_moon: React component for custom overlay-scrollbars with native scrolling mechanism.
MIT License
133 stars 24 forks source link

gm-scroll-view divs increase their height endlessly when visible. #37

Open sli opened 6 years ago

sli commented 6 years ago

When using the library and the tab is visible, the height CSS rule increases at about 1000 pixels per second, as long as the page is in view. Switching tabs stops this behavior, and the behavior resumes when switching back. This happens for all instance on the page. I've included a screenshot of two instances updating, and the relevant code attached to the event that's doing it.

image

Update: This appears to be related to using nested MUI grids that each have their own instance of Gemini on them, so this bug may be entirely from this specific use.

noeldelgado commented 6 years ago

Hi @sli, does your MUI grids have a height or max-height properties specified? If not, does setting a explicit height to your chat-scrollbar elements will work for your design?

sli commented 6 years ago

Applying a height directly to the scrollbar seems to have stopped the problem. It's a less than ideal solution, but I can live with that.

Just to be thorough, I've managed to reproduce it with a fairly minimal grid setup that is not nested. The chatMessageComponents variable is just an array of some standard MUI ListItem components. I can also confirm that removing the GeminiScrollbar component stops the issue (expected, since it's the height of the gm-scrollbar-view div that's exploding). Code is below.

<Drawer
  anchor='right'
  open={open}
  onClose={closeChat}
  classes={{ paper: classes.drawerSizer }}
>
  <Grid container>
    <Grid item xs={12}>
      <div className={classNames(classes.drawerBannerRow, classes.drawerHeader)}>
        Enterprise Chat
      </div>
    </Grid>

    <Grid item xs={9}>
      <GeminiScrollbar className='chat-scrollbar'>
        <List>
          { chatMessageComponents }
        </List>
      </GeminiScrollbar>
    </Grid>
  </Grid>
</Drawer>

These are the relevant styles being applied:

  drawerSizer: {
    width: 325,
    color: theme.palette.text.primary,
    overflow: 'hidden'
  },
  // ...snip...
  drawerHeader: {
    justifyContent: 'center'
  },
  drawerBannerRow: {
    minHeight: 64,
    display: 'flex',
    backgroundColor: theme.uwl.headerBackgroundColor,
    color: theme.palette.text.primary,
    alignItems: 'center',
    boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0, 0, 0, 0.12)'
  },
  chatBody: {
    height: '90vh'
  },
  // ...snip...

And this one additional rule from an external stylesheet:

.analytics-scrollbar .gm-scrollbar.-horizontal,
.chat-scrollbar .gm-scrollbar.-horizontal {
  visibility: hidden;
}

The <Grid item> component containing the scrollbar exhibits the bug. Applying the same height to .chat-scrollbar that's used in chatBody seems to fix the bug.

noeldelgado commented 6 years ago

@sli, let me understand better, how do you plan on having vertical scrollbars without setting an explicit height to its container?