diff --git a/.github/workflows/trigger-action.yml b/.github/workflows/trigger-action.yml new file mode 100644 index 0000000000..b3ce5c3e0c --- /dev/null +++ b/.github/workflows/trigger-action.yml @@ -0,0 +1,22 @@ + +name: Trigger action + +on: + push: + branches: + - 'hotfix/v*' + - 'release/v*' + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch Action + run: | + curl \ + -X POST \ + -u "${{ secrets.USERNAME}}:${{secrets.TOKEN}}" \ + "https://api.github.com/repos/ONLYOFFICE/DocSpace-buildtools/dispatches" \ + -H "Accept: application/vnd.github.everest-preview+json" \ + --data '{"event_type": "client-trigger-action", "client_payload": { "branches": ["'"${GITHUB_REF_NAME}"'"]}}' + diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1f662df1ac..8828ef3f60 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -167,6 +167,21 @@ "close": false } }, + { + "label": "Frontend | update yarn.lock", + "type": "shell", + "command": "cd ${workspaceFolder} ; yarn wipe && yarn install", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "new", + "focus": true, + "close": false + } + }, { "label": "Frontend | build", "type": "shell", @@ -212,6 +227,21 @@ "close": false } }, + { + "label": "Frontend | build-and-start-prod", + "type": "shell", + "command": "cd ${workspaceFolder} ; yarn build && yarn start-prod", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "new", + "focus": true, + "close": false + } + }, { "label": "Test | frontend-translations", "type": "shell", diff --git a/frontend.code-workspace b/frontend.code-workspace index 1e7d5c6cf8..60c14d0633 100644 --- a/frontend.code-workspace +++ b/frontend.code-workspace @@ -112,11 +112,21 @@ "task": "Frontend | install", "tooltip": "🛠️ Start the \"frontend install packages\" task" }, + { + "label": "Update yarn.lock", + "task": "Frontend | update yarn.lock", + "tooltip": "🛠️ Start the \"frontend update yarn.lock\" task" + }, { "label": "Build", "task": "Frontend | build", "tooltip": "🛠️ Start the \"frontend build\" task" }, + { + "label": "Build and start prod", + "task": "Frontend | build-and-start-prod", + "tooltip": "🛠️ Start the \"frontend build and start production\" task" + }, { "label": "Start", "task": "Frontend | start", diff --git a/packages/client/src/components/Badges.js b/packages/client/src/components/Badges.js index 2a501d8bdc..0ac2b71df3 100644 --- a/packages/client/src/components/Badges.js +++ b/packages/client/src/components/Badges.js @@ -188,7 +188,7 @@ const Badges = ({ title={isForm ? t("Common:FillFormButton") : t("Common:EditButton")} /> )} - {item.viewAccessability?.Convert && + {item.viewAccessibility?.MustConvert && item.security?.Convert && !isTrashFolder && !isArchiveFolderRoot && ( diff --git a/packages/client/src/components/dialogs/DeleteProfileEverDialog/index.js b/packages/client/src/components/dialogs/DeleteProfileEverDialog/index.js index 1e07bb7da3..78654a2f11 100644 --- a/packages/client/src/components/dialogs/DeleteProfileEverDialog/index.js +++ b/packages/client/src/components/dialogs/DeleteProfileEverDialog/index.js @@ -77,6 +77,8 @@ const DeleteProfileEverDialogComponent = (props) => { userPerformedDeletion, setDialogData, getUsersList, + needResetUserSelection, + setSelected } = props; const [isRequestRunning, setIsRequestRunning] = React.useState(false); @@ -121,6 +123,7 @@ const DeleteProfileEverDialogComponent = (props) => { .catch((error) => toastr.error(error)) .finally(() => { setIsRequestRunning(false); + needResetUserSelection && setSelected("close"); onClose(); }); }; @@ -210,7 +213,7 @@ DeleteProfileEverDialog.propTypes = { export default inject(({ peopleStore }) => { const { dialogStore, selectionStore } = peopleStore; - const { getUsersList } = peopleStore.usersStore; + const { getUsersList, needResetUserSelection } = peopleStore.usersStore; const { setDataReassignmentDialogVisible, @@ -229,6 +232,7 @@ export default inject(({ peopleStore }) => { setIsDeletingUserWithReassignment, setDialogData, setSelected, + needResetUserSelection, removeUser: peopleStore.usersStore.removeUser, userPerformedDeletion: peopleStore.authStore.userStore.user, getUsersList, diff --git a/packages/client/src/components/panels/NewFilesPanel/index.js b/packages/client/src/components/panels/NewFilesPanel/index.js index 4ddef31868..17e0c3da71 100644 --- a/packages/client/src/components/panels/NewFilesPanel/index.js +++ b/packages/client/src/components/panels/NewFilesPanel/index.js @@ -171,8 +171,8 @@ const NewFilesPanel = (props) => { const isMediaActive = playlist.findIndex((el) => el.fileId === id) !== -1; const isMedia = - item?.viewAccessability?.ImageView || - item?.viewAccessability?.MediaView; + item?.viewAccessibility?.ImageView || + item?.viewAccessibility?.MediaView; if (canEdit && providerKey) { return addFileToRecentlyViewed(id) diff --git a/packages/client/src/components/panels/UploadPanel/FileRow.js b/packages/client/src/components/panels/UploadPanel/FileRow.js index e3d8d30edc..980478e4b7 100644 --- a/packages/client/src/components/panels/UploadPanel/FileRow.js +++ b/packages/client/src/components/panels/UploadPanel/FileRow.js @@ -441,8 +441,8 @@ export default inject( mediaViewerDataStore; const isMedia = - item.fileInfo?.viewAccessability?.ImageView || - item.fileInfo?.viewAccessability?.MediaView; + item.fileInfo?.viewAccessibility?.ImageView || + item.fileInfo?.viewAccessibility?.MediaView; const isMediaActive = playlist.findIndex((el) => el.fileId === item.fileId) !== -1; diff --git a/packages/client/src/pages/Home/Hooks/useFiles.js b/packages/client/src/pages/Home/Hooks/useFiles.js index 27666182e1..2ba32f3459 100644 --- a/packages/client/src/pages/Home/Hooks/useFiles.js +++ b/packages/client/src/pages/Home/Hooks/useFiles.js @@ -109,8 +109,8 @@ const useFiles = ({ getFileInfo(fileId) .then((data) => { const canOpenPlayer = - data.viewAccessability.ImageView || - data.viewAccessability.MediaView; + data.viewAccessibility.ImageView || + data.viewAccessibility.MediaView; const file = { ...data, canOpenPlayer }; setToPreviewFile(file, true); setIsPreview(true); diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/Details/index.js b/packages/client/src/pages/Home/InfoPanel/Body/views/Details/index.js index 93879159e8..0ca0a5f328 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/views/Details/index.js +++ b/packages/client/src/pages/Home/InfoPanel/Body/views/Details/index.js @@ -75,8 +75,8 @@ const Details = ({ {selection.thumbnailUrl && !isThumbnailError ? ( { - const { title, viewAccessability } = item; + const { title, viewAccessibility } = item; const onChange = (e) => { onContentSelect && onContentSelect(e.target.checked, item); }; - const isMedia = viewAccessability?.ImageView || viewAccessability?.MediaView; + const isMedia = viewAccessibility?.ImageView || viewAccessibility?.MediaView; return ( <> diff --git a/packages/client/src/pages/Home/Section/Body/TilesView/FilesTileContent.js b/packages/client/src/pages/Home/Section/Body/TilesView/FilesTileContent.js index e5310d7ee9..1f772b57cd 100644 --- a/packages/client/src/pages/Home/Section/Body/TilesView/FilesTileContent.js +++ b/packages/client/src/pages/Home/Section/Body/TilesView/FilesTileContent.js @@ -113,9 +113,9 @@ const FilesTileContent = ({ isRooms, currentDeviceType, }) => { - const { fileExst, title, viewAccessability } = item; + const { fileExst, title, viewAccessibility } = item; - const isMedia = viewAccessability?.ImageView || viewAccessability?.MediaView; + const isMedia = viewAccessibility?.ImageView || viewAccessibility?.MediaView; return ( <> diff --git a/packages/client/src/pages/Home/Section/Body/TilesView/sub-components/Tile.js b/packages/client/src/pages/Home/Section/Body/TilesView/sub-components/Tile.js index b374cb3c59..4565ca440f 100644 --- a/packages/client/src/pages/Home/Section/Body/TilesView/sub-components/Tile.js +++ b/packages/client/src/pages/Home/Section/Body/TilesView/sub-components/Tile.js @@ -894,8 +894,8 @@ class Tile extends React.PureComponent { isHighlight={isHighlight} thumbnails1280x720={thumbnails1280x720} isImageOrMedia={ - item?.viewAccessability?.ImageView || - item?.viewAccessability?.MediaView + item?.viewAccessibility?.ImageView || + item?.viewAccessibility?.MediaView } isPlugin={item.isPlugin} > diff --git a/packages/client/src/pages/Home/index.js b/packages/client/src/pages/Home/index.js index 9e4fdb7415..cad0caca02 100644 --- a/packages/client/src/pages/Home/index.js +++ b/packages/client/src/pages/Home/index.js @@ -123,6 +123,7 @@ const PureHome = (props) => { loadCurrentUser, updateProfileCulture, getRooms, + setSelectedFolder, } = props; const location = useLocation(); @@ -224,6 +225,7 @@ const PureHome = (props) => { window.addEventListener("popstate", onClickBack); return () => { + setSelectedFolder(null); window.removeEventListener("popstate", onClickBack); }; }, []); @@ -351,6 +353,7 @@ export default inject( selectedFolderStore, clientLoadingStore, }) => { + const { setSelectedFolder } = selectedFolderStore; const { secondaryProgressDataStore, primaryProgressDataStore, @@ -578,6 +581,7 @@ export default inject( loadCurrentUser: auth.userStore.loadCurrentUser, updateProfileCulture, getRooms, + setSelectedFolder, }; } )(observer(Home)); diff --git a/packages/client/src/pages/PortalSettings/categories/common/customization.js b/packages/client/src/pages/PortalSettings/categories/common/customization.js index f67b6edbc0..79b99fc84f 100644 --- a/packages/client/src/pages/PortalSettings/categories/common/customization.js +++ b/packages/client/src/pages/PortalSettings/categories/common/customization.js @@ -112,8 +112,13 @@ const Customization = (props) => { - - {enablePortalRename && } + + {enablePortalRename && ( + <> + + + + )} ); }; diff --git a/packages/client/src/pages/PortalSettings/categories/data-management/backup/restore-backup/sub-components/LocalFileModule.js b/packages/client/src/pages/PortalSettings/categories/data-management/backup/restore-backup/sub-components/LocalFileModule.js index 155e5aa8f0..ec2656ea42 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-management/backup/restore-backup/sub-components/LocalFileModule.js +++ b/packages/client/src/pages/PortalSettings/categories/data-management/backup/restore-backup/sub-components/LocalFileModule.js @@ -1,6 +1,4 @@ -import React from "react"; import { inject, observer } from "mobx-react"; - import FileInput from "@docspace/components/file-input"; const LocalFile = ({ setRestoreResource, isEnableRestore, t }) => { @@ -14,6 +12,7 @@ const LocalFile = ({ setRestoreResource, isEnableRestore, t }) => { scale className="restore-backup_input" isDisabled={!isEnableRestore} + accept={[".tar", ".tar.gz"]} /> ); }; diff --git a/packages/client/src/pages/PortalSettings/categories/integration/SingleSignOn/sub-components/UploadXML.js b/packages/client/src/pages/PortalSettings/categories/integration/SingleSignOn/sub-components/UploadXML.js index 6fd2d2ef09..a0615108a9 100644 --- a/packages/client/src/pages/PortalSettings/categories/integration/SingleSignOn/sub-components/UploadXML.js +++ b/packages/client/src/pages/PortalSettings/categories/integration/SingleSignOn/sub-components/UploadXML.js @@ -152,7 +152,7 @@ const UploadXML = (props) => { { className="payments_file-input" scale size="base" - accept=".lic" + accept={[".lic"]} placeholder={t("UploadLicenseFile")} onInput={onLicenseFileHandler} isDisabled={isLicenseUploading || isLoading} diff --git a/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js b/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js index f22271076b..7109fe226b 100644 --- a/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js +++ b/packages/client/src/pages/Profile/Section/Body/sub-components/main-profile/index.js @@ -59,8 +59,10 @@ const MainProfile = (props) => { } = props; const [horizontalOrientation, setHorizontalOrientation] = useState(false); + const [dimension, setDimension] = useState(window.innerHeight); const { interfaceDirection } = useTheme(); const dirTooltip = interfaceDirection === "rtl" ? "left" : "right"; + useEffect(() => { checkWidth(); window.addEventListener("resize", checkWidth); @@ -68,6 +70,7 @@ const MainProfile = (props) => { }, []); const checkWidth = () => { + setDimension(innerHeight); if (!isMobileOnly) return; if (!isMobile()) { @@ -302,7 +305,7 @@ const MainProfile = (props) => { scaledOptions={false} size="content" showDisabledItems={true} - dropDownMaxHeight={364} + dropDownMaxHeight={dimension < 620 ? 200 : 364} manualWidth="280px" isDefaultMode={ isMobileHorizontalOrientation diff --git a/packages/client/src/pages/VersionHistory/Section/Body/VersionBadge.js b/packages/client/src/pages/VersionHistory/Section/Body/VersionBadge.js index a8c31ab41a..9289c2621c 100644 --- a/packages/client/src/pages/VersionHistory/Section/Body/VersionBadge.js +++ b/packages/client/src/pages/VersionHistory/Section/Body/VersionBadge.js @@ -42,6 +42,7 @@ const VersionBadgeText = styled(Text)` display: flex; justify-content: flex-start; ${({ reverse }) => reverse && `flex-direction: row-reverse;`} + gap: 3px; span:first-child { overflow: hidden; @@ -87,7 +88,8 @@ const VersionBadge = ({ > {isVersion && ( <> - {t("Version")} {versionGroup} + {t("Version")} + {versionGroup} )} diff --git a/packages/client/src/pages/VersionHistory/Section/Body/VersionRow.js b/packages/client/src/pages/VersionHistory/Section/Body/VersionRow.js index 3049be978c..85bdc4d17b 100644 --- a/packages/client/src/pages/VersionHistory/Section/Body/VersionRow.js +++ b/packages/client/src/pages/VersionHistory/Section/Body/VersionRow.js @@ -108,6 +108,15 @@ const VersionRow = (props) => { setShowEditPanel(!showEditPanel); }; const onOpenFile = () => { + const { MediaView, ImageView } = info?.viewAccessibility; + + if (MediaView || ImageView) { + return window.open( + "/products/files/#preview/" + info.id, + window.DocSpaceConfig?.editor?.openOnNewPage ? "_blank" : "_self" + ); + } + if (fileItemsList && enablePlugins) { let currPluginItem = null; diff --git a/packages/client/src/pages/Wizard/index.js b/packages/client/src/pages/Wizard/index.js index fa715cbc51..72563b3931 100644 --- a/packages/client/src/pages/Wizard/index.js +++ b/packages/client/src/pages/Wizard/index.js @@ -379,7 +379,7 @@ const Wizard = (props) => { { { textOverflow withoutPadding directionY="both" - options={timezones} - selectedOption={selectedTimezone} + options={timezones || []} + selectedOption={selectedTimezone || {}} onSelect={onTimezoneSelect} isDisabled={isCreated} scaled={isMobile()} diff --git a/packages/client/src/store/ContextOptionsStore.js b/packages/client/src/store/ContextOptionsStore.js index 2eb676bc72..af64b22fac 100644 --- a/packages/client/src/store/ContextOptionsStore.js +++ b/packages/client/src/store/ContextOptionsStore.js @@ -330,7 +330,7 @@ class ContextOptionsStore { const needConvert = canConvert(item.fileExst); const canOpenPlayer = - item.viewAccessability?.ImageView || item.viewAccessability?.MediaView; + item.viewAccessibility?.ImageView || item.viewAccessibility?.MediaView; const url = getItemUrl( item.id, @@ -347,7 +347,7 @@ class ContextOptionsStore { onClickLinkEdit = (item) => { const { setConvertItem, setConvertDialogVisible } = this.dialogsStore; const canConvert = - item.viewAccessability?.Convert && item.security?.Convert; + item.viewAccessibility?.MustConvert && item.security?.Convert; if (canConvert) { setConvertItem({ ...item, isOpen: true }); @@ -953,7 +953,7 @@ class ContextOptionsStore { const isShareable = item.canShare; const isMedia = - item.viewAccessability?.ImageView || item.viewAccessability?.MediaView; + item.viewAccessibility?.ImageView || item.viewAccessibility?.MediaView; const hasInfoPanel = contextOptions.includes("show-info"); diff --git a/packages/client/src/store/FilesActionsStore.js b/packages/client/src/store/FilesActionsStore.js index c9a8729e1a..570ac67050 100644 --- a/packages/client/src/store/FilesActionsStore.js +++ b/packages/client/src/store/FilesActionsStore.js @@ -2120,11 +2120,11 @@ class FilesActionStore { }; const isMediaOrImage = - item.viewAccessability?.ImageView || item.viewAccessability?.MediaView; + item.viewAccessibility?.ImageView || item.viewAccessibility?.MediaView; const canConvert = - item.viewAccessability?.Convert && item.security?.Convert; - const canWebEdit = item.viewAccessability?.WebEdit; - const canViewedDocs = item.viewAccessability?.WebView; + item.viewAccessibility?.MustConvert && item.security?.Convert; + const canWebEdit = item.viewAccessibility?.WebEdit; + const canViewedDocs = item.viewAccessibility?.WebView; const { id, viewUrl, providerKey, fileStatus, encrypted, isFolder } = item; if (encrypted && isPrivacyFolder) return checkProtocol(item.id, true); diff --git a/packages/client/src/store/FilesStore.js b/packages/client/src/store/FilesStore.js index 409013e2ee..9adb0ebca5 100644 --- a/packages/client/src/store/FilesStore.js +++ b/packages/client/src/store/FilesStore.js @@ -1805,7 +1805,8 @@ class FilesStore { const isThirdPartyItem = !!item.providerKey; const hasNew = item.new > 0 || (item.fileStatus & FileStatus.IsNew) === FileStatus.IsNew; - const canConvert = this.filesSettingsStore.extsConvertible[item.fileExst]; + const canConvert = item.viewAccessibility?.CanConvert; + const mustConvert = item.viewAccessibility?.MustConvert; const isEncrypted = item.encrypted; const isDocuSign = false; //TODO: need this prop; const isEditing = false; // (item.fileStatus & FileStatus.IsEditing) === FileStatus.IsEditing; @@ -1840,7 +1841,7 @@ class FilesStore { const canDownload = item.security?.Download; if (isFile) { - const shouldFillForm = item.viewAccessability.WebRestrictedEditing; + const shouldFillForm = item.viewAccessibility.WebRestrictedEditing; const canLockFile = item.security?.Lock; const canChangeVersionFileHistory = !isEditing && item.security?.EditHistory; @@ -1850,10 +1851,10 @@ class FilesStore { const canSubmitToFormGallery = item.security?.SubmitToFormGallery; - const canEditFile = item.security.Edit && item.viewAccessability.WebEdit; + const canEditFile = item.security.Edit && item.viewAccessibility.WebEdit; const canOpenPlayer = - item.viewAccessability.ImageView || item.viewAccessability.MediaView; - const canViewFile = item.viewAccessability.WebView; + item.viewAccessibility.ImageView || item.viewAccessibility.MediaView; + const canViewFile = item.viewAccessibility.WebView; const isMasterForm = item.fileExst === ".docxf"; const isPdf = item.fileExst === ".pdf"; @@ -1984,7 +1985,7 @@ class FilesStore { fileOptions = this.removeOptions(fileOptions, ["download-as"]); } - if (!canConvert || isEncrypted) { + if (!mustConvert || isEncrypted) { fileOptions = this.removeOptions(fileOptions, ["convert"]); } @@ -2044,8 +2045,8 @@ class FilesStore { if (enablePlugins) { if ( - !item.viewAccessability.MediaView && - !item.viewAccessability.ImageView + !item.viewAccessibility.MediaView && + !item.viewAccessibility.ImageView ) { const pluginFilesKeys = this.pluginStore.getContextMenuKeysByType( PluginFileType.Files, @@ -2060,8 +2061,8 @@ class FilesStore { } if ( - !item.viewAccessability.MediaView && - item.viewAccessability.ImageView + !item.viewAccessibility.MediaView && + item.viewAccessibility.ImageView ) { const pluginFilesKeys = this.pluginStore.getContextMenuKeysByType( PluginFileType.Image, @@ -2076,8 +2077,8 @@ class FilesStore { } if ( - item.viewAccessability.MediaView && - !item.viewAccessability.ImageView + item.viewAccessibility.MediaView && + !item.viewAccessibility.ImageView ) { const pluginFilesKeys = this.pluginStore.getContextMenuKeysByType( PluginFileType.Video, @@ -3014,7 +3015,7 @@ class FilesStore { tags, pinned, security, - viewAccessability, + viewAccessibility, mute, inRoom = true, } = item; @@ -3030,7 +3031,7 @@ class FilesStore { ]; const canOpenPlayer = - item.viewAccessability?.ImageView || item.viewAccessability?.MediaView; + item.viewAccessibility?.ImageView || item.viewAccessibility?.MediaView; const previewUrl = canOpenPlayer ? this.getItemUrl(id, false, needConvert, canOpenPlayer) @@ -3049,7 +3050,7 @@ class FilesStore { const folderUrl = isFolder && this.getItemUrl(id, isFolder, false, false); - const needConvert = item.viewAccessability?.Convert; + const needConvert = item.viewAccessibility?.MustConvert; const isEditing = (item.fileStatus & FileStatus.IsEditing) === FileStatus.IsEditing; @@ -3167,7 +3168,7 @@ class FilesStore { thirdPartyIcon, providerType, security, - viewAccessability, + viewAccessibility, ...pluginOptions, inRoom, isForm, @@ -3200,9 +3201,9 @@ class FilesStore { cbMenu.push(FilterType.PresentationsOnly); else if (isSpreadsheet(item.fileExst)) cbMenu.push(FilterType.SpreadsheetsOnly); - else if (item.viewAccessability?.ImageView) + else if (item.viewAccessibility?.ImageView) cbMenu.push(FilterType.ImagesOnly); - else if (item.viewAccessability?.MediaView) + else if (item.viewAccessibility?.MediaView) cbMenu.push(FilterType.MediaOnly); else if (isArchive(item.fileExst)) cbMenu.push(FilterType.ArchiveOnly); } @@ -3302,13 +3303,8 @@ class FilesStore { }; get sortedFiles() { - const { - extsConvertible, - isSpreadsheet, - isPresentation, - isDocument, - isMasterFormExtension, - } = this.filesSettingsStore; + const { isSpreadsheet, isPresentation, isDocument, isMasterFormExtension } = + this.filesSettingsStore; let sortedFiles = { documents: [], @@ -3330,9 +3326,7 @@ class FilesStore { item.checked = true; item.format = null; - const canConvert = extsConvertible[item.fileExst]; - - if (item.fileExst && canConvert) { + if (item.fileExst && item.viewAccessibility?.CanConvert) { if (isSpreadsheet(item.fileExst)) { sortedFiles.spreadsheets.push(item); } else if (isPresentation(item.fileExst)) { @@ -3390,8 +3384,6 @@ class FilesStore { } get canConvertSelected() { - const { extsConvertible } = this.filesSettingsStore; - const selection = this.selection.length ? this.selection : this.bufferSelection @@ -3399,16 +3391,21 @@ class FilesStore { : []; return selection.some((selected) => { - if (selected.isFolder === true || !selected.fileExst) return false; - const array = extsConvertible[selected.fileExst]; - return array; + if ( + selected.isFolder === true || + !selected.fileExst || + !selected.viewAccessibility + ) + return false; + + return selected.viewAccessibility?.CanConvert; }); } get isViewedSelected() { return this.selection.some((selected) => { if (selected.isFolder === true || !selected.fileExst) return false; - return selected.viewAccessability?.WebView; + return selected.viewAccessibility?.WebView; }); } @@ -3416,8 +3413,8 @@ class FilesStore { return this.selection.some((selected) => { if (selected.isFolder === true || !selected.fileExst) return false; return ( - selected.viewAccessability?.ImageView || - selected.viewAccessability?.MediaView + selected.viewAccessibility?.ImageView || + selected.viewAccessibility?.MediaView ); }); } @@ -3469,21 +3466,23 @@ class FilesStore { AccessOptions.push("ReadOnly", "DenyAccess"); - const webEdit = selection.find((x) => x.viewAccessability?.WebEdit); + const webEdit = selection.find((x) => x.viewAccessibility?.WebEdit); - const webComment = selection.find((x) => x.viewAccessability?.WebComment); + const webComment = selection.find((x) => x.viewAccessibility?.WebComment); - const webReview = selection.find((x) => x.viewAccessability?.WebReview); + const webReview = selection.find((x) => x.viewAccessibility?.WebReview); const formFillingDocs = selection.find( - (x) => x.viewAccessability?.WebRestrictedEditing + (x) => x.viewAccessibility?.WebRestrictedEditing ); const webFilter = selection.find( - (x) => x.viewAccessability?.WebCustomFilterEditing + (x) => x.viewAccessibility?.WebCustomFilterEditing ); - const webNeedConvert = selection.find((x) => x.viewAccessability?.Convert); + const webNeedConvert = selection.find( + (x) => x.viewAccessibility?.MustConvert + ); if ((webEdit && !webNeedConvert) || !externalAccess) AccessOptions.push("FullAccess"); diff --git a/packages/client/src/store/MediaViewerDataStore.js b/packages/client/src/store/MediaViewerDataStore.js index 2e846f3194..98d8d120f2 100644 --- a/packages/client/src/store/MediaViewerDataStore.js +++ b/packages/client/src/store/MediaViewerDataStore.js @@ -166,8 +166,8 @@ class MediaViewerDataStore { if (filesList.length > 0) { filesList.forEach((file) => { const canOpenPlayer = - file.viewAccessability.ImageView || - file.viewAccessability.MediaView || + file.viewAccessibility.ImageView || + file.viewAccessibility.MediaView || (file.fileExst === ".pdf" && window.DocSpaceConfig.pdfViewer); if (canOpenPlayer) { @@ -187,7 +187,7 @@ class MediaViewerDataStore { file.thumbnailStatus === thumbnailStatuses.WAITING; const isVideoOrImage = - file.viewAccessability.ImageView || isVideo(file.fileExst); + file.viewAccessibility.ImageView || isVideo(file.fileExst); if (thumbnailIsNotCreated && isVideoOrImage) itemsWithoutThumb.push(file); @@ -210,7 +210,7 @@ class MediaViewerDataStore { thumbnailUrl: this.previewFile.thumbnailUrl, }); - if (this.previewFile.viewAccessability.ImageView) { + if (this.previewFile.viewAccessibility.ImageView) { itemsWithoutThumb.push(this.previewFile); } } diff --git a/packages/common/components/MediaViewer/helpers/contextModel.ts b/packages/common/components/MediaViewer/helpers/contextModel.ts index 294c47a801..16077ee0d1 100644 --- a/packages/common/components/MediaViewer/helpers/contextModel.ts +++ b/packages/common/components/MediaViewer/helpers/contextModel.ts @@ -44,7 +44,7 @@ export const getPDFContextModel = ( label: t("Common:EditButton"), icon: AccessEditReactSvgUrl, onClick: () => funcs.onClickLinkEdit(item), - disabled: !item.viewAccessability.WebEdit, + disabled: !item.viewAccessibility.WebEdit, }, { id: "option_preview", diff --git a/packages/common/components/MediaViewer/index.tsx b/packages/common/components/MediaViewer/index.tsx index 13cc824ea3..7101d3301a 100644 --- a/packages/common/components/MediaViewer/index.tsx +++ b/packages/common/components/MediaViewer/index.tsx @@ -217,13 +217,13 @@ function MediaViewer({ if ( item.value.fileType && item.value.fileType.includes("image") && - !targetFile.viewAccessability.ImageView + !targetFile.viewAccessibility.ImageView ) return; if ( item.value.fileType && item.value.fileType.includes("video") && - !targetFile.viewAccessability.MediaView + !targetFile.viewAccessibility.MediaView ) return; diff --git a/packages/common/components/MediaViewer/types/index.ts b/packages/common/components/MediaViewer/types/index.ts index f5f229d67b..440467146c 100644 --- a/packages/common/components/MediaViewer/types/index.ts +++ b/packages/common/components/MediaViewer/types/index.ts @@ -94,7 +94,7 @@ export interface IFile { updatedBy: CreatedType; version: number; versionGroup: number; - viewAccessability: ViewAccessabilityType; + viewAccessibility: ViewAccessabilityType; viewUrl: string; webUrl: string; } diff --git a/packages/common/store/SettingsStore.js b/packages/common/store/SettingsStore.js index 323a99e404..ca93540203 100644 --- a/packages/common/store/SettingsStore.js +++ b/packages/common/store/SettingsStore.js @@ -1082,7 +1082,9 @@ class SettingsStore { } get enablePortalRename() { - return this.standalone && this.baseDomain !== "localhost"; + return ( + !this.standalone || (this.standalone && this.baseDomain !== "localhost") + ); } } diff --git a/packages/components/context-menu/index.js b/packages/components/context-menu/index.js index 25524d26f9..05689483ca 100644 --- a/packages/components/context-menu/index.js +++ b/packages/components/context-menu/index.js @@ -2,6 +2,7 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import DomHelpers from "../utils/domHelpers"; import { classNames } from "../utils/classNames"; +import { trimSeparator } from "../utils/trimSeparator"; import { CSSTransition } from "react-transition-group"; import { withTheme } from "styled-components"; @@ -54,7 +55,7 @@ class ContextMenu extends Component { show = (e) => { if (this.props.getContextModel) { - const model = this.props.getContextModel(); + const model = trimSeparator(this.props.getContextModel()); this.setState({ model }); } diff --git a/packages/components/context-menu/styled-context-menu.js b/packages/components/context-menu/styled-context-menu.js index ffda8a2230..05a0eb5775 100644 --- a/packages/components/context-menu/styled-context-menu.js +++ b/packages/components/context-menu/styled-context-menu.js @@ -24,11 +24,6 @@ const styledTabletView = css` `} bottom: ${(props) => props.theme.newContextMenu.devices.bottom}; margin: ${(props) => props.theme.newContextMenu.devices.margin}; - - .scroller, - .scroll-wrapper { - overflow: unset !important; - } `; const styledMobileView = css` diff --git a/packages/components/context-menu/sub-components/sub-menu.js b/packages/components/context-menu/sub-components/sub-menu.js index a0d2c7c205..7d9c1de12f 100644 --- a/packages/components/context-menu/sub-components/sub-menu.js +++ b/packages/components/context-menu/sub-components/sub-menu.js @@ -15,7 +15,7 @@ import ToggleButton from "../../toggle-button"; import { SubMenuItem } from "../styled-context-menu"; import ContextMenuSkeleton from "../../skeletons/context-menu"; -import { isMobile } from "../../utils/device"; +import { isMobile, isTablet } from "../../utils/device"; const SubMenu = (props) => { const { @@ -36,7 +36,7 @@ const SubMenu = (props) => { const theme = useTheme(); const onItemMouseEnter = (e, item) => { - if (item.disabled || isMobile()) { + if (item.disabled || isTablet() || isMobile()) { e.preventDefault(); return; } @@ -47,9 +47,9 @@ const SubMenu = (props) => { const onItemClick = (e, item) => { if (item.onLoad) { e.preventDefault(); - if (!isMobile()) return; + if (!isMobile() && !isTablet()) return; - if (isMobile()) onMobileItemClick(e, item.onLoad); + if (isMobile() || isTablet()) onMobileItemClick(e, item.onLoad); else onLeafClick(e); return; } diff --git a/packages/components/file-input/README.md b/packages/components/file-input/README.md index 62e019cf16..df4849e5eb 100644 --- a/packages/components/file-input/README.md +++ b/packages/components/file-input/README.md @@ -11,7 +11,7 @@ import FileInput from "@docspace/components/file-input"; ```jsx { console.log( file, diff --git a/packages/components/file-input/file-input.stories.js b/packages/components/file-input/file-input.stories.js index 39b860b46a..72d53a63ff 100644 --- a/packages/components/file-input/file-input.stories.js +++ b/packages/components/file-input/file-input.stories.js @@ -42,5 +42,5 @@ Default.args = { name: "demoFileInputName", hasError: false, hasWarning: false, - accept: ".doc, .docx", + accept: [".doc", ".docx"], }; diff --git a/packages/components/file-input/index.js b/packages/components/file-input/index.js index ee68541082..77b6c934b5 100644 --- a/packages/components/file-input/index.js +++ b/packages/components/file-input/index.js @@ -94,8 +94,8 @@ class FileInput extends Component { return ( {({ getRootProps, getInputProps }) => ( {}} diff --git a/packages/components/textarea/index.js b/packages/components/textarea/index.js index 642786148b..750a18ccc5 100644 --- a/packages/components/textarea/index.js +++ b/packages/components/textarea/index.js @@ -104,7 +104,7 @@ const Textarea = ({ className="textarea-wrapper" isJSONField={isJSONField} enableCopy={enableCopy} - onFocus={enableCopy ? onTextareaClick : undefined} + onClick={onTextareaClick} > {enableCopy && ( -1 && fileInfo && fileInfo?.fileExst && - fileInfo?.viewAccessability?.Convert && + fileInfo?.viewAccessibility?.MustConvert && fileInfo?.security?.Convert ) { showDocEditorMessage(url); @@ -321,7 +321,10 @@ function Editor({ if (index) { let convertUrl = url.substring(0, index); - if (fileInfo?.viewAccessability?.Convert && fileInfo?.security?.Convert) { + if ( + fileInfo?.viewAccessibility?.MustConvert && + fileInfo?.security?.Convert + ) { const newUrl = await convertDocumentUrl(); if (newUrl) { convertUrl = newUrl.webUrl; diff --git a/packages/editor/src/client/helpers/deepLinkHelper.js b/packages/editor/src/client/helpers/deepLinkHelper.js index 08ff17b770..cc37136576 100644 --- a/packages/editor/src/client/helpers/deepLinkHelper.js +++ b/packages/editor/src/client/helpers/deepLinkHelper.js @@ -3,7 +3,7 @@ export const getDeepLink = (location, email, file, url) => { portal: location, email: email, file: { - id: file.fileId, + id: file.id, }, folder: { id: file.folderId, diff --git a/yarn.lock b/yarn.lock index 63eec4e9bf..33276d9d20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2172,7 +2172,11 @@ __metadata: languageName: node linkType: hard +<<<<<<< HEAD "@babel/plugin-transform-runtime@npm:^7.12.1, @babel/plugin-transform-runtime@npm:^7.15.0, @babel/plugin-transform-runtime@npm:^7.21.0": +======= +"@babel/plugin-transform-runtime@npm:^7.12.1, @babel/plugin-transform-runtime@npm:^7.21.0": +>>>>>>> develop version: 7.23.4 resolution: "@babel/plugin-transform-runtime@npm:7.23.4" dependencies: @@ -8734,7 +8738,11 @@ __metadata: languageName: node linkType: hard +<<<<<<< HEAD "@types/node@npm:^18.15.5, @types/node@npm:^18.6.1": +======= +"@types/node@npm:^18.15.5": +>>>>>>> develop version: 18.18.11 resolution: "@types/node@npm:18.18.11" dependencies: @@ -8819,7 +8827,11 @@ __metadata: languageName: node linkType: hard +<<<<<<< HEAD "@types/react-dom@npm:*, @types/react-dom@npm:^18.0.11, @types/react-dom@npm:^18.0.6": +======= +"@types/react-dom@npm:*, @types/react-dom@npm:^18.0.11": +>>>>>>> develop version: 18.2.16 resolution: "@types/react-dom@npm:18.2.16" dependencies: @@ -8846,7 +8858,11 @@ __metadata: languageName: node linkType: hard +<<<<<<< HEAD "@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.15, @types/react@npm:^18.0.28": +======= +"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.28": +>>>>>>> develop version: 18.2.38 resolution: "@types/react@npm:18.2.38" dependencies: @@ -8924,7 +8940,11 @@ __metadata: languageName: node linkType: hard +<<<<<<< HEAD "@types/styled-components@npm:^5.1.25, @types/styled-components@npm:^5.1.26": +======= +"@types/styled-components@npm:^5.1.26": +>>>>>>> develop version: 5.1.31 resolution: "@types/styled-components@npm:5.1.31" dependencies: