Home / File/ VerticalScrollOverflowView.js — react Source File

VerticalScrollOverflowView.js — react Source File

Architecture documentation for VerticalScrollOverflowView.js, a javascript file in the react codebase. 11 imports, 1 dependents.

File javascript BabelCompiler Validation 11 imports 1 dependents 1 classes

Entity Profile

Dependency Diagram

graph LR
  9576b70a_cfcb_5729_1030_479df0856820["VerticalScrollOverflowView.js"]
  1d481b0c_03e1_6f28_eff1_74d4566b3dc8["geometry.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 1d481b0c_03e1_6f28_eff1_74d4566b3dc8
  d0e34df5_54e0_bd63_7394_3bfe61a4c376["scrollState.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> d0e34df5_54e0_bd63_7394_3bfe61a4c376
  2fbafaf8_32f6_4129_38fc_89470d906d24["Surface.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 2fbafaf8_32f6_4129_38fc_89470d906d24
  20cc2065_4b5b_fd6b_be12_28f36b0ff4cf["types.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 20cc2065_4b5b_fd6b_be12_28f36b0ff4cf
  4a10df0d_a8e2_1549_3912_4d2e6db4d890["VerticalScrollBarView.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 4a10df0d_a8e2_1549_3912_4d2e6db4d890
  61a52b70_028c_d7b7_0542_1547d92cd850["VerticalScrollBarView"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 61a52b70_028c_d7b7_0542_1547d92cd850
  9d25a570_0086_154f_00bb_c5b100737b42["withVerticalScrollbarLayout.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 9d25a570_0086_154f_00bb_c5b100737b42
  e286e208_564c_fd3e_c601_e47312461d47["withVerticalScrollbarLayout"]
  9576b70a_cfcb_5729_1030_479df0856820 --> e286e208_564c_fd3e_c601_e47312461d47
  82f60adf_9325_5735_ba06_dcbbfcf32cc9["View.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 82f60adf_9325_5735_ba06_dcbbfcf32cc9
  be7fceed_f363_2288_8ab1_9e46ccc7de65["VerticalScrollView.js"]
  9576b70a_cfcb_5729_1030_479df0856820 --> be7fceed_f363_2288_8ab1_9e46ccc7de65
  15e8ee71_cd71_e6f6_40e5_59e8feb4985d["VerticalScrollView"]
  9576b70a_cfcb_5729_1030_479df0856820 --> 15e8ee71_cd71_e6f6_40e5_59e8feb4985d
  4a10df0d_a8e2_1549_3912_4d2e6db4d890["VerticalScrollBarView.js"]
  4a10df0d_a8e2_1549_3912_4d2e6db4d890 --> 9576b70a_cfcb_5729_1030_479df0856820
  style 9576b70a_cfcb_5729_1030_479df0856820 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */

import type {Rect} from '../geometry';
import type {ScrollState} from '../utils/scrollState';
import type {Surface} from '../Surface';
import type {ViewState} from '../../types';

import {VerticalScrollBarView} from './VerticalScrollBarView';
import {withVerticalScrollbarLayout} from './withVerticalScrollbarLayout';
import {View} from '../View';
import {VerticalScrollView} from '../VerticalScrollView';

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

Subdomains

Frequently Asked Questions

What does VerticalScrollOverflowView.js do?
VerticalScrollOverflowView.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Validation subdomain.
What does VerticalScrollOverflowView.js depend on?
VerticalScrollOverflowView.js imports 11 module(s): Surface.js, VerticalScrollBarView, VerticalScrollBarView.js, VerticalScrollView, VerticalScrollView.js, View.js, geometry.js, scrollState.js, and 3 more.
What files import VerticalScrollOverflowView.js?
VerticalScrollOverflowView.js is imported by 1 file(s): VerticalScrollBarView.js.
Where is VerticalScrollOverflowView.js in the architecture?
VerticalScrollOverflowView.js is located at packages/react-devtools-timeline/src/view-base/vertical-scroll-overflow/VerticalScrollOverflowView.js (domain: BabelCompiler, subdomain: Validation, directory: packages/react-devtools-timeline/src/view-base/vertical-scroll-overflow).

Analyze Your Own Codebase

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

Try Supermodel Free