Merge branch 'feature/scrolling-skeleton' of https://github.com/ONLYOFFICE/DocSpace-client into feature/scrolling-skeleton

This commit is contained in:
Nikita Gopienko 2024-08-06 17:34:01 +03:00
commit a867a3b367
7 changed files with 58 additions and 3 deletions

View File

@ -43,6 +43,7 @@ import { DeviceType, IndexedDBStores } from "@docspace/shared/enums";
import indexedDbHelper from "@docspace/shared/utils/indexedDBHelper"; import indexedDbHelper from "@docspace/shared/utils/indexedDBHelper";
import { useThemeDetector } from "@docspace/shared/hooks/useThemeDetector"; import { useThemeDetector } from "@docspace/shared/hooks/useThemeDetector";
import { sendToastReport } from "@docspace/shared/utils/crashReport"; import { sendToastReport } from "@docspace/shared/utils/crashReport";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import config from "PACKAGE_FILE"; import config from "PACKAGE_FILE";
@ -77,6 +78,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
userTheme, userTheme,
//user, //user,
userId, userId,
userLoginEventId,
currentDeviceType, currentDeviceType,
timezone, timezone,
showArticleLoader, showArticleLoader,
@ -134,6 +136,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
command: "subscribe", command: "subscribe",
data: { roomParts: "backup-restore" }, data: { roomParts: "backup-restore" },
}); });
socketHelper.on("restore-backup", () => { socketHelper.on("restore-backup", () => {
getRestoreProgress() getRestoreProgress()
.then((response) => { .then((response) => {
@ -159,7 +162,27 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
command: "subscribe", command: "subscribe",
data: { roomParts: "QUOTA", individual: true }, data: { roomParts: "QUOTA", individual: true },
}); });
}, [socketHelper]);
socketHelper.emit({
command: "subscribe",
data: { roomParts: userId },
});
socketHelper.on("s:logout-session", (loginEventId) => {
console.log(`[WS] "logout-session"`, loginEventId, userLoginEventId);
if (userLoginEventId === loginEventId || loginEventId === 0) {
window.location.replace(
combineUrl(window.ClientConfig?.proxy?.url, "/login"),
);
}
});
}, [
socketHelper,
userLoginEventId,
setPreparationPortalDialogVisible,
userId,
]);
const { t, ready } = useTranslation(["Common"]); //TODO: if enable banner ["Common", "SmartBanner"] const { t, ready } = useTranslation(["Common"]); //TODO: if enable banner ["Common", "SmartBanner"]
@ -533,6 +556,7 @@ const ShellWrapper = inject(
setSnackbarExist, setSnackbarExist,
userTheme: isFrame ? frameConfig?.theme : userTheme, userTheme: isFrame ? frameConfig?.theme : userTheme,
userId: userStore?.user?.id, userId: userStore?.user?.id,
userLoginEventId: userStore?.user?.loginEventId,
currentDeviceType, currentDeviceType,
showArticleLoader: clientLoadingStore.showArticleLoader, showArticleLoader: clientLoadingStore.showArticleLoader,
setPortalTariff, setPortalTariff,

View File

@ -2504,6 +2504,9 @@ class FilesActionStore {
const { clearFiles, setBufferSelection } = this.filesStore; const { clearFiles, setBufferSelection } = this.filesStore;
const { clearInsideGroup, insideGroupBackUrl } = const { clearInsideGroup, insideGroupBackUrl } =
this.peopleStore.groupsStore; this.peopleStore.groupsStore;
const { isLoading } = this.clientLoadingStore;
if (isLoading) return;
setBufferSelection(null); setBufferSelection(null);

View File

@ -103,6 +103,7 @@ const Root = ({
const { filesSettings } = useFilesSettings({}); const { filesSettings } = useFilesSettings({});
const { socketHelper } = useSocketHelper({ const { socketHelper } = useSocketHelper({
socketUrl: user ? settings?.socketUrl ?? "" : "", socketUrl: user ? settings?.socketUrl ?? "" : "",
user,
}); });
const { const {
onSDKRequestSaveAs, onSDKRequestSaveAs,

View File

@ -29,12 +29,14 @@
import React from "react"; import React from "react";
import SocketIOHelper from "@docspace/shared/utils/socket"; import SocketIOHelper from "@docspace/shared/utils/socket";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { getRestoreProgress } from "@docspace/shared/api/portal"; import { getRestoreProgress } from "@docspace/shared/api/portal";
import { getUser } from "@docspace/shared/api/people";
import { EDITOR_ID } from "@docspace/shared/constants"; import { EDITOR_ID } from "@docspace/shared/constants";
import { UseSocketHelperProps } from "@/types"; import { UseSocketHelperProps } from "@/types";
const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => { const useSocketHelper = ({ socketUrl, user }: UseSocketHelperProps) => {
const [socketHelper, setSocketHelper] = React.useState<SocketIOHelper | null>( const [socketHelper, setSocketHelper] = React.useState<SocketIOHelper | null>(
null, null,
); );
@ -48,6 +50,11 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => {
data: { roomParts: "backup-restore" }, data: { roomParts: "backup-restore" },
}); });
socketIOHelper.emit({
command: "subscribe",
data: { roomParts: user?.id || "" },
});
socketIOHelper.on("restore-backup", async () => { socketIOHelper.on("restore-backup", async () => {
try { try {
const response = await getRestoreProgress(); const response = await getRestoreProgress();
@ -69,6 +76,24 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => {
} }
}); });
socketIOHelper.on("s:logout-session", async (loginEventId) => {
console.log(`[WS] "logout-session"`, loginEventId, user?.loginEventId);
if (
Number(loginEventId) === user?.loginEventId ||
Number(loginEventId) === 0
) {
const docEditor =
typeof window !== "undefined" &&
window.DocEditor?.instances[EDITOR_ID];
docEditor?.requestClose();
window.location.replace(
combineUrl(window.ClientConfig?.proxy?.url, "/login"),
);
}
});
setSocketHelper(socketIOHelper); setSocketHelper(socketIOHelper);
}, [socketHelper, socketUrl]); }, [socketHelper, socketUrl]);
@ -76,4 +101,3 @@ const useSocketHelper = ({ socketUrl }: UseSocketHelperProps) => {
}; };
export default useSocketHelper; export default useSocketHelper;

View File

@ -334,6 +334,7 @@ export interface SelectFileDialogProps {
export interface UseSocketHelperProps { export interface UseSocketHelperProps {
socketUrl: string; socketUrl: string;
user?: TUser;
} }
export interface UseEventsProps { export interface UseEventsProps {

View File

@ -71,6 +71,7 @@ export type TUser = {
cultureName?: string; cultureName?: string;
groups?: TUserGroup[]; groups?: TUserGroup[];
shared?: boolean; shared?: boolean;
loginEventId?: number;
}; };
export type TGetUserList = { export type TGetUserList = {

View File

@ -154,6 +154,7 @@ const LinkRow = ({
type="onlyIcon" type="onlyIcon"
isDisabled={isExpiredLink || isLoaded} isDisabled={isExpiredLink || isLoaded}
manualWidth="fit-content" manualWidth="fit-content"
withBackdrop={false}
/> />
</div> </div>
</StyledLinkRow> </StyledLinkRow>