From f00d55a5c3410cb426d5c0de4524d8612d8ddf02 Mon Sep 17 00:00:00 2001 From: Bill Date: Fri, 23 Jul 2021 01:04:06 -0400 Subject: [PATCH] Start catalog badge display --- .../views/page/layout/CatalogLayout.scss | 1 + .../views/page/layout/GetCatalogLayout.tsx | 5 +- .../CatalogLayoutBadgeDisplayView.scss | 7 ++ .../CatalogLayoutBadgeDisplayView.tsx | 80 +++++++++++++++++++ .../CatalogLayoutBadgeDisplayView.types.ts | 6 ++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.scss create mode 100644 src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.tsx create mode 100644 src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.types.ts diff --git a/src/views/catalog/views/page/layout/CatalogLayout.scss b/src/views/catalog/views/page/layout/CatalogLayout.scss index 7482c804..ff111f8a 100644 --- a/src/views/catalog/views/page/layout/CatalogLayout.scss +++ b/src/views/catalog/views/page/layout/CatalogLayout.scss @@ -1,3 +1,4 @@ +@import './badge-display/CatalogLayoutBadgeDisplayView'; @import './default/CatalogLayoutDefaultView'; @import './frontpage4/CatalogLayoutFrontpage4View'; @import './pets/CatalogLayoutPetView'; diff --git a/src/views/catalog/views/page/layout/GetCatalogLayout.tsx b/src/views/catalog/views/page/layout/GetCatalogLayout.tsx index 0094e746..7e514a6d 100644 --- a/src/views/catalog/views/page/layout/GetCatalogLayout.tsx +++ b/src/views/catalog/views/page/layout/GetCatalogLayout.tsx @@ -1,4 +1,5 @@ import { ICatalogPageParser, RoomPreviewer } from 'nitro-renderer'; +import { CatalogLayoutBadgeDisplayView } from './badge-display/CatalogLayoutBadgeDisplayView'; import { CatalogLayoutDefaultView } from './default/CatalogLayoutDefaultView'; import { CatalogLayoutFrontpage4View } from './frontpage4/CatalogLayoutFrontpage4View'; import { CatalogLayouGuildCustomFurniView } from './guild-custom-furni/CatalogLayoutGuildCustomFurniView'; @@ -47,9 +48,11 @@ export const GetCatalogLayout = (pageParser: ICatalogPageParser, roomPreviewer: case 'spaces_new': return ; case 'trophies': - return ; + return ; case 'info_loyalty': return ; + case 'badge_display': + return ; case 'bots': case 'default_3x3': default: diff --git a/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.scss b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.scss new file mode 100644 index 00000000..1229e018 --- /dev/null +++ b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.scss @@ -0,0 +1,7 @@ +.nitro-catalog-layout-badge-display { + + .inventory-badge-grid { + height: 200px; + max-height: 200px; + } +} diff --git a/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.tsx b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.tsx new file mode 100644 index 00000000..5e05b594 --- /dev/null +++ b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.tsx @@ -0,0 +1,80 @@ +import { StringDataType } from 'nitro-renderer'; +import { FC, useCallback, useEffect, useMemo, useState } from 'react'; +import { InventoryBadgesUpdatedEvent } from '../../../../../../events'; +import { InventoryBadgesRequestEvent } from '../../../../../../events/inventory/InventoryBadgesRequestEvent'; +import { dispatchUiEvent, useUiEvent } from '../../../../../../hooks'; +import { NitroCardGridItemView } from '../../../../../../layout/card/grid/item/NitroCardGridItemView'; +import { NitroCardGridView } from '../../../../../../layout/card/grid/NitroCardGridView'; +import { BadgeImageView } from '../../../../../shared/badge-image/BadgeImageView'; +import { GetOfferName } from '../../../../common/CatalogUtilities'; +import { useCatalogContext } from '../../../../context/CatalogContext'; +import { CatalogRoomPreviewerView } from '../../../catalog-room-previewer/CatalogRoomPreviewerView'; +import { CatalogPageOffersView } from '../../offers/CatalogPageOffersView'; +import { CatalogPurchaseView } from '../../purchase/CatalogPurchaseView'; +import { CatalogLayoutBadgeDisplayViewProps } from './CatalogLayoutBadgeDisplayView.types'; + +export const CatalogLayoutBadgeDisplayView: FC = props => +{ + const { roomPreviewer = null, pageParser = null } = props; + const { catalogState = null, dispatchCatalogState = null } = useCatalogContext(); + const { activeOffer = null } = catalogState; + const [ currentBadge, setCurrentBadge ] = useState(null); + const [ badges, setBadges ] = useState([]); + + const product = ((activeOffer && activeOffer.products[0]) || null); + + const onInventoryBadgesUpdatedEvent = useCallback((event: InventoryBadgesUpdatedEvent) => + { + console.log(event); + setBadges(event.badges); + }, []); + + useUiEvent(InventoryBadgesUpdatedEvent.BADGES_UPDATED, onInventoryBadgesUpdatedEvent); + + const badgeElements = useMemo(() => + { + return badges.map(code => + { + return ( + setCurrentBadge(code) }> + + + ); + }); + }, [ badges, currentBadge ]); + + useEffect(() => + { + dispatchUiEvent(new InventoryBadgesRequestEvent(InventoryBadgesRequestEvent.REQUEST_BADGES)); + }, []); + + useEffect(() => + { + if(!currentBadge || !activeOffer) return; + + const stuffData = new StringDataType(); + + stuffData.setValue([ null, currentBadge ]); + + roomPreviewer.updateObjectStuffData(stuffData); + }, [ currentBadge, activeOffer, roomPreviewer ]); + + return ( +
+
+ +
+ + { badgeElements } + +
+
+ { product && +
+ +
{ GetOfferName(activeOffer) }
+ +
} +
+ ); +} diff --git a/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.types.ts b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.types.ts new file mode 100644 index 00000000..172af17b --- /dev/null +++ b/src/views/catalog/views/page/layout/badge-display/CatalogLayoutBadgeDisplayView.types.ts @@ -0,0 +1,6 @@ +import { CatalogLayoutProps } from '../CatalogLayout.types'; + +export interface CatalogLayoutBadgeDisplayViewProps extends CatalogLayoutProps +{ + +}