nitro-v36-with-renderer-v36
/
src /
components /
room /
widgets /
furniture /
context-menu /
FurnitureContextMenuView.tsx
FurnitureContextMenuView.tsx 9.8 Ko
Télécharger le fichier
import { ContextMenuEnum, CustomUserNotificationMessageEvent, GetSessionDataManager, RoomObjectCategory } from '@octane/renderer';
import { FC, useState } from 'react';
import { GetGroupInformation, LocalizeText } from '../../../../../api';
import { NativeTextTree } from '../../../../../common/native-text/NativeTextTree';
import {
EFFECTBOX_OPEN,
GROUP_FURNITURE,
MONSTERPLANT_SEED_CONFIRMATION,
MYSTERYTROPHY_OPEN_DIALOG,
PURCHASABLE_CLOTHING_CONFIRMATION,
useFurnitureContextMenuWidget,
useMessageEvent,
useNotification
} from '../../../../../hooks';
import { ContextMenuHeaderView } from '../../context-menu/ContextMenuHeaderView';
import { ContextMenuListItemView } from '../../context-menu/ContextMenuListItemView';
import { ContextMenuView } from '../../context-menu/ContextMenuView';
import { FurnitureMysteryBoxOpenDialogView } from '../FurnitureMysteryBoxOpenDialogView';
import { FurnitureMysteryTrophyOpenDialogView } from '../FurnitureMysteryTrophyOpenDialogView';
import { EffectBoxConfirmView } from './EffectBoxConfirmView';
import { MonsterPlantSeedConfirmView } from './MonsterPlantSeedConfirmView';
import { PurchasableClothingConfirmView } from './PurchasableClothingConfirmView';
import { VipRequiredKind, VipRequiredView } from './VipRequiredView';
export const FurnitureContextMenuView: FC<{}> = (props) => {
const {
closeConfirm = null,
processAction = null,
onClose = null,
objectId = -1,
mode = null,
confirmMode = null,
confirmingObjectId = -1,
groupData = null,
isGroupMember = false,
objectOwnerId = -1
} = useFurnitureContextMenuWidget();
const { simpleAlert = null } = useNotification();
const [vipRequired, setVipRequired] = useState<VipRequiredKind>(null);
useMessageEvent<CustomUserNotificationMessageEvent>(CustomUserNotificationMessageEvent, (event) => {
const parser = event.getParser();
if (!parser) return;
// HOPPER_NO_COSTUME = 1; HOPPER_NO_HC = 2; GATE_NO_HC = 3; STARS_NOT_CANDIDATE = 4 (not coded in Emulator); STARS_NOT_ENOUGH_USERS = 5 (not coded in Emulator);
switch (parser.count) {
case 1:
simpleAlert(
LocalizeText('costumehopper.costumerequired.bodytext'),
null,
'catalog/open/temporary_effects',
LocalizeText('costumehopper.costumerequired.buy'),
LocalizeText('costumehopper.costumerequired.header'),
null
);
break;
// AIR opens its viprequired_xml window for both (FurnitureWidget open TYPE_VIPHOPPER / gate).
case 2:
setVipRequired('viphopper');
break;
case 3:
setVipRequired('gate');
break;
}
});
const isOwner = GetSessionDataManager().userId === objectOwnerId;
return (
<NativeTextTree>
<>
{vipRequired && <VipRequiredView kind={vipRequired} onClose={() => setVipRequired(null)} />}
{confirmMode === MONSTERPLANT_SEED_CONFIRMATION && <MonsterPlantSeedConfirmView objectId={confirmingObjectId} onClose={closeConfirm} />}
{confirmMode === PURCHASABLE_CLOTHING_CONFIRMATION && <PurchasableClothingConfirmView objectId={confirmingObjectId} onClose={closeConfirm} />}
{confirmMode === EFFECTBOX_OPEN && <EffectBoxConfirmView objectId={confirmingObjectId} onClose={closeConfirm} />}
{confirmMode === MYSTERYTROPHY_OPEN_DIALOG && <FurnitureMysteryTrophyOpenDialogView objectId={confirmingObjectId} onClose={closeConfirm} />}
<FurnitureMysteryBoxOpenDialogView ownerId={objectOwnerId} />
{objectId >= 0 && mode && (
<ContextMenuView
category={RoomObjectCategory.FLOOR}
classNames={['octane-avatar-action-menu', 'octane-avatar-action-menu--own']}
collapsable={true}
fades={true}
objectId={objectId}
showCaretIcon={false}
onClose={onClose}
>
{mode === ContextMenuEnum.FRIEND_FURNITURE && (
<>
<ContextMenuHeaderView>{LocalizeText('friendfurni.context.title')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_friend_furni')}>
{LocalizeText('friendfurni.context.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === ContextMenuEnum.MONSTERPLANT_SEED && (
<>
<ContextMenuHeaderView>{LocalizeText('furni.mnstr_seed.name')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_monsterplant_seed')}>
{LocalizeText('widget.monsterplant_seed.button.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === ContextMenuEnum.RANDOM_TELEPORT && (
<>
<ContextMenuHeaderView>{LocalizeText('furni.random_teleport.name')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_random_teleport')}>
{LocalizeText('widget.random_teleport.button.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === ContextMenuEnum.PURCHASABLE_CLOTHING && (
<>
<ContextMenuHeaderView>{LocalizeText('furni.generic_usable.name')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_purchaseable_clothing')}>
{LocalizeText('widget.generic_usable.button.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === ContextMenuEnum.MYSTERY_BOX && (
<>
<ContextMenuHeaderView>{LocalizeText('mysterybox.context.title')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_mystery_box')}>
{LocalizeText('mysterybox.context.' + (isOwner ? 'owner' : 'other') + '.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === ContextMenuEnum.MYSTERY_TROPHY && (
<>
<ContextMenuHeaderView>{LocalizeText('mysterytrophy.header.title')}</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
<ContextMenuListItemView onClick={(event) => processAction('use_mystery_trophy')}>
{LocalizeText('friendfurni.context.use')}
</ContextMenuListItemView>
</div>
</>
)}
{mode === GROUP_FURNITURE && groupData && (
<>
<ContextMenuHeaderView className="cursor-pointer text-truncate" onClick={() => GetGroupInformation(groupData.guildId)}>
{groupData.guildName}
</ContextMenuHeaderView>
<div className="air-avatar-menu-buttons">
{!isGroupMember && (
<ContextMenuListItemView onClick={(event) => processAction('join_group')}>
{LocalizeText('widget.furniture.button.join.group')}
</ContextMenuListItemView>
)}
<ContextMenuListItemView onClick={(event) => processAction('go_to_group_homeroom')}>
{LocalizeText('widget.furniture.button.go.to.group.home.room')}
</ContextMenuListItemView>
{groupData.guildHasReadableForum && (
<ContextMenuListItemView onClick={(event) => processAction('open_forum')}>
{LocalizeText('widget.furniture.button.open_group_forum')}
</ContextMenuListItemView>
)}
</div>
</>
)}
</ContextMenuView>
)}
</>
</NativeTextTree>
);
};
