From e794745e21374a448b4e9210b355bfc6c056cc1d Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 25 Jul 2021 01:33:30 -0400 Subject: [PATCH] Busted catalog page selector --- src/views/catalog/CatalogView.tsx | 12 ++++------- .../navigation/CatalogNavigationView.tsx | 16 +++----------- .../navigation/CatalogNavigationView.types.ts | 3 +++ .../item/CatalogNavigationItemView.tsx | 18 ++++++++++++---- .../item/CatalogNavigationItemView.types.ts | 2 ++ .../set/CatalogNavigationSetView.tsx | 21 ++++--------------- .../set/CatalogNavigationSetView.types.ts | 3 +++ 7 files changed, 33 insertions(+), 42 deletions(-) diff --git a/src/views/catalog/CatalogView.tsx b/src/views/catalog/CatalogView.tsx index 0162cffd..db3735f0 100644 --- a/src/views/catalog/CatalogView.tsx +++ b/src/views/catalog/CatalogView.tsx @@ -76,12 +76,7 @@ export const CatalogView: FC = props => case 'open': if(parts.length > 2) { - dispatchCatalogState({ - type: CatalogActions.SET_PENDING_PAGE_ID, - payload: { - pendingPageId: parseInt(parts[2]) - } - }); + setPendingPageId(parseInt(parts[2])); } else { @@ -89,7 +84,7 @@ export const CatalogView: FC = props => } return; } - }, [ dispatchCatalogState ]); + }, []); useEffect(() => { @@ -128,6 +123,7 @@ export const CatalogView: FC = props => setCurrentTab(tree.shift()); setPendingTree(tree); + setPendingPageId(-1); } } }, [ isVisible, pendingPageId, catalogState.root, buildCatalogPageTree, setCurrentTab ]); @@ -176,7 +172,7 @@ export const CatalogView: FC = props =>
{ (!pageParser || (pageParser && !pageParser.frontPageItems.length)) &&
- +
}
diff --git a/src/views/catalog/views/navigation/CatalogNavigationView.tsx b/src/views/catalog/views/navigation/CatalogNavigationView.tsx index a9fb07c9..a240a71f 100644 --- a/src/views/catalog/views/navigation/CatalogNavigationView.tsx +++ b/src/views/catalog/views/navigation/CatalogNavigationView.tsx @@ -1,28 +1,18 @@ -import { ICatalogPageData } from 'nitro-renderer'; -import { FC, useEffect } from 'react'; +import { FC } from 'react'; import { CatalogSearchView } from '../search/CatalogSearchView'; import { CatalogNavigationViewProps } from './CatalogNavigationView.types'; import { CatalogNavigationSetView } from './set/CatalogNavigationSetView'; -export let ACTIVE_PAGES: ICatalogPageData[] = []; - export const CatalogNavigationView: FC = props => { - const { page = null } = props; - - useEffect(() => - { - if(!page) return; - - ACTIVE_PAGES = [ page ]; - }, [ page ]); + const { page = null, pendingTree = null, setPendingTree = null } = props; return ( <>
- +
diff --git a/src/views/catalog/views/navigation/CatalogNavigationView.types.ts b/src/views/catalog/views/navigation/CatalogNavigationView.types.ts index 7a010993..6be8a843 100644 --- a/src/views/catalog/views/navigation/CatalogNavigationView.types.ts +++ b/src/views/catalog/views/navigation/CatalogNavigationView.types.ts @@ -1,6 +1,9 @@ import { ICatalogPageData } from 'nitro-renderer'; +import { Dispatch, SetStateAction } from 'react'; export interface CatalogNavigationViewProps { page: ICatalogPageData; + pendingTree: ICatalogPageData[]; + setPendingTree: Dispatch>; } diff --git a/src/views/catalog/views/navigation/item/CatalogNavigationItemView.tsx b/src/views/catalog/views/navigation/item/CatalogNavigationItemView.tsx index 85878246..941c1c00 100644 --- a/src/views/catalog/views/navigation/item/CatalogNavigationItemView.tsx +++ b/src/views/catalog/views/navigation/item/CatalogNavigationItemView.tsx @@ -9,9 +9,8 @@ import { CatalogNavigationItemViewProps } from './CatalogNavigationItemView.type export const CatalogNavigationItemView: FC = props => { - const { page = null, isActive = false, setActiveChild = null } = props; + const { page = null, isActive = false, pendingTree = null, setPendingTree = null, setActiveChild = null } = props; const [ isExpanded, setIsExpanded ] = useState(false); - const [ myTree, setMyTree ] = useState(null); const { dispatchCatalogState = null } = useCatalogContext(); const select = useCallback((selectPage: ICatalogPageData) => @@ -46,7 +45,18 @@ export const CatalogNavigationItemView: FC = pro SendMessageHook(new CatalogPageComposer(page.pageId, -1, CatalogMode.MODE_NORMAL)); }, [ isActive, page, select, dispatchCatalogState ]); - if(!page.visible) return null; + useEffect(() => + { + if(!page || !pendingTree || !pendingTree.length) return; + + const index = pendingTree.indexOf(page); + + if(index === -1) return; + + //if(!pendingTree.length) setPendingTree(null); + + select(page); + }, [ pendingTree, page, select, setPendingTree ]); return (
@@ -57,7 +67,7 @@ export const CatalogNavigationItemView: FC = pro
{ isActive && isExpanded && page.children && (page.children.length > 0) &&
- +
}
); diff --git a/src/views/catalog/views/navigation/item/CatalogNavigationItemView.types.ts b/src/views/catalog/views/navigation/item/CatalogNavigationItemView.types.ts index e1ec52cc..b28e5e20 100644 --- a/src/views/catalog/views/navigation/item/CatalogNavigationItemView.types.ts +++ b/src/views/catalog/views/navigation/item/CatalogNavigationItemView.types.ts @@ -5,5 +5,7 @@ export interface CatalogNavigationItemViewProps { page: ICatalogPageData; isActive: boolean; + pendingTree: ICatalogPageData[]; + setPendingTree: Dispatch>; setActiveChild: Dispatch>; } diff --git a/src/views/catalog/views/navigation/set/CatalogNavigationSetView.tsx b/src/views/catalog/views/navigation/set/CatalogNavigationSetView.tsx index 32a8ec30..a9e897ec 100644 --- a/src/views/catalog/views/navigation/set/CatalogNavigationSetView.tsx +++ b/src/views/catalog/views/navigation/set/CatalogNavigationSetView.tsx @@ -1,17 +1,16 @@ import { ICatalogPageData } from 'nitro-renderer'; import { FC, useEffect, useState } from 'react'; -import { ACTIVE_PAGES } from '../CatalogNavigationView'; import { CatalogNavigationItemView } from '../item/CatalogNavigationItemView'; import { CatalogNavigationSetViewProps } from './CatalogNavigationSetView.types'; export const CatalogNavigationSetView: FC = props => { - const { page = null, isFirstSet = false } = props; + const { page = null, isFirstSet = false, pendingTree = null, setPendingTree = null } = props; const [ activeChild, setActiveChild ] = useState(null); useEffect(() => { - if(!isFirstSet || !page || (page.pageId === -1)) return; + if(!isFirstSet || !page || (page.pageId === -1) || pendingTree) return; if(page && page.children.length) { @@ -19,19 +18,7 @@ export const CatalogNavigationSetView: FC = props setActiveChild(child); } - }, [ page, isFirstSet ]); - - useEffect(() => - { - if(!activeChild) return; - - const index = (ACTIVE_PAGES.push(activeChild) - 1); - - return () => - { - ACTIVE_PAGES.splice(index, (ACTIVE_PAGES.length - index)); - } - }, [ activeChild ]); + }, [ page, isFirstSet, pendingTree ]); return (
@@ -39,7 +26,7 @@ export const CatalogNavigationSetView: FC = props { if(!page.visible) return null; - return + return }) }
); diff --git a/src/views/catalog/views/navigation/set/CatalogNavigationSetView.types.ts b/src/views/catalog/views/navigation/set/CatalogNavigationSetView.types.ts index 4adcad62..3cf29501 100644 --- a/src/views/catalog/views/navigation/set/CatalogNavigationSetView.types.ts +++ b/src/views/catalog/views/navigation/set/CatalogNavigationSetView.types.ts @@ -1,7 +1,10 @@ import { ICatalogPageData } from 'nitro-renderer'; +import { Dispatch, SetStateAction } from 'react'; export interface CatalogNavigationSetViewProps { page: ICatalogPageData; isFirstSet?: boolean; + pendingTree: ICatalogPageData[]; + setPendingTree: Dispatch>; }