mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-23 06:40:50 +01:00
Friends load
This commit is contained in:
parent
60465968ea
commit
4c4cb12be9
@ -1,4 +1,4 @@
|
|||||||
import { GetFriendRequestsComposer, MessengerInitEvent } from 'nitro-renderer';
|
import { FriendListFragmentEvent, GetFriendRequestsComposer, MessengerInitEvent } from 'nitro-renderer';
|
||||||
import { FC, useCallback } from 'react';
|
import { FC, useCallback } from 'react';
|
||||||
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
|
import { CreateMessageHook, SendMessageHook } from '../../hooks/messages/message-event';
|
||||||
import { useFriendListContext } from './context/FriendListContext';
|
import { useFriendListContext } from './context/FriendListContext';
|
||||||
@ -28,7 +28,20 @@ export const FriendListMessageHandler: FC<FriendListMessageHandlerProps> = props
|
|||||||
SendMessageHook(new GetFriendRequestsComposer());
|
SendMessageHook(new GetFriendRequestsComposer());
|
||||||
}, [ dispatchFriendListState ]);
|
}, [ dispatchFriendListState ]);
|
||||||
|
|
||||||
|
const onFriendListFragmentEvent = useCallback((event: FriendListFragmentEvent) =>
|
||||||
|
{
|
||||||
|
const parser = event.getParser();
|
||||||
|
|
||||||
|
dispatchFriendListState({
|
||||||
|
type: FriendListActions.PROCESS_FRAGMENT,
|
||||||
|
payload: {
|
||||||
|
fragment: parser.fragment
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [ dispatchFriendListState ]);
|
||||||
|
|
||||||
CreateMessageHook(MessengerInitEvent, onMessengerInitEvent);
|
CreateMessageHook(MessengerInitEvent, onMessengerInitEvent);
|
||||||
|
CreateMessageHook(FriendListFragmentEvent, onFriendListFragmentEvent);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
18
src/views/friend-list/common/MessengerFriend.ts
Normal file
18
src/views/friend-list/common/MessengerFriend.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export class MessengerFriend
|
||||||
|
{
|
||||||
|
public id: number = -1;
|
||||||
|
public name: string = null;
|
||||||
|
public gender: number = 0;
|
||||||
|
public online: boolean = false;
|
||||||
|
public followingAllowed: boolean = false;
|
||||||
|
public figure: string = null;
|
||||||
|
public categoryId: number = 0;
|
||||||
|
public motto: string = null;
|
||||||
|
public realName: string = null;
|
||||||
|
public lastAccess: string = null;
|
||||||
|
public persistedMessageUser: boolean = false;
|
||||||
|
public vipMember: boolean = false;
|
||||||
|
public pocketHabboUser: boolean = false;
|
||||||
|
public relationshipStatus: number = -1;
|
||||||
|
public unread: number = 0;
|
||||||
|
}
|
@ -1,16 +1,20 @@
|
|||||||
|
import { FriendParser } from 'nitro-renderer';
|
||||||
import { Reducer } from 'react';
|
import { Reducer } from 'react';
|
||||||
|
import { MessengerFriend } from '../common/MessengerFriend';
|
||||||
import { MessengerSettings } from '../utils/MessengerSettings';
|
import { MessengerSettings } from '../utils/MessengerSettings';
|
||||||
|
|
||||||
export interface IFriendListState
|
export interface IFriendListState
|
||||||
{
|
{
|
||||||
settings: MessengerSettings
|
settings: MessengerSettings;
|
||||||
|
friends: MessengerFriend[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFriendListAction
|
export interface IFriendListAction
|
||||||
{
|
{
|
||||||
type: string;
|
type: string;
|
||||||
payload: {
|
payload: {
|
||||||
settings?: MessengerSettings
|
settings?: MessengerSettings;
|
||||||
|
fragment?: FriendParser[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,10 +22,12 @@ export class FriendListActions
|
|||||||
{
|
{
|
||||||
public static RESET_STATE: string = 'FLA_RESET_STATE';
|
public static RESET_STATE: string = 'FLA_RESET_STATE';
|
||||||
public static UPDATE_SETTINGS: string = 'FLA_UPDATE_SETTINGS';
|
public static UPDATE_SETTINGS: string = 'FLA_UPDATE_SETTINGS';
|
||||||
|
public static PROCESS_FRAGMENT: string = 'FLA_PROCESS_FRAGMENT';
|
||||||
}
|
}
|
||||||
|
|
||||||
export const initialFriendList: IFriendListState = {
|
export const initialFriendList: IFriendListState = {
|
||||||
settings: null
|
settings: null,
|
||||||
|
friends: []
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FriendListReducer: Reducer<IFriendListState, IFriendListAction> = (state, action) =>
|
export const FriendListReducer: Reducer<IFriendListState, IFriendListAction> = (state, action) =>
|
||||||
@ -33,6 +39,36 @@ export const FriendListReducer: Reducer<IFriendListState, IFriendListAction> = (
|
|||||||
|
|
||||||
return { ...state, settings };
|
return { ...state, settings };
|
||||||
}
|
}
|
||||||
|
case FriendListActions.PROCESS_FRAGMENT: {
|
||||||
|
const fragment = (action.payload.fragment || null);
|
||||||
|
let friends = [ ...state.friends ];
|
||||||
|
|
||||||
|
for(const friend of fragment)
|
||||||
|
{
|
||||||
|
const index = friends.findIndex(existingFriend => (existingFriend.id === friend.id));
|
||||||
|
const newFriend = new MessengerFriend();
|
||||||
|
|
||||||
|
newFriend.id = friend.id;
|
||||||
|
newFriend.name = friend.name;
|
||||||
|
newFriend.gender = friend.gender;
|
||||||
|
newFriend.online = friend.online;
|
||||||
|
newFriend.followingAllowed = friend.followingAllowed;
|
||||||
|
newFriend.figure = friend.figure;
|
||||||
|
newFriend.categoryId = friend.categoryId;
|
||||||
|
newFriend.motto = friend.motto;
|
||||||
|
newFriend.realName = friend.realName;
|
||||||
|
newFriend.lastAccess = friend.lastAccess;
|
||||||
|
newFriend.persistedMessageUser = friend.persistedMessageUser;
|
||||||
|
newFriend.vipMember = friend.vipMember;
|
||||||
|
newFriend.pocketHabboUser = friend.pocketHabboUser;
|
||||||
|
newFriend.relationshipStatus = friend.relationshipStatus;
|
||||||
|
|
||||||
|
if(index > -1) friends[index] = newFriend;
|
||||||
|
else friends.push(newFriend);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { ...state, friends };
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user