summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-web/opendc-web-ui/src')
-rw-r--r--opendc-web/opendc-web-ui/src/pages/App.js30
-rw-r--r--opendc-web/opendc-web-ui/src/pages/Home.js4
-rw-r--r--opendc-web/opendc-web-ui/src/pages/NotFound.js11
-rw-r--r--opendc-web/opendc-web-ui/src/pages/Profile.js35
-rw-r--r--opendc-web/opendc-web-ui/src/pages/Projects.js21
-rw-r--r--opendc-web/opendc-web-ui/src/util/hooks.js29
6 files changed, 77 insertions, 53 deletions
diff --git a/opendc-web/opendc-web-ui/src/pages/App.js b/opendc-web/opendc-web-ui/src/pages/App.js
index 03e21cc2..ea62e8dc 100644
--- a/opendc-web/opendc-web-ui/src/pages/App.js
+++ b/opendc-web/opendc-web-ui/src/pages/App.js
@@ -1,6 +1,5 @@
import PropTypes from 'prop-types'
import React, { useEffect } from 'react'
-import DocumentTitle from 'react-document-title'
import { HotKeys } from 'react-hotkeys'
import { useDispatch, useSelector } from 'react-redux'
import { openPortfolioSucceeded } from '../actions/portfolios'
@@ -23,6 +22,7 @@ import NewPortfolioModal from '../containers/modals/NewPortfolioModal'
import NewScenarioModal from '../containers/modals/NewScenarioModal'
import PortfolioResultsContainer from '../containers/app/results/PortfolioResultsContainer'
import KeymapConfiguration from '../shortcuts/keymap'
+import { useDocumentTitle } from '../util/hooks'
const App = ({ projectId, portfolioId, scenarioId }) => {
const projectName = useSelector(
@@ -76,21 +76,21 @@ const App = ({ projectId, portfolioId, scenarioId }) => {
</div>
)
+ useDocumentTitle(projectName ? projectName + ' - OpenDC' : 'Simulation - OpenDC')
+
return (
- <DocumentTitle title={projectName ? projectName + ' - OpenDC' : 'Simulation - OpenDC'}>
- <HotKeys keyMap={KeymapConfiguration} className="page-container full-height">
- <AppNavbarContainer fullWidth={true} />
- {scenarioId ? scenarioElements : portfolioId ? portfolioElements : constructionElements}
- <NewTopologyModal />
- <NewPortfolioModal />
- <NewScenarioModal />
- <EditRoomNameModal />
- <DeleteRoomModal />
- <EditRackNameModal />
- <DeleteRackModal />
- <DeleteMachineModal />
- </HotKeys>
- </DocumentTitle>
+ <HotKeys keyMap={KeymapConfiguration} className="page-container full-height">
+ <AppNavbarContainer fullWidth={true} />
+ {scenarioId ? scenarioElements : portfolioId ? portfolioElements : constructionElements}
+ <NewTopologyModal />
+ <NewPortfolioModal />
+ <NewScenarioModal />
+ <EditRoomNameModal />
+ <DeleteRoomModal />
+ <EditRackNameModal />
+ <DeleteRackModal />
+ <DeleteMachineModal />
+ </HotKeys>
)
}
diff --git a/opendc-web/opendc-web-ui/src/pages/Home.js b/opendc-web/opendc-web-ui/src/pages/Home.js
index 6fc940c0..fb383426 100644
--- a/opendc-web/opendc-web-ui/src/pages/Home.js
+++ b/opendc-web/opendc-web-ui/src/pages/Home.js
@@ -1,5 +1,4 @@
import React from 'react'
-import DocumentTitle from 'react-document-title'
import ContactSection from '../components/home/ContactSection'
import IntroSection from '../components/home/IntroSection'
import JumbotronHeader from '../components/home/JumbotronHeader'
@@ -10,8 +9,10 @@ import TeamSection from '../components/home/TeamSection'
import TechnologiesSection from '../components/home/TechnologiesSection'
import HomeNavbar from '../components/navigation/HomeNavbar'
import './Home.sass'
+import { useDocumentTitle } from '../util/hooks'
function Home() {
+ useDocumentTitle('OpenDC')
return (
<div>
<HomeNavbar />
@@ -24,7 +25,6 @@ function Home() {
<TechnologiesSection />
<TeamSection />
<ContactSection />
- <DocumentTitle title="OpenDC" />
</div>
</div>
)
diff --git a/opendc-web/opendc-web-ui/src/pages/NotFound.js b/opendc-web/opendc-web-ui/src/pages/NotFound.js
index 72be7342..b933ffa5 100644
--- a/opendc-web/opendc-web-ui/src/pages/NotFound.js
+++ b/opendc-web/opendc-web-ui/src/pages/NotFound.js
@@ -1,14 +1,15 @@
import React from 'react'
-import DocumentTitle from 'react-document-title'
import TerminalWindow from '../components/not-found/TerminalWindow'
import './NotFound.sass'
+import { useDocumentTitle } from '../util/hooks'
-const NotFound = () => (
- <DocumentTitle title="Page Not Found - OpenDC">
+const NotFound = () => {
+ useDocumentTitle('Page Not Found - OpenDC')
+ return (
<div className="not-found-backdrop">
<TerminalWindow />
</div>
- </DocumentTitle>
-)
+ )
+}
export default NotFound
diff --git a/opendc-web/opendc-web-ui/src/pages/Profile.js b/opendc-web/opendc-web-ui/src/pages/Profile.js
index 1e817037..ea781686 100644
--- a/opendc-web/opendc-web-ui/src/pages/Profile.js
+++ b/opendc-web/opendc-web-ui/src/pages/Profile.js
@@ -1,35 +1,30 @@
import React from 'react'
-import DocumentTitle from 'react-document-title'
import { useDispatch } from 'react-redux'
import { openDeleteProfileModal } from '../actions/modals/profile'
import DeleteProfileModal from '../containers/modals/DeleteProfileModal'
import AppNavbarContainer from '../containers/navigation/AppNavbarContainer'
+import { useDocumentTitle } from '../util/hooks'
const Profile = () => {
const dispatch = useDispatch()
const onDelete = () => dispatch(openDeleteProfileModal())
+ useDocumentTitle('My Profile - OpenDC')
return (
- <DocumentTitle title="My Profile - OpenDC">
- <div className="full-height">
- <AppNavbarContainer fullWidth={false} />
- <div className="container text-page-container full-height">
- <button
- className="btn btn-danger mb-2 ml-auto mr-auto"
- style={{ maxWidth: 300 }}
- onClick={onDelete}
- >
- Delete my account on OpenDC
- </button>
- <p className="text-muted text-center">
- This does not delete your Google account, but simply disconnects it from the OpenDC platform and
- deletes any project info that is associated with you (projects you own and any authorizations
- you may have on other projects).
- </p>
- </div>
- <DeleteProfileModal />
+ <div className="full-height">
+ <AppNavbarContainer fullWidth={false} />
+ <div className="container text-page-container full-height">
+ <button className="btn btn-danger mb-2 ml-auto mr-auto" style={{ maxWidth: 300 }} onClick={onDelete}>
+ Delete my account on OpenDC
+ </button>
+ <p className="text-muted text-center">
+ This does not delete your Google account, but simply disconnects it from the OpenDC platform and
+ deletes any project info that is associated with you (projects you own and any authorizations you
+ may have on other projects).
+ </p>
</div>
- </DocumentTitle>
+ <DeleteProfileModal />
+ </div>
)
}
diff --git a/opendc-web/opendc-web-ui/src/pages/Projects.js b/opendc-web/opendc-web-ui/src/pages/Projects.js
index f759073f..5e642a03 100644
--- a/opendc-web/opendc-web-ui/src/pages/Projects.js
+++ b/opendc-web/opendc-web-ui/src/pages/Projects.js
@@ -1,5 +1,4 @@
import React, { useEffect } from 'react'
-import DocumentTitle from 'react-document-title'
import { useDispatch } from 'react-redux'
import { fetchAuthorizationsOfCurrentUser } from '../actions/users'
import ProjectFilterPanel from '../components/projects/FilterPanel'
@@ -7,24 +6,24 @@ import NewProjectModal from '../containers/modals/NewProjectModal'
import NewProjectButtonContainer from '../containers/projects/NewProjectButtonContainer'
import VisibleProjectList from '../containers/projects/VisibleProjectAuthList'
import AppNavbarContainer from '../containers/navigation/AppNavbarContainer'
+import { useDocumentTitle } from '../util/hooks'
function Projects() {
const dispatch = useDispatch()
useEffect(() => dispatch(fetchAuthorizationsOfCurrentUser()))
+ useDocumentTitle('My Projects - OpenDC')
return (
- <DocumentTitle title="My Projects - OpenDC">
- <div className="full-height">
- <AppNavbarContainer fullWidth={false} />
- <div className="container text-page-container full-height">
- <ProjectFilterPanel />
- <VisibleProjectList />
- <NewProjectButtonContainer />
- </div>
- <NewProjectModal />
+ <div className="full-height">
+ <AppNavbarContainer fullWidth={false} />
+ <div className="container text-page-container full-height">
+ <ProjectFilterPanel />
+ <VisibleProjectList />
+ <NewProjectButtonContainer />
</div>
- </DocumentTitle>
+ <NewProjectModal />
+ </div>
)
}
diff --git a/opendc-web/opendc-web-ui/src/util/hooks.js b/opendc-web/opendc-web-ui/src/util/hooks.js
new file mode 100644
index 00000000..7780a778
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/util/hooks.js
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { useEffect } from 'react'
+
+export function useDocumentTitle(title) {
+ useEffect(() => {
+ document.title = title
+ }, [title])
+}