Merge branch 'develop' into bugfix/fix-sso-loader
This commit is contained in:
commit
cb3729b0bc
@ -8,7 +8,7 @@
|
||||
"clean": "shx rm -rf dist",
|
||||
"deploy": "shx --silent mkdir -p ../../build/deploy/client && shx cp -r dist/* ../../build/deploy/client",
|
||||
"start": "NODE_OPTIONS=--openssl-legacy-provider webpack-cli serve",
|
||||
"start-prod": "NODE_OPTIONS=--openssl-legacy-provider webpack --mode production && serve dist -s -p 5001"
|
||||
"start-prod": "serve dist -s -p 5001"
|
||||
},
|
||||
"old-scripts": {
|
||||
"build:test": "webpack --env minimize=false --mode production",
|
||||
|
@ -8,6 +8,7 @@
|
||||
"AllFiles": "All files",
|
||||
"Archives": "Archives",
|
||||
"ArchiveEmptyScreen": "You can archive rooms you don’t use and restore them in your DocSpace at any moment or delete them permanently. These rooms will appear here.",
|
||||
"ArchiveEmptyScreenUser": "Rooms that have been archived will appear here.",
|
||||
"ArchiveEmptyScreenHeader": "No archived rooms here yet",
|
||||
"BackToParentFolderButton": "Back to parent folder",
|
||||
"ByAuthor": "Author",
|
||||
|
@ -63,7 +63,9 @@ const RootFolderContainer = (props) => {
|
||||
const roomsDescription = isVisitor
|
||||
? t("RoomEmptyContainerDescriptionUser")
|
||||
: t("RoomEmptyContainerDescription");
|
||||
const archiveRoomsDescription = t("ArchiveEmptyScreen");
|
||||
const archiveRoomsDescription = isVisitor
|
||||
? t("ArchiveEmptyScreenUser")
|
||||
: t("ArchiveEmptyScreen");
|
||||
|
||||
const privateRoomHeader = t("PrivateRoomHeader");
|
||||
const privacyIcon = <img alt="" src="images/privacy.svg" />;
|
||||
@ -289,7 +291,7 @@ const RootFolderContainer = (props) => {
|
||||
</div>
|
||||
);
|
||||
|
||||
const archiveButtons = (
|
||||
const archiveButtons = !isVisitor && (
|
||||
<div className="empty-folder_container-links">
|
||||
<img
|
||||
className="empty-folder_container-image"
|
||||
|
@ -128,7 +128,7 @@ const ArchiveDialog = withTranslation(["Files", "ArchiveDialog", "Common"])(
|
||||
);
|
||||
|
||||
export default inject(({ filesStore, filesActionsStore, dialogsStore }) => {
|
||||
const { folders, selection, bufferSelection } = filesStore;
|
||||
const { roomsForRestore, selection, bufferSelection } = filesStore;
|
||||
const { setArchiveAction } = filesActionsStore;
|
||||
|
||||
const {
|
||||
@ -142,7 +142,7 @@ export default inject(({ filesStore, filesActionsStore, dialogsStore }) => {
|
||||
} = dialogsStore;
|
||||
|
||||
const items = restoreAll
|
||||
? folders
|
||||
? roomsForRestore
|
||||
: selection.length > 0
|
||||
? selection
|
||||
: [bufferSelection];
|
||||
|
@ -115,22 +115,26 @@ const SectionFilterContent = ({
|
||||
|
||||
const statusItems = [
|
||||
{
|
||||
id: "filter_status-user",
|
||||
key: "filter-status",
|
||||
group: "filter-status",
|
||||
label: t("UserStatus"),
|
||||
isHeader: true,
|
||||
},
|
||||
{
|
||||
id: "filter_status-active",
|
||||
key: 1,
|
||||
group: "filter-status",
|
||||
label: t("Common:Active"),
|
||||
},
|
||||
{
|
||||
id: "filter_status-pending",
|
||||
key: 2,
|
||||
group: "filter-status",
|
||||
label: t("PeopleTranslations:PendingTitle"),
|
||||
},
|
||||
{
|
||||
id: "filter_status-disabled",
|
||||
key: 3,
|
||||
group: "filter-status",
|
||||
label: t("PeopleTranslations:DisabledEmployeeStatus"),
|
||||
@ -145,13 +149,20 @@ const SectionFilterContent = ({
|
||||
isHeader: true,
|
||||
isLast: true,
|
||||
},
|
||||
{ key: "admin", group: "filter-type", label: t("Common:DocSpaceAdmin") },
|
||||
{
|
||||
id: "filter_type-docspace-admin",
|
||||
key: "admin",
|
||||
group: "filter-type",
|
||||
label: t("Common:DocSpaceAdmin"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-room-admin",
|
||||
key: "manager",
|
||||
group: "filter-type",
|
||||
label: t("Common:RoomAdmin"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-user",
|
||||
key: "user",
|
||||
group: "filter-type",
|
||||
label: userCaption,
|
||||
@ -215,11 +226,17 @@ const SectionFilterContent = ({
|
||||
const getSortData = React.useCallback(() => {
|
||||
return [
|
||||
{
|
||||
id: "sory-by_first-name",
|
||||
key: "firstname",
|
||||
label: t("Common:ByFirstNameSorting"),
|
||||
default: true,
|
||||
},
|
||||
{ key: "lastname", label: t("Common:ByLastNameSorting"), default: true },
|
||||
{
|
||||
id: "sory-by_last-name",
|
||||
key: "lastname",
|
||||
label: t("Common:ByLastNameSorting"),
|
||||
default: true,
|
||||
},
|
||||
];
|
||||
}, [t]);
|
||||
|
||||
|
@ -268,9 +268,11 @@ const SectionHeaderContent = (props) => {
|
||||
];
|
||||
};
|
||||
|
||||
const isEmptyHeader = headerMenu.some((x) => !x.disabled);
|
||||
|
||||
return (
|
||||
<StyledContainer>
|
||||
{isHeaderVisible ? (
|
||||
{isHeaderVisible && isEmptyHeader ? (
|
||||
<div className="group-button-menu-container">
|
||||
<TableGroupMenu
|
||||
checkboxOptions={getMenuItems()}
|
||||
|
@ -18,6 +18,7 @@ import { ColorTheme, ThemeType } from "@docspace/common/components/ColorTheme";
|
||||
|
||||
import { StyledInfoPanelHeader } from "./styles/common";
|
||||
import { FolderType } from "@docspace/common/constants";
|
||||
import { getArchiveRoomRoleActions } from "@docspace/common/utils/actions";
|
||||
|
||||
const InfoPanelHeaderContent = (props) => {
|
||||
const {
|
||||
@ -32,6 +33,7 @@ const InfoPanelHeaderContent = (props) => {
|
||||
getIsAccounts,
|
||||
isRootFolder,
|
||||
rootFolderType,
|
||||
canViewUsers,
|
||||
} = props;
|
||||
|
||||
const isRooms = getIsRooms();
|
||||
@ -73,7 +75,9 @@ const InfoPanelHeaderContent = (props) => {
|
||||
];
|
||||
|
||||
const roomsSubmenu = isArchiveRoot
|
||||
? [{ ...submenuData[0] }, { ...submenuData[2] }]
|
||||
? canViewUsers(selection)
|
||||
? [{ ...submenuData[0] }, { ...submenuData[2] }]
|
||||
: [{ ...submenuData[2] }]
|
||||
: [...submenuData];
|
||||
const personalSubmenu = [submenuData[1], submenuData[2]];
|
||||
|
||||
@ -128,7 +132,7 @@ const InfoPanelHeaderContent = (props) => {
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ auth, selectedFolderStore }) => {
|
||||
export default inject(({ auth, selectedFolderStore, accessRightsStore }) => {
|
||||
const {
|
||||
selection,
|
||||
setIsVisible,
|
||||
@ -141,6 +145,7 @@ export default inject(({ auth, selectedFolderStore }) => {
|
||||
getIsAccounts,
|
||||
} = auth.infoPanelStore;
|
||||
const { isRootFolder, rootFolderType } = selectedFolderStore;
|
||||
const { canViewUsers } = accessRightsStore;
|
||||
|
||||
return {
|
||||
selection,
|
||||
@ -155,6 +160,7 @@ export default inject(({ auth, selectedFolderStore }) => {
|
||||
|
||||
isRootFolder,
|
||||
rootFolderType,
|
||||
canViewUsers,
|
||||
};
|
||||
})(
|
||||
withTranslation(["Common", "InfoPanel"])(
|
||||
|
@ -610,6 +610,7 @@ const SectionFilterContent = ({
|
||||
!isFavoritesFolder && !isRecentFolder
|
||||
? [
|
||||
{
|
||||
id: "filter_type-folders",
|
||||
key: FilterType.FoldersOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Translations:Folders").toLowerCase(),
|
||||
@ -620,6 +621,7 @@ const SectionFilterContent = ({
|
||||
const images = !isRecentFolder
|
||||
? [
|
||||
{
|
||||
id: "filter_type-images",
|
||||
key: FilterType.ImagesOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Images").toLowerCase(),
|
||||
@ -630,6 +632,7 @@ const SectionFilterContent = ({
|
||||
const archives = !isRecentFolder
|
||||
? [
|
||||
{
|
||||
id: "filter_type-archive",
|
||||
key: FilterType.ArchiveOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Archives").toLowerCase(),
|
||||
@ -640,6 +643,7 @@ const SectionFilterContent = ({
|
||||
const media = !isRecentFolder
|
||||
? [
|
||||
{
|
||||
id: "filter_type-media",
|
||||
key: FilterType.MediaOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Media").toLowerCase(),
|
||||
@ -657,26 +661,31 @@ const SectionFilterContent = ({
|
||||
isLast: isLastTypeOptionsRooms,
|
||||
},
|
||||
{
|
||||
id: "filter_type-custom",
|
||||
key: RoomsType.CustomRoom,
|
||||
group: FilterGroups.roomFilterType,
|
||||
label: t("CustomRooms"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-filling-form",
|
||||
key: RoomsType.FillingFormsRoom,
|
||||
group: FilterGroups.roomFilterType,
|
||||
label: t("FillingFormRooms"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-collaboration",
|
||||
key: RoomsType.EditingRoom,
|
||||
group: FilterGroups.roomFilterType,
|
||||
label: t("CollaborationRooms"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-review",
|
||||
key: RoomsType.ReviewRoom,
|
||||
group: FilterGroups.roomFilterType,
|
||||
label: t("ReviewRooms"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-view-only",
|
||||
key: RoomsType.ReadOnlyRoom,
|
||||
group: FilterGroups.roomFilterType,
|
||||
label: t("ViewOnlyRooms"),
|
||||
@ -692,26 +701,31 @@ const SectionFilterContent = ({
|
||||
},
|
||||
...folders,
|
||||
{
|
||||
id: "filter_type-documents",
|
||||
key: FilterType.DocumentsOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Common:Documents").toLowerCase(),
|
||||
},
|
||||
{
|
||||
id: "filter_type-presentations",
|
||||
key: FilterType.PresentationsOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Translations:Presentations").toLowerCase(),
|
||||
},
|
||||
{
|
||||
id: "filter_type-spreadsheets",
|
||||
key: FilterType.SpreadsheetsOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Translations:Spreadsheets").toLowerCase(),
|
||||
},
|
||||
{
|
||||
id: "filter_type-form-templates",
|
||||
key: FilterType.OFormTemplateOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("FormsTemplates").toLowerCase(),
|
||||
},
|
||||
{
|
||||
id: "filter_type-forms",
|
||||
key: FilterType.OFormOnly.toString(),
|
||||
group: FilterGroups.filterType,
|
||||
label: t("Forms").toLowerCase(),
|
||||
@ -731,16 +745,19 @@ const SectionFilterContent = ({
|
||||
withMultiItems: true,
|
||||
},
|
||||
{
|
||||
id: "filter_author-me",
|
||||
key: FilterKeys.me,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Common:MeLabel"),
|
||||
},
|
||||
{
|
||||
id: "filter_author-other",
|
||||
key: FilterKeys.other,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Common:OtherLabel"),
|
||||
},
|
||||
{
|
||||
id: "filter_author-user",
|
||||
key: FilterKeys.user,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Translations:AddOwner"),
|
||||
@ -857,13 +874,19 @@ const SectionFilterContent = ({
|
||||
withoutSeparator: true,
|
||||
},
|
||||
{
|
||||
id: "filter_folders",
|
||||
key: "folders",
|
||||
group: FilterGroups.filterFolders,
|
||||
label: "",
|
||||
withOptions: true,
|
||||
options: [
|
||||
{ key: FilterKeys.withSubfolders, label: t("WithSubfolders") },
|
||||
{
|
||||
id: "filter_folders_with-subfolders",
|
||||
key: FilterKeys.withSubfolders,
|
||||
label: t("WithSubfolders"),
|
||||
},
|
||||
{
|
||||
id: "filter_folders_exclude-subfolders",
|
||||
key: FilterKeys.excludeSubfolders,
|
||||
label: t("ExcludeSubfolders"),
|
||||
},
|
||||
@ -879,6 +902,7 @@ const SectionFilterContent = ({
|
||||
withoutHeader: true,
|
||||
},
|
||||
{
|
||||
id: "filter_search-by-file-contents",
|
||||
key: "true",
|
||||
group: FilterGroups.filterContent,
|
||||
label: t("SearchByContent"),
|
||||
@ -899,16 +923,19 @@ const SectionFilterContent = ({
|
||||
withMultiItems: true,
|
||||
},
|
||||
{
|
||||
id: "filter_author-me",
|
||||
key: FilterKeys.me,
|
||||
group: FilterGroups.filterAuthor,
|
||||
label: t("Common:MeLabel"),
|
||||
},
|
||||
{
|
||||
id: "filter_author-other",
|
||||
key: FilterKeys.other,
|
||||
group: FilterGroups.filterAuthor,
|
||||
label: t("Common:OtherLabel"),
|
||||
},
|
||||
{
|
||||
id: "filter_author-user",
|
||||
key: FilterKeys.user,
|
||||
group: FilterGroups.filterAuthor,
|
||||
label: t("Translations:AddAuthor"),
|
||||
@ -936,11 +963,13 @@ const SectionFilterContent = ({
|
||||
const getViewSettingsData = React.useCallback(() => {
|
||||
const viewSettings = [
|
||||
{
|
||||
id: "view-switch_rows",
|
||||
value: "row",
|
||||
label: t("ViewList"),
|
||||
icon: "/static/images/view-rows.react.svg",
|
||||
},
|
||||
{
|
||||
id: "view-switch_tiles",
|
||||
value: "tile",
|
||||
label: t("ViewTiles"),
|
||||
icon: "/static/images/view-tiles.react.svg",
|
||||
@ -954,29 +983,58 @@ const SectionFilterContent = ({
|
||||
const getSortData = React.useCallback(() => {
|
||||
const commonOptions = [];
|
||||
|
||||
const name = { key: "AZ", label: t("Common:Name"), default: true };
|
||||
const name = {
|
||||
id: "sort-by_name",
|
||||
key: "AZ",
|
||||
label: t("Common:Name"),
|
||||
default: true,
|
||||
};
|
||||
const modifiedDate = {
|
||||
id: "sort-by_modified",
|
||||
key: "DateAndTime",
|
||||
label: t("ByLastModified"),
|
||||
default: true,
|
||||
};
|
||||
|
||||
const type = { key: "Type", label: t("Common:Type"), default: true };
|
||||
const size = { key: "Size", label: t("Common:Size"), default: true };
|
||||
const type = {
|
||||
id: "sort-by_type",
|
||||
key: "Type",
|
||||
label: t("Common:Type"),
|
||||
default: true,
|
||||
};
|
||||
const size = {
|
||||
id: "sort-by_size",
|
||||
key: "Size",
|
||||
label: t("Common:Size"),
|
||||
default: true,
|
||||
};
|
||||
const creationDate = {
|
||||
id: "sort-by_created",
|
||||
key: "DateAndTimeCreation",
|
||||
label: t("ByCreation"),
|
||||
default: true,
|
||||
};
|
||||
const authorOption = {
|
||||
id: "sort-by_author",
|
||||
key: "Author",
|
||||
label: t("ByAuthor"),
|
||||
default: true,
|
||||
};
|
||||
|
||||
const owner = { key: "Author", label: t("Common:Owner"), default: true };
|
||||
const tags = { key: "Tags", label: t("Tags"), default: true };
|
||||
const owner = {
|
||||
id: "sort-by_owner",
|
||||
key: "Author",
|
||||
label: t("Common:Owner"),
|
||||
default: true,
|
||||
};
|
||||
const tags = {
|
||||
id: "sort-by_tags",
|
||||
key: "Tags",
|
||||
label: t("Tags"),
|
||||
default: true,
|
||||
};
|
||||
const roomType = {
|
||||
id: "sort-by_room-type",
|
||||
key: "roomType",
|
||||
label: t("Common:Type"),
|
||||
default: true,
|
||||
|
@ -345,6 +345,9 @@ class SectionHeaderContent extends React.Component {
|
||||
onShowInfoPanel,
|
||||
onClickArchive,
|
||||
onClickReconnectStorage,
|
||||
|
||||
canRestoreAll,
|
||||
canDeleteAll,
|
||||
} = this.props;
|
||||
|
||||
const isDisabled = isRecycleBinFolder || isRoom;
|
||||
@ -355,14 +358,14 @@ class SectionHeaderContent extends React.Component {
|
||||
key: "empty-archive",
|
||||
label: t("ArchiveAction"),
|
||||
onClick: this.onEmptyTrashAction,
|
||||
disabled: !isArchiveFolder,
|
||||
disabled: !canRestoreAll,
|
||||
icon: "images/clear.trash.react.svg",
|
||||
},
|
||||
{
|
||||
key: "restore-all",
|
||||
label: t("RestoreAll"),
|
||||
onClick: this.onRestoreAllArchiveAction,
|
||||
disabled: !isArchiveFolder,
|
||||
disabled: !canDeleteAll,
|
||||
icon: "images/subtract.react.svg",
|
||||
},
|
||||
];
|
||||
@ -608,6 +611,7 @@ class SectionHeaderContent extends React.Component {
|
||||
isRoomsFolder,
|
||||
isEmptyPage,
|
||||
canCreateFiles,
|
||||
isEmptyArchive,
|
||||
} = this.props;
|
||||
|
||||
const menuItems = this.getMenuItems();
|
||||
@ -618,7 +622,7 @@ class SectionHeaderContent extends React.Component {
|
||||
<Consumer>
|
||||
{(context) => (
|
||||
<StyledContainer>
|
||||
{isHeaderVisible ? (
|
||||
{isHeaderVisible && headerMenu.length ? (
|
||||
<TableGroupMenu
|
||||
checkboxOptions={menuItems}
|
||||
onChange={this.onChange}
|
||||
@ -650,7 +654,9 @@ class SectionHeaderContent extends React.Component {
|
||||
onClose={this.onClose}
|
||||
onClickFolder={this.onClickFolder}
|
||||
isRecycleBinFolder={isRecycleBinFolder || isArchiveFolder}
|
||||
isEmptyFilesList={isEmptyFilesList}
|
||||
isEmptyFilesList={
|
||||
isArchiveFolder ? isEmptyArchive : isEmptyFilesList
|
||||
}
|
||||
clearTrash={this.onEmptyTrashAction}
|
||||
onBackToParentFolder={this.onBackToParentFolder}
|
||||
toggleInfoPanel={this.onToggleInfoPanel}
|
||||
@ -705,7 +711,8 @@ export default inject(
|
||||
|
||||
setAlreadyFetchingRooms,
|
||||
|
||||
filesList,
|
||||
roomsForRestore,
|
||||
roomsForDelete,
|
||||
|
||||
categoryType,
|
||||
isEmptyPage,
|
||||
@ -766,6 +773,12 @@ export default inject(
|
||||
|
||||
const { canCreateFiles } = accessRightsStore;
|
||||
|
||||
const canRestoreAll = isArchiveFolder && roomsForRestore.length > 0;
|
||||
|
||||
const canDeleteAll = isArchiveFolder && roomsForDelete.length > 0;
|
||||
|
||||
const isEmptyArchive = !canRestoreAll && !canDeleteAll;
|
||||
|
||||
return {
|
||||
showText: auth.settingsStore.showText,
|
||||
isDesktop: auth.settingsStore.isDesktopClient,
|
||||
@ -809,6 +822,7 @@ export default inject(
|
||||
isRecycleBinFolder,
|
||||
setEmptyTrashDialogVisible,
|
||||
isEmptyFilesList,
|
||||
isEmptyArchive,
|
||||
isPrivacyFolder,
|
||||
isArchiveFolder,
|
||||
|
||||
@ -841,6 +855,10 @@ export default inject(
|
||||
onClickArchive,
|
||||
|
||||
rootFolderType,
|
||||
|
||||
isEmptyArchive,
|
||||
canRestoreAll,
|
||||
canDeleteAll,
|
||||
};
|
||||
}
|
||||
)(
|
||||
|
@ -9,6 +9,7 @@ import {
|
||||
import {
|
||||
getFileRoleActions,
|
||||
getRoomRoleActions,
|
||||
getArchiveRoomRoleActions,
|
||||
} from "@docspace/common/utils/actions";
|
||||
|
||||
class AccessRightsStore {
|
||||
@ -207,6 +208,19 @@ class AccessRightsStore {
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
canViewUsers = (room) => {
|
||||
const { rootFolderType } = this.selectedFolderStore;
|
||||
|
||||
if (!room) return false;
|
||||
|
||||
const options =
|
||||
rootFolderType === FolderType.Archive
|
||||
? getArchiveRoomRoleActions(room.access)
|
||||
: getRoomRoleActions(room.access);
|
||||
|
||||
return options.viewUsers;
|
||||
};
|
||||
}
|
||||
|
||||
export default AccessRightsStore;
|
||||
|
@ -395,9 +395,9 @@ class FilesActionStore {
|
||||
clearSecondaryProgressData,
|
||||
} = secondaryProgressDataStore;
|
||||
const { isArchiveFolder } = this.treeFoldersStore;
|
||||
const { addActiveItems, folders, getIsEmptyTrash } = this.filesStore;
|
||||
const { addActiveItems, roomsForDelete } = this.filesStore;
|
||||
|
||||
const folderIds = folders.map((f) => f.id);
|
||||
const folderIds = roomsForDelete.map((f) => f.id);
|
||||
if (isArchiveFolder) addActiveItems(null, folderIds);
|
||||
|
||||
setSecondaryProgressBarData({
|
||||
@ -1580,22 +1580,6 @@ class FilesActionStore {
|
||||
const deleteOption = this.getOption("delete-room", t);
|
||||
const showOption = this.getOption("show-info", t);
|
||||
|
||||
const { selection } = this.filesStore;
|
||||
const { canArchiveRoom } = this.accessRightsStore;
|
||||
|
||||
const canArchive = selection.map((s) => canArchiveRoom(s)).filter((s) => s);
|
||||
|
||||
if (canArchive.length <= 0) {
|
||||
let pinName = "unpin";
|
||||
|
||||
selection.forEach((item) => {
|
||||
if (!item.pinned) pinName = "pin";
|
||||
});
|
||||
|
||||
const pin = this.getOption(pinName, t);
|
||||
itemsCollection.set(pinName, pin);
|
||||
}
|
||||
|
||||
itemsCollection
|
||||
.set("unarchive", archive)
|
||||
.set("show-info", showOption)
|
||||
|
@ -2740,6 +2740,14 @@ class FilesStore {
|
||||
isRecentFolder
|
||||
);
|
||||
}
|
||||
|
||||
get roomsForRestore() {
|
||||
return this.folders.filter((f) => getRoomRoleActions(f.access).archive);
|
||||
}
|
||||
|
||||
get roomsForDelete() {
|
||||
return this.folders.filter((f) => getRoomRoleActions(f.access).delete);
|
||||
}
|
||||
}
|
||||
|
||||
export default FilesStore;
|
||||
|
@ -159,8 +159,8 @@ export function archiveRoom(id, deleteAfter = false) {
|
||||
});
|
||||
}
|
||||
|
||||
export function unarchiveRoom(id, deleteAfter = true) {
|
||||
const data = { deleteAfter };
|
||||
export function unarchiveRoom(id) {
|
||||
const data = { deleteAfter: false };
|
||||
const options = {
|
||||
method: "put",
|
||||
url: `/files/rooms/${id}/unarchive`,
|
||||
|
@ -123,9 +123,11 @@ const FilterInput = React.memo(
|
||||
value={inputValue}
|
||||
onChange={onSearch}
|
||||
onClearSearch={onClearSearch}
|
||||
id="filter_search-input"
|
||||
/>
|
||||
<FilterButton
|
||||
t={t}
|
||||
id="filter-button"
|
||||
onFilter={onFilter}
|
||||
getFilterData={getFilterData}
|
||||
selectedFilterValue={selectedFilterValue}
|
||||
@ -138,6 +140,7 @@ const FilterInput = React.memo(
|
||||
{!isRecentFolder && (
|
||||
<SortButton
|
||||
t={t}
|
||||
id="sort-by-button"
|
||||
onSort={onSort}
|
||||
getSortData={getSortData}
|
||||
getSelectedSortData={getSelectedSortData}
|
||||
@ -159,6 +162,7 @@ const FilterInput = React.memo(
|
||||
!isTabletUtils()) ||
|
||||
isRecentFolder) && (
|
||||
<ViewSelector
|
||||
id={viewAs === "tile" ? "view-switch--row" : "view-switch--tile"}
|
||||
style={{ marginLeft: "8px" }}
|
||||
viewAs={viewAs === "table" ? "row" : viewAs}
|
||||
viewSettings={viewSettings}
|
||||
|
@ -371,6 +371,7 @@ const FilterBlock = ({
|
||||
<Heading size="medium">{filterHeader}</Heading>
|
||||
{showFooter && (
|
||||
<IconButton
|
||||
id="filter_search-options-clear"
|
||||
iconName="/static/images/clear.react.svg"
|
||||
isFill={true}
|
||||
onClick={onClearFilter}
|
||||
@ -411,6 +412,7 @@ const FilterBlock = ({
|
||||
{showFooter && (
|
||||
<StyledFilterBlockFooter>
|
||||
<Button
|
||||
id="filter_apply-button"
|
||||
size="normal"
|
||||
primary={true}
|
||||
label={t("ApplyButton")}
|
||||
@ -418,6 +420,7 @@ const FilterBlock = ({
|
||||
onClick={onFilterAction}
|
||||
/>
|
||||
<Button
|
||||
id="filter_cancel-button"
|
||||
size="normal"
|
||||
label={t("CancelButton")}
|
||||
scale={true}
|
||||
@ -426,7 +429,7 @@ const FilterBlock = ({
|
||||
</StyledFilterBlockFooter>
|
||||
)}
|
||||
|
||||
<StyledControlContainer onClick={hideFilterBlock}>
|
||||
<StyledControlContainer id="filter_close" onClick={hideFilterBlock}>
|
||||
<StyledCrossIcon />
|
||||
</StyledControlContainer>
|
||||
</StyledFilterBlock>
|
||||
|
@ -82,6 +82,7 @@ const FilterBlockItem = ({
|
||||
onClick={(event) =>
|
||||
showSelectorAction(event, isAuthor, item.group, [])
|
||||
}
|
||||
id="filter_add-author"
|
||||
/>
|
||||
<StyledFilterBlockItemSelectorText noSelect={true}>
|
||||
{item.label}
|
||||
@ -90,6 +91,7 @@ const FilterBlockItem = ({
|
||||
) : (
|
||||
<ColorTheme
|
||||
key={item.key}
|
||||
id={item.id}
|
||||
isSelected={item.isSelected}
|
||||
onClick={(event) =>
|
||||
showSelectorAction(
|
||||
@ -136,6 +138,7 @@ const FilterBlockItem = ({
|
||||
|
||||
return (
|
||||
<ComboBox
|
||||
id={item.id}
|
||||
className={"combo-item"}
|
||||
key={item.key}
|
||||
onSelect={(data) =>
|
||||
@ -162,6 +165,7 @@ const FilterBlockItem = ({
|
||||
return (
|
||||
<StyledFilterBlockItemCheckboxContainer key={item.key}>
|
||||
<Checkbox
|
||||
id={item.id}
|
||||
isChecked={item.isSelected}
|
||||
label={item.label}
|
||||
onChange={() =>
|
||||
@ -178,6 +182,7 @@ const FilterBlockItem = ({
|
||||
key={item.key}
|
||||
isSelected={item.isSelected}
|
||||
name={`${item.label}-${item.key}`}
|
||||
id={item.id}
|
||||
onClick={() =>
|
||||
changeFilterValueAction(item.key, item.isSelected, item.isMultiSelect)
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ const FilterButton = ({
|
||||
isPersonalRoom,
|
||||
isRooms,
|
||||
isAccounts,
|
||||
id,
|
||||
}) => {
|
||||
const [showFilterBlock, setShowFilterBlock] = React.useState(false);
|
||||
|
||||
@ -30,7 +31,7 @@ const FilterButton = ({
|
||||
|
||||
return (
|
||||
<>
|
||||
<StyledButton onClick={changeShowFilterBlock}>
|
||||
<StyledButton id={id} onClick={changeShowFilterBlock}>
|
||||
<IconButton iconName="/static/images/filter.react.svg" size={16} />
|
||||
{selectedFilterValue && selectedFilterValue.length > 0 && (
|
||||
<ColorTheme themeId={ThemeType.IndicatorFilterButton} />
|
||||
|
@ -43,6 +43,7 @@ const SelectedItem = ({ propKey, label, group, removeSelectedItem }) => {
|
||||
{label}
|
||||
</Text>
|
||||
<IconButton
|
||||
className="selected-tag-removed"
|
||||
iconName={"/static/images/cross.react.svg"}
|
||||
size={12}
|
||||
onClick={onRemove}
|
||||
|
@ -158,6 +158,7 @@ const StyledSortButton = styled.div`
|
||||
StyledSortButton.defaultProps = { theme: Base };
|
||||
|
||||
const SortButton = ({
|
||||
id,
|
||||
getSortData,
|
||||
getSelectedSortData,
|
||||
|
||||
@ -167,7 +168,6 @@ const SortButton = ({
|
||||
viewSettings,
|
||||
|
||||
onSort,
|
||||
|
||||
viewSelectorVisible,
|
||||
}) => {
|
||||
const [isOpen, setIsOpen] = React.useState(false);
|
||||
@ -269,6 +269,7 @@ const SortButton = ({
|
||||
)}
|
||||
{sortData?.map((item) => (
|
||||
<DropDownItem
|
||||
id={item.id}
|
||||
onClick={onOptionClick}
|
||||
className={item.className}
|
||||
key={item.key}
|
||||
@ -303,6 +304,7 @@ const SortButton = ({
|
||||
viewAs={viewAs}
|
||||
isDesc={selectedSortData.sortDirection === "desc"}
|
||||
onClick={toggleCombobox}
|
||||
id={id}
|
||||
>
|
||||
<ComboBox
|
||||
opened={isOpen}
|
||||
|
@ -53,6 +53,7 @@ export const FilterType = Object.freeze({
|
||||
OFormTemplateOnly: 18,
|
||||
OFormOnly: 19,
|
||||
});
|
||||
|
||||
/**
|
||||
* Enum for file type.
|
||||
* @readonly
|
||||
|
@ -23,7 +23,7 @@ class InfoPanelStore {
|
||||
selection = null;
|
||||
selectionParentRoom = null;
|
||||
|
||||
roomsView = "members";
|
||||
roomsView = "details";
|
||||
fileView = "history";
|
||||
|
||||
authStore = null;
|
||||
|
52
packages/common/utils/actions/ArchiveRoom.js
Normal file
52
packages/common/utils/actions/ArchiveRoom.js
Normal file
@ -0,0 +1,52 @@
|
||||
export const ArchiveRoomsActions = Object.freeze({
|
||||
edit: false,
|
||||
inviteUsers: false,
|
||||
changeUserRole: false,
|
||||
viewUsers: false,
|
||||
viewHistory: false,
|
||||
viewInfo: false,
|
||||
deleteUsers: false,
|
||||
restore: false,
|
||||
delete: false,
|
||||
});
|
||||
|
||||
export const OwnerArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewUsers: true,
|
||||
viewInfo: true,
|
||||
deleteUsers: true,
|
||||
restore: true,
|
||||
delete: true,
|
||||
});
|
||||
|
||||
export const RoomAdminArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewUsers: true,
|
||||
viewInfo: true,
|
||||
deleteUsers: true,
|
||||
});
|
||||
|
||||
export const EditorArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewInfo: true,
|
||||
});
|
||||
|
||||
export const FormFillerArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewInfo: true,
|
||||
});
|
||||
|
||||
export const ReviewerArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewInfo: true,
|
||||
});
|
||||
|
||||
export const CommentatorArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewInfo: true,
|
||||
});
|
||||
|
||||
export const ViewerArchiveRoomsActions = Object.freeze({
|
||||
...ArchiveRoomsActions,
|
||||
viewInfo: true,
|
||||
});
|
@ -11,6 +11,17 @@ import {
|
||||
ViewerRoomsActions,
|
||||
} from "./Rooms";
|
||||
|
||||
import {
|
||||
ArchiveRoomsActions,
|
||||
OwnerArchiveRoomsActions,
|
||||
RoomAdminArchiveRoomsActions,
|
||||
EditorArchiveRoomsActions,
|
||||
FormFillerArchiveRoomsActions,
|
||||
ReviewerArchiveRoomsActions,
|
||||
CommentatorArchiveRoomsActions,
|
||||
ViewerArchiveRoomsActions,
|
||||
} from "./ArchiveRoom";
|
||||
|
||||
import {
|
||||
FilesActions,
|
||||
OwnerFilesActions,
|
||||
@ -72,6 +83,28 @@ export const getFileRoleActions = (access) => {
|
||||
}
|
||||
};
|
||||
|
||||
export const getArchiveRoomRoleActions = (access) => {
|
||||
switch (access) {
|
||||
case ShareAccessRights.None:
|
||||
case ShareAccessRights.FullAccess:
|
||||
return OwnerArchiveRoomsActions;
|
||||
case ShareAccessRights.RoomManager:
|
||||
return RoomAdminArchiveRoomsActions;
|
||||
case ShareAccessRights.Editing:
|
||||
return EditorArchiveRoomsActions;
|
||||
case ShareAccessRights.FormFilling:
|
||||
return FormFillerArchiveRoomsActions;
|
||||
case ShareAccessRights.Review:
|
||||
return ReviewerArchiveRoomsActions;
|
||||
case ShareAccessRights.Comment:
|
||||
return CommentatorArchiveRoomsActions;
|
||||
case ShareAccessRights.ReadOnly:
|
||||
return ViewerArchiveRoomsActions;
|
||||
default:
|
||||
return ArchiveRoomsActions;
|
||||
}
|
||||
};
|
||||
|
||||
export const getAccountsTypeActions = (isAdmin, isOwner) => {
|
||||
if (isOwner) return OwnerAccountsActions;
|
||||
|
||||
|
@ -61,12 +61,9 @@ class InputBlock extends React.Component {
|
||||
iconSize,
|
||||
theme,
|
||||
forwardedRef,
|
||||
iconButtonClassName,
|
||||
} = this.props;
|
||||
|
||||
const classNamePassword = `password_eye--${
|
||||
type === "password" ? "close" : "open"
|
||||
}`;
|
||||
|
||||
if (typeof iconSize == "number" && iconSize > 0) {
|
||||
iconButtonSize = iconSize;
|
||||
} else {
|
||||
@ -133,7 +130,7 @@ class InputBlock extends React.Component {
|
||||
//iconNames.includes(iconName) && (
|
||||
<div className="append">
|
||||
<StyledIconBlock
|
||||
className={`input-block-icon ${classNamePassword}`}
|
||||
className={`input-block-icon ${iconButtonClassName}`}
|
||||
//isDisabled={isDisabled}
|
||||
onClick={this.onIconClick}
|
||||
isClickable={typeof onIconClick === "function"}
|
||||
@ -216,6 +213,7 @@ InputBlock.propTypes = {
|
||||
className: PropTypes.string,
|
||||
/** Accepts css style */
|
||||
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
|
||||
iconButtonClassName: PropTypes.string,
|
||||
};
|
||||
|
||||
InputBlock.defaultProps = {
|
||||
@ -233,6 +231,7 @@ InputBlock.defaultProps = {
|
||||
isIconFill: false,
|
||||
isDisabled: false,
|
||||
keepCharPositions: false,
|
||||
iconButtonClassName: "",
|
||||
};
|
||||
|
||||
export default InputBlock;
|
||||
|
@ -363,7 +363,9 @@ class PasswordInput extends React.Component {
|
||||
type === "password"
|
||||
? "/static/images/eye.off.react.svg"
|
||||
: "/static/images/eye.react.svg";
|
||||
|
||||
const iconButtonClassName = `password_eye--${
|
||||
type === "password" ? "close" : "open"
|
||||
}`;
|
||||
return (
|
||||
<>
|
||||
<InputBlock
|
||||
@ -373,6 +375,7 @@ class PasswordInput extends React.Component {
|
||||
hasError={hasError}
|
||||
isDisabled={isDisabled}
|
||||
iconName={iconName}
|
||||
iconButtonClassName={iconButtonClassName}
|
||||
value={inputValue}
|
||||
onIconClick={this.changeInputType}
|
||||
onChange={this.onChangeAction}
|
||||
|
@ -86,6 +86,11 @@ class SearchInput extends React.Component {
|
||||
? "/static/images/cross.react.svg"
|
||||
: "/static/images/search.react.svg"
|
||||
}
|
||||
iconButtonClassName={
|
||||
!!this.state.inputValue || this.props.showClearButton
|
||||
? "search-cross"
|
||||
: "search-loupe"
|
||||
}
|
||||
isIconFill={true}
|
||||
iconSize={clearButtonSize}
|
||||
onIconClick={
|
||||
|
@ -27,10 +27,11 @@ const ViewSelector = ({
|
||||
|
||||
const renderFewIconView = () => {
|
||||
return viewSettings.map((el, indx) => {
|
||||
const { value, icon } = el;
|
||||
const { value, icon, id } = el;
|
||||
|
||||
return (
|
||||
<IconWrapper
|
||||
id={id}
|
||||
isDisabled={isDisabled}
|
||||
isChecked={viewAs === value}
|
||||
firstItem={indx === 0}
|
||||
|
@ -94,7 +94,8 @@ function Editor({
|
||||
filesSettings,
|
||||
}) {
|
||||
const fileInfo = config?.file;
|
||||
isArchiveFolderRoot = fileInfo.rootFolderType === FolderType.Archive;
|
||||
isArchiveFolderRoot =
|
||||
fileInfo && fileInfo.rootFolderType === FolderType.Archive;
|
||||
|
||||
const { t } = useTranslation(["Editor", "Common"]);
|
||||
|
||||
|
@ -345,13 +345,13 @@ public class SettingsController : BaseSettingsController
|
||||
[AllowNotPayment]
|
||||
[HttpPut("wizard/complete")]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "Wizard")]
|
||||
public async Task<WizardSettings> CompleteWizard(WizardRequestsDto inDto)
|
||||
public WizardSettings CompleteWizard(WizardRequestsDto inDto)
|
||||
{
|
||||
ApiContext.AuthByClaim();
|
||||
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
return await _firstTimeTenantSettings.SaveData(inDto);
|
||||
return _firstTimeTenantSettings.SaveData(inDto);
|
||||
}
|
||||
|
||||
///<visible>false</visible>
|
||||
|
@ -73,7 +73,7 @@ public class FirstTimeTenantSettings
|
||||
_clientFactory = clientFactory;
|
||||
}
|
||||
|
||||
public async Task<WizardSettings> SaveData(WizardRequestsDto inDto)
|
||||
public WizardSettings SaveData(WizardRequestsDto inDto)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -122,7 +122,7 @@ public class FirstTimeTenantSettings
|
||||
currentUser.ActivationStatus = EmployeeActivationStatus.NotActivated;
|
||||
}
|
||||
|
||||
await _userManager.SaveUserInfo(currentUser);
|
||||
_userManager.UpdateUserInfo(currentUser);
|
||||
|
||||
if (RequestLicense)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user