More changes

This commit is contained in:
Bill 2022-01-19 02:22:30 -05:00
parent a91bff333a
commit 945894db9d
4 changed files with 76 additions and 89 deletions

View File

@ -26,6 +26,7 @@ import { MarketplacePostOfferView } from './views/page/layout/marketplace/Market
import { CatalogTabsViews } from './views/tabs/CatalogTabsView';
const DUMMY_PAGE_ID_FOR_OFFER_SEARCH: number = -12345678;
const REQUESTED_PAGE = new RequestedPage();
export const CatalogView: FC<{}> = props =>
{
@ -43,11 +44,7 @@ export const CatalogView: FC<{}> = props =>
const [ purchasableOffer, setPurchasableOffer ] = useState<IPurchasableOffer>(null);
const [ currentTab, setCurrentTab ] = useState<ICatalogNode>(null);
const [ activeNodes, setActiveNodes ] = useState<ICatalogNode[]>([]);
const [ lastActiveNodes, setLastActiveNodes ] = useState<ICatalogNode[]>(null);
const [ frontPageItems, setFrontPageItems ] = useState<FrontPageItem[]>([]);
const [ requestedPage, setRequestedPage ] = useState(new RequestedPage());
const [ roomPreviewer, setRoomPreviewer ] = useState<RoomPreviewer>(null);
const [ catalogState, dispatchCatalogState ] = useReducer(CatalogReducer, initialCatalog);
@ -64,18 +61,35 @@ export const CatalogView: FC<{}> = props =>
setPurchasableOffer(null);
setCurrentTab(null);
setActiveNodes([]);
setLastActiveNodes(null);
setFrontPageItems([]);
setIsInitialized(false);
setIsVisible(true);
});
}, []);
const getNodesByOfferId = useCallback((offerId: number) =>
const getNodeById = useCallback((id: number, node: ICatalogNode = null) =>
{
if(!node) node = rootNode;
if(!node) return null;
if((node.pageId === id) && (node !== rootNode)) return node;
for(const child of node.children)
{
const n = (getNodeById(id, child) as ICatalogNode);
if(n) return n;
}
return null;
}, [ rootNode ]);
const getNodesByOfferId = useCallback((offerId: number, flag: boolean = false) =>
{
if(!currentOffers || !currentOffers.size) return null;
if(true)
if(flag)
{
const nodes: ICatalogNode[] = [];
const offers = currentOffers.get(offerId);
@ -91,7 +105,7 @@ export const CatalogView: FC<{}> = props =>
return currentOffers.get(offerId);
}, [ currentOffers ]);
const loadCatalogPage = useCallback((pageId: number, offerId: number, forceRefresh: boolean = false) =>
const loadCatalogPage = useCallback((pageId: number, offerId: number) =>
{
if(pageId < 0) return;
@ -99,8 +113,6 @@ export const CatalogView: FC<{}> = props =>
{
setIsBusy(true);
setPageId(pageId);
if(forceRefresh) setForceRefresh(true);
});
SendMessageHook(new GetCatalogPageComposer(pageId, offerId, currentType));
@ -135,7 +147,7 @@ export const CatalogView: FC<{}> = props =>
});
}, [ currentPage, forceRefresh, selectOffer ]);
const selectCatalogNode = useCallback((targetNode: ICatalogNode) =>
const activateNode = useCallback((targetNode: ICatalogNode) =>
{
setActiveNodes(prevValue =>
{
@ -167,7 +179,7 @@ export const CatalogView: FC<{}> = props =>
return newNodes;
});
if(targetNode.pageId > -1) loadCatalogPage(targetNode.pageId, -1, true);
if(targetNode.pageId > -1) loadCatalogPage(targetNode.pageId, -1);
}, [ setActiveNodes, loadCatalogPage ]);
const onCatalogEvent = useCallback((event: CatalogEvent) =>
@ -215,13 +227,10 @@ export const CatalogView: FC<{}> = props =>
switch(parts[2])
{
case 'offerId':
//setPendingPageLookup({ value: parts[3], isOffer: true });
return;
}
}
//setPendingPageLookup({ value: parts[2], isOffer: false });
}
else
{
@ -270,42 +279,37 @@ export const CatalogView: FC<{}> = props =>
{
if(!rootNode) return;
BatchUpdates(() =>
{
setIsInitialized(true);
setIsInitialized(true);
if(rootNode.isBranch)
{
for(const child of rootNode.children)
switch(REQUESTED_PAGE.requestType)
{
case RequestedPage.REQUEST_TYPE_NONE:
BatchUpdates(() =>
{
if(child && child.isVisible)
setIsInitialized(true);
if(rootNode.isBranch)
{
setCurrentTab(child);
for(const child of rootNode.children)
{
if(child && child.isVisible)
{
setCurrentTab(child);
return;
return;
}
}
}
}
}
});
}, [ rootNode ]);
useEffect(() =>
{
if(!rootNode) return;
switch(requestedPage.requestType)
{
// case RequestedPage.REQUEST_TYPE_NONE:
// loadFrontPage();
// return;
});
return;
case RequestedPage.REQUEST_TYPE_ID:
requestedPage.resetRequest();
REQUESTED_PAGE.resetRequest();
return;
case RequestedPage.REQUEST_TYPE_NAME:
requestedPage.resetRequest();
REQUESTED_PAGE.resetRequest();
return;
}
}, [ rootNode, requestedPage ]);
}, [ rootNode ]);
useEffect(() =>
{
@ -317,16 +321,16 @@ export const CatalogView: FC<{}> = props =>
{
if(!child.isVisible) continue;
selectCatalogNode(child);
activateNode(child);
return;
}
}
else
{
loadCatalogPage(currentTab.pageId, -1, true);
loadCatalogPage(currentTab.pageId, -1);
}
}, [ currentTab, selectCatalogNode, loadCatalogPage ]);
}, [ currentTab, activateNode, loadCatalogPage ]);
useEffect(() =>
{
@ -335,23 +339,6 @@ export const CatalogView: FC<{}> = props =>
setCurrentOffer(null);
}, [ currentPage ]);
useEffect(() =>
{
if(!isVisible && !lastActiveNodes && activeNodes && activeNodes.length)
{
setLastActiveNodes(activeNodes.concat());
}
else if(isVisible && lastActiveNodes)
{
BatchUpdates(() =>
{
setActiveNodes(lastActiveNodes.concat());
setLastActiveNodes(null);
});
}
}, [ isVisible, lastActiveNodes, activeNodes ]);
UseMountEffect(() =>
{
SendMessageHook(new GetMarketplaceConfigurationMessageComposer());
@ -360,7 +347,7 @@ export const CatalogView: FC<{}> = props =>
});
return (
<CatalogContextProvider value={ { isVisible, isBusy, setIsBusy, pageId, currentType, setCurrentType, rootNode, setRootNode, currentOffers, setCurrentOffers, currentPage, setCurrentPage, currentOffer, setCurrentOffer, purchasableOffer, setPurchasableOffer, activeNodes, setActiveNodes, frontPageItems, setFrontPageItems, resetState, loadCatalogPage, showCatalogPage, selectCatalogNode, catalogState, dispatchCatalogState } }>
<CatalogContextProvider value={ { isVisible, isBusy, setIsBusy, pageId, currentType, setCurrentType, rootNode, setRootNode, currentOffers, setCurrentOffers, currentPage, setCurrentPage, currentOffer, setCurrentOffer, purchasableOffer, setPurchasableOffer, activeNodes, setActiveNodes, frontPageItems, setFrontPageItems, resetState, loadCatalogPage, showCatalogPage, activateNode, catalogState, dispatchCatalogState } }>
<CatalogMessageHandler />
{ isVisible &&
<NitroCardView uniqueKey="catalog" className="nitro-catalog">

View File

@ -5,27 +5,15 @@ export class RequestedPage
public static REQUEST_TYPE_NAME: number = 2;
private _requestType: number;
private _requestId: number;
private _requestById: number;
private _requestedOfferId: number;
private _requestName: string;
private _requestByName: string;
constructor()
{
this._requestType = RequestedPage.REQUEST_TYPE_NONE;
}
public setRequestById(id: number):void
{
this._requestType = RequestedPage.REQUEST_TYPE_ID;
this._requestId = id;
}
public setRequestByName(name: string):void
{
this._requestType = RequestedPage.REQUEST_TYPE_NAME;
this._requestName = name;
}
public resetRequest():void
{
this._requestType = RequestedPage.REQUEST_TYPE_NONE;
@ -37,9 +25,26 @@ export class RequestedPage
return this._requestType;
}
public get requestId(): number
public get requestById(): number
{
return this._requestId;
return this._requestById;
}
public set requestById(id: number)
{
this._requestType = RequestedPage.REQUEST_TYPE_ID;
this._requestById = id;
}
public get requestByName(): string
{
return this._requestByName;
}
public set requestByName(name: string)
{
this._requestType = RequestedPage.REQUEST_TYPE_NAME;
this._requestByName = name;
}
public get requestedOfferId(): number
@ -51,9 +56,4 @@ export class RequestedPage
{
this._requestedOfferId = offerId;
}
public get requestName(): string
{
return this._requestName;
}
}

View File

@ -29,9 +29,9 @@ export interface ICatalogContext
frontPageItems: FrontPageItem[];
setFrontPageItems: Dispatch<SetStateAction<FrontPageItem[]>>;
resetState: () => void;
loadCatalogPage: (pageId: number, offerId: number, forceRefresh?: boolean) => void;
loadCatalogPage: (pageId: number, offerId: number) => void;
showCatalogPage: (pageId: number, layoutCode: string, localization: IPageLocalization, offers: IPurchasableOffer[], offerId: number, acceptSeasonCurrencyAsCredits: boolean) => void;
selectCatalogNode: (targetNode: ICatalogNode) => void;
activateNode: (targetNode: ICatalogNode) => void;
catalogState: ICatalogState;
dispatchCatalogState: Dispatch<ICatalogAction>;
@ -61,7 +61,7 @@ const CatalogContext = createContext<ICatalogContext>({
resetState: null,
loadCatalogPage: null,
showCatalogPage: null,
selectCatalogNode: null,
activateNode: null,
catalogState: null,
dispatchCatalogState: null
});

View File

@ -15,11 +15,11 @@ export interface CatalogNavigationItemViewProps
export const CatalogNavigationItemView: FC<CatalogNavigationItemViewProps> = props =>
{
const { node = null } = props;
const { selectCatalogNode = null } = useCatalogContext();
const { activateNode = null } = useCatalogContext();
return (
<>
<LayoutGridItem column={ false } itemActive={ node.isActive } onClick={ event => selectCatalogNode(node) }>
<LayoutGridItem column={ false } itemActive={ node.isActive } onClick={ event => activateNode(node) }>
<CatalogIconView icon={ node.iconId } />
<Text grow truncate>{ node.localization }</Text>
{ node.isBranch &&