Merge branch 'feature/mobx' of https://github.com/ONLYOFFICE/AppServer into feature/mobx
This commit is contained in:
commit
c10c1f17cd
@ -1,5 +1,5 @@
|
||||
import React, { Suspense, useEffect } from "react";
|
||||
import { connect } from "react-redux";
|
||||
// import { connect } from "react-redux";
|
||||
import { Router, Switch, Redirect } from "react-router-dom";
|
||||
import Home from "./components/pages/Home";
|
||||
import Profile from "./components/pages/Profile";
|
||||
@ -15,57 +15,133 @@ import {
|
||||
Error520,
|
||||
Offline,
|
||||
utils,
|
||||
store as commonStore,
|
||||
// store as commonStore,
|
||||
NavMenu,
|
||||
Main,
|
||||
toastr,
|
||||
} from "asc-web-common";
|
||||
import { getFilterByLocation } from "./helpers/converters";
|
||||
import { fetchGroups, fetchPeople } from "./store/people/actions";
|
||||
// import { getFilterByLocation } from "./helpers/converters";
|
||||
// import { fetchGroups, fetchPeople } from "./store/people/actions";
|
||||
import config from "../package.json";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
const {
|
||||
setIsLoaded,
|
||||
//getUser,
|
||||
getPortalSettings,
|
||||
//getModules,
|
||||
setCurrentProductId,
|
||||
setCurrentProductHomePage,
|
||||
getPortalPasswordSettings,
|
||||
getPortalCultures,
|
||||
getIsAuthenticated,
|
||||
} = commonStore.auth.actions;
|
||||
// const {
|
||||
// setIsLoaded,
|
||||
// getUser,
|
||||
// getPortalSettings,
|
||||
// getModules,
|
||||
// setCurrentProductId,
|
||||
// setCurrentProductHomePage,
|
||||
// getPortalPasswordSettings,
|
||||
// getPortalCultures,
|
||||
// getIsAuthenticated,
|
||||
// } = commonStore.auth.actions;
|
||||
// const { userStore, settingsStore } = commonStore;
|
||||
|
||||
/*const Profile = lazy(() => import("./components/pages/Profile"));
|
||||
const ProfileAction = lazy(() => import("./components/pages/ProfileAction"));
|
||||
const GroupAction = lazy(() => import("./components/pages/GroupAction"));*/
|
||||
// const Profile = lazy(() => import("./components/pages/Profile"));
|
||||
// const ProfileAction = lazy(() => import("./components/pages/ProfileAction"));
|
||||
// const GroupAction = lazy(() => import("./components/pages/GroupAction"));
|
||||
|
||||
class App extends React.Component {
|
||||
const App = (props) => {
|
||||
const { homepage, isLoaded, loadBaseInfo } = props;
|
||||
|
||||
useEffect(() => {
|
||||
try {
|
||||
console.log("loadBaseInfo call");
|
||||
loadBaseInfo();
|
||||
} catch (err) {
|
||||
toastr.error(err);
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
console.log("App People render", isLoaded);
|
||||
if (isLoaded) utils.updateTempContent();
|
||||
}, [isLoaded]);
|
||||
|
||||
return navigator.onLine ? (
|
||||
<Router history={history}>
|
||||
<NavMenu />
|
||||
<Main>
|
||||
<Suspense fallback={null}>
|
||||
<Switch>
|
||||
<Redirect exact from="/" to={`${homepage}`} />
|
||||
<PrivateRoute
|
||||
exact
|
||||
path={`${homepage}/view/:userId`}
|
||||
component={Profile}
|
||||
/>
|
||||
<PrivateRoute
|
||||
path={`${homepage}/edit/:userId`}
|
||||
restricted
|
||||
allowForMe
|
||||
component={ProfileAction}
|
||||
/>
|
||||
<PrivateRoute
|
||||
path={`${homepage}/create/:type`}
|
||||
restricted
|
||||
component={ProfileAction}
|
||||
/>
|
||||
<PrivateRoute
|
||||
path={[
|
||||
`${homepage}/group/edit/:groupId`,
|
||||
`${homepage}/group/create`,
|
||||
]}
|
||||
restricted
|
||||
component={GroupAction}
|
||||
/>
|
||||
<PrivateRoute
|
||||
path={`${homepage}/reassign/:userId`}
|
||||
restricted
|
||||
component={Reassign}
|
||||
/>
|
||||
<PrivateRoute exact path={homepage} component={Home} />
|
||||
<PrivateRoute path={`${homepage}/filter`} component={Home} />
|
||||
<PublicRoute
|
||||
exact
|
||||
path={[
|
||||
"/login",
|
||||
"/login/error=:error",
|
||||
"/login/confirmed-email=:confirmedEmail",
|
||||
]}
|
||||
component={Login}
|
||||
/>
|
||||
<PrivateRoute exact path={`/error=:error`} component={Error520} />
|
||||
<PrivateRoute component={Error404} />
|
||||
</Switch>
|
||||
</Suspense>
|
||||
</Main>
|
||||
</Router>
|
||||
) : (
|
||||
<Offline />
|
||||
);
|
||||
};
|
||||
|
||||
/*class App extends React.Component {
|
||||
async componentDidMount() {
|
||||
const {
|
||||
setModuleInfo,
|
||||
getUser,
|
||||
getPortalSettings,
|
||||
// setModuleInfo,
|
||||
// getUser,
|
||||
// getPortalSettings,
|
||||
//getModules,
|
||||
getPortalPasswordSettings,
|
||||
getPortalCultures,
|
||||
fetchGroups,
|
||||
fetchPeople,
|
||||
setIsLoaded,
|
||||
getIsAuthenticated,
|
||||
// getPortalPasswordSettings,
|
||||
// getPortalCultures,
|
||||
// fetchGroups,
|
||||
// fetchPeople,
|
||||
// setIsLoaded,
|
||||
// getIsAuthenticated,
|
||||
loadBaseInfo,
|
||||
isLoaded,
|
||||
// loadBasePeopleInfo,
|
||||
} = this.props;
|
||||
|
||||
try {
|
||||
const isAuthenticated = await getIsAuthenticated();
|
||||
// const isAuthenticated = await getIsAuthenticated();
|
||||
|
||||
if (isAuthenticated) utils.updateTempContent(isAuthenticated);
|
||||
// if (isAuthenticated) utils.updateTempContent(isAuthenticated);
|
||||
|
||||
await loadBaseInfo();
|
||||
utils.updateTempContent();
|
||||
setIsLoaded();
|
||||
// setIsLoaded();
|
||||
} catch (e) {
|
||||
toastr.error(e);
|
||||
}
|
||||
@ -169,54 +245,43 @@ class App extends React.Component {
|
||||
// };
|
||||
// };
|
||||
|
||||
const mapDispatchToProps = (dispatch) => {
|
||||
return {
|
||||
getIsAuthenticated: () => getIsAuthenticated(dispatch),
|
||||
// setModuleInfo: () => {
|
||||
// dispatch(setCurrentProductHomePage(config.homepage));
|
||||
// dispatch(setCurrentProductId("f4d98afd-d336-4332-8778-3c6945c81ea0"));
|
||||
// },
|
||||
//getUser: () => getUser(dispatch),
|
||||
//getPortalSettings: () => getPortalSettings(dispatch),
|
||||
//getModules: () => getModules(dispatch),
|
||||
getPortalPasswordSettings: () => getPortalPasswordSettings(dispatch),
|
||||
getPortalCultures: () => getPortalCultures(dispatch),
|
||||
fetchGroups: () => fetchGroups(dispatch),
|
||||
fetchPeople: () => {
|
||||
var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm");
|
||||
const match = window.location.pathname.match(re);
|
||||
// const mapDispatchToProps = (dispatch) => {
|
||||
// return {
|
||||
//getIsAuthenticated: () => getIsAuthenticated(dispatch),
|
||||
// setModuleInfo: () => {
|
||||
// dispatch(setCurrentProductHomePage(config.homepage));
|
||||
// dispatch(setCurrentProductId("f4d98afd-d336-4332-8778-3c6945c81ea0"));
|
||||
// },
|
||||
//getUser: () => getUser(dispatch),
|
||||
//getPortalSettings: () => getPortalSettings(dispatch),
|
||||
//getModules: () => getModules(dispatch),
|
||||
// getPortalPasswordSettings: () => getPortalPasswordSettings(dispatch),
|
||||
// getPortalCultures: () => getPortalCultures(dispatch),
|
||||
// fetchGroups: () => fetchGroups(dispatch),
|
||||
// fetchPeople: () => {
|
||||
// var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm");
|
||||
// const match = window.location.pathname.match(re);
|
||||
|
||||
if (match && match.length > 0) {
|
||||
const newFilter = getFilterByLocation(window.location);
|
||||
return fetchPeople(newFilter, dispatch);
|
||||
}
|
||||
// if (match && match.length > 0) {
|
||||
// const newFilter = getFilterByLocation(window.location);
|
||||
// return fetchPeople(newFilter, dispatch);
|
||||
// }
|
||||
|
||||
return Promise.resolve();
|
||||
},
|
||||
setIsLoaded: () => dispatch(setIsLoaded(true)),
|
||||
};
|
||||
};
|
||||
|
||||
// const AppWrapper = observer((props) => {
|
||||
// useEffect(() => {
|
||||
// userStore.setCurrentUser();
|
||||
// }, []);
|
||||
|
||||
// return <App user={userStore.user} {...props} />;
|
||||
// });
|
||||
|
||||
// export default connect(mapStateToProps, mapDispatchToProps)(AppWrapper);
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
mapDispatchToProps
|
||||
)(
|
||||
inject(({ store }) => ({
|
||||
user: store.userStore.user,
|
||||
isAuthenticated: store.userStore.isAuthenticated,
|
||||
getUser: store.userStore.setCurrentUser,
|
||||
homepage: store.settingsStore.homepage || config.homepage,
|
||||
encryptionKeys: store.settingsStore.encryptionKeys,
|
||||
loadBaseInfo: store.init,
|
||||
}))(App)
|
||||
);
|
||||
// return Promise.resolve();
|
||||
// },
|
||||
// setIsLoaded: () => dispatch(setIsLoaded(true)),
|
||||
// };
|
||||
// };
|
||||
*/
|
||||
export default inject(({ store, peopleStore }) => ({
|
||||
homepage: store.settingsStore.homepage || config.homepage,
|
||||
loadBaseInfo: () => {
|
||||
store.init();
|
||||
store.settingsStore.setModuleInfo(
|
||||
config.homepage,
|
||||
"f4d98afd-d336-4332-8778-3c6945c81ea0"
|
||||
);
|
||||
peopleStore.init();
|
||||
},
|
||||
isLoaded: store.isLoaded,
|
||||
}))(observer(App));
|
||||
|
@ -17,6 +17,7 @@ import {
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import styled, { css } from "styled-components";
|
||||
import { setDocumentTitle } from "../../../helpers/utils";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
const i18n = createI18N({
|
||||
page: "Article",
|
||||
@ -114,14 +115,14 @@ class ArticleBodyContent extends React.Component {
|
||||
}
|
||||
};
|
||||
onSelect = (data) => {
|
||||
const { setIsLoading } = this.props
|
||||
const { setIsLoading } = this.props;
|
||||
return () => {
|
||||
const { selectGroup } = this.props;
|
||||
setIsLoading(true);
|
||||
this.changeTitleDocument(data);
|
||||
selectGroup(
|
||||
data && data.length === 1 && data[0] !== "root" ? data[0] : null
|
||||
).finally(() => setIsLoading(false))
|
||||
).finally(() => setIsLoading(false));
|
||||
};
|
||||
};
|
||||
switcherIcon = (obj) => {
|
||||
@ -230,20 +231,19 @@ const BodyContent = (props) => {
|
||||
};
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const groups = state.people.groups;
|
||||
//const groups = state.people.groups;
|
||||
const { isLoaded, settings } = state.auth;
|
||||
const { customNames } = settings;
|
||||
const { groupsCaption } = customNames;
|
||||
const { editingForm } = state.people;
|
||||
|
||||
return {
|
||||
data: getTreeGroups(groups, groupsCaption),
|
||||
// data: getTreeGroups(groups, groupsCaption),
|
||||
selectedKeys: state.people.selectedGroup
|
||||
? [state.people.selectedGroup]
|
||||
: ["root"],
|
||||
groups,
|
||||
isAdmin: isAdmin(state),
|
||||
isLoaded,
|
||||
// groups,
|
||||
// isAdmin: isAdmin(state),
|
||||
// isLoaded,
|
||||
editingForm,
|
||||
};
|
||||
}
|
||||
@ -252,4 +252,16 @@ export default connect(mapStateToProps, {
|
||||
selectGroup,
|
||||
setIsVisibleDataLossDialog,
|
||||
setIsLoading,
|
||||
})(BodyContent);
|
||||
})(
|
||||
inject(({ store, peopleStore }) => {
|
||||
const groups = peopleStore.groupsStore.groups;
|
||||
const { groupsCaption } = store.settingsStore.customNames;
|
||||
const data = getTreeGroups(groups, groupsCaption);
|
||||
return {
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
groups,
|
||||
data,
|
||||
};
|
||||
})(observer(BodyContent))
|
||||
);
|
||||
|
@ -1,6 +1,7 @@
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { store, Headline, Loaders } from "asc-web-common";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
const { getCurrentProductName } = store.auth.selectors;
|
||||
|
||||
@ -19,4 +20,8 @@ const mapStateToProps = (state) => {
|
||||
};
|
||||
};
|
||||
|
||||
export default connect(mapStateToProps)(ArticleHeaderContent);
|
||||
export default connect(mapStateToProps)(
|
||||
inject(({ store }) => ({
|
||||
currentModuleName: store.product.title,
|
||||
}))(observer(ArticleHeaderContent))
|
||||
);
|
||||
|
@ -1,8 +1,6 @@
|
||||
import React, { useEffect } from "react";
|
||||
import { connect } from "react-redux";
|
||||
import PropTypes from "prop-types";
|
||||
import { withRouter } from "react-router";
|
||||
import { store } from "asc-web-common";
|
||||
import { MainButton, DropDownItem } from "asc-web-components";
|
||||
import { InviteDialog } from "./../../dialogs";
|
||||
import { withTranslation, I18nextProvider } from "react-i18next";
|
||||
@ -10,14 +8,12 @@ import { utils, toastr, Loaders } from "asc-web-common";
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
const { getLanguage /* getSettings */ } = store.auth.selectors;
|
||||
const i18n = createI18N({
|
||||
page: "Article",
|
||||
localesPath: "Article",
|
||||
});
|
||||
|
||||
const { changeLanguage } = utils;
|
||||
const { settingsStore } = store;
|
||||
|
||||
class PureArticleMainButtonContent extends React.Component {
|
||||
constructor(props) {
|
||||
@ -133,23 +129,8 @@ ArticleMainButtonContent.propTypes = {
|
||||
language: PropTypes.string,
|
||||
};
|
||||
|
||||
const mapStateToProps = (state) => {
|
||||
const { isLoaded } = state.auth;
|
||||
return {
|
||||
isLoaded,
|
||||
//settings: getSettings(state),
|
||||
language: getLanguage(state),
|
||||
};
|
||||
};
|
||||
|
||||
// const MainButtonWrapper = observer((props) => {
|
||||
// return (
|
||||
// <ArticleMainButtonContent settings={settingsStore.settings} {...props} />
|
||||
// );
|
||||
// });
|
||||
|
||||
export default connect(mapStateToProps)(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
}))(observer(withRouter(ArticleMainButtonContent)))
|
||||
);
|
||||
export default inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
isLoaded: store.isLoaded,
|
||||
language: store.language,
|
||||
}))(observer(withRouter(ArticleMainButtonContent)));
|
||||
|
@ -493,48 +493,30 @@ const convertGroups = (groups) => {
|
||||
};
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const currentModuleName = getCurrentProductName(state);
|
||||
//const currentModuleName = getCurrentProductName(state);
|
||||
//const settings = getSettings(state);
|
||||
// const {
|
||||
// groupHeadCaption,
|
||||
// groupsCaption,
|
||||
// groupCaption,
|
||||
// } = settings.customNames;
|
||||
const { isLoaded } = state.auth;
|
||||
//const { isLoaded } = state.auth;
|
||||
|
||||
return {
|
||||
//settings,
|
||||
group: state.group.targetGroup,
|
||||
groups: convertGroups(state.people.groups),
|
||||
//groups: convertGroups(state.people.groups),
|
||||
users: convertUsers(state.people.selector.users), //TODO: replace to api requests with search
|
||||
// groupHeadCaption,
|
||||
// groupsCaption,
|
||||
// groupCaption,
|
||||
me: getCurrentUser(state),
|
||||
currentModuleName,
|
||||
//me: getCurrentUser(state),
|
||||
//currentModuleName,
|
||||
filter: state.people.filter,
|
||||
isLoaded,
|
||||
// isLoaded,
|
||||
};
|
||||
}
|
||||
|
||||
// const SectionBodyContentWrapper = observer((props) => {
|
||||
// const {
|
||||
// groupHeadCaption,
|
||||
// groupsCaption,
|
||||
// groupCaption,
|
||||
// } = settingsStore.customNames;
|
||||
|
||||
// return (
|
||||
// <SectionBodyContent
|
||||
// settings={settingsStore.settings}
|
||||
// groupHeadCaption={groupHeadCaption}
|
||||
// groupsCaption={groupsCaption}
|
||||
// groupCaption={groupCaption}
|
||||
// {...props}
|
||||
// />
|
||||
// );
|
||||
// });
|
||||
|
||||
export default connect(mapStateToProps, {
|
||||
resetGroup,
|
||||
createGroup,
|
||||
@ -542,12 +524,19 @@ export default connect(mapStateToProps, {
|
||||
selectGroup,
|
||||
setFilter,
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
groupCaption: store.settingsStore.customNames.groupCaption,
|
||||
groupsCaption: store.settingsStore.customNames.groupsCaption,
|
||||
groupHeadCaption: store.settingsStore.customNames.groupHeadCaption,
|
||||
}))(observer(withRouter(withTranslation()(SectionBodyContent))))
|
||||
inject(({ store, peopleStore }) => {
|
||||
const groups = convertGroups(peopleStore.groupsStore.groups);
|
||||
return {
|
||||
settings: store.settingsStore,
|
||||
groupCaption: store.settingsStore.customNames.groupCaption,
|
||||
groupsCaption: store.settingsStore.customNames.groupsCaption,
|
||||
groupHeadCaption: store.settingsStore.customNames.groupHeadCaption,
|
||||
isLoaded: store.isLoaded,
|
||||
currentModuleName: store.product.title,
|
||||
me: store.userStore.user,
|
||||
groups,
|
||||
};
|
||||
})(observer(withRouter(withTranslation()(SectionBodyContent))))
|
||||
);
|
||||
|
||||
// export default connect(mapStateToProps, {
|
||||
|
@ -13,6 +13,7 @@ import { fetchGroup, resetGroup } from "../../../store/group/actions";
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import { setDocumentTitle } from "../../../helpers/utils";
|
||||
import { withRouter } from "react-router";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const i18n = createI18N({
|
||||
page: "GroupAction",
|
||||
localesPath: "pages/GroupAction",
|
||||
@ -117,11 +118,15 @@ function mapStateToProps(state) {
|
||||
return {
|
||||
//settings: state.auth.settings,
|
||||
group: state.group.targetGroup,
|
||||
isAdmin: isAdmin(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, {
|
||||
fetchGroup,
|
||||
resetGroup,
|
||||
})(GroupActionContainer);
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(GroupActionContainer))
|
||||
);
|
||||
|
@ -343,7 +343,7 @@ class SectionBodyContent extends React.PureComponent {
|
||||
};
|
||||
|
||||
onContentRowSelect = (checked, user) => {
|
||||
//console.log("ContentRow onSelect", checked, user);
|
||||
console.log("ContentRow onSelect", checked, user);
|
||||
if (checked) {
|
||||
this.props.selectUser(user);
|
||||
} else {
|
||||
@ -544,14 +544,14 @@ const mapStateToProps = (state) => {
|
||||
const { isLoaded } = state.auth;
|
||||
const { filter, isLoading } = state.people;
|
||||
return {
|
||||
isLoaded,
|
||||
// isLoaded,
|
||||
isLoadedSection: getIsLoadedSection(state),
|
||||
filter,
|
||||
isLoading,
|
||||
peopleList: getPeopleList(state),
|
||||
//settings: getSettings(state),
|
||||
isAdmin: isAdmin(state),
|
||||
currentUserId: getCurrentUserId(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
// currentUserId: getCurrentUserId(state),
|
||||
};
|
||||
};
|
||||
|
||||
@ -580,7 +580,11 @@ export default connect(mapStateToProps, {
|
||||
selectGroup,
|
||||
setIsLoadedSection,
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
inject(({ store, peopleStore }) => ({
|
||||
settings: store.settingsStore,
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
currentUserId: store.userStore.user.id,
|
||||
//peopleList: peopleStore.usersStore.users,
|
||||
}))(observer(withRouter(withTranslation()(SectionBodyContent))))
|
||||
);
|
||||
|
@ -266,13 +266,13 @@ class SectionFilterContent extends React.Component {
|
||||
|
||||
function mapStateToProps(state) {
|
||||
return {
|
||||
user: getCurrentUser(state),
|
||||
language: getLanguage(state),
|
||||
groups: getGroups(state),
|
||||
//user: getCurrentUser(state),
|
||||
//language: getLanguage(state),
|
||||
//groups: getGroups(state),
|
||||
filter: getFilter(state),
|
||||
//settings: getSettings(state),
|
||||
isAdmin: isAdmin(state),
|
||||
isLoaded: getIsLoaded(state),
|
||||
// settings: getSettings(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
// isLoaded: getIsLoaded(state),
|
||||
};
|
||||
}
|
||||
|
||||
@ -281,9 +281,17 @@ function mapStateToProps(state) {
|
||||
// });
|
||||
|
||||
export default connect(mapStateToProps, { fetchPeople })(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
}))(
|
||||
inject(({ store, peopleStore }) => {
|
||||
// const { isAdmin, isLoaded, language, settings } = store;
|
||||
return {
|
||||
settings: store.settingsStore,
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
language: store.language,
|
||||
user: store.userStore.user,
|
||||
groups: peopleStore.groupsStore.groups,
|
||||
};
|
||||
})(
|
||||
observer(
|
||||
withRouter(withLayoutSize(withTranslation()(SectionFilterContent)))
|
||||
)
|
||||
|
@ -490,11 +490,11 @@ const mapStateToProps = (state) => {
|
||||
|
||||
return {
|
||||
group: getSelectedGroup(groups, selectedGroup),
|
||||
isAdmin: isAdmin(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
//homepage,
|
||||
//customNames,
|
||||
selection,
|
||||
isLoaded,
|
||||
// isLoaded,
|
||||
hasAnybodySelected: hasAnybodySelected(state),
|
||||
hasUsersToMakeEmployees: hasUsersToMakeEmployees(state),
|
||||
hasUsersToMakeGuests: hasUsersToMakeGuests(state),
|
||||
@ -525,5 +525,7 @@ export default connect(mapStateToProps, {
|
||||
inject(({ store }) => ({
|
||||
customNames: store.settingsStore.customNames,
|
||||
homepage: store.settingsStore.homepage,
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(withTranslation()(withRouter(SectionHeaderContent))))
|
||||
);
|
||||
|
@ -6,6 +6,7 @@ import { Paging } from "asc-web-components";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { getFilter } from "../../../../../store/people/selectors";
|
||||
import { store, Loaders } from "asc-web-common";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const { getIsLoaded } = store.auth.selectors;
|
||||
|
||||
const SectionPagingContent = ({
|
||||
@ -154,8 +155,12 @@ const SectionPagingContent = ({
|
||||
function mapStateToProps(state) {
|
||||
return {
|
||||
filter: getFilter(state),
|
||||
isLoaded: getIsLoaded(state),
|
||||
// isLoaded: getIsLoaded(state),
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, { fetchPeople })(SectionPagingContent);
|
||||
export default connect(mapStateToProps, { fetchPeople })(
|
||||
inject(({ store }) => ({
|
||||
isLoaded: store.isLoaded,
|
||||
}))(observer(SectionPagingContent))
|
||||
);
|
||||
|
@ -20,6 +20,7 @@ import { setSelected, setIsLoading } from "../../../store/people/actions";
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import { isMobile } from "react-device-detect";
|
||||
import { getIsLoading } from "../../../store/people/selectors";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const i18n = createI18N({
|
||||
page: "Home",
|
||||
localesPath: "pages/Home",
|
||||
@ -180,18 +181,24 @@ Home.propTypes = {
|
||||
function mapStateToProps(state) {
|
||||
const { users, selection, selected, selectedGroup, groups } = state.people;
|
||||
return {
|
||||
users,
|
||||
//users,
|
||||
selection,
|
||||
selected,
|
||||
selectedGroup,
|
||||
groups,
|
||||
organizationName: getOrganizationName(state),
|
||||
isAdmin: isAdmin(state),
|
||||
// groups,
|
||||
// organizationName: getOrganizationName(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
isLoading: getIsLoading(state),
|
||||
isLoaded: getIsLoaded(state),
|
||||
// isLoaded: getIsLoaded(state),
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, { setSelected, setIsLoading })(
|
||||
withRouter(Home)
|
||||
inject(({ store, peopleStore }) => ({
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
organizationName: store.settingsStore.organizationName,
|
||||
users: peopleStore.usersStore.users,
|
||||
groups: peopleStore.groupsStore.groups,
|
||||
}))(observer(withRouter(Home)))
|
||||
);
|
||||
|
@ -187,7 +187,7 @@ const mapStateToProps = (state) => {
|
||||
return {
|
||||
//settings: state.auth.settings,
|
||||
profile: state.profile.targetUser,
|
||||
isAdmin: isAdmin(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
viewer: state.auth.user,
|
||||
};
|
||||
};
|
||||
@ -199,6 +199,7 @@ const mapStateToProps = (state) => {
|
||||
export default connect(mapStateToProps)(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(withRouter(withTranslation()(SectionBodyContent))))
|
||||
);
|
||||
|
||||
|
@ -510,8 +510,8 @@ const mapStateToProps = (state) => {
|
||||
return {
|
||||
//settings: state.auth.settings,
|
||||
profile: state.profile.targetUser,
|
||||
viewer: state.auth.user,
|
||||
isAdmin: isAdmin(state),
|
||||
//viewer: state.auth.user,
|
||||
// isAdmin: isAdmin(state),
|
||||
filter: state.people.filter,
|
||||
};
|
||||
};
|
||||
@ -528,6 +528,8 @@ export default connect(mapStateToProps, {
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
isAdmin: store.isAdmin,
|
||||
viewer: store.userStore.user,
|
||||
}))(observer(withRouter(withTranslation()(SectionHeaderContent))))
|
||||
);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { useEffect } from "react";
|
||||
import React, { Profiler, useEffect } from "react";
|
||||
import { connect } from "react-redux";
|
||||
import PropTypes from "prop-types";
|
||||
import { Loader } from "asc-web-components";
|
||||
@ -15,6 +15,7 @@ import { createI18N } from "../../../helpers/i18n";
|
||||
import { setDocumentTitle } from "../../../helpers/utils";
|
||||
import { withRouter } from "react-router";
|
||||
import { isChrome, isAndroid } from "react-device-detect";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const i18n = createI18N({
|
||||
page: "Profile",
|
||||
localesPath: "pages/Profile",
|
||||
@ -121,14 +122,20 @@ function mapStateToProps(state) {
|
||||
const { targetUser } = state.profile;
|
||||
return {
|
||||
profile: targetUser,
|
||||
isLoaded,
|
||||
// isLoaded,
|
||||
isVisitor: isVisitor(state),
|
||||
isAdmin: isAdmin(state),
|
||||
language: getLanguage(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
//language: getLanguage(state),
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, {
|
||||
fetchProfile,
|
||||
resetProfile,
|
||||
})(Profile);
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
isLoaded: store.isLoaded,
|
||||
isAdmin: store.isAdmin,
|
||||
language: store.language,
|
||||
}))(observer(Profile))
|
||||
);
|
||||
|
@ -922,7 +922,7 @@ const mapStateToProps = (state) => {
|
||||
editingForm: state.people.editingForm,
|
||||
filter: state.people.filter,
|
||||
disableProfileType: getDisableProfileType(state),
|
||||
isAdmin: isAdmin(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
};
|
||||
};
|
||||
|
||||
@ -942,6 +942,7 @@ export default connect(mapStateToProps, {
|
||||
})(
|
||||
inject(({ store }) => ({
|
||||
settings: store.settingsStore,
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(withRouter(withTranslation()(UpdateUserForm))))
|
||||
);
|
||||
|
||||
|
@ -21,6 +21,7 @@ import { I18nextProvider, withTranslation } from "react-i18next";
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import { setDocumentTitle } from "../../../helpers/utils";
|
||||
import { withRouter } from "react-router";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const i18n = createI18N({
|
||||
page: "ProfileAction",
|
||||
localesPath: "pages/ProfileAction",
|
||||
@ -143,12 +144,14 @@ function mapStateToProps(state) {
|
||||
return {
|
||||
isVisitor: state.auth.user.isVisitor,
|
||||
profile: state.profile.targetUser,
|
||||
isAdmin: isAdmin(state),
|
||||
// isAdmin: isAdmin(state),
|
||||
isEdit: state.people.editingForm.isEdit,
|
||||
avatarEditorIsOpen: state.people.avatarEditorIsOpen,
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps, { fetchProfile, setIsEditingForm })(
|
||||
ProfileActionContainer
|
||||
inject(({ store }) => ({
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(ProfileActionContainer))
|
||||
);
|
||||
|
@ -12,6 +12,7 @@ import {
|
||||
import { I18nextProvider } from "react-i18next";
|
||||
import { SectionHeaderContent, SectionBodyContent } from "./Section";
|
||||
import { createI18N } from "../../../helpers/i18n";
|
||||
import { inject, observer } from "mobx-react";
|
||||
const i18n = createI18N({
|
||||
page: "Reassign",
|
||||
localesPath: "pages/Reassign",
|
||||
@ -86,11 +87,15 @@ Reassign.propTypes = {
|
||||
// fetchProfile: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
function mapStateToProps(state) {
|
||||
return {
|
||||
isAdmin: isAdmin(state),
|
||||
// profile: state.profile.targetUser
|
||||
};
|
||||
}
|
||||
// function mapStateToProps(state) {
|
||||
// return {
|
||||
// isAdmin: isAdmin(state),
|
||||
// profile: state.profile.targetUser
|
||||
// };
|
||||
// }
|
||||
|
||||
export default connect(mapStateToProps, {})(Reassign);
|
||||
// export default connect(mapStateToProps, {})(Reassign);
|
||||
|
||||
export default inject(({ store }) => ({
|
||||
isAdmin: store.isAdmin,
|
||||
}))(observer(Reassign));
|
||||
|
@ -7,12 +7,13 @@ import App from "./App";
|
||||
import * as serviceWorker from "./serviceWorker";
|
||||
import { ErrorBoundary, store as commonStore } from "asc-web-common";
|
||||
import { Provider as MobxProvider } from "mobx-react";
|
||||
import { peopleStore } from "./store/";
|
||||
|
||||
const { authStore } = commonStore;
|
||||
|
||||
ReactDOM.render(
|
||||
<Provider store={store}>
|
||||
<MobxProvider store={authStore}>
|
||||
<MobxProvider store={authStore} peopleStore={peopleStore}>
|
||||
<ErrorBoundary>
|
||||
<App />
|
||||
</ErrorBoundary>
|
||||
|
20
products/ASC.People/Client/src/store/GroupsStore.js
Normal file
20
products/ASC.People/Client/src/store/GroupsStore.js
Normal file
@ -0,0 +1,20 @@
|
||||
import { action, makeObservable, observable } from "mobx";
|
||||
import { api } from "asc-web-common";
|
||||
|
||||
class GroupsStore {
|
||||
groups = null;
|
||||
|
||||
constructor() {
|
||||
makeObservable(this, {
|
||||
groups: observable,
|
||||
getGroupList: action,
|
||||
});
|
||||
}
|
||||
|
||||
getGroupList = async () => {
|
||||
const res = await api.groups.getGroupList();
|
||||
this.groups = res;
|
||||
};
|
||||
}
|
||||
|
||||
export default GroupsStore;
|
56
products/ASC.People/Client/src/store/PeopleStore.js
Normal file
56
products/ASC.People/Client/src/store/PeopleStore.js
Normal file
@ -0,0 +1,56 @@
|
||||
import { action, computed, makeObservable, observable } from "mobx";
|
||||
// import api from "../api";
|
||||
// import history from "../history";
|
||||
// import ModuleStore from "./ModuleStore";
|
||||
// import SettingsStore from "./SettingsStore";
|
||||
import GroupsStore from "./GroupsStore";
|
||||
import UsersStore from "./UsersStore";
|
||||
import { getFilterByLocation } from "../helpers/converters";
|
||||
import config from "../../package.json";
|
||||
import TargetUserStore from "./TargetUserStore";
|
||||
|
||||
class PeopleStore {
|
||||
groupsStore = null;
|
||||
usersStore = null;
|
||||
targetUserStore = null;
|
||||
|
||||
isLoading = false;
|
||||
//isAuthenticated = false;
|
||||
|
||||
constructor() {
|
||||
this.setGroupsStore(new GroupsStore());
|
||||
this.setUsersStore(new UsersStore());
|
||||
this.setTargetUserStore(new TargetUserStore());
|
||||
|
||||
makeObservable(this, {
|
||||
isLoading: observable,
|
||||
setGroupsStore: action,
|
||||
setUsersStore: action,
|
||||
init: action,
|
||||
});
|
||||
}
|
||||
|
||||
init = async () => {
|
||||
const re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm");
|
||||
const match = window.location.pathname.match(re);
|
||||
|
||||
if (match && match.length > 0) {
|
||||
const newFilter = getFilterByLocation(window.location);
|
||||
await this.usersStore.getUsersList(newFilter);
|
||||
}
|
||||
await this.groupsStore.getGroupList();
|
||||
//await this.usersStore.getUsersList();
|
||||
};
|
||||
|
||||
setGroupsStore = (store) => {
|
||||
this.groupsStore = store;
|
||||
};
|
||||
setUsersStore = (store) => {
|
||||
this.usersStore = store;
|
||||
};
|
||||
setTargetUserStore = (store) => {
|
||||
this.targetUserStore = store;
|
||||
};
|
||||
}
|
||||
|
||||
export default new PeopleStore();
|
24
products/ASC.People/Client/src/store/TargetUserStore.js
Normal file
24
products/ASC.People/Client/src/store/TargetUserStore.js
Normal file
@ -0,0 +1,24 @@
|
||||
import { api } from "asc-web-common";
|
||||
import { action, makeObservable, observable } from "mobx";
|
||||
// import { getFilterByLocation } from "../helpers/converters";
|
||||
// import { api } from "asc-web-common";
|
||||
|
||||
// const { Filter } = api;
|
||||
|
||||
class TargetUserStore {
|
||||
targetUser = null;
|
||||
|
||||
constructor() {
|
||||
makeObservable(this, {
|
||||
targetUser: observable,
|
||||
getTargetUser: action,
|
||||
});
|
||||
}
|
||||
|
||||
getTargetUser = async (userName) => {
|
||||
const user = await api.people.getUser(userName);
|
||||
this.targetUser = user;
|
||||
};
|
||||
}
|
||||
|
||||
export default TargetUserStore;
|
27
products/ASC.People/Client/src/store/UsersStore.js
Normal file
27
products/ASC.People/Client/src/store/UsersStore.js
Normal file
@ -0,0 +1,27 @@
|
||||
import { action, makeObservable, observable } from "mobx";
|
||||
import { getFilterByLocation } from "../helpers/converters";
|
||||
import { api } from "asc-web-common";
|
||||
|
||||
const { Filter } = api;
|
||||
|
||||
class UsersStore {
|
||||
users = null;
|
||||
|
||||
constructor() {
|
||||
makeObservable(this, {
|
||||
users: observable,
|
||||
getUsersList: action,
|
||||
});
|
||||
}
|
||||
|
||||
getUsersList = async (filter) => {
|
||||
let filterData = filter && filter.clone();
|
||||
if (!filterData) {
|
||||
filterData = Filter.getDefault();
|
||||
}
|
||||
const res = await api.people.getListAdmins(filterData);
|
||||
this.users = res.items;
|
||||
};
|
||||
}
|
||||
|
||||
export default UsersStore;
|
@ -1,5 +1,4 @@
|
||||
import { store } from "asc-web-common";
|
||||
const { moduleStore } = store.moduleStore;
|
||||
const { settingsStore } = store.settingsStore;
|
||||
import peopleStore from "./PeopleStore";
|
||||
|
||||
export { moduleStore, settingsStore};
|
||||
export { store, peopleStore };
|
||||
|
Loading…
Reference in New Issue
Block a user