Re-use app redux store to avoid conflicts (#2362)
This commit is contained in:
parent
9294dec68a
commit
10e149a15d
3 changed files with 44 additions and 23 deletions
|
|
@ -2,7 +2,6 @@
|
|||
// See LICENSE.txt for license information.
|
||||
|
||||
import React, {PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Alert, NativeModules} from 'react-native';
|
||||
import {intlShape} from 'react-intl';
|
||||
|
||||
|
|
@ -15,7 +14,6 @@ const ShareExtension = NativeModules.MattermostShare;
|
|||
export default class ShareApp extends PureComponent {
|
||||
static contextTypes = {
|
||||
intl: intlShape,
|
||||
store: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
|
|
|
|||
|
|
@ -8,9 +8,8 @@ import {IntlProvider} from 'react-intl';
|
|||
import {Client4} from 'mattermost-redux/client';
|
||||
|
||||
import {getTranslations} from 'app/i18n';
|
||||
import initialState from 'app/initial_state';
|
||||
import {getCurrentLocale} from 'app/selectors/i18n';
|
||||
import configureStore from 'app/store';
|
||||
import {store} from 'app/mattermost';
|
||||
|
||||
import {extensionSelectTeamId} from './actions';
|
||||
import Extension from './extension';
|
||||
|
|
@ -19,25 +18,41 @@ export default class ShareApp extends PureComponent {
|
|||
constructor() {
|
||||
super();
|
||||
|
||||
this.store = configureStore(initialState);
|
||||
this.unsubscribeFromStore = this.store.subscribe(this.listenForHydration);
|
||||
this.state = {init: false};
|
||||
const st = store.getState();
|
||||
if (st?.views?.root?.hydrationComplete) {
|
||||
this.state = {init: true};
|
||||
this.listenForHydration();
|
||||
} else {
|
||||
this.unsubscribeFromStore = store.subscribe(this.listenForHydration);
|
||||
this.state = {init: false};
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.mounted = true;
|
||||
}
|
||||
|
||||
listenForHydration = () => {
|
||||
const {dispatch, getState} = this.store;
|
||||
const {dispatch, getState} = store;
|
||||
const state = getState();
|
||||
if (state.views.root.hydrationComplete) {
|
||||
const {credentials} = state.entities.general;
|
||||
const {currentTeamId} = state.entities.teams;
|
||||
|
||||
this.unsubscribeFromStore();
|
||||
if (this.unsubscribeFromStore) {
|
||||
this.unsubscribeFromStore();
|
||||
}
|
||||
|
||||
if (credentials.token && credentials.url) {
|
||||
Client4.setToken(credentials.token);
|
||||
Client4.setUrl(credentials.url);
|
||||
}
|
||||
extensionSelectTeamId(currentTeamId)(dispatch, getState);
|
||||
this.setState({init: true});
|
||||
|
||||
dispatch(extensionSelectTeamId(currentTeamId));
|
||||
|
||||
if (this.mounted) {
|
||||
this.setState({init: true});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -46,10 +61,10 @@ export default class ShareApp extends PureComponent {
|
|||
return null;
|
||||
}
|
||||
|
||||
const locale = getCurrentLocale(this.store.getState());
|
||||
const locale = getCurrentLocale(store.getState());
|
||||
|
||||
return (
|
||||
<Provider store={this.store}>
|
||||
<Provider store={store}>
|
||||
<IntlProvider
|
||||
locale={locale}
|
||||
messages={getTranslations(locale)}
|
||||
|
|
|
|||
|
|
@ -52,14 +52,18 @@ export const getExtensionSortedPublicChannels = createSelector(
|
|||
}
|
||||
|
||||
const locale = currentUser.locale || 'en';
|
||||
const publicChannels = teamChannelIds.filter((id) => {
|
||||
return teamChannelIds.reduce((publicChannels, id) => {
|
||||
if (!myMembers[id]) {
|
||||
return false;
|
||||
return publicChannels;
|
||||
}
|
||||
|
||||
const channel = channels[id];
|
||||
return teamChannelIds.includes(id) && channel.type === General.OPEN_CHANNEL;
|
||||
}).map((id) => channels[id]).sort(sortChannelsByDisplayName.bind(null, locale));
|
||||
return publicChannels;
|
||||
if (channel.type === General.OPEN_CHANNEL) {
|
||||
publicChannels.push(channel);
|
||||
}
|
||||
|
||||
return publicChannels;
|
||||
}, []).sort(sortChannelsByDisplayName.bind(null, locale));
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -74,14 +78,18 @@ export const getExtensionSortedPrivateChannels = createSelector(
|
|||
}
|
||||
|
||||
const locale = currentUser.locale || 'en';
|
||||
const publicChannels = teamChannelIds.filter((id) => {
|
||||
return teamChannelIds.reduce((privateChannels, id) => {
|
||||
if (!myMembers[id]) {
|
||||
return false;
|
||||
return privateChannels;
|
||||
}
|
||||
|
||||
const channel = channels[id];
|
||||
return teamChannelIds.includes(id) && channel.type === General.PRIVATE_CHANNEL;
|
||||
}).map((id) => channels[id]).sort(sortChannelsByDisplayName.bind(null, locale));
|
||||
return publicChannels;
|
||||
if (channel.type === General.PRIVATE_CHANNEL) {
|
||||
privateChannels.push(channel);
|
||||
}
|
||||
|
||||
return privateChannels;
|
||||
}, []).sort(sortChannelsByDisplayName.bind(null, locale));
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue