refactoring

This commit is contained in:
Elyor Djalilov 2024-06-05 18:13:52 +05:00
parent 1d11ad3eb5
commit da34b776c4
7 changed files with 124 additions and 79 deletions

View File

@ -11,74 +11,85 @@ const StyledLastSessionBlock = styled.div`
margin-bottom: 12px; margin-bottom: 12px;
} }
.online { .session-info-wrapper {
color: ${(props) => props.theme.profile.activeSessions.textOnlineColor}; display: grid;
grid-template-columns: auto 1fr;
gap: 10px 0px;
} }
.session-info-wrapper { .session-info-row {
display: flex; display: contents;
align-items: center; }
.session-info-label {
padding: 4px;
font-size: 13px;
.session-info-left-container {
${(props) => ${(props) =>
props.theme.interfaceDirection === "rtl" props.theme.interfaceDirection === "rtl"
? css` ? css`
margin-left: 24px; margin-left: 24px;
`
: css`
margin-right: 24px;
`}
p {
padding: 8px;
font-size: 13px;
${(props) =>
props.theme.interfaceDirection === "rtl"
? css`
padding-right: 0px; padding-right: 0px;
` `
: css` : css`
margin-right: 24px;
padding-left: 0px; padding-left: 0px;
`} `}
} }
.session-info-value {
justify-self: start;
font-weight: 600;
padding: 4px;
font-size: 13px;
width: 100%;
::first-letter {
text-transform: uppercase;
}
} }
.session-info-right-container { .online {
width: 100%;
overflow: hidden;
p {
font-weight: 600; font-weight: 600;
padding: 8px; padding: 4px;
font-size: 13px; font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%; width: 100%;
} color: ${(props) => props.theme.profile.activeSessions.textOnlineColor};
::first-letter {
text-transform: uppercase;
} }
} }
`; `;
const LastSessionBlock = (props) => { const LastSessionBlock = (props) => {
const { t, sessionData } = props; const { t, sessionStatus, userData } = props;
const { status, platform, browser, ip, country, city } = sessionData; const { sessions } = userData;
const { platform, browser, ip, city, country } = sessions;
const isOnline = status === "Online"; const isOnline = sessionStatus === "online";
return ( return (
<StyledLastSessionBlock> <StyledLastSessionBlock>
<Text className="subtitle">{t("Profile:LastSession")}</Text> <Text className="subtitle">{t("Profile:LastSession")}</Text>
<Box className="session-info-wrapper"> <Box className="session-info-wrapper">
<div className="session-info-left-container"> <div className="session-info-row">
<Text>{t("Common:Active")}</Text> <Text className="session-info-label">{t("Common:Active")}</Text>
<Text>{t("Common:Platform")}</Text> <Text className={isOnline ? "online" : "session-info-value"}>
<Text>{t("Common:Browser")}</Text> {sessionStatus}
<Text>{t("Common:Location")}</Text> </Text>
</div> </div>
<div className="session-info-right-container"> <div className="session-info-row">
<Text className={isOnline && "online"}>{status}</Text> <Text className="session-info-label">{t("Common:Platform")}</Text>
<Text>{platform}</Text> <Text className="session-info-value">{platform}</Text>
<Text>{browser}</Text> </div>
<Text> <div className="session-info-row">
<Text className="session-info-label">{t("Common:Browser")}</Text>
<Text className="session-info-value">
{browser?.split(".")[0] ?? ""}
</Text>
</div>
<div className="session-info-row">
<Text className="session-info-label">{t("Common:Location")}</Text>
<Text className="session-info-value" truncate>
{(country || city) && ( {(country || city) && (
<> <>
{country} {country}

View File

@ -45,17 +45,19 @@ const UserInfoBlock = (props) => {
setDisplayName, setDisplayName,
} = props; } = props;
const { avatar, displayName, isAdmin, isOwner } = userData; const { avatar, displayName, isAdmin, isOwner, isRoomAdmin, isCollaborator } =
const role = isOwner ? "owner" : isAdmin ? "admin" : null; userData;
const getUserType = () => { const getUserType = () => {
if (userData.isOwner) return t("Common:Owner"); if (isOwner) return t("Common:Owner");
if (userData.isAdmin) return t("Common:DocspaceAdmin"); if (isAdmin) return t("Common:DocspaceAdmin");
if (userData.isRoomAdmin) return t("Common:RoomAdmin"); if (isRoomAdmin) return t("Common:RoomAdmin");
if (userData.isCollaborator) return t("Common:PowerUser"); if (isCollaborator) return t("Common:PowerUser");
return t("Common:User"); return t("Common:User");
}; };
const role = isOwner ? "owner" : isAdmin ? "admin" : null;
const onClickLogout = () => { const onClickLogout = () => {
setLogoutAllDialogVisible(true); setLogoutAllDialogVisible(true);
setDisplayName(displayName); setDisplayName(displayName);

View File

@ -83,12 +83,14 @@ const UserSessionsPanel = (props) => {
export default inject(({ setup, dialogsStore }) => { export default inject(({ setup, dialogsStore }) => {
const { userSessionsPanelVisible, setUserSessionPanelVisible } = dialogsStore; const { userSessionsPanelVisible, setUserSessionPanelVisible } = dialogsStore;
const { const {
setLogoutAllDialogVisible, setLogoutAllDialogVisible,
setDisableDialogVisible, setDisableDialogVisible,
userModalData, userModalData,
sessionModalData, sessionModalData,
setDisplayName, setDisplayName,
sessionStatus,
} = setup; } = setup;
return { return {
@ -99,6 +101,7 @@ export default inject(({ setup, dialogsStore }) => {
visible: userSessionsPanelVisible, visible: userSessionsPanelVisible,
setVisible: setUserSessionPanelVisible, setVisible: setUserSessionPanelVisible,
setDisplayName, setDisplayName,
sessionStatus,
}; };
})( })(
withTranslation(["Settings", "Profile", "Common"])( withTranslation(["Settings", "Profile", "Common"])(

View File

@ -167,12 +167,11 @@ const TableView = ({ t, sectionWidth, userId, sessionsData }) => {
item={item} item={item}
hideColumns={hideColumns} hideColumns={hideColumns}
displayName={item.displayName} displayName={item.displayName}
// status={item.status} sessionStatus={item.status}
// browser={item.browser} connections={item.connections}
// platform={item.platform} sessions={item.sessions}
// country={item.country} isOwner={item.isOwner}
// city={item.city} isAdmin={item.isAdmin}
// ip={item.ip}
/> />
))} ))}
</TableBody> </TableBody>

View File

@ -79,8 +79,7 @@ const Sessions = ({
viewAs, viewAs,
setViewAs, setViewAs,
currentDeviceType, currentDeviceType,
allSessions, setSessions,
setAllSessions,
clearSelection, clearSelection,
disableDialogVisible, disableDialogVisible,
logoutDialogVisible, logoutDialogVisible,
@ -93,6 +92,9 @@ const Sessions = ({
socketHelper, socketHelper,
getUserSessionsById, getUserSessionsById,
displayName, displayName,
allSessions,
setAllSessions,
setSessionsFromSocket,
}) => { }) => {
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
@ -107,7 +109,7 @@ const Sessions = ({
}); });
socketHelper.on("statuses-in-portal", (data) => { socketHelper.on("statuses-in-portal", (data) => {
console.log(data); setSessionsFromSocket(data);
}); });
}, [socketHelper]); }, [socketHelper]);
@ -118,7 +120,8 @@ const Sessions = ({
getUserSessionsById(user.id), getUserSessionsById(user.id),
); );
const sessions = await Promise.all(sessionsPromises); const sessions = await Promise.all(sessionsPromises);
setAllSessions([...sessions]); setSessions(sessions);
setAllSessions();
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@ -137,6 +140,8 @@ const Sessions = ({
currentDeviceType, currentDeviceType,
}); });
console.log(JSON.parse(JSON.stringify(allSessions)));
const onClickRemoveAllSessions = () => { const onClickRemoveAllSessions = () => {
try { try {
setIsLoading(true); setIsLoading(true);
@ -231,8 +236,13 @@ const Sessions = ({
export default inject(({ settingsStore, setup, peopleStore }) => { export default inject(({ settingsStore, setup, peopleStore }) => {
const { socketHelper, currentDeviceType } = settingsStore; const { socketHelper, currentDeviceType } = settingsStore;
const { getUsersList } = peopleStore.usersStore; const { getUsersList } = peopleStore.usersStore;
const { clearSelection, allSessions, setAllSessions, setAllConnections } = const {
peopleStore.selectionStore; clearSelection,
allSessions,
setSessions,
setAllSessions,
setSessionsFromSocket,
} = peopleStore.selectionStore;
const { const {
viewAs, viewAs,
@ -253,7 +263,7 @@ export default inject(({ settingsStore, setup, peopleStore }) => {
viewAs, viewAs,
setViewAs, setViewAs,
allSessions, allSessions,
setAllSessions, setSessions,
clearSelection, clearSelection,
disableDialogVisible, disableDialogVisible,
logoutDialogVisible, logoutDialogVisible,
@ -264,9 +274,10 @@ export default inject(({ settingsStore, setup, peopleStore }) => {
platformModalData, platformModalData,
socketHelper, socketHelper,
getUsersList, getUsersList,
setAllConnections,
getUserSessionsById, getUserSessionsById,
displayName, displayName,
setAllSessions,
setSessionsFromSocket,
}; };
})( })(
withTranslation(["Settings", "Profile", "Common", "ChangeUserStatusDialog"])( withTranslation(["Settings", "Profile", "Common", "ChangeUserStatusDialog"])(

View File

@ -31,7 +31,8 @@ import { getUserStatus } from "../helpers/people-helpers";
class SelectionStore { class SelectionStore {
peopleStore = null; peopleStore = null;
allSessions = []; allSessions = [];
allConnections = []; sessions = [];
sessionsFromSocket = [];
selection = []; selection = [];
selectionUsersRights = { selectionUsersRights = {
isVisitor: 0, isVisitor: 0,
@ -260,7 +261,7 @@ class SelectionStore {
setSelected = (selected, isSessionsPage) => { setSelected = (selected, isSessionsPage) => {
this.bufferSelection = null; this.bufferSelection = null;
this.selected = selected; this.selected = selected;
const sessions = this.allSessions; const sessions = this.sessions;
const list = this.peopleStore.usersStore.peopleList; const list = this.peopleStore.usersStore.peopleList;
if (selected !== "none" && selected !== "close") { if (selected !== "none" && selected !== "close") {
@ -425,22 +426,35 @@ class SelectionStore {
get isHeaderIndeterminate() { get isHeaderIndeterminate() {
return ( return (
this.isHeaderVisible && this.selection.length !== this.allSessions.length this.isHeaderVisible && this.selection.length !== this.sessions.length
); );
} }
get isHeaderChecked() { get isHeaderChecked() {
return ( return (
this.isHeaderVisible && this.selection.length === this.allSessions.length this.isHeaderVisible && this.selection.length === this.sessions.length
); );
} }
setAllSessions = (sessions) => { setSessions = (sessions) => {
this.allSessions = sessions; this.sessions = sessions;
}; };
setAllConnections = (connections) => { setSessionsFromSocket = (data) => {
this.allConnections = connections; this.sessionsFromSocket = data;
};
setAllSessions = () => {
this.allSessions = this.sessions.map((session) => {
const socketData = this.sessionsFromSocket.find(
(user) => user.id === session.id,
);
return {
...session,
status: socketData ? socketData.status : "offline",
sessions: socketData ? socketData.sessions.slice(-1)[0] : [],
};
});
}; };
} }

View File

@ -107,6 +107,7 @@ class SettingsSetupStore {
securityLifetime = []; securityLifetime = [];
sessionStatus = "";
displayName = ""; displayName = "";
sessionsIsInit = false; sessionsIsInit = false;
sessions = []; sessions = [];
@ -616,6 +617,10 @@ class SettingsSetupStore {
setDisplayName = (name) => { setDisplayName = (name) => {
this.displayName = name; this.displayName = name;
}; };
setSessionStatus = (status) => {
this.sessionStatus = status;
};
} }
export default SettingsSetupStore; export default SettingsSetupStore;