Merge branch 'develop' into feature/management
This commit is contained in:
commit
61cd437ee0
22
.github/workflows/trigger-action.yml
vendored
Normal file
22
.github/workflows/trigger-action.yml
vendored
Normal 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
30
.vscode/tasks.json
vendored
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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 && (
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -75,8 +75,8 @@ const Details = ({
|
||||
{selection.thumbnailUrl && !isThumbnailError ? (
|
||||
<StyledThumbnail
|
||||
isImageOrMedia={
|
||||
selection?.viewAccessability?.ImageView ||
|
||||
selection?.viewAccessability?.MediaView
|
||||
selection?.viewAccessibility?.ImageView ||
|
||||
selection?.viewAccessibility?.MediaView
|
||||
}
|
||||
>
|
||||
<img
|
||||
|
@ -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 (
|
||||
<>
|
||||
|
@ -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 (
|
||||
<>
|
||||
|
@ -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}
|
||||
>
|
||||
|
@ -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));
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
@ -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"]}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
@ -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
|
||||
|
@ -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> <span>{versionGroup}</span>
|
||||
<span>{t("Version")}</span>
|
||||
<span>{versionGroup}</span>
|
||||
</>
|
||||
)}
|
||||
</VersionBadgeText>
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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()}
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
|
||||
|
@ -94,7 +94,7 @@ export interface IFile {
|
||||
updatedBy: CreatedType;
|
||||
version: number;
|
||||
versionGroup: number;
|
||||
viewAccessability: ViewAccessabilityType;
|
||||
viewAccessibility: ViewAccessabilityType;
|
||||
viewUrl: string;
|
||||
webUrl: string;
|
||||
}
|
||||
|
@ -1082,7 +1082,9 @@ class SettingsStore {
|
||||
}
|
||||
|
||||
get enablePortalRename() {
|
||||
return this.standalone && this.baseDomain !== "localhost";
|
||||
return (
|
||||
!this.standalone || (this.standalone && this.baseDomain !== "localhost")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 });
|
||||
}
|
||||
|
||||
|
@ -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`
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -42,5 +42,5 @@ Default.args = {
|
||||
name: "demoFileInputName",
|
||||
hasError: false,
|
||||
hasWarning: false,
|
||||
accept: ".doc, .docx",
|
||||
accept: [".doc", ".docx"],
|
||||
};
|
||||
|
@ -94,8 +94,8 @@ class FileInput extends Component {
|
||||
return (
|
||||
<Dropzone
|
||||
onDrop={this.onDrop}
|
||||
{...(accept && { accept: [accept] })}
|
||||
noClick={isDisabled || isLoading}
|
||||
accept={accept}
|
||||
>
|
||||
{({ getRootProps, getInputProps }) => (
|
||||
<StyledFileInput
|
||||
|
@ -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() {}}
|
||||
|
@ -9,7 +9,7 @@ export const data = [
|
||||
name: "Overview",
|
||||
content: (
|
||||
<FileInput
|
||||
accept=".doc, .docx"
|
||||
accept={[".doc", ".docx"]}
|
||||
id="file-input-id"
|
||||
name="demoFileInputName"
|
||||
onInput={() => {}}
|
||||
|
@ -104,7 +104,7 @@ const Textarea = ({
|
||||
className="textarea-wrapper"
|
||||
isJSONField={isJSONField}
|
||||
enableCopy={enableCopy}
|
||||
onFocus={enableCopy ? onTextareaClick : undefined}
|
||||
onClick={onTextareaClick}
|
||||
>
|
||||
{enableCopy && (
|
||||
<CopyIconWrapper
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
20
yarn.lock
20
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:
|
||||
|
Loading…
Reference in New Issue
Block a user