This commit is contained in:
Nikita Gopienko 2019-08-30 13:21:18 +03:00
commit 6895729945
7 changed files with 66 additions and 44 deletions

View File

@ -32,6 +32,7 @@ const App = ({ settings }) => {
path={`${homepage}/edit/:userId`}
component={ProfileAction}
restricted
allowForMe
/>
<PrivateRoute
path={`${homepage}/create/:type`}

View File

@ -1,4 +1,5 @@
import React, { useCallback } from 'react';
import React from 'react';
import { utils } from 'asc-web-components';
import { connect } from 'react-redux';
import {
TreeMenu,
@ -50,16 +51,25 @@ const getItems = data => {
});
};
const PeopleTreeMenu = props => {
const { data, selectGroup, defaultSelectedKeys } = props;
class ArticleBodyContent extends React.Component {
console.log("PeopleTreeMenu", props);
shouldComponentUpdate(nextProps) {
if(!utils.array.isArrayEqual(nextProps.selectedKeys, this.props.selectedKeys)) {
return true;
}
const onSelect = useCallback(data => {
selectGroup(data && data.length === 1 && data[0] !== "root" ? data[0] : null);
}, [selectGroup])
if(!utils.array.isArrayEqual(nextProps.data, this.props.data)) {
return true;
}
const switcherIcon = obj => {
return false;
}
onSelect = data => {
this.props.selectGroup(data && data.length === 1 && data[0] !== "root" ? data[0] : null);
};
switcherIcon = obj => {
if (obj.isLeaf) {
return null;
}
@ -74,6 +84,11 @@ const PeopleTreeMenu = props => {
}
};
render() {
const { data, selectedKeys } = this.props;
console.log("PeopleTreeMenu", this.props);
return (
<TreeMenu
checkable={false}
@ -82,17 +97,16 @@ const PeopleTreeMenu = props => {
multiple={false}
showIcon={true}
defaultExpandAll={true}
switcherIcon={switcherIcon}
onSelect={onSelect}
defaultSelectedKeys={defaultSelectedKeys}
switcherIcon={this.switcherIcon}
onSelect={this.onSelect}
defaultSelectedKeys={selectedKeys}
>
{getItems(data)}
</TreeMenu>
);
};
};
const ArticleBodyContent = props => <PeopleTreeMenu {...props} />;
const getTreeGroups = (groups) => {
const treeData = [
{
@ -113,7 +127,7 @@ const getTreeGroups = (groups) => {
function mapStateToProps(state) {
return {
data: getTreeGroups(state.people.groups),
defaultSelectedKeys: state.people.selectedGroup ? [state.people.selectedGroup] : ["root"]
selectedKeys: state.people.selectedGroup ? [state.people.selectedGroup] : ["root"]
};
}

View File

@ -4,11 +4,14 @@ import PropTypes from "prop-types";
import { Route } from "react-router-dom";
import ExternalRedirect from '../helpers/externalRedirect';
import { PageLayout, Loader } from "asc-web-components";
import { isAdmin } from "../store/auth/selectors";
import { isAdmin, isMe } from "../store/auth/selectors";
import { Error404 } from "../components/pages/Error";
const PrivateRoute = ({ component: Component, ...rest }) => {
const { isAuthenticated, isLoaded, isAdmin, restricted } = rest;
const { isAuthenticated, isLoaded, isAdmin, restricted, allowForMe, currentUser, computedMatch } = rest;
const { userId } = computedMatch.params;
console.log("PrivateRoute render", rest);
return (
<Route
{...rest}
@ -21,7 +24,7 @@ const PrivateRoute = ({ component: Component, ...rest }) => {
/>
) : isAuthenticated ? (
restricted
? (isAdmin
? (isAdmin || (allowForMe && userId && isMe(currentUser, userId))
? <Component {...props} />
: <Error404 />
)
@ -42,7 +45,8 @@ function mapStateToProps(state) {
return {
isAuthenticated: state.auth.isAuthenticated,
isLoaded: state.auth.isLoaded,
isAdmin: isAdmin(state.auth.user)
isAdmin: isAdmin(state.auth.user),
currentUser: state.auth.user
};
}

View File

@ -54,12 +54,7 @@ export function selectGroup(groupId) {
let newFilter = filter.clone();
newFilter.group = groupId;
fetchPeopleAsync(dispatch, newFilter);
return dispatch({
type: SELECT_GROUP,
groupId
});
return fetchPeopleByFilter(dispatch, newFilter);
};
}
@ -86,12 +81,7 @@ export function setFilter(filter) {
export function fetchPeople(filter) {
return dispatch => {
let filterData = (filter && filter.clone()) || Filter.getDefault();
return api.getUserList(filterData).then(res => {
filterData.total = res.data.total;
dispatch(setFilter(filterData));
return dispatch(setUsers(res.data.response));
});
return fetchPeopleByFilter(dispatch, filter);
};
}
@ -100,6 +90,10 @@ export function fetchPeopleByFilter(dispatch, filter) {
return api.getUserList(filterData).then(res => {
filterData.total = res.data.total;
dispatch(setFilter(filterData));
dispatch({
type: SELECT_GROUP,
groupId: filterData.group
});
return dispatch(setUsers(res.data.response));
});
}
@ -112,6 +106,10 @@ export async function fetchPeopleAsync(dispatch, filter = null) {
filterData.total = usersResp.data.total;
dispatch(setFilter(filterData));
dispatch({
type: SELECT_GROUP,
groupId: filterData.group
});
dispatch(setUsers(usersResp.data.response));
}

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-components",
"version": "1.0.21",
"version": "1.0.22",
"description": "Ascensio System SIA component library",
"license": "AGPL-3.0",
"main": "dist/asc-web-components.cjs.js",

View File

@ -54,3 +54,4 @@ export { default as AdvancedSelector } from './components/advanced-selector'
export { default as ContextMenu } from './components/context-menu'
export { default as RowContainer } from './components/row-container'
export { default as FieldContainer } from './components/field-container'
export { default as utils } from './utils'

View File

@ -0,0 +1,4 @@
import * as array from './array';
import * as event from './event';
export default { array, event };