diff --git a/src/views/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx b/src/views/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx index a66d6bda..c8b836fd 100644 --- a/src/views/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx +++ b/src/views/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx @@ -3,15 +3,15 @@ import { GroupFurniContextMenuInfoMessageEvent } from '@nitrots/nitro-renderer/s import { FC, useCallback, useState } from 'react'; import { GetGroupInformation, GetRoomEngine, IsOwnerOfFurniture, LocalizeText, RoomWidgetFurniActionMessage, TryVisitRoom } from '../../../../../api'; import { TryJoinGroup } from '../../../../../api/groups/TryJoinGroup'; -import { CreateMessageHook } from '../../../../../hooks'; +import { BatchUpdates, CreateMessageHook } from '../../../../../hooks'; import { useRoomEngineEvent } from '../../../../../hooks/events'; import { useRoomContext } from '../../../context/RoomContext'; import { ContextMenuView } from '../../context-menu/ContextMenuView'; import { ContextMenuHeaderView } from '../../context-menu/views/header/ContextMenuHeaderView'; import { ContextMenuListItemView } from '../../context-menu/views/list-item/ContextMenuListItemView'; -import { EffectBoxConfirmView } from './views/effect-box/EffectBoxConfirmView'; -import { MonsterPlantSeedConfirmView } from './views/monsterplant-seed/MonsterPlantSeedConfirmView'; -import { PurchasableClothingConfirmView } from './views/purchaseable-clothing/PurchasableClothingConfirmView'; +import { EffectBoxConfirmView } from './views/EffectBoxConfirmView'; +import { MonsterPlantSeedConfirmView } from './views/MonsterPlantSeedConfirmView'; +import { PurchasableClothingConfirmView } from './views/PurchasableClothingConfirmView'; const MONSTERPLANT_SEED_CONFIRMATION: string = 'MONSTERPLANT_SEED_CONFIRMATION'; const PURCHASABLE_CLOTHING_CONFIRMATION: string = 'PURCHASABLE_CLOTHING_CONFIRMATION'; @@ -26,22 +26,24 @@ export const FurnitureContextMenuView: FC<{}> = props => const [ confirmingObjectId, setConfirmingObjectId ] = useState(-1); const [ groupData, setGroupData ] = useState(null); const [ isGroupMember, setIsGroupMember ] = useState(false); - const { roomSession = null, widgetHandler = null } = useRoomContext(); const close = useCallback(() => { - setObjectId(-1); - setGroupData(null); - setIsGroupMember(false); - setMode(null); + BatchUpdates(() => + { + setObjectId(-1); + setGroupData(null); + setIsGroupMember(false); + setMode(null); + }); }, []); - const closeConfirm = useCallback(() => + const closeConfirm = () => { setConfirmMode(null); setConfirmingObjectId(-1); - }, []); + } const onRoomEngineTriggerWidgetEvent = useCallback((event: RoomEngineTriggerWidgetEvent) => { @@ -54,47 +56,60 @@ export const FurnitureContextMenuView: FC<{}> = props => case RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: if(!IsOwnerOfFurniture(object)) return; - setConfirmingObjectId(object.id); - setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); + BatchUpdates(() => + { + setConfirmingObjectId(object.id); + setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); + }); close(); return; case RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG: if(!IsOwnerOfFurniture(object)) return; - - setConfirmingObjectId(object.id); - setConfirmMode(EFFECTBOX_OPEN); + + BatchUpdates(() => + { + setConfirmingObjectId(object.id); + setConfirmMode(EFFECTBOX_OPEN); + }); close(); return; case RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: if(!IsOwnerOfFurniture(object)) return; - setConfirmingObjectId(object.id); - setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); + BatchUpdates(() => + { + setConfirmingObjectId(object.id); + setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); + }); close(); return; case RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU: - setObjectId(object.id); - switch(event.contextMenu) + BatchUpdates(() => { - case ContextMenuEnum.FRIEND_FURNITURE: - setMode(ContextMenuEnum.FRIEND_FURNITURE); - return; - case ContextMenuEnum.MONSTERPLANT_SEED: - if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.MONSTERPLANT_SEED); - return; - case ContextMenuEnum.MYSTERY_BOX: - return; - case ContextMenuEnum.RANDOM_TELEPORT: - setMode(ContextMenuEnum.RANDOM_TELEPORT); - return; - case ContextMenuEnum.PURCHASABLE_CLOTHING: - if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.PURCHASABLE_CLOTHING); - return; - } + setObjectId(object.id); + + switch(event.contextMenu) + { + case ContextMenuEnum.FRIEND_FURNITURE: + setMode(ContextMenuEnum.FRIEND_FURNITURE); + return; + case ContextMenuEnum.MONSTERPLANT_SEED: + if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.MONSTERPLANT_SEED); + return; + case ContextMenuEnum.MYSTERY_BOX: + return; + case ContextMenuEnum.RANDOM_TELEPORT: + setMode(ContextMenuEnum.RANDOM_TELEPORT); + return; + case ContextMenuEnum.PURCHASABLE_CLOTHING: + if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.PURCHASABLE_CLOTHING); + return; + } + }); return; case RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU: @@ -113,15 +128,18 @@ export const FurnitureContextMenuView: FC<{}> = props => { const parser = event.getParser(); - setObjectId(parser.objectId); - setGroupData(parser); - setIsGroupMember(parser.userIsMember); - setMode(GROUP_FURNITURE); + BatchUpdates(() => + { + setObjectId(parser.objectId); + setGroupData(parser); + setIsGroupMember(parser.userIsMember); + setMode(GROUP_FURNITURE); + }); }, []); CreateMessageHook(GroupFurniContextMenuInfoMessageEvent, onGroupFurniContextMenuInfoMessageEvent); - const processAction = useCallback((name: string) => + const processAction = (name: string) => { if(name) { @@ -152,7 +170,7 @@ export const FurnitureContextMenuView: FC<{}> = props => } close(); - }, [ roomSession, widgetHandler, objectId, groupData, close ]); + } return ( <> diff --git a/src/views/room/widgets/furniture/context-menu/views/EffectBoxConfirmView.tsx b/src/views/room/widgets/furniture/context-menu/views/EffectBoxConfirmView.tsx new file mode 100644 index 00000000..0732c592 --- /dev/null +++ b/src/views/room/widgets/furniture/context-menu/views/EffectBoxConfirmView.tsx @@ -0,0 +1,41 @@ +import { FC } from 'react'; +import { LocalizeText } from '../../../../../../api'; +import { Button, Column, Flex, Text } from '../../../../../../common'; +import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../layout'; +import { useRoomContext } from '../../../../context/RoomContext'; + +interface EffectBoxConfirmViewProps +{ + objectId: number; + close: () => void; +} + +export const EffectBoxConfirmView: FC = props => +{ + const { objectId = -1, close = null } = props; + const { roomSession = null } = useRoomContext(); + + const useProduct = () => + { + roomSession.useMultistateItem(objectId); + + close(); + } + + return ( + + + + + + { LocalizeText('effectbox.header.description') } + + + + + + + + + ); +} diff --git a/src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.tsx b/src/views/room/widgets/furniture/context-menu/views/MonsterPlantSeedConfirmView.tsx similarity index 50% rename from src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.tsx rename to src/views/room/widgets/furniture/context-menu/views/MonsterPlantSeedConfirmView.tsx index 4d1836c0..f6bc99eb 100644 --- a/src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.tsx +++ b/src/views/room/widgets/furniture/context-menu/views/MonsterPlantSeedConfirmView.tsx @@ -1,10 +1,16 @@ import { IFurnitureData, RoomObjectCategory } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import { GetFurnitureDataForRoomObject, LocalizeText, RoomWidgetUseProductMessage } from '../../../../../../../api'; -import { FurniCategory } from '../../../../../../../components/inventory/common/FurniCategory'; -import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../../layout'; -import { useRoomContext } from '../../../../../context/RoomContext'; -import { MonsterPlantSeedConfirmViewProps } from './MonsterPlantSeedConfirmView.types'; +import { FC, useEffect, useState } from 'react'; +import { GetFurnitureDataForRoomObject, LocalizeText, RoomWidgetUseProductMessage } from '../../../../../../api'; +import { Base, Button, Column, Flex, Text } from '../../../../../../common'; +import { FurniCategory } from '../../../../../../components/inventory/common/FurniCategory'; +import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../layout'; +import { useRoomContext } from '../../../../context/RoomContext'; + +interface MonsterPlantSeedConfirmViewProps +{ + objectId: number; + close: () => void; +} const MODE_DEFAULT: number = -1; const MODE_MONSTERPLANT_SEED: number = 0; @@ -16,12 +22,12 @@ export const MonsterPlantSeedConfirmView: FC = const [ mode, setMode ] = useState(MODE_DEFAULT); const { roomSession = null, widgetHandler = null } = useRoomContext(); - const useProduct = useCallback(() => + const useProduct = () => { widgetHandler.processWidgetMessage(new RoomWidgetUseProductMessage(RoomWidgetUseProductMessage.MONSTERPLANT_SEED, objectId)); close(); - }, [ widgetHandler, objectId, close ]); + } useEffect(() => { @@ -57,24 +63,24 @@ export const MonsterPlantSeedConfirmView: FC = return ( - -
-
-
-
-
-
-
-
-
{ LocalizeText('useproduct.widget.text.plant_seed', [ 'productName' ], [ furniData.name ] ) }
-
{ LocalizeText('useproduct.widget.info.plant_seed') }
-
-
- - -
-
-
+ + + + + + + + + + { LocalizeText('useproduct.widget.text.plant_seed', [ 'productName' ], [ furniData.name ] ) } + { LocalizeText('useproduct.widget.info.plant_seed') } + + + + + + + ); diff --git a/src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.tsx b/src/views/room/widgets/furniture/context-menu/views/PurchasableClothingConfirmView.tsx similarity index 59% rename from src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.tsx rename to src/views/room/widgets/furniture/context-menu/views/PurchasableClothingConfirmView.tsx index 01cf94c2..fb673709 100644 --- a/src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.tsx +++ b/src/views/room/widgets/furniture/context-menu/views/PurchasableClothingConfirmView.tsx @@ -1,12 +1,18 @@ import { RedeemItemClothingComposer, RoomObjectCategory, UserFigureComposer } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import { GetAvatarRenderManager, GetConnection, GetFurnitureDataForRoomObject, GetSessionDataManager, LocalizeText } from '../../../../../../../api'; -import { FigureData } from '../../../../../../../components/avatar-editor/common/FigureData'; -import { FurniCategory } from '../../../../../../../components/inventory/common/FurniCategory'; -import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../../layout'; -import { AvatarImageView } from '../../../../../../shared/avatar-image/AvatarImageView'; -import { useRoomContext } from '../../../../../context/RoomContext'; -import { PurchasableClothingConfirmViewProps } from './PurchasableClothingConfirmView.types'; +import { FC, useEffect, useState } from 'react'; +import { GetAvatarRenderManager, GetConnection, GetFurnitureDataForRoomObject, GetSessionDataManager, LocalizeText } from '../../../../../../api'; +import { Base, Button, Column, Flex, Text } from '../../../../../../common'; +import { FigureData } from '../../../../../../components/avatar-editor/common/FigureData'; +import { FurniCategory } from '../../../../../../components/inventory/common/FurniCategory'; +import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../layout'; +import { AvatarImageView } from '../../../../../shared/avatar-image/AvatarImageView'; +import { useRoomContext } from '../../../../context/RoomContext'; + +interface PurchasableClothingConfirmViewProps +{ + objectId: number; + close: () => void; +} const MODE_DEFAULT: number = -1; const MODE_PURCHASABLE_CLOTHING: number = 0; @@ -19,13 +25,13 @@ export const PurchasableClothingConfirmView: FC(null); const { roomSession = null } = useRoomContext(); - const useProduct = useCallback(() => + const useProduct = () => { GetConnection().send(new RedeemItemClothingComposer(objectId)); GetConnection().send(new UserFigureComposer(gender, newFigure)); close(); - }, [ objectId, gender, newFigure, close ]); + } useEffect(() => { @@ -78,24 +84,24 @@ export const PurchasableClothingConfirmView: FC - -
-
-
+ + + + -
-
-
-
-
{ LocalizeText('useproduct.widget.text.bind_clothing') }
-
{ LocalizeText('useproduct.widget.info.bind_clothing') }
-
-
- - -
-
-
+ + + + + { LocalizeText('useproduct.widget.text.bind_clothing') } + { LocalizeText('useproduct.widget.info.bind_clothing') } + + + + + + +
); diff --git a/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.tsx b/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.tsx deleted file mode 100644 index 09063d38..00000000 --- a/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { FC, useCallback } from 'react'; -import { LocalizeText } from '../../../../../../../api'; -import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../../../layout'; -import { useRoomContext } from '../../../../../context/RoomContext'; -import { EffectBoxConfirmViewProps } from './EffectBoxConfirmView.types'; - -export const EffectBoxConfirmView: FC = props => -{ - const { objectId = -1, close = null } = props; - const { roomSession = null, widgetHandler = null } = useRoomContext(); - - const useProduct = useCallback(() => - { - roomSession.useMultistateItem(objectId); - - close(); - }, [ roomSession, objectId, close ]); - - return ( - - - -
-
-
-
{ LocalizeText('effectbox.header.description') }
-
-
- - -
-
-
-
-
- ); -} diff --git a/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.types.ts b/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.types.ts deleted file mode 100644 index 1a8655d9..00000000 --- a/src/views/room/widgets/furniture/context-menu/views/effect-box/EffectBoxConfirmView.types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface EffectBoxConfirmViewProps -{ - objectId: number; - close: () => void; -} diff --git a/src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.types.ts b/src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.types.ts deleted file mode 100644 index 75fded04..00000000 --- a/src/views/room/widgets/furniture/context-menu/views/monsterplant-seed/MonsterPlantSeedConfirmView.types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface MonsterPlantSeedConfirmViewProps -{ - objectId: number; - close: () => void; -} diff --git a/src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.types.ts b/src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.types.ts deleted file mode 100644 index f6f04211..00000000 --- a/src/views/room/widgets/furniture/context-menu/views/purchaseable-clothing/PurchasableClothingConfirmView.types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PurchasableClothingConfirmViewProps -{ - objectId: number; - close: () => void; -}