➖remove user online status
This commit is contained in:
@@ -1,38 +0,0 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useRecoilCallback, useRecoilValue } from 'recoil';
|
||||
|
||||
import { OnlineUserStateFamily, OnlineUserType } from '../state/atoms/online-users';
|
||||
//TODO refactor it in the notification feature
|
||||
|
||||
// import { OnlineUserRealtimeAPI } from '../api/online-user-realtime-api-client';
|
||||
// import WebSocketFactory from '../../global/services/websocket-factory-service';
|
||||
|
||||
export const useOnlineUser = (id: string): OnlineUserType => {
|
||||
|
||||
// const OnlineAPI = OnlineUserRealtimeAPI(WebSocketFactory.get());
|
||||
|
||||
// const updateUser = useRecoilCallback(
|
||||
// ({ set, snapshot }) =>
|
||||
// (status: { id: string; connected: boolean }) => {
|
||||
// const current = snapshot.getLoadable(OnlineUserStateFamily(status.id)).contents;
|
||||
// set(OnlineUserStateFamily(status.id), {
|
||||
// ...status,
|
||||
// lastSeen: status.connected ? Date.now() : current.lastSeen,
|
||||
// initialized: true,
|
||||
// });
|
||||
// },
|
||||
// [],
|
||||
// );
|
||||
|
||||
const state = useRecoilValue(OnlineUserStateFamily(id));
|
||||
|
||||
useEffect(() => {
|
||||
if (state && !state.initialized) {
|
||||
// OnlineAPI.getUserStatus(id).then(status => {
|
||||
// updateUser({ id: status[0], connected: status[1] });
|
||||
// });
|
||||
}
|
||||
}, [state, id]);
|
||||
|
||||
return state;
|
||||
};
|
||||
@@ -1,65 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
import { atom, DefaultValue, selector, selectorFamily } from 'recoil';
|
||||
|
||||
import { UserType } from '@features/users/types/user';
|
||||
import { CurrentUserState } from './current-user';
|
||||
|
||||
export type OnlineUserType = Pick<UserType, 'id' | 'connected'> & {
|
||||
lastSeen: number;
|
||||
initialized: boolean;
|
||||
};
|
||||
|
||||
const CurrentUserStatus = selector<OnlineUserType[]>({
|
||||
key: 'CurrentUserStatus',
|
||||
get: ({ get }) => {
|
||||
const currentUser = get(CurrentUserState);
|
||||
|
||||
return currentUser
|
||||
? [{ id: currentUser.id!, connected: true, lastSeen: Date.now(), initialized: true }]
|
||||
: [];
|
||||
},
|
||||
});
|
||||
|
||||
export const OnlineUsersState = atom<OnlineUserType[]>({
|
||||
key: 'OnlineUsersState',
|
||||
default: CurrentUserStatus,
|
||||
});
|
||||
|
||||
export const CountOnlineUsers = selector<number>({
|
||||
key: 'CountOnlineUsers',
|
||||
get: ({ get }) => get(OnlineUsersState).filter(u => u.connected).length,
|
||||
});
|
||||
|
||||
export const OnlineUserStateFamily = selectorFamily<OnlineUserType, string>({
|
||||
key: 'OnlineUserState',
|
||||
get:
|
||||
userId =>
|
||||
({ get }) => {
|
||||
return (
|
||||
get(OnlineUsersState).find(u => u.id === userId) || {
|
||||
id: userId,
|
||||
connected: false,
|
||||
lastSeen: 0,
|
||||
initialized: false,
|
||||
}
|
||||
);
|
||||
},
|
||||
set:
|
||||
userId =>
|
||||
({ set }, newValue) => {
|
||||
if (!(newValue instanceof DefaultValue)) {
|
||||
const newStatus: OnlineUserType = {
|
||||
...(newValue as unknown as OnlineUserType),
|
||||
...{ id: userId },
|
||||
};
|
||||
|
||||
set(OnlineUsersState, previousStatus => {
|
||||
const index = previousStatus.findIndex(e => e.id === userId);
|
||||
|
||||
return index === -1
|
||||
? [...previousStatus, newStatus]
|
||||
: [...previousStatus.slice(0, index), newStatus, ...previousStatus.slice(index + 1)];
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user