import { GroupBuyComposer, GroupBuyDataComposer, GroupBuyDataEvent } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { HasHabboClub, IGroupData, LocalizeText, SendMessageComposer } from '../../../api'; import { Button, Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../common'; import { useMessageEvent } from '../../../hooks'; import { GroupTabBadgeView } from './tabs/GroupTabBadgeView'; import { GroupTabColorsView } from './tabs/GroupTabColorsView'; import { GroupTabCreatorConfirmationView } from './tabs/GroupTabCreatorConfirmationView'; import { GroupTabIdentityView } from './tabs/GroupTabIdentityView'; interface GroupCreatorViewProps { onClose: () => void; } const TABS: number[] = [ 1, 2, 3, 4 ]; let isBuyingGroup = false; export const GroupCreatorView: FC = props => { const { onClose = null } = props; const [ currentTab, setCurrentTab ] = useState(1); const [ closeAction, setCloseAction ] = useState<{ action: () => boolean }>(null); const [ groupData, setGroupData ] = useState(null); const [ availableRooms, setAvailableRooms ] = useState<{ id: number, name: string }[]>(null); const [ purchaseCost, setPurchaseCost ] = useState(0); const onCloseClose = () => { setCloseAction(null); setGroupData(null); if(onClose) onClose(); }; const buyGroup = () => { if(!groupData || isBuyingGroup) return; isBuyingGroup = true; setTimeout(() => isBuyingGroup = false, 5000); const badge = []; groupData.groupBadgeParts.forEach(part => { if(part.code) { badge.push(part.key); badge.push(part.color); badge.push(part.position); } }); SendMessageComposer(new GroupBuyComposer(groupData.groupName, groupData.groupDescription, groupData.groupHomeroomId, groupData.groupColors[0], groupData.groupColors[1], badge)); }; const previousStep = () => { if(closeAction && closeAction.action) { if(!closeAction.action()) return; } if(currentTab === 1) { onClose(); return; } setCurrentTab(value => value - 1); }; const nextStep = () => { if(closeAction && closeAction.action) { if(!closeAction.action()) return; } if(currentTab === 4) { buyGroup(); return; } setCurrentTab(value => (value === 4 ? value : value + 1)); }; useMessageEvent(GroupBuyDataEvent, event => { const parser = event.getParser(); const rooms: { id: number, name: string }[] = []; parser.availableRooms.forEach((name, id) => rooms.push({ id, name })); setAvailableRooms(rooms); setPurchaseCost(parser.groupCost); }); useEffect(() => { setCurrentTab(1); setGroupData({ groupId: -1, groupName: null, groupDescription: null, groupHomeroomId: -1, groupState: 1, groupCanMembersDecorate: true, groupColors: null, groupBadgeParts: null }); SendMessageComposer(new GroupBuyDataComposer()); }, [ setGroupData ]); if(!groupData) return null; return (
{ TABS.map((tab, index) => { return ( { LocalizeText(`group.create.steplabel.${ tab }`) } ); }) }
{ LocalizeText(`group.create.stepcaption.${ currentTab }`) } { LocalizeText(`group.create.stepdesc.${ currentTab }`) }
{ (currentTab === 1) && } { (currentTab === 2) && } { (currentTab === 3) && } { (currentTab === 4) && }
); };