2021-09-03 23:44:58 +02:00
|
|
|
import { GroupBadgePartsEvent, GroupBuyDataEvent, GroupSettingsEvent, RoomCreatedEvent } from '@nitrots/nitro-renderer';
|
2021-08-31 05:22:20 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
|
|
|
import { CreateMessageHook } from '../../hooks';
|
2021-09-03 23:44:58 +02:00
|
|
|
import { GroupBadgePart } from './common/GroupBadgePart';
|
2021-08-31 05:22:20 +02:00
|
|
|
import { useGroupsContext } from './context/GroupsContext';
|
|
|
|
import { GroupsActions } from './context/GroupsContext.types';
|
|
|
|
|
2021-09-03 07:09:48 +02:00
|
|
|
function compareId(a, b)
|
|
|
|
{
|
|
|
|
if( a.id < b.id ) return -1;
|
|
|
|
if( a.id > b.id ) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2021-08-31 05:22:20 +02:00
|
|
|
export const GroupsMessageHandler: FC<{}> = props =>
|
|
|
|
{
|
|
|
|
const { groupsState = null, dispatchGroupsState = null } = useGroupsContext();
|
2021-09-03 07:09:48 +02:00
|
|
|
const { availableRooms = null } = groupsState;
|
|
|
|
|
|
|
|
const onGroupBuyDataEvent = useCallback((event: GroupBuyDataEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const rooms: { id: number, name: string }[] = [];
|
|
|
|
|
|
|
|
parser.availableRooms.forEach((name, id) =>
|
|
|
|
{
|
|
|
|
rooms.push({ id, name });
|
|
|
|
});
|
|
|
|
|
|
|
|
dispatchGroupsState({
|
|
|
|
type: GroupsActions.SET_PURHCASE_SETTINGS,
|
|
|
|
payload: {
|
2021-09-03 23:44:58 +02:00
|
|
|
objectValues: rooms,
|
|
|
|
numberValues: [ parser.groupCost ]
|
2021-09-03 07:09:48 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchGroupsState ]);
|
|
|
|
|
|
|
|
|
|
|
|
const onRoomCreatedEvent = useCallback((event: RoomCreatedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const clonedRooms = Array.from(availableRooms);
|
|
|
|
clonedRooms.push({
|
|
|
|
id: parser.roomId,
|
|
|
|
name: parser.roomName
|
|
|
|
});
|
|
|
|
|
|
|
|
dispatchGroupsState({
|
|
|
|
type: GroupsActions.SET_PURHCASE_SETTINGS,
|
|
|
|
payload: {
|
2021-09-03 23:44:58 +02:00
|
|
|
objectValues: clonedRooms
|
2021-09-03 07:09:48 +02:00
|
|
|
}
|
|
|
|
});
|
2021-09-03 23:44:58 +02:00
|
|
|
}, [ availableRooms, dispatchGroupsState ]);
|
2021-08-31 05:22:20 +02:00
|
|
|
|
|
|
|
const onGroupBadgePartsEvent = useCallback((event: GroupBadgePartsEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-09-03 07:09:48 +02:00
|
|
|
const bases: { id: number, images: string[] }[] = [];
|
|
|
|
const symbols: { id: number, images: string[] }[] = [];
|
|
|
|
const partColors: { id: number, color: string }[] = [];
|
|
|
|
const colorsA: { id: number, color: string }[] = [];
|
|
|
|
const colorsB: { id: number, color: string }[] = [];
|
|
|
|
|
|
|
|
parser.bases.forEach((images, id) =>
|
|
|
|
{
|
|
|
|
bases.push({ id, images });
|
|
|
|
});
|
|
|
|
|
|
|
|
parser.symbols.forEach((images, id) =>
|
|
|
|
{
|
|
|
|
symbols.push({ id, images });
|
|
|
|
});
|
|
|
|
|
|
|
|
parser.partColors.forEach((color, id) =>
|
|
|
|
{
|
|
|
|
partColors.push({ id, color });
|
|
|
|
});
|
|
|
|
|
|
|
|
parser.colorsA.forEach((color, id) =>
|
|
|
|
{
|
|
|
|
colorsA.push({ id, color });
|
|
|
|
});
|
|
|
|
|
|
|
|
parser.colorsB.forEach((color, id) =>
|
|
|
|
{
|
|
|
|
colorsB.push({ id, color });
|
|
|
|
});
|
|
|
|
|
|
|
|
bases.sort(compareId);
|
|
|
|
symbols.sort(compareId);
|
|
|
|
partColors.sort(compareId);
|
|
|
|
colorsA.sort(compareId);
|
|
|
|
colorsB.sort(compareId);
|
|
|
|
|
2021-08-31 05:22:20 +02:00
|
|
|
dispatchGroupsState({
|
2021-09-03 07:09:48 +02:00
|
|
|
type: GroupsActions.SET_GROUP_BADGE_PARTS_CONFIG,
|
2021-08-31 05:22:20 +02:00
|
|
|
payload: {
|
2021-09-03 23:44:58 +02:00
|
|
|
objectValues: [ bases, symbols, partColors, colorsA, colorsB ]
|
2021-08-31 05:22:20 +02:00
|
|
|
}
|
2021-09-03 23:44:58 +02:00
|
|
|
});
|
|
|
|
}, [ dispatchGroupsState ]);
|
|
|
|
|
|
|
|
const onGroupSettingsEvent = useCallback((event: GroupSettingsEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
const groupBadgeParts: GroupBadgePart[] = [];
|
|
|
|
|
|
|
|
parser.badgeParts.forEach((part, id) =>
|
|
|
|
{
|
|
|
|
groupBadgeParts.push(new GroupBadgePart(
|
|
|
|
part.isBase ? GroupBadgePart.BASE : part.key >= 100 ? GroupBadgePart.SYMBOL_ALT : GroupBadgePart.SYMBOL,
|
|
|
|
part.key >= 100 ? part.key - 100 : part.key,
|
|
|
|
part.color,
|
|
|
|
part.position
|
|
|
|
));
|
|
|
|
});
|
|
|
|
|
|
|
|
dispatchGroupsState({
|
|
|
|
type: GroupsActions.SET_GROUP_SETTINGS,
|
|
|
|
payload: {
|
|
|
|
stringValues: [ parser.title, parser.description ],
|
|
|
|
numberValues: [ parser.id, parser.state, parser.colorA, parser.colorB ],
|
|
|
|
boolValues: [ parser.canMembersDecorate ],
|
|
|
|
objectValues: groupBadgeParts
|
|
|
|
}
|
|
|
|
});
|
2021-08-31 05:22:20 +02:00
|
|
|
}, [ dispatchGroupsState ]);
|
|
|
|
|
2021-09-03 07:09:48 +02:00
|
|
|
CreateMessageHook(GroupBuyDataEvent, onGroupBuyDataEvent);
|
|
|
|
CreateMessageHook(RoomCreatedEvent, onRoomCreatedEvent);
|
2021-08-31 05:22:20 +02:00
|
|
|
CreateMessageHook(GroupBadgePartsEvent, onGroupBadgePartsEvent);
|
2021-09-03 23:44:58 +02:00
|
|
|
CreateMessageHook(GroupSettingsEvent, onGroupSettingsEvent);
|
2021-08-31 05:22:20 +02:00
|
|
|
|
|
|
|
return null;
|
|
|
|
};
|