@@ -23,7 +24,7 @@ let AppsMenu = ({ apps, current, height, onSelect }) => (
return null;
}
return (
-
+
{app.name}
diff --git a/src/components/Sidebar/AppsSelector.react.js b/src/components/Sidebar/AppsSelector.react.js
index f1805443b9..73419310f4 100644
--- a/src/components/Sidebar/AppsSelector.react.js
+++ b/src/components/Sidebar/AppsSelector.react.js
@@ -5,15 +5,16 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import PropTypes from 'lib/PropTypes';
-import AppsMenu from 'components/Sidebar/AppsMenu.react';
-import Popover from 'components/Popover/Popover.react';
-import history from 'dashboard/history';
-import ParseApp from 'lib/ParseApp';
-import Position from 'lib/Position';
-import React from 'react';
-import ReactDOM from 'react-dom';
-import styles from 'components/Sidebar/Sidebar.scss';
+import PropTypes from 'lib/PropTypes';
+import AppsMenu from 'components/Sidebar/AppsMenu.react';
+import Popover from 'components/Popover/Popover.react';
+import history from 'dashboard/history';
+import ParseApp from 'lib/ParseApp';
+import Position from 'lib/Position';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import styles from 'components/Sidebar/Sidebar.scss';
+import { applyMountPath } from "lib/path";
export default class AppsSelector extends React.Component {
constructor() {
@@ -58,7 +59,7 @@ export default class AppsSelector extends React.Component {
if (sections[0] === '') {
sections.shift();
}
- history.push(`/apps/${value}/${sections[2]}`);
+ history.push(applyMountPath(`apps/${value}/${sections[2]}`));
}
});
}
diff --git a/src/components/Sidebar/FooterMenu.react.js b/src/components/Sidebar/FooterMenu.react.js
index 2852c9e44a..075a17c651 100644
--- a/src/components/Sidebar/FooterMenu.react.js
+++ b/src/components/Sidebar/FooterMenu.react.js
@@ -5,13 +5,12 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import Icon from 'components/Icon/Icon.react';
-import Popover from 'components/Popover/Popover.react';
-import Position from 'lib/Position';
-import React from 'react';
-import styles from 'components/Sidebar/Sidebar.scss';
-
-let mountPath = window.PARSE_DASHBOARD_PATH;
+import Icon from 'components/Icon/Icon.react';
+import Popover from 'components/Popover/Popover.react';
+import Position from 'lib/Position';
+import React from 'react';
+import styles from 'components/Sidebar/Sidebar.scss';
+import { applyMountPath } from 'lib/path';
export default class FooterMenu extends React.Component {
constructor() {
@@ -41,7 +40,7 @@ export default class FooterMenu extends React.Component {
position={this.state.position}
onExternalClick={() => this.setState({ show: false })}>
- Log Out 👋
+ Log Out 👋Server Guide 📚Code-level Questions ❓Server Questions ❓
diff --git a/src/components/Sidebar/SidebarHeader.react.js b/src/components/Sidebar/SidebarHeader.react.js
index 67de9c4cad..8d953f76f7 100644
--- a/src/components/Sidebar/SidebarHeader.react.js
+++ b/src/components/Sidebar/SidebarHeader.react.js
@@ -5,10 +5,11 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import Icon from 'components/Icon/Icon.react';
-import { Link } from 'react-router-dom';
-import React from 'react';
-import styles from 'components/Sidebar/Sidebar.scss';
+import Icon from 'components/Icon/Icon.react';
+import { Link } from 'react-router-dom';
+import React from 'react';
+import styles from 'components/Sidebar/Sidebar.scss';
+import { mountPath, applyMountPath } from 'lib/path';
// get the package.json environment variable
const version = process.env.version;
@@ -18,7 +19,6 @@ export default class SidebarHeader extends React.Component {
this.state = { };
}
componentWillMount() {
- let mountPath = window.PARSE_DASHBOARD_PATH;
fetch(mountPath).then(response => {
this.setState({ dashboardUser: response.headers.get('username') });
});
@@ -26,10 +26,10 @@ export default class SidebarHeader extends React.Component {
render() {
return (
-
+
-
+
Parse Dashboard {version}
diff --git a/src/dashboard/AppData.react.js b/src/dashboard/AppData.react.js
index 997c292181..c803a044d6 100644
--- a/src/dashboard/AppData.react.js
+++ b/src/dashboard/AppData.react.js
@@ -5,13 +5,14 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import React from 'react';
-import PropTypes from 'lib/PropTypes';
-import AppSelector from 'dashboard/AppSelector.react';
-import AppsManager from 'lib/AppsManager';
-import history from 'dashboard/history';
-import ParseApp from 'lib/ParseApp';
-import createClass from 'create-react-class';
+import React from 'react';
+import PropTypes from 'lib/PropTypes';
+import AppSelector from 'dashboard/AppSelector.react';
+import AppsManager from 'lib/AppsManager';
+import history from 'dashboard/history';
+import ParseApp from 'lib/ParseApp';
+import createClass from 'create-react-class';
+import { applyMountPath } from 'lib/path';
let AppData = createClass({
childContextTypes: {
@@ -27,7 +28,7 @@ let AppData = createClass({
},
generatePath(path) {
- return '/apps/' + this.props.params.appId + '/' + path;
+ return applyMountPath('apps/' + this.props.params.appId + '/' + path);
},
render() {
@@ -39,7 +40,7 @@ let AppData = createClass({
if (current) {
current.setParseKeys();
} else {
- history.replace('/apps');
+ history.replace(applyMountPath('apps'));
return ;
}
return (
diff --git a/src/dashboard/AppSelector.react.js b/src/dashboard/AppSelector.react.js
index d4d3fe7a84..b5c6a87e1b 100644
--- a/src/dashboard/AppSelector.react.js
+++ b/src/dashboard/AppSelector.react.js
@@ -5,14 +5,15 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import AppsManager from 'lib/AppsManager';
-import Dropdown from 'components/Dropdown/Dropdown.react';
-import Field from 'components/Field/Field.react';
-import history from 'dashboard/history';
-import Label from 'components/Label/Label.react';
-import Modal from 'components/Modal/Modal.react';
-import Option from 'components/Dropdown/Option.react';
-import React from 'react';
+import AppsManager from 'lib/AppsManager';
+import Dropdown from 'components/Dropdown/Dropdown.react';
+import Field from 'components/Field/Field.react';
+import history from 'dashboard/history';
+import Label from 'components/Label/Label.react';
+import Modal from 'components/Modal/Modal.react';
+import Option from 'components/Dropdown/Option.react';
+import React from 'react';
+import { applyMountPath } from 'lib/path'
export default class AppSelector extends React.Component {
constructor(props, context) {
@@ -30,7 +31,7 @@ export default class AppSelector extends React.Component {
}
handleCancel() {
- history.push('/apps');
+ history.push(applyMountPath('apps'));
}
render() {
diff --git a/src/dashboard/Apps/AppsIndex.react.js b/src/dashboard/Apps/AppsIndex.react.js
index 164151d96a..6b3f5cc930 100644
--- a/src/dashboard/Apps/AppsIndex.react.js
+++ b/src/dashboard/Apps/AppsIndex.react.js
@@ -5,18 +5,19 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import AppsManager from 'lib/AppsManager';
-import FlowFooter from 'components/FlowFooter/FlowFooter.react';
-import history from 'dashboard/history';
-import html from 'lib/htmlString';
-import Icon from 'components/Icon/Icon.react';
-import joinWithFinal from 'lib/joinWithFinal';
-import LiveReload from 'components/LiveReload/LiveReload.react';
-import prettyNumber from 'lib/prettyNumber';
-import React from 'react';
-import styles from 'dashboard/Apps/AppsIndex.scss';
-import { center } from 'stylesheets/base.scss';
-import AppBadge from 'components/AppBadge/AppBadge.react';
+import AppsManager from 'lib/AppsManager';
+import FlowFooter from 'components/FlowFooter/FlowFooter.react';
+import history from 'dashboard/history';
+import html from 'lib/htmlString';
+import Icon from 'components/Icon/Icon.react';
+import joinWithFinal from 'lib/joinWithFinal';
+import LiveReload from 'components/LiveReload/LiveReload.react';
+import prettyNumber from 'lib/prettyNumber';
+import React from 'react';
+import styles from 'dashboard/Apps/AppsIndex.scss';
+import { center } from 'stylesheets/base.scss';
+import AppBadge from 'components/AppBadge/AppBadge.react';
+import { applyMountPath } from 'lib/path';
function dash(value, content) {
if (value === undefined) {
@@ -36,7 +37,7 @@ let CloningNote = ({ app, clone_status, clone_progress }) => {
}
let progress = {
let currentAppProgress = data.find(({ appId }) => appId === app.applicationId);
let progressStr = currentAppProgress ? currentAppProgress.progress.toString() : '0';
@@ -64,7 +65,7 @@ let AppCard = ({
app,
icon,
}) => {
- let canBrowse = app.serverInfo.error ? null : () => history.push(html`/apps/${app.slug}/browser`);
+ let canBrowse = app.serverInfo.error ? null : () => history.push(applyMountPath(`apps/${app.slug}/browser`));
let versionMessage = app.serverInfo.error ?
Server not reachable: {app.serverInfo.error.toString()}
:
@@ -98,7 +99,7 @@ export default class AppsIndex extends React.Component {
componentWillMount() {
if (AppsManager.apps().length === 1) {
const [app] = AppsManager.apps();
- history.push(`/apps/${app.slug}/browser`);
+ history.push(applyMountPath(`apps/${app.slug}/browser`));
return;
}
document.body.addEventListener('keydown', this.focusField);
diff --git a/src/dashboard/Dashboard.js b/src/dashboard/Dashboard.js
index e48e93cd1a..d22064bad5 100644
--- a/src/dashboard/Dashboard.js
+++ b/src/dashboard/Dashboard.js
@@ -5,48 +5,49 @@
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
-import AccountOverview from './Account/AccountOverview.react';
-import AccountView from './AccountView.react';
-import AnalyticsOverview from './Analytics/Overview/Overview.react';
-import ApiConsole from './Data/ApiConsole/ApiConsole.react';
-import AppData from './AppData.react';
-import AppsIndex from './Apps/AppsIndex.react';
-import AppsManager from 'lib/AppsManager';
-import Browser from './Data/Browser/Browser.react';
-import CloudCode from './Data/CloudCode/CloudCode.react';
-import Config from './Data/Config/Config.react';
-import Explorer from './Analytics/Explorer/Explorer.react';
-import FourOhFour from 'components/FourOhFour/FourOhFour.react';
-import GeneralSettings from './Settings/GeneralSettings.react';
-import history from 'dashboard/history';
-import HostingSettings from './Settings/HostingSettings.react';
-import Icon from 'components/Icon/Icon.react';
-import JobEdit from 'dashboard/Data/Jobs/JobEdit.react';
-import Jobs from './Data/Jobs/Jobs.react';
-import JobsData from 'dashboard/Data/Jobs/JobsData.react';
-import Loader from 'components/Loader/Loader.react';
-import Logs from './Data/Logs/Logs.react';
-import Migration from './Data/Migration/Migration.react';
-import ParseApp from 'lib/ParseApp';
-import Performance from './Analytics/Performance/Performance.react';
-import PushAudiencesIndex from './Push/PushAudiencesIndex.react';
-import PushDetails from './Push/PushDetails.react';
-import PushIndex from './Push/PushIndex.react';
-import PushNew from './Push/PushNew.react';
-import PushSettings from './Settings/PushSettings.react';
-import React from 'react';
-import Retention from './Analytics/Retention/Retention.react';
-import SchemaOverview from './Data/Browser/SchemaOverview.react';
-import SecuritySettings from './Settings/SecuritySettings.react';
-import SettingsData from './Settings/SettingsData.react';
-import SlowQueries from './Analytics/SlowQueries/SlowQueries.react';
-import styles from 'dashboard/Apps/AppsIndex.scss';
-import UsersSettings from './Settings/UsersSettings.react';
-import Webhooks from './Data/Webhooks/Webhooks.react';
-import { AsyncStatus } from 'lib/Constants';
-import { center } from 'stylesheets/base.scss';
-import { get } from 'lib/AJAX';
-import { setBasePath } from 'lib/AJAX';
+import AccountOverview from './Account/AccountOverview.react';
+import AccountView from './AccountView.react';
+import AnalyticsOverview from './Analytics/Overview/Overview.react';
+import ApiConsole from './Data/ApiConsole/ApiConsole.react';
+import AppData from './AppData.react';
+import AppsIndex from './Apps/AppsIndex.react';
+import AppsManager from 'lib/AppsManager';
+import Browser from './Data/Browser/Browser.react';
+import CloudCode from './Data/CloudCode/CloudCode.react';
+import Config from './Data/Config/Config.react';
+import Explorer from './Analytics/Explorer/Explorer.react';
+import FourOhFour from 'components/FourOhFour/FourOhFour.react';
+import GeneralSettings from './Settings/GeneralSettings.react';
+import history from 'dashboard/history';
+import HostingSettings from './Settings/HostingSettings.react';
+import Icon from 'components/Icon/Icon.react';
+import JobEdit from 'dashboard/Data/Jobs/JobEdit.react';
+import Jobs from './Data/Jobs/Jobs.react';
+import JobsData from 'dashboard/Data/Jobs/JobsData.react';
+import Loader from 'components/Loader/Loader.react';
+import Logs from './Data/Logs/Logs.react';
+import Migration from './Data/Migration/Migration.react';
+import ParseApp from 'lib/ParseApp';
+import Performance from './Analytics/Performance/Performance.react';
+import PushAudiencesIndex from './Push/PushAudiencesIndex.react';
+import PushDetails from './Push/PushDetails.react';
+import PushIndex from './Push/PushIndex.react';
+import PushNew from './Push/PushNew.react';
+import PushSettings from './Settings/PushSettings.react';
+import React from 'react';
+import Retention from './Analytics/Retention/Retention.react';
+import SchemaOverview from './Data/Browser/SchemaOverview.react';
+import SecuritySettings from './Settings/SecuritySettings.react';
+import SettingsData from './Settings/SettingsData.react';
+import SlowQueries from './Analytics/SlowQueries/SlowQueries.react';
+import styles from 'dashboard/Apps/AppsIndex.scss';
+import UsersSettings from './Settings/UsersSettings.react';
+import Webhooks from './Data/Webhooks/Webhooks.react';
+import { AsyncStatus } from 'lib/Constants';
+import { center } from 'stylesheets/base.scss';
+import { get } from 'lib/AJAX';
+import { setBasePath } from 'lib/AJAX';
+import { mountPath, applyMountPath } from 'lib/path';
import {
Router,
Switch,
@@ -173,6 +174,7 @@ export default class Dashboard extends React.Component {
}
render() {
+
if (this.state.configLoadingState === AsyncStatus.PROGRESS) {
return