added status relative time

This commit is contained in:
Elyor Djalilov 2024-06-05 18:14:46 +05:00
parent da34b776c4
commit 49c2d9a7ba

View File

@ -1,8 +1,10 @@
import { useState, useEffect } from "react";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { useCallback } from "react"; import { useCallback } from "react";
import { Base } from "@docspace/shared/themes"; import { Base } from "@docspace/shared/themes";
import styled, { css } from "styled-components"; import styled, { css } from "styled-components";
import withContent from "SRC_DIR/HOCs/withPeopleContent"; import withContent from "SRC_DIR/HOCs/withPeopleContent";
import moment from "moment-timezone";
import { Avatar } from "@docspace/shared/components/avatar"; import { Avatar } from "@docspace/shared/components/avatar";
import { TableRow } from "@docspace/shared/components/table"; import { TableRow } from "@docspace/shared/components/table";
@ -114,7 +116,6 @@ const StyledTableRow = styled(TableRow)`
} }
.session-info { .session-info {
text-transform: capitalize;
font-weight: 600; font-weight: 600;
color: ${(props) => props.theme.profile.activeSessions.tableCellColor}; color: ${(props) => props.theme.profile.activeSessions.tableCellColor};
} }
@ -129,9 +130,11 @@ const StyledTableRow = styled(TableRow)`
} }
.online { .online {
text-transform: capitalize;
font-weight: 600; font-weight: 600;
color: ${(props) => props.theme.profile.activeSessions.textOnlineColor}; color: ${(props) => props.theme.profile.activeSessions.textOnlineColor};
::first-letter {
text-transform: uppercase;
}
} }
`; `;
@ -141,31 +144,63 @@ const SessionsTableRow = (props) => {
const { const {
t, t,
item, item,
locale,
checkedProps, checkedProps,
onContentRowSelect, onContentRowSelect,
onContentRowClick, onContentRowClick,
isActive, isActive,
hideColumns, hideColumns,
displayName, displayName,
// status, sessionStatus,
// browser, connections,
// platform, sessions,
// country, isOwner,
// city, isAdmin,
// ip,
setLogoutAllDialogVisible, setLogoutAllDialogVisible,
setDisableDialogVisible, setDisableDialogVisible,
setUserModalData, setUserModalData,
setSessionModalData, setSessionModalData,
setUserSessionPanelVisible, setUserSessionPanelVisible,
setDisplayName, setDisplayName,
setSessionStatus,
} = props; } = props;
const role = item.isOwner ? "owner" : item.isAdmin ? "admin" : null; const [fromDateAgo, setFromDateAgo] = useState("");
const { platform, browser, ip, city, country, status, date } = sessions;
const role = isOwner ? "owner" : isAdmin ? "admin" : null;
const isChecked = checkedProps?.checked;
const isOnline = sessionStatus === "online";
const isOffline = status === "offline";
useEffect(() => {
const updateStatus = () => {
const showOnline = isOnline && sessionStatus;
const showOffline = isOffline ? convertDate(date, locale) : null;
setFromDateAgo(isOnline ? showOnline : showOffline);
};
updateStatus();
const intervalId = setInterval(updateStatus, 60000);
return () => clearInterval(intervalId);
}, [date, sessionStatus, status, locale]);
const convertDate = (dateString, locale) => {
const parsedDate = moment(new Date(dateString).toISOString());
const now = moment();
const daysDiff = now.diff(parsedDate, "days");
moment.locale(locale);
if (daysDiff < 1) return parsedDate.fromNow();
if (daysDiff === 1) return t("Common:Yesterday");
if (daysDiff < 7) return parsedDate.fromNow();
return parsedDate.format(locale);
};
const onClickSessions = () => { const onClickSessions = () => {
setSessionStatus(fromDateAgo);
setUserModalData(item); setUserModalData(item);
setSessionModalData(item.connections); setSessionModalData(connections);
setUserSessionPanelVisible(true); setUserSessionPanelVisible(true);
}; };
@ -203,9 +238,6 @@ const SessionsTableRow = (props) => {
}, },
]; ];
const isChecked = checkedProps.checked;
const isOnline = status.includes("online");
const onChange = (e) => { const onChange = (e) => {
onContentRowSelect && onContentRowSelect(e.target.checked, item); onContentRowSelect && onContentRowSelect(e.target.checked, item);
}; };
@ -272,30 +304,30 @@ const SessionsTableRow = (props) => {
<TableCell> <TableCell>
<Text className={isOnline ? "online" : "session-info"} truncate> <Text className={isOnline ? "online" : "session-info"} truncate>
{/* {status} */} {fromDateAgo}
</Text> </Text>
</TableCell> </TableCell>
<TableCell> <TableCell>
<Text className="session-info" truncate> <Text className="session-info" truncate>
{/* {platform},&nbsp; */} {platform},&nbsp;
</Text> </Text>
<Text className="session-info" truncate> <Text className="session-info" truncate>
{/* {browser} */} {browser?.split(".")[0] ?? ""}
</Text> </Text>
</TableCell> </TableCell>
<TableCell> <TableCell>
<Text className="session-info" truncate> <Text className="session-info" truncate>
{/* {(country || city) && ( {(country || city) && (
<> <>
{country} {country}
{country && city && ", "} {country && city && ", "}
{city} {city}
<span className="divider"></span> <span className="divider"></span>
</> </>
)} */} )}
{/* {ip} */} {ip}
</Text> </Text>
</TableCell> </TableCell>
</StyledTableRow> </StyledTableRow>
@ -303,22 +335,29 @@ const SessionsTableRow = (props) => {
); );
}; };
export default inject(({ setup, dialogsStore }) => { export default inject(({ setup, dialogsStore, settingsStore, userStore }) => {
const { setUserSessionPanelVisible } = dialogsStore; const { setUserSessionPanelVisible } = dialogsStore;
const { culture } = settingsStore;
const { user } = userStore;
const locale = (user && user.cultureName) || culture || "en";
const { const {
setLogoutAllDialogVisible, setLogoutAllDialogVisible,
setDisableDialogVisible, setDisableDialogVisible,
setUserModalData, setUserModalData,
setSessionModalData, setSessionModalData,
setDisplayName, setDisplayName,
setSessionStatus,
} = setup; } = setup;
return { return {
locale,
setLogoutAllDialogVisible, setLogoutAllDialogVisible,
setDisableDialogVisible, setDisableDialogVisible,
setUserModalData, setUserModalData,
setSessionModalData, setSessionModalData,
setUserSessionPanelVisible, setUserSessionPanelVisible,
setDisplayName, setDisplayName,
setSessionStatus,
}; };
})(withContent(observer(SessionsTableRow))); })(withContent(observer(SessionsTableRow)));