Merge branch 'develop' into release/rc-v1.2.0
This commit is contained in:
commit
c84faa2bc0
@ -57,6 +57,7 @@
|
||||
"RoleUserDescription": "Users can only access the rooms they are invited to by admins. They can't create own rooms, folders or files.",
|
||||
"RoleViewer": "Viewer",
|
||||
"RoleViewerDescription": "File viewing",
|
||||
"SearchByOwner": "Search by Owners",
|
||||
"Spreadsheets": "Spreadsheets",
|
||||
"SubNewForm": "Blank",
|
||||
"SubNewFormFile": "From text file",
|
||||
|
@ -20,6 +20,8 @@ const StyledDropDown = styled(DropDown)`
|
||||
box-shadow: 0px 12px 40px rgba(4, 15, 27, 0.12);
|
||||
border-radius: 3px;
|
||||
overflow: hidden;
|
||||
${(props) => !props.hasItems && "visibility: hidden"};
|
||||
/* visibility: hidden */
|
||||
|
||||
width: 446px;
|
||||
max-width: 446px;
|
||||
|
@ -40,7 +40,8 @@ const TagDropdown = ({
|
||||
e.preventDefault();
|
||||
};
|
||||
|
||||
const onClickOutside = () => {
|
||||
const onClickOutside = (e) => {
|
||||
if (e.target.id === "shared_tags-input") return;
|
||||
document.getElementById("shared_tags-input").blur();
|
||||
};
|
||||
|
||||
@ -108,18 +109,18 @@ const TagDropdown = ({
|
||||
className="dropdown-content-wrapper"
|
||||
onMouseDown={preventDefault}
|
||||
>
|
||||
{!!dropdownItems.length && (
|
||||
<StyledDropDown
|
||||
className="dropdown-content"
|
||||
open={open}
|
||||
forwardedRef={dropdownRef}
|
||||
clickOutsideAction={onClickOutside}
|
||||
maxHeight={dropdownMaxHeight}
|
||||
showDisabledItems={false}
|
||||
>
|
||||
{dropdownItems}
|
||||
</StyledDropDown>
|
||||
)}
|
||||
<StyledDropDown
|
||||
className="dropdown-content"
|
||||
open={open}
|
||||
forwardedRef={dropdownRef}
|
||||
maxHeight={dropdownMaxHeight}
|
||||
showDisabledItems={false}
|
||||
hasItems={!!dropdownItems.length}
|
||||
clickOutsideAction={onClickOutside}
|
||||
withBackdrop={false}
|
||||
>
|
||||
{dropdownItems}
|
||||
</StyledDropDown>
|
||||
</StyledDropDownWrapper>
|
||||
);
|
||||
};
|
||||
|
@ -11,6 +11,8 @@ const StyledTagList = styled.div`
|
||||
width: 100%;
|
||||
|
||||
.set_room_params-tag_input-tag {
|
||||
background: ${(props) =>
|
||||
props.theme.createEditRoomDialog.tagInput.tagBackground};
|
||||
padding: 6px 8px;
|
||||
border-radius: 3px;
|
||||
margin: 0;
|
||||
@ -31,7 +33,19 @@ const TagList = ({ defaultTagLabel, tagHandler, isDisabled }) => {
|
||||
|
||||
return (
|
||||
<StyledTagList className="set_room_params-tag_input-tag_list">
|
||||
{tags.length ? (
|
||||
{tags.map((tag) => (
|
||||
<Tag
|
||||
key={tag.id}
|
||||
className="set_room_params-tag_input-tag"
|
||||
tag="script"
|
||||
label={tag.name}
|
||||
isNewTag
|
||||
onDelete={() => {
|
||||
onDeleteAction(tag.id);
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
{/* {tags.length ? (
|
||||
tags.map((tag) => (
|
||||
<Tag
|
||||
key={tag.id}
|
||||
@ -51,7 +65,7 @@ const TagList = ({ defaultTagLabel, tagHandler, isDisabled }) => {
|
||||
label={defaultTagLabel}
|
||||
isDefault
|
||||
/>
|
||||
)}
|
||||
)} */}
|
||||
</StyledTagList>
|
||||
);
|
||||
};
|
||||
|
@ -22,6 +22,8 @@ const StyledTagInput = styled.div`
|
||||
max-width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
${({ hasTags }) => !hasTags && "margin-bottom: -8px"}
|
||||
`;
|
||||
|
||||
const TagInput = ({
|
||||
@ -48,7 +50,10 @@ const TagInput = ({
|
||||
};
|
||||
|
||||
return (
|
||||
<StyledTagInput className="set_room_params-input set_room_params-tag_input">
|
||||
<StyledTagInput
|
||||
className="set_room_params-input set_room_params-tag_input"
|
||||
hasTags={!!tagHandler.tags.length}
|
||||
>
|
||||
<InputParam
|
||||
id="shared_tags-input"
|
||||
title={`${t("Common:Tags")}:`}
|
||||
|
@ -109,9 +109,11 @@ const StyledComboBox = styled(ComboBox)`
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.combo-buttons_arrow-icon {
|
||||
margin-top: 6px;
|
||||
margin-right: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
@ -119,6 +121,7 @@ const StyledComboBox = styled(ComboBox)`
|
||||
|
||||
.combo-button {
|
||||
border-radius: 3px;
|
||||
height: auto;
|
||||
}
|
||||
`;
|
||||
|
||||
|
@ -58,7 +58,7 @@ export const CategoryType = Object.freeze({
|
||||
export const TableVersions = Object.freeze({
|
||||
Files: "2",
|
||||
Rooms: "1",
|
||||
Accounts: "2",
|
||||
Accounts: "3",
|
||||
});
|
||||
|
||||
export const BINDING_POST = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
|
||||
|
@ -18,6 +18,7 @@ export const FilterGroups = Object.freeze({
|
||||
filterContent: "filter-withContent",
|
||||
roomFilterProviderType: "filter-provider-type",
|
||||
roomFilterType: "filter-type",
|
||||
roomFilterSubject: "filter-subject",
|
||||
roomFilterOwner: "filter-owner",
|
||||
roomFilterTags: "filter-tags",
|
||||
roomFilterFolders: "filter-withSubfolders",
|
||||
|
@ -4,7 +4,7 @@ import { withTranslation } from "react-i18next";
|
||||
|
||||
import TableHeader from "@docspace/components/table-container/TableHeader";
|
||||
|
||||
const TABLE_VERSION = "2";
|
||||
const TABLE_VERSION = "3";
|
||||
const TABLE_COLUMNS = `peopleTableColumns_ver-${TABLE_VERSION}`;
|
||||
|
||||
class PeopleTableHeader extends React.Component {
|
||||
@ -33,13 +33,13 @@ class PeopleTableHeader extends React.Component {
|
||||
resizable: true,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
key: "Room",
|
||||
title: t("Common:Room"),
|
||||
enable: true,
|
||||
resizable: true,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
// {
|
||||
// key: "Room",
|
||||
// title: t("Common:Room"),
|
||||
// enable: true,
|
||||
// resizable: true,
|
||||
// onChange: this.onColumnChange,
|
||||
// },
|
||||
{
|
||||
key: "Mail",
|
||||
title: t("Common:Email"),
|
||||
|
@ -333,7 +333,7 @@ const PeopleTableRow = (props) => {
|
||||
|
||||
<TableCell className={"table-cell_type"}>{typeCell}</TableCell>
|
||||
|
||||
<TableCell className="table-cell_room">
|
||||
{/* <TableCell className="table-cell_room">
|
||||
{!rooms?.length ? (
|
||||
<Text
|
||||
type="page"
|
||||
@ -372,7 +372,8 @@ const PeopleTableRow = (props) => {
|
||||
modernView
|
||||
/>
|
||||
)}
|
||||
</TableCell>
|
||||
</TableCell> */}
|
||||
|
||||
<TableCell>
|
||||
<Link
|
||||
type="page"
|
||||
|
@ -11,6 +11,7 @@ import Loaders from "@docspace/common/components/Loaders";
|
||||
import { withLayoutSize } from "@docspace/common/utils";
|
||||
|
||||
import withPeopleLoader from "SRC_DIR/HOCs/withPeopleLoader";
|
||||
import { EmployeeType, PaymentsType } from "@docspace/common/constants";
|
||||
|
||||
const getStatus = (filterValues) => {
|
||||
const employeeStatus = result(
|
||||
@ -34,6 +35,17 @@ const getRole = (filterValues) => {
|
||||
return employeeStatus || null;
|
||||
};
|
||||
|
||||
const getPayments = (filterValues) => {
|
||||
const employeeStatus = result(
|
||||
find(filterValues, (value) => {
|
||||
return value.group === "filter-account";
|
||||
}),
|
||||
"key"
|
||||
);
|
||||
|
||||
return employeeStatus || null;
|
||||
};
|
||||
|
||||
const getGroup = (filterValues) => {
|
||||
const groupId = result(
|
||||
find(filterValues, (value) => {
|
||||
@ -64,6 +76,7 @@ const SectionFilterContent = ({
|
||||
|
||||
const role = getRole(data);
|
||||
const group = getGroup(data);
|
||||
const payments = getPayments(data);
|
||||
|
||||
const newFilter = filter.clone();
|
||||
|
||||
@ -81,6 +94,8 @@ const SectionFilterContent = ({
|
||||
|
||||
newFilter.group = group;
|
||||
|
||||
newFilter.payments = payments;
|
||||
|
||||
setIsLoading(true);
|
||||
fetchPeople(newFilter, true).finally(() => setIsLoading(false));
|
||||
};
|
||||
@ -147,43 +162,42 @@ const SectionFilterContent = ({
|
||||
group: "filter-type",
|
||||
label: t("Common:Type"),
|
||||
isHeader: true,
|
||||
isLast: true,
|
||||
},
|
||||
{
|
||||
id: "filter_type-docspace-admin",
|
||||
key: "admin",
|
||||
key: EmployeeType.Admin,
|
||||
group: "filter-type",
|
||||
label: t("Common:DocSpaceAdmin"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-room-admin",
|
||||
key: "manager",
|
||||
key: EmployeeType.User,
|
||||
group: "filter-type",
|
||||
label: t("Common:RoomAdmin"),
|
||||
},
|
||||
{
|
||||
id: "filter_type-user",
|
||||
key: "user",
|
||||
key: EmployeeType.Guest,
|
||||
group: "filter-type",
|
||||
label: userCaption,
|
||||
},
|
||||
];
|
||||
|
||||
const roleItems = [
|
||||
{
|
||||
key: "filter-role",
|
||||
group: "filter-role",
|
||||
label: "Role in room",
|
||||
isHeader: true,
|
||||
},
|
||||
{ key: "1", group: "filter-role", label: "Room manager" },
|
||||
{ key: "2", group: "filter-role", label: "Co-worker" },
|
||||
{ key: "3", group: "filter-role", label: "Editor" },
|
||||
{ key: "4", group: "filter-role", label: "Form filler" },
|
||||
{ key: "5", group: "filter-role", label: "Reviewer" },
|
||||
{ key: "6", group: "filter-role", label: "Commentator" },
|
||||
{ key: "7", group: "filter-role", label: "Viewer" },
|
||||
];
|
||||
// const roleItems = [
|
||||
// {
|
||||
// key: "filter-role",
|
||||
// group: "filter-role",
|
||||
// label: "Role in room",
|
||||
// isHeader: true,
|
||||
// },
|
||||
// { key: "1", group: "filter-role", label: "Room manager" },
|
||||
// { key: "2", group: "filter-role", label: "Co-worker" },
|
||||
// { key: "3", group: "filter-role", label: "Editor" },
|
||||
// { key: "4", group: "filter-role", label: "Form filler" },
|
||||
// { key: "5", group: "filter-role", label: "Reviewer" },
|
||||
// { key: "6", group: "filter-role", label: "Commentator" },
|
||||
// { key: "7", group: "filter-role", label: "Viewer" },
|
||||
// ];
|
||||
|
||||
const accountItems = [
|
||||
{
|
||||
@ -191,33 +205,34 @@ const SectionFilterContent = ({
|
||||
group: "filter-account",
|
||||
label: "Account",
|
||||
isHeader: true,
|
||||
isLast: true,
|
||||
},
|
||||
{ key: "paid", group: "filter-account", label: "Paid" },
|
||||
{ key: "free", group: "filter-account", label: "Free" },
|
||||
{ key: PaymentsType.Paid, group: "filter-account", label: "Paid" },
|
||||
{ key: PaymentsType.Free, group: "filter-account", label: "Free" },
|
||||
];
|
||||
|
||||
const roomItems = [
|
||||
{
|
||||
key: "filter-status",
|
||||
group: "filter-status",
|
||||
label: t("UserStatus"),
|
||||
isHeader: true,
|
||||
},
|
||||
{
|
||||
key: "1",
|
||||
group: "filter-status",
|
||||
label: t("Common:Active"),
|
||||
isSelector: true,
|
||||
selectorType: "room",
|
||||
},
|
||||
];
|
||||
// const roomItems = [
|
||||
// {
|
||||
// key: "filter-status",
|
||||
// group: "filter-status",
|
||||
// label: t("UserStatus"),
|
||||
// isHeader: true,
|
||||
// },
|
||||
// {
|
||||
// key: "1",
|
||||
// group: "filter-status",
|
||||
// label: t("Common:Active"),
|
||||
// isSelector: true,
|
||||
// selectorType: "room",
|
||||
// },
|
||||
// ];
|
||||
|
||||
const filterOptions = [];
|
||||
|
||||
filterOptions.push(...statusItems);
|
||||
filterOptions.push(...typeItems);
|
||||
// filterOptions.push(...roleItems);
|
||||
// filterOptions.push(...accountItems);
|
||||
filterOptions.push(...accountItems);
|
||||
// filterOptions.push(...roomItems);
|
||||
|
||||
return filterOptions;
|
||||
@ -237,6 +252,12 @@ const SectionFilterContent = ({
|
||||
label: t("Common:ByLastNameSorting"),
|
||||
default: true,
|
||||
},
|
||||
{
|
||||
id: "sory-by_type",
|
||||
key: "type",
|
||||
label: t("Common:Type"),
|
||||
default: true,
|
||||
},
|
||||
];
|
||||
}, [t]);
|
||||
|
||||
@ -253,7 +274,7 @@ const SectionFilterContent = ({
|
||||
|
||||
//TODO: add new options from filter after update backend
|
||||
const getSelectedFilterData = React.useCallback(async () => {
|
||||
const { guestCaption, userCaption, groupCaption } = customNames;
|
||||
const { userCaption } = customNames;
|
||||
const filterValues = [];
|
||||
|
||||
if (filter.employeeStatus || filter.activationStatus) {
|
||||
@ -282,14 +303,14 @@ const SectionFilterContent = ({
|
||||
if (filter.role) {
|
||||
let label = null;
|
||||
|
||||
switch (filter.role) {
|
||||
case "admin":
|
||||
switch (+filter.role) {
|
||||
case EmployeeType.Admin:
|
||||
label = t("Common:DocSpaceAdmin");
|
||||
break;
|
||||
case "manager":
|
||||
case EmployeeType.User:
|
||||
label = t("Common:RoomAdmin");
|
||||
break;
|
||||
case "user":
|
||||
case EmployeeType.Guest:
|
||||
label = userCaption;
|
||||
break;
|
||||
default:
|
||||
@ -297,12 +318,21 @@ const SectionFilterContent = ({
|
||||
}
|
||||
|
||||
filterValues.push({
|
||||
key: filter.role,
|
||||
key: +filter.role,
|
||||
label: label,
|
||||
group: "filter-type",
|
||||
});
|
||||
}
|
||||
|
||||
if (filter?.payments?.toString()) {
|
||||
filterValues.push({
|
||||
key: filter.payments.toString(),
|
||||
label:
|
||||
PaymentsType.Paid === filter.payments.toString() ? "Paid" : "Free",
|
||||
group: "filter-account",
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.group) {
|
||||
const group = groups.find((group) => group.id === filter.group);
|
||||
|
||||
@ -364,6 +394,7 @@ const SectionFilterContent = ({
|
||||
filter.employeeStatus,
|
||||
filter.activationStatus,
|
||||
filter.role,
|
||||
filter.payments,
|
||||
filter.group,
|
||||
t,
|
||||
customNames,
|
||||
@ -387,6 +418,10 @@ const SectionFilterContent = ({
|
||||
newFilter.group = null;
|
||||
}
|
||||
|
||||
if (group === "filter-account") {
|
||||
newFilter.payments = null;
|
||||
}
|
||||
|
||||
setIsLoading(true);
|
||||
fetchPeople(newFilter, true).finally(() => setIsLoading(false));
|
||||
};
|
||||
|
@ -17,6 +17,7 @@ import {
|
||||
RoomsType,
|
||||
RoomsProviderType,
|
||||
RoomsProviderTypeName,
|
||||
FilterSubject,
|
||||
} from "@docspace/common/constants";
|
||||
import Loaders from "@docspace/common/components/Loaders";
|
||||
import FilterInput from "@docspace/common/components/FilterInput";
|
||||
@ -34,7 +35,18 @@ const getFilterType = (filterValues) => {
|
||||
"key"
|
||||
);
|
||||
|
||||
return filterType ? +filterType : null;
|
||||
return filterType?.toString() ? +filterType : null;
|
||||
};
|
||||
|
||||
const getSubjectFilter = (filterValues) => {
|
||||
const subjectFilter = result(
|
||||
find(filterValues, (value) => {
|
||||
return value.group === FilterGroups.roomFilterOwner;
|
||||
}),
|
||||
"key"
|
||||
);
|
||||
|
||||
return subjectFilter?.toString() ? subjectFilter?.toString() : null;
|
||||
};
|
||||
|
||||
const getAuthorType = (filterValues) => {
|
||||
@ -79,10 +91,10 @@ const getProviderType = (filterValues) => {
|
||||
return type;
|
||||
};
|
||||
|
||||
const getOwner = (filterValues) => {
|
||||
const getSubjectId = (filterValues) => {
|
||||
const filterOwner = result(
|
||||
find(filterValues, (value) => {
|
||||
return value.group === FilterGroups.roomFilterOwner;
|
||||
return value.group === FilterGroups.roomFilterSubject;
|
||||
}),
|
||||
"key"
|
||||
);
|
||||
@ -162,14 +174,9 @@ const SectionFilterContent = ({
|
||||
if (isRooms) {
|
||||
const type = getType(data) || null;
|
||||
|
||||
const owner = getOwner(data) || null;
|
||||
const subjectId = getSubjectId(data) || null;
|
||||
|
||||
const subjectId =
|
||||
owner === FilterKeys.other || owner === FilterKeys.me
|
||||
? userId
|
||||
: owner;
|
||||
|
||||
const withoutMe = owner === FilterKeys.other;
|
||||
const subjectFilter = getSubjectFilter(data) || null;
|
||||
|
||||
const providerType = getProviderType(data) || null;
|
||||
const tags = getTags(data) || null;
|
||||
@ -186,7 +193,18 @@ const SectionFilterContent = ({
|
||||
newFilter.page = 0;
|
||||
newFilter.provider = providerType ? providerType : null;
|
||||
newFilter.type = type ? type : null;
|
||||
newFilter.subjectId = subjectId ? subjectId : null;
|
||||
|
||||
newFilter.subjectFilter = null;
|
||||
newFilter.subjectId = null;
|
||||
|
||||
if (subjectId) {
|
||||
newFilter.subjectId = subjectId;
|
||||
|
||||
newFilter.subjectFilter = subjectFilter?.toString()
|
||||
? subjectFilter.toString()
|
||||
: FilterSubject.Member;
|
||||
}
|
||||
|
||||
if (tags) {
|
||||
if (tags.includes(t("NoTag"))) {
|
||||
newFilter.tags = null;
|
||||
@ -200,7 +218,6 @@ const SectionFilterContent = ({
|
||||
newFilter.withoutTags = false;
|
||||
}
|
||||
|
||||
newFilter.excludeSubject = withoutMe;
|
||||
// newFilter.withSubfolders = withSubfolders;
|
||||
// newFilter.searchInContent = withContent;
|
||||
|
||||
@ -381,28 +398,30 @@ const SectionFilterContent = ({
|
||||
// }
|
||||
|
||||
if (roomsFilter.subjectId) {
|
||||
const isMe = userId === roomsFilter.subjectId;
|
||||
let label = isMe
|
||||
? roomsFilter.excludeSubject
|
||||
? t("Common:OtherLabel")
|
||||
: t("Common:MeLabel")
|
||||
: null;
|
||||
const user = await getUser(roomsFilter.subjectId);
|
||||
|
||||
if (!isMe) {
|
||||
const user = await getUser(roomsFilter.subjectId);
|
||||
let label = user.displayName;
|
||||
|
||||
label = user.displayName;
|
||||
}
|
||||
|
||||
filterValues.push({
|
||||
key: isMe
|
||||
? roomsFilter.excludeSubject
|
||||
? FilterKeys.other
|
||||
: FilterKeys.me
|
||||
: roomsFilter.subjectId,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
const subject = {
|
||||
key: roomsFilter.subjectId,
|
||||
group: FilterGroups.roomFilterSubject,
|
||||
label: label,
|
||||
});
|
||||
};
|
||||
|
||||
if (roomsFilter.subjectFilter?.toString()) {
|
||||
if (roomsFilter.subjectFilter.toString() === FilterSubject.Owner) {
|
||||
subject.selectedLabel = t("Common:Owner") + ": " + label;
|
||||
}
|
||||
|
||||
filterValues.push(subject);
|
||||
|
||||
filterValues.push({
|
||||
key: roomsFilter?.subjectFilter?.toString(),
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
});
|
||||
} else {
|
||||
filterValues.push(subject);
|
||||
}
|
||||
}
|
||||
|
||||
// if (roomsFilter.withoutTags) {
|
||||
@ -585,6 +604,7 @@ const SectionFilterContent = ({
|
||||
roomsFilter.provider,
|
||||
roomsFilter.type,
|
||||
roomsFilter.subjectId,
|
||||
roomsFilter.subjectFilter,
|
||||
roomsFilter.tags,
|
||||
roomsFilter.tags?.length,
|
||||
roomsFilter.excludeSubject,
|
||||
@ -736,35 +756,39 @@ const SectionFilterContent = ({
|
||||
...media,
|
||||
];
|
||||
|
||||
const ownerOptions = [
|
||||
const subjectOptions = [
|
||||
{
|
||||
key: FilterGroups.roomFilterOwner,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Common:Owner"),
|
||||
key: FilterGroups.roomFilterSubject,
|
||||
group: FilterGroups.roomFilterSubject,
|
||||
label: t("Common:Member"),
|
||||
isHeader: true,
|
||||
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"),
|
||||
withoutSeparator: true,
|
||||
},
|
||||
{
|
||||
id: "filter_author-user",
|
||||
key: FilterKeys.user,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Translations:AddOwner"),
|
||||
group: FilterGroups.roomFilterSubject,
|
||||
label: t("Translations:ChooseFromList"),
|
||||
isSelector: true,
|
||||
},
|
||||
];
|
||||
|
||||
const ownerOptions = [
|
||||
{
|
||||
key: FilterGroups.roomFilterOwner,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
isHeader: true,
|
||||
withoutHeader: true,
|
||||
},
|
||||
{
|
||||
id: "filter_author-user",
|
||||
key: FilterSubject.Owner,
|
||||
group: FilterGroups.roomFilterOwner,
|
||||
label: t("Translations:SearchByOwner"),
|
||||
isCheckbox: true,
|
||||
},
|
||||
];
|
||||
|
||||
// const foldersOptions = [
|
||||
// {
|
||||
// key: FilterGroups.roomFilterFolders,
|
||||
@ -806,6 +830,7 @@ const SectionFilterContent = ({
|
||||
// filterOptions.push(...foldersOptions);
|
||||
// filterOptions.push(...contentOptions);
|
||||
|
||||
filterOptions.push(...subjectOptions);
|
||||
filterOptions.push(...ownerOptions);
|
||||
|
||||
filterOptions.push(...typeOptions);
|
||||
@ -1179,9 +1204,10 @@ const SectionFilterContent = ({
|
||||
newFilter.type = null;
|
||||
}
|
||||
|
||||
if (group === FilterGroups.roomFilterOwner) {
|
||||
if (group === FilterGroups.roomFilterSubject) {
|
||||
newFilter.subjectId = null;
|
||||
newFilter.excludeSubject = false;
|
||||
newFilter.filterSubject = null;
|
||||
}
|
||||
|
||||
if (group === FilterGroups.roomFilterTags) {
|
||||
|
@ -8,8 +8,15 @@ import toastr from "@docspace/components/toast/toastr";
|
||||
|
||||
import history from "@docspace/common/history";
|
||||
import { combineUrl } from "@docspace/common/utils";
|
||||
import { AppServerConfig, EmployeeStatus } from "@docspace/common/constants";
|
||||
import {
|
||||
AppServerConfig,
|
||||
EmployeeStatus,
|
||||
FilterSubject,
|
||||
} from "@docspace/common/constants";
|
||||
import { resendUserInvites } from "@docspace/common/api/people";
|
||||
import { getCategoryUrl } from "SRC_DIR/helpers/utils";
|
||||
import { CategoryType } from "SRC_DIR/helpers/constants";
|
||||
import RoomsFilter from "@docspace/common/api/rooms/filter";
|
||||
|
||||
const { proxyURL } = AppServerConfig;
|
||||
|
||||
@ -78,7 +85,13 @@ class AccountsContextOptionsStore {
|
||||
label: t("Translations:OwnerChange"),
|
||||
onClick: () => this.toggleChangeOwnerDialog(item),
|
||||
};
|
||||
|
||||
case "room-list":
|
||||
return {
|
||||
key: option,
|
||||
icon: "images/folder.react.svg",
|
||||
label: "Room list",
|
||||
onClick: () => this.openUserRoomList(item),
|
||||
};
|
||||
case "enable":
|
||||
return {
|
||||
id: "option_enable",
|
||||
@ -275,6 +288,21 @@ class AccountsContextOptionsStore {
|
||||
return contextOptionsProps;
|
||||
};
|
||||
|
||||
openUserRoomList = (user) => {
|
||||
const filter = RoomsFilter.getDefault();
|
||||
|
||||
filter.subjectId = user.id;
|
||||
filter.subjectFilter = FilterSubject.Member;
|
||||
|
||||
const filterParamsStr = filter.toUrlParams();
|
||||
const url = getCategoryUrl(CategoryType.Shared);
|
||||
|
||||
window.open(
|
||||
combineUrl(PROXY_HOMEPAGE_URL, `${url}?${filterParamsStr}`),
|
||||
"_blank"
|
||||
);
|
||||
};
|
||||
|
||||
onProfileClick = () => {
|
||||
history.push(PROFILE_SELF_URL);
|
||||
};
|
||||
|
@ -214,6 +214,10 @@ class UsersStore {
|
||||
options.push("details");
|
||||
}
|
||||
|
||||
if (isAdmin || isOwner) {
|
||||
options.push("room-list");
|
||||
}
|
||||
|
||||
if (isMySelf) {
|
||||
options.push("separator-1");
|
||||
|
||||
@ -272,6 +276,10 @@ class UsersStore {
|
||||
options.push("details");
|
||||
}
|
||||
|
||||
if (isAdmin || isOwner) {
|
||||
options.push("room-list");
|
||||
}
|
||||
|
||||
if (
|
||||
isOwner ||
|
||||
(isAdmin && (userRole === "manager" || userRole === "user"))
|
||||
@ -290,6 +298,10 @@ class UsersStore {
|
||||
} else {
|
||||
options.push("details");
|
||||
}
|
||||
|
||||
if (isAdmin || isOwner) {
|
||||
options.push("room-list");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { EmployeeStatus } from "../../constants";
|
||||
import { getObjectByLocation, toUrlParams } from "../../utils";
|
||||
|
||||
const DEFAULT_PAGE = 0;
|
||||
@ -11,16 +10,18 @@ const DEFAULT_ACTIVATION_STATUS = null;
|
||||
const DEFAULT_ROLE = null;
|
||||
const DEFAULT_SEARCH = "";
|
||||
const DEFAULT_GROUP = null;
|
||||
const DEFAULT_PAYMENTS = null;
|
||||
|
||||
const EMPLOYEE_STATUS = "employeestatus";
|
||||
const ACTIVATION_STATUS = "activationstatus";
|
||||
const ROLE = "role";
|
||||
const ROLE = "employeeType";
|
||||
const GROUP = "group";
|
||||
const SEARCH = "search";
|
||||
const SORT_BY = "sortby";
|
||||
const SORT_ORDER = "sortorder";
|
||||
const PAGE = "page";
|
||||
const PAGE_COUNT = "pagecount";
|
||||
const PAYMENTS = "payments";
|
||||
|
||||
class Filter {
|
||||
static getDefault(total = DEFAULT_TOTAL) {
|
||||
@ -52,6 +53,7 @@ class Filter {
|
||||
const pageCount =
|
||||
(urlFilter[PAGE_COUNT] && +urlFilter[PAGE_COUNT]) ||
|
||||
defaultFilter.pageCount;
|
||||
const payments = urlFilter[PAYMENTS] || defaultFilter.payments;
|
||||
|
||||
const newFilter = new Filter(
|
||||
page,
|
||||
@ -63,7 +65,8 @@ class Filter {
|
||||
activationStatus,
|
||||
role,
|
||||
search,
|
||||
group
|
||||
group,
|
||||
payments
|
||||
);
|
||||
|
||||
return newFilter;
|
||||
@ -79,7 +82,8 @@ class Filter {
|
||||
activationStatus = DEFAULT_ACTIVATION_STATUS,
|
||||
role = DEFAULT_ROLE,
|
||||
search = DEFAULT_SEARCH,
|
||||
group = DEFAULT_GROUP
|
||||
group = DEFAULT_GROUP,
|
||||
payments = DEFAULT_PAYMENTS
|
||||
) {
|
||||
this.page = page;
|
||||
this.pageCount = pageCount;
|
||||
@ -91,6 +95,7 @@ class Filter {
|
||||
this.search = search;
|
||||
this.total = total;
|
||||
this.group = group;
|
||||
this.payments = payments;
|
||||
}
|
||||
|
||||
getStartIndex = () => {
|
||||
@ -115,6 +120,7 @@ class Filter {
|
||||
role,
|
||||
search,
|
||||
group,
|
||||
payments,
|
||||
} = this;
|
||||
|
||||
let dtoFilter = {
|
||||
@ -123,27 +129,14 @@ class Filter {
|
||||
sortby: sortBy,
|
||||
sortorder: sortOrder,
|
||||
employeestatus: employeeStatus,
|
||||
employeetype: role,
|
||||
activationstatus: activationStatus,
|
||||
filtervalue: (search ?? "").trim(),
|
||||
groupId: group,
|
||||
fields: fields,
|
||||
payments,
|
||||
};
|
||||
|
||||
switch (role) {
|
||||
case "admin":
|
||||
dtoFilter.isadministrator = true;
|
||||
break;
|
||||
case "manager":
|
||||
dtoFilter.employeeType = 1;
|
||||
dtoFilter.isadministrator = "false";
|
||||
break;
|
||||
case "user":
|
||||
dtoFilter.employeeType = 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
const str = toUrlParams(dtoFilter, true);
|
||||
return str;
|
||||
};
|
||||
@ -159,6 +152,7 @@ class Filter {
|
||||
search,
|
||||
group,
|
||||
page,
|
||||
payments,
|
||||
} = this;
|
||||
|
||||
const dtoFilter = {};
|
||||
@ -190,6 +184,7 @@ class Filter {
|
||||
dtoFilter[PAGE] = page + 1;
|
||||
dtoFilter[SORT_BY] = sortBy;
|
||||
dtoFilter[SORT_ORDER] = sortOrder;
|
||||
dtoFilter[PAYMENTS] = payments;
|
||||
|
||||
const str = toUrlParams(dtoFilter, true);
|
||||
|
||||
@ -215,7 +210,8 @@ class Filter {
|
||||
this.activationStatus,
|
||||
this.role,
|
||||
this.search,
|
||||
this.group
|
||||
this.group,
|
||||
this.payments
|
||||
);
|
||||
}
|
||||
|
||||
@ -231,7 +227,8 @@ class Filter {
|
||||
null,
|
||||
null,
|
||||
"",
|
||||
idGroup
|
||||
idGroup,
|
||||
null
|
||||
);
|
||||
} else {
|
||||
this.clone(true);
|
||||
@ -248,7 +245,8 @@ class Filter {
|
||||
this.sortBy === filter.sortBy &&
|
||||
this.sortOrder === filter.sortOrder &&
|
||||
this.page === filter.page &&
|
||||
this.pageCount === filter.pageCount;
|
||||
this.pageCount === filter.pageCount &&
|
||||
this.payments === filter.payments;
|
||||
|
||||
return equals;
|
||||
}
|
||||
|
@ -43,6 +43,9 @@ const DEFAULT_EXCLUDE_SUBJECT = false;
|
||||
const WITHOUT_TAGS = "withoutTags";
|
||||
const DEFAULT_WITHOUT_TAGS = false;
|
||||
|
||||
const SUBJECT_FILTER = "subjectFilter";
|
||||
const DEFAULT_SUBJECT_FILTER = null;
|
||||
|
||||
class RoomsFilter {
|
||||
static getDefault(total = DEFAULT_TOTAL) {
|
||||
return new RoomsFilter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total);
|
||||
@ -77,6 +80,11 @@ class RoomsFilter {
|
||||
(urlFilter[SUBJECT_ID] && urlFilter[SUBJECT_ID]) ||
|
||||
defaultFilter.subjectId;
|
||||
|
||||
const subjectFilter =
|
||||
(urlFilter[SUBJECT_FILTER]?.toString() &&
|
||||
urlFilter[SUBJECT_FILTER]?.toString()) ||
|
||||
defaultFilter.subjectFilter?.toString();
|
||||
|
||||
//TODO: remove it if search with subfolders and in content will be available
|
||||
// const searchInContent = urlFilter[SEARCH_IN_CONTENT]
|
||||
// ? urlFilter[SEARCH_IN_CONTENT] === "true"
|
||||
@ -120,7 +128,8 @@ class RoomsFilter {
|
||||
sortBy,
|
||||
sortOrder,
|
||||
excludeSubject,
|
||||
withoutTags
|
||||
withoutTags,
|
||||
subjectFilter
|
||||
);
|
||||
|
||||
return newFilter;
|
||||
@ -141,7 +150,8 @@ class RoomsFilter {
|
||||
sortBy = DEFAULT_SORT_BY,
|
||||
sortOrder = DEFAULT_SORT_ORDER,
|
||||
excludeSubject = DEFAULT_EXCLUDE_SUBJECT,
|
||||
withoutTags = DEFAULT_WITHOUT_TAGS
|
||||
withoutTags = DEFAULT_WITHOUT_TAGS,
|
||||
subjectFilter = DEFAULT_SUBJECT_FILTER
|
||||
) {
|
||||
this.page = page;
|
||||
this.pageCount = pageCount;
|
||||
@ -158,6 +168,7 @@ class RoomsFilter {
|
||||
this.sortOrder = sortOrder;
|
||||
this.excludeSubject = excludeSubject;
|
||||
this.withoutTags = withoutTags;
|
||||
this.subjectFilter = subjectFilter;
|
||||
}
|
||||
|
||||
getStartIndex = () => {
|
||||
@ -188,6 +199,7 @@ class RoomsFilter {
|
||||
sortOrder,
|
||||
excludeSubject,
|
||||
withoutTags,
|
||||
subjectFilter,
|
||||
} = this;
|
||||
|
||||
const dtoFilter = {
|
||||
@ -206,6 +218,7 @@ class RoomsFilter {
|
||||
sortOrder: sortOrder,
|
||||
excludeSubject: excludeSubject,
|
||||
withoutTags: withoutTags,
|
||||
subjectFilter: subjectFilter,
|
||||
};
|
||||
|
||||
const str = toUrlParams(dtoFilter, true);
|
||||
@ -228,6 +241,7 @@ class RoomsFilter {
|
||||
sortOrder,
|
||||
excludeSubject,
|
||||
withoutTags,
|
||||
subjectFilter,
|
||||
} = this;
|
||||
|
||||
const dtoFilter = {};
|
||||
@ -272,6 +286,10 @@ class RoomsFilter {
|
||||
dtoFilter[WITHOUT_TAGS] = withoutTags;
|
||||
}
|
||||
|
||||
if (subjectFilter?.toString()) {
|
||||
dtoFilter[SUBJECT_FILTER] = subjectFilter.toString();
|
||||
}
|
||||
|
||||
dtoFilter[PAGE] = page + 1;
|
||||
dtoFilter[SORT_BY] = sortBy;
|
||||
dtoFilter[SORT_ORDER] = sortOrder;
|
||||
@ -301,7 +319,8 @@ class RoomsFilter {
|
||||
this.sortBy,
|
||||
this.sortOrder,
|
||||
this.excludeSubject,
|
||||
this.withoutTags
|
||||
this.withoutTags,
|
||||
this.subjectFilter
|
||||
);
|
||||
}
|
||||
|
||||
@ -328,7 +347,8 @@ class RoomsFilter {
|
||||
this.sortBy === filter.sortBy &&
|
||||
this.sortOrder === filter.sortOrder &&
|
||||
this.excludeSubject === filter.excludeSubject &&
|
||||
this.withoutTags === filter.withoutTags;
|
||||
this.withoutTags === filter.withoutTags &&
|
||||
this.subjectFilter === filter.subjectFilter;
|
||||
|
||||
return equals;
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ const FilterInput = React.memo(
|
||||
<SelectedItem
|
||||
key={`${item.key}_${item.group}`}
|
||||
propKey={item.key}
|
||||
label={item.label}
|
||||
label={item.selectedLabel ? item.selectedLabel : item.label}
|
||||
group={item.group}
|
||||
removeSelectedItem={removeSelectedItemAction}
|
||||
/>
|
||||
|
@ -33,6 +33,8 @@ const StyledSelectedItem = styled.div`
|
||||
StyledSelectedItem.defaultProps = { theme: Base };
|
||||
|
||||
const SelectedItem = ({ propKey, label, group, removeSelectedItem }) => {
|
||||
if (!label) return <></>;
|
||||
|
||||
const onRemove = () => {
|
||||
removeSelectedItem(propKey, label, group);
|
||||
};
|
||||
|
@ -54,20 +54,6 @@ const FilterBlockLoader = ({
|
||||
borderRadius={"3"}
|
||||
className={"loader-item"}
|
||||
/>
|
||||
<div className="row-loader">
|
||||
<RectangleLoader
|
||||
width={"49"}
|
||||
height={"28"}
|
||||
borderRadius={"16"}
|
||||
className={"loader-item"}
|
||||
/>
|
||||
<RectangleLoader
|
||||
width={"76"}
|
||||
height={"28"}
|
||||
borderRadius={"16"}
|
||||
className={"loader-item"}
|
||||
/>
|
||||
</div>
|
||||
<div className="row-loader">
|
||||
<RectangleLoader
|
||||
width={"32"}
|
||||
@ -82,6 +68,20 @@ const FilterBlockLoader = ({
|
||||
className={"loader-item"}
|
||||
/>
|
||||
</div>
|
||||
<div className="row-loader">
|
||||
<RectangleLoader
|
||||
width={"16"}
|
||||
height={"16"}
|
||||
borderRadius={"3"}
|
||||
className={"loader-item"}
|
||||
/>
|
||||
<RectangleLoader
|
||||
width={"137"}
|
||||
height={"20"}
|
||||
borderRadius={"3"}
|
||||
className={"loader-item"}
|
||||
/>
|
||||
</div>
|
||||
</StyledBlock>
|
||||
)}
|
||||
|
||||
|
@ -22,7 +22,7 @@ const StyledInfoPanelWrapper = styled.div.attrs(({ id }) => ({
|
||||
width: auto;
|
||||
background: ${(props) => props.theme.infoPanel.blurColor};
|
||||
backdrop-filter: blur(3px);
|
||||
|
||||
z-index: 300;
|
||||
@media ${tablet} {
|
||||
z-index: 309;
|
||||
position: fixed;
|
||||
|
@ -33,6 +33,22 @@ export const EmployeeType = Object.freeze({
|
||||
DocSpaceAdmin: "admin",
|
||||
Owner: "Owner",
|
||||
});
|
||||
/**
|
||||
* Enum for user payments type.
|
||||
* @readonly
|
||||
*/
|
||||
export const PaymentsType = Object.freeze({
|
||||
Paid: "0",
|
||||
Free: "1",
|
||||
});
|
||||
/**
|
||||
* Enum for filter subject.
|
||||
* @readonly
|
||||
*/
|
||||
export const FilterSubject = Object.freeze({
|
||||
Owner: "0",
|
||||
Member: "1",
|
||||
});
|
||||
/**
|
||||
* Enum for filter type.
|
||||
* @readonly
|
||||
|
@ -45,7 +45,6 @@ const StyledTableContainer = styled.div`
|
||||
.table-container_header {
|
||||
z-index: 200;
|
||||
padding: 0 20px;
|
||||
padding-right: 0;
|
||||
|
||||
border-bottom: 1px solid;
|
||||
border-image-slice: 1;
|
||||
@ -86,10 +85,6 @@ const StyledTableContainer = styled.div`
|
||||
width: 22px;
|
||||
}
|
||||
}
|
||||
.table-container_header-settings {
|
||||
border-bottom: ${(props) => props.theme.tableContainer.tableCell.border};
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
${({ useReactWindow }) => useReactWindow && reactWindowContainerStyles}
|
||||
`;
|
||||
|
@ -95,6 +95,7 @@ const Tag = ({
|
||||
isDefault={isDefault}
|
||||
isLast={isLast}
|
||||
tagMaxWidth={tagMaxWidth}
|
||||
isClickable={!!onClick}
|
||||
>
|
||||
<Text className={"tag-text"} font-size={"13px"} noSelect>
|
||||
...
|
||||
@ -143,6 +144,7 @@ const Tag = ({
|
||||
className={`tag${className ? ` ${className}` : ""}`}
|
||||
style={style}
|
||||
isLast={isLast}
|
||||
isClickable={!!onClick}
|
||||
>
|
||||
{icon ? (
|
||||
<ReactSVG className="third-party-tag" src={icon} />
|
||||
|
@ -46,10 +46,10 @@ const StyledTag = styled.div`
|
||||
}
|
||||
|
||||
${(props) =>
|
||||
props.isClickable &&
|
||||
!props.isDisabled &&
|
||||
css`
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: ${(props) => props.theme.tag.hoverBackground};
|
||||
}
|
||||
|
@ -2390,6 +2390,10 @@ const Base = {
|
||||
descriptionColor: "#555f65",
|
||||
},
|
||||
|
||||
tagInput: {
|
||||
tagBackground: "#ECEEF1",
|
||||
},
|
||||
|
||||
dropdown: {
|
||||
background: "#ffffff",
|
||||
borderColor: "#d0d5da",
|
||||
|
@ -2390,6 +2390,10 @@ const Dark = {
|
||||
descriptionColor: "#a3a9ae",
|
||||
},
|
||||
|
||||
tagInput: {
|
||||
tagBackground: "#292929",
|
||||
},
|
||||
|
||||
dropdown: {
|
||||
background: "#333333",
|
||||
borderColor: "#474747",
|
||||
|
@ -120,6 +120,7 @@
|
||||
"MaxLengthExceeded": "The maximum length of a user name or other local part is 64 characters.",
|
||||
"MeLabel": "Me",
|
||||
"Megabyte": "MB",
|
||||
"Member": "Member",
|
||||
"Name": "Name",
|
||||
"NewVersionAvailable": "A new version of the website available",
|
||||
"Next": "Next",
|
||||
|
Loading…
Reference in New Issue
Block a user