From 6601566913e8b00874caa7fcdd2bb60010f9e779 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Mon, 5 Aug 2024 17:58:59 +0300 Subject: [PATCH 1/7] Shared: Api: People: Added loginEventId to user type --- packages/shared/api/people/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared/api/people/types.ts b/packages/shared/api/people/types.ts index d211f6de1a..d74b09c9b2 100644 --- a/packages/shared/api/people/types.ts +++ b/packages/shared/api/people/types.ts @@ -71,6 +71,7 @@ export type TUser = { cultureName?: string; groups?: TUserGroup[]; shared?: boolean; + loginEventId?: number; }; export type TGetUserList = { From ff9e0d3c0d4ab8f542c7cb1d53b1ec05a35a862c Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Mon, 5 Aug 2024 18:01:14 +0300 Subject: [PATCH 2/7] Fixed bug 66037: Settings: Active Sessions: When active sessions end, document opened for editing in another user session does not close. --- packages/client/src/Shell.jsx | 21 +++++++++++++++- packages/doceditor/src/components/Root.tsx | 1 + .../doceditor/src/hooks/useSocketHelper.ts | 25 +++++++++++++++++-- packages/doceditor/src/types/index.ts | 1 + 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/packages/client/src/Shell.jsx b/packages/client/src/Shell.jsx index bf0165745d..4de18fa557 100644 --- a/packages/client/src/Shell.jsx +++ b/packages/client/src/Shell.jsx @@ -43,6 +43,7 @@ import { DeviceType, IndexedDBStores } from "@docspace/shared/enums"; import indexedDbHelper from "@docspace/shared/utils/indexedDBHelper"; import { useThemeDetector } from "@docspace/shared/hooks/useThemeDetector"; import { sendToastReport } from "@docspace/shared/utils/crashReport"; +import { combineUrl } from "@docspace/shared/utils/combineUrl"; import config from "PACKAGE_FILE"; @@ -77,6 +78,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => { userTheme, //user, userId, + userLoginEventId, currentDeviceType, timezone, showArticleLoader, @@ -134,6 +136,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => { command: "subscribe", data: { roomParts: "backup-restore" }, }); + socketHelper.on("restore-backup", () => { getRestoreProgress() .then((response) => { @@ -159,7 +162,22 @@ const Shell = ({ items = [], page = "home", ...rest }) => { command: "subscribe", data: { roomParts: "QUOTA", individual: true }, }); - }, [socketHelper]); + + socketHelper.emit({ + command: "subscribe", + data: { roomParts: "66faa6e4-f133-11ea-b126-00ffeec8b4ef" }, + }); + + socketHelper.on("s:logout-session", (loginEventId) => { + console.log(`[WS] "logout-session"`, loginEventId, userLoginEventId); + + if (userLoginEventId === loginEventId) { + window.location.replace( + combineUrl(window.ClientConfig?.proxy?.url, "/login"), + ); + } + }); + }, [socketHelper, userLoginEventId, setPreparationPortalDialogVisible]); const { t, ready } = useTranslation(["Common"]); //TODO: if enable banner ["Common", "SmartBanner"] @@ -533,6 +551,7 @@ const ShellWrapper = inject( setSnackbarExist, userTheme: isFrame ? frameConfig?.theme : userTheme, userId: userStore?.user?.id, + userLoginEventId: userStore?.user?.loginEventId, currentDeviceType, showArticleLoader: clientLoadingStore.showArticleLoader, setPortalTariff, diff --git a/packages/doceditor/src/components/Root.tsx b/packages/doceditor/src/components/Root.tsx index 7928e29e0e..378b9aac04 100644 --- a/packages/doceditor/src/components/Root.tsx +++ b/packages/doceditor/src/components/Root.tsx @@ -103,6 +103,7 @@ const Root = ({ const { filesSettings } = useFilesSettings({}); const { socketHelper } = useSocketHelper({ socketUrl: user ? settings?.socketUrl ?? "" : "", + user, }); const { onSDKRequestSaveAs, diff --git a/packages/doceditor/src/hooks/useSocketHelper.ts b/packages/doceditor/src/hooks/useSocketHelper.ts index 048796ead8..dbf4caad4e 100644 --- a/packages/doceditor/src/hooks/useSocketHelper.ts +++ b/packages/doceditor/src/hooks/useSocketHelper.ts @@ -29,12 +29,14 @@ import React from "react"; import SocketIOHelper from "@docspace/shared/utils/socket"; +import { combineUrl } from "@docspace/shared/utils/combineUrl"; import { getRestoreProgress } from "@docspace/shared/api/portal"; +import { getUser } from "@docspace/shared/api/people"; import { EDITOR_ID } from "@docspace/shared/constants"; import { UseSocketHelperProps } from "@/types"; -const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => { +const useSocketHelper = ({ socketUrl, user }: UseSocketHelperProps) => { const [socketHelper, setSocketHelper] = React.useState( null, ); @@ -48,6 +50,11 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => { data: { roomParts: "backup-restore" }, }); + socketIOHelper.emit({ + command: "subscribe", + data: { roomParts: user?.id || "" }, + }); + socketIOHelper.on("restore-backup", async () => { try { const response = await getRestoreProgress(); @@ -69,6 +76,21 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => { } }); + socketIOHelper.on("s:logout-session", async (loginEventId) => { + console.log(`[WS] "logout-session"`, loginEventId, user?.loginEventId); + + if (Number(loginEventId) === user?.loginEventId) { + const docEditor = + typeof window !== "undefined" && + window.DocEditor?.instances[EDITOR_ID]; + + docEditor?.requestClose(); + window.location.replace( + combineUrl(window.ClientConfig?.proxy?.url, "/login"), + ); + } + }); + setSocketHelper(socketIOHelper); }, [socketHelper, socketUrl]); @@ -76,4 +98,3 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => { }; export default useSocketHelper; - diff --git a/packages/doceditor/src/types/index.ts b/packages/doceditor/src/types/index.ts index 1446d3e59a..739282d2e6 100644 --- a/packages/doceditor/src/types/index.ts +++ b/packages/doceditor/src/types/index.ts @@ -334,6 +334,7 @@ export interface SelectFileDialogProps { export interface UseSocketHelperProps { socketUrl: string; + user?: TUser; } export interface UseEventsProps { From 61cd9c0d5dfe5bfc317d2ef056a6e824f3666fe8 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Mon, 5 Aug 2024 18:07:19 +0300 Subject: [PATCH 3/7] Client: Shell: Added missing userId for socket subscribe --- packages/client/src/Shell.jsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/client/src/Shell.jsx b/packages/client/src/Shell.jsx index 4de18fa557..86658d0fd2 100644 --- a/packages/client/src/Shell.jsx +++ b/packages/client/src/Shell.jsx @@ -165,7 +165,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => { socketHelper.emit({ command: "subscribe", - data: { roomParts: "66faa6e4-f133-11ea-b126-00ffeec8b4ef" }, + data: { roomParts: userId }, }); socketHelper.on("s:logout-session", (loginEventId) => { @@ -177,7 +177,12 @@ const Shell = ({ items = [], page = "home", ...rest }) => { ); } }); - }, [socketHelper, userLoginEventId, setPreparationPortalDialogVisible]); + }, [ + socketHelper, + userLoginEventId, + setPreparationPortalDialogVisible, + userId, + ]); const { t, ready } = useTranslation(["Common"]); //TODO: if enable banner ["Common", "SmartBanner"] From 5d76ca49fcdf8bd2b098e685b321e96839ea6193 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Tue, 6 Aug 2024 14:42:09 +0300 Subject: [PATCH 4/7] Client: Fixed s:logout-session socket event --- packages/client/src/Shell.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/Shell.jsx b/packages/client/src/Shell.jsx index 86658d0fd2..9523d6901a 100644 --- a/packages/client/src/Shell.jsx +++ b/packages/client/src/Shell.jsx @@ -171,7 +171,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => { socketHelper.on("s:logout-session", (loginEventId) => { console.log(`[WS] "logout-session"`, loginEventId, userLoginEventId); - if (userLoginEventId === loginEventId) { + if (userLoginEventId === loginEventId || loginEventId === 0) { window.location.replace( combineUrl(window.ClientConfig?.proxy?.url, "/login"), ); From 1bd273f058fb1472e32283d51d78ec9457d0d316 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Tue, 6 Aug 2024 14:42:27 +0300 Subject: [PATCH 5/7] Editor: Fixed s:logout-session socket event --- packages/doceditor/src/hooks/useSocketHelper.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/doceditor/src/hooks/useSocketHelper.ts b/packages/doceditor/src/hooks/useSocketHelper.ts index dbf4caad4e..9eeb1a98b7 100644 --- a/packages/doceditor/src/hooks/useSocketHelper.ts +++ b/packages/doceditor/src/hooks/useSocketHelper.ts @@ -79,7 +79,10 @@ const useSocketHelper = ({ socketUrl, user }: UseSocketHelperProps) => { socketIOHelper.on("s:logout-session", async (loginEventId) => { console.log(`[WS] "logout-session"`, loginEventId, user?.loginEventId); - if (Number(loginEventId) === user?.loginEventId) { + if ( + Number(loginEventId) === user?.loginEventId || + Number(loginEventId) === 0 + ) { const docEditor = typeof window !== "undefined" && window.DocEditor?.instances[EDITOR_ID]; From f1ef00783e251992ec0c64b8cdda74729a5a6366 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Tue, 6 Aug 2024 16:10:07 +0300 Subject: [PATCH 6/7] Web: Files: fixed onClickBack action --- packages/client/src/store/FilesActionsStore.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/client/src/store/FilesActionsStore.js b/packages/client/src/store/FilesActionsStore.js index 4ef3e4d9d3..11fc69fd0c 100644 --- a/packages/client/src/store/FilesActionsStore.js +++ b/packages/client/src/store/FilesActionsStore.js @@ -2504,6 +2504,9 @@ class FilesActionStore { const { clearFiles, setBufferSelection } = this.filesStore; const { clearInsideGroup, insideGroupBackUrl } = this.peopleStore.groupsStore; + const { isLoading } = this.clientLoadingStore; + + if (isLoading) return; setBufferSelection(null); From b90902f46128c631a63f80e1b7ca303f9b54bbd2 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Tue, 6 Aug 2024 16:48:19 +0300 Subject: [PATCH 7/7] Web: Components: LinkRow: fixed Combobox --- packages/shared/components/share/sub-components/LinkRow.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared/components/share/sub-components/LinkRow.tsx b/packages/shared/components/share/sub-components/LinkRow.tsx index 662800eb0e..bf05ee7c76 100644 --- a/packages/shared/components/share/sub-components/LinkRow.tsx +++ b/packages/shared/components/share/sub-components/LinkRow.tsx @@ -154,6 +154,7 @@ const LinkRow = ({ type="onlyIcon" isDisabled={isExpiredLink || isLoaded} manualWidth="fit-content" + withBackdrop={false} />