Replace managers with context providers
- Replaced all manager components with context providers
- GradientsManager -> GradientsContextProvider
- SettingsManager -> SettingsContextProvider
- SceneryManager -> SceneryContextProvider
- ThemeManager -> ThemeContextProvider
- Moved state logic from App to new context providers:
- DistanceMeterContextProvider
- SideMenuContextProvider
This commit is contained in:
parent
142056b8f1
commit
1d86f0f42f
@ -1,38 +1,34 @@
|
|||||||
import { useState } from 'react';
|
import { EmbeddedContextProvider, useEmbeddedContext } from '../contexts/EmbeddedContext';
|
||||||
|
import { ThemeContextProvider} from '../contexts/ThemeContext';
|
||||||
|
import { SettingsContextProvider } from '../contexts/SettingsContext';
|
||||||
|
import { SceneryContextProvider } from '../contexts/SceneryContext';
|
||||||
|
import { GradientsContextProvider } from '../contexts/GradientsContext';
|
||||||
|
import { DistanceMeterContextProvider } from '../contexts/DistanceMeterContext';
|
||||||
|
import { SideMenuContextProvider } from '../contexts/SideMenuContext';
|
||||||
import Map from './map/Map';
|
import Map from './map/Map';
|
||||||
import Toolbar from './toolbar/Toolbar';
|
import Toolbar from './toolbar/Toolbar';
|
||||||
import SideMenu from './sidemenu/SideMenu';
|
import SideMenu from './sidemenu/SideMenu';
|
||||||
import SettingsManager from './SettingsManager';
|
|
||||||
import LocList from './loclist/LocList';
|
import LocList from './loclist/LocList';
|
||||||
import DialogManager from './dialog/DialogManager';
|
import DialogManager from './dialog/DialogManager';
|
||||||
import DistanceMeterContext from '../contexts/DistanceMeterContext';
|
|
||||||
import {GradientsManager} from "./GradientsManager";
|
|
||||||
import SideMenuContext from '../contexts/SideMenuContext';
|
|
||||||
import SceneryManager from './SceneryManager';
|
|
||||||
import ThemeManager from './ThemeManager';
|
|
||||||
import {EmbeddedContextProvider, useEmbeddedContext} from '../contexts/EmbeddedContext';
|
|
||||||
import './Themes.css';
|
import './Themes.css';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [sideMenuOpen, setSideMenuOpen] = useState(false);
|
|
||||||
const [distancePoints, setDistancePoints] = useState(null);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<EmbeddedContextProvider>
|
<EmbeddedContextProvider>
|
||||||
<ThemeManager>
|
<ThemeContextProvider>
|
||||||
<SettingsManager>
|
<SettingsContextProvider>
|
||||||
<SceneryManager>
|
<SceneryContextProvider>
|
||||||
<GradientsManager>
|
<GradientsContextProvider>
|
||||||
<DistanceMeterContext.Provider value={{distancePoints, setDistancePoints}}>
|
<DistanceMeterContextProvider>
|
||||||
<SideMenuContext.Provider value={{sideMenuOpen, setSideMenuOpen}}>
|
<SideMenuContextProvider>
|
||||||
<AppContent />
|
<AppContent />
|
||||||
</SideMenuContext.Provider>
|
</SideMenuContextProvider>
|
||||||
</DistanceMeterContext.Provider>
|
</DistanceMeterContextProvider>
|
||||||
</GradientsManager>
|
</GradientsContextProvider>
|
||||||
</SceneryManager>
|
</SceneryContextProvider>
|
||||||
</SettingsManager>
|
</SettingsContextProvider>
|
||||||
</ThemeManager>
|
</ThemeContextProvider>
|
||||||
</EmbeddedContextProvider>
|
</EmbeddedContextProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const DistanceMeterContext = createContext();
|
|
||||||
export default DistanceMeterContext;
|
|
||||||
16
src/contexts/DistanceMeterContext.jsx
Normal file
16
src/contexts/DistanceMeterContext.jsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { createContext, useState } from 'react';
|
||||||
|
|
||||||
|
const DistanceMeterContext = createContext();
|
||||||
|
export default DistanceMeterContext;
|
||||||
|
|
||||||
|
export const DistanceMeterContextProvider = ({children}) => {
|
||||||
|
const [distancePoints, setDistancePoints] = useState([]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DistanceMeterContext.Provider value={{
|
||||||
|
distancePoints, setDistancePoints
|
||||||
|
}}>
|
||||||
|
{ children }
|
||||||
|
</DistanceMeterContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const GradientsContext = createContext();
|
|
||||||
export default GradientsContext;
|
|
||||||
@ -1,7 +1,9 @@
|
|||||||
|
import {createContext, useContext, useMemo} from "react";
|
||||||
import Constants from "../helpers/constants";
|
import Constants from "../helpers/constants";
|
||||||
import {useContext, useMemo} from "react";
|
import SceneryContext from "./SceneryContext";
|
||||||
import GradientsContext from "../contexts/GradientsContext";
|
|
||||||
import SceneryContext from "../contexts/SceneryContext";
|
const GradientsContext = createContext();
|
||||||
|
export default GradientsContext;
|
||||||
|
|
||||||
function getMinMax(trackColorMode, scenery) {
|
function getMinMax(trackColorMode, scenery) {
|
||||||
if (trackColorMode === 'elevation') {
|
if (trackColorMode === 'elevation') {
|
||||||
@ -54,10 +56,8 @@ function createGradientDefs(scenery) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function GradientsManager(props) {
|
export function GradientsContextProvider({children}) {
|
||||||
const { children } = props;
|
|
||||||
const { scenery } = useContext(SceneryContext);
|
const { scenery } = useContext(SceneryContext);
|
||||||
|
|
||||||
const gradientDefs = useMemo(() => createGradientDefs(scenery), [scenery]);
|
const gradientDefs = useMemo(() => createGradientDefs(scenery), [scenery]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const SceneryContext = createContext();
|
|
||||||
export default SceneryContext;
|
|
||||||
@ -1,17 +1,19 @@
|
|||||||
import { useState, useCallback, useEffect, useRef } from 'react';
|
import { createContext, useState, useCallback, useEffect, useRef } from 'react';
|
||||||
import SceneryContext from '../contexts/SceneryContext';
|
|
||||||
import { useZoomPanEmitter } from '../hooks/useZoomPubSub';
|
import { useZoomPanEmitter } from '../hooks/useZoomPubSub';
|
||||||
import SceneryParser from '../model/parsing/scenery-parser';
|
import SceneryParser from '../model/parsing/scenery-parser';
|
||||||
import SceneryParserLog from '../model/parsing/scenery-parser-log';
|
import SceneryParserLog from '../model/parsing/scenery-parser-log';
|
||||||
import { showCustomDialog, showDialog } from '../services/dialogService';
|
import { showCustomDialog, showDialog } from '../services/dialogService';
|
||||||
import { resetHoveredTracksStack } from '../services/trackHoverInfoService';
|
import { resetHoveredTracksStack } from '../services/trackHoverInfoService';
|
||||||
import SceneryLoadedDialog from './scenery-loaded-dialog/SceneryLoadedDialog';
|
import SceneryLoadedDialog from '../components/scenery-loaded-dialog/SceneryLoadedDialog';
|
||||||
import Constants from '../helpers/constants';
|
import Constants from '../helpers/constants';
|
||||||
import MiscHelper from '../helpers/miscHelper';
|
import MiscHelper from '../helpers/miscHelper';
|
||||||
import ElectrificationResolver from '../model/parsing/electrification-resolver';
|
import ElectrificationResolver from '../model/parsing/electrification-resolver';
|
||||||
import { useEmbeddedContext } from '../contexts/EmbeddedContext';
|
import { useEmbeddedContext } from './EmbeddedContext';
|
||||||
|
|
||||||
export default function SceneryManager(props) {
|
const SceneryContext = createContext();
|
||||||
|
export default SceneryContext;
|
||||||
|
|
||||||
|
export const SceneryContextProvider = ({children}) => {
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
const [scenery, setScenery] = useState(null);
|
const [scenery, setScenery] = useState(null);
|
||||||
const [sceneryListData, setSceneryListData] = useState(null);
|
const [sceneryListData, setSceneryListData] = useState(null);
|
||||||
@ -180,7 +182,7 @@ export default function SceneryManager(props) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<SceneryContext.Provider value={{ isLoading, scenery, sceneryListData, loadScenery, loadCustomScenery, electrificationStepModeStep }}>
|
<SceneryContext.Provider value={{ isLoading, scenery, sceneryListData, loadScenery, loadCustomScenery, electrificationStepModeStep }}>
|
||||||
{props.children}
|
{children}
|
||||||
</SceneryContext.Provider>
|
</SceneryContext.Provider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const SettingsContext = createContext();
|
|
||||||
export default SettingsContext;
|
|
||||||
@ -1,8 +1,10 @@
|
|||||||
import { useCallback, useEffect, useState } from "react";
|
import { createContext, useState, useCallback, useEffect } from 'react';
|
||||||
import SettingsContext from "../contexts/SettingsContext";
|
|
||||||
import Constants from "../helpers/constants";
|
import Constants from "../helpers/constants";
|
||||||
|
|
||||||
export default function SettingsManager(props) {
|
const SettingsContext = createContext();
|
||||||
|
export default SettingsContext;
|
||||||
|
|
||||||
|
export const SettingsContextProvider = ({children}) => {
|
||||||
const [ layers, setLayers ] = useState([]);
|
const [ layers, setLayers ] = useState([]);
|
||||||
const [ trackColorMode, setTrackColorMode ] = useState(Constants.trackColorModeDefault);
|
const [ trackColorMode, setTrackColorMode ] = useState(Constants.trackColorModeDefault);
|
||||||
const [ showTrackHoverInfo, setShowTrackHoverInfo ] = useState(true);
|
const [ showTrackHoverInfo, setShowTrackHoverInfo ] = useState(true);
|
||||||
@ -32,7 +34,7 @@ export default function SettingsManager(props) {
|
|||||||
extendedSignals, setExtendedSignals,
|
extendedSignals, setExtendedSignals,
|
||||||
originalSignalNames, setOriginalSignalNames
|
originalSignalNames, setOriginalSignalNames
|
||||||
}}>
|
}}>
|
||||||
{ props.children }
|
{ children }
|
||||||
</SettingsContext.Provider>
|
</SettingsContext.Provider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const SideMenuContext = createContext();
|
|
||||||
export default SideMenuContext;
|
|
||||||
16
src/contexts/SideMenuContext.jsx
Normal file
16
src/contexts/SideMenuContext.jsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { createContext, useState } from 'react';
|
||||||
|
|
||||||
|
const SideMenuContext = createContext();
|
||||||
|
export default SideMenuContext;
|
||||||
|
|
||||||
|
export const SideMenuContextProvider = ({children}) => {
|
||||||
|
const [sideMenuOpen, setSideMenuOpen] = useState(false);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SideMenuContext.Provider value={{
|
||||||
|
sideMenuOpen, setSideMenuOpen
|
||||||
|
}}>
|
||||||
|
{ children }
|
||||||
|
</SideMenuContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
const ThemeContext = createContext();
|
|
||||||
export default ThemeContext;
|
|
||||||
@ -1,7 +1,9 @@
|
|||||||
import { useState } from "react";
|
import { createContext, useState } from 'react';
|
||||||
import ThemeContext from "../contexts/ThemeContext";
|
|
||||||
|
|
||||||
export default function ThemeManager(props) {
|
const ThemeContext = createContext();
|
||||||
|
export default ThemeContext;
|
||||||
|
|
||||||
|
export const ThemeContextProvider = ({children}) => {
|
||||||
const [ lightMode, setLightMode ] = useState(false);
|
const [ lightMode, setLightMode ] = useState(false);
|
||||||
|
|
||||||
if(lightMode === true) {
|
if(lightMode === true) {
|
||||||
@ -14,7 +16,7 @@ export default function ThemeManager(props) {
|
|||||||
<ThemeContext.Provider value={{
|
<ThemeContext.Provider value={{
|
||||||
lightMode, setLightMode
|
lightMode, setLightMode
|
||||||
}}>
|
}}>
|
||||||
{ props.children }
|
{ children }
|
||||||
</ThemeContext.Provider>
|
</ThemeContext.Provider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user