Home / Class/ VerticalScrollOverflowView Class — react Architecture

VerticalScrollOverflowView Class — react Architecture

Architecture documentation for the VerticalScrollOverflowView class in VerticalScrollOverflowView.js from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  96270b29_2ae0_8efa_5613_43274b8ffeec["VerticalScrollOverflowView"]
  9576b70a_cfcb_5729_1030_479df0856820["VerticalScrollOverflowView.js"]
  96270b29_2ae0_8efa_5613_43274b8ffeec -->|defined in| 9576b70a_cfcb_5729_1030_479df0856820
  c14bc79d_a240_8e4b_ea22_b67a585c3646["constructor()"]
  96270b29_2ae0_8efa_5613_43274b8ffeec -->|method| c14bc79d_a240_8e4b_ea22_b67a585c3646
  b095d95a_14d3_4558_d65a_4c272b86428a["layoutSubviews()"]
  96270b29_2ae0_8efa_5613_43274b8ffeec -->|method| b095d95a_14d3_4558_d65a_4c272b86428a
  b6d7e0eb_672c_2250_5ec1_56607b5e9daa["setScrollOffset()"]
  96270b29_2ae0_8efa_5613_43274b8ffeec -->|method| b6d7e0eb_672c_2250_5ec1_56607b5e9daa

Relationship Graph

Source Code

packages/react-devtools-timeline/src/view-base/vertical-scroll-overflow/VerticalScrollOverflowView.js lines 20–91

export class VerticalScrollOverflowView extends View {
  _contentView: View;
  _isProcessingOnChange: boolean = false;
  _isScrolling: boolean = false;
  _scrollOffset: number = 0;
  _scrollBarView: VerticalScrollBarView;
  _verticalScrollView: VerticalScrollView;

  constructor(
    surface: Surface,
    frame: Rect,
    contentView: View,
    viewState: ViewState,
  ) {
    super(surface, frame, withVerticalScrollbarLayout);

    this._contentView = contentView;
    this._verticalScrollView = new VerticalScrollView(
      surface,
      frame,
      contentView,
      viewState,
      'VerticalScrollOverflowView',
    );
    this._verticalScrollView.onChange(this._onVerticalScrollViewChange);

    this._scrollBarView = new VerticalScrollBarView(surface, frame, this);

    this.addSubview(this._verticalScrollView);
    this.addSubview(this._scrollBarView);
  }

  layoutSubviews() {
    super.layoutSubviews();

    const contentSize = this._contentView.desiredSize();

    // This should be done after calling super.layoutSubviews() – calling it
    // before somehow causes _contentView to need display on every mousemove
    // event when the scroll bar is shown.
    this._scrollBarView.setContentHeight(contentSize.height);
  }

  setScrollOffset(newScrollOffset: number, maxScrollOffset: number) {
    const deltaY = newScrollOffset - this._scrollOffset;

    if (!this._isProcessingOnChange) {
      this._verticalScrollView.scrollBy(-deltaY);
    }

    this._scrollOffset = newScrollOffset;

    this.setNeedsDisplay();
  }

  _onVerticalScrollViewChange: (
    scrollState: ScrollState,
    containerLength: number,
  ) => void = (scrollState: ScrollState, containerLength: number) => {
    const maxOffset = scrollState.length - containerLength;
    if (maxOffset === 0) {
      return;
    }

    const percentage = Math.abs(scrollState.offset) / maxOffset;
    const maxScrollThumbY = this._scrollBarView.getMaxScrollThumbY();

    this._isProcessingOnChange = true;
    this._scrollBarView.setScrollThumbY(percentage * maxScrollThumbY);
    this._isProcessingOnChange = false;
  };
}

Domain

Frequently Asked Questions

What is the VerticalScrollOverflowView class?
VerticalScrollOverflowView is a class in the react codebase, defined in packages/react-devtools-timeline/src/view-base/vertical-scroll-overflow/VerticalScrollOverflowView.js.
Where is VerticalScrollOverflowView defined?
VerticalScrollOverflowView is defined in packages/react-devtools-timeline/src/view-base/vertical-scroll-overflow/VerticalScrollOverflowView.js at line 20.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free