Home / File/ SettingsModalContext.js — react Source File

SettingsModalContext.js — react Source File

Architecture documentation for SettingsModalContext.js, a javascript file in the react codebase. 6 imports, 2 dependents.

File javascript BabelCompiler Validation 6 imports 2 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  c590b2f8_e784_4482_1344_3166beeda587["SettingsModalContext.js"]
  913bb343_55ea_f1b8_08f5_b75cb0a92b76["context.js"]
  c590b2f8_e784_4482_1344_3166beeda587 --> 913bb343_55ea_f1b8_08f5_b75cb0a92b76
  90c55265_8c71_a702_1208_8bdd01b6c4ae["bridge.js"]
  c590b2f8_e784_4482_1344_3166beeda587 --> 90c55265_8c71_a702_1208_8bdd01b6c4ae
  0304bbc8_f110_6643_71c6_d26bddc58fde["types.js"]
  c590b2f8_e784_4482_1344_3166beeda587 --> 0304bbc8_f110_6643_71c6_d26bddc58fde
  bba85af0_a356_d0c5_4d12_914508b89593["store.js"]
  c590b2f8_e784_4482_1344_3166beeda587 --> bba85af0_a356_d0c5_4d12_914508b89593
  d8f20c67_f5fa_0f0a_c967_c41fd9ffce07["ReactTypes"]
  c590b2f8_e784_4482_1344_3166beeda587 --> d8f20c67_f5fa_0f0a_c967_c41fd9ffce07
  ac587885_e294_a1e9_b13f_5e7b920fdb42["react"]
  c590b2f8_e784_4482_1344_3166beeda587 --> ac587885_e294_a1e9_b13f_5e7b920fdb42
  33c9bb39_5afe_7433_b39c_5c97384e3323["SettingsModal.js"]
  33c9bb39_5afe_7433_b39c_5c97384e3323 --> c590b2f8_e784_4482_1344_3166beeda587
  2c88dff5_1ec3_9232_0235_005236b72c3c["SettingsModalContextToggle.js"]
  2c88dff5_1ec3_9232_0235_005236b72c3c --> c590b2f8_e784_4482_1344_3166beeda587
  style c590b2f8_e784_4482_1344_3166beeda587 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 {ReactContext} from 'shared/ReactTypes';

import * as React from 'react';
import {
  createContext,
  useContext,
  useCallback,
  useState,
  startTransition,
} from 'react';

import {BridgeContext, StoreContext} from '../context';

import type {FrontendBridge} from '../../../bridge';
import type {DevToolsHookSettings} from '../../../backend/types';
import type Store from '../../store';

export type Theme = 'auto' | 'light' | 'dark';

type Context = {
  isModalShowing: boolean,
  setIsModalShowing: (value: boolean) => void,
  environmentNames: null | Promise<Array<string>>,
  hookSettings: null | Promise<$ReadOnly<DevToolsHookSettings>>,
};

const SettingsModalContext: ReactContext<Context> = createContext<Context>(
  ((null: any): Context),
);
SettingsModalContext.displayName = 'SettingsModalContext';

function fetchEnvironmentNames(bridge: FrontendBridge): Promise<Array<string>> {
  return new Promise(resolve => {
    function onEnvironmentNames(names: Array<string>) {
      bridge.removeListener('environmentNames', onEnvironmentNames);
      resolve(names);
    }
    bridge.addListener('environmentNames', onEnvironmentNames);
    bridge.send('getEnvironmentNames');
  });
}

function fetchHookSettings(
  store: Store,
): Promise<$ReadOnly<DevToolsHookSettings>> {
  return new Promise(resolve => {
    function onHookSettings(settings: $ReadOnly<DevToolsHookSettings>) {
      store.removeListener('hookSettings', onHookSettings);
      resolve(settings);
    }

    store.addListener('hookSettings', onHookSettings);
    store.getHookSettings();
  });
}

function SettingsModalContextController({
  children,
}: {
  children: React$Node,
}): React.Node {
  const bridge = useContext(BridgeContext);
  const store = useContext(StoreContext);

  const setIsModalShowing: boolean => void = useCallback(
    (value: boolean) => {
      startTransition(() => {
        setContext({
          isModalShowing: value,
          setIsModalShowing,
          environmentNames: value ? fetchEnvironmentNames(bridge) : null,
          hookSettings: value ? fetchHookSettings(store) : null,
        });
      });
    },
    [bridge, store],
  );

  const [currentContext, setContext] = useState<Context>({
    isModalShowing: false,
    setIsModalShowing,
    environmentNames: null,
    hookSettings: null,
  });

  return (
    <SettingsModalContext.Provider value={currentContext}>
      {children}
    </SettingsModalContext.Provider>
  );
}

export {SettingsModalContext, SettingsModalContextController};

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does SettingsModalContext.js do?
SettingsModalContext.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Validation subdomain.
What functions are defined in SettingsModalContext.js?
SettingsModalContext.js defines 2 function(s): Context.setIsModalShowing, boolean.
What does SettingsModalContext.js depend on?
SettingsModalContext.js imports 6 module(s): ReactTypes, bridge.js, context.js, react, store.js, types.js.
What files import SettingsModalContext.js?
SettingsModalContext.js is imported by 2 file(s): SettingsModal.js, SettingsModalContextToggle.js.
Where is SettingsModalContext.js in the architecture?
SettingsModalContext.js is located at packages/react-devtools-shared/src/devtools/views/Settings/SettingsModalContext.js (domain: BabelCompiler, subdomain: Validation, directory: packages/react-devtools-shared/src/devtools/views/Settings).

Analyze Your Own Codebase

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

Try Supermodel Free