remove user online status

This commit is contained in:
Anton SHEPILOV
2024-02-03 14:25:42 +01:00
parent b35687829c
commit ceee21b5eb
18 changed files with 4695 additions and 9195 deletions
@@ -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)];
});
}
},
});