relative time state was moved to store
This commit is contained in:
parent
d206f44ce7
commit
a1d07bb859
@ -376,9 +376,12 @@ const SectionHeaderContent = (props) => {
|
|||||||
setUserLastSession,
|
setUserLastSession,
|
||||||
setUserSessionPanelVisible,
|
setUserSessionPanelVisible,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
|
setStatus,
|
||||||
|
getFromDateAgo,
|
||||||
} = props;
|
} = props;
|
||||||
const { header, isCategoryOrHeader, isNeedPaidIcon } = state;
|
const { header, isCategoryOrHeader, isNeedPaidIcon } = state;
|
||||||
const arrayOfParams = getArrayOfParams();
|
const arrayOfParams = getArrayOfParams();
|
||||||
|
const fromDateAgo = getFromDateAgo(peopleSelection[0]?.id);
|
||||||
|
|
||||||
const menuItems = isSessionsPage ? (
|
const menuItems = isSessionsPage ? (
|
||||||
<>
|
<>
|
||||||
@ -414,6 +417,7 @@ const SectionHeaderContent = (props) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const onClickSessions = () => {
|
const onClickSessions = () => {
|
||||||
|
setStatus(fromDateAgo);
|
||||||
setUserLastSession(peopleSelection[0]);
|
setUserLastSession(peopleSelection[0]);
|
||||||
setConnections(peopleSelection[0].connections);
|
setConnections(peopleSelection[0].connections);
|
||||||
setUserSessionPanelVisible(true);
|
setUserSessionPanelVisible(true);
|
||||||
@ -594,6 +598,8 @@ export default inject(
|
|||||||
setUserLastSession,
|
setUserLastSession,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
allSessions,
|
allSessions,
|
||||||
|
setStatus,
|
||||||
|
getFromDateAgo,
|
||||||
} = peopleStore.selectionStore;
|
} = peopleStore.selectionStore;
|
||||||
|
|
||||||
const { admins, selectorIsOpen } = setup.security.accessRight;
|
const { admins, selectorIsOpen } = setup.security.accessRight;
|
||||||
@ -632,6 +638,8 @@ export default inject(
|
|||||||
setUserLastSession,
|
setUserLastSession,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
allSessions,
|
allSessions,
|
||||||
|
setStatus,
|
||||||
|
getFromDateAgo,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
)(
|
)(
|
||||||
|
@ -106,6 +106,7 @@ const SessionsRow = (props) => {
|
|||||||
sectionWidth,
|
sectionWidth,
|
||||||
onContentRowSelect,
|
onContentRowSelect,
|
||||||
onContentRowClick,
|
onContentRowClick,
|
||||||
|
onUserContextClick,
|
||||||
isActive,
|
isActive,
|
||||||
checkedProps,
|
checkedProps,
|
||||||
displayName,
|
displayName,
|
||||||
@ -120,12 +121,13 @@ const SessionsRow = (props) => {
|
|||||||
setConnections,
|
setConnections,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
setStatus,
|
setStatus,
|
||||||
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const [fromDateAgo, setFromDateAgo] = useState("");
|
|
||||||
|
|
||||||
const { status, date } = sessions;
|
const { status, date } = sessions;
|
||||||
|
const fromDateAgo = getFromDateAgo(item.id);
|
||||||
const isChecked = checkedProps?.checked;
|
const isChecked = checkedProps?.checked;
|
||||||
const isOnline = sessionStatus === "online";
|
const isOnline = sessionStatus === "online";
|
||||||
const isOffline = status === "offline";
|
const isOffline = status === "offline";
|
||||||
@ -134,34 +136,14 @@ const SessionsRow = (props) => {
|
|||||||
const updateStatus = () => {
|
const updateStatus = () => {
|
||||||
const showOnline = isOnline && sessionStatus;
|
const showOnline = isOnline && sessionStatus;
|
||||||
const showOffline = isOffline ? convertDate(date, locale) : null;
|
const showOffline = isOffline ? convertDate(date, locale) : null;
|
||||||
setFromDateAgo(isOnline ? showOnline : showOffline);
|
setFromDateAgo(item.id, isOnline ? showOnline : showOffline);
|
||||||
};
|
};
|
||||||
|
|
||||||
updateStatus();
|
updateStatus();
|
||||||
const intervalId = setInterval(updateStatus, 60000);
|
const intervalId = setInterval(updateStatus, 60000);
|
||||||
|
|
||||||
return () => clearInterval(intervalId);
|
return () => clearInterval(intervalId);
|
||||||
}, [date, sessionStatus, status, locale]);
|
}, [date, sessionStatus, status, locale, item.id]);
|
||||||
|
|
||||||
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 onRowClick = useCallback(() => {
|
|
||||||
onContentRowClick && onContentRowClick(!isChecked, item);
|
|
||||||
}, [isChecked, item, onContentRowClick]);
|
|
||||||
|
|
||||||
const onRowContextClick = useCallback(() => {
|
|
||||||
onContentRowClick && onContentRowClick(!isChecked, item, false);
|
|
||||||
}, [isChecked, item, onContentRowClick]);
|
|
||||||
|
|
||||||
const onClickSessions = () => {
|
const onClickSessions = () => {
|
||||||
setStatus(fromDateAgo);
|
setStatus(fromDateAgo);
|
||||||
@ -204,6 +186,15 @@ const SessionsRow = (props) => {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const onRowContextClick = useCallback(
|
||||||
|
(rightMouseButtonClick) => {
|
||||||
|
onUserContextClick?.(item, !rightMouseButtonClick);
|
||||||
|
},
|
||||||
|
[item, onUserContextClick],
|
||||||
|
);
|
||||||
|
|
||||||
|
const onRowClick = (e) => onContentRowClick?.(e, item);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wrapper
|
<Wrapper
|
||||||
className={`user-item row-wrapper ${
|
className={`user-item row-wrapper ${
|
||||||
@ -240,8 +231,15 @@ export default inject(
|
|||||||
const { user } = userStore;
|
const { user } = userStore;
|
||||||
const locale = (user && user.cultureName) || culture || "en";
|
const locale = (user && user.cultureName) || culture || "en";
|
||||||
|
|
||||||
const { setUserLastSession, setConnections, setDisplayName, setStatus } =
|
const {
|
||||||
peopleStore.selectionStore;
|
setUserLastSession,
|
||||||
|
setConnections,
|
||||||
|
setDisplayName,
|
||||||
|
setStatus,
|
||||||
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
|
} = peopleStore.selectionStore;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
locale,
|
locale,
|
||||||
@ -252,6 +250,9 @@ export default inject(
|
|||||||
setUserSessionPanelVisible,
|
setUserSessionPanelVisible,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
setStatus,
|
setStatus,
|
||||||
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
)(withContent(observer(SessionsRow)));
|
)(withContent(observer(SessionsRow)));
|
||||||
|
@ -164,13 +164,15 @@ const SessionsTableRow = (props) => {
|
|||||||
setUserSessionPanelVisible,
|
setUserSessionPanelVisible,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
setStatus,
|
setStatus,
|
||||||
isOneUserSelection,
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const [fromDateAgo, setFromDateAgo] = useState("");
|
|
||||||
|
|
||||||
const { platform, browser, ip, city, country, status, date } = sessions;
|
const { platform, browser, ip, city, country, status, date } = sessions;
|
||||||
|
|
||||||
|
const isLastConnection = connections.length > 0;
|
||||||
|
const fromDateAgo = getFromDateAgo(item.id);
|
||||||
const isChecked = checkedProps?.checked;
|
const isChecked = checkedProps?.checked;
|
||||||
const isOnline = sessionStatus === "online";
|
const isOnline = sessionStatus === "online";
|
||||||
const isOffline = status === "offline";
|
const isOffline = status === "offline";
|
||||||
@ -179,26 +181,14 @@ const SessionsTableRow = (props) => {
|
|||||||
const updateStatus = () => {
|
const updateStatus = () => {
|
||||||
const showOnline = isOnline && sessionStatus;
|
const showOnline = isOnline && sessionStatus;
|
||||||
const showOffline = isOffline ? convertDate(date, locale) : null;
|
const showOffline = isOffline ? convertDate(date, locale) : null;
|
||||||
setFromDateAgo(isOnline ? showOnline : showOffline);
|
setFromDateAgo(item.id, isOnline ? showOnline : showOffline);
|
||||||
};
|
};
|
||||||
|
|
||||||
updateStatus();
|
updateStatus();
|
||||||
const intervalId = setInterval(updateStatus, 60000);
|
const intervalId = setInterval(updateStatus, 60000);
|
||||||
|
|
||||||
return () => clearInterval(intervalId);
|
return () => clearInterval(intervalId);
|
||||||
}, [date, sessionStatus, status, locale]);
|
}, [date, sessionStatus, status, locale, item.id]);
|
||||||
|
|
||||||
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 = () => {
|
||||||
setStatus(fromDateAgo);
|
setStatus(fromDateAgo);
|
||||||
@ -296,10 +286,12 @@ const SessionsTableRow = (props) => {
|
|||||||
|
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Text className="session-info" truncate>
|
<Text className="session-info" truncate>
|
||||||
{platform},
|
{isLastConnection ? connections[0]?.platform : platform},
|
||||||
</Text>
|
</Text>
|
||||||
<Text className="session-info" truncate>
|
<Text className="session-info" truncate>
|
||||||
{browser?.split(".")[0] ?? ""}
|
{isLastConnection
|
||||||
|
? connections[0]?.browser
|
||||||
|
: browser?.split(".")[0] ?? ""}
|
||||||
</Text>
|
</Text>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
|
||||||
@ -313,7 +305,7 @@ const SessionsTableRow = (props) => {
|
|||||||
<span className="divider"></span>
|
<span className="divider"></span>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
{ip}
|
{isLastConnection ? connections[0]?.ip : ip}
|
||||||
</Text>
|
</Text>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</StyledTableRow>
|
</StyledTableRow>
|
||||||
@ -334,7 +326,9 @@ export default inject(
|
|||||||
setConnections,
|
setConnections,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
setStatus,
|
setStatus,
|
||||||
isOneUserSelection,
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
} = peopleStore.selectionStore;
|
} = peopleStore.selectionStore;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -346,7 +340,9 @@ export default inject(
|
|||||||
setUserSessionPanelVisible,
|
setUserSessionPanelVisible,
|
||||||
setDisplayName,
|
setDisplayName,
|
||||||
setStatus,
|
setStatus,
|
||||||
isOneUserSelection,
|
convertDate,
|
||||||
|
getFromDateAgo,
|
||||||
|
setFromDateAgo,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
)(withContent(observer(SessionsTableRow)));
|
)(withContent(observer(SessionsTableRow)));
|
||||||
|
@ -28,14 +28,17 @@ import { makeAutoObservable, runInAction } from "mobx";
|
|||||||
import { EmployeeStatus } from "@docspace/shared/enums";
|
import { EmployeeStatus } from "@docspace/shared/enums";
|
||||||
import { toastr } from "@docspace/shared/components/toast";
|
import { toastr } from "@docspace/shared/components/toast";
|
||||||
import SettingsSetupStore from "./SettingsSetupStore";
|
import SettingsSetupStore from "./SettingsSetupStore";
|
||||||
|
import moment from "moment-timezone";
|
||||||
|
|
||||||
class SelectionStore {
|
class SelectionStore {
|
||||||
peopleStore = null;
|
peopleStore = null;
|
||||||
allSessions = [];
|
allSessions = [];
|
||||||
sessionsData = [];
|
sessionsData = [];
|
||||||
dataFromSocket = [];
|
dataFromSocket = [];
|
||||||
|
currentDataFromSocket = [];
|
||||||
displayName = "";
|
displayName = "";
|
||||||
status = "";
|
status = "";
|
||||||
|
fromDateAgo = {};
|
||||||
connections = [];
|
connections = [];
|
||||||
platformData = [];
|
platformData = [];
|
||||||
userLastSession = [];
|
userLastSession = [];
|
||||||
@ -482,7 +485,31 @@ class SelectionStore {
|
|||||||
this.isLoading = isLoading;
|
this.isLoading = isLoading;
|
||||||
};
|
};
|
||||||
|
|
||||||
updateAllSessions = (sessions, dataFromSocket) => {
|
setCurrentDataFromSocket = (data) => {
|
||||||
|
this.currentDataFromSocket = data;
|
||||||
|
};
|
||||||
|
|
||||||
|
setFromDateAgo = (sessionId, value) => {
|
||||||
|
this.fromDateAgo[sessionId] = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
getFromDateAgo = (sessionId) => {
|
||||||
|
return this.fromDateAgo[sessionId] || "";
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
};
|
||||||
|
|
||||||
|
updateAllSessions = (sessions, dataFromSocket, currentDataFromSocket) => {
|
||||||
const socketDataMap = new Map(
|
const socketDataMap = new Map(
|
||||||
dataFromSocket.map((user) => [user.id, user]),
|
dataFromSocket.map((user) => [user.id, user]),
|
||||||
);
|
);
|
||||||
@ -495,10 +522,17 @@ class SelectionStore {
|
|||||||
|
|
||||||
const newAllSessions = filteredSessions.map((session) => {
|
const newAllSessions = filteredSessions.map((session) => {
|
||||||
const socketData = socketDataMap.get(session.id);
|
const socketData = socketDataMap.get(session.id);
|
||||||
|
const currentSocketData =
|
||||||
|
currentDataFromSocket && currentDataFromSocket.id === session.id
|
||||||
|
? currentDataFromSocket
|
||||||
|
: null;
|
||||||
|
|
||||||
|
const latestData = currentSocketData || socketData;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...session,
|
...session,
|
||||||
status: socketData ? socketData.status : "offline",
|
status: latestData ? latestData.status : "offline",
|
||||||
sessions: socketData ? socketData.sessions.slice(-1)[0] : [],
|
sessions: latestData ? latestData.sessions.slice(-1)[0] : [],
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user