From 06073546f7dc4074531bbbd8ecfc8208d306037b Mon Sep 17 00:00:00 2001 From: Ross Bulat Date: Tue, 12 Mar 2024 20:14:03 +0700 Subject: [PATCH] refactor: re-org and renames --- src/App.tsx | 2 +- src/IntegrityChecks/Local.ts | 2 +- src/Router.tsx | 4 +- .../Page/provider => contexts/Route}/Local.ts | 46 ++++++------- src/contexts/Route/defaults.ts | 12 ++++ src/contexts/Route/index.tsx | 66 ++++++++++++++++++ src/contexts/Route/types.ts | 15 +++++ src/hooks/useRedirectOnInactive/index.tsx | 8 +-- src/library/Page/provider/defaults.ts | 12 ---- src/library/Page/provider/index.tsx | 67 ------------------- src/library/Page/provider/types.ts | 15 ----- .../Common => library}/PageWithMenu/index.tsx | 10 +-- .../Common => library}/PageWithMenu/types.ts | 4 +- src/library/Tabs/Tab.tsx | 4 +- .../Default/AutoConnect.tsx | 0 .../Default/ChainState/index.tsx | 0 .../Default/Connect/ChainList.tsx | 0 .../Default/Connect/ChainListItem.tsx | 0 .../Default/Connect/ConnectHeader.tsx | 0 .../Default/Connect/ConnectMenu.tsx | 0 .../Default/Connect/CustomEndpointInput.tsx | 0 .../Default/Connect/RecentChain.tsx | 0 .../Default/Connect/SearchChain.tsx | 0 .../Default/Connect/TagControls.tsx | 0 .../Connect/TagsMenu/ConfigTagMenu.tsx | 0 .../Connect/TagsMenu/FilterTagMenu.tsx | 0 .../Default/Connect/TagsMenu/Inner.tsx | 0 .../Default/Connect/Wrappers.ts | 0 .../Default/Connect/index.tsx | 0 .../Default/Extrinsics/index.tsx | 0 .../Default/ManageTab/RenameTab.tsx | 0 .../Default/ManageTab/Wrappers.ts | 0 .../Default/ManageTab/index.tsx | 8 +-- .../Default/Menu/ButtonWithTooltip.tsx | 0 .../Default/Menu/index.tsx | 12 ++-- .../Default/Overview/index.tsx | 0 src/{screens => routes}/Default/Route.tsx | 6 +- src/{screens => routes}/Default/index.tsx | 12 ++-- src/{screens => routes}/Settings/Menu.tsx | 8 +-- src/{screens => routes}/Settings/Route.tsx | 6 +- .../Settings/TabSettings/Wrappers.ts | 0 .../Settings/TabSettings/index.tsx | 0 .../Settings/TagSettings/ManageTagForm.tsx | 0 .../Settings/TagSettings/MangeTagItem.tsx | 0 .../Settings/TagSettings/Wrappers.ts | 0 .../Settings/TagSettings/index.tsx | 0 .../Settings/TagSettings/types.ts | 0 .../Settings/WorkspaceSettings/Utils.ts | 0 .../Settings/WorkspaceSettings/index.tsx | 0 src/{screens => routes}/Settings/index.tsx | 6 +- src/{screens => routes}/types.ts | 0 51 files changed, 158 insertions(+), 167 deletions(-) rename src/{library/Page/provider => contexts/Route}/Local.ts (63%) create mode 100644 src/contexts/Route/defaults.ts create mode 100644 src/contexts/Route/index.tsx create mode 100644 src/contexts/Route/types.ts delete mode 100644 src/library/Page/provider/defaults.ts delete mode 100644 src/library/Page/provider/index.tsx delete mode 100644 src/library/Page/provider/types.ts rename src/{screens/Common => library}/PageWithMenu/index.tsx (88%) rename src/{screens/Common => library}/PageWithMenu/types.ts (78%) rename src/{screens => routes}/Default/AutoConnect.tsx (100%) rename src/{screens => routes}/Default/ChainState/index.tsx (100%) rename src/{screens => routes}/Default/Connect/ChainList.tsx (100%) rename src/{screens => routes}/Default/Connect/ChainListItem.tsx (100%) rename src/{screens => routes}/Default/Connect/ConnectHeader.tsx (100%) rename src/{screens => routes}/Default/Connect/ConnectMenu.tsx (100%) rename src/{screens => routes}/Default/Connect/CustomEndpointInput.tsx (100%) rename src/{screens => routes}/Default/Connect/RecentChain.tsx (100%) rename src/{screens => routes}/Default/Connect/SearchChain.tsx (100%) rename src/{screens => routes}/Default/Connect/TagControls.tsx (100%) rename src/{screens => routes}/Default/Connect/TagsMenu/ConfigTagMenu.tsx (100%) rename src/{screens => routes}/Default/Connect/TagsMenu/FilterTagMenu.tsx (100%) rename src/{screens => routes}/Default/Connect/TagsMenu/Inner.tsx (100%) rename src/{screens => routes}/Default/Connect/Wrappers.ts (100%) rename src/{screens => routes}/Default/Connect/index.tsx (100%) rename src/{screens => routes}/Default/Extrinsics/index.tsx (100%) rename src/{screens => routes}/Default/ManageTab/RenameTab.tsx (100%) rename src/{screens => routes}/Default/ManageTab/Wrappers.ts (100%) rename src/{screens => routes}/Default/ManageTab/index.tsx (90%) rename src/{screens => routes}/Default/Menu/ButtonWithTooltip.tsx (100%) rename src/{screens => routes}/Default/Menu/index.tsx (84%) rename src/{screens => routes}/Default/Overview/index.tsx (100%) rename src/{screens => routes}/Default/Route.tsx (89%) rename src/{screens => routes}/Default/index.tsx (75%) rename src/{screens => routes}/Settings/Menu.tsx (84%) rename src/{screens => routes}/Settings/Route.tsx (77%) rename src/{screens => routes}/Settings/TabSettings/Wrappers.ts (100%) rename src/{screens => routes}/Settings/TabSettings/index.tsx (100%) rename src/{screens => routes}/Settings/TagSettings/ManageTagForm.tsx (100%) rename src/{screens => routes}/Settings/TagSettings/MangeTagItem.tsx (100%) rename src/{screens => routes}/Settings/TagSettings/Wrappers.ts (100%) rename src/{screens => routes}/Settings/TagSettings/index.tsx (100%) rename src/{screens => routes}/Settings/TagSettings/types.ts (100%) rename src/{screens => routes}/Settings/WorkspaceSettings/Utils.ts (100%) rename src/{screens => routes}/Settings/WorkspaceSettings/index.tsx (100%) rename src/{screens => routes}/Settings/index.tsx (70%) rename src/{screens => routes}/types.ts (100%) diff --git a/src/App.tsx b/src/App.tsx index 89bb8e83..a4847ea3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,7 +9,7 @@ import { AppErrorBoundary } from 'library/ErrorBoundaries/AppErrorBoundary'; import { performLocalIntegrityChecks } from 'IntegrityChecks/Local'; // The currently supported pages. -export type PageId = 'default' | 'settings'; +export type Route = 'default' | 'settings'; export const App = () => ( diff --git a/src/IntegrityChecks/Local.ts b/src/IntegrityChecks/Local.ts index 85b1b542..8f698b06 100644 --- a/src/IntegrityChecks/Local.ts +++ b/src/IntegrityChecks/Local.ts @@ -146,7 +146,7 @@ export const removeLocalStorageState = (includeTags = false) => { localStorage.removeItem('searchTerms'); localStorage.removeItem('customEndpoints'); localStorage.removeItem('appliedTags'); - localStorage.removeItem('pageSections'); + localStorage.removeItem('activePages'); localStorage.removeItem('pageRedirects'); if (includeTags) { diff --git a/src/Router.tsx b/src/Router.tsx index 3eb4868c..08038b40 100644 --- a/src/Router.tsx +++ b/src/Router.tsx @@ -2,8 +2,8 @@ // SPDX-License-Identifier: GPL-3.0-only import { Navigate, Route, Routes } from 'react-router-dom'; -import { DefaultRoute } from 'screens/Default/Route'; -import { SettingsRoute } from 'screens/Settings/Route'; +import { DefaultRoute } from 'routes/Default/Route'; +import { SettingsRoute } from 'routes/Settings/Route'; import { Header } from 'library/Header'; import { ContextMenu } from 'library/ContextMenu'; import { Tabs } from 'library/Tabs'; diff --git a/src/library/Page/provider/Local.ts b/src/contexts/Route/Local.ts similarity index 63% rename from src/library/Page/provider/Local.ts rename to src/contexts/Route/Local.ts index 40bbd9c3..1f275a65 100644 --- a/src/library/Page/provider/Local.ts +++ b/src/contexts/Route/Local.ts @@ -2,25 +2,25 @@ // SPDX-License-Identifier: GPL-3.0-only import { localStorageOrDefault } from '@w3ux/utils'; -import type { PageId } from 'App'; +import type { Route } from 'App'; // ------------------------------------------------------ // Getters. // ------------------------------------------------------ -// Gets saved page section from local storage, or returns undefined otherwise. -export const getActiveSection = ( - pageId: PageId, +// Gets saved active page from local storage, or returns undefined otherwise. +export const getActivePage = ( + route: Route, tabId: number ): number | undefined => { - const result = localStorageOrDefault(`pageSections`, undefined, true) as + const result = localStorageOrDefault(`activePages`, undefined, true) as | Record | undefined; if (result) { - const maybePageSection = result[`${tabId}:${pageId}`]; - if (maybePageSection) { - return maybePageSection as number; + const value = result[`${tabId}:${route}`]; + if (value) { + return value as number; } } }; @@ -28,7 +28,7 @@ export const getActiveSection = ( // Gets a temporary redirect from local storage, or returns undefined otherwise. If a redirect is // found it is immediately removed from local storage. export const getSectionRedirect = ( - pageId: PageId, + route: Route, tabId: number ): number | undefined => { const result = localStorageOrDefault(`pageRedirects`, undefined, true) as @@ -36,11 +36,11 @@ export const getSectionRedirect = ( | undefined; if (result) { - const maybePageRedirect = result[`${tabId}:${pageId}`]; + const value = result[`${tabId}:${route}`]; // If page redirect exists, remove it before returning. - if (maybePageRedirect) { + if (value) { const updated = { ...result }; - delete updated[`${tabId}:${pageId}`]; + delete updated[`${tabId}:${route}`]; if (Object.keys(updated).length === 0) { localStorage.removeItem(`pageRedirects`); @@ -48,7 +48,7 @@ export const getSectionRedirect = ( localStorage.setItem(`pageRedirects`, JSON.stringify(updated)); } - return maybePageRedirect as number; + return value as number; } } }; @@ -58,29 +58,21 @@ export const getSectionRedirect = ( // ------------------------------------------------------ // Sets page section to local storage. -export const setActiveSection = ( - pageId: PageId, - tabId: number, - value: number -) => { +export const setActivePage = (route: Route, tabId: number, value: number) => { const current = - (localStorageOrDefault(`pageSections`, undefined, true) as + (localStorageOrDefault(`activePages`, undefined, true) as | Record | undefined) || {}; const updated = { ...current, - [`${tabId}:${pageId}`]: value, + [`${tabId}:${route}`]: value, }; - localStorage.setItem(`pageSections`, JSON.stringify(updated)); + localStorage.setItem(`activePages`, JSON.stringify(updated)); }; // Sets a temporary redirect to local storage. -export const setSectionRedirect = ( - pageId: PageId, - tabId: number, - value: number -) => { +export const setPageRedirect = (route: Route, tabId: number, value: number) => { const current = (localStorageOrDefault(`pageRedirects`, undefined, true) as | Record @@ -88,7 +80,7 @@ export const setSectionRedirect = ( const updated = { ...current, - [`${tabId}:${pageId}`]: value, + [`${tabId}:${route}`]: value, }; localStorage.setItem(`pageRedirects`, JSON.stringify(updated)); }; diff --git a/src/contexts/Route/defaults.ts b/src/contexts/Route/defaults.ts new file mode 100644 index 00000000..f68633c6 --- /dev/null +++ b/src/contexts/Route/defaults.ts @@ -0,0 +1,12 @@ +// Copyright 2024 @rossbulat/console authors & contributors +// SPDX-License-Identifier: GPL-3.0-only +/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */ + +import type { RouteContextInterface } from './types'; + +export const defaultActivePage = 0; + +export const defaultRouteContext: RouteContextInterface = { + activePage: defaultActivePage, + setActivePage: (section, persist) => {}, +}; diff --git a/src/contexts/Route/index.tsx b/src/contexts/Route/index.tsx new file mode 100644 index 00000000..91880bc6 --- /dev/null +++ b/src/contexts/Route/index.tsx @@ -0,0 +1,66 @@ +// Copyright 2024 @rossbulat/console authors & contributors +// SPDX-License-Identifier: GPL-3.0-only + +import { createContext, useContext, useState } from 'react'; +import { defaultActivePage, defaultRouteContext } from './defaults'; +import type { RouteContextInterface, RouteContextProps } from './types'; +import * as local from './Local'; +import { useEffectIgnoreInitial } from '@w3ux/hooks'; +import { useTabs } from 'contexts/Tabs'; +import { useApi } from 'contexts/Api'; + +export const RouteContext = + createContext(defaultRouteContext); + +export const useRoute = () => useContext(RouteContext); + +export const RouteProvider = ({ route, children }: RouteContextProps) => { + const { activeTabId } = useTabs(); + const { redirectCounter } = useTabs(); + const { getApiActive, getApiStatus } = useApi(); + + const apiStatus = getApiStatus(activeTabId); + const apiActive = getApiActive(activeTabId); + + // The active section of the page. Falls back to default section if not connected. + const [activePage, setActivePageState] = useState( + !apiActive + ? defaultActivePage + : local.getActivePage(route, activeTabId) || defaultActivePage + ); + + // Sets active section, and updates local storage if persisted. + const setActivePage = (section: number, persist = true) => { + if (persist) { + local.setActivePage(route, activeTabId, section); + } + setActivePageState(section); + }; + + // Handle redirects from local storage, if present. Also redirects back to default section if api + // is not active. + useEffectIgnoreInitial(() => { + const redirect = local.getSectionRedirect(route, activeTabId); + const localActive = local.getActivePage(route, activeTabId); + + if (redirect) { + setActivePage(redirect || localActive || defaultActivePage, false); + } else { + setActivePage( + !apiActive ? defaultActivePage : localActive || defaultActivePage, + false + ); + } + }, [route, activeTabId, redirectCounter, apiActive, apiStatus]); + + return ( + + {children} + + ); +}; diff --git a/src/contexts/Route/types.ts b/src/contexts/Route/types.ts new file mode 100644 index 00000000..4dbe63ef --- /dev/null +++ b/src/contexts/Route/types.ts @@ -0,0 +1,15 @@ +// Copyright 2024 @rossbulat/console authors & contributors +// SPDX-License-Identifier: GPL-3.0-only + +import type { Route } from 'App'; +import type { ReactNode } from 'react'; + +export interface RouteContextInterface { + activePage: number; + setActivePage: (section: number, persist?: boolean) => void; +} + +export interface RouteContextProps { + route: Route; + children: ReactNode; +} diff --git a/src/hooks/useRedirectOnInactive/index.tsx b/src/hooks/useRedirectOnInactive/index.tsx index 5e43fddb..24007ec4 100644 --- a/src/hooks/useRedirectOnInactive/index.tsx +++ b/src/hooks/useRedirectOnInactive/index.tsx @@ -3,14 +3,14 @@ import { useApi } from 'contexts/Api'; import { useTabs } from 'contexts/Tabs'; -import { useSection } from 'library/Page/provider'; +import { useRoute } from 'contexts/Route'; import { useEffect } from 'react'; -// NOTE: This hook can only be used within components, depending on SectionProvider. +// NOTE: This hook can only be used within components, depending on RouteProvider. export const useRedirectOnInactive = (tabId: number) => { const { activeTabId } = useTabs(); const { getApiStatus } = useApi(); - const { setActiveSection } = useSection(); + const { setActivePage } = useRoute(); const apiStatus = getApiStatus(tabId); const INACTIVE_API_STATUSES = ['connected', 'disconnected', 'error']; @@ -21,7 +21,7 @@ export const useRedirectOnInactive = (tabId: number) => { // different section. useEffect(() => { if (apiInactive) { - setActiveSection(0, false); + setActivePage(0, false); } }, [apiStatus, activeTabId]); }; diff --git a/src/library/Page/provider/defaults.ts b/src/library/Page/provider/defaults.ts deleted file mode 100644 index 27e2c017..00000000 --- a/src/library/Page/provider/defaults.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2024 @rossbulat/console authors & contributors -// SPDX-License-Identifier: GPL-3.0-only -/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */ - -import type { SectionContextInterface } from './types'; - -export const defaultActiveSection = 0; - -export const defaultSectionContext: SectionContextInterface = { - activeSection: defaultActiveSection, - setActiveSection: (section, persist) => {}, -}; diff --git a/src/library/Page/provider/index.tsx b/src/library/Page/provider/index.tsx deleted file mode 100644 index 5fef51e5..00000000 --- a/src/library/Page/provider/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2024 @rossbulat/console authors & contributors -// SPDX-License-Identifier: GPL-3.0-only - -import { createContext, useContext, useState } from 'react'; -import { defaultActiveSection, defaultSectionContext } from './defaults'; -import type { SectionContextInterface, SectionContextProps } from './types'; -import * as local from './Local'; -import { useEffectIgnoreInitial } from '@w3ux/hooks'; -import { useTabs } from 'contexts/Tabs'; -import { useApi } from 'contexts/Api'; - -export const SectionContext = createContext( - defaultSectionContext -); - -export const useSection = () => useContext(SectionContext); - -export const SectionProvider = ({ pageId, children }: SectionContextProps) => { - const { activeTabId } = useTabs(); - const { redirectCounter } = useTabs(); - const { getApiActive, getApiStatus } = useApi(); - - const apiStatus = getApiStatus(activeTabId); - const apiActive = getApiActive(activeTabId); - - // The active section of the page. Falls back to default section if not connected. - const [activeSection, setActiveSectionState] = useState( - !apiActive - ? defaultActiveSection - : local.getActiveSection(pageId, activeTabId) || defaultActiveSection - ); - - // Sets active section, and updates local storage if persisted. - const setActiveSection = (section: number, persist = true) => { - if (persist) { - local.setActiveSection(pageId, activeTabId, section); - } - setActiveSectionState(section); - }; - - // Handle redirects from local storage, if present. Also redirects back to default section if api - // is not active. - useEffectIgnoreInitial(() => { - const redirect = local.getSectionRedirect(pageId, activeTabId); - const localActive = local.getActiveSection(pageId, activeTabId); - - if (redirect) { - setActiveSection(redirect || localActive || defaultActiveSection, false); - } else { - setActiveSection( - !apiActive ? defaultActiveSection : localActive || defaultActiveSection, - false - ); - } - }, [pageId, activeTabId, redirectCounter, apiActive, apiStatus]); - - return ( - - {children} - - ); -}; diff --git a/src/library/Page/provider/types.ts b/src/library/Page/provider/types.ts deleted file mode 100644 index 63f27b49..00000000 --- a/src/library/Page/provider/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2024 @rossbulat/console authors & contributors -// SPDX-License-Identifier: GPL-3.0-only - -import type { PageId } from 'App'; -import type { ReactNode } from 'react'; - -export interface SectionContextInterface { - activeSection: number; - setActiveSection: (section: number, persist?: boolean) => void; -} - -export interface SectionContextProps { - pageId: PageId; - children: ReactNode; -} diff --git a/src/screens/Common/PageWithMenu/index.tsx b/src/library/PageWithMenu/index.tsx similarity index 88% rename from src/screens/Common/PageWithMenu/index.tsx rename to src/library/PageWithMenu/index.tsx index 216d3773..f1726086 100644 --- a/src/screens/Common/PageWithMenu/index.tsx +++ b/src/library/PageWithMenu/index.tsx @@ -3,7 +3,7 @@ import { Body } from 'library/Body'; import { Page as PageWrapper } from 'library/Page'; -import { SectionProvider } from 'library/Page/provider'; +import { RouteProvider } from 'contexts/Route'; import type { PageWithMenuProps } from './types'; import { NetworkDirectory, type DirectoryId } from 'config/networks'; import { useTabs } from 'contexts/Tabs'; @@ -12,9 +12,9 @@ import { useApi } from 'contexts/Api'; import { useSettings } from 'contexts/Settings'; // Renders a page and menu, with state controlling the active section of the page. -export const PageWithMenu = ({ pageId, Page, Menu }: PageWithMenuProps) => { - const { chainColorEnabled } = useSettings(); +export const PageWithMenu = ({ route, Page, Menu }: PageWithMenuProps) => { const { getApiStatus } = useApi(); + const { chainColorEnabled } = useSettings(); const { getActiveTab, activeTabId } = useTabs(); const tab = getActiveTab(); @@ -43,14 +43,14 @@ export const PageWithMenu = ({ pageId, Page, Menu }: PageWithMenuProps) => { : undefined } > - + - + ); }; diff --git a/src/screens/Common/PageWithMenu/types.ts b/src/library/PageWithMenu/types.ts similarity index 78% rename from src/screens/Common/PageWithMenu/types.ts rename to src/library/PageWithMenu/types.ts index a1f1910c..a679bf81 100644 --- a/src/screens/Common/PageWithMenu/types.ts +++ b/src/library/PageWithMenu/types.ts @@ -1,11 +1,11 @@ // Copyright 2024 @rossbulat/console authors & contributors // SPDX-License-Identifier: GPL-3.0-only -import type { PageId } from 'App'; +import type { Route } from 'App'; import type { FC } from 'react'; export interface PageWithMenuProps { - pageId: PageId; + route: Route; Page: FC; Menu: FC; } diff --git a/src/library/Tabs/Tab.tsx b/src/library/Tabs/Tab.tsx index a93e61a4..d53dcf60 100644 --- a/src/library/Tabs/Tab.tsx +++ b/src/library/Tabs/Tab.tsx @@ -18,7 +18,7 @@ import { } from 'contexts/Tabs/defaults'; import { useApi } from 'contexts/Api'; import { ConnectionIcon } from './ConectionIcon'; -import * as localSections from 'library/Page/provider/Local'; +import * as localSections from 'contexts/Route/Local'; export const Tab = ({ index, id, name, initial = false }: TabProps) => { const { @@ -93,7 +93,7 @@ export const Tab = ({ index, id, name, initial = false }: TabProps) => { tabId={id} onSettings={() => { setActiveTabId(id); - localSections.setSectionRedirect('default', id, 3); + localSections.setPageRedirect('default', id, 3); incrementRedirectCounter(); closeMenu(); }} diff --git a/src/screens/Default/AutoConnect.tsx b/src/routes/Default/AutoConnect.tsx similarity index 100% rename from src/screens/Default/AutoConnect.tsx rename to src/routes/Default/AutoConnect.tsx diff --git a/src/screens/Default/ChainState/index.tsx b/src/routes/Default/ChainState/index.tsx similarity index 100% rename from src/screens/Default/ChainState/index.tsx rename to src/routes/Default/ChainState/index.tsx diff --git a/src/screens/Default/Connect/ChainList.tsx b/src/routes/Default/Connect/ChainList.tsx similarity index 100% rename from src/screens/Default/Connect/ChainList.tsx rename to src/routes/Default/Connect/ChainList.tsx diff --git a/src/screens/Default/Connect/ChainListItem.tsx b/src/routes/Default/Connect/ChainListItem.tsx similarity index 100% rename from src/screens/Default/Connect/ChainListItem.tsx rename to src/routes/Default/Connect/ChainListItem.tsx diff --git a/src/screens/Default/Connect/ConnectHeader.tsx b/src/routes/Default/Connect/ConnectHeader.tsx similarity index 100% rename from src/screens/Default/Connect/ConnectHeader.tsx rename to src/routes/Default/Connect/ConnectHeader.tsx diff --git a/src/screens/Default/Connect/ConnectMenu.tsx b/src/routes/Default/Connect/ConnectMenu.tsx similarity index 100% rename from src/screens/Default/Connect/ConnectMenu.tsx rename to src/routes/Default/Connect/ConnectMenu.tsx diff --git a/src/screens/Default/Connect/CustomEndpointInput.tsx b/src/routes/Default/Connect/CustomEndpointInput.tsx similarity index 100% rename from src/screens/Default/Connect/CustomEndpointInput.tsx rename to src/routes/Default/Connect/CustomEndpointInput.tsx diff --git a/src/screens/Default/Connect/RecentChain.tsx b/src/routes/Default/Connect/RecentChain.tsx similarity index 100% rename from src/screens/Default/Connect/RecentChain.tsx rename to src/routes/Default/Connect/RecentChain.tsx diff --git a/src/screens/Default/Connect/SearchChain.tsx b/src/routes/Default/Connect/SearchChain.tsx similarity index 100% rename from src/screens/Default/Connect/SearchChain.tsx rename to src/routes/Default/Connect/SearchChain.tsx diff --git a/src/screens/Default/Connect/TagControls.tsx b/src/routes/Default/Connect/TagControls.tsx similarity index 100% rename from src/screens/Default/Connect/TagControls.tsx rename to src/routes/Default/Connect/TagControls.tsx diff --git a/src/screens/Default/Connect/TagsMenu/ConfigTagMenu.tsx b/src/routes/Default/Connect/TagsMenu/ConfigTagMenu.tsx similarity index 100% rename from src/screens/Default/Connect/TagsMenu/ConfigTagMenu.tsx rename to src/routes/Default/Connect/TagsMenu/ConfigTagMenu.tsx diff --git a/src/screens/Default/Connect/TagsMenu/FilterTagMenu.tsx b/src/routes/Default/Connect/TagsMenu/FilterTagMenu.tsx similarity index 100% rename from src/screens/Default/Connect/TagsMenu/FilterTagMenu.tsx rename to src/routes/Default/Connect/TagsMenu/FilterTagMenu.tsx diff --git a/src/screens/Default/Connect/TagsMenu/Inner.tsx b/src/routes/Default/Connect/TagsMenu/Inner.tsx similarity index 100% rename from src/screens/Default/Connect/TagsMenu/Inner.tsx rename to src/routes/Default/Connect/TagsMenu/Inner.tsx diff --git a/src/screens/Default/Connect/Wrappers.ts b/src/routes/Default/Connect/Wrappers.ts similarity index 100% rename from src/screens/Default/Connect/Wrappers.ts rename to src/routes/Default/Connect/Wrappers.ts diff --git a/src/screens/Default/Connect/index.tsx b/src/routes/Default/Connect/index.tsx similarity index 100% rename from src/screens/Default/Connect/index.tsx rename to src/routes/Default/Connect/index.tsx diff --git a/src/screens/Default/Extrinsics/index.tsx b/src/routes/Default/Extrinsics/index.tsx similarity index 100% rename from src/screens/Default/Extrinsics/index.tsx rename to src/routes/Default/Extrinsics/index.tsx diff --git a/src/screens/Default/ManageTab/RenameTab.tsx b/src/routes/Default/ManageTab/RenameTab.tsx similarity index 100% rename from src/screens/Default/ManageTab/RenameTab.tsx rename to src/routes/Default/ManageTab/RenameTab.tsx diff --git a/src/screens/Default/ManageTab/Wrappers.ts b/src/routes/Default/ManageTab/Wrappers.ts similarity index 100% rename from src/screens/Default/ManageTab/Wrappers.ts rename to src/routes/Default/ManageTab/Wrappers.ts diff --git a/src/screens/Default/ManageTab/index.tsx b/src/routes/Default/ManageTab/index.tsx similarity index 90% rename from src/screens/Default/ManageTab/index.tsx rename to src/routes/Default/ManageTab/index.tsx index 989170dc..da6961d4 100644 --- a/src/screens/Default/ManageTab/index.tsx +++ b/src/routes/Default/ManageTab/index.tsx @@ -8,16 +8,16 @@ import { AutoConnect } from '../AutoConnect'; import { SettingsSubmitWrapper, SettingsToggleWrapper, -} from 'screens/Settings/TabSettings/Wrappers'; +} from 'routes/Settings/TabSettings/Wrappers'; import { ApiController } from 'controllers/ApiController'; import { useTabs } from 'contexts/Tabs'; -import { useSection } from 'library/Page/provider'; +import { useRoute } from 'contexts/Route'; import { useApi } from 'contexts/Api'; export const ManageTab = () => { const { getApiStatus } = useApi(); const { activeTabId } = useTabs(); - const { setActiveSection } = useSection(); + const { setActivePage } = useRoute(); const apiStatus = getApiStatus(activeTabId); const showDisconnect = ['ready', 'connected', 'connecting'].includes( @@ -54,7 +54,7 @@ export const ManageTab = () => { ) ) { ApiController.destroy(activeTabId); - setActiveSection(0); + setActivePage(0); } }} > diff --git a/src/screens/Default/Menu/ButtonWithTooltip.tsx b/src/routes/Default/Menu/ButtonWithTooltip.tsx similarity index 100% rename from src/screens/Default/Menu/ButtonWithTooltip.tsx rename to src/routes/Default/Menu/ButtonWithTooltip.tsx diff --git a/src/screens/Default/Menu/index.tsx b/src/routes/Default/Menu/index.tsx similarity index 84% rename from src/screens/Default/Menu/index.tsx rename to src/routes/Default/Menu/index.tsx index c69feac3..b779bb89 100644 --- a/src/screens/Default/Menu/index.tsx +++ b/src/routes/Default/Menu/index.tsx @@ -9,7 +9,7 @@ import { import { useTabs } from 'contexts/Tabs'; import { useLocation } from 'react-router-dom'; import { HeaderMenuWrapper } from 'library/HeaderMenu/Wrappers'; -import { useSection } from 'library/Page/provider'; +import { useRoute } from 'contexts/Route'; import { ButtonWithTooltip } from './ButtonWithTooltip'; import { useRedirectOnInactive } from 'hooks/useRedirectOnInactive'; import { useScreenSections } from '../Route'; @@ -17,7 +17,7 @@ import { useScreenSections } from '../Route'; export const ChainMenu = () => { const { pathname } = useLocation(); const { label, sections } = useScreenSections(); - const { activeSection, setActiveSection } = useSection(); + const { activePage, setActivePage } = useRoute(); const { tabsHidden, setTabsHidden, activeTabId } = useTabs(); // Redirect to section 0 if Api becomes inactive. @@ -31,8 +31,8 @@ export const ChainMenu = () => { {Object.entries(sections).map(([key, section], index) => ( @@ -43,8 +43,8 @@ export const ChainMenu = () => {
setActiveSection(3, false)} + active={activePage === 3} + onClick={() => setActivePage(3, false)} icon={faBarsProgress} disabled={false} iconTransform="shrink-1" diff --git a/src/screens/Default/Overview/index.tsx b/src/routes/Default/Overview/index.tsx similarity index 100% rename from src/screens/Default/Overview/index.tsx rename to src/routes/Default/Overview/index.tsx diff --git a/src/screens/Default/Route.tsx b/src/routes/Default/Route.tsx similarity index 89% rename from src/screens/Default/Route.tsx rename to src/routes/Default/Route.tsx index 36726d06..f1778c2f 100644 --- a/src/screens/Default/Route.tsx +++ b/src/routes/Default/Route.tsx @@ -3,8 +3,8 @@ import { ChainMenu } from './Menu'; import { Default } from '.'; -import { PageWithMenu } from 'screens/Common/PageWithMenu'; -import type { ScreenSections } from 'screens/types'; +import { PageWithMenu } from 'library/PageWithMenu'; +import type { ScreenSections } from 'routes/types'; import { useApi } from 'contexts/Api'; import { useTabs } from 'contexts/Tabs'; import { Overview } from './Overview'; @@ -65,5 +65,5 @@ export const useScreenSections = (): { }; export const DefaultRoute = () => ( - + ); diff --git a/src/screens/Default/index.tsx b/src/routes/Default/index.tsx similarity index 75% rename from src/screens/Default/index.tsx rename to src/routes/Default/index.tsx index 481e00a0..59e2752e 100644 --- a/src/screens/Default/index.tsx +++ b/src/routes/Default/index.tsx @@ -4,7 +4,7 @@ import { useApi } from 'contexts/Api'; import { Connect } from './Connect'; import { ManageTab } from './ManageTab'; -import { useSection } from 'library/Page/provider'; +import { useRoute } from 'contexts/Route'; import { Overview } from './Overview'; import { ChainState } from './ChainState'; import { Extrinsics } from './Extrinsics'; @@ -13,7 +13,7 @@ import { useTabs } from 'contexts/Tabs'; export const Default = () => { const { getApiStatus } = useApi(); const { activeTabId } = useTabs(); - const { activeSection } = useSection(); + const { activePage } = useRoute(); const apiStatus = getApiStatus(activeTabId); // If `Api` instance does not yet exist for the tab, display the connect chain UI. @@ -26,10 +26,10 @@ export const Default = () => { return ( <> - {activeSection === 0 && firstSection} - {activeSection === 1 && } - {activeSection === 2 && } - {activeSection === 3 && } + {activePage === 0 && firstSection} + {activePage === 1 && } + {activePage === 2 && } + {activePage === 3 && } ); }; diff --git a/src/screens/Settings/Menu.tsx b/src/routes/Settings/Menu.tsx similarity index 84% rename from src/screens/Settings/Menu.tsx rename to src/routes/Settings/Menu.tsx index 26f61a49..a4099832 100644 --- a/src/screens/Settings/Menu.tsx +++ b/src/routes/Settings/Menu.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only import { ButtonWrapper, HeaderMenuWrapper } from 'library/HeaderMenu/Wrappers'; -import { useSection } from '../../library/Page/provider'; +import { useRoute } from '../../contexts/Route'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faCheck } from '@fortawesome/free-solid-svg-icons'; import { useNavigate } from 'react-router-dom'; @@ -11,7 +11,7 @@ import { accentColors } from 'theme/accents/developer-console'; export const SettingsMenu = () => { const navigate = useNavigate(); - const { activeSection, setActiveSection } = useSection(); + const { activePage, setActivePage } = useRoute(); return ( { {Object.entries(SettingsSections).map(([key, { label }], index) => ( diff --git a/src/screens/Settings/Route.tsx b/src/routes/Settings/Route.tsx similarity index 77% rename from src/screens/Settings/Route.tsx rename to src/routes/Settings/Route.tsx index 58bf0ef0..1f213d78 100644 --- a/src/screens/Settings/Route.tsx +++ b/src/routes/Settings/Route.tsx @@ -3,11 +3,11 @@ import { SettingsMenu } from './Menu'; import { Settings } from '.'; -import { PageWithMenu } from 'screens/Common/PageWithMenu'; +import { PageWithMenu } from 'library/PageWithMenu'; import { WorkspaceSettings } from './WorkspaceSettings'; import { TabSettings } from './TabSettings'; import { TagSettings } from './TagSettings'; -import type { ScreenSections } from 'screens/types'; +import type { ScreenSections } from 'routes/types'; export const ScreenLabel = 'Settings'; @@ -27,5 +27,5 @@ export const SettingsSections: ScreenSections = { }; export const SettingsRoute = () => ( - + ); diff --git a/src/screens/Settings/TabSettings/Wrappers.ts b/src/routes/Settings/TabSettings/Wrappers.ts similarity index 100% rename from src/screens/Settings/TabSettings/Wrappers.ts rename to src/routes/Settings/TabSettings/Wrappers.ts diff --git a/src/screens/Settings/TabSettings/index.tsx b/src/routes/Settings/TabSettings/index.tsx similarity index 100% rename from src/screens/Settings/TabSettings/index.tsx rename to src/routes/Settings/TabSettings/index.tsx diff --git a/src/screens/Settings/TagSettings/ManageTagForm.tsx b/src/routes/Settings/TagSettings/ManageTagForm.tsx similarity index 100% rename from src/screens/Settings/TagSettings/ManageTagForm.tsx rename to src/routes/Settings/TagSettings/ManageTagForm.tsx diff --git a/src/screens/Settings/TagSettings/MangeTagItem.tsx b/src/routes/Settings/TagSettings/MangeTagItem.tsx similarity index 100% rename from src/screens/Settings/TagSettings/MangeTagItem.tsx rename to src/routes/Settings/TagSettings/MangeTagItem.tsx diff --git a/src/screens/Settings/TagSettings/Wrappers.ts b/src/routes/Settings/TagSettings/Wrappers.ts similarity index 100% rename from src/screens/Settings/TagSettings/Wrappers.ts rename to src/routes/Settings/TagSettings/Wrappers.ts diff --git a/src/screens/Settings/TagSettings/index.tsx b/src/routes/Settings/TagSettings/index.tsx similarity index 100% rename from src/screens/Settings/TagSettings/index.tsx rename to src/routes/Settings/TagSettings/index.tsx diff --git a/src/screens/Settings/TagSettings/types.ts b/src/routes/Settings/TagSettings/types.ts similarity index 100% rename from src/screens/Settings/TagSettings/types.ts rename to src/routes/Settings/TagSettings/types.ts diff --git a/src/screens/Settings/WorkspaceSettings/Utils.ts b/src/routes/Settings/WorkspaceSettings/Utils.ts similarity index 100% rename from src/screens/Settings/WorkspaceSettings/Utils.ts rename to src/routes/Settings/WorkspaceSettings/Utils.ts diff --git a/src/screens/Settings/WorkspaceSettings/index.tsx b/src/routes/Settings/WorkspaceSettings/index.tsx similarity index 100% rename from src/screens/Settings/WorkspaceSettings/index.tsx rename to src/routes/Settings/WorkspaceSettings/index.tsx diff --git a/src/screens/Settings/index.tsx b/src/routes/Settings/index.tsx similarity index 70% rename from src/screens/Settings/index.tsx rename to src/routes/Settings/index.tsx index ccb174cb..d41ce79b 100644 --- a/src/screens/Settings/index.tsx +++ b/src/routes/Settings/index.tsx @@ -1,13 +1,13 @@ // Copyright 2024 @rossbulat/console authors & contributors // SPDX-License-Identifier: GPL-3.0-only -import { useSection } from 'library/Page/provider'; +import { useRoute } from 'contexts/Route'; import { PageContentWrapper } from 'library/Page/Wrapper'; import { SettingsSections } from './Route'; export const Settings = () => { - const { activeSection } = useSection(); - const { Component } = SettingsSections[activeSection]; + const { activePage } = useRoute(); + const { Component } = SettingsSections[activePage]; return ( diff --git a/src/screens/types.ts b/src/routes/types.ts similarity index 100% rename from src/screens/types.ts rename to src/routes/types.ts