Merge branch 'feature/mobx' of https://github.com/ONLYOFFICE/AppServer into feature/mobx

This commit is contained in:
Nikita Gopienko 2021-02-05 16:25:02 +03:00
commit c10c1f17cd
23 changed files with 422 additions and 193 deletions

View File

@ -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));

View File

@ -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))
);

View File

@ -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))
);

View File

@ -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)));

View File

@ -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, {

View File

@ -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))
);

View File

@ -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))))
);

View File

@ -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)))
)

View File

@ -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))))
);

View File

@ -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))
);

View File

@ -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)))
);

View File

@ -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))))
);

View File

@ -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))))
);

View File

@ -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))
);

View File

@ -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))))
);

View File

@ -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))
);

View File

@ -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));

View File

@ -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>

View 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;

View 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();

View 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;

View 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;

View File

@ -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 };