diff --git a/src/views/hotel-view/HotelView.scss b/src/views/hotel-view/HotelView.scss index 97076eaf..4d3ae78f 100644 --- a/src/views/hotel-view/HotelView.scss +++ b/src/views/hotel-view/HotelView.scss @@ -73,4 +73,58 @@ background-repeat: no-repeat; background-position: right top; } + + .widget-slot { + position:absolute; + z-index: 4; + overflow: hidden; + } + + .slot-0 { + top: 5px; + width: 600px; + height: 100px; + } + + .slot-1 { + top: 100px; + left: 100px; + width: 100px; + height:100px; + } + + .slot-2 { + top: 300px; + left: 100px; + width: 100px; + height: 100px; + } + + .slot-3 { + top: 100px; + left: 600px; + width: 100px; + height: 100px; + } + + .slot-4 { + top: 300px; + left: 600px; + width: 100px; + height: 100px; + } + + .slot-5 { + bottom: 5px; + width: 600px; + height: 100px; + } + + .slot-6 { + width: 100px; + height: 600px; + right: 5px; + } } + +@import './views/widgets/promo-article/PromoArticleWidgetView.scss'; diff --git a/src/views/hotel-view/HotelView.tsx b/src/views/hotel-view/HotelView.tsx index 9222f3b8..74da6863 100644 --- a/src/views/hotel-view/HotelView.tsx +++ b/src/views/hotel-view/HotelView.tsx @@ -3,10 +3,12 @@ import { FC, useCallback, useState } from 'react'; import { GetConfiguration } from '../../api'; import { useRoomSessionManagerEvent } from '../../hooks/events/nitro/session/room-session-manager-event'; import { HotelViewProps } from './HotelView.types'; +import { WidgetSlotView } from './views/widget-slot/WidgetSlotView'; export const HotelView: FC = props => { const [ isVisible, setIsVisible ] = useState(true); + const widgetSlotCount = 7; const onRoomSessionEvent = useCallback((event: RoomSessionEvent) => { @@ -36,6 +38,8 @@ export const HotelView: FC = props => return (
+ {Array.from(Array(widgetSlotCount)).map((x, index) => )}
diff --git a/src/views/hotel-view/views/widget-slot/WidgetSlotView.tsx b/src/views/hotel-view/views/widget-slot/WidgetSlotView.tsx new file mode 100644 index 00000000..639cb0e3 --- /dev/null +++ b/src/views/hotel-view/views/widget-slot/WidgetSlotView.tsx @@ -0,0 +1,12 @@ +import { FC } from 'react'; +import { GetWidgetLayout } from '../widgets/GetWidgetLayout'; +import { WidgetSlotViewProps } from './WidgetSlotView.types'; + +export const WidgetSlotView: FC = props => +{ + return ( +
+ +
+ ); +} diff --git a/src/views/hotel-view/views/widget-slot/WidgetSlotView.types.ts b/src/views/hotel-view/views/widget-slot/WidgetSlotView.types.ts new file mode 100644 index 00000000..cbbefc31 --- /dev/null +++ b/src/views/hotel-view/views/widget-slot/WidgetSlotView.types.ts @@ -0,0 +1,5 @@ +export interface WidgetSlotViewProps +{ + widgetType: string; + slot: number; +} diff --git a/src/views/hotel-view/views/widgets/GetWidgetLayout.tsx b/src/views/hotel-view/views/widgets/GetWidgetLayout.tsx new file mode 100644 index 00000000..bd8d4b60 --- /dev/null +++ b/src/views/hotel-view/views/widgets/GetWidgetLayout.tsx @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { GetWidgetLayoutProps } from './GetWidgetLayout.types'; +import { HallOfFameWidgetView } from './hall-of-fame/HallOfFameWidgetView'; +import { PromoArticleWidgetView } from './promo-article/PromoArticleWidgetView'; + +export const GetWidgetLayout: FC = props => +{ + switch(props.widgetType) + { + case "news": + return ; + case "hof": + return ; + default: + return null; + } +} diff --git a/src/views/hotel-view/views/widgets/GetWidgetLayout.types.ts b/src/views/hotel-view/views/widgets/GetWidgetLayout.types.ts new file mode 100644 index 00000000..42ca0053 --- /dev/null +++ b/src/views/hotel-view/views/widgets/GetWidgetLayout.types.ts @@ -0,0 +1,4 @@ +export interface GetWidgetLayoutProps +{ + widgetType: string; +} diff --git a/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.tsx b/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.tsx new file mode 100644 index 00000000..d60ade22 --- /dev/null +++ b/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.tsx @@ -0,0 +1,9 @@ +import { FC } from 'react'; +import { HallOfFameWidgetViewProps } from './HallOfFameWidgetView.types'; + +export const HallOfFameWidgetView: FC = props => +{ + return ( +
+ ); +} diff --git a/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.types.ts b/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.types.ts new file mode 100644 index 00000000..c03c84a8 --- /dev/null +++ b/src/views/hotel-view/views/widgets/hall-of-fame/HallOfFameWidgetView.types.ts @@ -0,0 +1,2 @@ +export interface HallOfFameWidgetViewProps +{} diff --git a/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.scss b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.scss new file mode 100644 index 00000000..b0521c2a --- /dev/null +++ b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.scss @@ -0,0 +1,4 @@ +.promo-article { + top: 50px; + left: 50px; +} diff --git a/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.tsx b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.tsx new file mode 100644 index 00000000..e32ebbe3 --- /dev/null +++ b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.tsx @@ -0,0 +1,49 @@ +import { GetPromoArticlesComposer, PromoArticleData, PromoArticlesMessageEvent } from 'nitro-renderer'; +import { FC, useCallback, useEffect, useState } from 'react'; +import { Carousel } from 'react-bootstrap'; +import { CreateMessageHook, SendMessageHook } from '../../../../../hooks'; +import { PromoArticleWidgetViewProps } from './PromoArticleWidgetView.types'; + +export const PromoArticleWidgetView: FC = props => +{ + const [ articles, setArticles ] = useState(null); + const [index, setIndex] = useState(0); + + const handleSelect = (selectedIndex, e) => + { + setIndex(selectedIndex); + }; + + useEffect(() => + { + SendMessageHook(new GetPromoArticlesComposer()); + }, []); + + const onPromoArticlesMessageEvent = useCallback((event: PromoArticlesMessageEvent) => + { + const parser = event.getParser(); + setArticles(parser.articles); + }, []); + + CreateMessageHook(PromoArticlesMessageEvent, onPromoArticlesMessageEvent); + + return ( +
+ + { articles && (articles.length > 0) && articles.map(article => + + {article.title} + +

{article.title}

+

{article.bodyText}

+
+
+ ) } +
+
+ ); +} diff --git a/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.types.ts b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.types.ts new file mode 100644 index 00000000..e8a37dfa --- /dev/null +++ b/src/views/hotel-view/views/widgets/promo-article/PromoArticleWidgetView.types.ts @@ -0,0 +1,2 @@ +export interface PromoArticleWidgetViewProps +{}