Client:Store:SelectionPeopleStore Added sessions logout, fixed connections
This commit is contained in:
parent
43e2f8bc86
commit
d11e3768f9
@ -91,6 +91,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
|
|||||||
organizationName,
|
organizationName,
|
||||||
setDataFromSocket,
|
setDataFromSocket,
|
||||||
setCurrentDataFromSocket,
|
setCurrentDataFromSocket,
|
||||||
|
sessisonLogout,
|
||||||
} = rest;
|
} = rest;
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
@ -145,7 +146,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
|
|||||||
|
|
||||||
socketHelper.on("statuses-in-portal", (data) => {
|
socketHelper.on("statuses-in-portal", (data) => {
|
||||||
setDataFromSocket(data);
|
setDataFromSocket(data);
|
||||||
console.log("dataFromSocket", data);
|
// console.log("dataFromSocket", data);
|
||||||
});
|
});
|
||||||
|
|
||||||
socketHelper.on("enter-in-portal", (data) => {
|
socketHelper.on("enter-in-portal", (data) => {
|
||||||
@ -154,7 +155,8 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
socketHelper.on("leave-in-portal", (data) => {
|
socketHelper.on("leave-in-portal", (data) => {
|
||||||
setCurrentDataFromSocket(data);
|
sessisonLogout(data);
|
||||||
|
// setCurrentDataFromSocket(data);
|
||||||
console.log(data);
|
console.log(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -165,7 +167,12 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
|
|||||||
socketHelper.on("leave-session-in-portal", (data) => {
|
socketHelper.on("leave-session-in-portal", (data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
});
|
});
|
||||||
}, [socketHelper, setDataFromSocket, setCurrentDataFromSocket]);
|
}, [
|
||||||
|
socketHelper,
|
||||||
|
setDataFromSocket,
|
||||||
|
setCurrentDataFromSocket,
|
||||||
|
sessisonLogout,
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
socketHelper.emit({
|
socketHelper.emit({
|
||||||
@ -493,7 +500,7 @@ const ShellWrapper = inject(
|
|||||||
peopleStore,
|
peopleStore,
|
||||||
}) => {
|
}) => {
|
||||||
const { i18n } = useTranslation();
|
const { i18n } = useTranslation();
|
||||||
const { setDataFromSocket, setCurrentDataFromSocket } =
|
const { setDataFromSocket, setCurrentDataFromSocket, sessisonLogout } =
|
||||||
peopleStore.selectionStore;
|
peopleStore.selectionStore;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -586,6 +593,7 @@ const ShellWrapper = inject(
|
|||||||
organizationName,
|
organizationName,
|
||||||
setDataFromSocket,
|
setDataFromSocket,
|
||||||
setCurrentDataFromSocket,
|
setCurrentDataFromSocket,
|
||||||
|
sessisonLogout,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
)(observer(Shell));
|
)(observer(Shell));
|
||||||
|
@ -32,7 +32,7 @@ import moment from "moment-timezone";
|
|||||||
|
|
||||||
class SelectionStore {
|
class SelectionStore {
|
||||||
peopleStore = null;
|
peopleStore = null;
|
||||||
allSessions = [];
|
// allSessions = [];
|
||||||
sessionsData = [];
|
sessionsData = [];
|
||||||
dataFromSocket = [];
|
dataFromSocket = [];
|
||||||
currentDataFromSocket = [];
|
currentDataFromSocket = [];
|
||||||
@ -472,6 +472,34 @@ class SelectionStore {
|
|||||||
this.dataFromSocket = data;
|
this.dataFromSocket = data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sessisonLogout = (userId) => {
|
||||||
|
const newData = [...this.dataFromSocket];
|
||||||
|
|
||||||
|
const index = newData.findIndex((data) => data.id === userId);
|
||||||
|
|
||||||
|
if (index === -1) return;
|
||||||
|
|
||||||
|
newData[index].status = "offline";
|
||||||
|
|
||||||
|
this.setDataFromSocket(newData);
|
||||||
|
};
|
||||||
|
|
||||||
|
setCurrentDataFromSocket = (data) => {
|
||||||
|
this.currentDataFromSocket = data;
|
||||||
|
|
||||||
|
const newArr = [...this.dataFromSocket];
|
||||||
|
const indexTest = newArr.findIndex(({ id }) => id === data.id);
|
||||||
|
if (indexTest === -1) return;
|
||||||
|
const { sessions, status } = data;
|
||||||
|
|
||||||
|
newArr[indexTest] = {
|
||||||
|
...newArr[indexTest],
|
||||||
|
sessions,
|
||||||
|
status,
|
||||||
|
};
|
||||||
|
this.setDataFromSocket(newArr);
|
||||||
|
};
|
||||||
|
|
||||||
setDisplayName = (displayName) => {
|
setDisplayName = (displayName) => {
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
};
|
};
|
||||||
@ -496,10 +524,6 @@ class SelectionStore {
|
|||||||
this.isLoading = isLoading;
|
this.isLoading = isLoading;
|
||||||
};
|
};
|
||||||
|
|
||||||
setCurrentDataFromSocket = (data) => {
|
|
||||||
this.currentDataFromSocket = data;
|
|
||||||
};
|
|
||||||
|
|
||||||
setFromDateAgo = (sessionId, value) => {
|
setFromDateAgo = (sessionId, value) => {
|
||||||
this.fromDateAgo[sessionId] = value;
|
this.fromDateAgo[sessionId] = value;
|
||||||
};
|
};
|
||||||
@ -520,38 +544,69 @@ class SelectionStore {
|
|||||||
return parsedDate.format(locale);
|
return parsedDate.format(locale);
|
||||||
};
|
};
|
||||||
|
|
||||||
updateAllSessions = (sessions, dataFromSocket, currentDataFromSocket) => {
|
getCurrentConnections = (session, data) => {
|
||||||
const socketDataMap = new Map(
|
const { sessions, id } = this.currentDataFromSocket ?? {};
|
||||||
dataFromSocket.map((user) => [user.id, user]),
|
const [first, ...other] = session.connections;
|
||||||
);
|
const [firstSessions] = sessions ?? [];
|
||||||
const filteredSessions = sessions.filter((session) => {
|
const isCurrentSesstion = session.id === id;
|
||||||
const socketData = socketDataMap.get(session.id);
|
|
||||||
return (
|
|
||||||
socketData && socketData.sessions && socketData.sessions.length > 0
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
const newAllSessions = filteredSessions.map((session) => {
|
const connectionsIsEmpty = session.connections.length === 0;
|
||||||
const socketData = socketDataMap.get(session.id);
|
|
||||||
const currentSocketData =
|
|
||||||
currentDataFromSocket && currentDataFromSocket.id === session.id
|
|
||||||
? currentDataFromSocket
|
|
||||||
: null;
|
|
||||||
|
|
||||||
const latestData = currentSocketData || socketData;
|
if (isCurrentSesstion)
|
||||||
|
return [
|
||||||
|
{ ...first, ...firstSessions, date: moment().utc().toISOString() },
|
||||||
|
...other,
|
||||||
|
];
|
||||||
|
|
||||||
return {
|
if (connectionsIsEmpty) return [data.sessions.at(-1)];
|
||||||
...session,
|
|
||||||
status: latestData ? latestData.status : "offline",
|
|
||||||
sessions: latestData ? latestData.sessions.slice(-1)[0] : [],
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
runInAction(() => {
|
return session.connections;
|
||||||
this.setAllSessions(newAllSessions);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
get allSessions() {
|
||||||
|
const dataFromSocketMap = this.dataFromSocket.reduce((map, data) => {
|
||||||
|
map[data.id] = data;
|
||||||
|
return map;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
const temp = this.sessionsData.map((session) => {
|
||||||
|
const data = dataFromSocketMap[session.id];
|
||||||
|
|
||||||
|
const connections = this.getCurrentConnections(session, data);
|
||||||
|
|
||||||
|
return { ...data, ...session, connections };
|
||||||
|
});
|
||||||
|
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateAllSessions = (sessionsData, dataFromSocket, currentDataFromSocket) => {
|
||||||
|
// const newAllSessions = [];
|
||||||
|
|
||||||
|
// sessionsData.forEach((session) => {
|
||||||
|
// const socketData = dataFromSocket.find((user) => user.id === session.id);
|
||||||
|
|
||||||
|
// if (socketData && socketData.sessions && socketData.sessions.length > 0) {
|
||||||
|
// const isCurrentSession =
|
||||||
|
// currentDataFromSocket && currentDataFromSocket.id === session.id;
|
||||||
|
|
||||||
|
// const latestData = isCurrentSession
|
||||||
|
// ? currentDataFromSocket
|
||||||
|
// : socketData;
|
||||||
|
|
||||||
|
// newAllSessions.push({
|
||||||
|
// ...session,
|
||||||
|
// status: latestData ? latestData.status : "offline",
|
||||||
|
// sessions: latestData ? latestData.sessions.slice(-1)[0] : [],
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// runInAction(() => {
|
||||||
|
// this.setAllSessions(newAllSessions);
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
fetchData = async () => {
|
fetchData = async () => {
|
||||||
const { getUserSessionsById } = this.settingsSetupStore;
|
const { getUserSessionsById } = this.settingsSetupStore;
|
||||||
const { getUsersList } = this.peopleStore.usersStore;
|
const { getUsersList } = this.peopleStore.usersStore;
|
||||||
@ -563,7 +618,6 @@ class SelectionStore {
|
|||||||
|
|
||||||
const sessions = await Promise.all(sessionsPromises);
|
const sessions = await Promise.all(sessionsPromises);
|
||||||
this.setSessionsData(sessions);
|
this.setSessionsData(sessions);
|
||||||
this.updateAllSessions(sessions, this.dataFromSocket);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user