From 58ebd3bc0f00c532e97e9a5571471ffab87934ba Mon Sep 17 00:00:00 2001 From: AL-LCL Date: Fri, 19 May 2023 10:39:49 +0200 Subject: GOD-VIEW --- server/web/src/redux/allReducer.ts | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 server/web/src/redux/allReducer.ts (limited to 'server/web/src/redux/allReducer.ts') diff --git a/server/web/src/redux/allReducer.ts b/server/web/src/redux/allReducer.ts new file mode 100644 index 0000000..fe72005 --- /dev/null +++ b/server/web/src/redux/allReducer.ts @@ -0,0 +1,83 @@ +import { IAllReducer } from '../interfaces/AllReducer.interface'; +import { IClient } from '../interfaces/Client.interface'; +import { + ClientsLoadType, + SessionLoadType, + SessionAllType, + SessionCloseType, + SessionAddType, + SessionRemoveType, + ClientAddType, + ClientRemoveType, + ActivityUpdateType +} from './actions'; + +const initialState: IAllReducer = { + clients: new Map(), + session: new Set() +}; + +export const allReducer = ( + state: IAllReducer = initialState, + action: + | ClientsLoadType + | SessionLoadType + | SessionAllType + | SessionCloseType + | SessionAddType + | SessionRemoveType + | ClientAddType + | ClientRemoveType + | ActivityUpdateType +) => { + switch (action.type) { + case 'CLIENTS_LOAD': { + return { ...state, clients: new Map(action.payload) }; + } + case 'SESSION_LOAD': { + return { ...state, session: new Set(action.payload) }; + } + case 'SESSION_ALL': { + return { ...state, session: new Set(state.clients.keys()) }; + } + case 'SESSION_CLOSE': { + return { ...state, session: new Set() }; + } + case 'SESSION_ADD': { + const updatedSession = new Set(state.session); + updatedSession.add(action.payload); + return { ...state, session: updatedSession }; + } + case 'SESSION_REMOVE': { + const updatedSession = new Set(state.session); + updatedSession.delete(action.payload); + return { ...state, session: updatedSession }; + } + case 'CLIENT_ADD': { + const updatedClients = new Map(state.clients); + updatedClients.set(action.payload.unique_id, action.payload.client); + return { ...state, clients: updatedClients }; + } + case 'CLIENT_REMOVE': { + const updatedClients = new Map(state.clients); + updatedClients.delete(action.payload); + return { ...state, clients: updatedClients }; + } + case 'ACTIVITY_UPDATE': { + const { unique_id, active_window, idle_time, resource_usage } = action.payload; + const updatedClients = new Map(state.clients); + const client = updatedClients.get(unique_id); + + if (client !== undefined) { + client.active_window = active_window; + client.idle_time = idle_time; + client.resource_usage = resource_usage; + updatedClients.set(unique_id, client); + } + + return { ...state, clients: updatedClients }; + } + default: + return state; + } +}; -- cgit v1.2.3