summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--webapp/actions/channel_actions.jsx2
-rw-r--r--webapp/actions/global_actions.jsx2
-rw-r--r--webapp/actions/team_actions.jsx2
-rw-r--r--webapp/actions/websocket_actions.jsx2
-rw-r--r--webapp/components/admin_console/admin_navbar_dropdown.jsx2
-rw-r--r--webapp/components/admin_console/admin_sidebar.jsx2
-rw-r--r--webapp/components/admin_console/admin_sidebar_category.jsx2
-rw-r--r--webapp/components/admin_console/admin_sidebar_section.jsx2
-rw-r--r--webapp/components/admin_console/user_item.jsx2
-rw-r--r--webapp/components/backstage/add_command.jsx2
-rw-r--r--webapp/components/backstage/add_incoming_webhook.jsx2
-rw-r--r--webapp/components/backstage/add_outgoing_webhook.jsx2
-rw-r--r--webapp/components/backstage/backstage_category.jsx2
-rw-r--r--webapp/components/backstage/backstage_navbar.jsx2
-rw-r--r--webapp/components/backstage/backstage_section.jsx2
-rw-r--r--webapp/components/backstage/installed_integrations.jsx2
-rw-r--r--webapp/components/backstage/integration_option.jsx2
-rw-r--r--webapp/components/channel_header.jsx2
-rw-r--r--webapp/components/claim/claim_controller.jsx2
-rw-r--r--webapp/components/claim/components/oauth_to_email.jsx2
-rw-r--r--webapp/components/create_post.jsx2
-rw-r--r--webapp/components/create_team/components/display_name.jsx2
-rw-r--r--webapp/components/create_team/create_team_controller.jsx2
-rw-r--r--webapp/components/delete_channel_modal.jsx2
-rw-r--r--webapp/components/do_verify_email.jsx2
-rw-r--r--webapp/components/error_page.jsx2
-rw-r--r--webapp/components/file_info_preview.jsx2
-rw-r--r--webapp/components/logged_in.jsx2
-rw-r--r--webapp/components/login/login_controller.jsx2
-rw-r--r--webapp/components/more_channels.jsx2
-rw-r--r--webapp/components/more_direct_channels.jsx2
-rw-r--r--webapp/components/navbar.jsx2
-rw-r--r--webapp/components/navbar_dropdown.jsx2
-rw-r--r--webapp/components/needs_team.jsx2
-rw-r--r--webapp/components/new_channel_flow.jsx2
-rw-r--r--webapp/components/password_reset_form.jsx2
-rw-r--r--webapp/components/password_reset_send_link.jsx2
-rw-r--r--webapp/components/permalink_view.jsx2
-rw-r--r--webapp/components/popover_list_members.jsx2
-rw-r--r--webapp/components/removed_from_channel_modal.jsx2
-rw-r--r--webapp/components/root.jsx2
-rw-r--r--webapp/components/search_results_item.jsx2
-rw-r--r--webapp/components/select_team/select_team.jsx2
-rw-r--r--webapp/components/should_verify_email.jsx2
-rw-r--r--webapp/components/sidebar.jsx2
-rw-r--r--webapp/components/sidebar_right_menu.jsx2
-rw-r--r--webapp/components/signup_team_complete/components/signup_team_complete.jsx2
-rw-r--r--webapp/components/signup_user_complete.jsx2
-rw-r--r--webapp/components/team_export_tab.jsx2
-rw-r--r--webapp/components/team_members_dropdown.jsx2
-rw-r--r--webapp/components/tutorial/tutorial_intro_screens.jsx2
-rw-r--r--webapp/components/user_settings/user_settings_security.jsx2
-rw-r--r--webapp/package.json2
-rw-r--r--webapp/root.jsx567
-rw-r--r--webapp/routes/route_admin_console.jsx207
-rw-r--r--webapp/routes/route_claim.jsx36
-rw-r--r--webapp/routes/route_create_team.jsx25
-rw-r--r--webapp/routes/route_integrations.jsx84
-rw-r--r--webapp/routes/route_root.jsx123
-rw-r--r--webapp/routes/route_team.jsx171
-rw-r--r--webapp/routes/route_utils.jsx20
-rw-r--r--webapp/stores/browser_store.jsx2
-rw-r--r--webapp/utils/text_formatting.jsx2
-rw-r--r--webapp/utils/utils.jsx2
-rw-r--r--webapp/webpack.config.js9
65 files changed, 740 insertions, 614 deletions
diff --git a/webapp/actions/channel_actions.jsx b/webapp/actions/channel_actions.jsx
index 68020651d..9e5ecb03b 100644
--- a/webapp/actions/channel_actions.jsx
+++ b/webapp/actions/channel_actions.jsx
@@ -1,7 +1,7 @@
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import * as Utils from 'utils/utils.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
diff --git a/webapp/actions/global_actions.jsx b/webapp/actions/global_actions.jsx
index c4551a683..d6456eb3a 100644
--- a/webapp/actions/global_actions.jsx
+++ b/webapp/actions/global_actions.jsx
@@ -20,7 +20,7 @@ import * as I18n from 'i18n/i18n.jsx';
import {trackPage} from 'actions/analytics_actions.jsx';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import en from 'i18n/en.json';
diff --git a/webapp/actions/team_actions.jsx b/webapp/actions/team_actions.jsx
index 2cff86b4a..249c9d540 100644
--- a/webapp/actions/team_actions.jsx
+++ b/webapp/actions/team_actions.jsx
@@ -10,7 +10,7 @@ import * as AsyncClient from 'utils/async_client.jsx';
import Client from 'utils/web_client.jsx';
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
export function checkIfTeamExists(teamName, onSuccess, onError) {
Client.findTeamByName(teamName, onSuccess, onError);
diff --git a/webapp/actions/websocket_actions.jsx b/webapp/actions/websocket_actions.jsx
index 7c8a014ba..11d7bbe18 100644
--- a/webapp/actions/websocket_actions.jsx
+++ b/webapp/actions/websocket_actions.jsx
@@ -18,7 +18,7 @@ import * as GlobalActions from 'actions/global_actions.jsx';
import Constants from 'utils/constants.jsx';
const SocketEvents = Constants.SocketEvents;
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
const MAX_WEBSOCKET_FAILS = 7;
const WEBSOCKET_RETRY_TIME = 3000;
diff --git a/webapp/components/admin_console/admin_navbar_dropdown.jsx b/webapp/components/admin_console/admin_navbar_dropdown.jsx
index 65a76a517..0bac263ef 100644
--- a/webapp/components/admin_console/admin_navbar_dropdown.jsx
+++ b/webapp/components/admin_console/admin_navbar_dropdown.jsx
@@ -10,7 +10,7 @@ import * as GlobalActions from 'actions/global_actions.jsx';
import {FormattedMessage} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx
index 565279e72..cb98c8ab1 100644
--- a/webapp/components/admin_console/admin_sidebar.jsx
+++ b/webapp/components/admin_console/admin_sidebar.jsx
@@ -11,7 +11,7 @@ import * as Utils from 'utils/utils.jsx';
import AdminSidebarHeader from './admin_sidebar_header.jsx';
import AdminSidebarTeam from './admin_sidebar_team.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import {OverlayTrigger, Tooltip} from 'react-bootstrap';
import SelectTeamModal from './select_team_modal.jsx';
import AdminSidebarCategory from './admin_sidebar_category.jsx';
diff --git a/webapp/components/admin_console/admin_sidebar_category.jsx b/webapp/components/admin_console/admin_sidebar_category.jsx
index 9f56d626b..1cf96f979 100644
--- a/webapp/components/admin_console/admin_sidebar_category.jsx
+++ b/webapp/components/admin_console/admin_sidebar_category.jsx
@@ -3,7 +3,7 @@
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class AdminSidebarCategory extends React.Component {
static get propTypes() {
diff --git a/webapp/components/admin_console/admin_sidebar_section.jsx b/webapp/components/admin_console/admin_sidebar_section.jsx
index 56e520629..a958150b5 100644
--- a/webapp/components/admin_console/admin_sidebar_section.jsx
+++ b/webapp/components/admin_console/admin_sidebar_section.jsx
@@ -3,7 +3,7 @@
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class AdminSidebarSection extends React.Component {
static get propTypes() {
diff --git a/webapp/components/admin_console/user_item.jsx b/webapp/components/admin_console/user_item.jsx
index a337f2304..62de50f0f 100644
--- a/webapp/components/admin_console/user_item.jsx
+++ b/webapp/components/admin_console/user_item.jsx
@@ -10,7 +10,7 @@ import TeamStore from 'stores/team_store.jsx';
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
import React from 'react';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
export default class UserItem extends React.Component {
constructor(props) {
diff --git a/webapp/components/backstage/add_command.jsx b/webapp/components/backstage/add_command.jsx
index c817764aa..91af0416b 100644
--- a/webapp/components/backstage/add_command.jsx
+++ b/webapp/components/backstage/add_command.jsx
@@ -9,7 +9,7 @@ import * as Utils from 'utils/utils.jsx';
import BackstageHeader from './backstage_header.jsx';
import {FormattedMessage} from 'react-intl';
import FormError from 'components/form_error.jsx';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import SpinnerButton from 'components/spinner_button.jsx';
import Constants from 'utils/constants.jsx';
diff --git a/webapp/components/backstage/add_incoming_webhook.jsx b/webapp/components/backstage/add_incoming_webhook.jsx
index f698f2b13..528f03377 100644
--- a/webapp/components/backstage/add_incoming_webhook.jsx
+++ b/webapp/components/backstage/add_incoming_webhook.jsx
@@ -10,7 +10,7 @@ import BackstageHeader from './backstage_header.jsx';
import ChannelSelect from 'components/channel_select.jsx';
import {FormattedMessage} from 'react-intl';
import FormError from 'components/form_error.jsx';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import SpinnerButton from 'components/spinner_button.jsx';
export default class AddIncomingWebhook extends React.Component {
diff --git a/webapp/components/backstage/add_outgoing_webhook.jsx b/webapp/components/backstage/add_outgoing_webhook.jsx
index d48be3ac4..5f9d96249 100644
--- a/webapp/components/backstage/add_outgoing_webhook.jsx
+++ b/webapp/components/backstage/add_outgoing_webhook.jsx
@@ -10,7 +10,7 @@ import BackstageHeader from './backstage_header.jsx';
import ChannelSelect from 'components/channel_select.jsx';
import {FormattedMessage} from 'react-intl';
import FormError from 'components/form_error.jsx';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import SpinnerButton from 'components/spinner_button.jsx';
export default class AddOutgoingWebhook extends React.Component {
diff --git a/webapp/components/backstage/backstage_category.jsx b/webapp/components/backstage/backstage_category.jsx
index 8e6c8541b..1d4b11ca3 100644
--- a/webapp/components/backstage/backstage_category.jsx
+++ b/webapp/components/backstage/backstage_category.jsx
@@ -3,7 +3,7 @@
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class BackstageCategory extends React.Component {
static get propTypes() {
diff --git a/webapp/components/backstage/backstage_navbar.jsx b/webapp/components/backstage/backstage_navbar.jsx
index 8352296b7..26ab44c87 100644
--- a/webapp/components/backstage/backstage_navbar.jsx
+++ b/webapp/components/backstage/backstage_navbar.jsx
@@ -8,7 +8,7 @@ import React from 'react';
import TeamStore from 'stores/team_store.jsx';
import {FormattedMessage} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class BackstageNavbar extends React.Component {
constructor(props) {
diff --git a/webapp/components/backstage/backstage_section.jsx b/webapp/components/backstage/backstage_section.jsx
index 120e956b0..c8b63af18 100644
--- a/webapp/components/backstage/backstage_section.jsx
+++ b/webapp/components/backstage/backstage_section.jsx
@@ -3,7 +3,7 @@
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class BackstageSection extends React.Component {
static get propTypes() {
diff --git a/webapp/components/backstage/installed_integrations.jsx b/webapp/components/backstage/installed_integrations.jsx
index cff0611d7..f6de8bc11 100644
--- a/webapp/components/backstage/installed_integrations.jsx
+++ b/webapp/components/backstage/installed_integrations.jsx
@@ -5,7 +5,7 @@ import React from 'react';
import * as Utils from 'utils/utils.jsx';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import LoadingScreen from 'components/loading_screen.jsx';
export default class InstalledIntegrations extends React.Component {
diff --git a/webapp/components/backstage/integration_option.jsx b/webapp/components/backstage/integration_option.jsx
index dd7cc0c4c..483e6a888 100644
--- a/webapp/components/backstage/integration_option.jsx
+++ b/webapp/components/backstage/integration_option.jsx
@@ -3,7 +3,7 @@
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class IntegrationOption extends React.Component {
static get propTypes() {
diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx
index 181d37ca2..70a4b1bfe 100644
--- a/webapp/components/channel_header.jsx
+++ b/webapp/components/channel_header.jsx
@@ -31,7 +31,7 @@ import Client from 'utils/web_client.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
const ActionTypes = Constants.ActionTypes;
diff --git a/webapp/components/claim/claim_controller.jsx b/webapp/components/claim/claim_controller.jsx
index dbb944bb9..581438ce9 100644
--- a/webapp/components/claim/claim_controller.jsx
+++ b/webapp/components/claim/claim_controller.jsx
@@ -3,7 +3,7 @@
import React from 'react';
import {FormattedMessage} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import logoImage from 'images/logo.png';
diff --git a/webapp/components/claim/components/oauth_to_email.jsx b/webapp/components/claim/components/oauth_to_email.jsx
index ba01a8adf..17ca12264 100644
--- a/webapp/components/claim/components/oauth_to_email.jsx
+++ b/webapp/components/claim/components/oauth_to_email.jsx
@@ -7,7 +7,7 @@ import Client from 'utils/web_client.jsx';
import React from 'react';
import ReactDOM from 'react-dom';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
export default class OAuthToEmail extends React.Component {
constructor(props) {
diff --git a/webapp/components/create_post.jsx b/webapp/components/create_post.jsx
index caf58c744..eedae8571 100644
--- a/webapp/components/create_post.jsx
+++ b/webapp/components/create_post.jsx
@@ -24,7 +24,7 @@ import PreferenceStore from 'stores/preference_store.jsx';
import Constants from 'utils/constants.jsx';
import {intlShape, injectIntl, defineMessages, FormattedHTMLMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
const Preferences = Constants.Preferences;
const TutorialSteps = Constants.TutorialSteps;
diff --git a/webapp/components/create_team/components/display_name.jsx b/webapp/components/create_team/components/display_name.jsx
index e6dcd221a..a4d47477a 100644
--- a/webapp/components/create_team/components/display_name.jsx
+++ b/webapp/components/create_team/components/display_name.jsx
@@ -10,7 +10,7 @@ import logoImage from 'images/logo.png';
import React from 'react';
import ReactDOM from 'react-dom';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import {FormattedMessage} from 'react-intl';
export default class TeamSignupDisplayNamePage extends React.Component {
diff --git a/webapp/components/create_team/create_team_controller.jsx b/webapp/components/create_team/create_team_controller.jsx
index ad2a008bd..47df82a57 100644
--- a/webapp/components/create_team/create_team_controller.jsx
+++ b/webapp/components/create_team/create_team_controller.jsx
@@ -4,7 +4,7 @@
import ErrorBar from 'components/error_bar.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/delete_channel_modal.jsx b/webapp/components/delete_channel_modal.jsx
index b2870cd50..925fa163c 100644
--- a/webapp/components/delete_channel_modal.jsx
+++ b/webapp/components/delete_channel_modal.jsx
@@ -9,7 +9,7 @@ import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/do_verify_email.jsx b/webapp/components/do_verify_email.jsx
index 193205266..c54d32b56 100644
--- a/webapp/components/do_verify_email.jsx
+++ b/webapp/components/do_verify_email.jsx
@@ -5,7 +5,7 @@ import {FormattedMessage} from 'react-intl';
import Client from 'utils/web_client.jsx';
import LoadingScreen from './loading_screen.jsx';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/error_page.jsx b/webapp/components/error_page.jsx
index 53f0fce82..f498c4e8e 100644
--- a/webapp/components/error_page.jsx
+++ b/webapp/components/error_page.jsx
@@ -4,7 +4,7 @@
import $ from 'jquery';
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import * as Utils from 'utils/utils.jsx';
diff --git a/webapp/components/file_info_preview.jsx b/webapp/components/file_info_preview.jsx
index fe4e76f91..b3d16b6a6 100644
--- a/webapp/components/file_info_preview.jsx
+++ b/webapp/components/file_info_preview.jsx
@@ -5,7 +5,7 @@ import * as Utils from 'utils/utils.jsx';
import {defineMessages} from 'react-intl';
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
const holders = defineMessages({
type: {
diff --git a/webapp/components/logged_in.jsx b/webapp/components/logged_in.jsx
index dce92dd64..6752b56cd 100644
--- a/webapp/components/logged_in.jsx
+++ b/webapp/components/logged_in.jsx
@@ -11,7 +11,7 @@ import * as Utils from 'utils/utils.jsx';
import * as Websockets from 'actions/websocket_actions.jsx';
import Constants from 'utils/constants.jsx';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
const CLIENT_STATUS_INTERVAL = 30000;
const BACKSPACE_CHAR = 8;
diff --git a/webapp/components/login/login_controller.jsx b/webapp/components/login/login_controller.jsx
index ab8b49392..653908654 100644
--- a/webapp/components/login/login_controller.jsx
+++ b/webapp/components/login/login_controller.jsx
@@ -16,7 +16,7 @@ import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import React from 'react';
import logoImage from 'images/logo.png';
diff --git a/webapp/components/more_channels.jsx b/webapp/components/more_channels.jsx
index b0847bd73..54a06d0ae 100644
--- a/webapp/components/more_channels.jsx
+++ b/webapp/components/more_channels.jsx
@@ -12,7 +12,7 @@ import * as AsyncClient from 'utils/async_client.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import React from 'react';
import ReactDOM from 'react-dom';
diff --git a/webapp/components/more_direct_channels.jsx b/webapp/components/more_direct_channels.jsx
index de61bcf98..aaa49571e 100644
--- a/webapp/components/more_direct_channels.jsx
+++ b/webapp/components/more_direct_channels.jsx
@@ -9,7 +9,7 @@ import * as Utils from 'utils/utils.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import SpinnerButton from 'components/spinner_button.jsx';
import LoadingScreen from 'components/loading_screen.jsx';
diff --git a/webapp/components/navbar.jsx b/webapp/components/navbar.jsx
index 32682bc78..1942022bb 100644
--- a/webapp/components/navbar.jsx
+++ b/webapp/components/navbar.jsx
@@ -33,7 +33,7 @@ import {FormattedMessage} from 'react-intl';
import {Popover, OverlayTrigger} from 'react-bootstrap';
-import {Link, browserHistory} from 'react-router';
+import {Link, browserHistory} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/navbar_dropdown.jsx b/webapp/components/navbar_dropdown.jsx
index 6065f3474..9d6d7fb22 100644
--- a/webapp/components/navbar_dropdown.jsx
+++ b/webapp/components/navbar_dropdown.jsx
@@ -16,7 +16,7 @@ import UserSettingsModal from './user_settings/user_settings_modal.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/needs_team.jsx b/webapp/components/needs_team.jsx
index 955758237..5aabcb55c 100644
--- a/webapp/components/needs_team.jsx
+++ b/webapp/components/needs_team.jsx
@@ -5,7 +5,7 @@ import React from 'react';
import $ from 'jquery';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import * as Utils from 'utils/utils.jsx';
import * as AsyncClient from 'utils/async_client.jsx';
import TeamStore from 'stores/team_store.jsx';
diff --git a/webapp/components/new_channel_flow.jsx b/webapp/components/new_channel_flow.jsx
index 7019da4aa..db06cf0be 100644
--- a/webapp/components/new_channel_flow.jsx
+++ b/webapp/components/new_channel_flow.jsx
@@ -9,7 +9,7 @@ import NewChannelModal from './new_channel_modal.jsx';
import ChangeURLModal from './change_url_modal.jsx';
import {intlShape, injectIntl, defineMessages} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
import Constants from 'utils/constants.jsx';
diff --git a/webapp/components/password_reset_form.jsx b/webapp/components/password_reset_form.jsx
index eeea265d8..05bf29eae 100644
--- a/webapp/components/password_reset_form.jsx
+++ b/webapp/components/password_reset_form.jsx
@@ -7,7 +7,7 @@ import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/password_reset_send_link.jsx b/webapp/components/password_reset_send_link.jsx
index 65d9439bd..48179e162 100644
--- a/webapp/components/password_reset_send_link.jsx
+++ b/webapp/components/password_reset_send_link.jsx
@@ -9,7 +9,7 @@ import client from 'utils/web_client.jsx';
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
class PasswordResetSendLink extends React.Component {
constructor(props) {
diff --git a/webapp/components/permalink_view.jsx b/webapp/components/permalink_view.jsx
index 8f443bc05..55e250d04 100644
--- a/webapp/components/permalink_view.jsx
+++ b/webapp/components/permalink_view.jsx
@@ -10,7 +10,7 @@ import PostFocusViewController from 'components/post_view/post_focus_view_contro
import ChannelStore from 'stores/channel_store.jsx';
import TeamStore from 'stores/team_store.jsx';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import {FormattedMessage} from 'react-intl';
export default class PermalinkView extends React.Component {
diff --git a/webapp/components/popover_list_members.jsx b/webapp/components/popover_list_members.jsx
index d85b1114b..28e45d5d6 100644
--- a/webapp/components/popover_list_members.jsx
+++ b/webapp/components/popover_list_members.jsx
@@ -10,7 +10,7 @@ import Constants from 'utils/constants.jsx';
import Client from 'utils/web_client.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/removed_from_channel_modal.jsx b/webapp/components/removed_from_channel_modal.jsx
index 2199dbbec..3164e4e3f 100644
--- a/webapp/components/removed_from_channel_modal.jsx
+++ b/webapp/components/removed_from_channel_modal.jsx
@@ -9,7 +9,7 @@ import BrowserStore from 'stores/browser_store.jsx';
import * as Utils from 'utils/utils.jsx';
import {FormattedMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import React from 'react';
diff --git a/webapp/components/root.jsx b/webapp/components/root.jsx
index abaa05bb5..977652e99 100644
--- a/webapp/components/root.jsx
+++ b/webapp/components/root.jsx
@@ -14,7 +14,7 @@ import React from 'react';
import FastClick from 'fastclick';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import UserStore from 'stores/user_store.jsx';
export default class Root extends React.Component {
diff --git a/webapp/components/search_results_item.jsx b/webapp/components/search_results_item.jsx
index 3fff4ea33..2f453bc84 100644
--- a/webapp/components/search_results_item.jsx
+++ b/webapp/components/search_results_item.jsx
@@ -16,7 +16,7 @@ const ActionTypes = Constants.ActionTypes;
import {FormattedMessage, FormattedDate} from 'react-intl';
import React from 'react';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
export default class SearchResultsItem extends React.Component {
constructor(props) {
diff --git a/webapp/components/select_team/select_team.jsx b/webapp/components/select_team/select_team.jsx
index a04961d5b..3b1cf829a 100644
--- a/webapp/components/select_team/select_team.jsx
+++ b/webapp/components/select_team/select_team.jsx
@@ -9,7 +9,7 @@ import LoadingScreen from 'components/loading_screen.jsx';
import * as AsyncClient from 'utils/async_client.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import {FormattedMessage} from 'react-intl';
diff --git a/webapp/components/should_verify_email.jsx b/webapp/components/should_verify_email.jsx
index a95101ba1..18a936b13 100644
--- a/webapp/components/should_verify_email.jsx
+++ b/webapp/components/should_verify_email.jsx
@@ -5,7 +5,7 @@ import {FormattedMessage} from 'react-intl';
import Client from 'utils/web_client.jsx';
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class ShouldVerifyEmail extends React.Component {
constructor(props) {
diff --git a/webapp/components/sidebar.jsx b/webapp/components/sidebar.jsx
index f6c2a1a5a..4f678274d 100644
--- a/webapp/components/sidebar.jsx
+++ b/webapp/components/sidebar.jsx
@@ -30,7 +30,7 @@ import {Tooltip, OverlayTrigger} from 'react-bootstrap';
import loadingGif from 'images/load.gif';
import React from 'react';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import favicon from 'images/favicon/favicon-16x16.png';
import redFavicon from 'images/favicon/redfavicon-16x16.png';
diff --git a/webapp/components/sidebar_right_menu.jsx b/webapp/components/sidebar_right_menu.jsx
index e3a7bee7c..622b80337 100644
--- a/webapp/components/sidebar_right_menu.jsx
+++ b/webapp/components/sidebar_right_menu.jsx
@@ -20,7 +20,7 @@ const Preferences = Constants.Preferences;
const TutorialSteps = Constants.TutorialSteps;
import {FormattedMessage} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
import {createMenuTip} from 'components/tutorial/tutorial_tip.jsx';
import React from 'react';
diff --git a/webapp/components/signup_team_complete/components/signup_team_complete.jsx b/webapp/components/signup_team_complete/components/signup_team_complete.jsx
index 00fdafe5f..78c591375 100644
--- a/webapp/components/signup_team_complete/components/signup_team_complete.jsx
+++ b/webapp/components/signup_team_complete/components/signup_team_complete.jsx
@@ -6,7 +6,7 @@ import BrowserStore from 'stores/browser_store.jsx';
import {FormattedMessage} from 'react-intl';
import React from 'react';
-import {Link, browserHistory} from 'react-router';
+import {Link, browserHistory} from 'react-router/es6';
export default class SignupTeamComplete extends React.Component {
constructor(props) {
diff --git a/webapp/components/signup_user_complete.jsx b/webapp/components/signup_user_complete.jsx
index 74eaebfa9..c7ddfc91b 100644
--- a/webapp/components/signup_user_complete.jsx
+++ b/webapp/components/signup_user_complete.jsx
@@ -17,7 +17,7 @@ import Constants from 'utils/constants.jsx';
import React from 'react';
import ReactDOM from 'react-dom';
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
-import {browserHistory, Link} from 'react-router';
+import {browserHistory, Link} from 'react-router/es6';
import logoImage from 'images/logo.png';
diff --git a/webapp/components/team_export_tab.jsx b/webapp/components/team_export_tab.jsx
index 37f886aab..15c131489 100644
--- a/webapp/components/team_export_tab.jsx
+++ b/webapp/components/team_export_tab.jsx
@@ -6,7 +6,7 @@ import Client from 'utils/web_client.jsx';
import {FormattedMessage} from 'react-intl';
import React from 'react';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
export default class TeamExportTab extends React.Component {
constructor(props) {
diff --git a/webapp/components/team_members_dropdown.jsx b/webapp/components/team_members_dropdown.jsx
index b65b9e050..2b40da9cf 100644
--- a/webapp/components/team_members_dropdown.jsx
+++ b/webapp/components/team_members_dropdown.jsx
@@ -12,7 +12,7 @@ import TeamStore from 'stores/team_store.jsx';
import {FormattedMessage} from 'react-intl';
import React from 'react';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
export default class TeamMembersDropdown extends React.Component {
constructor(props) {
diff --git a/webapp/components/tutorial/tutorial_intro_screens.jsx b/webapp/components/tutorial/tutorial_intro_screens.jsx
index af1ac4760..3928b7f20 100644
--- a/webapp/components/tutorial/tutorial_intro_screens.jsx
+++ b/webapp/components/tutorial/tutorial_intro_screens.jsx
@@ -10,7 +10,7 @@ import * as GlobalActions from 'actions/global_actions.jsx';
import Constants from 'utils/constants.jsx';
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
const Preferences = Constants.Preferences;
diff --git a/webapp/components/user_settings/user_settings_security.jsx b/webapp/components/user_settings/user_settings_security.jsx
index 4cf28715b..af7aeb3c6 100644
--- a/webapp/components/user_settings/user_settings_security.jsx
+++ b/webapp/components/user_settings/user_settings_security.jsx
@@ -17,7 +17,7 @@ import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.jsx';
import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage, FormattedTime, FormattedDate} from 'react-intl';
-import {Link} from 'react-router';
+import {Link} from 'react-router/es6';
const holders = defineMessages({
currentPasswordError: {
diff --git a/webapp/package.json b/webapp/package.json
index 263df21ca..11264ec2d 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -64,7 +64,7 @@
"sass-loader": "3.2.0",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
- "webpack": "2.1.0-beta.7",
+ "webpack": "2.1.0-beta.13",
"webpack-node-externals": "1.2.0"
},
"scripts": {
diff --git a/webapp/root.jsx b/webapp/root.jsx
index b6302a76f..d5b9a6d47 100644
--- a/webapp/root.jsx
+++ b/webapp/root.jsx
@@ -4,106 +4,21 @@
import $ from 'jquery';
require('perfect-scrollbar/jquery')($);
-import 'bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css';
-import 'google-fonts/google-fonts.css';
-import 'sass/styles.scss';
-
import React from 'react';
import ReactDOM from 'react-dom';
-import {IndexRedirect, Router, Route, IndexRoute, Redirect, browserHistory} from 'react-router';
-import Root from 'components/root.jsx';
-import LoggedIn from 'components/logged_in.jsx';
-import HeaderFooterTemplate from 'components/header_footer_template.jsx';
-import NeedsTeam from 'components/needs_team.jsx';
-import PasswordResetSendLink from 'components/password_reset_send_link.jsx';
-import PasswordResetForm from 'components/password_reset_form.jsx';
-import ChannelView from 'components/channel_view.jsx';
-import PermalinkView from 'components/permalink_view.jsx';
-import Sidebar from 'components/sidebar.jsx';
-import * as AsyncClient from 'utils/async_client.jsx';
-import ChannelStore from 'stores/channel_store.jsx';
-import ErrorStore from 'stores/error_store.jsx';
-import TeamStore from 'stores/team_store.jsx';
-import BrowserStore from 'stores/browser_store.jsx';
-import * as Utils from 'utils/utils.jsx';
-
-import Client from 'utils/web_client.jsx';
-
-import * as Websockets from 'actions/websocket_actions.jsx';
+import {Router, browserHistory} from 'react-router/es6';
import * as GlobalActions from 'actions/global_actions.jsx';
-import SignupUserComplete from 'components/signup_user_complete.jsx';
-import ShouldVerifyEmail from 'components/should_verify_email.jsx';
-import DoVerifyEmail from 'components/do_verify_email.jsx';
-import TutorialView from 'components/tutorial/tutorial_view.jsx';
-import BackstageNavbar from 'components/backstage/backstage_navbar.jsx';
-import BackstageSidebar from 'components/backstage/backstage_sidebar.jsx';
-import Integrations from 'components/backstage/integrations.jsx';
-import InstalledIncomingWebhooks from 'components/backstage/installed_incoming_webhooks.jsx';
-import InstalledOutgoingWebhooks from 'components/backstage/installed_outgoing_webhooks.jsx';
-import InstalledCommands from 'components/backstage/installed_commands.jsx';
-import AddIncomingWebhook from 'components/backstage/add_incoming_webhook.jsx';
-import AddOutgoingWebhook from 'components/backstage/add_outgoing_webhook.jsx';
-import AddCommand from 'components/backstage/add_command.jsx';
-import ErrorPage from 'components/error_page.jsx';
-
-import AppDispatcher from './dispatcher/app_dispatcher.jsx';
-import Constants from './utils/constants.jsx';
-const ActionTypes = Constants.ActionTypes;
-
-import AdminConsole from 'components/admin_console/admin_console.jsx';
-import SystemAnalytics from 'components/analytics/system_analytics.jsx';
-import ConfigurationSettings from 'components/admin_console/configuration_settings.jsx';
-import LocalizationSettings from 'components/admin_console/localization_settings.jsx';
-import UsersAndTeamsSettings from 'components/admin_console/users_and_teams_settings.jsx';
-import PrivacySettings from 'components/admin_console/privacy_settings.jsx';
-import LogSettings from 'components/admin_console/log_settings.jsx';
-import EmailAuthenticationSettings from 'components/admin_console/email_authentication_settings.jsx';
-import GitLabSettings from 'components/admin_console/gitlab_settings.jsx';
-import LdapSettings from 'components/admin_console/ldap_settings.jsx';
-import SignupSettings from 'components/admin_console/signup_settings.jsx';
-import LoginSettings from 'components/admin_console/login_settings.jsx';
-import PublicLinkSettings from 'components/admin_console/public_link_settings.jsx';
-import SessionSettings from 'components/admin_console/session_settings.jsx';
-import ConnectionSettings from 'components/admin_console/connection_settings.jsx';
-import EmailSettings from 'components/admin_console/email_settings.jsx';
-import PushSettings from 'components/admin_console/push_settings.jsx';
-import WebhookSettings from 'components/admin_console/webhook_settings.jsx';
-import ExternalServiceSettings from 'components/admin_console/external_service_settings.jsx';
-import DatabaseSettings from 'components/admin_console/database_settings.jsx';
-import StorageSettings from 'components/admin_console/storage_settings.jsx';
-import ImageSettings from 'components/admin_console/image_settings.jsx';
-import CustomBrandSettings from 'components/admin_console/custom_brand_settings.jsx';
-import CustomEmojiSettings from 'components/admin_console/custom_emoji_settings.jsx';
-import LegalAndSupportSettings from 'components/admin_console/legal_and_support_settings.jsx';
-import ComplianceSettings from 'components/admin_console/compliance_settings.jsx';
-import RateSettings from 'components/admin_console/rate_settings.jsx';
-import DeveloperSettings from 'components/admin_console/developer_settings.jsx';
-import TeamUsers from 'components/admin_console/team_users.jsx';
-import TeamAnalytics from 'components/analytics/team_analytics.jsx';
-import LicenseSettings from 'components/admin_console/license_settings.jsx';
-import Audits from 'components/admin_console/audits.jsx';
-import Logs from 'components/admin_console/logs.jsx';
-
-import ClaimController from 'components/claim/claim_controller.jsx';
-import EmailToOAuth from 'components/claim/components/email_to_oauth.jsx';
-import OAuthToEmail from 'components/claim/components/oauth_to_email.jsx';
-import LDAPToEmail from 'components/claim/components/ldap_to_email.jsx';
-import EmailToLDAP from 'components/claim/components/email_to_ldap.jsx';
-
-import LoginController from 'components/login/login_controller.jsx';
-import SelectTeam from 'components/select_team/select_team.jsx';
-import CreateTeamController from 'components/create_team/create_team_controller.jsx';
-import CreateTeamDisplayName from 'components/create_team/components/display_name.jsx';
-import CreateTeamTeamUrl from 'components/create_team/components/team_url.jsx';
-
+import * as Websockets from 'actions/websocket_actions.jsx';
+import BrowserStore from 'stores/browser_store.jsx';
import * as I18n from 'i18n/i18n.jsx';
-const notFoundParams = {
- title: Utils.localizeMessage('error.not_found.title', 'Page not found'),
- message: Utils.localizeMessage('error.not_found.message', 'The page you were trying to reach does not exist'),
- link: '/',
- linkmessage: Utils.localizeMessage('error.not_found.link_message', 'Back to Mattermost')
-};
+// Import our styles
+import 'bootstrap-colorpicker/dist/css/bootstrap-colorpicker.css';
+import 'google-fonts/google-fonts.css';
+import 'sass/styles.scss';
+
+// Import the root of our routing tree
+import rRoot from 'routes/route_root.jsx';
// This is for anything that needs to be done for ALL react components.
// This runs before we start to render anything.
@@ -157,470 +72,12 @@ function preRenderSetup(callwhendone) {
}
}
-function preLoggedIn(nextState, replace, callback) {
- ErrorStore.clearLastError();
- callback();
-}
-
-function preNeedsTeam(nextState, replace, callback) {
- // First check to make sure you're in the current team
- // for the current url.
- var teamName = Utils.getTeamNameFromUrl();
- var team = TeamStore.getByName(teamName);
- const oldTeamId = TeamStore.getCurrentId();
-
- if (!team) {
- browserHistory.push('/');
- return;
- }
-
- GlobalActions.emitCloseRightHandSide();
-
- TeamStore.saveMyTeam(team);
- TeamStore.emitChange();
-
- // If the old team id is null then we will already have the direct
- // profiles from initial load
- if (oldTeamId != null) {
- AsyncClient.getDirectProfiles();
- }
-
- var d1 = $.Deferred(); //eslint-disable-line new-cap
- var d2 = $.Deferred(); //eslint-disable-line new-cap
-
- Client.getChannels(
- (data) => {
- AppDispatcher.handleServerAction({
- type: ActionTypes.RECEIVED_CHANNELS,
- channels: data.channels,
- members: data.members
- });
-
- d1.resolve();
- },
- (err) => {
- AsyncClient.dispatchError(err, 'getChannels');
- d1.resolve();
- }
- );
-
- Client.getProfiles(
- (data) => {
- AppDispatcher.handleServerAction({
- type: ActionTypes.RECEIVED_PROFILES,
- profiles: data
- });
-
- d2.resolve();
- },
- (err) => {
- AsyncClient.dispatchError(err, 'getProfiles');
- d2.resolve();
- }
- );
-
- $.when(d1, d2).done(() => {
- callback();
- });
-}
-
-function onPermalinkEnter(nextState) {
- const postId = nextState.params.postid;
- GlobalActions.emitPostFocusEvent(postId);
-}
-
-function onChannelEnter(nextState, replace, callback) {
- doChannelChange(nextState, replace, callback);
-}
-
-function doChannelChange(state, replace, callback) {
- let channel;
- if (state.location.query.fakechannel) {
- channel = JSON.parse(state.location.query.fakechannel);
- } else {
- channel = ChannelStore.getByName(state.params.channel);
- if (!channel) {
- channel = ChannelStore.getMoreByName(state.params.channel);
- }
- if (!channel) {
- Client.joinChannelByName(
- state.params.channel,
- (data) => {
- GlobalActions.emitChannelClickEvent(data);
- callback();
- },
- () => {
- if (state.params.team) {
- replace('/' + state.params.team + '/channels/town-square');
- } else {
- replace('/');
- }
- callback();
- }
- );
- return;
- }
- }
- GlobalActions.emitChannelClickEvent(channel);
- callback();
-}
-
function renderRootComponent() {
ReactDOM.render((
<Router
history={browserHistory}
- >
- <Route
- path='/'
- component={Root}
- >
- <Route
- path='error'
- component={ErrorPage}
- />
- <Route component={HeaderFooterTemplate}>
- <Route
- path='login'
- component={LoginController}
- />
- <Route
- path='reset_password'
- component={PasswordResetSendLink}
- />
- <Route
- path='reset_password_complete'
- component={PasswordResetForm}
- />
- <Route
- path='claim'
- component={ClaimController}
- >
- <Route
- path='oauth_to_email'
- component={OAuthToEmail}
- />
- <Route
- path='email_to_oauth'
- component={EmailToOAuth}
- />
- <Route
- path='email_to_ldap'
- component={EmailToLDAP}
- />
- <Route
- path='ldap_to_email'
- component={LDAPToEmail}
- />
- </Route>
- <Route
- path='signup_user_complete'
- component={SignupUserComplete}
- />
- <Route
- path='should_verify_email'
- component={ShouldVerifyEmail}
- />
- <Route
- path='do_verify_email'
- component={DoVerifyEmail}
- />
- </Route>
- <Route
- component={LoggedIn}
- onEnter={preLoggedIn}
- >
- <Route component={HeaderFooterTemplate}>
- <Route
- path='select_team'
- component={SelectTeam}
- />
- <Route
- path='create_team'
- component={CreateTeamController}
- >
- <IndexRoute component={CreateTeamDisplayName}/>
- <Route
- path='display_name'
- component={CreateTeamDisplayName}
- />
- <Route
- path='team_url'
- component={CreateTeamTeamUrl}
- />
- </Route>
- </Route>
- <Route
- path='admin_console'
- component={AdminConsole}
- >
- <IndexRedirect to='system_analytics'/>
- <Route
- path='system_analytics'
- component={SystemAnalytics}
- />
- <Route path='general'>
- <IndexRedirect to='configuration'/>
- <Route
- path='configuration'
- component={ConfigurationSettings}
- />
- <Route
- path='localization'
- component={LocalizationSettings}
- />
- <Route
- path='users_and_teams'
- component={UsersAndTeamsSettings}
- />
- <Route
- path='privacy'
- component={PrivacySettings}
- />
- <Route
- path='compliance'
- component={ComplianceSettings}
- />
- <Route
- path='logging'
- component={LogSettings}
- />
- </Route>
- <Route path='authentication'>
- <IndexRedirect to='email'/>
- <Route
- path='email'
- component={EmailAuthenticationSettings}
- />
- <Route
- path='gitlab'
- component={GitLabSettings}
- />
- <Route
- path='ldap'
- component={LdapSettings}
- />
- </Route>
- <Route path='security'>
- <IndexRedirect to='sign_up'/>
- <Route
- path='sign_up'
- component={SignupSettings}
- />
- <Route
- path='login'
- component={LoginSettings}
- />
- <Route
- path='public_links'
- component={PublicLinkSettings}
- />
- <Route
- path='sessions'
- component={SessionSettings}
- />
- <Route
- path='connections'
- component={ConnectionSettings}
- />
- </Route>
- <Route path='notifications'>
- <IndexRedirect to='email'/>
- <Route
- path='email'
- component={EmailSettings}
- />
- <Route
- path='push'
- component={PushSettings}
- />
- </Route>
- <Route path='integrations'>
- <IndexRedirect to='webhooks'/>
- <Route
- path='webhooks'
- component={WebhookSettings}
- />
- <Route
- path='external'
- component={ExternalServiceSettings}
- />
- </Route>
- <Route path='files'>
- <IndexRedirect to='storage'/>
- <Route
- path='storage'
- component={StorageSettings}
- />
- <Route
- path='images'
- component={ImageSettings}
- />
- </Route>
- <Route path='customization'>
- <IndexRedirect to='custom_brand'/>
- <Route
- path='custom_brand'
- component={CustomBrandSettings}
- />
- <Route
- path='custom_emoji'
- component={CustomEmojiSettings}
- />
- <Route
- path='legal_and_support'
- component={LegalAndSupportSettings}
- />
- </Route>
- <Route path='advanced'>
- <IndexRedirect to='rate'/>
- <Route
- path='rate'
- component={RateSettings}
- />
- <Route
- path='database'
- component={DatabaseSettings}
- />
- <Route
- path='developer'
- component={DeveloperSettings}
- />
- </Route>
- <Route path='team'>
- <Redirect
- from=':team'
- to=':team/users'
- />
- <Route
- path=':team/users'
- component={TeamUsers}
- />
- <Route
- path=':team/analytics'
- component={TeamAnalytics}
- />
- <Redirect
- from='*'
- to='/error'
- query={notFoundParams}
- />
- </Route>
- <Route
- path='license'
- component={LicenseSettings}
- />
- <Route
- path='audits'
- component={Audits}
- />
- <Route
- path='logs'
- component={Logs}
- />
- </Route>
- <Route
- path=':team'
- component={NeedsTeam}
- onEnter={preNeedsTeam}
- >
- <IndexRedirect to='channels/town-square'/>
- <Route
- path='channels/:channel'
- onEnter={onChannelEnter}
- components={{
- sidebar: Sidebar,
- center: ChannelView
- }}
- />
- <Route
- path='pl/:postid'
- onEnter={onPermalinkEnter}
- components={{
- sidebar: Sidebar,
- center: PermalinkView
- }}
- />
- <Route
- path='tutorial'
- components={{
- sidebar: Sidebar,
- center: TutorialView
- }}
- />
- <Route path='settings/integrations'>
- <IndexRoute
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: Integrations
- }}
- />
- <Route path='incoming_webhooks'>
- <IndexRoute
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: InstalledIncomingWebhooks
- }}
- />
- <Route
- path='add'
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: AddIncomingWebhook
- }}
- />
- </Route>
- <Route path='outgoing_webhooks'>
- <IndexRoute
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: InstalledOutgoingWebhooks
- }}
- />
- <Route
- path='add'
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: AddOutgoingWebhook
- }}
- />
- </Route>
- <Route path='commands'>
- <IndexRoute
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: InstalledCommands
- }}
- />
- <Route
- path='add'
- components={{
- navbar: BackstageNavbar,
- sidebar: BackstageSidebar,
- center: AddCommand
- }}
- />
- </Route>
- <Redirect
- from='*'
- to='/error'
- query={notFoundParams}
- />
- </Route>
- </Route>
- </Route>
- <Redirect
- from='*'
- to='/error'
- query={notFoundParams}
- />
- </Route>
- </Router>
+ routes={rRoot}
+ />
),
document.getElementById('root'));
}
diff --git a/webapp/routes/route_admin_console.jsx b/webapp/routes/route_admin_console.jsx
new file mode 100644
index 000000000..cd1144ae6
--- /dev/null
+++ b/webapp/routes/route_admin_console.jsx
@@ -0,0 +1,207 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import * as RouteUtils from 'routes/route_utils.jsx';
+import {Route, Redirect, IndexRedirect} from 'react-router/es6';
+import React from 'react';
+
+import SystemAnalytics from 'components/analytics/system_analytics.jsx';
+import ConfigurationSettings from 'components/admin_console/configuration_settings.jsx';
+import LocalizationSettings from 'components/admin_console/localization_settings.jsx';
+import UsersAndTeamsSettings from 'components/admin_console/users_and_teams_settings.jsx';
+import PrivacySettings from 'components/admin_console/privacy_settings.jsx';
+import LogSettings from 'components/admin_console/log_settings.jsx';
+import EmailAuthenticationSettings from 'components/admin_console/email_authentication_settings.jsx';
+import GitLabSettings from 'components/admin_console/gitlab_settings.jsx';
+import LdapSettings from 'components/admin_console/ldap_settings.jsx';
+import SignupSettings from 'components/admin_console/signup_settings.jsx';
+import LoginSettings from 'components/admin_console/login_settings.jsx';
+import PublicLinkSettings from 'components/admin_console/public_link_settings.jsx';
+import SessionSettings from 'components/admin_console/session_settings.jsx';
+import ConnectionSettings from 'components/admin_console/connection_settings.jsx';
+import EmailSettings from 'components/admin_console/email_settings.jsx';
+import PushSettings from 'components/admin_console/push_settings.jsx';
+import WebhookSettings from 'components/admin_console/webhook_settings.jsx';
+import ExternalServiceSettings from 'components/admin_console/external_service_settings.jsx';
+import DatabaseSettings from 'components/admin_console/database_settings.jsx';
+import StorageSettings from 'components/admin_console/storage_settings.jsx';
+import ImageSettings from 'components/admin_console/image_settings.jsx';
+import CustomBrandSettings from 'components/admin_console/custom_brand_settings.jsx';
+import CustomEmojiSettings from 'components/admin_console/custom_emoji_settings.jsx';
+import LegalAndSupportSettings from 'components/admin_console/legal_and_support_settings.jsx';
+import ComplianceSettings from 'components/admin_console/compliance_settings.jsx';
+import RateSettings from 'components/admin_console/rate_settings.jsx';
+import DeveloperSettings from 'components/admin_console/developer_settings.jsx';
+import TeamUsers from 'components/admin_console/team_users.jsx';
+import TeamAnalytics from 'components/analytics/team_analytics.jsx';
+import LicenseSettings from 'components/admin_console/license_settings.jsx';
+import Audits from 'components/admin_console/audits.jsx';
+import Logs from 'components/admin_console/logs.jsx';
+
+export default (
+ <Route>
+ <Route
+ path='system_analytics'
+ component={SystemAnalytics}
+ />
+ <Route path='general'>
+ <IndexRedirect to='configuration'/>
+ <Route
+ path='configuration'
+ component={ConfigurationSettings}
+ />
+ <Route
+ path='localization'
+ component={LocalizationSettings}
+ />
+ <Route
+ path='users_and_teams'
+ component={UsersAndTeamsSettings}
+ />
+ <Route
+ path='privacy'
+ component={PrivacySettings}
+ />
+ <Route
+ path='compliance'
+ component={ComplianceSettings}
+ />
+ <Route
+ path='logging'
+ component={LogSettings}
+ />
+ </Route>
+ <Route path='authentication'>
+ <IndexRedirect to='email'/>
+ <Route
+ path='email'
+ component={EmailAuthenticationSettings}
+ />
+ <Route
+ path='gitlab'
+ component={GitLabSettings}
+ />
+ <Route
+ path='ldap'
+ component={LdapSettings}
+ />
+ </Route>
+ <Route path='security'>
+ <IndexRedirect to='sign_up'/>
+ <Route
+ path='sign_up'
+ component={SignupSettings}
+ />
+ <Route
+ path='login'
+ component={LoginSettings}
+ />
+ <Route
+ path='public_links'
+ component={PublicLinkSettings}
+ />
+ <Route
+ path='sessions'
+ component={SessionSettings}
+ />
+ <Route
+ path='connections'
+ component={ConnectionSettings}
+ />
+ </Route>
+ <Route path='notifications'>
+ <IndexRedirect to='email'/>
+ <Route
+ path='email'
+ component={EmailSettings}
+ />
+ <Route
+ path='push'
+ component={PushSettings}
+ />
+ </Route>
+ <Route path='integrations'>
+ <IndexRedirect to='webhooks'/>
+ <Route
+ path='webhooks'
+ component={WebhookSettings}
+ />
+ <Route
+ path='external'
+ component={ExternalServiceSettings}
+ />
+ </Route>
+ <Route path='files'>
+ <IndexRedirect to='storage'/>
+ <Route
+ path='storage'
+ component={StorageSettings}
+ />
+ <Route
+ path='images'
+ component={ImageSettings}
+ />
+ </Route>
+ <Route path='customization'>
+ <IndexRedirect to='custom_brand'/>
+ <Route
+ path='custom_brand'
+ component={CustomBrandSettings}
+ />
+ <Route
+ path='custom_emoji'
+ component={CustomEmojiSettings}
+ />
+ <Route
+ path='legal_and_support'
+ component={LegalAndSupportSettings}
+ />
+ </Route>
+ <Route path='advanced'>
+ <IndexRedirect to='rate'/>
+ <Route
+ path='rate'
+ component={RateSettings}
+ />
+ <Route
+ path='database'
+ component={DatabaseSettings}
+ />
+ <Route
+ path='developer'
+ component={DeveloperSettings}
+ />
+ </Route>
+ <Route path='team'>
+ <Redirect
+ from=':team'
+ to=':team/users'
+ />
+ <Route
+ path=':team/users'
+ component={TeamUsers}
+ />
+ <Route
+ path=':team/analytics'
+ component={TeamAnalytics}
+ />
+ <Redirect
+ from='*'
+ to='/error'
+ query={RouteUtils.notFoundParams}
+ />
+ </Route>
+ <Route
+ path='license'
+ component={LicenseSettings}
+ />
+ <Route
+ path='audits'
+ component={Audits}
+ />
+ <Route
+ path='logs'
+ component={Logs}
+ />
+ </Route>
+);
diff --git a/webapp/routes/route_claim.jsx b/webapp/routes/route_claim.jsx
new file mode 100644
index 000000000..02dfeb8e8
--- /dev/null
+++ b/webapp/routes/route_claim.jsx
@@ -0,0 +1,36 @@
+import * as RouteUtils from 'routes/route_utils.jsx';
+
+export default {
+ path: 'claim',
+ getComponents: (location, callback) => {
+ System.import('components/claim/claim_controller.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ path: 'oauth_to_email',
+ getComponents: (location, callback) => {
+ System.import('components/claim/components/oauth_to_email.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'email_to_oauth',
+ getComponents: (location, callback) => {
+ System.import('components/claim/components/email_to_oauth.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'ldap_to_email',
+ getComponents: (location, callback) => {
+ System.import('components/claim/components/ldap_to_email.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'email_to_ldap',
+ getComponents: (location, callback) => {
+ System.import('components/claim/components/email_to_ldap.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ }
+ ]
+ )
+};
diff --git a/webapp/routes/route_create_team.jsx b/webapp/routes/route_create_team.jsx
new file mode 100644
index 000000000..354d7a39c
--- /dev/null
+++ b/webapp/routes/route_create_team.jsx
@@ -0,0 +1,25 @@
+import * as RouteUtils from 'routes/route_utils.jsx';
+
+export default {
+ path: 'create_team',
+ getComponents: (location, callback) => {
+ System.import('components/create_team/create_team_controller.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ indexRoute: {onEnter: (nextState, replace) => replace('/create_team/display_name')},
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ path: 'display_name',
+ getComponents: (location, callback) => {
+ System.import('components/create_team/components/display_name.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'team_url',
+ getComponents: (location, callback) => {
+ System.import('components/create_team/components/team_url.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ }
+ ]
+ )
+};
diff --git a/webapp/routes/route_integrations.jsx b/webapp/routes/route_integrations.jsx
new file mode 100644
index 000000000..6ebd09a72
--- /dev/null
+++ b/webapp/routes/route_integrations.jsx
@@ -0,0 +1,84 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import * as RouteUtils from 'routes/route_utils.jsx';
+import {Route, IndexRoute, Redirect} from 'react-router/es6';
+import React from 'react';
+
+import BackstageNavbar from 'components/backstage/backstage_navbar.jsx';
+import BackstageSidebar from 'components/backstage/backstage_sidebar.jsx';
+import Integrations from 'components/backstage/integrations.jsx';
+import InstalledIncomingWebhooks from 'components/backstage/installed_incoming_webhooks.jsx';
+import InstalledOutgoingWebhooks from 'components/backstage/installed_outgoing_webhooks.jsx';
+import InstalledCommands from 'components/backstage/installed_commands.jsx';
+import AddIncomingWebhook from 'components/backstage/add_incoming_webhook.jsx';
+import AddOutgoingWebhook from 'components/backstage/add_outgoing_webhook.jsx';
+import AddCommand from 'components/backstage/add_command.jsx';
+
+export default (
+ <Route path='integrations'>
+ <IndexRoute
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: Integrations
+ }}
+ />
+ <Route path='incoming_webhooks'>
+ <IndexRoute
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: InstalledIncomingWebhooks
+ }}
+ />
+ <Route
+ path='add'
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: AddIncomingWebhook
+ }}
+ />
+ </Route>
+ <Route path='outgoing_webhooks'>
+ <IndexRoute
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: InstalledOutgoingWebhooks
+ }}
+ />
+ <Route
+ path='add'
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: AddOutgoingWebhook
+ }}
+ />
+ </Route>
+ <Route path='commands'>
+ <IndexRoute
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: InstalledCommands
+ }}
+ />
+ <Route
+ path='add'
+ components={{
+ navbar: BackstageNavbar,
+ sidebar: BackstageSidebar,
+ center: AddCommand
+ }}
+ />
+ </Route>
+ <Redirect
+ from='*'
+ to='/error'
+ query={RouteUtils.notFoundParams}
+ />
+ </Route>
+);
diff --git a/webapp/routes/route_root.jsx b/webapp/routes/route_root.jsx
new file mode 100644
index 000000000..6593e2bd8
--- /dev/null
+++ b/webapp/routes/route_root.jsx
@@ -0,0 +1,123 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import * as RouteUtils from 'routes/route_utils.jsx';
+
+import Root from 'components/root.jsx';
+
+import claimAccountRoute from 'routes/route_claim.jsx';
+import createTeamRoute from 'routes/route_create_team.jsx';
+import teamRoute from 'routes/route_team.jsx';
+
+import ErrorStore from 'stores/error_store.jsx';
+function preLoggedIn(nextState, replace, callback) {
+ ErrorStore.clearLastError();
+ callback();
+}
+
+export default {
+ path: '/',
+ component: Root,
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ getComponents: (location, callback) => {
+ System.import('components/header_footer_template.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ path: 'login',
+ getComponents: (location, callback) => {
+ System.import('components/login/login_controller.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'reset_password',
+ getComponents: (location, callback) => {
+ System.import('components/password_reset_send_link.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'reset_password_complete',
+ getComponents: (location, callback) => {
+ System.import('components/password_reset_form.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ claimAccountRoute,
+ {
+ path: 'signup_user_complete',
+ getComponents: (location, callback) => {
+ System.import('components/signup_user_complete.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'should_verify_email',
+ getComponents: (location, callback) => {
+ System.import('components/should_verify_email.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ path: 'do_verify_email',
+ getComponents: (location, callback) => {
+ System.import('components/do_verify_email.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ }
+ ]
+ )
+ },
+ {
+ path: 'error',
+ getComponents: (location, callback) => {
+ System.import('components/error_page.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ {
+ getComponents: (location, callback) => {
+ System.import('components/logged_in.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ onEnter: preLoggedIn,
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ path: 'admin_console',
+ getComponents: (location, callback) => {
+ System.import('components/admin_console/admin_console.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ indexRoute: {onEnter: (nextState, replace) => replace('/admin_console/system_analytics')},
+ getChildRoutes: (location, callback) => {
+ System.import('routes/route_admin_console.jsx').then((comp) => callback(null, comp.default));
+ }
+ },
+ {
+ getComponents: (location, callback) => {
+ System.import('components/header_footer_template.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ getChildRoutes: RouteUtils.createGetChildComponentsFunction(
+ [
+ {
+ path: 'select_team',
+ getComponents: (location, callback) => {
+ System.import('components/select_team/select_team.jsx').then(RouteUtils.importComponentSuccess(callback));
+ }
+ },
+ createTeamRoute
+ ]
+ )
+ },
+ teamRoute
+ ]
+ )
+ },
+ {
+ path: '*',
+ onEnter: (nextState, replace) => {
+ replace({
+ pathname: 'error',
+ query: RouteUtils.notFoundParams
+ });
+ }
+ }
+ ]
+ )
+};
diff --git a/webapp/routes/route_team.jsx b/webapp/routes/route_team.jsx
new file mode 100644
index 000000000..7025ecb99
--- /dev/null
+++ b/webapp/routes/route_team.jsx
@@ -0,0 +1,171 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import $ from 'jquery';
+import * as RouteUtils from 'routes/route_utils.jsx';
+import {browserHistory} from 'react-router/es6';
+
+import TeamStore from 'stores/team_store.jsx';
+import * as GlobalActions from 'actions/global_actions.jsx';
+import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
+import Constants from 'utils/constants.jsx';
+const ActionTypes = Constants.ActionTypes;
+import * as AsyncClient from 'utils/async_client.jsx';
+import Client from 'utils/web_client.jsx';
+import * as Utils from 'utils/utils.jsx';
+import ChannelStore from 'stores/channel_store.jsx';
+
+function onChannelEnter(nextState, replace, callback) {
+ doChannelChange(nextState, replace, callback);
+}
+
+function doChannelChange(state, replace, callback) {
+ let channel;
+ if (state.location.query.fakechannel) {
+ channel = JSON.parse(state.location.query.fakechannel);
+ } else {
+ channel = ChannelStore.getByName(state.params.channel);
+ if (!channel) {
+ channel = ChannelStore.getMoreByName(state.params.channel);
+ }
+ if (!channel) {
+ Client.joinChannelByName(
+ state.params.channel,
+ (data) => {
+ GlobalActions.emitChannelClickEvent(data);
+ callback();
+ },
+ () => {
+ if (state.params.team) {
+ replace('/' + state.params.team + '/channels/town-square');
+ } else {
+ replace('/');
+ }
+ callback();
+ }
+ );
+ return;
+ }
+ }
+ GlobalActions.emitChannelClickEvent(channel);
+ callback();
+}
+
+function preNeedsTeam(nextState, replace, callback) {
+ // First check to make sure you're in the current team
+ // for the current url.
+ var teamName = Utils.getTeamNameFromUrl();
+ var team = TeamStore.getByName(teamName);
+ const oldTeamId = TeamStore.getCurrentId();
+
+ if (!team) {
+ browserHistory.push('/');
+ return;
+ }
+
+ GlobalActions.emitCloseRightHandSide();
+
+ TeamStore.saveMyTeam(team);
+ TeamStore.emitChange();
+
+ // If the old team id is null then we will already have the direct
+ // profiles from initial load
+ if (oldTeamId != null) {
+ AsyncClient.getDirectProfiles();
+ }
+
+ var d1 = $.Deferred(); //eslint-disable-line new-cap
+ var d2 = $.Deferred(); //eslint-disable-line new-cap
+
+ Client.getChannels(
+ (data) => {
+ AppDispatcher.handleServerAction({
+ type: ActionTypes.RECEIVED_CHANNELS,
+ channels: data.channels,
+ members: data.members
+ });
+
+ d1.resolve();
+ },
+ (err) => {
+ AsyncClient.dispatchError(err, 'getChannels');
+ d1.resolve();
+ }
+ );
+
+ Client.getProfiles(
+ (data) => {
+ AppDispatcher.handleServerAction({
+ type: ActionTypes.RECEIVED_PROFILES,
+ profiles: data
+ });
+
+ d2.resolve();
+ },
+ (err) => {
+ AsyncClient.dispatchError(err, 'getProfiles');
+ d2.resolve();
+ }
+ );
+
+ $.when(d1, d2).done(() => {
+ callback();
+ });
+}
+
+function onPermalinkEnter(nextState) {
+ const postId = nextState.params.postid;
+ GlobalActions.emitPostFocusEvent(postId);
+}
+
+export default {
+ path: ':team',
+ getComponents: (location, callback) => {
+ System.import('components/needs_team.jsx').then(RouteUtils.importComponentSuccess(callback));
+ },
+ onEnter: preNeedsTeam,
+ indexRoute: {onEnter: (nextState, replace) => replace('/' + nextState.params.team + '/channels/town-square')},
+ childRoutes: [
+ {
+ path: 'channels/:channel',
+ onEnter: onChannelEnter,
+ getComponents: (location, callback) => {
+ Promise.all([
+ System.import('components/sidebar.jsx'),
+ System.import('components/channel_view.jsx')
+ ]).then(
+ (comarr) => callback(null, {sidebar: comarr[0].default, center: comarr[1].default})
+ );
+ }
+ },
+ {
+ path: 'pl/:postid',
+ onEnter: onPermalinkEnter,
+ getComponents: (location, callback) => {
+ Promise.all([
+ System.import('components/sidebar.jsx'),
+ System.import('components/permalink_view.jsx')
+ ]).then(
+ (comarr) => callback(null, {sidebar: comarr[0].default, center: comarr[1].default})
+ );
+ }
+ },
+ {
+ path: 'tutorial',
+ getComponents: (location, callback) => {
+ Promise.all([
+ System.import('components/sidebar.jsx'),
+ System.import('components/tutorial/tutorial_view.jsx')
+ ]).then(
+ (comarr) => callback(null, {sidebar: comarr[0].default, center: comarr[1].default})
+ );
+ }
+ },
+ {
+ path: 'settings',
+ getChildRoutes: (location, callback) => {
+ System.import('routes/route_integrations.jsx').then((comp) => callback(null, [comp.default]));
+ }
+ }
+ ]
+};
diff --git a/webapp/routes/route_utils.jsx b/webapp/routes/route_utils.jsx
new file mode 100644
index 000000000..f3a159cbc
--- /dev/null
+++ b/webapp/routes/route_utils.jsx
@@ -0,0 +1,20 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import * as Utils from 'utils/utils.jsx';
+
+export function importComponentSuccess(callback) {
+ return (comp) => callback(null, comp.default);
+}
+
+export function createGetChildComponentsFunction(arrayOfComponents) {
+ return (locaiton, callback) => callback(null, arrayOfComponents);
+}
+
+export const notFoundParams = {
+ title: Utils.localizeMessage('error.not_found.title', 'Page not found'),
+ message: Utils.localizeMessage('error.not_found.message', 'The page you were trying to reach does not exist'),
+ link: '/',
+ linkmessage: Utils.localizeMessage('error.not_found.link_message', 'Back to Mattermost')
+};
+
diff --git a/webapp/stores/browser_store.jsx b/webapp/stores/browser_store.jsx
index 6be2dc8f3..f19e5b9a1 100644
--- a/webapp/stores/browser_store.jsx
+++ b/webapp/stores/browser_store.jsx
@@ -1,7 +1,7 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import * as Utils from 'utils/utils.jsx';
const notSupportedParams = {
diff --git a/webapp/utils/text_formatting.jsx b/webapp/utils/text_formatting.jsx
index cc4a24d19..dbf18d722 100644
--- a/webapp/utils/text_formatting.jsx
+++ b/webapp/utils/text_formatting.jsx
@@ -2,7 +2,7 @@
// See License.txt for license information.
import Autolinker from 'autolinker';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import Constants from './constants.jsx';
import * as Emoticons from './emoticons.jsx';
import * as Markdown from './markdown.jsx';
diff --git a/webapp/utils/utils.jsx b/webapp/utils/utils.jsx
index 003f6025d..88d7616de 100644
--- a/webapp/utils/utils.jsx
+++ b/webapp/utils/utils.jsx
@@ -13,7 +13,7 @@ var ActionTypes = Constants.ActionTypes;
import * as AsyncClient from './async_client.jsx';
import Client from './web_client.jsx';
-import {browserHistory} from 'react-router';
+import {browserHistory} from 'react-router/es6';
import icon50 from 'images/icon50x50.png';
import bing from 'images/bing.mp3';
diff --git a/webapp/webpack.config.js b/webapp/webpack.config.js
index 191518a07..aaadb9de5 100644
--- a/webapp/webpack.config.js
+++ b/webapp/webpack.config.js
@@ -105,7 +105,13 @@ var config = {
'process.env': {
NODE_ENV: JSON.stringify('production')
}
+ }),
+ new webpack.optimize.CommonsChunkPlugin({
+ minChunks: 2,
+ children: true,
+ name: 'main'
})
+ //new webpack.optimize.AggressiveMergingPlugin()
],
resolve: {
alias: {
@@ -145,9 +151,6 @@ if (!DEV) {
})
);
config.plugins.push(
- new webpack.optimize.AggressiveMergingPlugin()
- );
- config.plugins.push(
new webpack.optimize.OccurrenceOrderPlugin(true)
);
config.plugins.push(