Merge branch 'feature/info-panel-history-update' of github.com:ONLYOFFICE/AppServer into feature/info-panel-history-update

This commit is contained in:
Mushka Nikita 2022-11-30 13:07:40 +03:00
commit b96059c041
55 changed files with 388 additions and 67 deletions

View File

@ -2,7 +2,7 @@ name: 4testing multiarch-build
on:
push:
branches: [ "develop" ]
branches: [ "release/rc-v1.2.0" ]
jobs:
build:
@ -33,10 +33,10 @@ jobs:
cd ./build/install/docker
REPO="onlyoffice" \
DOCKER_IMAGE_PREFIX="4testing-docspace" \
DOCKER_TAG="develop" \
DOCKER_TAG="rc-v1.2.0" \
DOCKERFILE="Dockerfile.app" \
docker buildx bake -f build.yml \
--set *.args.GIT_BRANCH="develop" \
--set *.args.GIT_BRANCH="release/rc-v1.2.0" \
--set *.platform=linux/amd64 \
--push
shell: bash

View File

@ -0,0 +1,7 @@
@echo off
pwsh %~dp0/build.document.server.docker.ps1 %1
echo.
pause

View File

@ -0,0 +1,15 @@
$PSversionMajor = $PSVersionTable.PSVersion | sort-object major | ForEach-Object { $_.major }
$PSversionMinor = $PSVersionTable.PSVersion | sort-object minor | ForEach-Object { $_.minor }
if ($PSversionMajor -lt 7 -or $PSversionMinor -lt 2) {
Write-Error "Powershell version must be greater than or equal to 7.2."
exit
}
$RootDir = Split-Path -Parent $PSScriptRoot
Write-Host "Run Document server" -ForegroundColor Green
$DOCUMENT_SERVER_IMAGE_NAME = "onlyoffice/documentserver-de:latest"
docker run -i -t -d -p 8085:80 -e JWT_ENABLED=false -e JWT_IN_BODY=false --restart=always -v $RootDir/Data:/var/www/onlyoffice/Data $DOCUMENT_SERVER_IMAGE_NAME

View File

@ -161,8 +161,9 @@ public class SecurityContext
return false;
}
var settingLoginEvents = await _dbLoginEventsManager.GetLoginEventIds(tenant, userid);
if (loginEventId != 0 && !settingLoginEvents.Contains(loginEventId))
var loginEventById = await _dbLoginEventsManager.GetById(loginEventId);
if (loginEventById == null)
{
return false;
}

View File

