Merge branch 'release/v2.5.0' of github.com:ONLYOFFICE/DocSpace-client into release/v2.5.0

This commit is contained in:
Timofey Boyko 2024-04-05 18:54:03 +03:00
commit fccbb83a98
12 changed files with 122 additions and 89 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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