From 0e52785dfc5e99f48718530976083cfbd1507651 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Mon, 5 Jul 2021 15:36:23 +0200 Subject: ui: Fix linting errors --- opendc-web/opendc-web-ui/src/auth.js | 7 ++++++- .../src/components/app/map/MapStageComponent.js | 22 +++++++++++++++++++--- .../app/map/controls/ScaleIndicatorComponent.js | 5 +++++ .../app/map/controls/ZoomControlComponent.js | 5 +++++ .../src/components/app/map/elements/GrayLayer.js | 5 +++++ .../src/components/app/map/elements/HoverTile.js | 1 + .../src/components/app/map/elements/RoomTile.js | 2 ++ .../src/components/app/map/groups/RoomGroup.js | 6 +++++- .../src/components/app/map/groups/TileGroup.js | 3 ++- .../app/map/layers/HoverLayerComponent.js | 3 ++- .../components/app/map/layers/MapLayerComponent.js | 9 +++++++++ .../src/components/app/sidebars/Sidebar.js | 1 + .../app/sidebars/project/PortfolioListComponent.js | 2 +- .../sidebars/project/ProjectSidebarComponent.js | 5 +++++ .../app/sidebars/project/ScenarioListComponent.js | 1 + .../app/sidebars/topology/NameComponent.js | 6 ++++++ .../sidebars/topology/TopologySidebarComponent.js | 5 +++++ .../building/NewRoomConstructionComponent.js | 8 ++++++++ .../topology/machine/BackToRackComponent.js | 5 +++++ .../topology/machine/MachineSidebarComponent.js | 5 +++++ .../app/sidebars/topology/machine/UnitComponent.js | 9 +++++++++ .../sidebars/topology/machine/UnitListComponent.js | 6 ++++++ .../sidebars/topology/rack/AddPrefabComponent.js | 5 +++++ .../sidebars/topology/rack/BackToRoomComponent.js | 5 +++++ .../sidebars/topology/rack/EmptySlotComponent.js | 6 ++++++ .../app/sidebars/topology/rack/MachineComponent.js | 8 ++++++++ .../sidebars/topology/rack/MachineListComponent.js | 5 +++++ .../topology/room/BackToBuildingComponent.js | 5 +++++ .../sidebars/topology/room/DeleteRoomComponent.js | 5 +++++ .../topology/room/RackConstructionComponent.js | 8 ++++++++ .../src/components/home/ContentSection.js | 5 ++++- .../src/components/home/IntroSection.js | 5 +++++ .../src/components/home/ModelingSection.js | 5 +++++ .../src/components/home/ScreenshotSection.js | 11 +++++++++++ .../src/components/home/SimulationSection.js | 9 +++++++-- .../src/components/home/StakeholderSection.js | 11 +++++++++++ .../src/components/home/TeamSection.js | 16 ++++++++++++++++ .../src/components/home/TechnologiesSection.js | 5 +++++ .../opendc-web-ui/src/components/modals/Modal.js | 1 + .../components/navigation/AppNavbarComponent.js | 18 ++++++++++++------ .../src/components/navigation/HomeNavbar.js | 19 ++++++------------- .../src/components/navigation/Navbar.js | 17 ++++++++++++++--- .../components/projects/ProjectActionButtons.js | 2 +- .../src/components/projects/ProjectList.js | 2 +- opendc-web/opendc-web-ui/src/pages/_app.js | 10 +++++++++- .../opendc-web-ui/src/pages/projects/index.js | 2 +- opendc-web/opendc-web-ui/src/redux/index.js | 4 ++-- opendc-web/opendc-web-ui/src/util/timeline.js | 9 --------- 48 files changed, 271 insertions(+), 48 deletions(-) delete mode 100644 opendc-web/opendc-web-ui/src/util/timeline.js (limited to 'opendc-web/opendc-web-ui') diff --git a/opendc-web/opendc-web-ui/src/auth.js b/opendc-web/opendc-web-ui/src/auth.js index 706151bf..96417e67 100644 --- a/opendc-web/opendc-web-ui/src/auth.js +++ b/opendc-web/opendc-web-ui/src/auth.js @@ -20,6 +20,7 @@ * SOFTWARE. */ +import PropTypes from 'prop-types' import { Auth0Provider, useAuth0 } from '@auth0/auth0-react' import { useEffect } from 'react' import { useRouter } from 'next/router' @@ -43,7 +44,7 @@ export function useRequireAuth() { if (!isLoading && !isAuthenticated) { router.replace('/') } - }, [isLoading, isAuthenticated]) + }, [router, isLoading, isAuthenticated]) return auth } @@ -63,3 +64,7 @@ export function AuthProvider({ children }) { ) } + +AuthProvider.propTypes = { + children: PropTypes.node, +} diff --git a/opendc-web/opendc-web-ui/src/components/app/map/MapStageComponent.js b/opendc-web/opendc-web-ui/src/components/app/map/MapStageComponent.js index 7c97f3e4..07b2d8f0 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/MapStageComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/MapStageComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React, { useEffect, useRef, useState } from 'react' import { HotKeys } from 'react-hotkeys' import { Stage } from 'react-konva' @@ -35,10 +36,11 @@ function MapStageComponent({ const mousePos = stage.current.getStage().getPointerPosition() setPos([mousePos.x, mousePos.y]) } - const updateDimensions = () => setMapDimensions(window.innerWidth, window.innerHeight - NAVBAR_HEIGHT) - const updateScale = (e) => zoomInOnPosition(e.deltaY < 0, x, y) useEffect(() => { + const updateDimensions = () => setMapDimensions(window.innerWidth, window.innerHeight - NAVBAR_HEIGHT) + const updateScale = (e) => zoomInOnPosition(e.deltaY < 0, x, y) + updateDimensions() window.addEventListener('resize', updateDimensions) @@ -55,7 +57,7 @@ function MapStageComponent({ window.removeEventListener('resize', updateDimensions) window.removeEventListener('wheel', updateScale) } - }, []) + }, [x, y, setMapDimensions, zoomInOnPosition]) const store = useStore() @@ -77,4 +79,18 @@ function MapStageComponent({ ) } +MapStageComponent.propTypes = { + mapDimensions: PropTypes.shape({ + width: PropTypes.number.isRequired, + height: PropTypes.number.isRequired, + }).isRequired, + mapPosition: PropTypes.shape({ + x: PropTypes.number.isRequired, + y: PropTypes.number.isRequired, + }).isRequired, + setMapDimensions: PropTypes.func, + setMapPositionWithBoundsCheck: PropTypes.func, + zoomInOnPosition: PropTypes.func, +} + export default MapStageComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/map/controls/ScaleIndicatorComponent.js b/opendc-web/opendc-web-ui/src/components/app/map/controls/ScaleIndicatorComponent.js index 13226602..ef633764 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/controls/ScaleIndicatorComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/controls/ScaleIndicatorComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { TILE_SIZE_IN_METERS, TILE_SIZE_IN_PIXELS } from '../MapConstants' import { scaleIndicator } from './ScaleIndicatorComponent.module.scss' @@ -8,4 +9,8 @@ const ScaleIndicatorComponent = ({ scale }) => ( ) +ScaleIndicatorComponent.propTypes = { + scale: PropTypes.number.isRequired, +} + export default ScaleIndicatorComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/map/controls/ZoomControlComponent.js b/opendc-web/opendc-web-ui/src/components/app/map/controls/ZoomControlComponent.js index 6bae792c..6c3c6cb7 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/controls/ZoomControlComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/controls/ZoomControlComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faPlus, faMinus } from '@fortawesome/free-solid-svg-icons' @@ -23,4 +24,8 @@ const ZoomControlComponent = ({ zoomInOnCenter }) => { ) } +ZoomControlComponent.propTypes = { + zoomInOnCenter: PropTypes.func.isRequired, +} + export default ZoomControlComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/map/elements/GrayLayer.js b/opendc-web/opendc-web-ui/src/components/app/map/elements/GrayLayer.js index c54a34ad..35af4d96 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/elements/GrayLayer.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/elements/GrayLayer.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { Rect } from 'react-konva' import { GRAYED_OUT_AREA_COLOR } from '../../../../util/colors' @@ -14,4 +15,8 @@ const GrayLayer = ({ onClick }) => ( /> ) +GrayLayer.propTypes = { + onClick: PropTypes.func, +} + export default GrayLayer diff --git a/opendc-web/opendc-web-ui/src/components/app/map/elements/HoverTile.js b/opendc-web/opendc-web-ui/src/components/app/map/elements/HoverTile.js index 912229c4..11bba0e1 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/elements/HoverTile.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/elements/HoverTile.js @@ -21,6 +21,7 @@ HoverTile.propTypes = { pixelX: PropTypes.number.isRequired, pixelY: PropTypes.number.isRequired, isValid: PropTypes.bool.isRequired, + scale: PropTypes.number.isRequired, onClick: PropTypes.func.isRequired, } diff --git a/opendc-web/opendc-web-ui/src/components/app/map/elements/RoomTile.js b/opendc-web/opendc-web-ui/src/components/app/map/elements/RoomTile.js index b2cc1273..ed718601 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/elements/RoomTile.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/elements/RoomTile.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { Rect } from 'react-konva' import { Tile } from '../../../../shapes' @@ -15,6 +16,7 @@ const RoomTile = ({ tile, color }) => ( RoomTile.propTypes = { tile: Tile, + color: PropTypes.string, } export default RoomTile diff --git a/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js b/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js index d7c207ca..e67d54fc 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/groups/RoomGroup.js @@ -1,9 +1,10 @@ +import PropTypes from 'prop-types' import React from 'react' import { Group } from 'react-konva' import GrayContainer from '../../../../containers/app/map/GrayContainer' import TileContainer from '../../../../containers/app/map/TileContainer' import WallContainer from '../../../../containers/app/map/WallContainer' -import { Room } from '../../../../shapes' +import { InteractionLevel, Room } from '../../../../shapes' const RoomGroup = ({ room, interactionLevel, currentRoomInConstruction, onClick }) => { if (currentRoomInConstruction === room._id) { @@ -43,6 +44,9 @@ const RoomGroup = ({ room, interactionLevel, currentRoomInConstruction, onClick RoomGroup.propTypes = { room: Room, + interactionLevel: InteractionLevel, + currentRoomInConstruction: PropTypes.string, + onClick: PropTypes.func, } export default RoomGroup diff --git a/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js b/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js index ff6ec7ec..2a108b93 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/groups/TileGroup.js @@ -6,7 +6,7 @@ import { Tile } from '../../../../shapes' import { ROOM_DEFAULT_COLOR, ROOM_IN_CONSTRUCTION_COLOR } from '../../../../util/colors' import RoomTile from '../elements/RoomTile' -const TileGroup = ({ tile, newTile, roomLoad, onClick }) => { +const TileGroup = ({ tile, newTile, onClick }) => { let tileObject if (tile.rackId) { tileObject = @@ -30,6 +30,7 @@ const TileGroup = ({ tile, newTile, roomLoad, onClick }) => { TileGroup.propTypes = { tile: Tile, newTile: PropTypes.bool, + onClick: PropTypes.func, } export default TileGroup diff --git a/opendc-web/opendc-web-ui/src/components/app/map/layers/HoverLayerComponent.js b/opendc-web/opendc-web-ui/src/components/app/map/layers/HoverLayerComponent.js index 08d31dac..a88a8b34 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/layers/HoverLayerComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/layers/HoverLayerComponent.js @@ -21,7 +21,7 @@ function HoverLayerComponent({ mouseX, mouseY, mapPosition, mapScale, isEnabled, setPos([positionX, positionY]) setValid(isValid(positionX, positionY)) } - }, [mouseX, mouseY, mapPosition, mapScale]) + }, [isEnabled, isValid, x, y, mouseX, mouseY, mapPosition, mapScale]) if (!isEnabled()) { return @@ -58,6 +58,7 @@ HoverLayerComponent.propTypes = { isEnabled: PropTypes.func.isRequired, isValid: PropTypes.func.isRequired, onClick: PropTypes.func.isRequired, + children: PropTypes.node, } export default HoverLayerComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/map/layers/MapLayerComponent.js b/opendc-web/opendc-web-ui/src/components/app/map/layers/MapLayerComponent.js index 8ee14c9c..96e6867c 100644 --- a/opendc-web/opendc-web-ui/src/components/app/map/layers/MapLayerComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/map/layers/MapLayerComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { Group, Layer } from 'react-konva' import TopologyContainer from '../../../../containers/app/map/TopologyContainer' @@ -14,4 +15,12 @@ const MapLayerComponent = ({ mapPosition, mapScale }) => ( ) +MapLayerComponent.propTypes = { + mapPosition: PropTypes.shape({ + x: PropTypes.number, + y: PropTypes.number, + }), + mapScale: PropTypes.number, +} + export default MapLayerComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/Sidebar.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/Sidebar.js index ccaa4144..56fa799f 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/Sidebar.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/Sidebar.js @@ -42,6 +42,7 @@ function Sidebar({ isRight, collapsible = true, children }) { Sidebar.propTypes = { isRight: PropTypes.bool.isRequired, collapsible: PropTypes.bool, + children: PropTypes.node, } export default Sidebar diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/project/PortfolioListComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/project/PortfolioListComponent.js index 9dd36d5e..ce271819 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/project/PortfolioListComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/project/PortfolioListComponent.js @@ -37,7 +37,7 @@ function PortfolioListComponent({ {portfolio.name} - + ) +AddPrefabComponent.propTypes = { + onClick: PropTypes.func, +} + export default AddPrefabComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/BackToRoomComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/BackToRoomComponent.js index f6a6f79b..e0eb5979 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/BackToRoomComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/BackToRoomComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faAngleLeft } from '@fortawesome/free-solid-svg-icons' @@ -10,4 +11,8 @@ const BackToRoomComponent = ({ onClick }) => ( ) +BackToRoomComponent.propTypes = { + onClick: PropTypes.func, +} + export default BackToRoomComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/EmptySlotComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/EmptySlotComponent.js index d6fa9dc9..63b319e0 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/EmptySlotComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/EmptySlotComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faPlus } from '@fortawesome/free-solid-svg-icons' @@ -15,4 +16,9 @@ const EmptySlotComponent = ({ position, onAdd }) => ( ) +EmptySlotComponent.propTypes = { + position: PropTypes.number, + onAdd: PropTypes.func, +} + export default EmptySlotComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js index 36b15c71..f91202ba 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import Image from 'next/image' import { Machine } from '../../../../../shapes' @@ -15,6 +16,11 @@ const UnitIcon = ({ id, type }) => ( ) +UnitIcon.propTypes = { + id: PropTypes.string, + type: PropTypes.string, +} + const MachineComponent = ({ position, machine, onClick }) => { const hasNoUnits = machine.cpuIds.length + machine.gpuIds.length + machine.memoryIds.length + machine.storageIds.length === 0 @@ -42,6 +48,8 @@ const MachineComponent = ({ position, machine, onClick }) => { MachineComponent.propTypes = { machine: Machine, + position: PropTypes.number, + onClick: PropTypes.func, } export default MachineComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js index 1c07d237..d0958c28 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/rack/MachineListComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import EmptySlotContainer from '../../../../../containers/app/sidebars/topology/rack/EmptySlotContainer' import MachineContainer from '../../../../../containers/app/sidebars/topology/rack/MachineContainer' @@ -17,4 +18,8 @@ const MachineListComponent = ({ machineIds }) => { ) } +MachineListComponent.propTypes = { + machineIds: PropTypes.array, +} + export default MachineListComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/BackToBuildingComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/BackToBuildingComponent.js index 696b345b..043cc713 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/BackToBuildingComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/BackToBuildingComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faAngleLeft } from '@fortawesome/free-solid-svg-icons' @@ -9,4 +10,8 @@ const BackToBuildingComponent = ({ onClick }) => ( ) +BackToBuildingComponent.propTypes = { + onClick: PropTypes.func, +} + export default BackToBuildingComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/DeleteRoomComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/DeleteRoomComponent.js index 242f7a2b..d81bad0f 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/DeleteRoomComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/DeleteRoomComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faTrash } from '@fortawesome/free-solid-svg-icons' @@ -10,4 +11,8 @@ const DeleteRoomComponent = ({ onClick }) => ( ) +DeleteRoomComponent.propTypes = { + onClick: PropTypes.func, +} + export default DeleteRoomComponent diff --git a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/RackConstructionComponent.js b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/RackConstructionComponent.js index 19d6b309..0a27910c 100644 --- a/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/RackConstructionComponent.js +++ b/opendc-web/opendc-web-ui/src/components/app/sidebars/topology/room/RackConstructionComponent.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faTimes, faPlus } from '@fortawesome/free-solid-svg-icons' @@ -27,4 +28,11 @@ const RackConstructionComponent = ({ onStart, onStop, inRackConstructionMode, is ) } +RackConstructionComponent.propTypes = { + onStart: PropTypes.func, + onStop: PropTypes.func, + inRackConstructionMode: PropTypes.bool, + isEditingRoom: PropTypes.bool, +} + export default RackConstructionComponent diff --git a/opendc-web/opendc-web-ui/src/components/home/ContentSection.js b/opendc-web/opendc-web-ui/src/components/home/ContentSection.js index 3e9ad50a..abaa565c 100644 --- a/opendc-web/opendc-web-ui/src/components/home/ContentSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/ContentSection.js @@ -1,7 +1,7 @@ +import PropTypes from 'prop-types' import React from 'react' import classNames from 'classnames' import { Container } from 'reactstrap' -import PropTypes from 'prop-types' import { contentSection } from './ContentSection.module.scss' const ContentSection = ({ name, title, children, className }) => ( @@ -15,6 +15,9 @@ const ContentSection = ({ name, title, children, className }) => ( ContentSection.propTypes = { name: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + children: PropTypes.node, + className: PropTypes.string, } export default ContentSection diff --git a/opendc-web/opendc-web-ui/src/components/home/IntroSection.js b/opendc-web/opendc-web-ui/src/components/home/IntroSection.js index 67e8cd8b..f9000d32 100644 --- a/opendc-web/opendc-web-ui/src/components/home/IntroSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/IntroSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import Image from 'next/image' import { Container, Row, Col } from 'reactstrap' @@ -42,4 +43,8 @@ const IntroSection = ({ className }) => ( ) +IntroSection.propTypes = { + className: PropTypes.string, +} + export default IntroSection diff --git a/opendc-web/opendc-web-ui/src/components/home/ModelingSection.js b/opendc-web/opendc-web-ui/src/components/home/ModelingSection.js index af36aa45..8959663a 100644 --- a/opendc-web/opendc-web-ui/src/components/home/ModelingSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/ModelingSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import ScreenshotSection from './ScreenshotSection' @@ -20,4 +21,8 @@ const ModelingSection = ({ className }) => ( ) +ModelingSection.propTypes = { + className: PropTypes.string, +} + export default ModelingSection diff --git a/opendc-web/opendc-web-ui/src/components/home/ScreenshotSection.js b/opendc-web/opendc-web-ui/src/components/home/ScreenshotSection.js index 9673b7b7..58fe1710 100644 --- a/opendc-web/opendc-web-ui/src/components/home/ScreenshotSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/ScreenshotSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import Image from 'next/image' import { Row, Col } from 'reactstrap' @@ -25,4 +26,14 @@ const ScreenshotSection = ({ className, name, title, imageUrl, caption, imageIsR ) +ScreenshotSection.propTypes = { + className: PropTypes.string, + name: PropTypes.string, + title: PropTypes.string, + imageUrl: PropTypes.string, + caption: PropTypes.string, + imageIsRight: PropTypes.bool, + children: PropTypes.node, +} + export default ScreenshotSection diff --git a/opendc-web/opendc-web-ui/src/components/home/SimulationSection.js b/opendc-web/opendc-web-ui/src/components/home/SimulationSection.js index c154cc26..46ce6a35 100644 --- a/opendc-web/opendc-web-ui/src/components/home/SimulationSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/SimulationSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import Image from 'next/image' import { Col, Row } from 'reactstrap' @@ -32,7 +33,7 @@ const SimulationSection = ({ className }) => { -

OpenDC's Simulator:

+

OpenDC's Simulator:

  • Includes a detailed operational model of modern datacenters
  • @@ -51,11 +52,15 @@ const SimulationSection = ({ className }) => { height={232} alt="OpenDC's Architecture" /> - OpenDC's Architecture + OpenDC's Architecture ) } +SimulationSection.propTypes = { + className: PropTypes.string, +} + export default SimulationSection diff --git a/opendc-web/opendc-web-ui/src/components/home/StakeholderSection.js b/opendc-web/opendc-web-ui/src/components/home/StakeholderSection.js index 9a4892ed..aa689ba4 100644 --- a/opendc-web/opendc-web-ui/src/components/home/StakeholderSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/StakeholderSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { Row, Col } from 'reactstrap' import ContentSection from './ContentSection' @@ -21,6 +22,12 @@ const Stakeholder = ({ name, title, subtitle }) => ( ) +Stakeholder.propTypes = { + name: PropTypes.string, + title: PropTypes.string, + subtitle: PropTypes.string, +} + const StakeholderSection = ({ className }) => ( @@ -33,4 +40,8 @@ const StakeholderSection = ({ className }) => ( ) +StakeholderSection.propTypes = { + className: PropTypes.string, +} + export default StakeholderSection diff --git a/opendc-web/opendc-web-ui/src/components/home/TeamSection.js b/opendc-web/opendc-web-ui/src/components/home/TeamSection.js index bbbe241e..dd057a93 100644 --- a/opendc-web/opendc-web-ui/src/components/home/TeamSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/TeamSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import Image from 'next/image' import { Row, Col } from 'reactstrap' @@ -23,6 +24,12 @@ const TeamLead = ({ photoId, name, description }) => ( ) +TeamLead.propTypes = { + photoId: PropTypes.string, + name: PropTypes.string, + description: PropTypes.string, +} + const TeamMember = ({ photoId, name }) => ( @@ -42,6 +49,11 @@ const TeamMember = ({ photoId, name }) => ( ) +TeamMember.propTypes = { + photoId: PropTypes.string, + name: PropTypes.string, +} + const TeamSection = ({ className }) => ( @@ -63,4 +75,8 @@ const TeamSection = ({ className }) => ( ) +TeamSection.propTypes = { + className: PropTypes.string, +} + export default TeamSection diff --git a/opendc-web/opendc-web-ui/src/components/home/TechnologiesSection.js b/opendc-web/opendc-web-ui/src/components/home/TechnologiesSection.js index efedebb7..e5131c2a 100644 --- a/opendc-web/opendc-web-ui/src/components/home/TechnologiesSection.js +++ b/opendc-web/opendc-web-ui/src/components/home/TechnologiesSection.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React from 'react' import { ListGroup, ListGroupItem } from 'reactstrap' import ContentSection from './ContentSection' @@ -39,4 +40,8 @@ const TechnologiesSection = ({ className }) => ( ) +TechnologiesSection.propTypes = { + className: PropTypes.string, +} + export default TechnologiesSection diff --git a/opendc-web/opendc-web-ui/src/components/modals/Modal.js b/opendc-web/opendc-web-ui/src/components/modals/Modal.js index 21b7f119..8ab3924c 100644 --- a/opendc-web/opendc-web-ui/src/components/modals/Modal.js +++ b/opendc-web/opendc-web-ui/src/components/modals/Modal.js @@ -42,6 +42,7 @@ Modal.propTypes = { onCancel: PropTypes.func.isRequired, submitButtonType: PropTypes.string, submitButtonText: PropTypes.string, + children: PropTypes.node, } Modal.defaultProps = { diff --git a/opendc-web/opendc-web-ui/src/components/navigation/AppNavbarComponent.js b/opendc-web/opendc-web-ui/src/components/navigation/AppNavbarComponent.js index 28207968..8aaaf847 100644 --- a/opendc-web/opendc-web-ui/src/components/navigation/AppNavbarComponent.js +++ b/opendc-web/opendc-web-ui/src/components/navigation/AppNavbarComponent.js @@ -1,15 +1,16 @@ +import PropTypes from 'prop-types' import React from 'react' import Link from 'next/link' -import { NavLink } from 'reactstrap' +import { NavLink, NavItem as RNavItem } from 'reactstrap' import Navbar, { NavItem } from './Navbar' -import {} from './Navbar.module.scss' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faList } from '@fortawesome/free-solid-svg-icons' +import { Project } from '../../shapes' const AppNavbarComponent = ({ project, fullWidth }) => ( - + My Projects @@ -17,15 +18,20 @@ const AppNavbarComponent = ({ project, fullWidth }) => ( {project ? ( - - + + {project.name} - + ) : undefined} ) +AppNavbarComponent.propTypes = { + project: Project, + fullWidth: PropTypes.bool, +} + export default AppNavbarComponent diff --git a/opendc-web/opendc-web-ui/src/components/navigation/HomeNavbar.js b/opendc-web/opendc-web-ui/src/components/navigation/HomeNavbar.js index 46d01a25..57cb7a53 100644 --- a/opendc-web/opendc-web-ui/src/components/navigation/HomeNavbar.js +++ b/opendc-web/opendc-web-ui/src/components/navigation/HomeNavbar.js @@ -1,22 +1,15 @@ import React from 'react' import { NavItem, NavLink } from 'reactstrap' import Navbar from './Navbar' -import {} from './Navbar.module.scss' - -const ScrollNavItem = ({ id, name }) => ( - - {name} - -) const HomeNavbar = () => ( - - - - - - + Stakeholders + Modeling + Project + Technologies + Team + Contact ) diff --git a/opendc-web/opendc-web-ui/src/components/navigation/Navbar.js b/opendc-web/opendc-web-ui/src/components/navigation/Navbar.js index 690a7bdf..dc74bb8f 100644 --- a/opendc-web/opendc-web-ui/src/components/navigation/Navbar.js +++ b/opendc-web/opendc-web-ui/src/components/navigation/Navbar.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types' import React, { useState } from 'react' import Link from 'next/link' import { useRouter } from 'next/router' @@ -45,6 +46,11 @@ export const NavItem = ({ route, children }) => { ) } +NavItem.propTypes = { + route: PropTypes.string.isRequired, + children: PropTypes.node, +} + export const LoggedInSection = () => { const router = useRouter() const { isAuthenticated } = useAuth() @@ -54,18 +60,18 @@ export const LoggedInSection = () => { [ router.asPath === '/' ? ( - + My Projects ) : ( - + - + ), @@ -106,4 +112,9 @@ const Navbar = ({ fullWidth, children }) => { ) } +Navbar.propTypes = { + fullWidth: PropTypes.bool, + children: PropTypes.node, +} + export default Navbar diff --git a/opendc-web/opendc-web-ui/src/components/projects/ProjectActionButtons.js b/opendc-web/opendc-web-ui/src/components/projects/ProjectActionButtons.js index 0725e42b..4adf3205 100644 --- a/opendc-web/opendc-web-ui/src/components/projects/ProjectActionButtons.js +++ b/opendc-web/opendc-web-ui/src/components/projects/ProjectActionButtons.js @@ -7,7 +7,7 @@ import { faPlay, faUsers, faTrash } from '@fortawesome/free-solid-svg-icons' const ProjectActionButtons = ({ projectId, onViewUsers, onDelete }) => ( - + diff --git a/opendc-web/opendc-web-ui/src/components/projects/ProjectList.js b/opendc-web/opendc-web-ui/src/components/projects/ProjectList.js index dc3f85ec..46ef4691 100644 --- a/opendc-web/opendc-web-ui/src/components/projects/ProjectList.js +++ b/opendc-web/opendc-web-ui/src/components/projects/ProjectList.js @@ -11,7 +11,7 @@ const ProjectList = ({ projects }) => { {projects.length === 0 ? (
    - No projects here yet... Add some with the 'New Project' button! + No projects here yet... Add some with the ‘New Project’ button!
    ) : ( diff --git a/opendc-web/opendc-web-ui/src/pages/_app.js b/opendc-web/opendc-web-ui/src/pages/_app.js index 4ef4445c..c1adbd6e 100644 --- a/opendc-web/opendc-web-ui/src/pages/_app.js +++ b/opendc-web/opendc-web-ui/src/pages/_app.js @@ -20,6 +20,7 @@ * SOFTWARE. */ +import PropTypes from 'prop-types' import Head from 'next/head' import { Provider } from 'react-redux' import { useStore } from '../redux' @@ -39,6 +40,13 @@ const Inner = ({ Component, pageProps }) => { ) } +Inner.propTypes = { + Component: PropTypes.func, + pageProps: PropTypes.shape({ + initialReduxState: PropTypes.object, + }).isRequired, +} + const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN // Initialize Sentry if the user has configured a DSN if (process.browser && dsn) { @@ -59,7 +67,7 @@ export default function App(props) { - + diff --git a/opendc-web/opendc-web-ui/src/pages/projects/index.js b/opendc-web/opendc-web-ui/src/pages/projects/index.js index 8603c228..958ca622 100644 --- a/opendc-web/opendc-web-ui/src/pages/projects/index.js +++ b/opendc-web/opendc-web-ui/src/pages/projects/index.js @@ -15,7 +15,7 @@ function Projects() { const dispatch = useDispatch() const [filter, setFilter] = useState('SHOW_ALL') - useEffect(() => dispatch(fetchProjects()), []) + useEffect(() => dispatch(fetchProjects()), [dispatch]) return ( <> diff --git a/opendc-web/opendc-web-ui/src/redux/index.js b/opendc-web/opendc-web-ui/src/redux/index.js index 5c908957..3c7ad55f 100644 --- a/opendc-web/opendc-web-ui/src/redux/index.js +++ b/opendc-web/opendc-web-ui/src/redux/index.js @@ -1,12 +1,12 @@ import { useMemo } from 'react' -import {applyMiddleware, compose, createStore} from 'redux' +import { applyMiddleware, compose, createStore } from 'redux' import { createLogger } from 'redux-logger' import createSagaMiddleware from 'redux-saga' import thunk from 'redux-thunk' import rootReducer from './reducers' import rootSaga from './sagas' import { viewportAdjustmentMiddleware } from './middleware/viewport-adjustment' -import { createReduxEnhancer } from "@sentry/react"; +import { createReduxEnhancer } from '@sentry/react' let store diff --git a/opendc-web/opendc-web-ui/src/util/timeline.js b/opendc-web/opendc-web-ui/src/util/timeline.js deleted file mode 100644 index 7c8a3ef0..00000000 --- a/opendc-web/opendc-web-ui/src/util/timeline.js +++ /dev/null @@ -1,9 +0,0 @@ -export function convertTickToPercentage(tick, maxTick) { - if (maxTick === 0) { - return '0%' - } else if (tick > maxTick) { - return (maxTick / (maxTick + 1)) * 100 + '%' - } - - return (tick / (maxTick + 1)) * 100 + '%' -} -- cgit v1.2.3