@ -24,6 +24,8 @@
// 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
using System.ComponentModel;
namespace ASC.Core.Data;
[Scope]
@ -61,26 +63,22 @@ public class DbLoginEventsManager
_dbContextFactory = dbContextFactory;
_mapper = mapper;
}
public async Task<List<int>> GetLoginEventIds(int tenantId, Guid userId)
public async Task<LoginEvent> GetById(int id)
{
var date = DateTime.UtcNow.AddYears(-1);
if (id < 0) return null;
using var loginEventContext = _dbContextFactory.CreateDbContext();
var resultList = await loginEventContext.LoginEvents
.Where(r => r.TenantId == tenantId && r.UserId == userId && _loginActions.Contains(r.Action ?? 0) && r.Date >= date && r.Active)
.Select(r => r.Id)
.ToListAsync();
return resultList;
}
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
return await loginEventContext.LoginEvents.FindAsync(id);
}
public async Task<List<BaseEvent>> GetLoginEvents(int tenantId, Guid userId)
{
var date = DateTime.UtcNow.AddYears(-1);
using var loginEventContext = _dbContextFactory.CreateDbContext();
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
var loginInfo = await loginEventContext.LoginEvents
.Where(r => r.TenantId == tenantId && r.UserId == userId && _loginActions.Contains(r.Action ?? 0) && r.Date >= date && r.Active)
.OrderByDescending(r => r.Id)
@ -91,7 +89,8 @@ public class DbLoginEventsManager
public async Task LogOutEvent(int loginEventId)
{
using var loginEventContext = _dbContextFactory.CreateDbContext();
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
var events = await loginEventContext.LoginEvents
.Where(r => r.Id == loginEventId)
.ToListAsync();
@ -108,7 +107,8 @@ public class DbLoginEventsManager
public async Task LogOutAllActiveConnections(int tenantId, Guid userId)
{
using var loginEventContext = _dbContextFactory.CreateDbContext();
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
var events = await loginEventContext.LoginEvents
.Where(r => r.TenantId == tenantId && r.UserId == userId && r.Active)
.ToListAsync();
@ -125,7 +125,8 @@ public class DbLoginEventsManager
public async Task LogOutAllActiveConnectionsForTenant(int tenantId)
{
using var loginEventContext = _dbContextFactory.CreateDbContext();
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
var events = await loginEventContext.LoginEvents
.Where(r => r.TenantId == tenantId && r.Active)
.ToListAsync();
@ -140,7 +141,8 @@ public class DbLoginEventsManager
public async Task LogOutAllActiveConnectionsExceptThis(int loginEventId, int tenantId, Guid userId)
{
using var loginEventContext = _dbContextFactory.CreateDbContext();
using var loginEventContext = await _dbContextFactory.CreateDbContextAsync();
var events = await loginEventContext.LoginEvents
.Where(r => r.TenantId == tenantId && r.UserId == userId && r.Id != loginEventId && r.Active)
.ToListAsync();

View File

@ -19,7 +19,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MySql.Data" Version="8.0.30" />
<PackageReference Include="MySql.Data" Version="8.0.31" />
<PackageReference Include="protobuf-net" Version="3.1.17" />
</ItemGroup>
<ItemGroup>

View File

@ -125,7 +125,7 @@
"ConnectionStrings": {
"default": {
"name": "default",
"connectionString": "Server=localhost;Database=onlyoffice;User ID=dev;Password=dev;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=True;ConnectionReset=false",
"connectionString": "Server=localhost;Database=onlyoffice;User ID=dev;Password=dev;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=True;Connection Timeout=30;Maximum Pool Size=300;ConnectionReset=false",
"providerName": "MySql.Data.MySqlClient"
},
"postgre": {
@ -135,7 +135,7 @@
},
"mysql": {
"name": "mysql",
"connectionString": "Server=localhost;Database=onlyoffice;User ID=dev;Password=dev;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=True;ConnectionReset=false",
"connectionString": "Server=localhost;Database=onlyoffice;User ID=dev;Password=dev;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=True;Connection Timeout=30;Maximum Pool Size=300;ConnectionReset=false",
"providerName": "MySql.Data.MySqlClient"
}
},

View File

@ -89,6 +89,14 @@ const ArchiveDialogComponent = (props) => {
const acceptButton =
action === "archive" ? t("Common:OKButton") : t("Common:Restore");
const isArchive = action === "archive";
const idButtonSubmit = isArchive
? "shared_move-to-archived-modal_submit"
: "restore-all_submit";
const idButtonCancel = isArchive
? "shared_move-to-archived-modal_cancel"
: "restore-all_cancel";
return (
<StyledModal
isLoading={!tReady}
@ -102,6 +110,7 @@ const ArchiveDialogComponent = (props) => {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id={idButtonSubmit}
key="OkButton"
label={acceptButton}
size="normal"
@ -111,6 +120,7 @@ const ArchiveDialogComponent = (props) => {
scale
/>
<Button
id={idButtonCancel}
key="CancelButton"
label={t("Common:CancelButton")}
size="normal"

View File

@ -98,6 +98,7 @@ class ChangeUserStatusDialogComponent extends React.Component {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id="change-user-status-modal_submit"
label={t("ChangeUsersStatusButton")}
size="normal"
primary
@ -107,6 +108,7 @@ class ChangeUserStatusDialogComponent extends React.Component {
isDisabled={userIDs.length === 0}
/>
<Button
id="change-user-status-modal_cancel"
label={t("Common:CancelButton")}
size="normal"
scale

View File

@ -109,6 +109,7 @@ class ChangeUserTypeDialogComponent extends React.Component {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id="change-user-type-modal_submit"
label={t("ChangeUserTypeButton")}
size="normal"
scale
@ -118,6 +119,7 @@ class ChangeUserTypeDialogComponent extends React.Component {
isDisabled={!userIDs.length}
/>
<Button
id="change-user-type-modal_cancel"
label={t("Common:CancelButton")}
size="normal"
scale

View File

@ -149,6 +149,7 @@ const CreateRoomDialog = ({
{!!roomParams.type && (
<ModalDialog.Footer>
<Button
id="shared_create-room-modal_submit"
tabIndex={5}
label={t("Common:Create")}
size="normal"
@ -158,6 +159,7 @@ const CreateRoomDialog = ({
isLoading={isLoading}
/>
<Button
id="shared_create-room-modal_cancel"
tabIndex={5}
label={t("Common:CancelButton")}
size="normal"

View File

@ -2,6 +2,7 @@ import { RoomsType } from "@docspace/common/constants";
export const roomTypes = [
{
id: "shared_filling-forms-room",
type: RoomsType.FillingFormsRoom,
title: "FillingFormsRoomTitle",
description: "FillingFormsRoomDescription",
@ -10,6 +11,7 @@ export const roomTypes = [
secondaryInfo: "FillingFormsRoomSecondaryInfo",
},
{
id: "shared_collaboration-room",
type: RoomsType.EditingRoom,
title: "CollaborationRoomTitle",
description: "CollaborationRoomDescription",
@ -18,6 +20,7 @@ export const roomTypes = [
secondaryInfo: "CollaborationRoomSecondaryInfo",
},
{
id: "shared_review-room",
type: RoomsType.ReviewRoom,
title: "ReviewRoomTitle",
description: "ReviewRoomDescription",
@ -26,6 +29,7 @@ export const roomTypes = [
secondaryInfo: "ReviewRoomSecondaryInfo",
},
{
id: "shared_read-only-room",
type: RoomsType.ReadOnlyRoom,
title: "ViewOnlyRoomTitle",
description: "ViewOnlyRoomDescription",
@ -34,6 +38,7 @@ export const roomTypes = [
secondaryInfo: "ViewOnlyRoomSecondaryInfo",
},
{
id: "shared_custom-room",
type: RoomsType.CustomRoom,
title: "CustomRoomTitle",
description: "CustomRoomDescription",

View File

@ -21,7 +21,13 @@ const StyledToggleParam = styled(StyledParam)`
}
`;
const ToggleParam = ({ title, description, isChecked, onCheckedChange }) => {
const ToggleParam = ({
id,
title,
description,
isChecked,
onCheckedChange,
}) => {
return (
<StyledToggleParam isPrivate>
<div className="set_room_params-info">
@ -31,6 +37,7 @@ const ToggleParam = ({ title, description, isChecked, onCheckedChange }) => {
<div className="set_room_params-info-description">{description}</div>
</div>
<ToggleButton
id={id}
className="set_room_params-toggle"
isChecked={isChecked}
onChange={onCheckedChange}

View File

@ -131,7 +131,15 @@ const StyledDisplayItem = styled(StyledRoomType)`
}
`;
const RoomType = ({ t, room, onClick, type = "listItem", isOpen }) => {
const RoomType = ({
t,
room,
onClick,
type = "listItem",
isOpen,
id,
selectedId,
}) => {
const arrowClassName =
type === "dropdownButton"
? "choose_room-forward_btn dropdown-button"
@ -170,23 +178,37 @@ const RoomType = ({ t, room, onClick, type = "listItem", isOpen }) => {
);
return type === "listItem" ? (
<StyledListItem title={t(room.title)} onClick={onClick}>
<StyledListItem id={id} title={t(room.title)} onClick={onClick}>
{content}
</StyledListItem>
) : type === "dropdownButton" ? (
<StyledDropdownButton
id={id}
title={t(room.title)}
onClick={onClick}
isOpen={isOpen}
data-selected-id={selectedId}
>
{content}
</StyledDropdownButton>
) : type === "dropdownItem" ? (
<StyledDropdownItem title={t(room.title)} onClick={onClick} isOpen={isOpen}>
<StyledDropdownItem
id={id}
title={t(room.title)}
onClick={onClick}
isOpen={isOpen}
data-selected-id={selectedId}
>
{content}
</StyledDropdownItem>
) : (
<StyledDisplayItem title={t(room.title)}>{content}</StyledDisplayItem>
<StyledDisplayItem
id={id}
title={t(room.title)}
data-selected-id={selectedId}
>
{content}
</StyledDisplayItem>
);
};

View File

@ -41,6 +41,7 @@ const DropdownDesktop = ({ t, open, roomTypes, chooseRoomType }) => {
<div className="dropdown-content">
{roomTypes.map((room) => (
<RoomType
id={room.id}
t={t}
key={room.type}
room={room}

View File

@ -72,6 +72,7 @@ const DropdownMobile = ({ t, open, onClose, roomTypes, chooseRoomType }) => {
<div className="dropdown-mobile-content">
{roomTypes.map((room) => (
<RoomType
id={room.id}
t={t}
key={room.type}
room={room}

View File

@ -37,11 +37,12 @@ const RoomTypeDropdown = ({
setRoomType(roomType);
toggleDropdown();
};
return (
<StyledRoomTypeDropdown isOpen={isOpen}>
<RoomType
t={t}
id="shared_select-room"
selectedId={currentRoom.id}
room={currentRoom}
type="dropdownButton"
isOpen={isOpen}

View File

@ -21,6 +21,7 @@ const RoomTypeList = ({ t, setRoomType }) => {
<StyledRoomTypeList>
{roomTypes.map((room) => (
<RoomType
id={room.id}
t={t}
key={room.type}
room={room}

View File

@ -74,7 +74,7 @@ const SetRoomParams = ({
)}
<InputParam
id={"room-name"}
id="shared_room-name"
title={`${t("Common:Name")}:`}
placeholder={t("NamePlaceholder")}
value={roomParams.title}

View File

@ -19,7 +19,9 @@ const TagDropdown = ({
const [dropdownMaxHeight, setDropdownMaxHeight] = useState(0);
useEffect(() => {
document.getElementById("tags-input").addEventListener("keyup", onKeyPress);
document
.getElementById("shared_tags-input")
.addEventListener("keyup", onKeyPress);
return () => document.removeEventListener("keyup", onKeyPress);
});
@ -39,7 +41,7 @@ const TagDropdown = ({
};
const onClickOutside = () => {
document.getElementById("tags-input").blur();
document.getElementById("shared_tags-input").blur();
};
const addNewTag = () => {

View File

@ -50,7 +50,7 @@ const TagInput = ({
return (
<StyledTagInput className="set_room_params-input set_room_params-tag_input">
<InputParam
id={"tags-input"}
id="shared_tags-input"
title={`${t("Common:Tags")}:`}
placeholder={t("TagsPlaceholder")}
value={tagInput}

View File

@ -221,6 +221,7 @@ const ThirdPartyComboBox = ({
<StyledStorageLocation isOpen={isOpen}>
<div className="set_room_params-thirdparty">
<div
id="shared_third-party-storage_combobox"
className="set_room_params-thirdparty-combobox"
onClick={toggleIsOpen}
>
@ -235,6 +236,7 @@ const ThirdPartyComboBox = ({
</div>
<Button
id="shared_third-party-storage_connect"
isDisabled={
!storageLocation?.provider ||
!!storageLocation?.thirdpartyAccount ||
@ -262,7 +264,8 @@ const ThirdPartyComboBox = ({
>
{thirdparties.map((thirdparty) => (
<DropDownItem
className="dropdown-item"
id={thirdparty.id}
className={`dropdown-item ${thirdparty.className ?? ""}`}
label={thirdparty.title}
key={thirdparty.id}
height={32}

View File

@ -90,6 +90,7 @@ const ThirdPartyStorage = ({
return (
<StyledThirdPartyStorage>
<ToggleParam
id="shared_third-party-storage-toggle"
title={t("ThirdPartyStorageTitle")}
description={t("ThirdPartyStorageDescription")}
isChecked={storageLocation.isThirdparty}
@ -188,6 +189,7 @@ export default inject(
(item) =>
item && {
id: item[0],
className: `storage_${item[0].toLowerCase()}`,
providerKey: item[0],
isOauth: item.length > 1 && item[0] !== "WebDav",
oauthHref: item.length > 1 && item[0] !== "WebDav" ? item[1] : "",

View File

@ -159,6 +159,7 @@ const DeleteDialogComponent = (props) => {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id="delete-file-modal_submit"
key="OkButton"
label={accessButtonLabel}
size="normal"
@ -171,6 +172,7 @@ const DeleteDialogComponent = (props) => {
isDisabled={!selection.length}
/>
<Button
id="delete-file-modal_cancel"
key="CancelButton"
label={t("Common:CancelButton")}
size="normal"

View File

@ -77,6 +77,7 @@ const EmptyTrashDialogComponent = (props) => {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id="empty-archive_delete-submit"
key="OkButton"
label={t("DeleteForeverButton")}
size="normal"
@ -86,6 +87,7 @@ const EmptyTrashDialogComponent = (props) => {
scale
/>
<Button
id="empty-archive_delete-cancel"
key="CancelButton"
label={t("Common:CancelButton")}
size="normal"

View File

@ -129,6 +129,7 @@ class SendInviteDialogComponent extends React.Component {
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
id="send-inite-again-modal_submit"
label={t("Common:SendButton")}
size="normal"
scale
@ -138,6 +139,7 @@ class SendInviteDialogComponent extends React.Component {
isDisabled={!userIds.length}
/>
<Button
id="send-inite-again-modal_cancel"
label={t("Common:CancelButton")}
size="normal"
scale

View File

@ -134,6 +134,7 @@ const SelectionPanelBody = ({
<div>
<Button
id="select-file-modal-submit"
theme={theme}
className="select-file-modal-dialog-buttons-save"
primary
@ -153,6 +154,7 @@ const SelectionPanelBody = ({
isLoading={isDisableTree}
/>
<Button
id="select-file-modal-cancel"
theme={theme}
className="modal-dialog-button"
size="normal"

View File

@ -159,7 +159,7 @@ const SectionHeaderContent = (props) => {
getHeaderMenu,
cbMenuItems,
getCheckboxItemLabel,
getMenuItemId,
setInfoPanelIsVisible,
isInfoPanelVisible,
isOwner,
@ -186,8 +186,10 @@ const SectionHeaderContent = (props) => {
<>
{cbMenuItems.map((key) => {
const label = getCheckboxItemLabel(t, key);
const id = getMenuItemId(key);
return (
<DropDownItem
id={id}
key={key}
label={label}
data-key={key}
@ -226,7 +228,7 @@ const SectionHeaderContent = (props) => {
const getContextOptions = () => {
return [
isOwner && {
id: "main-button_administrator",
id: "accounts-add_administrator",
className: "main-button_drop-down",
icon: "/static/images/person.admin.react.svg",
label: t("Common:DocSpaceAdmin"),
@ -235,7 +237,7 @@ const SectionHeaderContent = (props) => {
key: "administrator",
},
{
id: "main-button_manager",
id: "accounts-add_manager",
className: "main-button_drop-down",
icon: "/static/images/person.manager.react.svg",
label: t("Common:RoomAdmin"),
@ -244,7 +246,7 @@ const SectionHeaderContent = (props) => {
key: "manager",
},
{
id: "main-button_user",
id: "accounts-add_user",
className: "main-button_drop-down",
icon: "/static/images/person.user.react.svg",
label: t("Common:User"),
@ -257,7 +259,7 @@ const SectionHeaderContent = (props) => {
isSeparator: true,
},
{
id: "main-button_invite-again",
id: "accounts-add_invite-again",
className: "main-button_drop-down",
icon: "/static/images/invite.again.react.svg",
label: t("LblInviteAgain"),
@ -296,6 +298,7 @@ const SectionHeaderContent = (props) => {
{t("Accounts")}
</Headline>
<ContextMenuButton
id="header_add-button"
className="action-button"
directionX="left"
title={t("Common:Actions")}
@ -314,6 +317,7 @@ const SectionHeaderContent = (props) => {
) && (
<div className="info-panel-toggle-bg">
<IconButton
id="info-panel-toggle--open"
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"
@ -349,6 +353,7 @@ export default withRouter(
isHeaderIndeterminate,
isHeaderChecked,
cbMenuItems,
getMenuItemId,
getCheckboxItemLabel,
} = headerMenuStore;
@ -361,6 +366,7 @@ export default withRouter(
isHeaderChecked,
getHeaderMenu,
cbMenuItems,
getMenuItemId,
getCheckboxItemLabel,
setInfoPanelIsVisible,
isInfoPanelVisible,

View File

@ -73,11 +73,43 @@ class DetailsHelper {
getPropertyList = () => {
return this.getNeededProperties().map((propertyId) => ({
id: propertyId,
className: this.getPropertyClassName(propertyId),
title: this.getPropertyTitle(propertyId),
content: this.getPropertyContent(propertyId),
}));
};
getPropertyClassName = (propertyId) => {
switch (propertyId) {
case "Owner":
return "info_details_owner";
case "Location":
return "info_details_location";
case "Type":
return "info_details_type";
case "Storage Type":
return "info_details_storage-type";
case "File extension":
return "info_details_file-extension";
case "Content":
return "info_details_content";
case "Size":
return "info_details_size";
case "Date modified":
return "info_details_date_modified";
case "Last modified by":
return "info_details_last-modified-by";
case "Creation date":
return "info_details_creation-date";
case "Versions":
return "info_details_versions";
case "Comments":
return "info_details_comments";
case "Tags":
return "info_details_tags";
}
};
getNeededProperties = () => {
return (this.item.isRoom
? [

View File

@ -69,11 +69,11 @@ const InfoPanelBodyContent = ({
if (isAccounts) return viewHelper.AccountsView();
switch (isRooms ? roomsView : fileView) {
case "members":
case "info_members":
return viewHelper.MembersView();
case "history":
case "info_history":
return viewHelper.HistoryView();
case "details":
case "info_details":
return viewHelper.DetailsView();
}
};

View File

@ -71,7 +71,11 @@ const AccountsItemTitle = ({
)}
</div>
{!!contextOptions.length && (
<ContextMenuButton className="context-button" getData={getData} />
<ContextMenuButton
id="info-accounts-options"
className="context-button"
getData={getData}
/>
)}
</StyledAccountsItemTitle>
);

View File

@ -71,6 +71,7 @@ const ItemContextOptions = ({
/>
{options?.length > 0 && (
<ContextMenuButton
id="info-options"
className="expandButton"
title={"Show item actions"}
onClick={onContextMenu}

View File

@ -35,7 +35,7 @@ const ItemTitle = ({
const filesItemSelection =
isRooms &&
!isSeveralItems &&
roomsView === "members" &&
roomsView === "info_members" &&
!selection.isRoom &&
!!selectionParentRoom
? selectionParentRoom

View File

@ -58,18 +58,21 @@ const Accounts = ({
const options = [];
const adminOption = {
id: "info-account-type_docspace-admin",
key: "admin",
title: t("Common:DocSpaceAdmin"),
label: t("Common:DocSpaceAdmin"),
action: "admin",
};
const managerOption = {
id: "info-account-type_room-admin",
key: "manager",
title: t("Common:RoomAdmin"),
label: t("Common:RoomAdmin"),
action: "manager",
};
const userOption = {
id: "info-account-type_user",
key: "user",
title: t("Common:User"),
label: t("Common:User"),
@ -99,6 +102,7 @@ const Accounts = ({
const combobox = (
<ComboBox
id="info-account-type-select"
className="type-combobox"
selectedOption={
typesOptions.find((option) => option.key === role) || {}

View File

@ -85,7 +85,11 @@ const Details = ({
<StyledProperties>
{itemProperties.map((property) => {
return (
<div key={property.title} className="property">
<div
id={property.id}
key={property.title}
className={`property ${property.className}`}
>
<Text className="property-title">{property.title}</Text>
{property.content}
</div>

View File

@ -130,6 +130,7 @@ const Members = ({
</Text>
{canInviteUserInRoomAbility && (
<IconButton
id="info_add-user"
className={"icon"}
title={t("Common:AddUsers")}
iconName="/static/images/person+.react.svg"

View File

@ -47,27 +47,27 @@ const InfoPanelHeaderContent = (props) => {
const closeInfoPanel = () => setIsVisible(false);
const setMembers = () => setView("members");
const setHistory = () => setView("history");
const setDetails = () => setView("details");
const setMembers = () => setView("info_members");
const setHistory = () => setView("info_history");
const setDetails = () => setView("info_details");
const isArchiveRoot = rootFolderType === FolderType.Archive;
const submenuData = [
{
id: "members",
id: "info_members",
name: t("InfoPanel:SubmenuMembers"),
onClick: setMembers,
content: null,
},
{
id: "history",
id: "info_history",
name: t("InfoPanel:SubmenuHistory"),
onClick: setHistory,
content: null,
},
{
id: "details",
id: "info_details",
name: t("InfoPanel:SubmenuDetails"),
onClick: setDetails,
content: null,
@ -100,6 +100,7 @@ const InfoPanelHeaderContent = (props) => {
{!isTablet && (
<div className="info-panel-toggle-bg">
<IconButton
id="info-panel-toggle--close"
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"

View File

@ -136,35 +136,41 @@ class SectionHeaderContent extends React.Component {
]
: [
{
id: "personal_new-documnet",
key: "new-document",
label: t("NewDocument"),
onClick: this.createDocument,
icon: "images/actions.documents.react.svg",
},
{
id: "personal_new-spreadsheet",
key: "new-spreadsheet",
label: t("NewSpreadsheet"),
onClick: this.createSpreadsheet,
icon: "images/spreadsheet.react.svg",
},
{
id: "personal_new-presentation",
key: "new-presentation",
label: t("NewPresentation"),
onClick: this.createPresentation,
icon: "images/actions.presentation.react.svg",
},
{
id: "personal_form-template",
icon: "images/form.react.svg",
label: t("Translations:NewForm"),
key: "new-form-base",
items: [
{
id: "personal_template_black",
key: "new-form",
label: t("Translations:SubNewForm"),
icon: "images/form.blank.react.svg",
onClick: this.createForm,
},
{
id: "personal_template_new-form-file",
key: "new-form-file",
label: t("Translations:SubNewFormFile"),
icon: "images/form.file.react.svg",
@ -172,6 +178,7 @@ class SectionHeaderContent extends React.Component {
disabled: isPrivacyFolder,
},
{
id: "personal_template_oforms-gallery",
key: "oforms-gallery",
label: t("Common:OFORMsGallery"),
icon: "images/form.gallery.react.svg",
@ -181,6 +188,7 @@ class SectionHeaderContent extends React.Component {
],
},
{
id: "personal_new-folder",
key: "new-folder",
label: t("NewFolder"),
onClick: this.createFolder,
@ -355,6 +363,7 @@ class SectionHeaderContent extends React.Component {
if (isArchiveFolder) {
return [
{
id: "header_option_empty-archive",
key: "empty-archive",
label: t("ArchiveAction"),
onClick: this.onEmptyTrashAction,
@ -362,6 +371,7 @@ class SectionHeaderContent extends React.Component {
icon: "images/clear.trash.react.svg",
},
{
id: "header_option_restore-all",
key: "restore-all",
label: t("RestoreAll"),
onClick: this.onRestoreAllArchiveAction,
@ -373,6 +383,7 @@ class SectionHeaderContent extends React.Component {
return [
{
id: "header_option_sharing-settings",
key: "sharing-settings",
label: t("SharingPanel:SharingSettingsTitle"),
onClick: this.onOpenSharingPanel,
@ -380,6 +391,7 @@ class SectionHeaderContent extends React.Component {
icon: "/static/images/share.react.svg",
},
{
id: "header_option_link-portal-users",
key: "link-portal-users",
label: t("LinkForPortalUsers"),
onClick: this.createLinkForPortalUsers,
@ -387,6 +399,7 @@ class SectionHeaderContent extends React.Component {
icon: "/static/images/invitation.link.react.svg",
},
{
id: "header_option_empty-trash",
key: "empty-trash",
label: t("RecycleBinAction"),
onClick: this.onEmptyTrashAction,
@ -394,6 +407,7 @@ class SectionHeaderContent extends React.Component {
icon: "images/clear.trash.react.svg",
},
{
id: "header_option_restore-all",
key: "restore-all",
label: t("RestoreAll"),
onClick: this.onRestoreAllAction,
@ -401,6 +415,7 @@ class SectionHeaderContent extends React.Component {
icon: "images/subtract.react.svg",
},
{
id: "header_option_show-info",
key: "show-info",
label: t("InfoPanel:ViewDetails"),
onClick: this.onShowInfo,
@ -408,6 +423,7 @@ class SectionHeaderContent extends React.Component {
icon: "/static/images/info.outline.react.svg",
},
{
id: "header_option_reconnect-storage",
key: "reconnect-storage",
label: t("Common:ReconnectStorage"),
icon: "images/reconnect.svg",
@ -415,6 +431,7 @@ class SectionHeaderContent extends React.Component {
disabled: !selectedFolder.providerKey || !isRoom,
},
{
id: "header_option_edit-room",
key: "edit-room",
label: t("EditRoom"),
icon: "images/settings.react.svg",
@ -422,6 +439,7 @@ class SectionHeaderContent extends React.Component {
disabled: !isRoom,
},
{
id: "header_option_invite-users-to-room",
key: "invite-users-to-room",
label: t("InviteUsers"),
icon: "/static/images/person.react.svg",
@ -429,14 +447,21 @@ class SectionHeaderContent extends React.Component {
disabled: !isRoom,
},
{
id: "header_option_room-info",
key: "room-info",
label: t("Common:Info"),
icon: "/static/images/info.outline.react.svg",
onClick: this.onToggleInfoPanel,
disabled: !isRoom,
},
{ key: "separator-2", isSeparator: true, disabled: isRecycleBinFolder },
{
id: "header_option_separator-2",
key: "separator-2",
isSeparator: true,
disabled: isRecycleBinFolder,
},
{
id: "header_option_archive-room",
key: "archive-room",
label: t("Archived"),
icon: "/static/images/room.archive.svg",
@ -446,6 +471,7 @@ class SectionHeaderContent extends React.Component {
action: "archive",
},
{
id: "header_option_download",
key: "download",
label: t("Common:Download"),
onClick: this.downloadAction,
@ -453,6 +479,7 @@ class SectionHeaderContent extends React.Component {
icon: "images/download.react.svg",
},
{
id: "header_option_move-to",
key: "move-to",
label: t("MoveTo"),
onClick: this.onMoveAction,
@ -460,6 +487,7 @@ class SectionHeaderContent extends React.Component {
icon: "images/move.react.svg",
},
{
id: "header_option_copy",
key: "copy",
label: t("Translations:Copy"),
onClick: this.onCopyAction,
@ -467,6 +495,7 @@ class SectionHeaderContent extends React.Component {
icon: "/static/images/copy.react.svg",
},
{
id: "header_option_rename",
key: "rename",
label: t("Rename"),
onClick: this.renameAction,
@ -474,11 +503,13 @@ class SectionHeaderContent extends React.Component {
icon: "images/rename.react.svg",
},
{
id: "header_option_separator-3",
key: "separator-3",
isSeparator: true,
disabled: isDisabled,
},
{
id: "header_option_delete",
key: "delete",
label: t("Common:Delete"),
onClick: this.onDeleteAction,
@ -506,14 +537,20 @@ class SectionHeaderContent extends React.Component {
};
getMenuItems = () => {
const { t, cbMenuItems, getCheckboxItemLabel } = this.props;
const {
t,
cbMenuItems,
getCheckboxItemLabel,
getCheckboxItemId,
} = this.props;
const checkboxOptions = (
<>
{cbMenuItems.map((key) => {
const label = getCheckboxItemLabel(t, key);
const id = getCheckboxItemId(key);
return (
<DropDownItem
id={id}
key={key}
label={label}
data-key={key}
@ -700,6 +737,7 @@ export default inject(
isThirdPartySelection,
cbMenuItems,
getCheckboxItemLabel,
getCheckboxItemId,
isEmptyFilesList,
getFolderInfo,
setBufferSelection,
@ -817,6 +855,7 @@ export default inject(
getHeaderMenu,
backToParentFolder,
getCheckboxItemLabel,
getCheckboxItemId,
setSelectFileDialogVisible,
isRecycleBinFolder,

View File

@ -159,6 +159,7 @@ const StyledAutoBackup = styled.div`
}
.auto-backup_badge {
height: 16px;
margin-left: 8px;
}
${(props) => !props.isEnableAuto && UnavailableStyles}

View File

@ -22,8 +22,6 @@ const Backup = ({
return (
<>
<HelpButton
displayType="auto"
place="bottom"
iconName={"/static/images/help.react.svg"}
tooltipContent={
<>

View File

@ -39,6 +39,7 @@ class AccountsContextOptionsStore {
case "profile":
return {
id: "option_profile",
key: option,
icon: "/static/images/profile.react.svg",
label: t("Common:Profile"),
@ -47,6 +48,7 @@ class AccountsContextOptionsStore {
case "change-name":
return {
id: "option_change-name",
key: option,
icon: "images/pencil.react.svg",
label: t("PeopleTranslations:NameChangeButton"),
@ -54,6 +56,7 @@ class AccountsContextOptionsStore {
};
case "change-email":
return {
id: "option_change-email",
key: option,
icon: "images/change.mail.react.svg",
label: t("PeopleTranslations:EmailChangeButton"),
@ -61,6 +64,7 @@ class AccountsContextOptionsStore {
};
case "change-password":
return {
id: "option_change-password",
key: option,
icon: "images/change.security.react.svg",
label: t("PeopleTranslations:PasswordChangeButton"),
@ -68,6 +72,7 @@ class AccountsContextOptionsStore {
};
case "change-owner":
return {
id: "option_change-owner",
key: option,
icon: "/static/images/refresh.react.svg",
label: t("Translations:OwnerChange"),
@ -76,6 +81,7 @@ class AccountsContextOptionsStore {
case "enable":
return {
id: "option_enable",
key: option,
icon: "images/enable.react.svg",
label: t("PeopleTranslations:EnableUserButton"),
@ -83,6 +89,7 @@ class AccountsContextOptionsStore {
};
case "disable":
return {
id: "option_disable",
key: option,
icon: "images/remove.react.svg",
label: t("PeopleTranslations:DisableUserButton"),
@ -91,6 +98,7 @@ class AccountsContextOptionsStore {
case "reassign-data":
return {
id: "option_reassign-data",
key: option,
icon: "images/ressing_data.react.svg",
label: t("PeopleTranslations:ReassignData"),
@ -98,6 +106,7 @@ class AccountsContextOptionsStore {
};
case "delete-personal-data":
return {
id: "option_delete-personal-data",
key: option,
icon: "images/del_data.react.svg",
label: t("PeopleTranslations:RemoveData"),
@ -105,6 +114,7 @@ class AccountsContextOptionsStore {
};
case "delete-user":
return {
id: "option_delete-user",
key: option,
icon: "images/trash.react.svg",
label: t("DeleteProfileEverDialog:DeleteUser"),
@ -113,6 +123,7 @@ class AccountsContextOptionsStore {
case "details":
return {
id: "option_details",
key: option,
icon: "images/info.react.svg",
label: t("Common:Info"),
@ -121,6 +132,7 @@ class AccountsContextOptionsStore {
case "invite-again":
return {
id: "option_invite-again",
key: option,
icon: "/static/images/invite.again.react.svg",
label: t("LblInviteAgain"),
@ -128,6 +140,7 @@ class AccountsContextOptionsStore {
};
case "reset-auth":
return {
id: "option_reset-auth",
key: option,
icon: "images/restore.auth.react.svg",
label: t("PeopleTranslations:ResetAuth"),

View File

@ -469,6 +469,7 @@ class ContextOptionsStore {
const blockAction = isCanWebEdit
? {
id: "option_block-unblock-version",
key: "block-unblock-version",
label: t("UnblockVersion"),
icon: "/static/images/locked.react.svg",
@ -486,6 +487,7 @@ class ContextOptionsStore {
? onlyShowVersionHistory
? [
{
id: "option_show-version-history",
key: "show-version-history",
label: t("ShowVersionHistory"),
icon: "images/history.react.svg",
@ -495,11 +497,13 @@ class ContextOptionsStore {
]
: [
{
id: "option_version",
key: "version",
label: t("VersionHistory"),
icon: "images/history-finalized.react.svg",
items: [
{
id: "option_finalize-version",
key: "finalize-version",
label: t("FinalizeVersion"),
icon: "images/history-finalized.react.svg",
@ -507,6 +511,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_version-history",
key: "show-version-history",
label: t("ShowVersionHistory"),
icon: "images/history.react.svg",
@ -519,6 +524,7 @@ class ContextOptionsStore {
]
: [
{
id: "option_finalize-version",
key: "finalize-version",
label: t("FinalizeVersion"),
icon: "images/history-finalized.react.svg",
@ -526,6 +532,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_version-history",
key: "show-version-history",
label: t("ShowVersionHistory"),
icon: "images/history.react.svg",
@ -539,11 +546,13 @@ class ContextOptionsStore {
!isMobile && !isMobileUtils() && !isTabletUtils()
? [
{
id: "option_move-or-copy",
key: "move",
label: t("MoveOrCopy"),
icon: "/static/images/copy.react.svg",
items: [
{
id: "option_move-to",
key: "move-to",
label: t("MoveTo"),
icon: "images/move.react.svg",
@ -551,6 +560,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_copy-to",
key: "copy-to",
label: t("Translations:Copy"),
icon: "/static/images/copy.react.svg",
@ -558,6 +568,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_create-copy",
key: "copy",
label: t("Common:Duplicate"),
icon: "/static/images/duplicate.react.svg",
@ -569,6 +580,7 @@ class ContextOptionsStore {
]
: [
{
id: "option_move-to",
key: "move-to",
label: t("MoveTo"),
icon: "images/move.react.svg",
@ -576,6 +588,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_copy-to",
key: "copy-to",
label: t("Translations:Copy"),
icon: "/static/images/copy.react.svg",
@ -583,6 +596,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_create-copy",
key: "copy",
label: t("Common:Duplicate"),
icon: "/static/images/duplicate.react.svg",
@ -593,6 +607,7 @@ class ContextOptionsStore {
const optionsModel = [
{
id: "option_select",
key: "select",
label: "Select",
icon: "images/check-box.react.svg",
@ -600,6 +615,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_open",
key: "open",
label: t("Open"),
icon: "images/folder.react.svg",
@ -607,6 +623,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_fill-form",
key: "fill-form",
label: t("Common:FillFormButton"),
icon: "/static/images/form.fill.rect.svg",
@ -614,6 +631,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_edit",
key: "edit",
label: t("Common:EditButton"),
icon: "/static/images/access.edit.react.svg",
@ -621,6 +639,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_preview",
key: "preview",
label: t("Preview"),
icon: "/static/images/eye.react.svg",
@ -628,6 +647,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_view",
key: "view",
label: t("Common:View"),
icon: "/static/images/eye.react.svg",
@ -635,6 +655,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_make-form",
key: "make-form",
label: t("Common:MakeForm"),
icon: "/static/images/form.plus.react.svg",
@ -646,6 +667,7 @@ class ContextOptionsStore {
isSeparator: true,
},
{
id: "option_reconnect-storage",
key: "reconnect-storage",
label: t("Common:ReconnectStorage"),
icon: "images/reconnect.svg",
@ -653,6 +675,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_edit-room",
key: "edit-room",
label: t("EditRoom"),
icon: "images/settings.react.svg",
@ -660,6 +683,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_invite-users-to-room",
key: "invite-users-to-room",
label: t("InviteUsers"),
icon: "/static/images/person.react.svg",
@ -668,6 +692,7 @@ class ContextOptionsStore {
action: item.id,
},
{
id: "option_room-info",
key: "room-info",
label: t("Common:Info"),
icon: "/static/images/info.outline.react.svg",
@ -675,6 +700,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_pin-room",
key: "pin-room",
label: t("Pin"),
icon: "/static/images/pin.react.svg",
@ -684,6 +710,7 @@ class ContextOptionsStore {
action: "pin",
},
{
id: "option_unpin-room",
key: "unpin-room",
label: t("Unpin"),
icon: "/static/images/unpin.react.svg",
@ -693,6 +720,7 @@ class ContextOptionsStore {
action: "unpin",
},
{
id: "option_sharing-settings",
key: "sharing-settings",
label: t("SharingPanel:SharingSettingsTitle"),
icon: "/static/images/share.react.svg",
@ -700,6 +728,7 @@ class ContextOptionsStore {
disabled: !isShareable,
},
{
id: "option_owner-change",
key: "owner-change",
label: t("Translations:OwnerChange"),
icon: "images/file.actions.owner.react.svg",
@ -707,6 +736,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_link-for-portal-users",
key: "link-for-portal-users",
label: t("LinkForPortalUsers"),
icon: "/static/images/invitation.link.react.svg",
@ -714,6 +744,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_send-by-email",
key: "send-by-email",
label: t("SendByEmail"),
icon: "/static/images/mail.react.svg",
@ -721,6 +752,7 @@ class ContextOptionsStore {
},
...versionActions,
{
id: "option_show-info",
key: "show-info",
label: t("Common:Info"),
icon: "/static/images/info.outline.react.svg",
@ -733,6 +765,7 @@ class ContextOptionsStore {
isSeparator: true,
},
{
id: "option_open-location",
key: "open-location",
label: t("OpenLocation"),
icon: "images/folder.location.react.svg",
@ -740,6 +773,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_mark-read",
key: "mark-read",
label: t("MarkRead"),
icon: "images/tick.rounded.svg",
@ -747,6 +781,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_mark-as-favorite",
key: "mark-as-favorite",
label: t("MarkAsFavorite"),
icon: "images/favorites.react.svg",
@ -756,6 +791,7 @@ class ContextOptionsStore {
action: "mark",
},
{
id: "option_remove-from-favorites",
key: "remove-from-favorites",
label: t("RemoveFromFavorites"),
icon: "images/favorites.react.svg",
@ -765,6 +801,7 @@ class ContextOptionsStore {
action: "remove",
},
{
id: "option_download",
key: "download",
label: t("Common:Download"),
icon: "images/download.react.svg",
@ -772,6 +809,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_download-as",
key: "download-as",
label: t("Translations:DownloadAs"),
icon: "images/download-as.react.svg",
@ -780,6 +818,7 @@ class ContextOptionsStore {
},
...moveActions,
{
id: "option_restore",
key: "restore",
label: t("Common:Restore"),
icon: "images/move.react.svg",
@ -787,6 +826,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_rename",
key: "rename",
label: t("Rename"),
icon: "images/rename.react.svg",
@ -798,6 +838,7 @@ class ContextOptionsStore {
isSeparator: true,
},
{
id: "option_unsubscribe",
key: "unsubscribe",
label: t("RemoveFromList"),
icon: "images/remove.svg",
@ -805,6 +846,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_change-thirdparty-info",
key: "change-thirdparty-info",
label: t("Translations:ThirdPartyInfo"),
icon: "/static/images/access.edit.react.svg",
@ -812,6 +854,7 @@ class ContextOptionsStore {
disabled: false,
},
{
id: "option_archive-room",
key: "archive-room",
label: t("Archived"),
icon: "/static/images/room.archive.svg",
@ -821,6 +864,7 @@ class ContextOptionsStore {
action: "archive",
},
{
id: "option_unarchive-room",
key: "unarchive-room",
label: t("Common:Restore"),
icon: "images/subtract.react.svg",
@ -830,6 +874,7 @@ class ContextOptionsStore {
action: "unarchive",
},
{
id: "option_delete",
key: "delete",
label: isRootThirdPartyFolder
? t("Common:Disconnect")
@ -885,7 +930,7 @@ class ContextOptionsStore {
deleteRooms,
} = this.filesActionsStore;
if (isRoomsFolder || isArchiveFolder) {
const isPinOption = selection.filter((item) => !item.pinned).length > 0;

View File

@ -1438,6 +1438,7 @@ class FilesActionStore {
if (!isTablet() && !isMobile) return null;
else
return {
id: "menu-show-info",
key: "show-info",
label: t("Common:Info"),
iconUrl: "/static/images/info.outline.react.svg",
@ -1447,6 +1448,7 @@ class FilesActionStore {
if (!this.isAvailableOption("copy")) return null;
else
return {
id: "menu-copy",
label: t("Translations:Copy"),
onClick: () => setCopyPanelVisible(true),
iconUrl: "/static/images/copyTo.react.svg",
@ -1456,6 +1458,7 @@ class FilesActionStore {
if (!this.isAvailableOption("download")) return null;
else
return {
id: "menu-download",
label: t("Common:Download"),
onClick: () =>
this.downloadAction(
@ -1468,6 +1471,7 @@ class FilesActionStore {
if (!this.isAvailableOption("downloadAs")) return null;
else
return {
id: "menu-download-as",
label: t("Translations:DownloadAs"),
onClick: () => setDownloadDialogVisible(true),
iconUrl: "/static/images/downloadAs.react.svg",
@ -1477,12 +1481,14 @@ class FilesActionStore {
if (!this.isAvailableOption("moveTo")) return null;
else
return {
id: "menu-move-to",
label: t("MoveTo"),
onClick: () => setMoveToPanelVisible(true),
iconUrl: "/static/images/move.react.svg",
};
case "pin":
return {
id: "menu-pin",
key: "pin",
label: t("Pin"),
iconUrl: "/static/images/pin.react.svg",
@ -1491,6 +1497,7 @@ class FilesActionStore {
};
case "unpin":
return {
id: "menu-unpin",
key: "unpin",
label: t("Unpin"),
iconUrl: "/static/images/unpin.react.svg",
@ -1501,6 +1508,7 @@ class FilesActionStore {
if (!this.isAvailableOption("archive")) return null;
else
return {
id: "menu-archive",
key: "archive",
label: t("Archived"),
iconUrl: "/static/images/room.archive.svg",
@ -1511,6 +1519,7 @@ class FilesActionStore {
if (!this.isAvailableOption("unarchive")) return null;
else
return {
id: "menu-unarchive",
key: "unarchive",
label: t("Common:Restore"),
iconUrl: "images/subtract.react.svg",
@ -1521,6 +1530,7 @@ class FilesActionStore {
if (!this.isAvailableOption("delete-room")) return null;
else
return {
id: "menu-delete-room",
label: t("Common:Delete"),
onClick: () => this.deleteRooms(t),
iconUrl: "/static/images/delete.react.svg",
@ -1530,6 +1540,7 @@ class FilesActionStore {
if (!this.isAvailableOption("delete")) return null;
else
return {
id: "menu-delete",
label: t("Common:Delete"),
onClick: () => {
if (this.settingsStore.confirmDelete) {
@ -1699,6 +1710,7 @@ class FilesActionStore {
.set("download", download)
.set("downloadAs", downloadAs)
.set("restore", {
id: "menu-restore",
label: t("Common:Restore"),
onClick: () => setMoveToPanelVisible(true),
iconUrl: "/static/images/move.react.svg",

View File

@ -2191,6 +2191,42 @@ class FilesStore {
}
};
getCheckboxItemId = (key) => {
switch (key) {
case "all":
return "selected-all";
case FilterType.FoldersOnly:
return "selected-only-folders";
case FilterType.DocumentsOnly:
return "selected-only-documents";
case FilterType.PresentationsOnly:
return "selected-only-presentations";
case FilterType.SpreadsheetsOnly:
return "selected-only-spreadsheets";
case FilterType.ImagesOnly:
return "selected-only-images";
case FilterType.MediaOnly:
return "selected-only-media";
case FilterType.ArchiveOnly:
return "selected-only-archives";
case FilterType.FilesOnly:
return "selected-only-files";
case `room-${RoomsType.FillingFormsRoom}`:
return "selected-only-filling-form-rooms";
case `room-${RoomsType.CustomRoom}`:
return "selected-only-custom-room";
case `room-${RoomsType.EditingRoom}`:
return "selected-only-collaboration-rooms";
case `room-${RoomsType.ReviewRoom}`:
return "selected-only-review-rooms";
case `room-${RoomsType.ReadOnlyRoom}`:
return "selected-only-view-rooms";
default:
return "";
}
};
get sortedFiles() {
const {
extsConvertible,

View File

@ -35,7 +35,18 @@ class HeaderMenuStore {
return cbMenu;
}
getMenuItemId = (item) => {
switch (item) {
case "active":
return "selected_active";
case "pending":
return "selected_pending";
case "disabled":
return "selected_disabled";
case "all":
return "selected_all";
}
};
getCheckboxItemLabel = (t, item) => {
switch (item) {
case "active":

View File

@ -193,7 +193,7 @@ class PeopleStore {
const options = [];
const adminOption = {
id: "group-menu_administrator",
id: "menu_change-user_administrator",
className: "group-menu_drop-down",
label: t("Common:DocSpaceAdmin"),
title: t("Common:DocSpaceAdmin"),
@ -202,7 +202,7 @@ class PeopleStore {
key: "administrator",
};
const managerOption = {
id: "group-menu_manager",
id: "menu_change-user_manager",
className: "group-menu_drop-down",
label: t("Common:RoomAdmin"),
title: t("Common:RoomAdmin"),
@ -211,7 +211,7 @@ class PeopleStore {
key: "manager",
};
const userOption = {
id: "group-menu_user",
id: "menu_change-user_user",
className: "group-menu_drop-down",
label: t("Common:User"),
title: t("Common:User"),
@ -228,6 +228,7 @@ class PeopleStore {
const headerMenu = [
{
id: "menu-change-type",
key: "change-user",
label: t("ChangeUserTypeDialog:ChangeUserTypeButton"),
disabled: !hasUsersToMakeEmployees,
@ -236,6 +237,7 @@ class PeopleStore {
options: options,
},
{
id: "menu-info",
key: "info",
label: t("Common:Info"),
disabled:
@ -245,6 +247,7 @@ class PeopleStore {
iconUrl: "images/info.react.svg",
},
{
id: "menu-invite",
key: "invite",
label: t("Common:Invite"),
disabled: !hasUsersToInvite,
@ -252,6 +255,7 @@ class PeopleStore {
iconUrl: "/static/images/invite.again.react.svg",
},
{
id: "menu-enable",
key: "enable",
label: t("Common:Enable"),
disabled: !hasUsersToActivate,
@ -259,6 +263,7 @@ class PeopleStore {
iconUrl: "images/enable.react.svg",
},
{
id: "menu-disable",
key: "disable",
label: t("PeopleTranslations:DisableUserButton"),
disabled: !hasUsersToDisable,
@ -266,6 +271,7 @@ class PeopleStore {
iconUrl: "images/disable.react.svg",
},
{
id: "menu-delete",
key: "delete",
label: t("Common:Delete"),
disabled: !hasUsersToRemove,

View File

@ -195,6 +195,7 @@ const Navigation = ({
</StyledContainer>
{infoPanelIsVisible && (
<ToggleInfoPanelButton
id="info-panel-toggle--open"
isRootFolder={isRootFolder}
toggleInfoPanel={toggleInfoPanel}
isInfoPanelVisible={isInfoPanelVisible}

View File

@ -125,6 +125,7 @@ const ControlButtons = ({
)}
{!personal && (
<ContextMenuButton
id="header_optional-button"
zIndex={402}
className="option-button"
directionX="right"
@ -147,6 +148,7 @@ const ControlButtons = ({
<>
{!isMobile && (
<PlusButton
id="header_add-button"
className="add-button"
getData={getContextOptionsPlus}
withMenu={withMenu}

View File

@ -31,6 +31,7 @@ const PlusButton = (props) => {
<IconButton
onClick={onClick}
iconName="images/plus.svg"
id={props.id}
size={15}
isFill
/>
@ -50,6 +51,7 @@ PlusButton.propTypes = {
className: PropTypes.string,
getData: PropTypes.func.isRequired,
onPlusClick: PropTypes.func,
id: PropTypes.string,
};
PlusButton.defaultProps = {

View File

@ -54,6 +54,7 @@ const ToggleInfoPanelButton = ({
isRootFolder,
isInfoPanelVisible,
toggleInfoPanel,
id,
}) => {
return (
<StyledInfoPanelToggleWrapper
@ -62,6 +63,7 @@ const ToggleInfoPanelButton = ({
>
<div className="info-panel-toggle-bg">
<IconButton
id={id}
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"

View File

@ -23,8 +23,8 @@ class InfoPanelStore {
selection = null;
selectionParentRoom = null;
roomsView = "details";
fileView = "history";
roomsView = "info_details";
fileView = "info_history";
authStore = null;
settingsStore = null;
@ -54,7 +54,7 @@ class InfoPanelStore {
setView = (view) => {
this.roomsView = view;
this.fileView = view === "members" ? "history" : view;
this.fileView = view === "info_members" ? "info_history" : view;
};
// Selection helpers //

View File

@ -222,7 +222,7 @@ class ContextMenuButton extends React.Component {
(item.label || item.icon || item.key) && (
<DropDownItem
{...item}
id={item.key}
id={item.id}
key={item.key || index}
onClick={this.onDropDownItemClick.bind(this, item)}
/>

View File

@ -113,6 +113,7 @@ class LinkWithDropdown extends React.Component {
const dropDownItem = data.map((item) => (
<DropDownItem
className="drop-down-item"
id={item.key}
key={item.key}
{...item}
onClick={this.onClickDropDownItem}

View File

@ -140,6 +140,7 @@ const GroupMenuItem = ({ item }) => {
title,
withDropDown,
options,
id,
} = item;
return (
<>
@ -148,6 +149,7 @@ const GroupMenuItem = ({ item }) => {
) : (
<>
<StyledButton
id={id}
label={label}
title={title || label}
isDisabled={disabled}

View File

@ -36,6 +36,7 @@ const TableGroupMenu = (props) => {
{...rest}
>
<Checkbox
id="menu-checkbox_selected-all-file"
className="table-container_group-menu-checkbox"
onChange={onCheckboxChange}
isChecked={isChecked}
@ -43,6 +44,7 @@ const TableGroupMenu = (props) => {
title={t("Common:MainHeaderSelectAll")}
/>
<ComboBox
id="menu-combobox"
comboIcon="/static/images/triangle.navigation.down.react.svg"
noBorder
advancedOptions={checkboxOptions}
@ -63,6 +65,7 @@ const TableGroupMenu = (props) => {
<StyledInfoPanelToggleWrapper isInfoPanelVisible={isInfoPanelVisible}>
<div className="info-panel-toggle-bg">
<IconButton
id="info-panel-toggle--open"
className="info-panel-toggle"
iconName="images/panel.react.svg"
size="16"