Merge branch 'release/v2.5.0' of github.com:ONLYOFFICE/DocSpace-client into release/v2.5.0
This commit is contained in:
commit
fccbb83a98
@ -24,7 +24,7 @@
|
||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
import React from "react";
|
||||
import { useCallback } from "react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
@ -43,6 +43,8 @@ export default function withContent(WrappedContent) {
|
||||
selectRow,
|
||||
singleContextMenuAction,
|
||||
multipleContextMenuAction,
|
||||
resetSelections,
|
||||
openGroupAction,
|
||||
|
||||
theme,
|
||||
getModel,
|
||||
@ -62,10 +64,33 @@ export default function withContent(WrappedContent) {
|
||||
: multipleContextMenuAction(item);
|
||||
};
|
||||
|
||||
const onContentRowClick = (user) => {
|
||||
const onContentRowClick = (e, user) => {
|
||||
if (
|
||||
e.target?.tagName === "A" ||
|
||||
e.target.closest(".checkbox") ||
|
||||
e.target.closest(".table-container_row-checkbox") ||
|
||||
e.target.closest(".type-combobox") ||
|
||||
e.target.closest(".groups-combobox") ||
|
||||
e.target.closest(".paid-badge") ||
|
||||
e.target.closest(".pending-badge") ||
|
||||
e.target.closest(".disabled-badge") ||
|
||||
e.target.closest(".dropdown-container") ||
|
||||
e.detail === 0
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
selectRow(user);
|
||||
};
|
||||
|
||||
const onOpenGroup = useCallback(
|
||||
(groupId, withBackURL, tempTitle) => {
|
||||
resetSelections();
|
||||
openGroupAction(groupId, withBackURL, tempTitle);
|
||||
},
|
||||
[resetSelections, openGroupAction],
|
||||
);
|
||||
|
||||
const checkedProps = { checked };
|
||||
|
||||
const element = (
|
||||
@ -106,6 +131,7 @@ export default function withContent(WrappedContent) {
|
||||
element={element}
|
||||
contextOptionsProps={contextOptionsProps}
|
||||
value={value}
|
||||
onOpenGroup={onOpenGroup}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
@ -116,6 +142,7 @@ export default function withContent(WrappedContent) {
|
||||
|
||||
const { getTargetUser } = peopleStore.targetUserStore;
|
||||
const { selectionStore, contextOptionsStore } = peopleStore;
|
||||
const { openGroupAction } = peopleStore.groupsStore;
|
||||
|
||||
const { getModel } = contextOptionsStore;
|
||||
|
||||
@ -128,6 +155,7 @@ export default function withContent(WrappedContent) {
|
||||
selectRow,
|
||||
singleContextMenuAction,
|
||||
multipleContextMenuAction,
|
||||
resetSelections,
|
||||
} = selectionStore;
|
||||
|
||||
return {
|
||||
@ -145,6 +173,8 @@ export default function withContent(WrappedContent) {
|
||||
selectRow,
|
||||
singleContextMenuAction,
|
||||
multipleContextMenuAction,
|
||||
resetSelections,
|
||||
openGroupAction,
|
||||
};
|
||||
})(observer(WithContent));
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ const ChangeRoomOwner = ({
|
||||
<div className="change-owner-display">
|
||||
<Avatar
|
||||
className={"change-owner-display-avatar"}
|
||||
size="base"
|
||||
size="min"
|
||||
role={""}
|
||||
isDefaultSource={roomOwner.hasAvatar}
|
||||
source={roomOwner.avatarSmall ?? roomOwner.avatar}
|
||||
|
@ -137,6 +137,13 @@ const DeleteDialogComponent = (props) => {
|
||||
};
|
||||
|
||||
const onClose = () => {
|
||||
if (
|
||||
selection.length === 1 &&
|
||||
selection[0].isArchive &&
|
||||
selection[0].isRootFolder === false
|
||||
) {
|
||||
setSelected("none");
|
||||
}
|
||||
setBufferSelection(null);
|
||||
setRemoveMediaItem(null);
|
||||
setIsRoomDelete(false);
|
||||
|
@ -130,9 +130,10 @@ const SimpleUserRow = (props) => {
|
||||
|
||||
const isChecked = checkedProps.checked;
|
||||
|
||||
const onRowClick = React.useCallback(() => {
|
||||
onContentRowClick && onContentRowClick(item);
|
||||
}, [item, onContentRowClick]);
|
||||
const onRowClick = React.useCallback(
|
||||
(e) => onContentRowClick?.(e, item),
|
||||
[item, onContentRowClick],
|
||||
);
|
||||
|
||||
const onRowContextClick = React.useCallback(
|
||||
(rightMouseButtonClick) => {
|
||||
|
@ -152,7 +152,6 @@ const Table = ({
|
||||
fetchMoreInsideGroupUsers,
|
||||
insideGroupFilterTotal,
|
||||
hasMoreInsideGroupUsers,
|
||||
openGroupAction,
|
||||
}) => {
|
||||
const ref = useRef(null);
|
||||
const [hideColumns, setHideColumns] = React.useState(false);
|
||||
@ -213,7 +212,6 @@ const Table = ({
|
||||
emailAccountsInsideGroupColumnIsEnabled
|
||||
}
|
||||
infoPanelVisible={infoPanelVisible}
|
||||
openGroupAction={openGroupAction}
|
||||
/>
|
||||
))}
|
||||
</TableBody>
|
||||
@ -252,7 +250,6 @@ export default inject(
|
||||
|
||||
const {
|
||||
insideGroupIsLoading,
|
||||
openGroupAction,
|
||||
insideGroupFilterTotal,
|
||||
hasMoreInsideGroupUsers,
|
||||
fetchMoreInsideGroupUsers,
|
||||
@ -280,7 +277,6 @@ export default inject(
|
||||
fetchMoreInsideGroupUsers,
|
||||
insideGroupFilterTotal,
|
||||
hasMoreInsideGroupUsers,
|
||||
openGroupAction,
|
||||
};
|
||||
},
|
||||
)(observer(Table));
|
||||
|
@ -218,7 +218,7 @@ const InsideGroupTableRow = (props) => {
|
||||
hideColumns,
|
||||
value,
|
||||
standalone,
|
||||
openGroupAction,
|
||||
onOpenGroup,
|
||||
|
||||
typeAccountsInsideGroupColumnIsEnabled,
|
||||
groupAccountsInsideGroupColumnIsEnabled,
|
||||
@ -311,9 +311,9 @@ const InsideGroupTableRow = (props) => {
|
||||
[item, changeUserType],
|
||||
);
|
||||
|
||||
const onOpenGroup = React.useCallback(
|
||||
({ action, title }) => openGroupAction(action, false, title),
|
||||
[openGroupAction],
|
||||
const onOpenGroupClick = React.useCallback(
|
||||
({ action, title }) => onOpenGroup(action, false, title),
|
||||
[onOpenGroup],
|
||||
);
|
||||
|
||||
// const getRoomsOptions = React.useCallback(() => {
|
||||
@ -376,7 +376,7 @@ const InsideGroupTableRow = (props) => {
|
||||
label: groups[0].name + " ",
|
||||
}}
|
||||
plusBadgeValue={groups.length - 1}
|
||||
onSelect={onOpenGroup}
|
||||
onSelect={onOpenGroupClick}
|
||||
options={groupItems}
|
||||
scaled={false}
|
||||
directionY="both"
|
||||
@ -462,24 +462,8 @@ const InsideGroupTableRow = (props) => {
|
||||
[item, onUserContextClick],
|
||||
);
|
||||
|
||||
const onRowClick = (e) => {
|
||||
if (
|
||||
e.target.closest(".checkbox") ||
|
||||
e.target.closest(".table-container_row-checkbox") ||
|
||||
e.target.closest(".type-combobox") ||
|
||||
e.target.closest(".groups-combobox") ||
|
||||
e.target.closest(".paid-badge") ||
|
||||
e.target.closest(".pending-badge") ||
|
||||
e.target.closest(".disabled-badge") ||
|
||||
e.detail === 0
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const onRowClick = (e) => onContentRowClick?.(e, item);
|
||||
|
||||
//console.log("onRowClick");
|
||||
|
||||
onContentRowClick && onContentRowClick(item);
|
||||
};
|
||||
const isPaidUser = !standalone && !isVisitor;
|
||||
return (
|
||||
<StyledWrapper
|
||||
|
@ -130,9 +130,10 @@ const SimpleUserRow = (props) => {
|
||||
|
||||
const isChecked = checkedProps.checked;
|
||||
|
||||
const onRowClick = React.useCallback(() => {
|
||||
onContentRowClick && onContentRowClick(item);
|
||||
}, [item, onContentRowClick]);
|
||||
const onRowClick = React.useCallback(
|
||||
(e) => onContentRowClick?.(e, item),
|
||||
[item, onContentRowClick],
|
||||
);
|
||||
|
||||
const onRowContextClick = React.useCallback(
|
||||
(rightMouseButtonClick) => {
|
||||
|
@ -223,7 +223,7 @@ const PeopleTableRow = (props) => {
|
||||
hideColumns,
|
||||
value,
|
||||
standalone,
|
||||
openGroupAction,
|
||||
onOpenGroup,
|
||||
showStorageInfo,
|
||||
typeAccountsColumnIsEnabled,
|
||||
emailAccountsColumnIsEnabled,
|
||||
@ -315,9 +315,9 @@ const PeopleTableRow = (props) => {
|
||||
[item, changeUserType],
|
||||
);
|
||||
|
||||
const onOpenGroup = React.useCallback(
|
||||
({ action, title }) => openGroupAction(action, true, title),
|
||||
[openGroupAction],
|
||||
const onOpenGroupClick = React.useCallback(
|
||||
({ action, title }) => onOpenGroup(action, true, title),
|
||||
[onOpenGroup],
|
||||
);
|
||||
|
||||
// const getRoomsOptions = React.useCallback(() => {
|
||||
@ -380,7 +380,7 @@ const PeopleTableRow = (props) => {
|
||||
label: groups[0].name + " ",
|
||||
}}
|
||||
plusBadgeValue={groups.length - 1}
|
||||
onSelect={onOpenGroup}
|
||||
onSelect={onOpenGroupClick}
|
||||
options={groupItems}
|
||||
scaled={false}
|
||||
directionY="both"
|
||||
@ -400,7 +400,7 @@ const PeopleTableRow = (props) => {
|
||||
fontSize="13px"
|
||||
fontWeight={600}
|
||||
color={sideInfoColor}
|
||||
onClick={() => onOpenGroup({ action: groups[0].id })}
|
||||
onClick={() => onOpenGroupClick({ action: groups[0].id })}
|
||||
isTextOverflow
|
||||
>
|
||||
{groups[0].name}
|
||||
@ -465,22 +465,8 @@ const PeopleTableRow = (props) => {
|
||||
[item, onUserContextClick],
|
||||
);
|
||||
|
||||
const onRowClick = (e) => {
|
||||
if (
|
||||
e.target.closest(".checkbox") ||
|
||||
e.target.closest(".table-container_row-checkbox") ||
|
||||
e.target.closest(".type-combobox") ||
|
||||
e.target.closest(".groups-combobox") ||
|
||||
e.target.closest(".paid-badge") ||
|
||||
e.target.closest(".pending-badge") ||
|
||||
e.target.closest(".disabled-badge") ||
|
||||
e.detail === 0
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const onRowClick = (e) => onContentRowClick?.(e, item);
|
||||
|
||||
onContentRowClick && onContentRowClick(item);
|
||||
};
|
||||
const isPaidUser = !standalone && !isVisitor;
|
||||
return (
|
||||
<StyledWrapper
|
||||
@ -621,14 +607,11 @@ const PeopleTableRow = (props) => {
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ currentQuotaStore, peopleStore }) => {
|
||||
export default inject(({ currentQuotaStore }) => {
|
||||
const { showStorageInfo } = currentQuotaStore;
|
||||
|
||||
const { openGroupAction } = peopleStore.groupsStore;
|
||||
|
||||
return {
|
||||
showStorageInfo,
|
||||
openGroupAction,
|
||||
};
|
||||
})(
|
||||
withContent(
|
||||
|
@ -146,11 +146,6 @@ const StyledContainer = styled.div`
|
||||
min-height: 33px;
|
||||
align-items: center;
|
||||
|
||||
${(props) =>
|
||||
props.hideContextMenuInsideArchiveRoom &&
|
||||
`.option-button {
|
||||
display: none;}`}
|
||||
|
||||
@media ${tablet} {
|
||||
height: 61px;
|
||||
}
|
||||
@ -238,7 +233,6 @@ const SectionHeaderContent = (props) => {
|
||||
isGroupMenuBlocked,
|
||||
|
||||
onClickBack,
|
||||
hideContextMenuInsideArchiveRoom,
|
||||
activeFiles,
|
||||
activeFolders,
|
||||
selectedFolder,
|
||||
@ -260,6 +254,7 @@ const SectionHeaderContent = (props) => {
|
||||
setRestoreRoomDialogVisible,
|
||||
setArchiveDialogVisible,
|
||||
onCopyLink,
|
||||
setShareFolderDialogVisible,
|
||||
|
||||
setSelected,
|
||||
cbMenuItems,
|
||||
@ -312,6 +307,8 @@ const SectionHeaderContent = (props) => {
|
||||
onClickCreateRoom,
|
||||
onCreateAndCopySharedLink,
|
||||
showNavigationButton,
|
||||
deleteRooms,
|
||||
setSelection,
|
||||
} = props;
|
||||
|
||||
const navigate = useNavigate();
|
||||
@ -610,6 +607,10 @@ const SectionHeaderContent = (props) => {
|
||||
return setSharingPanelVisible(true);
|
||||
};
|
||||
|
||||
const onClickShare = () => {
|
||||
setShareFolderDialogVisible(true);
|
||||
};
|
||||
|
||||
const onDeleteAction = () => {
|
||||
setIsFolderActions(true);
|
||||
|
||||
@ -685,6 +686,11 @@ const SectionHeaderContent = (props) => {
|
||||
toastr.success(t("Translations:LinkCopySuccess"));
|
||||
};
|
||||
|
||||
const onDeleteRoomInArchive = () => {
|
||||
setSelection([selectedFolder]);
|
||||
deleteRooms(t);
|
||||
};
|
||||
|
||||
const getContextOptionsFolder = () => {
|
||||
const {
|
||||
t,
|
||||
@ -709,6 +715,8 @@ const SectionHeaderContent = (props) => {
|
||||
isPublicRoom,
|
||||
} = props;
|
||||
|
||||
const isArchive = selectedFolder.rootFolderType === FolderType.Archive;
|
||||
|
||||
if (isPublicRoom) {
|
||||
return [
|
||||
{
|
||||
@ -757,9 +765,9 @@ const SectionHeaderContent = (props) => {
|
||||
{
|
||||
id: "header_option_sharing-settings",
|
||||
key: "sharing-settings",
|
||||
label: t("SharingPanel:SharingSettingsTitle"),
|
||||
onClick: onOpenSharingPanel,
|
||||
disabled: true,
|
||||
label: t("Files:Share"),
|
||||
onClick: onClickShare,
|
||||
disabled: !isPersonalRoom,
|
||||
icon: ShareReactSvgUrl,
|
||||
},
|
||||
{
|
||||
@ -778,7 +786,9 @@ const SectionHeaderContent = (props) => {
|
||||
disabled:
|
||||
isRecycleBinFolder ||
|
||||
isPersonalRoom ||
|
||||
((isPublicRoomType || isCustomRoomType) && haveLinksRight),
|
||||
((isPublicRoomType || isCustomRoomType) &&
|
||||
haveLinksRight &&
|
||||
!isArchive),
|
||||
icon: InvitationLinkReactSvgUrl,
|
||||
},
|
||||
{
|
||||
@ -839,7 +849,10 @@ const SectionHeaderContent = (props) => {
|
||||
}
|
||||
}
|
||||
},
|
||||
disabled: (!isPublicRoomType && !isCustomRoomType) || !haveLinksRight,
|
||||
disabled:
|
||||
(!isPublicRoomType && !isCustomRoomType) ||
|
||||
!haveLinksRight ||
|
||||
isArchive,
|
||||
},
|
||||
{
|
||||
id: "header_option_invite-users-to-room",
|
||||
@ -870,7 +883,7 @@ const SectionHeaderContent = (props) => {
|
||||
label: t("MoveToArchive"),
|
||||
icon: RoomArchiveSvgUrl,
|
||||
onClick: onClickArchiveAction,
|
||||
disabled: !isRoom || !security?.Move,
|
||||
disabled: !isRoom || !security?.Move || isArchive,
|
||||
"data-action": "archive",
|
||||
action: "archive",
|
||||
},
|
||||
@ -891,7 +904,7 @@ const SectionHeaderContent = (props) => {
|
||||
label: t("LeaveTheRoom"),
|
||||
icon: LeaveRoomSvgUrl,
|
||||
onClick: onLeaveRoom,
|
||||
disabled: isArchiveFolder || !inRoom || isPublicRoom,
|
||||
disabled: isArchive || !inRoom || isPublicRoom,
|
||||
},
|
||||
{
|
||||
id: "header_option_download",
|
||||
@ -901,6 +914,14 @@ const SectionHeaderContent = (props) => {
|
||||
disabled: !security?.Download,
|
||||
icon: DownloadReactSvgUrl,
|
||||
},
|
||||
{
|
||||
id: "header_option_unarchive-room",
|
||||
key: "unarchive-room",
|
||||
label: t("Common:Restore"),
|
||||
onClick: onClickArchiveAction,
|
||||
disabled: !isArchive || !isRoom,
|
||||
icon: MoveReactSvgUrl,
|
||||
},
|
||||
{
|
||||
id: "header_option_move-to",
|
||||
key: "move-to",
|
||||
@ -914,7 +935,9 @@ const SectionHeaderContent = (props) => {
|
||||
key: "copy",
|
||||
label: t("Common:Copy"),
|
||||
onClick: onCopyAction,
|
||||
disabled: isDisabled || !security?.CopyTo,
|
||||
disabled:
|
||||
isDisabled || (isArchive ? !security?.Copy : !security?.CopyTo),
|
||||
|
||||
icon: CopyReactSvgUrl,
|
||||
},
|
||||
{
|
||||
@ -935,8 +958,8 @@ const SectionHeaderContent = (props) => {
|
||||
id: "header_option_delete",
|
||||
key: "delete",
|
||||
label: t("Common:Delete"),
|
||||
onClick: onDeleteAction,
|
||||
disabled: isDisabled || !security?.Delete,
|
||||
onClick: isArchive ? onDeleteRoomInArchive : onDeleteAction,
|
||||
disabled: isArchive ? !isRoom : isDisabled || !security?.Delete,
|
||||
icon: CatalogTrashReactSvgUrl,
|
||||
},
|
||||
];
|
||||
@ -1190,10 +1213,7 @@ const SectionHeaderContent = (props) => {
|
||||
return (
|
||||
<Consumer key="header">
|
||||
{(context) => (
|
||||
<StyledContainer
|
||||
isRecycleBinFolder={isRecycleBinFolder}
|
||||
hideContextMenuInsideArchiveRoom={hideContextMenuInsideArchiveRoom}
|
||||
>
|
||||
<StyledContainer isRecycleBinFolder={isRecycleBinFolder}>
|
||||
{tableGroupMenuVisible ? (
|
||||
<TableGroupMenu {...tableGroupMenuProps} withComboBox />
|
||||
) : (
|
||||
@ -1314,6 +1334,7 @@ export default inject(
|
||||
clearFiles,
|
||||
categoryType,
|
||||
getPrimaryLink,
|
||||
setSelection,
|
||||
} = filesStore;
|
||||
|
||||
const {
|
||||
@ -1343,6 +1364,7 @@ export default inject(
|
||||
setInvitePanelOptions,
|
||||
setInviteUsersWarningDialogVisible,
|
||||
setLeaveRoomDialogVisible,
|
||||
setShareFolderDialogVisible,
|
||||
} = dialogsStore;
|
||||
|
||||
const {
|
||||
@ -1364,6 +1386,7 @@ export default inject(
|
||||
emptyTrashInProgress,
|
||||
moveToPublicRoom,
|
||||
onClickCreateRoom,
|
||||
deleteRooms,
|
||||
} = filesActionsStore;
|
||||
|
||||
const { oformsFilter } = oformsStore;
|
||||
@ -1421,10 +1444,6 @@ export default inject(
|
||||
|
||||
const isEmptyArchive = !canRestoreAll && !canDeleteAll;
|
||||
|
||||
const hideContextMenuInsideArchiveRoom = isArchiveFolderRoot
|
||||
? !isArchiveFolder
|
||||
: false;
|
||||
|
||||
const {
|
||||
selectionStore,
|
||||
headerMenuStore,
|
||||
@ -1523,7 +1542,6 @@ export default inject(
|
||||
isEmptyArchive,
|
||||
isPrivacyFolder,
|
||||
isArchiveFolder,
|
||||
hideContextMenuInsideArchiveRoom,
|
||||
|
||||
setIsLoading,
|
||||
|
||||
@ -1600,6 +1618,9 @@ export default inject(
|
||||
onCreateAndCopySharedLink,
|
||||
showNavigationButton,
|
||||
haveLinksRight,
|
||||
deleteRooms,
|
||||
setSelection,
|
||||
setShareFolderDialogVisible,
|
||||
};
|
||||
},
|
||||
)(
|
||||
|
@ -212,6 +212,11 @@ class SelectionStore {
|
||||
return this.setSelection([]);
|
||||
};
|
||||
|
||||
resetSelections = () => {
|
||||
this.setBufferSelection(null);
|
||||
this.clearSelection();
|
||||
};
|
||||
|
||||
selectByStatus = (status) => {
|
||||
this.bufferSelection = null;
|
||||
const list = this.peopleStore.usersStore.peopleList.filter(
|
||||
@ -255,6 +260,11 @@ class SelectionStore {
|
||||
const list = this.peopleStore.usersStore.peopleList;
|
||||
this.setSelection(this.getUsersBySelected(list, selected));
|
||||
|
||||
if (selected !== "none" && selected !== "close") {
|
||||
this.resetUsersRight();
|
||||
list.forEach((u) => this.incrementUsersRights(u));
|
||||
}
|
||||
|
||||
return selected;
|
||||
};
|
||||
|
||||
|
@ -1670,7 +1670,7 @@ export const getBaseTheme = () => {
|
||||
flex: "0 0 6px",
|
||||
marginTopWithBorder: "5px",
|
||||
marginTop: "12px",
|
||||
marginRight: "8px",
|
||||
marginRight: "5px",
|
||||
marginLeft: "auto",
|
||||
},
|
||||
|
||||
@ -1710,7 +1710,7 @@ export const getBaseTheme = () => {
|
||||
},
|
||||
|
||||
label: {
|
||||
marginRightWithBorder: "8px",
|
||||
marginRightWithBorder: "13px",
|
||||
marginRight: "4px",
|
||||
|
||||
disabledColor: grayMid,
|
||||
|
@ -1639,7 +1639,7 @@ const Dark: TTheme = {
|
||||
flex: "0 0 6px",
|
||||
marginTopWithBorder: "5px",
|
||||
marginTop: "12px",
|
||||
marginRight: "8px",
|
||||
marginRight: "5px",
|
||||
marginLeft: "auto",
|
||||
},
|
||||
|
||||
@ -1681,7 +1681,7 @@ const Dark: TTheme = {
|
||||
},
|
||||
|
||||
label: {
|
||||
marginRightWithBorder: "8px",
|
||||
marginRightWithBorder: "13px",
|
||||
marginRight: "4px",
|
||||
|
||||
disabledColor: "#858585",
|
||||
|
Loading…
Reference in New Issue
Block a user