Merge branch 'master' of https://github.com/ONLYOFFICE/AppServer
This commit is contained in:
commit
7e7af6a1cf
@ -121,20 +121,26 @@ class PureAccessRights extends Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { getListAdmins, getListUsers, getUserById, ownerId } = this.props;
|
||||
const {
|
||||
getListAdmins,
|
||||
getListUsers,
|
||||
getUserById,
|
||||
ownerId,
|
||||
productId
|
||||
} = this.props;
|
||||
|
||||
getUserById(ownerId).catch(error => {
|
||||
toastr.error("accessRights getUserById", error);
|
||||
toastr.error(error);
|
||||
//console.log("accessRights getUserById", error);
|
||||
});
|
||||
|
||||
getListUsers().catch(error => {
|
||||
toastr.error("accessRights getListAdmins", error);
|
||||
toastr.error(error);
|
||||
//console.log("accessRights getListAdmins", error);
|
||||
});
|
||||
|
||||
getListAdmins().catch(error => {
|
||||
toastr.error("accessRights getListAdmins", error);
|
||||
getListAdmins(productId).catch(error => {
|
||||
toastr.error(error);
|
||||
//console.log("accessRights getListAdmins", error);
|
||||
});
|
||||
}
|
||||
@ -176,6 +182,12 @@ class PureAccessRights extends Component {
|
||||
const { showSelector, advancedOptions } = this.state;
|
||||
const OwnerOpportunities = t("AccessRightsOwnerOpportunities").split("|");
|
||||
|
||||
const countItems = [
|
||||
{ key: 25, label: t("CountPerPage", { count: 25 }) },
|
||||
{ key: 50, label: t("CountPerPage", { count: 50 }) },
|
||||
{ key: 100, label: t("CountPerPage", { count: 100 }) }
|
||||
];
|
||||
|
||||
return (
|
||||
<MainContainer>
|
||||
<HeaderContainer>
|
||||
@ -196,9 +208,12 @@ class PureAccessRights extends Component {
|
||||
<Text.Body className="avatar_text" fontSize={16} isBold={true}>
|
||||
{owner.displayName}
|
||||
</Text.Body>
|
||||
<Text.Body className="avatar_text" fontSize={12}>
|
||||
{owner.department}
|
||||
</Text.Body>
|
||||
{owner.groups &&
|
||||
owner.groups.map(group => (
|
||||
<Link fontSize={12} key={group.id} href={owner.profileUrl}>
|
||||
{group.name}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
</AvatarContainer>
|
||||
<ProjectsBody>
|
||||
@ -233,7 +248,6 @@ class PureAccessRights extends Component {
|
||||
isOpen={showSelector}
|
||||
placeholder="placeholder"
|
||||
options={advancedOptions}
|
||||
//options={this.AdvancedSelectorFunction(users)}
|
||||
onSearchChanged={this.onSearchUsers}
|
||||
//groups={groups}
|
||||
isMultiSelect={true}
|
||||
@ -252,8 +266,8 @@ class PureAccessRights extends Component {
|
||||
<Avatar
|
||||
size="small"
|
||||
role="admin"
|
||||
userName={user.userName}
|
||||
source={user.avatar}
|
||||
userName={user.displayName}
|
||||
source={user.avatarSmall}
|
||||
/>
|
||||
);
|
||||
const nameColor =
|
||||
@ -270,13 +284,13 @@ class PureAccessRights extends Component {
|
||||
<Link
|
||||
containerWidth="120px"
|
||||
type="page"
|
||||
title={user.userName}
|
||||
title={user.displayName}
|
||||
isBold={true}
|
||||
fontSize={15}
|
||||
color={nameColor}
|
||||
href={user.profileUrl}
|
||||
>
|
||||
{user.userName}
|
||||
{user.displayName}
|
||||
</Link>
|
||||
|
||||
<div style={{ maxWidth: 120 }} />
|
||||
@ -303,15 +317,20 @@ class PureAccessRights extends Component {
|
||||
{admins.length > 25 ? (
|
||||
<div className="wrapper">
|
||||
<Paging
|
||||
previousLabel="Previous"
|
||||
nextLabel="Next"
|
||||
previousLabel={t("PreviousPage")}
|
||||
nextLabel={t("NextPage")}
|
||||
openDirection="top"
|
||||
displayItems={false}
|
||||
countItems={countItems}
|
||||
selectedPageItem={{ label: "1 of 1" }}
|
||||
selectedCountItem={{ label: "25 per page" }}
|
||||
previousAction={() => console.log("Prev")}
|
||||
nextAction={() => console.log("Next")}
|
||||
openDirection="bottom"
|
||||
previousAction={() => console.log("previousAction")}
|
||||
nextAction={() => console.log("nextAction")}
|
||||
onSelectPage={a => console.log(a)}
|
||||
onSelectCount={a => console.log(a)}
|
||||
//pageItems={pageItems}
|
||||
//disablePrevious={!filter.hasPrev()}
|
||||
//disableNext={!filter.hasNext()}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
@ -377,12 +396,22 @@ const AccessRights = props => {
|
||||
);
|
||||
};
|
||||
|
||||
const filterOwner = (users, ownerId) =>
|
||||
const filterUsers = (users, ownerId) =>
|
||||
filter(users, function(f) {
|
||||
return f.id !== ownerId;
|
||||
});
|
||||
const filterAdminUsers = users => {
|
||||
return users.filter(user => user.listAdminModules === undefined);
|
||||
const newArray = [];
|
||||
users.map(user => {
|
||||
if (user.listAdminModules !== undefined) {
|
||||
if (!user.listAdminModules.includes("people")) {
|
||||
newArray.push(user);
|
||||
}
|
||||
} else {
|
||||
newArray.push(user);
|
||||
}
|
||||
});
|
||||
return newArray.filter(user => !user.isVisitor);
|
||||
};
|
||||
|
||||
const AdvancedSelectorFunction = users =>
|
||||
@ -396,12 +425,12 @@ const AdvancedSelectorFunction = users =>
|
||||
function mapStateToProps(state) {
|
||||
const { ownerId } = state.auth.settings;
|
||||
const { admins, users } = state.settings;
|
||||
const arrayUsers = filterOwner(users, ownerId);
|
||||
const arrayUsers = filterUsers(users, ownerId);
|
||||
const filterArrayUsers = filterAdminUsers(arrayUsers);
|
||||
|
||||
return {
|
||||
users: filterArrayUsers,
|
||||
admins: filterOwner(admins, ownerId),
|
||||
admins: filterUsers(admins, ownerId),
|
||||
productId: state.auth.modules[0].id,
|
||||
owner: state.settings.owner,
|
||||
ownerId,
|
||||
@ -414,7 +443,8 @@ AccessRights.defaultProps = {
|
||||
admins: [],
|
||||
productId: "",
|
||||
ownerId: "",
|
||||
owner: {}
|
||||
owner: {},
|
||||
advancedOptions: []
|
||||
};
|
||||
|
||||
AccessRights.propTypes = {
|
||||
@ -422,7 +452,8 @@ AccessRights.propTypes = {
|
||||
admins: PropTypes.arrayOf(PropTypes.object),
|
||||
productId: PropTypes.string,
|
||||
ownerId: PropTypes.string,
|
||||
owner: PropTypes.object
|
||||
owner: PropTypes.object,
|
||||
advancedOptions: PropTypes.arrayOf(PropTypes.object)
|
||||
};
|
||||
|
||||
export default connect(
|
||||
|
@ -23,6 +23,8 @@
|
||||
"SuccessfullySaveSettingsMessage": "Settings have been successfully updated",
|
||||
"NotFoundLanguage": "In case you cannot find your language in the list of the available ones, feel free to write to us at <1>{{supportEmail}}</1> to take part in the translation and get up to 1 year free of charge.",
|
||||
"Settings": "Settings",
|
||||
"PreviousPage": "Previous",
|
||||
"NextPage": "Next",
|
||||
|
||||
|
||||
|
||||
@ -59,5 +61,6 @@
|
||||
"Settings_integration": "Integration",
|
||||
"Settings_third-party-services": "Third-Party Services",
|
||||
"Settings_smtp-settings": "SMTP Settings",
|
||||
"Settings_statistics": "Statistics"
|
||||
"Settings_statistics": "Statistics",
|
||||
"CountPerPage": "{{count}} per page"
|
||||
}
|
@ -22,6 +22,8 @@
|
||||
"SuccessfullySaveSettingsMessage": "Настройки успешно обновлены",
|
||||
"NotFoundLanguage": "Если Вы не можете найти свой язык в списке доступных, Вы всегда можете написать нам по адресу <1>{{supportEmail}}</1>, чтобы принять участие в переводе и получить до 1 года бесплатного использования.",
|
||||
"Settings": "Настройки",
|
||||
"PreviousPage": "Предыдущая",
|
||||
"NextPage": "Следующая",
|
||||
|
||||
|
||||
|
||||
@ -58,5 +60,6 @@
|
||||
"Settings_integration": "Интеграция",
|
||||
"Settings_third-party-services": "Сторонние сервисы",
|
||||
"Settings_smtp-settings": "Настройки SMTP",
|
||||
"Settings_statistics": "Статистика"
|
||||
"Settings_statistics": "Статистика",
|
||||
"CountPerPage": "{{count}} на странице"
|
||||
}
|
@ -83,6 +83,10 @@
|
||||
],
|
||||
"PeopleResource": [
|
||||
"Settings"
|
||||
],
|
||||
"UserControlsCommonResource": [
|
||||
"NextPage",
|
||||
"PreviousPage"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -149,15 +149,17 @@ export function getPortalTimezones() {
|
||||
});
|
||||
}
|
||||
|
||||
export function getUserList(role) {
|
||||
let params = "";
|
||||
if(role === "admin") {
|
||||
params = "/filter?isAdministrator=true";
|
||||
}
|
||||
|
||||
export function getUserList() {
|
||||
return request({
|
||||
method: "get",
|
||||
url: `/people${params}`
|
||||
url: `/people`
|
||||
});
|
||||
}
|
||||
|
||||
export function getProductAdminsList(productId) {
|
||||
return request({
|
||||
method: "get",
|
||||
url: `/settings/security/administrator/${productId}`
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -31,18 +31,20 @@ export function getListUsers() {
|
||||
};
|
||||
}
|
||||
|
||||
export function getListAdmins() {
|
||||
export function getListAdmins(productId) {
|
||||
return dispatch => {
|
||||
return api.getUserList("admin").then(admins => dispatch(setAdmins(admins)));
|
||||
return api
|
||||
.getProductAdminsList(productId)
|
||||
.then(admins => dispatch(setAdmins(admins)));
|
||||
};
|
||||
}
|
||||
|
||||
export function changeAdmins(userId, productId, isAdmin) {
|
||||
return dispatch => {
|
||||
return api
|
||||
.changeProductAdmin(userId, productId, isAdmin)
|
||||
.then(() => dispatch(getListUsers()))
|
||||
.then(() => dispatch(getListAdmins()));
|
||||
return api.changeProductAdmin(userId, productId, isAdmin).then(() => {
|
||||
dispatch(getListUsers());
|
||||
dispatch(getListAdmins(productId));
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,40 +1,145 @@
|
||||
import React from 'react';
|
||||
import { mount } from 'enzyme';
|
||||
import { mount, shallow } from 'enzyme';
|
||||
import GroupButtonsMenu from '.';
|
||||
import DropDownItem from '../drop-down-item';
|
||||
|
||||
const defaultMenuItems = [
|
||||
{
|
||||
label: 'Select',
|
||||
isDropdown: true,
|
||||
isSeparator: true,
|
||||
isSelect: true,
|
||||
fontWeight: 'bold',
|
||||
children: [
|
||||
<DropDownItem key='aaa' label='aaa' />,
|
||||
<DropDownItem key='bbb' label='bbb' />,
|
||||
<DropDownItem key='ccc' label='ccc' />,
|
||||
],
|
||||
onSelect: () => { }
|
||||
},
|
||||
{
|
||||
label: 'Menu item 1',
|
||||
disabled: false,
|
||||
onClick: () => { }
|
||||
},
|
||||
{
|
||||
label: 'Menu item 2',
|
||||
disabled: true,
|
||||
onClick: () => { }
|
||||
}
|
||||
];
|
||||
|
||||
const baseProps = {
|
||||
checked: false,
|
||||
menuItems: defaultMenuItems,
|
||||
visible: true,
|
||||
moreLabel: 'More',
|
||||
closeTitle: 'Close'
|
||||
}
|
||||
|
||||
describe('<GroupButtonsMenu />', () => {
|
||||
it('renders without error', () => {
|
||||
const menuItems = [
|
||||
{
|
||||
label: 'Select',
|
||||
isDropdown: true,
|
||||
isSeparator: true,
|
||||
isSelect: true,
|
||||
fontWeight: 'bold',
|
||||
children: [
|
||||
<DropDownItem key='aaa' label='aaa' />,
|
||||
<DropDownItem key='bbb' label='bbb' />,
|
||||
<DropDownItem key='ccc' label='ccc' />,
|
||||
],
|
||||
onSelect: () => {}
|
||||
},
|
||||
{
|
||||
label: 'Menu item 1',
|
||||
disabled: false,
|
||||
onClick: () => {}
|
||||
},
|
||||
{
|
||||
label: 'Menu item 2',
|
||||
disabled: true,
|
||||
onClick: () => {}
|
||||
}
|
||||
];
|
||||
it('renders without error', () => {
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
||||
|
||||
const wrapper = mount(
|
||||
<GroupButtonsMenu checked={false} menuItems={menuItems} visible={true} moreLabel='More' closeTitle='Close' />
|
||||
);
|
||||
expect(wrapper).toExist();
|
||||
});
|
||||
|
||||
expect(wrapper).toExist();
|
||||
it('applies checked prop', () => {
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} checked={true} />);
|
||||
|
||||
expect(wrapper.prop('checked')).toEqual(true);
|
||||
});
|
||||
|
||||
it('applies visible prop', () => {
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} visible={true} />);
|
||||
|
||||
expect(wrapper.prop('visible')).toEqual(true);
|
||||
});
|
||||
|
||||
it('causes function closeMenu()', () => {
|
||||
const onClose = jest.fn();
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} onClose={onClose} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.closeMenu(new Event('click'));
|
||||
|
||||
expect(wrapper.state('visible')).toBe(false);
|
||||
expect(onClose).toBeCalled();
|
||||
});
|
||||
|
||||
it('causes function groupButtonClick()', () => {
|
||||
const onClick = jest.fn();
|
||||
const item = {
|
||||
label: 'Menu item 1',
|
||||
disabled: false,
|
||||
onClick: onClick
|
||||
};
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.groupButtonClick(item);
|
||||
|
||||
expect(wrapper.state('visible')).toBe(false);
|
||||
expect(onClick).toBeCalled();
|
||||
});
|
||||
|
||||
it('causes function countMenuItems()', () => {
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.countMenuItems([], 2, 1);
|
||||
instance.countMenuItems([1, 2], 200, 2);
|
||||
instance.countMenuItems([1,2,3,4], 1, 2);
|
||||
|
||||
expect(wrapper.state('visible')).toBe(true);
|
||||
});
|
||||
|
||||
it('causes function groupButtonClick() if disabled', () => {
|
||||
const onClick = jest.fn();
|
||||
const item = {
|
||||
label: 'Menu item 1',
|
||||
disabled: true,
|
||||
onClick: onClick
|
||||
};
|
||||
const wrapper = mount(<GroupButtonsMenu {...baseProps} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.groupButtonClick(item);
|
||||
|
||||
expect(wrapper.state('visible')).toBe(true);
|
||||
expect(onClick).toBeCalledTimes(0);
|
||||
});
|
||||
|
||||
it('componentDidUpdate() props lifecycle test', () => {
|
||||
const wrapper = shallow(<GroupButtonsMenu {...baseProps} visible={false} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.componentDidUpdate({ visible: true, menuItems: defaultMenuItems }, wrapper.state());
|
||||
|
||||
expect(wrapper.props()).toBe(wrapper.props());
|
||||
});
|
||||
|
||||
it('componentWillUnmount() props lifecycle test', () => {
|
||||
const wrapper = shallow(<GroupButtonsMenu {...baseProps} />);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
instance.componentWillUnmount();
|
||||
|
||||
expect(wrapper).toExist(false);
|
||||
});
|
||||
|
||||
it('filled state moreItems', () => {
|
||||
const wrapper = shallow(<GroupButtonsMenu {...baseProps} />);
|
||||
|
||||
wrapper.setState({
|
||||
moreItems: [{
|
||||
label: 'Menu item 1',
|
||||
disabled: false,
|
||||
onClick: jest.fn()
|
||||
}]
|
||||
});
|
||||
|
||||
expect(wrapper).toExist(false);
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in New Issue
Block a user