From f272f406ea77b17200eb7fa7463b1de6828707d6 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 14:24:00 +0300 Subject: [PATCH 01/23] Web: Files: hidden thirdparty block --- .../sub-components/ThirdPartyStorage/index.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/ThirdPartyStorage/index.js b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/ThirdPartyStorage/index.js index 77da4cb942..8d02eca92f 100644 --- a/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/ThirdPartyStorage/index.js +++ b/packages/client/src/components/dialogs/CreateEditRoomDialog/sub-components/ThirdPartyStorage/index.js @@ -92,13 +92,13 @@ const ThirdPartyStorage = ({ return ( - + /> */} {storageLocation.isThirdparty && ( { const { currentColorScheme } = auth.settingsStore; - const { - openConnectWindow, - saveThirdParty, - deleteThirdParty, - } = settingsStore.thirdPartyStore; + const { openConnectWindow, saveThirdParty, deleteThirdParty } = + settingsStore.thirdPartyStore; const { setConnectItem, From f589e5979b67b3ea9d4f318c4b8dd5a89682647a Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 16:26:15 +0300 Subject: [PATCH 02/23] Web: Files: restored MoveToPublicRoom dialog --- .../FilesSelector/FilesSelector.types.ts | 1 + .../FilesSelector/helpers/useFilesHelper.ts | 4 +++- .../client/src/components/FilesSelector/index.tsx | 14 +++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/client/src/components/FilesSelector/FilesSelector.types.ts b/packages/client/src/components/FilesSelector/FilesSelector.types.ts index 97095c2bc6..d13a72f652 100644 --- a/packages/client/src/components/FilesSelector/FilesSelector.types.ts +++ b/packages/client/src/components/FilesSelector/FilesSelector.types.ts @@ -88,6 +88,7 @@ export type FilesSelectorProps = { withoutImmediatelyClose: boolean; isThirdParty: boolean; isEditorDialog: boolean; + setMoveToPublicRoomVisible: (visible: boolean, operationData: object) => void; onClose?: () => void; diff --git a/packages/client/src/components/FilesSelector/helpers/useFilesHelper.ts b/packages/client/src/components/FilesSelector/helpers/useFilesHelper.ts index 807ecb89b9..602a8d6b59 100644 --- a/packages/client/src/components/FilesSelector/helpers/useFilesHelper.ts +++ b/packages/client/src/components/FilesSelector/helpers/useFilesHelper.ts @@ -339,12 +339,14 @@ export const useFilesHelper = ({ pathParts.map(async (folderId: number | string) => { const folderInfo: any = await getFolderInfo(folderId); - const { title, id, parentId, rootFolderType } = folderInfo; + const { title, id, parentId, rootFolderType, roomType } = + folderInfo; return { label: title, id: id, isRoom: parentId === 0 && rootFolderType === FolderType.Rooms, + roomType, }; }) ); diff --git a/packages/client/src/components/FilesSelector/index.tsx b/packages/client/src/components/FilesSelector/index.tsx index c25dc22dfc..982d98a74c 100644 --- a/packages/client/src/components/FilesSelector/index.tsx +++ b/packages/client/src/components/FilesSelector/index.tsx @@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next"; // @ts-ignore import Loaders from "@docspace/common/components/Loaders"; -import { FolderType } from "@docspace/common/constants"; +import { FolderType, RoomsType } from "@docspace/common/constants"; import Aside from "@docspace/components/aside"; import Backdrop from "@docspace/components/backdrop"; @@ -82,6 +82,7 @@ const FilesSelector = ({ descriptionText, setSelectedItems, + setMoveToPublicRoomVisible, }: FilesSelectorProps) => { const { t } = useTranslation(["Files", "Common", "Translations"]); @@ -292,6 +293,10 @@ const FilesSelector = ({ fileName: string, isChecked: boolean ) => { + const isPublic = + breadCrumbs.findIndex((f: any) => f.roomType === RoomsType.PublicRoom) > + -1; + if ((isMove || isCopy || isRestoreAll) && !isEditorDialog) { const folderTitle = breadCrumbs[breadCrumbs.length - 1].label; @@ -329,6 +334,11 @@ const FilesSelector = ({ }, }; + if (isPublic) { + setMoveToPublicRoomVisible(true, operationData); + return; + } + setIsRequestRunning(true); setSelectedItems(); checkFileConflicts(selectedItemId, folderIds, fileIds) @@ -544,6 +554,7 @@ export default inject( conflictResolveDialogVisible, isFolderActions, setIsFolderActions, + setMoveToPublicRoomVisible, } = dialogsStore; const { theme } = auth.settingsStore; @@ -600,6 +611,7 @@ export default inject( setRestoreAllPanelVisible, setIsFolderActions, setSelectedItems, + setMoveToPublicRoomVisible, }; } )(observer(FilesSelector)); From 5233460afb753f4406e99851e2e19259800e0aca Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 16:40:14 +0300 Subject: [PATCH 03/23] Web: Files: fixed public-room icon for move-to dialog --- .../src/components/FilesSelector/helpers/useRoomsHelper.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/client/src/components/FilesSelector/helpers/useRoomsHelper.ts b/packages/client/src/components/FilesSelector/helpers/useRoomsHelper.ts index 44ac46ec3e..50b12b66d0 100644 --- a/packages/client/src/components/FilesSelector/helpers/useRoomsHelper.ts +++ b/packages/client/src/components/FilesSelector/helpers/useRoomsHelper.ts @@ -23,6 +23,10 @@ const getRoomLogo = (roomType: number) => { case RoomsType.EditingRoom: path = "editing.svg"; break; + + case RoomsType.PublicRoom: + path = "public.svg"; + break; } return iconSize32.get(path); From 9b972095444ddbfa27a93df22b9a2f623a5a64d4 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 16:51:51 +0300 Subject: [PATCH 04/23] Web: Files: Public-room: fixed calendar locale --- .../src/components/panels/EditLinkPanel/LimitTimeBlock.js | 2 ++ packages/client/src/components/panels/EditLinkPanel/index.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/packages/client/src/components/panels/EditLinkPanel/LimitTimeBlock.js b/packages/client/src/components/panels/EditLinkPanel/LimitTimeBlock.js index ab9899802c..faf9af1fd3 100644 --- a/packages/client/src/components/panels/EditLinkPanel/LimitTimeBlock.js +++ b/packages/client/src/components/panels/EditLinkPanel/LimitTimeBlock.js @@ -9,6 +9,7 @@ const LimitTimeBlock = (props) => { setExpirationDate, setIsExpired, isExpired, + language, } = props; const onChange = (date) => { @@ -35,6 +36,7 @@ const LimitTimeBlock = (props) => { minDate={minDate} openDate={new Date()} hasError={isExpired} + locale={language} /> ); diff --git a/packages/client/src/components/panels/EditLinkPanel/index.js b/packages/client/src/components/panels/EditLinkPanel/index.js index e966d74360..6fccbc9545 100644 --- a/packages/client/src/components/panels/EditLinkPanel/index.js +++ b/packages/client/src/components/panels/EditLinkPanel/index.js @@ -42,6 +42,7 @@ const EditLinkPanel = (props) => { isDenyDownload, link, date, + language, } = props; const [isLoading, setIsLoading] = useState(false); @@ -219,6 +220,7 @@ const EditLinkPanel = (props) => { expirationDate={expirationDate} setExpirationDate={setExpirationDate} setIsExpired={setIsExpired} + language={language} /> @@ -296,6 +298,7 @@ export default inject(({ auth, dialogsStore, publicRoomStore }) => { unsavedChangesDialogVisible, setUnsavedChangesDialog, link: link ?? template, + language: auth.language, }; })( withTranslation(["SharingPanel", "Common", "Files"])(observer(EditLinkPanel)) From fa82d2e3d44d5582c976a1f02252da0306b66adc Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 17:34:56 +0300 Subject: [PATCH 05/23] Web: Components: corrected the closure of the calendar --- packages/components/date-picker/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/components/date-picker/index.js b/packages/components/date-picker/index.js index 4e6617923f..14f6f14f0d 100644 --- a/packages/components/date-picker/index.js +++ b/packages/components/date-picker/index.js @@ -118,6 +118,13 @@ const DatePicker = (props) => { ); const handleClick = (e) => { + if ( + e.target.classList.contains("nav-thumb-vertical") || + e.target.classList.contains("nav-thumb-horizontal") + ) { + return; + } + !selectorRef?.current?.contains(e.target) && !calendarRef?.current?.contains(e.target) && !selectedItemRef?.current?.contains(e.target) && @@ -125,9 +132,9 @@ const DatePicker = (props) => { }; useEffect(() => { - document.addEventListener("click", handleClick, { capture: true }); + document.addEventListener("mousedown", handleClick, { capture: true }); return () => - document.removeEventListener("click", handleClick, { capture: true }); + document.removeEventListener("mousedown", handleClick, { capture: true }); }, []); useEffect(() => { From e93cbab354ddaa438de56d26054a2a9208bdb44a Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Wed, 9 Aug 2023 17:38:42 +0300 Subject: [PATCH 06/23] Web: Files: fixed EmbeddingPanel crash --- packages/client/src/components/panels/EmbeddingPanel/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/components/panels/EmbeddingPanel/index.js b/packages/client/src/components/panels/EmbeddingPanel/index.js index 5fc8ab4e9e..1779ac513a 100644 --- a/packages/client/src/components/panels/EmbeddingPanel/index.js +++ b/packages/client/src/components/panels/EmbeddingPanel/index.js @@ -22,7 +22,7 @@ const EmbeddingPanelComponent = (props) => { (e.key === "Esc" || e.key === "Escape") && onClose(); useEffect(() => { - scrollRef.current && scrollRef.current.view.focus(); + scrollRef.current && scrollRef.current?.view?.focus(); document.addEventListener("keyup", onKeyPress); From 795b8dc484f9026e26cd89e0f69c3036a51b4bc4 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 10 Aug 2023 11:27:20 +0300 Subject: [PATCH 07/23] Web: Files: Public-room: fixed route, fixed empty screen --- packages/client/src/HOCs/withLoader.js | 1 - .../src/pages/PublicRoom/PublicRoomPage.js | 9 ++--- packages/client/src/pages/PublicRoom/index.js | 36 +++++++++++-------- packages/client/src/routes/client.js | 11 ++++++ .../client/src/store/ClientLoadingStore.js | 9 ++--- packages/client/src/store/index.js | 2 +- 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/packages/client/src/HOCs/withLoader.js b/packages/client/src/HOCs/withLoader.js index a92adc212b..bc33a19411 100644 --- a/packages/client/src/HOCs/withLoader.js +++ b/packages/client/src/HOCs/withLoader.js @@ -73,7 +73,6 @@ const withLoader = (WrappedComponent) => (Loader) => { isLoadingFilesFind, isInit: isPublicRoom ? true : isInit, showBodyLoader, - isPublicRoom, accountsViewAs, }; } diff --git a/packages/client/src/pages/PublicRoom/PublicRoomPage.js b/packages/client/src/pages/PublicRoom/PublicRoomPage.js index 4cb410060a..d4e9dca9d2 100644 --- a/packages/client/src/pages/PublicRoom/PublicRoomPage.js +++ b/packages/client/src/pages/PublicRoom/PublicRoomPage.js @@ -1,10 +1,9 @@ import React from "react"; import { inject, observer } from "mobx-react"; -import { useNavigate, useLocation } from "react-router-dom"; +import { useLocation, Outlet } from "react-router-dom"; import Section from "@docspace/common/components/Section"; import SectionHeaderContent from "../Home/Section/Header"; import SectionFilterContent from "../Home/Section/Filter"; -import SectionBodyContent from "../Home/Section/Body"; import FilesPanels from "../../components/FilesPanels"; import { RoomSharingDialog } from "../../components/dialogs"; @@ -62,7 +61,7 @@ const PublicRoomPage = (props) => { )} - + @@ -83,8 +82,7 @@ export default inject( clientLoadingStore, }) => { const { withPaging } = auth.settingsStore; - const { validatePublicRoomKey, isLoaded, isLoading, roomStatus, roomId } = - publicRoomStore; + const { isLoaded, isLoading, roomStatus, roomId } = publicRoomStore; const { fetchFiles, isEmptyPage } = filesStore; const { getFilesSettings } = settingsStore; @@ -113,7 +111,6 @@ export default inject( getFilesSettings, withPaging, - validatePublicRoomKey, showSecondaryProgressBar, secondaryProgressBarValue, diff --git a/packages/client/src/pages/PublicRoom/index.js b/packages/client/src/pages/PublicRoom/index.js index b58653def3..e5bc741235 100644 --- a/packages/client/src/pages/PublicRoom/index.js +++ b/packages/client/src/pages/PublicRoom/index.js @@ -21,6 +21,7 @@ const PublicRoom = (props) => { validatePublicRoomKey, getFilesSettings, setPublicRoomKey, + setIsArticleLoading, } = props; const navigate = useNavigate(); @@ -38,6 +39,7 @@ const PublicRoom = (props) => { const fetchRoomFiles = async () => { setPublicRoomKey(key); await getFilesSettings(); + setIsArticleLoading(false); const filterObj = FilesFilter.getFilter(window.location); @@ -94,22 +96,26 @@ const PublicRoom = (props) => { ); }; -export default inject(({ auth, publicRoomStore, settingsStore }) => { - const { validatePublicRoomKey, isLoaded, isLoading, roomStatus, roomId } = - publicRoomStore; +export default inject( + ({ auth, publicRoomStore, settingsStore, clientLoadingStore }) => { + const { validatePublicRoomKey, isLoaded, isLoading, roomStatus, roomId } = + publicRoomStore; - const { getFilesSettings } = settingsStore; - const { setPublicRoomKey } = auth.settingsStore; + const { getFilesSettings } = settingsStore; + const { setPublicRoomKey } = auth.settingsStore; + const { setIsArticleLoading } = clientLoadingStore; - return { - roomId, - isLoaded, - isLoading, - roomStatus, + return { + roomId, + isLoaded, + isLoading, + roomStatus, - getFilesSettings, + getFilesSettings, - validatePublicRoomKey, - setPublicRoomKey, - }; -})(observer(PublicRoom)); + validatePublicRoomKey, + setPublicRoomKey, + setIsArticleLoading, + }; + } +)(observer(PublicRoom)); diff --git a/packages/client/src/routes/client.js b/packages/client/src/routes/client.js index 4dfbb8758a..89a989762f 100644 --- a/packages/client/src/routes/client.js +++ b/packages/client/src/routes/client.js @@ -254,6 +254,17 @@ const ClientRoutes = [ ), + errorElement: , + children: [ + { + index: true, + element: ( + + + + ), + }, + ], }, { path: "/wizard", diff --git a/packages/client/src/store/ClientLoadingStore.js b/packages/client/src/store/ClientLoadingStore.js index e5387ed5f4..704c9c20a7 100644 --- a/packages/client/src/store/ClientLoadingStore.js +++ b/packages/client/src/store/ClientLoadingStore.js @@ -4,8 +4,6 @@ const SHOW_LOADER_TIMER = 500; const MIN_LOADER_TIMER = 500; class ClientLoadingStore { - publicRoomStore; - isLoaded = false; firstLoad = true; @@ -33,10 +31,8 @@ class ClientLoadingStore { body: null, }; - constructor(publicRoomStore) { + constructor() { makeAutoObservable(this); - - this.publicRoomStore = publicRoomStore; } setIsLoaded = (isLoaded) => { @@ -217,7 +213,7 @@ class ClientLoadingStore { get isLoading() { return ( - (this.isArticleLoading && !this.publicRoomStore.isPublicRoom) || + this.isArticleLoading || this.pendingSectionLoaders.header || this.pendingSectionLoaders.filter || this.pendingSectionLoaders.body @@ -225,7 +221,6 @@ class ClientLoadingStore { } get showArticleLoader() { - if (this.publicRoomStore.isPublicRoom) return false; return this.isArticleLoading; } diff --git a/packages/client/src/store/index.js b/packages/client/src/store/index.js index 63a6192e20..93bffb75ff 100644 --- a/packages/client/src/store/index.js +++ b/packages/client/src/store/index.js @@ -58,7 +58,7 @@ const treeFoldersStore = new TreeFoldersStore(selectedFolderStore, authStore); const publicRoomStore = new PublicRoomStore(); -const clientLoadingStore = new ClientLoadingStore(publicRoomStore); +const clientLoadingStore = new ClientLoadingStore(); const settingsStore = new SettingsStore( thirdPartyStore, From 0285074a919502e5f50ad4b3e1600d67ac9cde2e Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 10 Aug 2023 11:53:20 +0300 Subject: [PATCH 08/23] Web: Files: fixed public-room navigation --- packages/client/src/pages/Home/Section/Header/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/pages/Home/Section/Header/index.js b/packages/client/src/pages/Home/Section/Header/index.js index 2260abb493..d06a8b9574 100644 --- a/packages/client/src/pages/Home/Section/Header/index.js +++ b/packages/client/src/pages/Home/Section/Header/index.js @@ -938,7 +938,7 @@ const SectionHeaderContent = (props) => { const isRoot = isLoading && stateIsRoot ? stateIsRoot - : isRootFolder || isAccountsPage || isSettingsPage || isPublicRoom; + : isRootFolder || isAccountsPage || isSettingsPage; const currentTitle = isSettingsPage ? t("Common:Settings") From 9ec7f9e8ff7125d4f06f2ef6705758682d63fdc6 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 10 Aug 2023 14:45:17 +0300 Subject: [PATCH 09/23] Web: Files: fixed EmbeddingPanel --- .../panels/EmbeddingPanel/EmbeddingBody.js | 33 +++++++++++-------- .../components/panels/EmbeddingPanel/index.js | 7 ++-- .../views/Members/sub-components/LinkRow.js | 2 +- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/client/src/components/panels/EmbeddingPanel/EmbeddingBody.js b/packages/client/src/components/panels/EmbeddingPanel/EmbeddingBody.js index efbf90fb30..793ad706de 100644 --- a/packages/client/src/components/panels/EmbeddingPanel/EmbeddingBody.js +++ b/packages/client/src/components/panels/EmbeddingPanel/EmbeddingBody.js @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useCallback } from "react"; +import React, { useState } from "react"; import copy from "copy-to-clipboard"; import Text from "@docspace/components/text"; import Link from "@docspace/components/link"; @@ -9,28 +9,33 @@ import IconButton from "@docspace/components/icon-button"; import Button from "@docspace/components/button"; import CopyReactSvgUrl from "PUBLIC_DIR/images/copy.react.svg?url"; import { StyledBody } from "./StyledEmbeddingPanel"; +import { objectToGetParams } from "@docspace/common/utils"; -const EmbeddingBody = ({ t, embeddingLink }) => { +const EmbeddingBody = ({ t, link, roomId }) => { const [size, setSize] = useState("auto"); const [widthValue, setWidthValue] = useState("100%"); const [heightValue, setHeightValue] = useState("100%"); - const getIframe = useCallback( - () => - ``, - [embeddingLink, widthValue, heightValue] - ); - const [link, setLink] = useState(getIframe()); + const config = { + width: `${widthValue}`, + height: `${heightValue}`, + frameId: "ds-frame", + showHeader: true, + showTitle: true, + showMenu: false, + showFilter: true, + rootPath: "/rooms/shared/", + id: roomId, + }; - useEffect(() => { - const link = getIframe(); - setLink(link); - }, [embeddingLink, widthValue, heightValue]); + const scriptUrl = `${window.location.origin}/static/scripts/api.js`; + const params = objectToGetParams(config); + const codeBlock = `
Fallback text
\n`; const onChangeWidth = (e) => setWidthValue(e.target.value); const onChangeHeight = (e) => setHeightValue(e.target.value); const onCopyLink = () => { - copy(link); + copy(codeBlock); toastr.success(t("EmbeddingPanel:CodeCopySuccess")); }; @@ -134,7 +139,7 @@ const EmbeddingBody = ({ t, embeddingLink }) => { iconName={CopyReactSvgUrl} onClick={onCopyLink} /> -