mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
feat(catalog): live-merge imported furni on catalog open
On catalog open, re-fetch the custom furnidata chunk (custom/imported.json5) via SessionDataManager.mergeFurnitureDataFromUrl() and feed the new entries to RoomContentLoader.processFurnitureData(), so furniture imported from the admin panel appears without a full client reload.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, CreateLinkEvent, FrontPageItem, FurniturePlaceComposer, FurniturePlacePaintComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetRoomEngine, GetSessionDataManager, GetTickerTime, LegacyDataType, LimitedEditionSoldOutEvent, MarketplaceMakeOfferResult, ProductOfferEvent, PurchaseErrorMessageEvent, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, RoomEngineObjectPlacedEvent, RoomObjectPlacementSource, RoomObjectVariable, RoomPreviewer, Vector3d } from '@nitrots/nitro-renderer';
|
import { BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, CreateLinkEvent, FrontPageItem, FurniturePlaceComposer, FurniturePlacePaintComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetConfiguration, GetRoomContentLoader, GetRoomEngine, GetSessionDataManager, GetTickerTime, LegacyDataType, LimitedEditionSoldOutEvent, MarketplaceMakeOfferResult, ProductOfferEvent, PurchaseErrorMessageEvent, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, RoomEngineObjectPlacedEvent, RoomObjectPlacementSource, RoomObjectVariable, RoomPreviewer, Vector3d } from '@nitrots/nitro-renderer';
|
||||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
import { useBetween } from 'use-between';
|
import { useBetween } from 'use-between';
|
||||||
import { BuilderFurniPlaceableStatus, CatalogPage, CatalogType, DispatchUiEvent, FurniCategory, GetFurnitureData, GetProductDataForLocalization, GetRoomSession, ICatalogNode, ICatalogPage, IPageLocalization, IProduct, IPurchasableOffer, IPurchaseOptions, LocalizeText, NotificationAlertType, Offer, PageLocalization, PlacedObjectPurchaseData, PlaySound, Product, ProductTypeEnum, RequestedPage, SearchResult, SendMessageComposer, SoundNames } from '../../api';
|
import { BuilderFurniPlaceableStatus, CatalogPage, CatalogType, DispatchUiEvent, FurniCategory, GetFurnitureData, GetProductDataForLocalization, GetRoomSession, ICatalogNode, ICatalogPage, IPageLocalization, IProduct, IPurchasableOffer, IPurchaseOptions, LocalizeText, NotificationAlertType, Offer, PageLocalization, PlacedObjectPurchaseData, PlaySound, Product, ProductTypeEnum, RequestedPage, SearchResult, SendMessageComposer, SoundNames } from '../../api';
|
||||||
@@ -89,6 +89,27 @@ const useCatalogStore = () =>
|
|||||||
setCurrentType(normalizeCatalogType(type));
|
setCurrentType(normalizeCatalogType(type));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Real-time furni importati: ri-mergia il chunk custom/imported.json5 nelle Map
|
||||||
|
// furnidata + RoomContentLoader all'apertura del catalogo, SENZA reload del client.
|
||||||
|
const refreshImportedFurnidata = useCallback(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const base = GetConfiguration().getValue<string>('furnidata.url');
|
||||||
|
|
||||||
|
if(!base || !base.length) return;
|
||||||
|
|
||||||
|
const importedUrl = base.replace(/\/+$/, '') + '/custom/imported.json5';
|
||||||
|
|
||||||
|
GetSessionDataManager().mergeFurnitureDataFromUrl(importedUrl).then(added =>
|
||||||
|
{
|
||||||
|
if(added && added.length) GetRoomContentLoader().processFurnitureData(added);
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{}
|
||||||
|
}, []);
|
||||||
|
|
||||||
const openCatalogByType = useCallback((type?: string) =>
|
const openCatalogByType = useCallback((type?: string) =>
|
||||||
{
|
{
|
||||||
const catalogType = normalizeCatalogType(type);
|
const catalogType = normalizeCatalogType(type);
|
||||||
@@ -98,8 +119,10 @@ const useCatalogStore = () =>
|
|||||||
resetVisibleCatalogState(catalogType);
|
resetVisibleCatalogState(catalogType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refreshImportedFurnidata();
|
||||||
|
|
||||||
setIsVisible(true);
|
setIsVisible(true);
|
||||||
}, [ currentType, resetVisibleCatalogState ]);
|
}, [ currentType, resetVisibleCatalogState, refreshImportedFurnidata ]);
|
||||||
|
|
||||||
const toggleCatalogByType = useCallback((type?: string) =>
|
const toggleCatalogByType = useCallback((type?: string) =>
|
||||||
{
|
{
|
||||||
@@ -117,8 +140,10 @@ const useCatalogStore = () =>
|
|||||||
resetVisibleCatalogState(catalogType);
|
resetVisibleCatalogState(catalogType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refreshImportedFurnidata();
|
||||||
|
|
||||||
setIsVisible(true);
|
setIsVisible(true);
|
||||||
}, [ isVisible, currentType, resetVisibleCatalogState ]);
|
}, [ isVisible, currentType, resetVisibleCatalogState, refreshImportedFurnidata ]);
|
||||||
|
|
||||||
const getBuilderFurniPlaceableStatus = useCallback((offer: IPurchasableOffer) =>
|
const getBuilderFurniPlaceableStatus = useCallback((offer: IPurchasableOffer) =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user