Merge branch 'develop' into feature/management

This commit is contained in:
Viktor Fomin 2023-11-23 15:09:41 +03:00
commit 61cd437ee0
41 changed files with 216 additions and 108 deletions

22
.github/workflows/trigger-action.yml vendored Normal file
View File

@ -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}"'"]}}'

30
.vscode/tasks.json vendored
View File

@ -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",

View File

@ -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",

View File

@ -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 && (

View File

@ -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,

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -75,8 +75,8 @@ const Details = ({
{selection.thumbnailUrl && !isThumbnailError ? (
<StyledThumbnail
isImageOrMedia={
selection?.viewAccessability?.ImageView ||
selection?.viewAccessability?.MediaView
selection?.viewAccessibility?.ImageView ||
selection?.viewAccessibility?.MediaView
}
>
<img

View File

@ -15,13 +15,13 @@ const FileNameCell = ({
t,
inProgress,
}) => {
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 (
<>

View File

@ -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 (
<>

View File

@ -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}
>

View File

@ -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));

View File

@ -112,8 +112,13 @@ const Customization = (props) => {
<WelcomePageSettings isMobileView={viewMobile} />
<StyledSettingsSeparator />
<DNSSettings isMobileView={viewMobile} />
<StyledSettingsSeparator />
{enablePortalRename && <PortalRenaming isMobileView={viewMobile} />}
{enablePortalRename && (
<>
<StyledSettingsSeparator />
<PortalRenaming isMobileView={viewMobile} />
</>
)}
</StyledComponent>
);
};

View File

@ -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"]}
/>
);
};

View File

@ -152,7 +152,7 @@ const UploadXML = (props) => {
<FileInput
idButton="select-file"
accept=".xml"
accept={[".xml"]}
buttonLabel={t("Common:SelectFile")}
className="xml-upload-file"
isDisabled={!enableSso || isLoadingXml}

View File

@ -69,7 +69,7 @@ const LicenseContainer = (props) => {
className="payments_file-input"
scale
size="base"
accept=".lic"
accept={[".lic"]}
placeholder={t("UploadLicenseFile")}
onInput={onLicenseFileHandler}
isDisabled={isLicenseUploading || isLoading}

View File

@ -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

View File

@ -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 && (
<>
<span>{t("Version")}</span>&nbsp;<span>{versionGroup}</span>
<span>{t("Version")}</span>
<span>{versionGroup}</span>
</>
)}
</VersionBadgeText>

View File

@ -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;

View File

@ -379,7 +379,7 @@ const Wizard = (props) => {
<FileInput
scale
size="large"
accept=".lic"
accept={[".lic"]}
placeholder={t("PlaceholderLicense")}
onInput={onLicenseFileHandler}
hasError={hasErrorLicense}
@ -401,8 +401,8 @@ const Wizard = (props) => {
<ComboBox
withoutPadding
directionY="both"
options={cultureNames}
selectedOption={selectedLanguage}
options={cultureNames || []}
selectedOption={selectedLanguage || {}}
onSelect={onLanguageSelect}
isDisabled={isCreated}
scaled={isMobile()}
@ -425,8 +425,8 @@ const Wizard = (props) => {
textOverflow
withoutPadding
directionY="both"
options={timezones}
selectedOption={selectedTimezone}
options={timezones || []}
selectedOption={selectedTimezone || {}}
onSelect={onTimezoneSelect}
isDisabled={isCreated}
scaled={isMobile()}

View File

@ -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");

View File

@ -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);

View File

@ -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");

View File

@ -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);
}
}

View File

@ -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",

View File

@ -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;

View File

@ -94,7 +94,7 @@ export interface IFile {
updatedBy: CreatedType;
version: number;
versionGroup: number;
viewAccessability: ViewAccessabilityType;
viewAccessibility: ViewAccessabilityType;
viewUrl: string;
webUrl: string;
}

View File

@ -1082,7 +1082,9 @@ class SettingsStore {
}
get enablePortalRename() {
return this.standalone && this.baseDomain !== "localhost";
return (
!this.standalone || (this.standalone && this.baseDomain !== "localhost")
);
}
}

View File

@ -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 });
}

View File

@ -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`

View File

@ -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;
}

View File

@ -11,7 +11,7 @@ import FileInput from "@docspace/components/file-input";
```jsx
<FileInput
placeholder="Input file"
accept=".doc, .docx"
accept={[".doc", ".docx"]}
onInput={(file) => {
console.log(
file,

View File

@ -42,5 +42,5 @@ Default.args = {
name: "demoFileInputName",
hasError: false,
hasWarning: false,
accept: ".doc, .docx",
accept: [".doc", ".docx"],
};

View File

@ -94,8 +94,8 @@ class FileInput extends Component {
return (
<Dropzone
onDrop={this.onDrop}
{...(accept && { accept: [accept] })}
noClick={isDisabled || isLoading}
accept={accept}
>
{({ getRootProps, getInputProps }) => (
<StyledFileInput

View File

@ -14,7 +14,7 @@ import Submenu from "@docspace/components/submenu";
name: "File Input",
content: (
<FileInput
accept=".doc, .docx"
accept={[".doc", ".docx"]}
id="file-input-id"
name="demoFileInputName"
onInput={function noRefCheck() {}}
@ -53,7 +53,7 @@ import Submenu from "@docspace/components/submenu";
name: "File Input",
content: (
<FileInput
accept=".doc, .docx"
accept={[".doc", ".docx"]}
id="file-input-id"
name="demoFileInputName"
onInput={function noRefCheck() {}}

View File

@ -9,7 +9,7 @@ export const data = [
name: "Overview",
content: (
<FileInput
accept=".doc, .docx"
accept={[".doc", ".docx"]}
id="file-input-id"
name="demoFileInputName"
onInput={() => {}}

View File

@ -104,7 +104,7 @@ const Textarea = ({
className="textarea-wrapper"
isJSONField={isJSONField}
enableCopy={enableCopy}
onFocus={enableCopy ? onTextareaClick : undefined}
onClick={onTextareaClick}
>
{enableCopy && (
<CopyIconWrapper

View File

@ -202,7 +202,7 @@ function Editor({
if (
!view &&
fileInfo &&
fileInfo.viewAccessability.WebRestrictedEditing &&
fileInfo.viewAccessibility.WebRestrictedEditing &&
fileInfo.security.FillForms &&
!fileInfo.security.Edit &&
!config?.document?.isLinkedForMe
@ -238,7 +238,7 @@ function Editor({
url.indexOf("#message/") > -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;

View File

@ -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,

View File

@ -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: