From 3eb4757d98c15b8858c7ce1877628f9ac4099b66 Mon Sep 17 00:00:00 2001 From: dank074 Date: Fri, 26 Nov 2021 01:31:06 -0600 Subject: [PATCH] changes --- src/assets/images/campaign/available.png | Bin 0 -> 1118 bytes src/assets/images/campaign/locked_bg.png | Bin 0 -> 5414 bytes src/assets/images/campaign/next.png | Bin 0 -> 244 bytes src/assets/images/campaign/prev.png | Bin 0 -> 235 bytes src/assets/images/campaign/unavailable.png | Bin 0 -> 448 bytes src/assets/images/campaign/unlocked_bg.png | Bin 0 -> 8798 bytes src/assets/images/campaign/unopened.png | Bin 5731 -> 0 bytes src/views/campaign/CampaignView.tsx | 2 +- .../campaign/common/CalendarItemState.ts | 7 ++ src/views/campaign/common/Utils.ts | 4 + .../views/calendar-item/CalendarItemView.tsx | 40 +++++++- .../calendar-item/CalendarItemView.types.ts | 6 +- .../campaign/views/calendar/CalendarView.scss | 67 ++++++++++++- .../campaign/views/calendar/CalendarView.tsx | 92 ++++++++++++++++-- .../widgets/word-quiz/WordQuizWidgetView.tsx | 7 +- 15 files changed, 206 insertions(+), 19 deletions(-) create mode 100644 src/assets/images/campaign/available.png create mode 100644 src/assets/images/campaign/locked_bg.png create mode 100644 src/assets/images/campaign/next.png create mode 100644 src/assets/images/campaign/prev.png create mode 100644 src/assets/images/campaign/unavailable.png create mode 100644 src/assets/images/campaign/unlocked_bg.png delete mode 100644 src/assets/images/campaign/unopened.png create mode 100644 src/views/campaign/common/CalendarItemState.ts create mode 100644 src/views/campaign/common/Utils.ts diff --git a/src/assets/images/campaign/available.png b/src/assets/images/campaign/available.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc8fa6219b2b4ff56e4c8885a945087f240321b GIT binary patch literal 1118 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/campaign/unavailable.png b/src/assets/images/campaign/unavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..dc134c3f12faa3d00aa4302bfa0ec7a5ca81608e GIT binary patch literal 448 zcmV;x0YCnUP)KNfDQ5dg1UGAYMfQUf;Uh)ngA-7Z1vq1^sisOZ0IbmyeMagsll2%NTpG!d;~iY!UQuJ;u6dX5T{`FFs4Erdhm98 zd&pnWSs3a`rOPPMJHIsJJ`u!aDPjtUXKN3lXl+514Uq02>IR4yr3{E^m97hj^`w>s zQEd-M=WiMH?KTEviGi8&^*jz_$#0nsS4IhtijzcbK*moYW{or2gQU&80|H2|p?msb z6(E50T)6`T5I_I{1Q0*~0R#|+?jInOWqy@qQn(Y&t|07)h{-GJL5OgffFj1rw576&cr68X_~ttRzGv$XS^2Nq0wK qQXw)y{>6S}9#bmFPwGU0V|fCdK~2vw4K_dk0000 literal 0 HcmV?d00001 diff --git a/src/assets/images/campaign/unlocked_bg.png b/src/assets/images/campaign/unlocked_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..31c35ba172146dd1af89db8539d582b033c9dde9 GIT binary patch literal 8798 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 UIckVaaR2}S07*qoM6N<$f)^J^t^fc4 literal 0 HcmV?d00001 diff --git a/src/assets/images/campaign/unopened.png b/src/assets/images/campaign/unopened.png deleted file mode 100644 index 71a754ff7cf3709548730eb6f52fc03816cd168c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5731 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 VX*XuF_RatR002ovPDHLkV1iW3ptAq~ diff --git a/src/views/campaign/CampaignView.tsx b/src/views/campaign/CampaignView.tsx index eb205f51..0f2307ee 100644 --- a/src/views/campaign/CampaignView.tsx +++ b/src/views/campaign/CampaignView.tsx @@ -14,7 +14,7 @@ export const CampaignView: FC<{}> = props => const parser = event.getParser(); if(!parser) return; - + console.log(parser); setCalendarData(parser.calendarData); }, []); diff --git a/src/views/campaign/common/CalendarItemState.ts b/src/views/campaign/common/CalendarItemState.ts new file mode 100644 index 00000000..1b91ca3f --- /dev/null +++ b/src/views/campaign/common/CalendarItemState.ts @@ -0,0 +1,7 @@ +export class CalendarItemState +{ + public static readonly STATE_UNLOCKED = 1; + public static readonly STATE_LOCKED_AVAILABLE = 2; + public static readonly STATE_LOCKED_EXPIRED = 3; + public static readonly STATE_LOCKED_FUTURE = 4; +} diff --git a/src/views/campaign/common/Utils.ts b/src/views/campaign/common/Utils.ts new file mode 100644 index 00000000..2695539e --- /dev/null +++ b/src/views/campaign/common/Utils.ts @@ -0,0 +1,4 @@ +export const getNumItemsDisplayed = (): number => +{ + return Math.max(Math.min(2, window.screen.width / 135), 7); +} diff --git a/src/views/campaign/views/calendar-item/CalendarItemView.tsx b/src/views/campaign/views/calendar-item/CalendarItemView.tsx index 172126ab..4841a67b 100644 --- a/src/views/campaign/views/calendar-item/CalendarItemView.tsx +++ b/src/views/campaign/views/calendar-item/CalendarItemView.tsx @@ -1,10 +1,46 @@ -import { FC } from 'react'; +import { FC, useCallback } from 'react'; +import { GetRoomEngine, GetSessionDataManager } from '../../../../api'; import { NitroLayoutFlexColumn } from '../../../../layout'; +import { CalendarItemState } from '../../common/CalendarItemState'; import { CalendarItemViewProps } from './CalendarItemView.types'; export const CalendarItemView: FC = props => { + const { state = null, productName = null, active = false, onClick = null, id = null } = props; + + const getFurnitureIcon = useCallback((name: string) => + { + + let furniData = GetSessionDataManager().getFloorItemDataByName(name); + let url = null; + if(furniData) url = GetRoomEngine().getFurnitureFloorIconUrl(furniData.id); + else + { + furniData = GetSessionDataManager().getWallItemDataByName(name); + if(furniData) url = GetRoomEngine().getFurnitureWallIconUrl(furniData.id); + } + + return url; + }, []); + return ( - + onClick(id)}> + { (state === CalendarItemState.STATE_UNLOCKED) && +
+ +
+ } + + { (state !== CalendarItemState.STATE_UNLOCKED) && +
+ { (state === CalendarItemState.STATE_LOCKED_AVAILABLE) && +
+ } + { (state === CalendarItemState.STATE_LOCKED_EXPIRED || state === CalendarItemState.STATE_LOCKED_FUTURE) && +
+ } +
+ } + ); } diff --git a/src/views/campaign/views/calendar-item/CalendarItemView.types.ts b/src/views/campaign/views/calendar-item/CalendarItemView.types.ts index 99f12758..038dc03c 100644 --- a/src/views/campaign/views/calendar-item/CalendarItemView.types.ts +++ b/src/views/campaign/views/calendar-item/CalendarItemView.types.ts @@ -1,4 +1,8 @@ export interface CalendarItemViewProps { - + id: number; + productName?: string; + state: number; + active?: boolean; + onClick(itemId: number): void; } diff --git a/src/views/campaign/views/calendar/CalendarView.scss b/src/views/campaign/views/calendar/CalendarView.scss index 7ef04128..f583ee0b 100644 --- a/src/views/campaign/views/calendar/CalendarView.scss +++ b/src/views/campaign/views/calendar/CalendarView.scss @@ -1,10 +1,69 @@ .nitro-campaign-calendar { - width: 800px; + width: 1010px; height: 400px; - .calendar-day { - background: url('../../../../assets/images/campaign/campaign_day_generic_bg.png'); + .calendar-item { + background: url("../../../../assets/images/campaign/campaign_day_generic_bg.png"); max-height: 100%; - min-width: 50px; + min-width: 135px; + filter: brightness(80%); + + &.active { + filter: brightness(100%); + } + + .unlocked-generic-bg { + background: url("../../../../assets/images/campaign/unlocked_bg.png"); + background-size: 132px 132px; + width: 132px; + height: 132px; + + //width: 190px; + //height: 189px; + } + + .locked-generic-bg { + background: url("../../../../assets/images/campaign/locked_bg.png"); + width: 132px; + height: 132px; + + .available { + background: url("../../../../assets/images/campaign/available.png"); + width: 69px; + height: 78px; + } + + .unavailable { + background: url("../../../../assets/images/campaign/unavailable.png"); + width: 68px; + height: 78px; + } + } + } + + .button-container { + position: relative; + width: 100%; + height: 0px; + + .calendar-prev { + background: url("../../../../assets/images/campaign/prev.png"); + width: 33px; + height: 34px; + position: absolute; + margin-top: 15%; + left: 5px; + z-index: 10; + } + + .calendar-next { + background: url("../../../../assets/images/campaign/next.png"); + width: 33px; + height: 34px; + position: absolute; + margin-top: 15%; + right: 5px; + z-index: 10; + } } } diff --git a/src/views/campaign/views/calendar/CalendarView.tsx b/src/views/campaign/views/calendar/CalendarView.tsx index 42a6a010..b89864dc 100644 --- a/src/views/campaign/views/calendar/CalendarView.tsx +++ b/src/views/campaign/views/calendar/CalendarView.tsx @@ -1,6 +1,8 @@ import { FC, useCallback, useState } from 'react'; import { LocalizeText } from '../../../../api'; import { NitroCardContentView, NitroCardHeaderView, NitroCardView, NitroLayoutFlex } from '../../../../layout'; +import { CalendarItemState } from '../../common/CalendarItemState'; +import { getNumItemsDisplayed } from '../../common/Utils'; import { CalendarItemView } from '../calendar-item/CalendarItemView'; import { CalendarViewProps } from './CalendarView.types'; @@ -8,30 +10,104 @@ export const CalendarView: FC = props => { const { close = null, campaignName = null, currentDay = null, numDays = null, missedDays = null, openedDays = null } = props; const [ selectedDay, setSelectedDay ] = useState(currentDay); + const [ index, setIndex ] = useState(0); + + const getDayState = useCallback((day: number) => + { + if(openedDays.includes(day)) + { + return CalendarItemState.STATE_UNLOCKED; + } + if(day > currentDay) + { + return CalendarItemState.STATE_LOCKED_FUTURE; + } + + if(missedDays.includes(day)) + { + return CalendarItemState.STATE_LOCKED_EXPIRED; + } + + return CalendarItemState.STATE_LOCKED_AVAILABLE; + }, [currentDay, missedDays, openedDays]); const dayMessage = useCallback((day: number) => { - if(missedDays.includes(day)) + const state = getDayState(day); + + switch(state) { - return LocalizeText('campaign.calendar.info.expired'); + case CalendarItemState.STATE_UNLOCKED: + return LocalizeText('campaign.calendar.info.unlocked'); + case CalendarItemState.STATE_LOCKED_FUTURE: + return LocalizeText('campaign.calendar.info.future'); + case CalendarItemState.STATE_LOCKED_EXPIRED: + return LocalizeText('campaign.calendar.info.expired'); + default: return LocalizeText('campaign.calendar.info.available.desktop'); + } + }, [getDayState]); + + const onClickNext = useCallback(() => + { + const nextDay = selectedDay + 1; + + if( (nextDay) === numDays) return; + + setSelectedDay(nextDay); + + if( (index + getNumItemsDisplayed()) < nextDay + 1 ) + { + setIndex(index + 1); } - if(openedDays.includes(day)) + }, [index, numDays, selectedDay]); + + const onClickPrev = useCallback(() => + { + const prevDay = selectedDay - 1; + + if( (prevDay < 0)) return; + + setSelectedDay(prevDay); + + if( index > prevDay) { - return LocalizeText('campaign.calendar.info.unlocked') + setIndex(index - 1); } - }, [missedDays, openedDays]); + }, [index, selectedDay]); + + const onClickItem = useCallback((item: number) => + { + if(selectedDay === item) + { + //handle opening + } + else + { + setSelectedDay(item); + } + }, [selectedDay]); return (
-

{ LocalizeText('campaign.calendar.heading.day', ['number'], [selectedDay.toString()]) }

-

{ LocalizeText('') }

+

{ LocalizeText('campaign.calendar.heading.day', ['number'], [(selectedDay + 1).toString()]) }

+

{ dayMessage(selectedDay) }

+
+
+
+
- { [...Array(7)].map((e, i) => ) } + { + [...Array(getNumItemsDisplayed())].map((e, i) => + { + const day = index + i; + return + }) + } diff --git a/src/views/room/widgets/word-quiz/WordQuizWidgetView.tsx b/src/views/room/widgets/word-quiz/WordQuizWidgetView.tsx index af258d59..271853e4 100644 --- a/src/views/room/widgets/word-quiz/WordQuizWidgetView.tsx +++ b/src/views/room/widgets/word-quiz/WordQuizWidgetView.tsx @@ -106,9 +106,8 @@ export const WordQuizWidgetView: FC<{}> = props => { setUserAnswers(prev => { - const copy = new Map(prev); const keysToRemove: number[] = []; - copy.forEach((value, key) => + prev.forEach((value, key) => { value.secondsLeft--; @@ -118,8 +117,10 @@ export const WordQuizWidgetView: FC<{}> = props => } }); - keysToRemove.forEach(key => copy.delete(key)); + if(keysToRemove.length === 0) return prev; + const copy = new Map(prev); + keysToRemove.forEach(key => copy.delete(key)); return copy; })