summaryrefslogtreecommitdiffhomepage
path: root/gui/src/renderer
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-09-09 14:53:07 +0200
committerOskar Nyberg <oskar@mullvad.net>2020-09-10 09:59:43 +0200
commit4fcdc149eabd4591f1347c7ac151e87b9441702e (patch)
treebba4c200c98cf4504ba7f8a2e8a7672e8bb2d6ff /gui/src/renderer
parent2751012f5575e85e9d2cda7e2267a7820bfd26ed (diff)
downloadmullvadvpn-4fcdc149eabd4591f1347c7ac151e87b9441702e.tar.xz
mullvadvpn-4fcdc149eabd4591f1347c7ac151e87b9441702e.zip
Make CustomScrollbars rerender when content change
Diffstat (limited to 'gui/src/renderer')
-rw-r--r--gui/src/renderer/components/CustomScrollbars.tsx24
1 files changed, 23 insertions, 1 deletions
diff --git a/gui/src/renderer/components/CustomScrollbars.tsx b/gui/src/renderer/components/CustomScrollbars.tsx
index 08e996c250..bc56ffcf3c 100644
--- a/gui/src/renderer/components/CustomScrollbars.tsx
+++ b/gui/src/renderer/components/CustomScrollbars.tsx
@@ -1,6 +1,14 @@
import * as React from 'react';
+import styled from 'styled-components';
import { Scheduler } from '../../shared/scheduler';
+const ScrollableContent = styled.div({
+ display: 'flex',
+ flexDirection: 'column',
+ minHeight: '100%',
+ height: 'max-content',
+});
+
const AUTOHIDE_TIMEOUT = 1000;
interface IProps {
@@ -54,10 +62,16 @@ export default class CustomScrollbars extends React.Component<IProps, IState> {
};
private scrollableRef = React.createRef<HTMLDivElement>();
+ private scrollableContentRef = React.createRef<HTMLDivElement>();
private trackRef = React.createRef<HTMLDivElement>();
private thumbRef = React.createRef<HTMLDivElement>();
private autoHideScheduler = new Scheduler();
+ // Update scrollbar when content grows/shrinks.
+ private contentResizeObserver = new ResizeObserver(() => {
+ this.updateScrollbarsHelper({ size: true });
+ });
+
public scrollToTop() {
const scrollable = this.scrollableRef.current;
if (scrollable) {
@@ -134,6 +148,10 @@ export default class CustomScrollbars extends React.Component<IProps, IState> {
if (this.props.autoHide) {
this.startAutoHide();
}
+
+ if (this.scrollableContentRef.current) {
+ this.contentResizeObserver.observe(this.scrollableContentRef.current);
+ }
}
public shouldComponentUpdate(nextProps: IProps, nextState: IState) {
@@ -160,6 +178,10 @@ export default class CustomScrollbars extends React.Component<IProps, IState> {
document.removeEventListener('mousemove', this.handleMouseMove);
document.removeEventListener('mouseup', this.handleMouseUp);
document.removeEventListener('mousedown', this.handleMouseDown);
+
+ if (this.scrollableContentRef.current) {
+ this.contentResizeObserver.unobserve(this.scrollableContentRef.current);
+ }
}
public componentDidUpdate() {
@@ -201,7 +223,7 @@ export default class CustomScrollbars extends React.Component<IProps, IState> {
style={{ overflow: 'auto', flex: fillContainer ? '1' : undefined }}
onScroll={this.onScroll}
ref={this.scrollableRef}>
- {children}
+ <ScrollableContent ref={this.scrollableContentRef}>{children}</ScrollableContent>
</div>
</div>
);