From 728f12e2215a142e0f0f72d9ae93b778bba204cf Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 22 May 2018 16:46:38 +0200 Subject: [PATCH 001/160] FLUX-160 Updated routing to be more localized inside the container --- src/components/projects/Project.jsx | 17 +- src/components/room/Room.jsx | 17 +- src/containers/app/App.jsx | 108 +------------ src/containers/layout/Layout.jsx | 14 +- src/containers/projects/ProjectsContainer.jsx | 150 ++++++++++++++++++ .../projects/ProjectsContainer.test.jsx | 16 ++ src/utils/NumberHelper.jsx | 5 + 7 files changed, 204 insertions(+), 123 deletions(-) create mode 100644 src/containers/projects/ProjectsContainer.jsx create mode 100644 src/containers/projects/ProjectsContainer.test.jsx create mode 100644 src/utils/NumberHelper.jsx diff --git a/src/components/projects/Project.jsx b/src/components/projects/Project.jsx index bd71203..da839c6 100644 --- a/src/components/projects/Project.jsx +++ b/src/components/projects/Project.jsx @@ -4,17 +4,30 @@ import Box from "grommet/components/Box"; import Header from "grommet/components/Header"; import Heading from "grommet/components/Heading"; +import NotFound from "../../components/notfound/NotFound"; import ContentBox from "../contentBox/ContentBox"; import ProjectModel from "../../models/Project"; import ItemsList from "../list/ItemsList"; import AnchorRoomItemRenderer from "../room/AnchorRoomItemRenderer"; type Props = { - project: ProjectModel, + projects: ProjectModel[], match: any }; -export default function Project({ project, match }: Props) { +function findProject(projects: ProjectModel[], projectId: number) { + return projects.find( + project => project.projectId === parseInt(projectId, 10) + ); +} + +export default function Project({ projects, match }: Props) { + const project = findProject(projects, match.params.projectId); + + if (!project) { + return ; + } + return ( diff --git a/src/components/room/Room.jsx b/src/components/room/Room.jsx index 9ea8808..961a806 100644 --- a/src/components/room/Room.jsx +++ b/src/components/room/Room.jsx @@ -7,7 +7,6 @@ import Article from "grommet/components/Article"; // eslint-disable-next-line import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; -import ProjectModel from "../../models/Project"; import Measurement from "../../models/Measurement"; import RoomModel from "../../models/Room"; import ItemsList from "../list/ItemsList"; @@ -16,11 +15,10 @@ import AnchorMeasurementItemRenderer from "../measurements/AnchorMeasurementItem type Props = { match: any, - room: RoomModel, - parentProject: ProjectModel + room: RoomModel }; -export default function Room({ match, room, parentProject }: Props) { +export default function Room({ match, room }: Props) { return (
@@ -52,15 +50,18 @@ export default function Room({ match, room, parentProject }: Props) { } function ShowMeasurement({ room, match }) { - let currentMeasurement: ?Measurement = null; + let currentMeasurement; if (match.params.measurementId) { currentMeasurement = room.measurements.find( measurement => measurement.measurementId === parseInt(match.params.measurementId, 10) ); - return ( - - ); + + if (currentMeasurement) { + return ( + + ); + } } return null; } diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index 6fc8c06..828cd2b 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -2,16 +2,12 @@ import React from "react"; import GrommetApp from "grommet/components/App"; import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; -import axios, { CancelToken, CancelTokenSource } from "axios"; +import axios from "axios"; -import RoomModel from "../../models/Room"; -import ProjectModel from "../../models/Project"; -import Room from "../../components/room/Room"; import Dashboard from "../../components/dashboard/Dashboard"; import NotFound from "../../components/notfound/NotFound"; -import Projects from "../../components/projects/Projects"; +import ProjectsContainer from "./../projects/ProjectsContainer"; import Layout from "../layout/Layout"; -import Project from "../../components/projects/Project"; import ImportExportContainer from "../importexport/ImportExportContainer"; import EditProject from "./../../containers/projects/EditProject"; import Login from "../login/LoginContainer"; @@ -21,123 +17,29 @@ import type { ToastMetadata } from "./../../components/toast/Toast"; type Prop = {}; type State = { - projects: ProjectModel[], - loading: boolean, toast?: ToastMetadata }; export default class App extends React.Component { - source: CancelTokenSource = CancelToken.source(); - constructor() { super(); (axios.defaults: Object).baseURL = process.env.REACT_APP_SERVICE_URI; // Sets the default URL for the rest of the applications lifetime. } - state = { - projects: [], - loading: true - }; - - componentDidMount() { - this.getProjects(); - } - - componentWillUnmount() { - this.source.cancel(); - } - - getProjects = () => { - this.setState({ loading: true }); - axios - .get(`/projects?limit=0`, { - cancelToken: this.source.token - }) - .then(result => { - const projs: ProjectModel[] = []; - result.data.forEach(d => { - projs.push(ProjectModel.fromObject(d)); - }); - this.setState({ projects: projs, loading: false }); - }) - .catch(error => { - if (!axios.isCancel(error)) { - this.setState({ projects: [], loading: false }); - } - }); - }; - - renderProjectsPage = () => ( - - ); - - renderProjectPage = ({ match }: { match: any }) => { - const { projects } = this.state; - - const foundProject = projects.find( - project => project.projectId === parseInt(match.params.projectId, 10) - ); - - if (foundProject) { - return ; - } - const infoMessage = `Das Projekt mit der ID ${ - match.params.projectId - } konnte nicht gefunden werden.`; - return ; - }; - - renderRoomPage = ({ match }: any) => { - const foundProject: ?ProjectModel = this.state.projects.find( - (project: ProjectModel) => - project.projectId === parseInt(match.params.projectId, 10) - ); - - if (foundProject) { - const foundRoom: ?RoomModel = foundProject.rooms.find( - (room: RoomModel) => room.roomId === parseInt(match.params.roomId, 10) - ); - - if (foundRoom) { - return ( - - ); - } - } - - const infoMessage = `Der Raum mit der ID ${ - match.params.roomId - } konnte nicht gefunden werden.`; - return ; - }; - render() { return (
- + - - - + - + diff --git a/src/containers/layout/Layout.jsx b/src/containers/layout/Layout.jsx index 614027d..45fa9ea 100644 --- a/src/containers/layout/Layout.jsx +++ b/src/containers/layout/Layout.jsx @@ -6,16 +6,12 @@ import Box from "grommet/components/Box"; import Button from "grommet/components/Button"; import SidebarIcon from "grommet/components/icons/base/Sidebar"; -import Project from "../../models/Project"; import Header from "../../components/header/Header"; import NavMenu from "../../components/navmenu/NavMenu"; import Sidebar from "../../components/sidebar/Sidebar"; -import Loading from "../../components/loading/Loading"; type Prop = { - children?: React.Node, - projects: Project[], - loading: boolean + children?: React.Node }; type State = { @@ -63,7 +59,7 @@ export default class Layout extends React.Component { }; render() { - const { children, projects, loading } = this.props; + const { children } = this.props; const title = "Flux-Coordinator"; const sidebarToggler: React.Node = this.state.isMobileScreen ? ( @@ -80,8 +76,6 @@ export default class Layout extends React.Component { } }; - const loadingOrChildren: React.Node = loading ? : children; - return ( { separator={false} > - + {this.state.isMobileScreen && header} - {loadingOrChildren} + {children} ); diff --git a/src/containers/projects/ProjectsContainer.jsx b/src/containers/projects/ProjectsContainer.jsx new file mode 100644 index 0000000..b9759ff --- /dev/null +++ b/src/containers/projects/ProjectsContainer.jsx @@ -0,0 +1,150 @@ +// @flow +import * as React from "react"; +import axios, { CancelToken, CancelTokenSource } from "axios"; +// eslint-disable-next-line +import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; + +import NotFound from "../../components/notfound/NotFound"; +import RoomComponent from "./../../components/room/Room"; +import ProjectComponent from "../../components/projects/Project"; +import ProjectsComponent from "../../components/projects/Projects"; +import LoadingComponent from "./../../components/loading/Loading"; +import Room from "../../models/Room"; +import Project from "../../models/Project"; +import { isNumber } from "./../../utils/NumberHelper"; + +type Props = { + match: any +}; + +type State = { + loading: boolean, + projects: Project[] +}; + +export default class ProjectsContainer extends React.Component { + source: CancelTokenSource = CancelToken.source(); + + state = { + loading: false, + projects: [] + }; + + loadProjects = () => { + this.setState({ loading: true }); + axios + .get(`/projects?limit=0`, { + cancelToken: this.source.token + }) + .then(result => { + const projs: Project[] = []; + result.data.forEach(d => { + projs.push(Project.fromObject(d)); + }); + this.setState({ projects: projs, loading: false }); + }) + .catch(error => { + if (!axios.isCancel(error)) { + this.setState({ projects: [], loading: false }); + } + }); + }; + + findProjectById = (projects: Project[], projectId: number | string) => { + const projectIdInt = parseInt(projectId, 10); + + return projects.find(project => project.projectId === projectIdInt); + }; + + findRoomInProject = (project: Project, roomId: number | string) => { + const roomIdInt = parseInt(roomId, 10); + for (const room of project.rooms) { + if (room.roomId === roomIdInt) return room; + } + }; + + findRoomById = ( + project: Project | Project[], + roomId: number | string, + projectId?: number | string + ) => { + const roomIdInt = parseInt(roomId, 10); + const projectIdInt = parseInt(projectId, 10); + + if (Array.isArray(project)) { + if (isNumber(projectIdInt)) { + const maybeProject = this.findProjectById(project, projectIdInt); + if (maybeProject) { + return this.findRoomInProject(maybeProject, roomIdInt); + } + return null; + } + + for (const p of project) { + const maybeRoom: Room = this.findRoomInProject(p, roomIdInt); + if (maybeRoom) { + return maybeRoom; + } + } + return null; + } + return this.findRoomInProject(project, roomIdInt); + }; + + componentDidMount() { + this.loadProjects(); + } + + componentWillUnmount() { + this.source.cancel(); + } + + render() { + const { match } = this.props; + const { loading, projects } = this.state; + + if (loading) { + return ; + } + + return ( + + { + const foundRoom = this.findRoomById( + projects, + match.params.roomId, + match.params.projectId + ); + return foundRoom ? ( + + ) : ( + + ); + }} + /> + ( + + )} + /> + ( + + )} + /> + + ); + } +} diff --git a/src/containers/projects/ProjectsContainer.test.jsx b/src/containers/projects/ProjectsContainer.test.jsx new file mode 100644 index 0000000..7c3c000 --- /dev/null +++ b/src/containers/projects/ProjectsContainer.test.jsx @@ -0,0 +1,16 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; +import { MemoryRouter, Route } from "react-router"; + +import ProjectsContainer from "./ProjectsContainer"; + +describe("", () => { + it("should render", () => { + shallow( + + } /> + + ); + }); +}); diff --git a/src/utils/NumberHelper.jsx b/src/utils/NumberHelper.jsx new file mode 100644 index 0000000..01d2a79 --- /dev/null +++ b/src/utils/NumberHelper.jsx @@ -0,0 +1,5 @@ +// @flow + +export function isNumber(n: number) { + return !isNaN(parseFloat(n)) && isFinite(n); +} From b7c232df5d821033c0a8ac124654dda62fb82584 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 22 May 2018 18:05:03 +0200 Subject: [PATCH 002/160] Added toast through context --- src/components/contentBox/ContentBox.jsx | 17 ---------- src/components/toast/ToastContext.jsx | 6 ++++ src/containers/app/App.jsx | 16 +++++++-- src/containers/projects/EditProject.jsx | 43 ++++++++++++++---------- 4 files changed, 45 insertions(+), 37 deletions(-) create mode 100644 src/components/toast/ToastContext.jsx diff --git a/src/components/contentBox/ContentBox.jsx b/src/components/contentBox/ContentBox.jsx index 9c7ed37..bb29ca6 100644 --- a/src/components/contentBox/ContentBox.jsx +++ b/src/components/contentBox/ContentBox.jsx @@ -6,27 +6,14 @@ import Article from "grommet/components/Article"; import Box from "grommet/components/Box"; import { withRouter } from "react-router"; -import Toast from "./../toast/Toast"; - -import type { ToastMetadata } from "./../toast/Toast"; - type Props = { heading: React.Node, children: React.Node, location: any }; -type State = { - toast?: ToastMetadata -}; - class ContentBox extends React.Component { - state = {}; - render() { - const toast = this.props.location.state - ? this.props.location.state.toast - : undefined; return (
@@ -35,10 +22,6 @@ class ContentBox extends React.Component {
{this.props.children} - this.setState({ toast: undefined })} - />
); } diff --git a/src/components/toast/ToastContext.jsx b/src/components/toast/ToastContext.jsx new file mode 100644 index 0000000..5f6308d --- /dev/null +++ b/src/components/toast/ToastContext.jsx @@ -0,0 +1,6 @@ +// @flow +import * as React from "react"; + +export const ToastContext = React.createContext({ + showToast: () => {} +}); diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index 828cd2b..d0ec32f 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -11,6 +11,8 @@ import Layout from "../layout/Layout"; import ImportExportContainer from "../importexport/ImportExportContainer"; import EditProject from "./../../containers/projects/EditProject"; import Login from "../login/LoginContainer"; +import Toast from "./../../components/toast/Toast"; +import { ToastContext } from "./../../components/toast/ToastContext"; import type { ToastMetadata } from "./../../components/toast/Toast"; @@ -26,9 +28,15 @@ export default class App extends React.Component { (axios.defaults: Object).baseURL = process.env.REACT_APP_SERVICE_URI; // Sets the default URL for the rest of the applications lifetime. } + state = {}; + + showToast = (metadata: ToastMetadata) => { + this.setState({ toast: metadata }); + }; + render() { return ( -
+ @@ -43,8 +51,12 @@ export default class App extends React.Component { + this.setState({ toast: undefined })} + /> -
+ ); } } diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index 7e0507e..f33dc94 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -8,6 +8,7 @@ import { Redirect } from "react-router-dom"; import Form from "./../../components/form/Form"; import Project from "../../models/Project"; +import { ToastContext } from "./../../components/toast/ToastContext"; import type { ToastMetadata } from "./../../components/toast/Toast"; @@ -52,7 +53,7 @@ export default class EditProject extends React.Component { }); }; - onSubmit = () => { + onSubmit = (showToast: () => void) => { this.saveProject(this.state.project) .then(result => { if (result.status === 201) { @@ -61,6 +62,12 @@ export default class EditProject extends React.Component { children: "Projekt abgespeichert" }; this.setState({ toast: toast, shouldRedirect: true }); + if (showToast) { + showToast({ + status: "ok", + children: "Projekt gespeichert" + }); + } } }) .catch(error => { @@ -102,24 +109,24 @@ export default class EditProject extends React.Component { return ; } return ( -
- - - - {this.state.shouldRedirect && ( - + + {showToast => ( + this.onSubmit(showToast)} + > + + + + {this.state.shouldRedirect && } + )} - + ); } } From b2d01ed582638edf99510f48006d031d421de0bf Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:01:28 +0200 Subject: [PATCH 003/160] Updated toast initialization --- src/containers/projects/EditProject.jsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index f33dc94..a88f6d6 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -53,7 +53,7 @@ export default class EditProject extends React.Component { }); }; - onSubmit = (showToast: () => void) => { + onSubmit = (showToast: (toast: ToastMetadata) => void) => { this.saveProject(this.state.project) .then(result => { if (result.status === 201) { @@ -61,12 +61,8 @@ export default class EditProject extends React.Component { status: "ok", children: "Projekt abgespeichert" }; - this.setState({ toast: toast, shouldRedirect: true }); if (showToast) { - showToast({ - status: "ok", - children: "Projekt gespeichert" - }); + showToast(toast); } } }) @@ -75,7 +71,9 @@ export default class EditProject extends React.Component { status: "critical", children: "Projekt konnte nicht gespeichert werden" }; - this.setState({ toast: toast }); + if (showToast) { + showToast(toast); + } }); }; From 4d9cc828f2d77e6c3aa70f00b9129b165542bd05 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:03:40 +0200 Subject: [PATCH 004/160] Updated toast typings --- src/components/toast/ToastContext.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/toast/ToastContext.jsx b/src/components/toast/ToastContext.jsx index 5f6308d..15a22ce 100644 --- a/src/components/toast/ToastContext.jsx +++ b/src/components/toast/ToastContext.jsx @@ -1,6 +1,8 @@ // @flow import * as React from "react"; +import type { ToastMetadata } from "./Toast"; + export const ToastContext = React.createContext({ - showToast: () => {} + showToast: (toast: ToastMetadata) => {} }); From d0f924719f52ce6ec27a6b65d8ebcce1d79b4435 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:19:11 +0200 Subject: [PATCH 005/160] Fixed type bug when using context Context can not be typed with Flow --- src/components/toast/ToastContext.jsx | 6 +++++- src/containers/projects/EditProject.jsx | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/toast/ToastContext.jsx b/src/components/toast/ToastContext.jsx index 15a22ce..605ac05 100644 --- a/src/components/toast/ToastContext.jsx +++ b/src/components/toast/ToastContext.jsx @@ -3,6 +3,10 @@ import * as React from "react"; import type { ToastMetadata } from "./Toast"; +type ShowToast = { + showToast: () => void +}; + export const ToastContext = React.createContext({ - showToast: (toast: ToastMetadata) => {} + showToast: () => {} }); diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index a88f6d6..b7f043f 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -22,6 +22,9 @@ type State = { shouldRedirect: boolean, toast?: ToastMetadata }; +type Test = { + t?: () => void +}; export default class EditProject extends React.Component { source: CancelTokenSource = CancelToken.source(); @@ -53,7 +56,7 @@ export default class EditProject extends React.Component { }); }; - onSubmit = (showToast: (toast: ToastMetadata) => void) => { + onSubmit = (showToast?: (toast: ToastMetadata) => void) => { this.saveProject(this.state.project) .then(result => { if (result.status === 201) { @@ -111,7 +114,7 @@ export default class EditProject extends React.Component { {showToast => (
this.onSubmit(showToast)} + onSubmit={() => this.onSubmit((showToast: any))} > Date: Wed, 23 May 2018 10:25:52 +0200 Subject: [PATCH 006/160] Fixed several typing bugs --- src/components/contentBox/ContentBox.jsx | 2 +- src/components/toast/ToastContext.jsx | 6 +----- src/containers/app/App.jsx | 2 +- src/containers/projects/EditProject.jsx | 1 + src/containers/projects/ProjectsContainer.jsx | 2 +- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/components/contentBox/ContentBox.jsx b/src/components/contentBox/ContentBox.jsx index bb29ca6..7a6e842 100644 --- a/src/components/contentBox/ContentBox.jsx +++ b/src/components/contentBox/ContentBox.jsx @@ -12,7 +12,7 @@ type Props = { location: any }; -class ContentBox extends React.Component { +class ContentBox extends React.Component { render() { return (
diff --git a/src/components/toast/ToastContext.jsx b/src/components/toast/ToastContext.jsx index 605ac05..2c52380 100644 --- a/src/components/toast/ToastContext.jsx +++ b/src/components/toast/ToastContext.jsx @@ -3,10 +3,6 @@ import * as React from "react"; import type { ToastMetadata } from "./Toast"; -type ShowToast = { - showToast: () => void -}; - export const ToastContext = React.createContext({ - showToast: () => {} + showToast: (metadata: ToastMetadata) => {} }); diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index d0ec32f..3ea8316 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -36,7 +36,7 @@ export default class App extends React.Component { render() { return ( - + diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index b7f043f..38ba12d 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -67,6 +67,7 @@ export default class EditProject extends React.Component { if (showToast) { showToast(toast); } + this.setState({ shouldRedirect: true }); } }) .catch(error => { diff --git a/src/containers/projects/ProjectsContainer.jsx b/src/containers/projects/ProjectsContainer.jsx index b9759ff..0235ca7 100644 --- a/src/containers/projects/ProjectsContainer.jsx +++ b/src/containers/projects/ProjectsContainer.jsx @@ -81,7 +81,7 @@ export default class ProjectsContainer extends React.Component { } for (const p of project) { - const maybeRoom: Room = this.findRoomInProject(p, roomIdInt); + const maybeRoom: ?Room = this.findRoomInProject(p, roomIdInt); if (maybeRoom) { return maybeRoom; } From 799fea0addd81d55fddb8f882533afd8b8c2d553 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:33:43 +0200 Subject: [PATCH 007/160] Added several render tests --- src/components/form/Form.test.jsx | 17 +++++++++ src/components/importexport/Export.test.jsx | 12 ++++++ src/components/importexport/Import.test.jsx | 12 ++++++ .../measurements/MeasurementSummary.test.jsx | 38 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 src/components/form/Form.test.jsx create mode 100644 src/components/importexport/Export.test.jsx create mode 100644 src/components/importexport/Import.test.jsx create mode 100644 src/components/measurements/MeasurementSummary.test.jsx diff --git a/src/components/form/Form.test.jsx b/src/components/form/Form.test.jsx new file mode 100644 index 0000000..aeb2976 --- /dev/null +++ b/src/components/form/Form.test.jsx @@ -0,0 +1,17 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; +import Title from "grommet/components/Title"; + +import Form from "./Form"; + +describe("", () => { + it("should render", () => { + const wrapper = shallow( + + Header + + ); + expect(wrapper).toHaveLength(1); + }); +}); diff --git a/src/components/importexport/Export.test.jsx b/src/components/importexport/Export.test.jsx new file mode 100644 index 0000000..89b75a7 --- /dev/null +++ b/src/components/importexport/Export.test.jsx @@ -0,0 +1,12 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; + +import Export from "./Export"; + +describe("", () => { + it("should render", () => { + const wrapper = shallow(); + expect(wrapper).toHaveLength(1); + }); +}); diff --git a/src/components/importexport/Import.test.jsx b/src/components/importexport/Import.test.jsx new file mode 100644 index 0000000..9545657 --- /dev/null +++ b/src/components/importexport/Import.test.jsx @@ -0,0 +1,12 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; + +import Import from "./Import"; + +describe("", () => { + it("should render", () => { + const wrapper = shallow( {}} />); + expect(wrapper).toHaveLength(1); + }); +}); diff --git a/src/components/measurements/MeasurementSummary.test.jsx b/src/components/measurements/MeasurementSummary.test.jsx new file mode 100644 index 0000000..9c8a6be --- /dev/null +++ b/src/components/measurements/MeasurementSummary.test.jsx @@ -0,0 +1,38 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; + +import Measurement from "./../../models/Measurement"; +import Room from "./../../models/Room"; +import MeasurementSummary from "./MeasurementSummary"; + +describe("", () => { + it("should render", () => { + const measurement = new Measurement( + 1, + "Test measurement", + new Date(), + new Date(), + "READY" + ); + const room = new Room( + "Test room", + "Test room", + ([measurement]: Measurement[]), + "", + 1, + 100, + 200, + 0.15, + 1 + ); + const wrapper = shallow( + {}} + /> + ); + expect(wrapper).toHaveLength(1); + }); +}); From fd2edf3eacc7da28cb1ca39d6066377bf6e7ee61 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:42:13 +0200 Subject: [PATCH 008/160] Updated some dependencies and flow-types --- .../npm/@storybook/addon-actions_v3.x.x.js | 6 +- flow-typed/npm/babel-core_vx.x.x.js | 13 +- flow-typed/npm/babel-eslint_vx.x.x.js | 4 +- flow-typed/npm/babel-jest_vx.x.x.js | 4 +- flow-typed/npm/babel-preset-env_vx.x.x.js | 4 +- flow-typed/npm/babel-preset-react_vx.x.x.js | 4 +- flow-typed/npm/concurrently_vx.x.x.js | 4 +- flow-typed/npm/cross-env_vx.x.x.js | 4 +- .../npm/enzyme-adapter-react-16_vx.x.x.js | 4 +- flow-typed/npm/eslint-config-airbnb_vx.x.x.js | 4 +- .../npm/eslint-config-prettier_vx.x.x.js | 4 +- .../npm/eslint-config-react-app_vx.x.x.js | 4 +- .../npm/eslint-plugin-flowtype_vx.x.x.js | 4 +- flow-typed/npm/eslint-plugin-import_vx.x.x.js | 4 +- .../npm/eslint-plugin-jsx-a11y_vx.x.x.js | 4 +- .../npm/eslint-plugin-prettier_vx.x.x.js | 4 +- flow-typed/npm/eslint-plugin-react_vx.x.x.js | 4 +- flow-typed/npm/eslint_vx.x.x.js | 4 +- flow-typed/npm/flow-typed_vx.x.x.js | 4 +- flow-typed/npm/grommet-addons_vx.x.x.js | 4 +- flow-typed/npm/heatmapjs_vx.x.x.js | 144 ++++++++++ flow-typed/npm/husky_vx.x.x.js | 4 +- flow-typed/npm/install-peerdeps_vx.x.x.js | 4 +- flow-typed/npm/js-file-download_vx.x.x.js | 32 +++ flow-typed/npm/node-sass-chokidar_vx.x.x.js | 4 +- flow-typed/npm/npm-run-all_vx.x.x.js | 4 +- flow-typed/npm/prettier-eslint_vx.x.x.js | 4 +- flow-typed/npm/pretty-quick_vx.x.x.js | 4 +- .../npm/react-resize-detector_vx.x.x.js | 41 +++ flow-typed/npm/react-router-dom_v4.x.x.js | 21 +- flow-typed/npm/react-scripts_vx.x.x.js | 4 +- flow-typed/npm/typeface-roboto_vx.x.x.js | 4 +- src/containers/projects/EditProject.jsx | 3 - yarn.lock | 250 +++++++++++------- 34 files changed, 449 insertions(+), 165 deletions(-) create mode 100644 flow-typed/npm/heatmapjs_vx.x.x.js create mode 100644 flow-typed/npm/js-file-download_vx.x.x.js create mode 100644 flow-typed/npm/react-resize-detector_vx.x.x.js diff --git a/flow-typed/npm/@storybook/addon-actions_v3.x.x.js b/flow-typed/npm/@storybook/addon-actions_v3.x.x.js index ba7de4c..19268e4 100644 --- a/flow-typed/npm/@storybook/addon-actions_v3.x.x.js +++ b/flow-typed/npm/@storybook/addon-actions_v3.x.x.js @@ -1,8 +1,8 @@ -// flow-typed signature: 9f7284fc113607b916f1c64b0640c2a2 -// flow-typed version: 1709d3212d/@storybook/addon-actions_v3.x.x/flow_>=v0.25.x +// flow-typed signature: 64850c161373321ab9eabcceb1268d56 +// flow-typed version: 5edd39ab2e/@storybook/addon-actions_v3.x.x/flow_>=v0.25.x declare module "@storybook/addon-actions" { - declare type Action = (name: string) => Function; + declare type Action = (name: string) => (...args: Array) => void; declare type DecorateFn = (args: Array) => Array; declare module.exports: { diff --git a/flow-typed/npm/babel-core_vx.x.x.js b/flow-typed/npm/babel-core_vx.x.x.js index f25648a..ab696c6 100644 --- a/flow-typed/npm/babel-core_vx.x.x.js +++ b/flow-typed/npm/babel-core_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 640dcf7cdffdff8dddcaaf78dadb5f3c -// flow-typed version: <>/babel-core_v^6.26.0/flow_v0.69.0 +// flow-typed signature: 08d47bb8be6730195df8c8b1abc667ac +// flow-typed version: <>/babel-core_v^6.26.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: @@ -78,6 +78,10 @@ declare module "babel-core/lib/transformation/file/logger" { declare module.exports: any; } +declare module "babel-core/lib/transformation/file/merge-map" { + declare module.exports: any; +} + declare module "babel-core/lib/transformation/file/metadata" { declare module.exports: any; } @@ -191,6 +195,11 @@ declare module "babel-core/lib/transformation/file/index.js" { declare module "babel-core/lib/transformation/file/logger.js" { declare module.exports: $Exports<"babel-core/lib/transformation/file/logger">; } +declare module "babel-core/lib/transformation/file/merge-map.js" { + declare module.exports: $Exports< + "babel-core/lib/transformation/file/merge-map" + >; +} declare module "babel-core/lib/transformation/file/metadata.js" { declare module.exports: $Exports< "babel-core/lib/transformation/file/metadata" diff --git a/flow-typed/npm/babel-eslint_vx.x.x.js b/flow-typed/npm/babel-eslint_vx.x.x.js index ad738d2..deb409a 100644 --- a/flow-typed/npm/babel-eslint_vx.x.x.js +++ b/flow-typed/npm/babel-eslint_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 7d8a567071271aca71f1d7c450898abf -// flow-typed version: <>/babel-eslint_v^8.2.2/flow_v0.69.0 +// flow-typed signature: b30564aa0c8eb0c970eb7bbca2156d3a +// flow-typed version: <>/babel-eslint_v^8.2.2/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/babel-jest_vx.x.x.js b/flow-typed/npm/babel-jest_vx.x.x.js index 0ec56e2..c21acd2 100644 --- a/flow-typed/npm/babel-jest_vx.x.x.js +++ b/flow-typed/npm/babel-jest_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 75b3bccd57b6eba723a724ffb80ca92a -// flow-typed version: <>/babel-jest_v^23.0.0-alpha.6r/flow_v0.69.0 +// flow-typed signature: 9711bed7d1b82d61affb15cdf9a0579b +// flow-typed version: <>/babel-jest_v^23.0.0-alpha.6r/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/babel-preset-env_vx.x.x.js b/flow-typed/npm/babel-preset-env_vx.x.x.js index 7463d27..98b1768 100644 --- a/flow-typed/npm/babel-preset-env_vx.x.x.js +++ b/flow-typed/npm/babel-preset-env_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: bda3a77185ea3a353196e1409d969036 -// flow-typed version: <>/babel-preset-env_v^1.6.1/flow_v0.69.0 +// flow-typed signature: 68cb472180604a12c9a79a9e96af6843 +// flow-typed version: <>/babel-preset-env_v^1.6.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/babel-preset-react_vx.x.x.js b/flow-typed/npm/babel-preset-react_vx.x.x.js index 19a5301..1e326a3 100644 --- a/flow-typed/npm/babel-preset-react_vx.x.x.js +++ b/flow-typed/npm/babel-preset-react_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 46ec1259939954a65717a38374f317fb -// flow-typed version: <>/babel-preset-react_v^6.24.1/flow_v0.69.0 +// flow-typed signature: 00d4a4f57b8243f69204faddb7fd0ec9 +// flow-typed version: <>/babel-preset-react_v^6.24.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/concurrently_vx.x.x.js b/flow-typed/npm/concurrently_vx.x.x.js index 4a1359b..dac6b9d 100644 --- a/flow-typed/npm/concurrently_vx.x.x.js +++ b/flow-typed/npm/concurrently_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: abc8bd6e18ea696dacd822c5811ecf8c -// flow-typed version: <>/concurrently_v^3.5.1/flow_v0.69.0 +// flow-typed signature: c8756f7ab56d3b63c43353c0b00ab527 +// flow-typed version: <>/concurrently_v^3.5.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/cross-env_vx.x.x.js b/flow-typed/npm/cross-env_vx.x.x.js index f5123fd..f23b977 100644 --- a/flow-typed/npm/cross-env_vx.x.x.js +++ b/flow-typed/npm/cross-env_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: d3eaccdd0d0a86addedd10d3aec2d14c -// flow-typed version: <>/cross-env_v^5.1.4/flow_v0.69.0 +// flow-typed signature: f0e1373c33509ce2c1c682bd314907ef +// flow-typed version: <>/cross-env_v^5.1.4/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/enzyme-adapter-react-16_vx.x.x.js b/flow-typed/npm/enzyme-adapter-react-16_vx.x.x.js index 3e7b8a9..8142ea6 100644 --- a/flow-typed/npm/enzyme-adapter-react-16_vx.x.x.js +++ b/flow-typed/npm/enzyme-adapter-react-16_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: b55edbf3961daef0addd5d5576d8a0d3 -// flow-typed version: <>/enzyme-adapter-react-16_v^1.1.1/flow_v0.69.0 +// flow-typed signature: bf740df2f514a2c3c799c9c978be9475 +// flow-typed version: <>/enzyme-adapter-react-16_v^1.1.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-config-airbnb_vx.x.x.js b/flow-typed/npm/eslint-config-airbnb_vx.x.x.js index f209f57..8dac2ed 100644 --- a/flow-typed/npm/eslint-config-airbnb_vx.x.x.js +++ b/flow-typed/npm/eslint-config-airbnb_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 2233f4da2d8d37989c5fae04ca0d9a87 -// flow-typed version: <>/eslint-config-airbnb_v16.1.0/flow_v0.69.0 +// flow-typed signature: 8ffe25013da31aa58e37e37fa118d965 +// flow-typed version: <>/eslint-config-airbnb_v16.1.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-config-prettier_vx.x.x.js b/flow-typed/npm/eslint-config-prettier_vx.x.x.js index 11c7d70..e8bb1dd 100644 --- a/flow-typed/npm/eslint-config-prettier_vx.x.x.js +++ b/flow-typed/npm/eslint-config-prettier_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 3711665c8cab1c09358ae8b972d2e47d -// flow-typed version: <>/eslint-config-prettier_v^2.9.0/flow_v0.69.0 +// flow-typed signature: bb5a1119b3b91d0f07c1d0ad7cee3814 +// flow-typed version: <>/eslint-config-prettier_v^2.9.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-config-react-app_vx.x.x.js b/flow-typed/npm/eslint-config-react-app_vx.x.x.js index 370a6e6..acd0da4 100644 --- a/flow-typed/npm/eslint-config-react-app_vx.x.x.js +++ b/flow-typed/npm/eslint-config-react-app_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 9eb7773e0fb010dff004f3117373fa09 -// flow-typed version: <>/eslint-config-react-app_v^2.1.0/flow_v0.69.0 +// flow-typed signature: 0c6e10282d7cfb77bd879ff476f4b738 +// flow-typed version: <>/eslint-config-react-app_v^2.1.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js b/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js index 5aeb53a..e6135eb 100644 --- a/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js +++ b/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: b6cee62d06ad86db0962aa2f6179c48f -// flow-typed version: <>/eslint-plugin-flowtype_v^2.46.1/flow_v0.69.0 +// flow-typed signature: 862e20636f5702c0d6085c877ff103b6 +// flow-typed version: <>/eslint-plugin-flowtype_v^2.46.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-plugin-import_vx.x.x.js b/flow-typed/npm/eslint-plugin-import_vx.x.x.js index 38f9cd4..fa08b88 100644 --- a/flow-typed/npm/eslint-plugin-import_vx.x.x.js +++ b/flow-typed/npm/eslint-plugin-import_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 48692da9159353db3136fe2fa07f4be0 -// flow-typed version: <>/eslint-plugin-import_v^2.11.0/flow_v0.69.0 +// flow-typed signature: 49929c2e6208e8fa48ffddbb6eeb9854 +// flow-typed version: <>/eslint-plugin-import_v^2.11.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-plugin-jsx-a11y_vx.x.x.js b/flow-typed/npm/eslint-plugin-jsx-a11y_vx.x.x.js index 5ba389c..fac10e9 100644 --- a/flow-typed/npm/eslint-plugin-jsx-a11y_vx.x.x.js +++ b/flow-typed/npm/eslint-plugin-jsx-a11y_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: d5452123075dd7edaed9dd600b1132a2 -// flow-typed version: <>/eslint-plugin-jsx-a11y_v6.0.3/flow_v0.69.0 +// flow-typed signature: e8e79788964ddd1c12370cffb16c074c +// flow-typed version: <>/eslint-plugin-jsx-a11y_v6.0.3/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-plugin-prettier_vx.x.x.js b/flow-typed/npm/eslint-plugin-prettier_vx.x.x.js index 50f2fdc..ddcea14 100644 --- a/flow-typed/npm/eslint-plugin-prettier_vx.x.x.js +++ b/flow-typed/npm/eslint-plugin-prettier_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 5ee51b1f6338b1d0ae6899264d7cfe9f -// flow-typed version: <>/eslint-plugin-prettier_v2.6.0/flow_v0.69.0 +// flow-typed signature: fbea8de079969f4aa0cbc984ad7d3173 +// flow-typed version: <>/eslint-plugin-prettier_v2.6.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint-plugin-react_vx.x.x.js b/flow-typed/npm/eslint-plugin-react_vx.x.x.js index 1d4810d..6b85cc5 100644 --- a/flow-typed/npm/eslint-plugin-react_vx.x.x.js +++ b/flow-typed/npm/eslint-plugin-react_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: d69461ea48e4f34c339a74ab9fb42d54 -// flow-typed version: <>/eslint-plugin-react_v7.7.0/flow_v0.69.0 +// flow-typed signature: 234d34357d5c546092367dd7ac9ba0d9 +// flow-typed version: <>/eslint-plugin-react_v^7.7.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/eslint_vx.x.x.js b/flow-typed/npm/eslint_vx.x.x.js index 8b39ab3..28911b5 100644 --- a/flow-typed/npm/eslint_vx.x.x.js +++ b/flow-typed/npm/eslint_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: f844f7003cd5706d223638d7977f6285 -// flow-typed version: <>/eslint_v^4.19.1/flow_v0.69.0 +// flow-typed signature: 6dfbdb84922c5551e53ff33efaeefafe +// flow-typed version: <>/eslint_v^4.19.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/flow-typed_vx.x.x.js b/flow-typed/npm/flow-typed_vx.x.x.js index 0061f00..87c090d 100644 --- a/flow-typed/npm/flow-typed_vx.x.x.js +++ b/flow-typed/npm/flow-typed_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 78a6d22874f3ad904d1ac98d2b3a7df3 -// flow-typed version: <>/flow-typed_v^2.4.0/flow_v0.69.0 +// flow-typed signature: 1291c62c38601583a9ec13e6bd24f7f9 +// flow-typed version: <>/flow-typed_v^2.4.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/grommet-addons_vx.x.x.js b/flow-typed/npm/grommet-addons_vx.x.x.js index af9918e..85554e9 100644 --- a/flow-typed/npm/grommet-addons_vx.x.x.js +++ b/flow-typed/npm/grommet-addons_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 2bd4a3eb4a6059c8f26f8b85fd8c3a31 -// flow-typed version: <>/grommet-addons_v^0.6.0/flow_v0.69.0 +// flow-typed signature: 3599b3342a7f6a0a60ba7798e625fa1a +// flow-typed version: <>/grommet-addons_v^0.6.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/heatmapjs_vx.x.x.js b/flow-typed/npm/heatmapjs_vx.x.x.js new file mode 100644 index 0000000..3521303 --- /dev/null +++ b/flow-typed/npm/heatmapjs_vx.x.x.js @@ -0,0 +1,144 @@ +// flow-typed signature: 16a92055faf349cbadc3884f21ad8cde +// flow-typed version: <>/heatmapjs_vgit+https://github.com/JonathanWi/heatmap.js.git/flow_v0.72.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'heatmapjs' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module "heatmapjs" { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module "heatmapjs/build/heatmap" { + declare module.exports: any; +} + +declare module "heatmapjs/build/heatmap.min" { + declare module.exports: any; +} + +declare module "heatmapjs/docs/assets/js/prism" { + declare module.exports: any; +} + +declare module "heatmapjs/Gruntfile" { + declare module.exports: any; +} + +declare module "heatmapjs/plugins/boilerplate" { + declare module.exports: any; +} + +declare module "heatmapjs/plugins/gmaps-heatmap" { + declare module.exports: any; +} + +declare module "heatmapjs/plugins/leaflet-heatmap" { + declare module.exports: any; +} + +declare module "heatmapjs/plugins/segment-heatmap" { + declare module.exports: any; +} + +declare module "heatmapjs/plugins/svg-area-heatmap" { + declare module.exports: any; +} + +declare module "heatmapjs/src/config" { + declare module.exports: any; +} + +declare module "heatmapjs/src/core" { + declare module.exports: any; +} + +declare module "heatmapjs/src/data" { + declare module.exports: any; +} + +declare module "heatmapjs/src/renderer" { + declare module.exports: any; +} + +declare module "heatmapjs/src/renderer/canvas-webgl" { + declare module.exports: any; +} + +declare module "heatmapjs/src/renderer/canvas2d" { + declare module.exports: any; +} + +declare module "heatmapjs/src/renderer/vml" { + declare module.exports: any; +} + +declare module "heatmapjs/src/util" { + declare module.exports: any; +} + +// Filename aliases +declare module "heatmapjs/build/heatmap.js" { + declare module.exports: $Exports<"heatmapjs/build/heatmap">; +} +declare module "heatmapjs/build/heatmap.min.js" { + declare module.exports: $Exports<"heatmapjs/build/heatmap.min">; +} +declare module "heatmapjs/docs/assets/js/prism.js" { + declare module.exports: $Exports<"heatmapjs/docs/assets/js/prism">; +} +declare module "heatmapjs/Gruntfile.js" { + declare module.exports: $Exports<"heatmapjs/Gruntfile">; +} +declare module "heatmapjs/plugins/boilerplate.js" { + declare module.exports: $Exports<"heatmapjs/plugins/boilerplate">; +} +declare module "heatmapjs/plugins/gmaps-heatmap.js" { + declare module.exports: $Exports<"heatmapjs/plugins/gmaps-heatmap">; +} +declare module "heatmapjs/plugins/leaflet-heatmap.js" { + declare module.exports: $Exports<"heatmapjs/plugins/leaflet-heatmap">; +} +declare module "heatmapjs/plugins/segment-heatmap.js" { + declare module.exports: $Exports<"heatmapjs/plugins/segment-heatmap">; +} +declare module "heatmapjs/plugins/svg-area-heatmap.js" { + declare module.exports: $Exports<"heatmapjs/plugins/svg-area-heatmap">; +} +declare module "heatmapjs/src/config.js" { + declare module.exports: $Exports<"heatmapjs/src/config">; +} +declare module "heatmapjs/src/core.js" { + declare module.exports: $Exports<"heatmapjs/src/core">; +} +declare module "heatmapjs/src/data.js" { + declare module.exports: $Exports<"heatmapjs/src/data">; +} +declare module "heatmapjs/src/renderer.js" { + declare module.exports: $Exports<"heatmapjs/src/renderer">; +} +declare module "heatmapjs/src/renderer/canvas-webgl.js" { + declare module.exports: $Exports<"heatmapjs/src/renderer/canvas-webgl">; +} +declare module "heatmapjs/src/renderer/canvas2d.js" { + declare module.exports: $Exports<"heatmapjs/src/renderer/canvas2d">; +} +declare module "heatmapjs/src/renderer/vml.js" { + declare module.exports: $Exports<"heatmapjs/src/renderer/vml">; +} +declare module "heatmapjs/src/util.js" { + declare module.exports: $Exports<"heatmapjs/src/util">; +} diff --git a/flow-typed/npm/husky_vx.x.x.js b/flow-typed/npm/husky_vx.x.x.js index 30c99b6..a91b2fb 100644 --- a/flow-typed/npm/husky_vx.x.x.js +++ b/flow-typed/npm/husky_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 7c33f627df4dbbf2be926d413ab2101a -// flow-typed version: <>/husky_v^0.15.0-rc.10/flow_v0.69.0 +// flow-typed signature: d714bc1e05a395171404f7fbfb86eb8a +// flow-typed version: <>/husky_v^0.15.0-rc.10/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/install-peerdeps_vx.x.x.js b/flow-typed/npm/install-peerdeps_vx.x.x.js index 0d2a205..4ae86e5 100644 --- a/flow-typed/npm/install-peerdeps_vx.x.x.js +++ b/flow-typed/npm/install-peerdeps_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: ee4094faaad50e716108d43ef8270a6d -// flow-typed version: <>/install-peerdeps_v^1.6.0/flow_v0.69.0 +// flow-typed signature: ebf35a4a0c7e5abfb5e635b8c5524554 +// flow-typed version: <>/install-peerdeps_v^1.6.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/js-file-download_vx.x.x.js b/flow-typed/npm/js-file-download_vx.x.x.js new file mode 100644 index 0000000..a9846a2 --- /dev/null +++ b/flow-typed/npm/js-file-download_vx.x.x.js @@ -0,0 +1,32 @@ +// flow-typed signature: 3b312235f4458d0beefdf1788774e5ad +// flow-typed version: <>/js-file-download_v^0.4.1/flow_v0.72.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'js-file-download' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module "js-file-download" { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module "js-file-download/file-download" { + declare module.exports: any; +} + +// Filename aliases +declare module "js-file-download/file-download.js" { + declare module.exports: $Exports<"js-file-download/file-download">; +} diff --git a/flow-typed/npm/node-sass-chokidar_vx.x.x.js b/flow-typed/npm/node-sass-chokidar_vx.x.x.js index 9c39a66..f499ace 100644 --- a/flow-typed/npm/node-sass-chokidar_vx.x.x.js +++ b/flow-typed/npm/node-sass-chokidar_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 8582bdf0a8388cf09ba86a406cfaac38 -// flow-typed version: <>/node-sass-chokidar_v^1.2.0/flow_v0.69.0 +// flow-typed signature: 29508d19b6b7dcc22e4fdc5b06298a16 +// flow-typed version: <>/node-sass-chokidar_v^1.2.0/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/npm-run-all_vx.x.x.js b/flow-typed/npm/npm-run-all_vx.x.x.js index 99bc3bd..7fa0563 100644 --- a/flow-typed/npm/npm-run-all_vx.x.x.js +++ b/flow-typed/npm/npm-run-all_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 2ad7e47afb294d364fb2aa6600b9dd3a -// flow-typed version: <>/npm-run-all_v^4.1.2/flow_v0.69.0 +// flow-typed signature: 34913a488a581125031c282d1de3990f +// flow-typed version: <>/npm-run-all_v^4.1.2/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/prettier-eslint_vx.x.x.js b/flow-typed/npm/prettier-eslint_vx.x.x.js index f0b360f..58b50c6 100644 --- a/flow-typed/npm/prettier-eslint_vx.x.x.js +++ b/flow-typed/npm/prettier-eslint_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 931d6789bccc37143afd85e8fd8a3923 -// flow-typed version: <>/prettier-eslint_v^8.8.1/flow_v0.69.0 +// flow-typed signature: 584e9db0555f3c5dea08429548fcb09d +// flow-typed version: <>/prettier-eslint_v^8.8.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/pretty-quick_vx.x.x.js b/flow-typed/npm/pretty-quick_vx.x.x.js index 64dba43..69811c9 100644 --- a/flow-typed/npm/pretty-quick_vx.x.x.js +++ b/flow-typed/npm/pretty-quick_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: de78cf1cf4e130abf572b5706e12c25e -// flow-typed version: <>/pretty-quick_v^1.4.1/flow_v0.69.0 +// flow-typed signature: eb46b71538b2261cf09187db70406fc1 +// flow-typed version: <>/pretty-quick_v^1.4.1/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/react-resize-detector_vx.x.x.js b/flow-typed/npm/react-resize-detector_vx.x.x.js new file mode 100644 index 0000000..bd71bad --- /dev/null +++ b/flow-typed/npm/react-resize-detector_vx.x.x.js @@ -0,0 +1,41 @@ +// flow-typed signature: 23401ca447be3b12e721b87fe133ce67 +// flow-typed version: <>/react-resize-detector_v^2.3.0/flow_v0.72.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'react-resize-detector' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module "react-resize-detector" { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module "react-resize-detector/lib/components/ResizeDetector" { + declare module.exports: any; +} + +declare module "react-resize-detector/lib/index" { + declare module.exports: any; +} + +// Filename aliases +declare module "react-resize-detector/lib/components/ResizeDetector.js" { + declare module.exports: $Exports< + "react-resize-detector/lib/components/ResizeDetector" + >; +} +declare module "react-resize-detector/lib/index.js" { + declare module.exports: $Exports<"react-resize-detector/lib/index">; +} diff --git a/flow-typed/npm/react-router-dom_v4.x.x.js b/flow-typed/npm/react-router-dom_v4.x.x.js index 12fd273..4c3a63b 100644 --- a/flow-typed/npm/react-router-dom_v4.x.x.js +++ b/flow-typed/npm/react-router-dom_v4.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 60904532a0b2eae42e097223d1999f8e -// flow-typed version: f821d89401/react-router-dom_v4.x.x/flow_>=v0.53.x +// flow-typed signature: e5a7aa81d9e40346b8b63c86c07c3005 +// flow-typed version: 83f1c5c51e/react-router-dom_v4.x.x/flow_>=v0.63.x declare module "react-router-dom" { declare export class BrowserRouter extends React$Component<{ @@ -90,12 +90,19 @@ declare module "react-router-dom" { staticContext?: StaticRouterContext |}; + declare type ContextRouterVoid = { + history: RouterHistory | void, + location: Location | void, + match: Match | void, + staticContext?: StaticRouterContext | void + }; + declare export type GetUserConfirmation = ( message: string, callback: (confirmed: boolean) => void ) => void; - declare type StaticRouterContext = { + declare export type StaticRouterContext = { url?: string }; @@ -142,9 +149,11 @@ declare module "react-router-dom" { children?: React$Node }> {} - declare export function withRouter

( - Component: React$ComponentType<{| ...ContextRouter, ...P |}> - ): React$ComponentType

; + declare export function withRouter>( + WrappedComponent: Component + ): React$ComponentType< + $Diff, ContextRouterVoid> + >; declare type MatchPathOptions = { path?: string, diff --git a/flow-typed/npm/react-scripts_vx.x.x.js b/flow-typed/npm/react-scripts_vx.x.x.js index b737052..37e3dad 100644 --- a/flow-typed/npm/react-scripts_vx.x.x.js +++ b/flow-typed/npm/react-scripts_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 446244b07375c5b8f16ce8e466486414 -// flow-typed version: <>/react-scripts_v^1.1.4/flow_v0.69.0 +// flow-typed signature: ad9c88a083be1a474b617580ee24102d +// flow-typed version: <>/react-scripts_v^1.1.4/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/typeface-roboto_vx.x.x.js b/flow-typed/npm/typeface-roboto_vx.x.x.js index 1218e8c..1cfe330 100644 --- a/flow-typed/npm/typeface-roboto_vx.x.x.js +++ b/flow-typed/npm/typeface-roboto_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: eaa6716ebb395eed79efe33fb55d6f29 -// flow-typed version: <>/typeface-roboto_v^0.0.54/flow_v0.69.0 +// flow-typed signature: 0e43f2f9fc4dca53adeae545caae039b +// flow-typed version: <>/typeface-roboto_v^0.0.54/flow_v0.72.0 /** * This is an autogenerated libdef stub for: diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index 38ba12d..7768ef3 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -22,9 +22,6 @@ type State = { shouldRedirect: boolean, toast?: ToastMetadata }; -type Test = { - t?: () => void -}; export default class EditProject extends React.Component { source: CancelTokenSource = CancelToken.source(); diff --git a/yarn.lock b/yarn.lock index 4e8726f..ea20167 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,11 +78,11 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@storybook/addon-actions@3.4.4", "@storybook/addon-actions@^3.4.1": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.4.4.tgz#03cc675977b6c6ce44a4dd7e2d36a910848af85f" +"@storybook/addon-actions@3.4.5", "@storybook/addon-actions@^3.4.1": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.4.5.tgz#ba0d0c0c74357c0852e0b890b404214975df40a8" dependencies: - "@storybook/components" "3.4.4" + "@storybook/components" "3.4.5" babel-runtime "^6.26.0" deep-equal "^1.0.1" glamor "^2.20.40" @@ -93,52 +93,52 @@ react-inspector "^2.2.2" uuid "^3.2.1" -"@storybook/addon-links@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.4.4.tgz#ff2a7c810c97fe465b25e417752eeebb5322ed9c" +"@storybook/addon-links@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.4.5.tgz#c885dae976f5084faa0ae026755f2d6068da034f" dependencies: - "@storybook/components" "3.4.4" + "@storybook/components" "3.4.5" babel-runtime "^6.26.0" global "^4.3.2" prop-types "^15.6.1" -"@storybook/addons@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.4.4.tgz#5f3203791df83499247a8bc4034788943500ff16" +"@storybook/addons@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.4.5.tgz#8dd6eb93ae26b4498a9b1e2b890316944efa41da" -"@storybook/channel-postmessage@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.4.4.tgz#96ead79c7752c747c355f297f4f344a44763600b" +"@storybook/channel-postmessage@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.4.5.tgz#8c7de674847dec2a154947e0b99e54a2618c79cb" dependencies: - "@storybook/channels" "3.4.4" + "@storybook/channels" "3.4.5" global "^4.3.2" json-stringify-safe "^5.0.1" -"@storybook/channels@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.4.4.tgz#a0492404d21231dcbe12716707472dd4549fb37a" +"@storybook/channels@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.4.5.tgz#cb8e3798cdcbed0b7037e634fb029cdd758c73a8" -"@storybook/client-logger@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.4.4.tgz#e76a457e7a19ba7a66fae9cce91bf52e6ece3f6e" +"@storybook/client-logger@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.4.5.tgz#aca45699b14d6663c694ab3253d46bc257f8783e" -"@storybook/components@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.4.4.tgz#272bcbdb2ac28583de049f75352f9eec76835641" +"@storybook/components@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.4.5.tgz#02653ba562e3678eab3adbc31b012eae4fbe61dc" dependencies: glamor "^2.20.40" glamorous "^4.12.1" prop-types "^15.6.1" -"@storybook/core@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-3.4.4.tgz#4335974772bcdf858b5ccbc7f89d9cd6090e7889" +"@storybook/core@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-3.4.5.tgz#a34a498eace85d29a12559a895c420f5ae54b0b7" dependencies: - "@storybook/addons" "3.4.4" - "@storybook/channel-postmessage" "3.4.4" - "@storybook/client-logger" "3.4.4" - "@storybook/node-logger" "3.4.4" - "@storybook/ui" "3.4.4" + "@storybook/addons" "3.4.5" + "@storybook/channel-postmessage" "3.4.5" + "@storybook/client-logger" "3.4.5" + "@storybook/node-logger" "3.4.5" + "@storybook/ui" "3.4.5" autoprefixer "^7.2.6" babel-runtime "^6.26.0" chalk "^2.3.2" @@ -170,9 +170,9 @@ "@storybook/react-simple-di" "^1.2.1" babel-runtime "6.x.x" -"@storybook/node-logger@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.4.4.tgz#f4378e63d3fb6addc76f9a8baaf5be4dae7811f4" +"@storybook/node-logger@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.4.5.tgz#d08c082b0d4a573736f25c2e0eea261b30183962" dependencies: npmlog "^4.1.2" @@ -209,17 +209,17 @@ babel-runtime "^6.5.0" "@storybook/react@^3.4.1": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.4.4.tgz#53c9c8f50283ee9bdc8bfcb882cbf74b0658a4f1" - dependencies: - "@storybook/addon-actions" "3.4.4" - "@storybook/addon-links" "3.4.4" - "@storybook/addons" "3.4.4" - "@storybook/channel-postmessage" "3.4.4" - "@storybook/client-logger" "3.4.4" - "@storybook/core" "3.4.4" - "@storybook/node-logger" "3.4.4" - "@storybook/ui" "3.4.4" + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.4.5.tgz#1979423f365252cf03a4508db26b676f239c1e80" + dependencies: + "@storybook/addon-actions" "3.4.5" + "@storybook/addon-links" "3.4.5" + "@storybook/addons" "3.4.5" + "@storybook/channel-postmessage" "3.4.5" + "@storybook/client-logger" "3.4.5" + "@storybook/core" "3.4.5" + "@storybook/node-logger" "3.4.5" + "@storybook/ui" "3.4.5" airbnb-js-shims "^1.4.1" babel-loader "^7.1.4" babel-plugin-macros "^2.2.0" @@ -252,11 +252,11 @@ webpack "^3.11.0" webpack-hot-middleware "^2.22.1" -"@storybook/ui@3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.4.4.tgz#2bb8ba4cdb7711695e018c2cc2db0a7e1c48a09a" +"@storybook/ui@3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.4.5.tgz#b11e97590b5e09b2d1452c0a4b84567780ec3390" dependencies: - "@storybook/components" "3.4.4" + "@storybook/components" "3.4.5" "@storybook/mantra-core" "^1.7.2" "@storybook/podda" "^1.2.3" "@storybook/react-komposer" "^2.0.3" @@ -332,12 +332,13 @@ address@1.0.3, address@^1.0.1: resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" airbnb-js-shims@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-1.4.1.tgz#cc3e8eb8d35877f9d0fdc6583e26b0ee75b98ad0" + version "1.5.1" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-1.5.1.tgz#5d7614a76ca7bfdcfc3162eefe4011aff870aee8" dependencies: array-includes "^3.0.3" - array.prototype.flatmap "^1.2.0" - array.prototype.flatten "^1.2.0" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + array.prototype.flatten "^1.2.1" es5-shim "^4.5.10" es6-shim "^0.35.3" function.prototype.name "^1.1.0" @@ -347,6 +348,7 @@ airbnb-js-shims@^1.4.1: promise.prototype.finally "^3.1.0" string.prototype.padend "^3.0.0" string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: version "2.1.1" @@ -553,7 +555,15 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -array.prototype.flatmap@^1.2.0: +array.prototype.flat@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +array.prototype.flatmap@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" dependencies: @@ -561,7 +571,7 @@ array.prototype.flatmap@^1.2.0: es-abstract "^1.10.0" function-bind "^1.1.1" -array.prototype.flatten@^1.2.0: +array.prototype.flatten@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flatten/-/array.prototype.flatten-1.2.1.tgz#a77ae1b64524ce373b137fade324d12040d3c680" dependencies: @@ -631,7 +641,13 @@ async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.2, async@^2.1.4, async@^2.4.1: +async@^2.1.2, async@^2.1.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + +async@^2.4.1: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -2157,13 +2173,17 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000840" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000840.tgz#68d5a0f0694c92180b0d82e720d70f8e61366604" + version "1.0.30000844" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000844.tgz#bca5798cda2b6931d68100c2d69e55fb338cbb41" -caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000835: +caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000835: version "1.0.30000840" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000840.tgz#344513f8f843536cf99694964c09811277eee395" +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: + version "1.0.30000844" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000844.tgz#de7c84cde0582143cf4f5abdf1b98e5a0539ad4a" + capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" @@ -2667,8 +2687,8 @@ create-react-class@^15.5.1, create-react-class@^15.6.2: object-assign "^4.1.1" cross-env@^5.1.4: - version "5.1.5" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.5.tgz#31daf7f3a52ef337c8ddda585f08175cce5d1fa5" + version "5.1.6" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.6.tgz#0dc05caf945b24e4b9e3b12871fe0e858d08b38d" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -2863,8 +2883,8 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": cssom "0.3.x" csstype@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.1.tgz#654231d1ddddfc3eb93da281a1144e7c14fc0bdc" + version "2.5.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.2.tgz#4534308476ceede8fbe148b9b99f9baf1c80fa06" currently-unhandled@^0.4.1: version "0.4.1" @@ -3229,7 +3249,11 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.45: +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: + version "1.3.48" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz#d3b0d8593814044e092ece2108fc3ac9aea4b900" + +electron-to-chromium@^1.3.45: version "1.3.45" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz#458ac1b1c5c760ce8811a16d2bfbd97ec30bafb8" @@ -4273,13 +4297,20 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0, fsevents@^1.1.2, fsevents@^1.1.3: +fsevents@^1.0.0, fsevents@^1.1.3: version "1.2.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" dependencies: nan "^2.9.2" node-pre-gyp "^0.9.0" +fsevents@^1.1.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" @@ -4841,8 +4872,8 @@ html-loader@^0.5.5: object-assign "^4.1.1" html-minifier@^3.2.3, html-minifier@^3.5.8: - version "3.5.15" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.15.tgz#f869848d4543cbfd84f26d5514a2a87cbf9a05e0" + version "3.5.16" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.16.tgz#39f5aabaf78bdfc057fe67334226efd7f3851175" dependencies: camel-case "3.0.x" clean-css "4.1.x" @@ -4921,8 +4952,8 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.12" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.12.tgz#b9cfbf4a2cf26f0fc34b10ca1489a27771e3474f" + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" http-proxy-middleware@~0.17.4: version "0.17.4" @@ -5856,10 +5887,14 @@ jest@20.0.4: dependencies: jest-cli "^20.0.4" -js-base64@^2.1.8, js-base64@^2.1.9: +js-base64@^2.1.8: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" +js-base64@^2.1.9: + version "2.4.5" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" + js-cookie@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" @@ -6250,7 +6285,7 @@ lodash.zip@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.4: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.4: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -6303,10 +6338,6 @@ lru-queue@0.1: dependencies: es5-ext "~0.10.2" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -6551,10 +6582,10 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" minipass@^2.2.1, minipass@^2.2.4: - version "2.3.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.0.tgz#2e11b1c46df7fe7f1afbe9a490280add21ffe384" + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" dependencies: - safe-buffer "^5.1.1" + safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.0: @@ -6773,6 +6804,21 @@ node-notifier@^5.0.2: shellwords "^0.1.1" which "^1.3.0" +node-pre-gyp@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.0" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.1.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-pre-gyp@^0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" @@ -7411,11 +7457,10 @@ postcss-discard-unused@^2.2.1: uniqs "^2.0.0" postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" dependencies: postcss "^5.0.4" - uniqid "^4.0.0" postcss-flexbugs-fixes@3.2.0: version "3.2.0" @@ -7720,8 +7765,8 @@ pretty-format@^22.0.3: ansi-styles "^3.2.0" pretty-quick@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.4.1.tgz#9d41f778d2d4d940ec603d1293a0998e84c4722c" + version "1.6.0" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.6.0.tgz#afc3591eb5c4cf37614a305d489a8a40e57c9258" dependencies: chalk "^2.3.0" execa "^0.8.0" @@ -7830,8 +7875,8 @@ pump@^2.0.0, pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.0.tgz#30c905a26c88fa0074927af07256672b474b1c15" + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -8006,8 +8051,8 @@ react-dom@^16.3.1: prop-types "^15.6.0" react-dropzone@^4.2.9: - version "4.2.9" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.9.tgz#98156ce4d4cb018f7c5099eeb2eaff6dc21836fd" + version "4.2.10" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.10.tgz#49de76346f5f56bc3e76aeab5604f4cddd0e87fb" dependencies: attr-accept "^1.0.3" prop-types "^15.5.7" @@ -9395,6 +9440,12 @@ symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +symbol.prototype.description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" + dependencies: + has-symbols "^1.0.0" + table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -9642,9 +9693,9 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.3.x, uglify-js@^3.0.13: - version "3.3.25" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.25.tgz#3266ccb87c5bea229f69041a0296010d6477d539" +uglify-js@3.3.x: + version "3.3.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.27.tgz#eb8c3c9429969f86ff5b0a2422ffc78c3cea8cc0" dependencies: commander "~2.15.0" source-map "~0.6.1" @@ -9658,6 +9709,13 @@ uglify-js@^2.6, uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.0.13: + version "3.3.25" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.25.tgz#3266ccb87c5bea229f69041a0296010d6477d539" + dependencies: + commander "~2.15.0" + source-map "~0.6.1" + uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -9700,12 +9758,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" @@ -9766,8 +9818,8 @@ unzipper@^0.8.11: setimmediate "~1.0.4" upath@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.5.tgz#02cab9ecebe95bbec6d5fc2566325725ab6d1a73" + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" update-notifier@^2.3.0: version "2.5.0" From deb8d46ddf823383e108b649f319c5c9cea2e836 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 10:49:02 +0200 Subject: [PATCH 009/160] Updated to fix bug with syntax highlighting in VSCode --- src/containers/projects/EditProject.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index 7768ef3..d6ff366 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -109,10 +109,10 @@ export default class EditProject extends React.Component { } return ( - {showToast => ( + {(showToast: any) => (

this.onSubmit((showToast: any))} + onSubmit={() => this.onSubmit(showToast)} > Date: Wed, 23 May 2018 11:17:58 +0200 Subject: [PATCH 010/160] Updated Project CRUD form, type names and Project model --- .../heatmapConfigForm/HeatmapConfigForm.jsx | 4 +-- .../HeatmapConfigForm.test.jsx | 4 +-- .../heatmapModeForm/HeatmapModeForm.jsx | 4 +-- .../heatmapModeForm/HeatmapModeForm.test.jsx | 4 +-- .../measurements/MeasurementSummary.jsx | 8 ++--- src/components/projects/Project.test.jsx | 7 +++- .../transformationForm/TransformationForm.jsx | 4 +-- .../TransformationForm.test.jsx | 4 +-- src/containers/projects/EditProject.jsx | 32 +++++++++++++------ src/models/Project.jsx | 14 ++++++-- src/utils/DataGenerator.jsx | 7 +++- src/utils/InputHandler.jsx | 4 +-- 12 files changed, 63 insertions(+), 33 deletions(-) diff --git a/src/components/heatmapConfigForm/HeatmapConfigForm.jsx b/src/components/heatmapConfigForm/HeatmapConfigForm.jsx index afee44f..db31944 100644 --- a/src/components/heatmapConfigForm/HeatmapConfigForm.jsx +++ b/src/components/heatmapConfigForm/HeatmapConfigForm.jsx @@ -6,12 +6,12 @@ import FormFields from "grommet/components/FormFields"; import NumberInput from "grommet/components/NumberInput"; import type { ConfigObject } from "../../types/Heatmap"; import { inputHandler } from "../../utils/InputHandler"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; type Props = { configObject: ConfigObject, onSubmit: () => void, - onChange: (string, allInputTypes) => void + onChange: (string, AllInputTypes) => void }; export default function HeatmapConfigForm({ diff --git a/src/components/heatmapConfigForm/HeatmapConfigForm.test.jsx b/src/components/heatmapConfigForm/HeatmapConfigForm.test.jsx index 1a580bb..363a605 100644 --- a/src/components/heatmapConfigForm/HeatmapConfigForm.test.jsx +++ b/src/components/heatmapConfigForm/HeatmapConfigForm.test.jsx @@ -4,11 +4,11 @@ import { shallow } from "enzyme"; import HeatmapConfigForm from "./HeatmapConfigForm"; import type { ConfigObject } from "../../types/Heatmap"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; describe("", () => { const onSubmit = () => {}; - const onChange = (key: string, value: allInputTypes) => {}; + const onChange = (key: string, value: AllInputTypes) => {}; const configObject: ConfigObject = {}; it("should render", () => { diff --git a/src/components/heatmapModeForm/HeatmapModeForm.jsx b/src/components/heatmapModeForm/HeatmapModeForm.jsx index a657bbf..2650d7b 100644 --- a/src/components/heatmapModeForm/HeatmapModeForm.jsx +++ b/src/components/heatmapModeForm/HeatmapModeForm.jsx @@ -6,11 +6,11 @@ import FormFields from "grommet/components/FormFields"; import CheckBox from "grommet/components/CheckBox"; import type { HeatmapModes } from "../../types/Heatmap"; import { inputHandler } from "../../utils/InputHandler"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; type Props = { heatmapModes: HeatmapModes, - onChange: (string, allInputTypes) => void + onChange: (string, AllInputTypes) => void }; export default function HeatmapModeForm({ heatmapModes, onChange }: Props) { diff --git a/src/components/heatmapModeForm/HeatmapModeForm.test.jsx b/src/components/heatmapModeForm/HeatmapModeForm.test.jsx index f951c9f..a1d275b 100644 --- a/src/components/heatmapModeForm/HeatmapModeForm.test.jsx +++ b/src/components/heatmapModeForm/HeatmapModeForm.test.jsx @@ -4,10 +4,10 @@ import { shallow } from "enzyme"; import HeatmapModeForm from "./HeatmapModeForm"; import type { HeatmapModes } from "../../types/Heatmap"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; describe("", () => { - const onChange = (key: string, value: allInputTypes) => {}; + const onChange = (key: string, value: AllInputTypes) => {}; const heatmapModes: HeatmapModes = { showCoverage: false, showAnchors: false diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index feae7b5..9568c8f 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -19,7 +19,7 @@ import TransformationForm from "../transformationForm/TransformationForm"; import HeatmapConfigForm from "../heatmapConfigForm/HeatmapConfigForm"; import { EXAMPLE_IMAGE } from "../../images/ImagesBase64"; import HeatmapModeForm from "../heatmapModeForm/HeatmapModeForm"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; import Loading from "../loading/Loading"; type Props = { @@ -56,7 +56,7 @@ export default class MeasurementSummary extends React.Component { }); } - handleTransformationChange = (key: string, value: allInputTypes) => { + handleTransformationChange = (key: string, value: AllInputTypes) => { this.setState((prevState, props) => ({ transformation: Object.assign(prevState.transformation, { [key]: parseFloat(value) @@ -64,7 +64,7 @@ export default class MeasurementSummary extends React.Component { })); }; - handleModeChange = (key: string, value: allInputTypes) => { + handleModeChange = (key: string, value: AllInputTypes) => { this.setState((prevState, props) => ({ heatmapModes: Object.assign(prevState.heatmapModes, { [key]: value @@ -72,7 +72,7 @@ export default class MeasurementSummary extends React.Component { })); }; - handleHeatmapConfigChange = (key: string, value: allInputTypes) => { + handleHeatmapConfigChange = (key: string, value: AllInputTypes) => { this.setState((prevState, props) => ({ configObject: Object.assign(prevState.configObject, { [key]: parseFloat(value) diff --git a/src/components/projects/Project.test.jsx b/src/components/projects/Project.test.jsx index ae1cdfe..1f1a92f 100644 --- a/src/components/projects/Project.test.jsx +++ b/src/components/projects/Project.test.jsx @@ -8,7 +8,12 @@ import Project from "./Project"; describe("", () => { it("should render", () => { - const project = new ProjectModel("First Project", [], 5234); + const project = new ProjectModel( + "First Project", + "First Project", + [], + 5234 + ); shallow( } /> diff --git a/src/components/transformationForm/TransformationForm.jsx b/src/components/transformationForm/TransformationForm.jsx index 9105cfe..674c2aa 100644 --- a/src/components/transformationForm/TransformationForm.jsx +++ b/src/components/transformationForm/TransformationForm.jsx @@ -6,12 +6,12 @@ import FormFields from "grommet/components/FormFields"; import NumberInput from "grommet/components/NumberInput"; import Transformation from "../../models/Transformation"; import { inputHandler } from "../../utils/InputHandler"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; type Props = { transformation: Transformation, onSubmit: () => void, - onChange: (string, allInputTypes) => void + onChange: (string, AllInputTypes) => void }; export default function TransformationForm({ diff --git a/src/components/transformationForm/TransformationForm.test.jsx b/src/components/transformationForm/TransformationForm.test.jsx index a6db9bf..ca9d24d 100644 --- a/src/components/transformationForm/TransformationForm.test.jsx +++ b/src/components/transformationForm/TransformationForm.test.jsx @@ -4,11 +4,11 @@ import { shallow } from "enzyme"; import TransformationForm from "./TransformationForm"; import Transformation from "../../models/Transformation"; -import type { allInputTypes } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; describe("", () => { const onSubmit = () => {}; - const onChange = (key: string, value: allInputTypes) => {}; + const onChange = (key: string, value: AllInputTypes) => {}; it("should render", () => { const wrapper = shallow( diff --git a/src/containers/projects/EditProject.jsx b/src/containers/projects/EditProject.jsx index d6ff366..53ea060 100644 --- a/src/containers/projects/EditProject.jsx +++ b/src/containers/projects/EditProject.jsx @@ -9,7 +9,9 @@ import { Redirect } from "react-router-dom"; import Form from "./../../components/form/Form"; import Project from "../../models/Project"; import { ToastContext } from "./../../components/toast/ToastContext"; +import { inputHandler } from "../../utils/InputHandler"; +import type { AllInputTypes } from "../../utils/InputHandler"; import type { ToastMetadata } from "./../../components/toast/Toast"; type Props = { @@ -26,7 +28,11 @@ type State = { export default class EditProject extends React.Component { source: CancelTokenSource = CancelToken.source(); state = { - project: new Project("uninitialized project", []), + project: new Project( + "uninitialized project", + "This project is uninitialized. Probably an error!", + [] + ), loading: true, shouldRedirect: false }; @@ -43,12 +49,11 @@ export default class EditProject extends React.Component { }); }; - onTitleChanged = (event: SyntheticEvent) => { - const target = event.currentTarget; - const value = target.value; - - this.setState(prevState => { - prevState.project.name = value; + onProjectChanged = (key: string, value: AllInputTypes) => { + this.setState((prevState, props) => { + prevState.project = Object.assign(prevState.project, { + [key]: value + }); return prevState; }); }; @@ -80,12 +85,11 @@ export default class EditProject extends React.Component { componentDidMount() { const projectId = this.props.match.params.projectId; - let project: Project; if (typeof projectId === "undefined") { this.setState({ - project: new Project("", []), + project: new Project("", "", []), loading: false }); } else { @@ -119,7 +123,15 @@ export default class EditProject extends React.Component { name="name" placeholder="Projektname eingeben" value={this.state.project.name} - onDOMChange={this.onTitleChanged} + onDOMChange={inputHandler(this.onProjectChanged)} + /> + + + {this.state.shouldRedirect && } diff --git a/src/models/Project.jsx b/src/models/Project.jsx index a00404d..76f92c4 100644 --- a/src/models/Project.jsx +++ b/src/models/Project.jsx @@ -3,6 +3,7 @@ import Room from "./Room"; type ConstructorType = { name: string, + description: string, rooms: Room[], projectId: ?number }; @@ -10,19 +11,26 @@ type ConstructorType = { export default class Project { projectId: ?number; name: string; + description: string; rooms: Room[]; - constructor(name: string, rooms: Room[], projectId: ?number) { + constructor( + name: string, + description: string, + rooms: Room[], + projectId: ?number + ) { this.projectId = projectId; this.name = name; + this.description = description; this.rooms = rooms; } - static fromObject({ name, rooms, projectId }: ConstructorType) { + static fromObject({ name, description, rooms, projectId }: ConstructorType) { const typedRoomObjects: Room[] = []; rooms.forEach(r => { typedRoomObjects.push(Room.fromObject(r)); }); - return new Project(name, typedRoomObjects, projectId); + return new Project(name, description, typedRoomObjects, projectId); } } diff --git a/src/utils/DataGenerator.jsx b/src/utils/DataGenerator.jsx index 64b1586..5c5527f 100644 --- a/src/utils/DataGenerator.jsx +++ b/src/utils/DataGenerator.jsx @@ -41,7 +41,12 @@ export default class DataGenerator { rooms.push(DataGenerator.createRoom(amountOfMeasurementPerRoom)); } - return new Project("My First Project", rooms, DataGenerator.getRandomInt()); + return new Project( + "My First Project", + "Project description", + rooms, + DataGenerator.getRandomInt() + ); } static createProjects( diff --git a/src/utils/InputHandler.jsx b/src/utils/InputHandler.jsx index 9905702..2dda83a 100644 --- a/src/utils/InputHandler.jsx +++ b/src/utils/InputHandler.jsx @@ -1,7 +1,7 @@ // @flow -export type allInputTypes = string | number | boolean; +export type AllInputTypes = string | number | boolean; -export const inputHandler = (callback: (string, allInputTypes) => void) => ( +export const inputHandler = (callback: (string, AllInputTypes) => void) => ( event: SyntheticEvent ) => { if ( From daf7a364d589a25d6455b326b79767283c8615d5 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 13:02:06 +0200 Subject: [PATCH 011/160] Updated List Items --- public/index.html | 2 +- src/components/list/ItemsList.jsx | 2 +- .../AnchorMeasurementItemRenderer.jsx | 19 ++++++++++++++----- .../projects/AnchorProjectItemRenderer.jsx | 10 +++++++++- .../room/AnchorRoomItemRenderer.jsx | 9 +++++++-- src/index.scss | 6 ++++++ 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/public/index.html b/public/index.html index 3a6f697..59b967d 100644 --- a/public/index.html +++ b/public/index.html @@ -1,5 +1,5 @@ - + diff --git a/src/components/list/ItemsList.jsx b/src/components/list/ItemsList.jsx index e43c30d..d9f8108 100644 --- a/src/components/list/ItemsList.jsx +++ b/src/components/list/ItemsList.jsx @@ -57,7 +57,7 @@ export default function ItemsList({ {items && items.map(item => ( - + ))} diff --git a/src/components/measurements/AnchorMeasurementItemRenderer.jsx b/src/components/measurements/AnchorMeasurementItemRenderer.jsx index 10cc1cd..44c4b7d 100644 --- a/src/components/measurements/AnchorMeasurementItemRenderer.jsx +++ b/src/components/measurements/AnchorMeasurementItemRenderer.jsx @@ -1,6 +1,8 @@ // @flow import * as React from "react"; -import Anchor from "grommet/components/Anchor"; +import Box from "grommet/components/Box"; +import Button from "grommet/components/Button"; +import Timestamp from "grommet/components/Timestamp"; import Measurement from "../../models/Measurement"; @@ -12,10 +14,17 @@ type Props = { export default function AnchorMeasurementItemRenderer({ item, match }: Props) { if (item.measurementId) { return ( - - {item.description} - {item.startDate.toLocaleString()} - + ); } else { return null; diff --git a/src/components/projects/AnchorProjectItemRenderer.jsx b/src/components/projects/AnchorProjectItemRenderer.jsx index ae4435d..3cb7355 100644 --- a/src/components/projects/AnchorProjectItemRenderer.jsx +++ b/src/components/projects/AnchorProjectItemRenderer.jsx @@ -1,5 +1,6 @@ // @flow import * as React from "react"; +import Button from "grommet/components/Button"; import Anchor from "grommet/components/Anchor"; import Project from "../../models/Project"; @@ -10,7 +11,14 @@ type Props = { export default function AnchorProjectItemRenderer({ item }: Props) { if (item.projectId) { - return {item.name}; + return ( + + ); } else { return null; } diff --git a/src/components/room/AnchorRoomItemRenderer.jsx b/src/components/room/AnchorRoomItemRenderer.jsx index c31c25d..4c2b6f7 100644 --- a/src/components/room/AnchorRoomItemRenderer.jsx +++ b/src/components/room/AnchorRoomItemRenderer.jsx @@ -1,6 +1,6 @@ // @flow import * as React from "react"; -import Anchor from "grommet/components/Anchor"; +import Button from "grommet/components/Button"; import Room from "../../models/Room"; @@ -12,7 +12,12 @@ type Props = { export default function AnchorProjectItemRenderer({ item, match }: Props) { if (item.roomId) { return ( - {item.name} + ); } else { return null; diff --git a/src/index.scss b/src/index.scss index fd4f7e1..3e1917c 100644 --- a/src/index.scss +++ b/src/index.scss @@ -3,3 +3,9 @@ #sidebar-toggler { border: 0; } + +.custom-list-anchor { + width: 100%; + padding-bottom: 24px !important; + padding-top: 24px !important; +} From 5d8a1aef188aa4b2fc959482e5cd4b516e2e40aa Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 13:16:18 +0200 Subject: [PATCH 012/160] Updated item renderers for the export wizard --- src/components/projects/AnchorProjectItemRenderer.jsx | 1 - src/containers/importexport/wizard/SelectMeasurementsStep.jsx | 2 +- src/containers/importexport/wizard/SelectProjectsStep.jsx | 2 +- src/containers/importexport/wizard/SelectRoomsStep.jsx | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/projects/AnchorProjectItemRenderer.jsx b/src/components/projects/AnchorProjectItemRenderer.jsx index 3cb7355..582fb0d 100644 --- a/src/components/projects/AnchorProjectItemRenderer.jsx +++ b/src/components/projects/AnchorProjectItemRenderer.jsx @@ -1,7 +1,6 @@ // @flow import * as React from "react"; import Button from "grommet/components/Button"; -import Anchor from "grommet/components/Anchor"; import Project from "../../models/Project"; diff --git a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx index f61899b..1282c0a 100644 --- a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx +++ b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx @@ -121,7 +121,7 @@ export default class SelectMeasurementsStep extends React.Component< } function MeasurementItemRenderer({ item }: { item: Measurement }) { - return item.description; + return
{item.description}
; } function getItemsFromArrayByIndex( diff --git a/src/containers/importexport/wizard/SelectProjectsStep.jsx b/src/containers/importexport/wizard/SelectProjectsStep.jsx index fbf43bf..88d1332 100644 --- a/src/containers/importexport/wizard/SelectProjectsStep.jsx +++ b/src/containers/importexport/wizard/SelectProjectsStep.jsx @@ -76,5 +76,5 @@ export default class SelectProjectsStep extends React.Component< } function ProjectItemRenderer({ item }: { item: Project }) { - return item.name; + return
{item.name}
; } diff --git a/src/containers/importexport/wizard/SelectRoomsStep.jsx b/src/containers/importexport/wizard/SelectRoomsStep.jsx index c17d33a..36189d7 100644 --- a/src/containers/importexport/wizard/SelectRoomsStep.jsx +++ b/src/containers/importexport/wizard/SelectRoomsStep.jsx @@ -109,5 +109,5 @@ export default class SelectRoomsStep extends React.Component { } function RoomItemRenderer({ item }: { item: Room }) { - return item.name; + return
{item.name}
; } From 03af08fa8b8c6efbb941fb28bed3f951ae093123 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 15:55:02 +0200 Subject: [PATCH 013/160] Added edit button for the projects, rooms and measurements --- src/components/list/ItemListAnchorButton.jsx | 17 ++++++++++++++ src/components/list/ItemListEditButton.jsx | 21 ++++++++++++++++++ src/components/list/ItemsList.jsx | 4 +++- .../AnchorMeasurementItemRenderer.jsx | 22 +++++++++---------- .../projects/AnchorProjectItemRenderer.jsx | 17 +++++++------- .../room/AnchorRoomItemRenderer.jsx | 15 +++++++------ 6 files changed, 68 insertions(+), 28 deletions(-) create mode 100644 src/components/list/ItemListAnchorButton.jsx create mode 100644 src/components/list/ItemListEditButton.jsx diff --git a/src/components/list/ItemListAnchorButton.jsx b/src/components/list/ItemListAnchorButton.jsx new file mode 100644 index 0000000..5728ab6 --- /dev/null +++ b/src/components/list/ItemListAnchorButton.jsx @@ -0,0 +1,17 @@ +// @flow +import * as React from "react"; +import Box from "grommet/components/Box"; +import Button from "grommet/components/Button"; + +type Props = { + path: string, + children: React.Node +}; + +export default function ItemListAnchoButton({ path, children }: Props) { + return ( + + ); +} diff --git a/src/components/list/ItemListEditButton.jsx b/src/components/list/ItemListEditButton.jsx new file mode 100644 index 0000000..c36a73b --- /dev/null +++ b/src/components/list/ItemListEditButton.jsx @@ -0,0 +1,21 @@ +// @flow +import * as React from "react"; +import Button from "grommet/components/Button"; +import EditIcon from "grommet/components/icons/base/Edit"; + +type Props = { + path: string +}; + +export default function ItemListAnchoButton({ path }: Props) { + return ( + + + + ); } else { return null; diff --git a/src/components/projects/AnchorProjectItemRenderer.jsx b/src/components/projects/AnchorProjectItemRenderer.jsx index 582fb0d..ef15256 100644 --- a/src/components/projects/AnchorProjectItemRenderer.jsx +++ b/src/components/projects/AnchorProjectItemRenderer.jsx @@ -1,22 +1,23 @@ // @flow import * as React from "react"; -import Button from "grommet/components/Button"; import Project from "../../models/Project"; +import ItemListAnchorButton from "../list/ItemListAnchorButton"; +import ItemListEditButton from "../list/ItemListEditButton"; type Props = { item: Project }; -export default function AnchorProjectItemRenderer({ item }: Props) { +export default function AnchorProjectItemRenderer({ item, onEdit }: Props) { if (item.projectId) { return ( - + + + {item.name} + + + ); } else { return null; diff --git a/src/components/room/AnchorRoomItemRenderer.jsx b/src/components/room/AnchorRoomItemRenderer.jsx index 4c2b6f7..55fa468 100644 --- a/src/components/room/AnchorRoomItemRenderer.jsx +++ b/src/components/room/AnchorRoomItemRenderer.jsx @@ -1,8 +1,9 @@ // @flow import * as React from "react"; -import Button from "grommet/components/Button"; import Room from "../../models/Room"; +import ItemListAnchorButton from "../list/ItemListAnchorButton"; +import ItemListEditButton from "../list/ItemListEditButton"; type Props = { item: Room, @@ -12,12 +13,12 @@ type Props = { export default function AnchorProjectItemRenderer({ item, match }: Props) { if (item.roomId) { return ( - + + + {item.name} + + + ); } else { return null; From efcf0f7e791b960ccf83636728986a56ef1479c8 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 16:06:33 +0200 Subject: [PATCH 014/160] FLUX-153 Add buttons for the lists --- src/components/list/ItemListHeader.jsx | 22 +++++++++++++++++++ src/components/projects/AddProjectButton.jsx | 8 ------- .../projects/AddProjectButton.test.jsx | 11 ---------- src/components/projects/Project.jsx | 5 ++--- src/components/projects/Projects.jsx | 11 +++++----- src/components/room/Room.jsx | 5 ++--- 6 files changed, 31 insertions(+), 31 deletions(-) create mode 100644 src/components/list/ItemListHeader.jsx delete mode 100644 src/components/projects/AddProjectButton.jsx delete mode 100644 src/components/projects/AddProjectButton.test.jsx diff --git a/src/components/list/ItemListHeader.jsx b/src/components/list/ItemListHeader.jsx new file mode 100644 index 0000000..c8be299 --- /dev/null +++ b/src/components/list/ItemListHeader.jsx @@ -0,0 +1,22 @@ +// @flow +import * as React from "react"; +import Header from "grommet/components/Header"; +import Heading from "grommet/components/Heading"; +import Button from "grommet/components/Button"; +import AddIcon from "grommet/components/icons/base/Add"; + +type Props = { + header: React.Node, + path: string +}; + +export default function ItemListHeader({ header, path }: Props) { + return ( +
+ + {header} + +
+ ); +} diff --git a/src/components/projects/AddProjectButton.jsx b/src/components/projects/AddProjectButton.jsx deleted file mode 100644 index feb0f6c..0000000 --- a/src/components/projects/AddProjectButton.jsx +++ /dev/null @@ -1,8 +0,0 @@ -// @flow -import * as React from "react"; -import Anchor from "grommet/components/Anchor"; -import AddIcon from "grommet/components/icons/base/Add"; - -export default function AddProjectButton() { - return } path="/editProject" />; -} diff --git a/src/components/projects/AddProjectButton.test.jsx b/src/components/projects/AddProjectButton.test.jsx deleted file mode 100644 index 77ddc92..0000000 --- a/src/components/projects/AddProjectButton.test.jsx +++ /dev/null @@ -1,11 +0,0 @@ -// @flow -import * as React from "react"; -import { shallow } from "enzyme"; - -import AddProjectButton from "./AddProjectButton"; - -describe("", () => { - it("should render", () => { - shallow(); - }); -}); diff --git a/src/components/projects/Project.jsx b/src/components/projects/Project.jsx index da839c6..1b825b7 100644 --- a/src/components/projects/Project.jsx +++ b/src/components/projects/Project.jsx @@ -8,6 +8,7 @@ import NotFound from "../../components/notfound/NotFound"; import ContentBox from "../contentBox/ContentBox"; import ProjectModel from "../../models/Project"; import ItemsList from "../list/ItemsList"; +import ItemListHeader from "./../list/ItemListHeader"; import AnchorRoomItemRenderer from "../room/AnchorRoomItemRenderer"; type Props = { @@ -31,9 +32,7 @@ export default function Project({ projects, match }: Props) { return ( -
- Räume -
+ item.roomId} diff --git a/src/components/projects/Projects.jsx b/src/components/projects/Projects.jsx index 6a9ea0a..a6f4d3f 100644 --- a/src/components/projects/Projects.jsx +++ b/src/components/projects/Projects.jsx @@ -1,16 +1,18 @@ // @flow import * as React from "react"; import Header from "grommet/components/Header"; +import Heading from "grommet/components/Heading"; +import Button from "grommet/components/Button"; import Title from "grommet/components/Title"; import Section from "grommet/components/Section"; import Box from "grommet/components/Box"; import Search from "grommet/components/Search"; -import Heading from "grommet/components/Heading"; +import AddIcon from "grommet/components/icons/base/Add"; import ContentBox from "../contentBox/ContentBox"; import ItemsList from "./../list/ItemsList"; +import ItemListHeader from "./../list/ItemListHeader"; import Project from "../../models/Project"; -import AddProjectButton from "./AddProjectButton"; import AnchorProjectItemRenderer from "./AnchorProjectItemRenderer"; import type { ToastMetadata } from "./../toast/Toast"; @@ -45,10 +47,7 @@ export default class Projects extends React.Component {
-
- Projekte - -
+ project.projectId} diff --git a/src/components/room/Room.jsx b/src/components/room/Room.jsx index 961a806..5f7accd 100644 --- a/src/components/room/Room.jsx +++ b/src/components/room/Room.jsx @@ -10,6 +10,7 @@ import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; import Measurement from "../../models/Measurement"; import RoomModel from "../../models/Room"; import ItemsList from "../list/ItemsList"; +import ItemListHeader from "./../list/ItemListHeader"; import MeasurementContainer from "../../containers/measurements/MeasurementContainer"; import AnchorMeasurementItemRenderer from "../measurements/AnchorMeasurementItemRenderer"; @@ -34,9 +35,7 @@ export default function Room({ match, room }: Props) { }} />
-
- Messungen -
+ item.measurementId} From d9a46aa1d579ddd5a70efbb38b73247439cf2e33 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 23 May 2018 16:07:41 +0200 Subject: [PATCH 015/160] FLUX-153 Add optional path --- src/components/list/ItemListHeader.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/list/ItemListHeader.jsx b/src/components/list/ItemListHeader.jsx index c8be299..1a11564 100644 --- a/src/components/list/ItemListHeader.jsx +++ b/src/components/list/ItemListHeader.jsx @@ -7,7 +7,7 @@ import AddIcon from "grommet/components/icons/base/Add"; type Props = { header: React.Node, - path: string + path?: string }; export default function ItemListHeader({ header, path }: Props) { @@ -16,7 +16,7 @@ export default function ItemListHeader({ header, path }: Props) { {header} -
{ - return ShowMeasurement({ room, match }); - }} + component={({ match }) => ( + + )} />
- measurement.measurementId === parseInt(match.params.measurementId, 10) - ); - - if (currentMeasurement) { - return ( - - ); - } - } - return null; -} - Room.defaultProps = { currentMeasurement: null }; diff --git a/src/containers/measurements/MeasurementContainer.jsx b/src/containers/measurements/MeasurementContainer.jsx index 55ed379..68cc9c1 100644 --- a/src/containers/measurements/MeasurementContainer.jsx +++ b/src/containers/measurements/MeasurementContainer.jsx @@ -6,10 +6,10 @@ import MeasurementSummary from "../../components/measurements/MeasurementSummary import ReadingModel from "../../models/Reading"; import RoomModel from "../../models/Room"; import MeasurementModel from "../../models/Measurement"; +import { ToastContext } from "./../../components/toast/ToastContext"; type Props = { room: RoomModel, - measurement: MeasurementModel, match: any }; @@ -29,13 +29,13 @@ export default class MeasurementContainer extends React.Component< keepAliveTimer = null; state = { - loading: false, - currentMeasurement: this.props.measurement + loading: true, + currentMeasurement: new MeasurementModel(undefined, "", "", 0, 0) }; - getReadings = () => { + fetchMeasurement = () => { this.setState({ loading: true }); - const measurementId = this.props.measurement.measurementId; + const measurementId = this.props.match.params.measurementId; if (measurementId != null) { axios .get(`/measurements/${measurementId}`, { @@ -47,14 +47,13 @@ export default class MeasurementContainer extends React.Component< }) .catch(error => { if (!axios.isCancel(error)) { - this.setState( - ({ - currentMeasurement: this.props.measurement, - loading: false - }: State) - ); + this.setState({ + loading: false + }); } }); + } else { + alert("Konnte die Messung nicht laden."); } }; @@ -93,7 +92,7 @@ export default class MeasurementContainer extends React.Component< }); } else { alert( - "Es gab einen Fehler und die Messung konnte nicht gestartet werden (die Messungs ID ist unbekannt)" + "Es gab einen Fehler. Die Messung konnte nicht gestartet werden (die Messungs ID ist unbekannt)" ); } }; @@ -144,13 +143,33 @@ export default class MeasurementContainer extends React.Component< }); }; - saveMeasurement = (measurement: MeasurementModel) => { + saveMeasurement = (showToast?: (toast: ToastMetadata) => void) => { const roomId = this.props.room.roomId; - const exportMeasurement = measurement.toDto(); + const exportMeasurement = this.state.currentMeasurement.toDto(); + axios + .post(`/rooms/${roomId}/measurements`, exportMeasurement, { + cancelToken: this.source.token + }) + .then(result => { + if (showToast) { + showToast({ + status: "ok", + children: "Messung abgespeichert" + }); + } + }) + .catch(error => { + if (showToast) { + showToast({ + status: "critical", + children: "Messung konnte nicht gespeichert werden" + }); + } + }); }; componentDidMount() { - this.getReadings(); + this.fetchMeasurement(); let serverUri = process.env.REACT_APP_SERVICE_URI; if (serverUri) { @@ -163,10 +182,10 @@ export default class MeasurementContainer extends React.Component< if ( this && prevProps && - prevProps.measurement.measurementId !== - this.props.measurement.measurementId + prevState.currentMeasurement.measurementId !== + this.state.currentMeasurement.measurementId ) { - this.getReadings(); + this.fetchMeasurement(); } } @@ -177,13 +196,17 @@ export default class MeasurementContainer extends React.Component< render() { return ( - + + {(showToast: any) => ( + this.saveMeasurement(showToast)} + isLoading={this.state.loading} + /> + )} + ); } } diff --git a/src/containers/measurements/MeasurementContainer.test.jsx b/src/containers/measurements/MeasurementContainer.test.jsx index b6f06c5..6f730e6 100644 --- a/src/containers/measurements/MeasurementContainer.test.jsx +++ b/src/containers/measurements/MeasurementContainer.test.jsx @@ -1,6 +1,7 @@ // @flow import * as React from "react"; import { shallow } from "enzyme"; +import { MemoryRouter, Route } from "react-router"; import Measurement from "./../../models/Measurement"; import Room from "./../../models/Room"; @@ -22,7 +23,11 @@ describe("", () => { ([measurement]: Measurement[]) ); const wrapper = shallow( - + + } + /> + ); expect(wrapper).toHaveLength(1); }); From 3e82469a1fc6b713a84859d9ccfaf6cf3bde4c8a Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 29 May 2018 16:28:22 +0200 Subject: [PATCH 080/160] review changes --- .../HeatmapAnalysisForm.jsx | 38 +++++++++---------- src/containers/fluxHeatmap/FluxHeatmap.jsx | 10 ++--- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index 67b9238..7f83691 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -7,8 +7,8 @@ import FormFields from "grommet/components/FormFields"; import NumberInput from "grommet/components/NumberInput"; import Value from "grommet/components/Value"; import { inputHandler } from "../../../utils/InputHandler"; -import type { AllInputTypes } from "../../../utils/InputHandler"; import HeatmapData from "../../../models/HeatmapData"; +import type { AllInputTypes } from "../../../utils/InputHandler"; import type { HeatmapMode } from "../../../types/Heatmap"; type Props = { @@ -93,50 +93,50 @@ export default class HeatmapAnalysisForm extends React.Component {
- +
diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index b1f1162..5680e6d 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -8,14 +8,14 @@ import HeatmapData from "../../models/HeatmapData"; import { Positionable } from "../../types/Positionable"; import ReactResizeDetector from "react-resize-detector"; import Transformation from "../../models/Transformation"; -import type { ConfigObject, Container, HeatmapMode } from "../../types/Heatmap"; import Box from "grommet/components/Box"; import { PLACEHOLDER_IMAGE } from "../../images/ImagesBase64"; import HeatmapLegend from "./HeatmapLegend"; import HeatmapTooltip from "./HeatmapTooltip"; import BrowserPosition from "../../models/BrowserPosition"; -import type { AllInputTypes } from "../../utils/InputHandler"; import HeatmapAnalysisForm from "../../components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm"; +import type { ConfigObject, Container, HeatmapMode } from "../../types/Heatmap"; +import type { AllInputTypes } from "../../utils/InputHandler"; const FIXED_HEATMAP_VALUE = 1; @@ -184,11 +184,9 @@ export default class FluxHeatmap extends React.Component { elements: Positionable[], fixedValue: boolean ): HeatmapDataPoint[] => { - const container = this.state.container; - const transformation = this.props.transformation; + const { container, maxLuxValue } = this.state; + const { transformation, heatmapMode } = this.props; const containerScaleFactor = container.width / container.originalWidth; - const heatmapMode = this.props.heatmapMode; - const maxLuxValue = this.state.maxLuxValue; return elements.reduce(function(transformedReadings, element) { const x = Math.round( (element.position.xposition * transformation.scaleFactor + From ac3257e2b0cc0dcbd8f8e57a5e0eb992c268d112 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 29 May 2018 16:31:44 +0200 Subject: [PATCH 081/160] remove unused brackets --- src/components/measurements/MeasurementSummary.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index b8ac4e0..1138470 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -110,7 +110,7 @@ export default class MeasurementSummary extends React.Component { configObject={this.state.configObject} heatmapMode={this.state.heatmapMode} /> - + Date: Tue, 29 May 2018 16:49:06 +0200 Subject: [PATCH 082/160] add tests for new components --- .../HeatmapAnalysisForm.test.jsx | 25 +++++++++++++++++++ .../fluxHeatmap/HeatmapTooltip.test.jsx | 22 ++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.test.jsx create mode 100644 src/containers/fluxHeatmap/HeatmapTooltip.test.jsx diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.test.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.test.jsx new file mode 100644 index 0000000..b2abdde --- /dev/null +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.test.jsx @@ -0,0 +1,25 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; +import HeatmapAnalysisForm from "./HeatmapAnalysisForm"; +import type { AllInputTypes } from "../../../utils/InputHandler"; +import HeatmapData from "../../../models/HeatmapData"; + +describe("", () => { + const onChange = (key: string, value: AllInputTypes) => {}; + const heatmapData = new HeatmapData(0, 1000, []); + const maxLuxValue = 0; + const heatmapMode = "DEFAULT"; + + it("should render", () => { + const wrapper = shallow( + + ); + expect(wrapper).toHaveLength(1); + }); +}); diff --git a/src/containers/fluxHeatmap/HeatmapTooltip.test.jsx b/src/containers/fluxHeatmap/HeatmapTooltip.test.jsx new file mode 100644 index 0000000..49287c8 --- /dev/null +++ b/src/containers/fluxHeatmap/HeatmapTooltip.test.jsx @@ -0,0 +1,22 @@ +// @flow +import * as React from "react"; +import { shallow } from "enzyme"; +import HeatmapTooltip from "./HeatmapTooltip"; +import BrowserPosition from "../../models/BrowserPosition"; + +describe("", () => { + const getValueCallback = (position: BrowserPosition) => position.xposition; + const heatmapMode = "DEFAULT"; + + it("should render", () => { + const wrapper = shallow( + +

Test

+
+ ); + expect(wrapper).toHaveLength(1); + }); +}); From a94e82f6c721986b9b364004339c6168f31af71e Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 29 May 2018 20:07:08 +0200 Subject: [PATCH 083/160] fix bug to not ignore new readings --- src/containers/fluxHeatmap/FluxHeatmap.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index 5680e6d..47585e5 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -72,6 +72,7 @@ export default class FluxHeatmap extends React.Component { heatmap: Heatmap; heatmapContainer: ?HTMLDivElement; imgElement: ?HTMLImageElement; + numberOfReadings: number = 0; componentDidMount() { this.heatmap = this.createHeatmapInstance( @@ -111,9 +112,10 @@ export default class FluxHeatmap extends React.Component { this.setConfig(); } if ( - prevProps.readings.length !== this.props.readings.length || + this.props.readings.length !== this.numberOfReadings || prevState.maxLuxValue !== this.state.maxLuxValue ) { + this.numberOfReadings = this.props.readings.length; this.setData(); } } From 15fa61b6e69502a111ee03cf874bd3153af4bdbc Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 29 May 2018 21:48:13 +0200 Subject: [PATCH 084/160] FLUX-153 Added delete button for the project --- src/components/list/ItemListDeleteButton.jsx | 23 +++++++++++++++++++ .../list/ItemListDeleteButton.test.jsx | 11 +++++++++ .../list/ItemListEditButton.test.jsx | 11 +++++++++ .../projects/AnchorProjectItemRenderer.jsx | 7 ++++-- src/components/projects/Projects.jsx | 9 +++++--- src/containers/projects/ProjectsContainer.jsx | 12 ++++++++++ 6 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 src/components/list/ItemListDeleteButton.jsx create mode 100644 src/components/list/ItemListDeleteButton.test.jsx create mode 100644 src/components/list/ItemListEditButton.test.jsx diff --git a/src/components/list/ItemListDeleteButton.jsx b/src/components/list/ItemListDeleteButton.jsx new file mode 100644 index 0000000..824437c --- /dev/null +++ b/src/components/list/ItemListDeleteButton.jsx @@ -0,0 +1,23 @@ +// @flow +import * as React from "react"; +import Button from "grommet/components/Button"; +import TrashIcon from "grommet/components/icons/base/Trash"; + +type Props = { + onClick: () => void +}; + +export default function ItemListDeleteButton({ onClick }: Props) { + return ( +
); } From bed6f4204466dfc762fea568b564cc5d513875c9 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 12:17:47 +0200 Subject: [PATCH 119/160] max lux value also works in coverage mode --- .../HeatmapAnalysisForm.jsx | 10 ++++-- src/containers/fluxHeatmap/FluxHeatmap.jsx | 32 +++++++++++++------ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index 1f0cb72..b88d9ef 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -99,7 +99,10 @@ export default class HeatmapAnalysisForm extends React.Component { help="(0 = kein Limit)" > { help="(Zu hohe Werte werden auf den oben festgelegten Maximalwert herabgesetzt.)" > { return 0; } const maxLuxValue = this.state.maxLuxValue; - if (maxLuxValue > 0 && this.state.includeFilteredValues) { + if ( + maxLuxValue > 0 && + this.state.includeFilteredValues && + this.props.heatmapMode === "DEFAULT" + ) { return maxLuxValue; } return Math.max(...dataPoints.map(d => d.value)); @@ -214,19 +218,29 @@ export default class FluxHeatmap extends React.Component { transformation.yOffset) * containerScaleFactor ); - let value = FIXED_HEATMAP_VALUE; - if (!fixedValue && element.getValue != null) { - value = element.getValue(); - } if (x >= 0 && y >= 0 && x <= container.width && y <= container.height) { + let measuredValue = 0; + if (element.getValue != null) { + measuredValue = element.getValue(); + } + let transformedValue = measuredValue; + let transformedMaxLuxValue = maxLuxValue; + if (fixedValue) { + transformedValue = FIXED_HEATMAP_VALUE; + transformedMaxLuxValue = FIXED_HEATMAP_VALUE; + } if ( - heatmapMode !== "DEFAULT" || + (heatmapMode !== "DEFAULT" && heatmapMode !== "COVERAGE") || maxLuxValue === 0 || - value <= maxLuxValue + measuredValue <= maxLuxValue ) { - transformedReadings.push(new HeatmapDataPoint(x, y, value)); + transformedReadings.push( + new HeatmapDataPoint(x, y, transformedValue) + ); } else if (includeFilteredValues) { - transformedReadings.push(new HeatmapDataPoint(x, y, maxLuxValue)); + transformedReadings.push( + new HeatmapDataPoint(x, y, transformedMaxLuxValue) + ); } } return transformedReadings; From 2382467be9d0f12827be159c8798ed2c43976445 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Sun, 3 Jun 2018 13:06:08 +0200 Subject: [PATCH 120/160] Fixed typo --- src/containers/importexport/wizard/WizardStep.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/importexport/wizard/WizardStep.jsx b/src/containers/importexport/wizard/WizardStep.jsx index fad698a..b68c3b6 100644 --- a/src/containers/importexport/wizard/WizardStep.jsx +++ b/src/containers/importexport/wizard/WizardStep.jsx @@ -53,7 +53,7 @@ export default function WizardStep({ {children} - {button} + {button}
); } From c9e9105d33a6b0e5e3eb98a83c7bc722b42f9f94 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 13:56:09 +0200 Subject: [PATCH 121/160] update transformation form only on initialization and submit --- .../transformationForm/TransformationForm.jsx | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/components/transformationForm/TransformationForm.jsx b/src/components/transformationForm/TransformationForm.jsx index 9c6b834..82c8759 100644 --- a/src/components/transformationForm/TransformationForm.jsx +++ b/src/components/transformationForm/TransformationForm.jsx @@ -14,42 +14,42 @@ type Props = { onChange: (key: string, value: AllInputTypes) => void }; -export default function TransformationForm({ - transformation, - onSubmit, - onChange -}: Props) { - const { scaleFactor, xOffset, yOffset } = transformation; - return ( - - -
- - - - - - - - - -
-
- - ); +export default class TransformationForm extends React.Component { + render() { + const { scaleFactor, xOffset, yOffset } = this.props.transformation; + const { onSubmit, onChange } = this.props; + + return ( +
+ +
+ + + + + + + + + +
+
+
+ ); + } } From 68f244700a298f7b5a65cce9fdda549c96d1dba3 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 14:13:35 +0200 Subject: [PATCH 122/160] fix padding between section elements in room --- src/components/measurements/MeasurementSummary.jsx | 2 +- src/components/room/Room.jsx | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index 8d43d75..d3f0d71 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -98,7 +98,7 @@ export default class MeasurementSummary extends React.Component { } return ( -
+
Aktuelle Messung ({this.props.currentMeasurement.name}) diff --git a/src/components/room/Room.jsx b/src/components/room/Room.jsx index ff7232f..d9ab482 100644 --- a/src/components/room/Room.jsx +++ b/src/components/room/Room.jsx @@ -21,7 +21,9 @@ type Props = { export default function Room({ match, room, onDeleteMeasurement }: Props) { return ( -
+
{room.name} @@ -34,7 +36,7 @@ export default function Room({ match, room, onDeleteMeasurement }: Props) { )} /> -
+
Date: Sun, 3 Jun 2018 14:18:47 +0200 Subject: [PATCH 123/160] fix padding between heatmap boxes --- src/containers/fluxHeatmap/FluxHeatmap.jsx | 60 ++++++++++++---------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index 96adec5..48dbaac 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -315,35 +315,39 @@ export default class FluxHeatmap extends React.Component { } return ( - - -
(this.heatmapContainer = heatmapContainer)} + + + - (this.imgElement = imgElement)} - onLoad={this.setContainerState} - src={backgroundImage} - alt={"heatmap"} - /> - -
-
- {this.state.configObject.gradient && - this.props.heatmapMode !== "ANCHORS" && ( - - )} +
+ (this.heatmapContainer = heatmapContainer) + } + > + (this.imgElement = imgElement)} + onLoad={this.setContainerState} + src={backgroundImage} + alt={"heatmap"} + /> + +
+ + {this.state.configObject.gradient && + this.props.heatmapMode !== "ANCHORS" && ( + + )} +
Date: Sun, 3 Jun 2018 14:19:37 +0200 Subject: [PATCH 124/160] change heatmap analysis form heading to h3 --- .../HeatmapAnalysisForm.jsx | 148 +++++++++--------- 1 file changed, 76 insertions(+), 72 deletions(-) diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index b88d9ef..b8c935d 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -1,6 +1,7 @@ // @flow import * as React from "react"; import Form from "../../form/Form"; +import Heading from "grommet/components/Heading"; import Box from "grommet/components/Box"; import FormField from "grommet/components/FormField"; import FormFields from "grommet/components/FormFields"; @@ -91,78 +92,81 @@ export default class HeatmapAnalysisForm extends React.Component { render() { return ( -
- -
- - - - - - - - - - - - - - -
-
-
+ + Auswertung +
+ +
+ + + + + + + + + + + + + + +
+
+
+
); } } From 08af457460794bbb787c1ba7cecb06b137643aa3 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Sun, 3 Jun 2018 14:52:56 +0200 Subject: [PATCH 125/160] Several UI Fixes and better UX --- src/containers/importexport/ExportWizard.jsx | 4 +-- .../wizard/SelectMeasurementsStep.jsx | 30 ++++++++++++------- .../wizard/SelectProjectsStep.jsx | 17 +++++++++-- .../importexport/wizard/SelectRoomsStep.jsx | 29 ++++++++++-------- .../importexport/wizard/WizardStep.jsx | 2 +- 5 files changed, 54 insertions(+), 28 deletions(-) diff --git a/src/containers/importexport/ExportWizard.jsx b/src/containers/importexport/ExportWizard.jsx index 8fbb011..ae53a34 100644 --- a/src/containers/importexport/ExportWizard.jsx +++ b/src/containers/importexport/ExportWizard.jsx @@ -43,7 +43,7 @@ export default class ExportWizard extends React.Component { }); } else { // If it's the last step -> Send the data! - const rooms = [].concat.apply([], data.map(p => p.rooms)); + const rooms = [].concat.apply([], data.map(p => (p.rooms: any))); const measurements = [].concat.apply([], rooms.map(r => r.measurements)); const exportBody = measurements.map(m => ({ measurementId: m.measurementId @@ -95,7 +95,7 @@ export default class ExportWizard extends React.Component { } render() { - let Step = this.state.steps[this.state.currentStep]; + const Step = this.state.steps[this.state.currentStep]; return ( { + RenderProjectRooms = (project: Project) => { return project.rooms.map(r => ( -
-
- - {r.name} - -
+
+ + {r.name} + p.rooms)); + const measurements = [].concat.apply([], rooms.map(r => r.measurements)); + + return measurements.length > 0; + } + render() { const projects = this.props.projects; + const onSubmit = this.isValidState + ? () => this.props.onNext(this.state.projects) + : null; + return ( this.props.onNext(this.state.projects)} + onSubmit={onSubmit} isLastStep > - {projects && projects.map(p => this.RenderProject(p))} + {projects && projects.map(p => this.RenderProjectRooms(p))} ); } diff --git a/src/containers/importexport/wizard/SelectProjectsStep.jsx b/src/containers/importexport/wizard/SelectProjectsStep.jsx index 60955f9..8c3f3c2 100644 --- a/src/containers/importexport/wizard/SelectProjectsStep.jsx +++ b/src/containers/importexport/wizard/SelectProjectsStep.jsx @@ -51,17 +51,28 @@ export default class SelectProjectsStep extends React.Component< static getDerivedStateFromProps(nextProps: StepProps, prevState: State) { return { - returnData: nextProps.projects, - selected: null + returnData: nextProps.projects }; } + get isValidState() { + const { selected } = this.state; + if (selected != null) { + if (!Array.isArray(selected)) { + return true; + } else { + return selected.length > 0; + } + } + return false; + } + render() { return ( { p => p.projectId === project.projectId ); let selectedRooms: Room[]; + const selectedConst = selected; if (foundProject) { - if (typeof selected === "number") { - selectedRooms = [foundProject.rooms[selected]]; + if (typeof selectedConst === "number") { + selectedRooms = [foundProject.rooms[selectedConst]]; } else { selectedRooms = foundProject.rooms.filter( - (r, index) => (selected ? (selected: any).includes(index) : false) + (r, index) => (selectedConst ? selectedConst.includes(index) : false) ); } @@ -68,6 +68,10 @@ export default class SelectRoomsStep extends React.Component { } }; + get isValidState() { + return this.state.selectedProjects.length > 0; + } + static getDerivedStateFromProps(nextProps: StepProps, prevState: State) { return { returnData: nextProps.projects, @@ -77,23 +81,24 @@ export default class SelectRoomsStep extends React.Component { render() { const projects = this.props.projects; + const onSubmit = this.isValidState + ? () => this.props.onNext(this.state.selectedProjects) + : null; + return ( this.props.onNext(this.state.selectedProjects)} + onSubmit={onSubmit} > {projects && projects.map(p => ( -
-
- - {p.name} - -
+
+ + {p.name} + item.roomId} selectable={"multiple"} diff --git a/src/containers/importexport/wizard/WizardStep.jsx b/src/containers/importexport/wizard/WizardStep.jsx index b68c3b6..5c796ea 100644 --- a/src/containers/importexport/wizard/WizardStep.jsx +++ b/src/containers/importexport/wizard/WizardStep.jsx @@ -11,7 +11,7 @@ type Props = { heading: React.Node, subheading?: React.Node, children: React.Node, - onSubmit: () => void, + onSubmit?: ?() => void, isLastStep?: boolean }; From 3a9d2e0d675a55f586437db0470700de9a6d5c06 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Sun, 3 Jun 2018 15:32:35 +0200 Subject: [PATCH 126/160] Update item list design to match other design --- .../importexport/wizard/SelectMeasurementsStep.jsx | 6 +++++- src/containers/importexport/wizard/SelectProjectsStep.jsx | 7 ++++++- src/containers/importexport/wizard/SelectRoomsStep.jsx | 6 +++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx index c22d1ff..215e961 100644 --- a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx +++ b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx @@ -132,7 +132,11 @@ export default class SelectMeasurementsStep extends React.Component< } function MeasurementItemRenderer({ item }: { item: Measurement }) { - return
{item.description}
; + return ( + + {item.name} + + ); } function getItemsFromArrayByIndex( diff --git a/src/containers/importexport/wizard/SelectProjectsStep.jsx b/src/containers/importexport/wizard/SelectProjectsStep.jsx index 8c3f3c2..d8946ab 100644 --- a/src/containers/importexport/wizard/SelectProjectsStep.jsx +++ b/src/containers/importexport/wizard/SelectProjectsStep.jsx @@ -1,5 +1,6 @@ // @flow import * as React from "react"; +import Heading from "grommet/components/Heading"; import WizardStep from "./WizardStep"; import ItemsList from "./../../../components/list/ItemsList"; @@ -88,5 +89,9 @@ export default class SelectProjectsStep extends React.Component< } function ProjectItemRenderer({ item }: { item: Project }) { - return
{item.name}
; + return ( + + {item.name} + + ); } diff --git a/src/containers/importexport/wizard/SelectRoomsStep.jsx b/src/containers/importexport/wizard/SelectRoomsStep.jsx index 51830d7..3285d2c 100644 --- a/src/containers/importexport/wizard/SelectRoomsStep.jsx +++ b/src/containers/importexport/wizard/SelectRoomsStep.jsx @@ -114,5 +114,9 @@ export default class SelectRoomsStep extends React.Component { } function RoomItemRenderer({ item }: { item: Room }) { - return
{item.name}
; + return ( + + {item.name} + + ); } From 167f2f01cd5a2af2b7ad5824abece095c21bb4af Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 15:55:50 +0200 Subject: [PATCH 127/160] add missing fields to measurement view --- .../measurements/MeasurementSummary.jsx | 45 +++++++++++++++---- src/components/room/Room.jsx | 3 +- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index d3f0d71..98b41e0 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -2,6 +2,9 @@ import * as React from "react"; import Header from "grommet/components/Header"; import Heading from "grommet/components/Heading"; +import Paragraph from "grommet/components/Paragraph"; +import Timestamp from "grommet/components/Timestamp"; +import FormNextLink from "grommet/components/icons/base/FormNextLink"; import Box from "grommet/components/Box"; import Accordion from "grommet/components/Accordion"; import AccordionPanel from "grommet/components/AccordionPanel"; @@ -98,17 +101,43 @@ export default class MeasurementSummary extends React.Component { } return ( -
-
- - Aktuelle Messung ({this.props.currentMeasurement.name}) - -
+
- Grundriss + + Aktuelle Messung ({this.props.currentMeasurement.name}) + +
+ + + {this.props.currentMeasurement.description} + + + + Vermesser: + {this.props.currentMeasurement.creator} + + + Zeitraum: + + + + + + +
+ {this.props.currentMeasurement.readings && ( {room.name} - {room.description} + {room.description}
Date: Sun, 3 Jun 2018 16:22:01 +0200 Subject: [PATCH 128/160] add pozyx anchors to measurement view --- src/containers/fluxHeatmap/FluxHeatmap.jsx | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index 48dbaac..2673a67 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -9,6 +9,9 @@ import { Positionable } from "../../types/Positionable"; import ReactResizeDetector from "react-resize-detector"; import Transformation from "../../models/Transformation"; import Box from "grommet/components/Box"; +import Heading from "grommet/components/Heading"; +import Table from "grommet/components/Table"; +import TableRow from "grommet/components/TableRow"; import { PLACEHOLDER_IMAGE, EXAMPLE_IMAGE } from "../../images/ImagesBase64"; import HeatmapLegend from "./HeatmapLegend"; import HeatmapTooltip from "./HeatmapTooltip"; @@ -357,6 +360,33 @@ export default class FluxHeatmap extends React.Component { onChange={this.handleValueChange} /> + + Pozyx Anchors + {this.props.anchors.length > 0 ? ( + + + + + + + + + + + {this.props.anchors.map(anchor => ( + + + + + + + ))} + +
NameXYZ
{anchor.networkId}{anchor.position.xposition}{anchor.position.yposition}{anchor.position.zposition}
+ ) : ( + Es sind keine Anchors für diese Messung konfiguriert. + )} +
); } From c109370ccbe2fb47515880f875380f69c7b57e9d Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 16:47:30 +0200 Subject: [PATCH 129/160] add ratio to uniformity and irregularity --- .../HeatmapAnalysisForm.jsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index b8c935d..3f67671 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -27,7 +27,9 @@ type State = { min: number, max: number, uniformity: number, - irregularity: number + irregularity: number, + uniformityRatio: number, + irregularityRatio: number }; export default class HeatmapAnalysisForm extends React.Component { @@ -37,7 +39,9 @@ export default class HeatmapAnalysisForm extends React.Component { min: 0, max: 0, uniformity: 0, - irregularity: 0 + irregularity: 0, + uniformityRatio: 0, + irregularityRatio: 0 }; static getDerivedStateFromProps(nextProps: Props, prevState: State) { @@ -69,13 +73,17 @@ export default class HeatmapAnalysisForm extends React.Component { ).value; const uniformity = min / average; const irregularity = min / max; + const uniformityRatio = 1 / uniformity; + const irregularityRatio = 1 / irregularity; return { numberOfReadings: numberOfReadings, average: Math.round(average), min: Math.floor(min), max: Math.ceil(max), uniformity: Math.round(uniformity * 100) / 100, - irregularity: Math.round(irregularity * 100) / 100 + irregularity: Math.round(irregularity * 100) / 100, + uniformityRatio: Math.round(uniformityRatio * 100) / 100, + irregularityRatio: Math.round(irregularityRatio * 100) / 100 }; } @@ -86,7 +94,9 @@ export default class HeatmapAnalysisForm extends React.Component { min: 0, max: 0, uniformity: 0, - irregularity: 0 + irregularity: 0, + uniformityRatio: 0, + irregularityRatio: 0 }; } @@ -154,12 +164,16 @@ export default class HeatmapAnalysisForm extends React.Component { /> From f89e7f3a4f5a2ffd71f91572a2fd91e1c9eddac1 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 18:33:05 +0200 Subject: [PATCH 130/160] remove example image --- src/containers/fluxHeatmap/FluxHeatmap.jsx | 4 ++-- src/images/ImagesBase64.jsx | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index 2673a67..4d6c058 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -12,7 +12,7 @@ import Box from "grommet/components/Box"; import Heading from "grommet/components/Heading"; import Table from "grommet/components/Table"; import TableRow from "grommet/components/TableRow"; -import { PLACEHOLDER_IMAGE, EXAMPLE_IMAGE } from "../../images/ImagesBase64"; +import { PLACEHOLDER_IMAGE } from "../../images/ImagesBase64"; import HeatmapLegend from "./HeatmapLegend"; import HeatmapTooltip from "./HeatmapTooltip"; import BrowserPosition from "../../models/BrowserPosition"; @@ -314,7 +314,7 @@ export default class FluxHeatmap extends React.Component { render() { let { backgroundImage } = this.props; if (!backgroundImage) { - backgroundImage = EXAMPLE_IMAGE; + backgroundImage = PLACEHOLDER_IMAGE; } return ( diff --git a/src/images/ImagesBase64.jsx b/src/images/ImagesBase64.jsx index 1b611fa..9860158 100644 --- a/src/images/ImagesBase64.jsx +++ b/src/images/ImagesBase64.jsx @@ -2,6 +2,3 @@ export const PLACEHOLDER_IMAGE: string = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAIAAADlvkMuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NzI2MjM5Q0U4QUIxMUUzODJBMDg3QTMyOERCNTNCNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMDFDRTA1RUU5NDAxMUUzODJBMDg3QTMyOERCNTNCNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg3MjYyMzlBRThBQjExRTM4MkEwODdBMzI4REI1M0I3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg3MjYyMzlCRThBQjExRTM4MkEwODdBMzI4REI1M0I3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+rUtTygAAG15JREFUeNrs3QlvU2cWgOFc79u9zkIghLXz///SlNApEIjjxFkc7x6DmQi1yjSL7bs9D1VFKxR/+i5V9PYc7KB3dr4FAAAAWVdwBQAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABLArAAAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEA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MAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAASwKwAAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAkHv/FWAAaZqt5bSTDrUAAAAASUVORK5CYII="; - -export const EXAMPLE_IMAGE: string = - "data:image/png;base64,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"; From b8ba48aec61ce7099c29ca87b75c9d859c767fb5 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 20:46:19 +0200 Subject: [PATCH 131/160] handle division by zero --- .../heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index 3f67671..7cb83cd 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -73,8 +73,8 @@ export default class HeatmapAnalysisForm extends React.Component { ).value; const uniformity = min / average; const irregularity = min / max; - const uniformityRatio = 1 / uniformity; - const irregularityRatio = 1 / irregularity; + const uniformityRatio = uniformity > 0 ? 1 / uniformity : 0; + const irregularityRatio = uniformity > 0 ? 1 / irregularity : 0; return { numberOfReadings: numberOfReadings, average: Math.round(average), From 6eaff93cc8c4be75c4e81c3c1f697f57055bc7dc Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 20:48:19 +0200 Subject: [PATCH 132/160] fix wrong grommet parameter types --- src/components/measurements/MeasurementSummary.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index 98b41e0..ca7881c 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -119,7 +119,7 @@ export default class MeasurementSummary extends React.Component { Vermesser: {this.props.currentMeasurement.creator} @@ -127,7 +127,7 @@ export default class MeasurementSummary extends React.Component { Zeitraum: From 78c2d1c0311bc7a173624063db6116f544f9db54 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sun, 3 Jun 2018 20:54:13 +0200 Subject: [PATCH 133/160] refactor value transformation and filter out zero lux values --- src/containers/fluxHeatmap/FluxHeatmap.jsx | 48 ++++++++++++---------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/containers/fluxHeatmap/FluxHeatmap.jsx b/src/containers/fluxHeatmap/FluxHeatmap.jsx index 4d6c058..f616512 100644 --- a/src/containers/fluxHeatmap/FluxHeatmap.jsx +++ b/src/containers/fluxHeatmap/FluxHeatmap.jsx @@ -222,28 +222,32 @@ export default class FluxHeatmap extends React.Component { containerScaleFactor ); if (x >= 0 && y >= 0 && x <= container.width && y <= container.height) { - let measuredValue = 0; + let value = 0; if (element.getValue != null) { - measuredValue = element.getValue(); + value = element.getValue(); } - let transformedValue = measuredValue; - let transformedMaxLuxValue = maxLuxValue; - if (fixedValue) { - transformedValue = FIXED_HEATMAP_VALUE; - transformedMaxLuxValue = FIXED_HEATMAP_VALUE; - } - if ( - (heatmapMode !== "DEFAULT" && heatmapMode !== "COVERAGE") || - maxLuxValue === 0 || - measuredValue <= maxLuxValue - ) { - transformedReadings.push( - new HeatmapDataPoint(x, y, transformedValue) - ); - } else if (includeFilteredValues) { - transformedReadings.push( - new HeatmapDataPoint(x, y, transformedMaxLuxValue) - ); + if (value > 0 || heatmapMode === "ANCHORS") { + if ( + (heatmapMode !== "DEFAULT" && heatmapMode !== "COVERAGE") || + maxLuxValue === 0 || + value <= maxLuxValue + ) { + transformedReadings.push( + new HeatmapDataPoint( + x, + y, + fixedValue ? FIXED_HEATMAP_VALUE : value + ) + ); + } else if (includeFilteredValues) { + transformedReadings.push( + new HeatmapDataPoint( + x, + y, + fixedValue ? FIXED_HEATMAP_VALUE : maxLuxValue + ) + ); + } } } return transformedReadings; @@ -373,8 +377,8 @@ export default class FluxHeatmap extends React.Component { - {this.props.anchors.map(anchor => ( - + {this.props.anchors.map((anchor, i) => ( + {anchor.networkId} {anchor.position.xposition} {anchor.position.yposition} From 821d2ebb191b2116049cf56d3a4b0f0af2988dd7 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Mon, 4 Jun 2018 09:53:26 +0200 Subject: [PATCH 134/160] fix alignment of measurement data and creator if description is smaller than maximum paragraph width --- src/components/measurements/MeasurementSummary.jsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index ca7881c..a4952c8 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -111,10 +111,12 @@ export default class MeasurementSummary extends React.Component {
- - - {this.props.currentMeasurement.description} - + + + + {this.props.currentMeasurement.description} + + Date: Mon, 4 Jun 2018 12:33:48 +0200 Subject: [PATCH 135/160] provide a fallback text for missing values --- .../measurements/MeasurementSummary.jsx | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index a4952c8..6732de7 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -124,7 +124,14 @@ export default class MeasurementSummary extends React.Component { responsive={false} > Vermesser: - {this.props.currentMeasurement.creator} + {this.props.currentMeasurement.creator != null && + this.props.currentMeasurement.creator !== "" ? ( + {this.props.currentMeasurement.creator} + ) : ( + + unbekannt + + )} { responsive={false} > Zeitraum: - - - + {this.props.currentMeasurement.startDate != null ? ( + + + + + + ) : ( + + nicht verfügbar + + )} From 442430668fe49d0c5732399c20e4517368b59f20 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Mon, 4 Jun 2018 12:40:04 +0200 Subject: [PATCH 136/160] remove search from projects list --- src/components/projects/Projects.jsx | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/components/projects/Projects.jsx b/src/components/projects/Projects.jsx index 1f4b159..3159e3c 100644 --- a/src/components/projects/Projects.jsx +++ b/src/components/projects/Projects.jsx @@ -3,8 +3,6 @@ import * as React from "react"; import Header from "grommet/components/Header"; import Title from "grommet/components/Title"; import Section from "grommet/components/Section"; -import Box from "grommet/components/Box"; -import Search from "grommet/components/Search"; import ContentBox from "../contentBox/ContentBox"; import ItemsList from "./../list/ItemsList"; @@ -33,15 +31,6 @@ export default class Projects extends React.Component {
Alle Projekte - - -
From d7c85e66f4512b75783725e807778f0bab347027 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Mon, 4 Jun 2018 16:43:19 +0200 Subject: [PATCH 137/160] change boolean flag to connection state type --- src/components/dashboard/Dashboard.jsx | 51 +++++++++++++------ .../dashboard/DashboardContainer.jsx | 3 ++ 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/components/dashboard/Dashboard.jsx b/src/components/dashboard/Dashboard.jsx index 86ce7ad..c064ab0 100644 --- a/src/components/dashboard/Dashboard.jsx +++ b/src/components/dashboard/Dashboard.jsx @@ -12,10 +12,11 @@ import Card from "grommet/components/Card"; import ContentBox from "./../contentBox/ContentBox"; import Measurement from "./../../models/Measurement"; -import type { ServerState } from "./../../types/ServerState"; +import type { ConnectionState, ServerState } from "./../../types/ServerState"; type Props = { serverState: ServerState, + sensorConnectionState: ConnectionState, activeMeasurement?: ?Measurement }; @@ -126,18 +127,34 @@ function ActiveMeasurement({ ); } -function SensorStatus({ sensorReachable }: { sensorReachable: boolean }) { - let description = ( - - Nicht verfügbar - - ); - if (sensorReachable) { - description = ( - - Bereit - - ); +function SensorStatus({ + sensorConnectionState +}: { + sensorConnectionState: ConnectionState +}) { + let description: React.Node; + switch (sensorConnectionState) { + case "CONNECTED": + description = ( + + Bereit + + ); + break; + case "DISCONNECTED": + description = ( + + Nicht verfügbar + + ); + break; + default: + description = ( + + Unbekannt + + ); + break; } return ( @@ -147,7 +164,11 @@ function SensorStatus({ sensorReachable }: { sensorReachable: boolean }) { ); } -export default function Dashboard({ serverState, activeMeasurement }: Props) { +export default function Dashboard({ + serverState, + sensorConnectionState, + activeMeasurement +}: Props) { return ( @@ -159,7 +180,7 @@ export default function Dashboard({ serverState, activeMeasurement }: Props) { - + diff --git a/src/containers/dashboard/DashboardContainer.jsx b/src/containers/dashboard/DashboardContainer.jsx index cab8570..4ed94b1 100644 --- a/src/containers/dashboard/DashboardContainer.jsx +++ b/src/containers/dashboard/DashboardContainer.jsx @@ -11,6 +11,7 @@ type Props = {}; type State = { serverState: ServerState, + sensorConnectionState: ConnectionState, activeMeasurement: ?Measurement }; @@ -24,6 +25,7 @@ export default class DashboardContainer extends React.Component { connectionState: "UNKNOWN", uri: axios.defaults.baseURL }, + sensorConnectionState: "UNKNOWN", activeMeasurement: undefined }; @@ -80,6 +82,7 @@ export default class DashboardContainer extends React.Component { return ( ); From b8950f321d4ecb4c73674b3ec8156d0d665363bc Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Mon, 4 Jun 2018 21:12:22 +0200 Subject: [PATCH 138/160] change timeout to interval and also get sensor activity --- .../dashboard/DashboardContainer.jsx | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/containers/dashboard/DashboardContainer.jsx b/src/containers/dashboard/DashboardContainer.jsx index 4ed94b1..bdfcc13 100644 --- a/src/containers/dashboard/DashboardContainer.jsx +++ b/src/containers/dashboard/DashboardContainer.jsx @@ -18,7 +18,7 @@ type State = { export default class DashboardContainer extends React.Component { isUnmounted = false; source: CancelTokenSource = CancelToken.source(); - timeout: TimeoutID; + interval: IntervalID; state = { serverState: { @@ -29,6 +29,11 @@ export default class DashboardContainer extends React.Component { activeMeasurement: undefined }; + onUpdate = () => { + this.fetchActiveMeasurement(); + this.getSensorActivity(); + }; + fetchActiveMeasurement = () => { axios .get("/measurements/active", { @@ -40,11 +45,24 @@ export default class DashboardContainer extends React.Component { activeMeasurement = Measurement.fromObject(result.data); } this.updateState("CONNECTED", activeMeasurement); - this.resetFetchTimeout(); }) .catch(error => { this.updateState("DISCONNECTED", undefined); - this.resetFetchTimeout(); + }); + }; + + getSensorActivity = () => { + axios + .get("/sensors", { + cancelToken: this.source.token + }) + .then(result => { + if (result.status === 200) { + this.setState({ sensorConnectionState: "CONNECTED" }); + } + }) + .catch(error => { + this.setState({ sensorConnectionState: "DISCONNECTED" }); }); }; @@ -60,20 +78,20 @@ export default class DashboardContainer extends React.Component { }); }; - resetFetchTimeout = (milliseconds: number = 3000) => { + setInterval = (timeoutMilliseconds: number = 3000) => { if (!this.isUnmounted) { - this.timeout = setTimeout(this.fetchActiveMeasurement, milliseconds); + this.interval = setInterval(this.onUpdate, timeoutMilliseconds); } }; componentDidMount() { - this.fetchActiveMeasurement(); + this.setInterval(); } componentWillUnmount() { this.isUnmounted = true; - if (this.timeout) { - clearTimeout(this.timeout); + if (this.interval) { + clearInterval(this.interval); } this.source.cancel(); } From 1e5ecbe30c32c15011d59ae876dc0a942a3ac875 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 00:21:47 +0200 Subject: [PATCH 139/160] FLUX-150 Refactored the import UI and added visual feedback --- src/components/importexport/Import.jsx | 33 +++++++++---- src/components/importexport/Import.test.jsx | 2 +- .../importexport/ImportExportContainer.jsx | 48 ++++++++++++++----- 3 files changed, 62 insertions(+), 21 deletions(-) diff --git a/src/components/importexport/Import.jsx b/src/components/importexport/Import.jsx index ffb51d3..7706ac6 100644 --- a/src/components/importexport/Import.jsx +++ b/src/components/importexport/Import.jsx @@ -1,14 +1,18 @@ // @flow import * as React from "react"; +import Box from "grommet/components/Box"; import Section from "grommet/components/Section"; import Header from "grommet/components/Header"; import Title from "grommet/components/Title"; import Button from "grommet/components/Button"; import Dropzone from "react-dropzone"; +import DocumentUploadIcon from "grommet/components/icons/base/DocumentUpload"; + import type { DZFile as File } from "../../types/File"; type Props = { - onUpload: (file: ?File) => void + onUpload: (file: ?File) => void, + isLoading: boolean }; type State = { @@ -37,6 +41,10 @@ export default class Import extends React.Component { }; render() { + let uploadHandler; + if (!this.props.isLoading) { + uploadHandler = () => this.props.onUpload(this.state.file); + } return (
@@ -47,16 +55,23 @@ export default class Import extends React.Component { multiple={false} accept="application/json" > -

- Ziehen Sie die Datei mit den Daten, die Sie importieren möchten in - dieses Feld. -

+ Ziehen Sie die Datei mit den Daten, die Sie importieren möchten in + dieses Feld. {this.state.file && ( -
); diff --git a/src/components/importexport/Import.test.jsx b/src/components/importexport/Import.test.jsx index 9545657..c67bb2c 100644 --- a/src/components/importexport/Import.test.jsx +++ b/src/components/importexport/Import.test.jsx @@ -6,7 +6,7 @@ import Import from "./Import"; describe("", () => { it("should render", () => { - const wrapper = shallow( {}} />); + const wrapper = shallow( {}} isLoading={false} />); expect(wrapper).toHaveLength(1); }); }); diff --git a/src/containers/importexport/ImportExportContainer.jsx b/src/containers/importexport/ImportExportContainer.jsx index fccea55..9955880 100644 --- a/src/containers/importexport/ImportExportContainer.jsx +++ b/src/containers/importexport/ImportExportContainer.jsx @@ -5,23 +5,29 @@ import ContentBox from "../../components/contentBox/ContentBox"; import ImportComponent from "../../components/importexport/Import"; import ExportComponent from "../../components/importexport/Export"; +import { ToastContext } from "./../../components/toast/ToastContext"; + +import type { ToastMetadata } from "./../../components/toast/Toast"; type Props = {}; -type Status = { - showWizard: boolean +type State = { + showWizard: boolean, + isLoading: boolean }; export default class ImportExportContainer extends React.Component< Props, - Status + State > { source: CancelTokenSource = CancelToken.source(); state = { - showWizard: false + showWizard: false, + isLoading: false }; - uploadFile = (file: ?File) => { + uploadFile = (file: ?File, showToast: ToastMetadata => void) => { if (file) { + this.setState({ isLoading: true }); const reader = new FileReader(); reader.onload = () => { const fileAsBinaryString = reader.result; @@ -30,10 +36,22 @@ export default class ImportExportContainer extends React.Component< headers: { "Content-Type": "application/json" } }) .then(response => { - console.log(response); + this.setState({ isLoading: false }); + if (showToast) { + showToast({ + status: "ok", + children: response.data + }); + } }) .catch(error => { - console.log(error); + this.setState({ isLoading: false }); + if (showToast) { + showToast({ + status: "critical", + children: error.data + }); + } }); }; reader.readAsText(file, "utf-8"); @@ -41,11 +59,19 @@ export default class ImportExportContainer extends React.Component< }; render() { + console.log(this.state.isLoading); return ( - - - - + + {(showToast: any) => ( + + this.uploadFile(file, showToast)} + isLoading={this.state.isLoading} + /> + + + )} + ); } } From 6a871d728c35767738893a2d6ea0b8d1aa0641d6 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 10:39:52 +0200 Subject: [PATCH 140/160] FLUX-167 Authorization Headers are sent now --- src/components/routing/ProtectedRoute.jsx | 2 +- src/containers/app/App.jsx | 1 + src/containers/login/LoginContainer.jsx | 2 ++ src/utils/AuthenticationService.jsx | 12 ++++++++---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/components/routing/ProtectedRoute.jsx b/src/components/routing/ProtectedRoute.jsx index a7cd7f6..a67f79d 100644 --- a/src/components/routing/ProtectedRoute.jsx +++ b/src/components/routing/ProtectedRoute.jsx @@ -9,7 +9,7 @@ export default function ProtectedRoute({ component: Component, ...rest }: any) { - AuthenticationService.isLoggedIn ? ( + AuthenticationService.token ? ( ) : ( diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index c5b132a..b2261c3 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -29,6 +29,7 @@ export default class App extends React.Component { constructor() { super(); (axios.defaults: Object).baseURL = process.env.REACT_APP_SERVICE_URI; // Sets the default URL for the rest of the applications lifetime. + // axios.defaults.headers.common['Authorization'] = AuthenticationService.token; } state = {}; diff --git a/src/containers/login/LoginContainer.jsx b/src/containers/login/LoginContainer.jsx index e467308..c8defe6 100644 --- a/src/containers/login/LoginContainer.jsx +++ b/src/containers/login/LoginContainer.jsx @@ -46,6 +46,8 @@ export default class LoginContainer extends React.Component { ) .then(result => { AuthenticationService.login(result.data, login.rememberMe); + axios.defaults.headers.common["Authorization"] = + AuthenticationService.token; this.setState({ shouldRedirect: true }); }) .catch(error => { diff --git a/src/utils/AuthenticationService.jsx b/src/utils/AuthenticationService.jsx index 2836230..8790938 100644 --- a/src/utils/AuthenticationService.jsx +++ b/src/utils/AuthenticationService.jsx @@ -1,3 +1,4 @@ +import axios from "axios"; const STORAGE_KEY = "LOGIN_TOKEN"; export default class AuthenticationService { @@ -12,6 +13,7 @@ export default class AuthenticationService { } else { sessionStorage.setItem(STORAGE_KEY, token); } + axios.defaults.headers.common["Authorization"] = token; }; /** @@ -21,15 +23,17 @@ export default class AuthenticationService { static logout = () => { localStorage.removeItem(STORAGE_KEY); sessionStorage.removeItem(STORAGE_KEY); + delete axios.defaults.headers.common["Authorization"]; }; /** * Returns true, if there is an authentication token stored. * It is still possible that the token was invalidated by the server. */ - static get isLoggedIn() { - return ( - localStorage.getItem(STORAGE_KEY) || sessionStorage.getItem(STORAGE_KEY) - ); + static get token() { + const token = + localStorage.getItem(STORAGE_KEY) || sessionStorage.getItem(STORAGE_KEY); + axios.defaults.headers.common["Authorization"] = token; + return token; } } From 328b382f1707ca1303759becd20ab8cecfec4cfd Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 10:55:41 +0200 Subject: [PATCH 141/160] FLUX-167 Removed commented code --- src/containers/app/App.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index b2261c3..c5b132a 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -29,7 +29,6 @@ export default class App extends React.Component { constructor() { super(); (axios.defaults: Object).baseURL = process.env.REACT_APP_SERVICE_URI; // Sets the default URL for the rest of the applications lifetime. - // axios.defaults.headers.common['Authorization'] = AuthenticationService.token; } state = {}; From aba03dfab850285b1bd5c276585f873df6b1dd2f Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 5 Jun 2018 11:01:19 +0200 Subject: [PATCH 142/160] change interval back to timeout due to risk of overload when requests take too long --- .../dashboard/DashboardContainer.jsx | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/containers/dashboard/DashboardContainer.jsx b/src/containers/dashboard/DashboardContainer.jsx index bdfcc13..9337d83 100644 --- a/src/containers/dashboard/DashboardContainer.jsx +++ b/src/containers/dashboard/DashboardContainer.jsx @@ -18,7 +18,8 @@ type State = { export default class DashboardContainer extends React.Component { isUnmounted = false; source: CancelTokenSource = CancelToken.source(); - interval: IntervalID; + fetchMeasurementTimeout: TimeoutID; + getSensorTimeout: TimeoutID; state = { serverState: { @@ -29,11 +30,6 @@ export default class DashboardContainer extends React.Component { activeMeasurement: undefined }; - onUpdate = () => { - this.fetchActiveMeasurement(); - this.getSensorActivity(); - }; - fetchActiveMeasurement = () => { axios .get("/measurements/active", { @@ -45,9 +41,11 @@ export default class DashboardContainer extends React.Component { activeMeasurement = Measurement.fromObject(result.data); } this.updateState("CONNECTED", activeMeasurement); + this.resetFetchMeasurementTimeout(); }) .catch(error => { this.updateState("DISCONNECTED", undefined); + this.resetFetchMeasurementTimeout(); }); }; @@ -60,9 +58,11 @@ export default class DashboardContainer extends React.Component { if (result.status === 200) { this.setState({ sensorConnectionState: "CONNECTED" }); } + this.resetGetSensorTimeout(); }) .catch(error => { this.setState({ sensorConnectionState: "DISCONNECTED" }); + this.resetGetSensorTimeout(); }); }; @@ -78,20 +78,36 @@ export default class DashboardContainer extends React.Component { }); }; - setInterval = (timeoutMilliseconds: number = 3000) => { + resetFetchMeasurementTimeout = (timeoutMilliseconds: number = 3000) => { if (!this.isUnmounted) { - this.interval = setInterval(this.onUpdate, timeoutMilliseconds); + this.fetchMeasurementTimeout = setTimeout( + this.fetchActiveMeasurement, + timeoutMilliseconds + ); + } + }; + + resetGetSensorTimeout = (timeoutMilliseconds: number = 3000) => { + if (!this.isUnmounted) { + this.getSensorTimeout = setTimeout( + this.getSensorActivity, + timeoutMilliseconds + ); } }; componentDidMount() { - this.setInterval(); + this.fetchActiveMeasurement(); + this.getSensorActivity(); } componentWillUnmount() { this.isUnmounted = true; - if (this.interval) { - clearInterval(this.interval); + if (this.fetchMeasurementTimeout) { + clearTimeout(this.fetchMeasurementTimeout); + } + if (this.getSensorTimeout) { + clearTimeout(this.getSensorTimeout); } this.source.cancel(); } From 65af6a54a8edcc829954d3f77331a2e55eded017 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 5 Jun 2018 11:09:19 +0200 Subject: [PATCH 143/160] replace placeholder image of floorplan with svg image --- src/images/ImagesBase64.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/images/ImagesBase64.jsx b/src/images/ImagesBase64.jsx index 9860158..093d278 100644 --- a/src/images/ImagesBase64.jsx +++ b/src/images/ImagesBase64.jsx @@ -1,4 +1,4 @@ // @flow export const PLACEHOLDER_IMAGE: string = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAIAAADlvkMuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NzI2MjM5Q0U4QUIxMUUzODJBMDg3QTMyOERCNTNCNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMDFDRTA1RUU5NDAxMUUzODJBMDg3QTMyOERCNTNCNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg3MjYyMzlBRThBQjExRTM4MkEwODdBMzI4REI1M0I3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg3MjYyMzlCRThBQjExRTM4MkEwODdBMzI4REI1M0I3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+rUtTygAAG15JREFUeNrs3QlvU2cWgOFc79u9zkIghLXz///SlNApEIjjxFkc7x6DmQi1yjSL7bs9D1VFKxR/+i5V9PYc7KB3dr4FAAAAWVdwBQAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABLArAAAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAABrUXIFAAkxGA4+HB25B8iY396/r1Vr7gEgCUyAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAyruQKALKh2WxWKxX3ACs3GAz7N333ACCAAUiKdhi12233ACvXPesKYIBssAINAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAAJBxJVcAwHg8/v3og3sgw/71/rdyueweAAQwAGzNZjOXAABkmxVoAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAABAnpVcAQBZUigUKpVKsfBDsTifLXz/23gyXnA/ACCAASDF6vV6s9Fo1BvVarVUuvNb23w+H45Gg8HN9XW/f9OfTCauDgAEMACko3vbUTsKw2KxeJ9fHwRBrVpd/LXd3l7846KBe72Li8uL2WzmMgFAAANAEkVR9Gxvr1qpPuWLNOrfh8YHL16cnZ93u93xxII0AAhgAEiMsBU+39+vVCqr+oJBEOzu7Oxsb5+fn590OtPZ1CUDgAAGgDiVy+WDFwetZnMdX3yRwYsKDqPo28m3Xq/ntgFAAANAPNpRtKjfQmG9n95XKhYPD16GrdaXL8dGwQAggAFgo4IgOHjxYvm2VZsRtsLa+9qfnz8NBgP3DwBZUnAFACT3u1Sh8PbNm03W71K5XH735m2r2fIIAEAAA8DaFYvFd2/fNeqNuNr79atXURh6EAAggAFgvf359vWbWrUa4xmCIDh8eWgODAACGADW6PXhq1qtFvsxFg386vAwCScBAAQwABn0fH+/uZ6PO3rMd8pCYVHjxWLRcwEAAQwAq9RqNvd29xJ1pHK5fHjw0qMBAAEMACtTLBRfvjxMYpa3Wpt/M2oAQAADkFn7+/ulpC4bP9/ftwgNAAIYAFagVqvtbCd3yrqo3+fP9j0mABDAAPBU+4nPy3a7XSmXPSkAEMAA8Hi1aq2VmHd+vksQBLsJe4MuAEAAA5Aye3u7qTjndrvtTwIDgAAGgMd+NyoUwlaYiqMGQdCOIo8MAAQwADxGFEaLsEzLadtR2yMDAAEMAI8L4DBFp63VamVvhQUAAhgAHioIgnq9nq4zNxtNDw4ABDAAPMyifguFlH0/ajYaHhwACGAAeGAA1+rpO3O97sEBgAAGgIepViqpO3O5XE7Ru3YBAAIYgESopDCA03tsABDAABCblL6jsjeCBgABDAAP/FZUKDg2ACCAARDAjg0ACGAA1G+MJ/cmWAAggAHg/mazmZMDAAIYgFyYzqYCGAAQwABk32yaypKcCmAAEMAA8CCj8SiVxx6NPDsAEMAA8ADDYfpKcj6fj8djzw4ABDAAPMBoNExftKfwzACAAAYgZv2bm/SduX/jwQGAAAaAhxkOh5PJJG0BfO3BAYAABoAHu+73U3Ta+XxuAgwAAhgAHuPiopei015dX6f0s4uXgiDwWw4AAQwAsSVlirage6nK9b+o1+rb7bbfcgAIYACIryp76ajKRahfXV2l956jMNzb3TMEBkAAA0Bsumfd+XzunOsWhmG5XDYEBkAAA0BsJtPp2fl5wg85TcMh/496rb6o38VPDIEBEMAAEKfT086iMJN8ws5pZzabpfeGozBc/sQQGAABDABxmkynJ51OYo83GA67Z2epvuHwfwG8ZQgMgAAGgHidnZ/d3CT0I3aPvx6n+m5v95+XDIEBEMAAELNPXz4ncBH6pHOS2DK/p+iX8e+SITAAAhgA4jQej78cJ2vWen193Tk9TfvFhn8LYENgAAQwAMTs8uoyOX8YeDQaffryOe1X+pf951uGwAAIYACIWee0k4QPHBpPJn/8+Z+Evzf1ffx9/3nJEBgAAQwA8Tv+ehxvA3+v3z8+jsfjDFxmeEcAbxkCAyCAASAhDdw5jWcXejgcHn08GmWifu/af14yBAZAAANAIpx0On9+/jSbzTb5oheXF0d/fJxMJtm4w+ju8e+SITAAAhgAEuHy8vL3ow+DwWADrzWfz4+/Hn/6/HnDyb1W4T8FsCEwAAIYAJJiPB5/+Hj09du3tXbp1fXVvz/8noQ331qh/7//fMsQGIA8KLkCANKie9a9uLx4tvdsu91eba0NhoOTTufq6ip7l/aP+89LyyFwxuIfAAQwACk2mUyW74y1t7vbjtrFYvGJX7Df7592u1fXV1m9sfB+Abz1Ywh83uvN53O/zQAQwACQoAz++u3bt5OTVqvVDqNms1koPOwP9QyGw8vLy95FLxufcnSXe+4/LxkCAyCAASCh5vP55Q/L0ms06tXK9x+VcuUvk+HFr1yE7uiH/uCm3+9Pp9M8XFF07/HvkiEwAAIYAJLuZnCz+OvXf1P4YT778SOvRRc+MIANgQHINu8CDUA2zWazyWQynU1zW78P2n++5e2gARDAAEDKPHT/eclnAgMggAGAlAkfFcBbhsAACGAAIEUet/+8ZAgMgAAGAFIjeuz4d8kQGAABDACkQ/i0ADYEBkAAAwAp8JT951uGwAAIYAAg6Z64/7xkCAyAAAYAki5cRQBvGQIDIIABgCRbyf7zkiEwAAIYAEiuaEXj3yVDYAAEMACQUOFKA9gQGAABDAAk0Qr3n28ZAgMggAGAxFnt/vOSITAAAhgASJxwDQG8ZQgMgAAGABJlHfvPS4bAAAhgACBBovWMf5cMgQEQwABAUoTrDGBDYAAEMACQCOvbf75lCAyAAAYA4rfW/eelRWC3DYEBEMAAQLzC9QfwwnYkgAEQwABAfDaw//zzher1cqnswgEQwABAPKKNjH+Xwg2+FgAIYAAgtiiNBDAAAhgAiMXG9p9/vpwtaAAEMAAQi82PZG1BAyCAAYAYbD5HbUEDIIABgE3b8P7zzxe1BQ2AAAYANiyuYawtaAAEMACQixC1BQ2AAAYANieW/eefL20LGgABDABsTLxjWFvQAAhgACAXCWoLGgABDABsQoz7zz8PYAsaAAEMAGxAEgawtqABEMAAQC7i0xY0AAIYAFiv2Peffx7DFjQAAhgAWKvkjF5tQQMggAGAXGSnLWgABDAAsC4J2X/+eRhb0AAIYABg5Rapubuz+/LgIFGnsgUNQFqUXAEAJL97F5EZhWG9Xk/g8RYH6551PSYABDAAkM3uvbXcgh5Pxh4ZAAIYAMhg9/4qNAQGQAADABnu3lu2oAEQwABAlrv3li1oAAQwAJDl7v2VLWgABDAAkOXuvWULGgABDABkuXtv2YIGQAADgO7Ncvf+yhY0AAIYAHRvLtiCBkAAA4DuzQVb0AAIYADQvXlhCxoAAQwAujcXbEEDIIABQPfmgi1oAAQwAOjevLAFDYAABgDdmwu2oAEQwACge3PBFjQAAhgAdG9e2IIGQAADgO7NBVvQAAhgAEiQIAh2tnd07zrYggZAAANAgur3zes3zUbDVayJLWgAEqjgCgBQv6xcFIYuAQABDADqN/uWW9DuAQABDADqN/tCQ2AABDAAqN88sAUNgAAGAPWbC7agARDAAKB+88IWNAACGADUby7YggZAAAOA+s0FW9AACGAAUL95YQsaAAEMAOo3F2xBAyCAAUD95oItaAAEMACo37ywBQ2AAAYA9ZsLtqABEMAAoH5zwRY0AAIYANRvXtiCBkAAA4D6zQVb0AAIYABQv7lgCxoAAQwA6jcvbEEDIIABQP3mgi1oAAQwAKjfXKjX661Wyz0AIIABQP1m3+vDVxoYAAEMAOo3Fw9OAwMggAFA/WpgABDAAKB+NTAACGAA1C8aGAAEMADqFw0MAAIYAPWLBgZAAAOA+kUDAyCAAUD9ooEBEMAAoH7RwAAIYABQv2hgAAQwAKhfDayBARDAAKhfNDAACGAA1C8aGAAEMADqFw0MAAIYAPWLBgZAAAOA+kUDAyCAAUD9ooEBEMAAoH7RwAAkT8kVALBojEZ8/fls75n65R8b+Pjr19F49JQv4iYBEMAAbJVKpXdv3roHktzALw8O3AMAT2QFGgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAAAg40quACAbOt3T84uee4CVm4zHLgFAAAOQIKMf3AMAwF2sQAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAPKs5AoAEqIQFGrVqnuA7P2n7RIAEiLonZ27BQAAADLP/5IEAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAASwKwAAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAAAAAhgAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAAAEMAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAAIAABgAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAABAAAMAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAAIIABAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAAIYAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAAAIYAAAABDAAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAAABDAAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAACAAAYAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAQAADAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAACCAAQAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAQwAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAAACGAAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAgAAGAAAAAQwAAIAABgAAAAEMAAAAAhgAAAAEMAAAAAhgAAAAEMAAAAAggAEAAEAAAwAAkHv/FWAAaZqt5bSTDrUAAAAASUVORK5CYII="; + "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTUwMCIKICAgaGVpZ2h0PSIxNTAwIgogICB2aWV3Qm94PSIwIDAgMTUwMCAxNTAwIgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjUgcjEwMDQwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJUZXN0aW5nRmxvb3JQbGFuLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjAuNDk0OTc0NzUiCiAgICAgaW5rc2NhcGU6Y3g9IjcwNi41MjQ5NyIKICAgICBpbmtzY2FwZTpjeT0iNzE4Ljc4NjE4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDE3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICB1bml0cz0icHgiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iRWJlbmUgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw0NDcuNjM3NykiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNiM2IzYjM7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIGQ9Im0gMCwtMTguNjM3NzA1IDE1MDAsMTBlLTYiCiAgICAgICBpZD0icGF0aDM4MTUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGgzODE3IgogICAgICAgZD0ibSAwLDE5NS4zNjIyOSAxNTAwLDFlLTUiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojYjNiM2IzO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNiM2IzYjM7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIGQ9Im0gMCw0MDkuMzYyMyAxNTAwLDAiCiAgICAgICBpZD0icGF0aDM4MTkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGgzODIxIgogICAgICAgZD0ibSAwLDYyMy4zNjIzIDE1MDAsMCIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNiM2IzYjM7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2IzYjNiMztzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgZD0ibSAwLDgzNi4zNjIzIDE1MDAsMCIKICAgICAgIGlkPSJwYXRoMzgyMyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM4MjUiCiAgICAgICBkPSJtIDAsLTIzMS42Mzc3IDE1MDAsMWUtNSIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNiM2IzYjM7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2IzYjNiMztzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgZD0ibSAxMDcxLDEwNTIuMzYyMyAwLC0xNTAwIgogICAgICAgaWQ9InBhdGgzODMxIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzgzMyIKICAgICAgIGQ9Im0gODU3LDEwNTIuMzYyMyAwLC0xNTAwIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2IzYjNiMztzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojYjNiM2IzO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJtIDY0MywxMDUyLjM2MjMgMCwtMTUwMCIKICAgICAgIGlkPSJwYXRoMzgzNSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM4MzciCiAgICAgICBkPSJtIDQyOSwxMDUyLjM2MjMgMCwtMTUwMCIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNiM2IzYjM7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2IzYjNiMztzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgZD0ibSAyMTYsMTA1Mi4zNjIzIDAsLTE1MDAiCiAgICAgICBpZD0icGF0aDM4MzkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InBhdGgzODQxIgogICAgICAgZD0ibSAxMjg0LDEwNTIuMzYyMyAwLC0xNTAwIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2IzYjNiMztzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICBkPSJtIDIsLTQ0NS42Mzc3IDE0OTYsMCAwLDE0OTYgLTE0OTYsMCB6IgogICAgICAgaWQ9InBhdGgzODEzIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjY1MC4zOTA2MyIKICAgICAgIHk9IjYxNS4zNjIzIgogICAgICAgaWQ9InRleHQzODQ3IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5IgogICAgICAgICB4PSI2NTAuMzkwNjMiCiAgICAgICAgIHk9IjYxNS4zNjIzIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjMycHgiPi0xPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjY0Ni4yMDMxMyIKICAgICAgIHk9IjgyOC4zNjIzIgogICAgICAgaWQ9InRleHQzODQ3LTEiCiAgICAgICBzb2RpcG9kaTpsaW5lc3BhY2luZz0iMTI1JSI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjM4NDktNyIKICAgICAgICAgeD0iNjQ2LjIwMzEzIgogICAgICAgICB5PSI4MjguMzYyMyIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4tMjwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjQwcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjEyNSU7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OlNhbnMiCiAgICAgICB4PSI2NDUuOTY4NzUiCiAgICAgICB5PSIxMDQxLjk1NjEiCiAgICAgICBpZD0idGV4dDM4NDctMS00IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMCIKICAgICAgICAgeD0iNjQ1Ljk2ODc1IgogICAgICAgICB5PSIxMDQxLjk1NjEiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MzJweCI+LTM8L3RzcGFuPjwvdGV4dD4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpTYW5zIgogICAgICAgeD0iNjU2LjczNDM4IgogICAgICAgeT0iNDAwLjk3MTY4IgogICAgICAgaWQ9InRleHQzODQ3LTEtNC05IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMC00IgogICAgICAgICB4PSI2NTYuNzM0MzgiCiAgICAgICAgIHk9IjQwMC45NzE2OCIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4wPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjY2MS4wNzgxMyIKICAgICAgIHk9IjE4Ny4zNjIyOSIKICAgICAgIGlkPSJ0ZXh0Mzg0Ny0xLTQtOS04IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMC00LTgiCiAgICAgICAgIHg9IjY2MS4wNzgxMyIKICAgICAgICAgeT0iMTg3LjM2MjI5IgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjMycHgiPjE8L3RzcGFuPjwvdGV4dD4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpTYW5zIgogICAgICAgeD0iNjU2Ljg5MDYzIgogICAgICAgeT0iLTI2LjYzNzcwMyIKICAgICAgIGlkPSJ0ZXh0Mzg0Ny0xLTQtOS04LTIiCiAgICAgICBzb2RpcG9kaTpsaW5lc3BhY2luZz0iMTI1JSI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjM4NDktNy0wLTQtOC00IgogICAgICAgICB4PSI2NTYuODkwNjMiCiAgICAgICAgIHk9Ii0yNi42Mzc3MDMiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MzJweCI+MjwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjQwcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjEyNSU7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OlNhbnMiCiAgICAgICB4PSI2NTYuNjU2MjUiCiAgICAgICB5PSItMjQwLjA0Mzk1IgogICAgICAgaWQ9InRleHQzODQ3LTEtNC05LTgtMi01IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMC00LTgtNC01IgogICAgICAgICB4PSI2NTYuNjU2MjUiCiAgICAgICAgIHk9Ii0yNDAuMDQzOTUiCiAgICAgICAgIHN0eWxlPSJmb250LXNpemU6MzJweCI+MzwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjQwcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjEyNSU7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OlNhbnMiCiAgICAgICB4PSIxMjk3LjY1NjMiCiAgICAgICB5PSI0MDAuOTU2MDUiCiAgICAgICBpZD0idGV4dDM4NDctMS00LTktOC0yLTUtMSIKICAgICAgIHNvZGlwb2RpOmxpbmVzcGFjaW5nPSIxMjUlIj48dHNwYW4KICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgaWQ9InRzcGFuMzg0OS03LTAtNC04LTQtNS03IgogICAgICAgICB4PSIxMjk3LjY1NjMiCiAgICAgICAgIHk9IjQwMC45NTYwNSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4zPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjEwODMuODkwNiIKICAgICAgIHk9IjQwMS4zNjIzIgogICAgICAgaWQ9InRleHQzODQ3LTEtNC05LTgtMi0xIgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMC00LTgtNC0xIgogICAgICAgICB4PSIxMDgzLjg5MDYiCiAgICAgICAgIHk9IjQwMS4zNjIzIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjMycHgiPjI8L3RzcGFuPjwvdGV4dD4KICAgIDx0ZXh0CiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpTYW5zIgogICAgICAgeD0iODc1LjA3ODEzIgogICAgICAgeT0iNDAxLjM2MjMiCiAgICAgICBpZD0idGV4dDM4NDctMS00LTktOC01IgogICAgICAgc29kaXBvZGk6bGluZXNwYWNpbmc9IjEyNSUiPjx0c3BhbgogICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICBpZD0idHNwYW4zODQ5LTctMC00LTgtMiIKICAgICAgICAgeD0iODc1LjA3ODEzIgogICAgICAgICB5PSI0MDEuMzYyMyIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4xPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjQzNi4zOTA2MyIKICAgICAgIHk9IjQwMS4zNjIzIgogICAgICAgaWQ9InRleHQzODQ3LTciCiAgICAgICBzb2RpcG9kaTpsaW5lc3BhY2luZz0iMTI1JSI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjM4NDktNiIKICAgICAgICAgeD0iNDM2LjM5MDYzIgogICAgICAgICB5PSI0MDEuMzYyMyIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4tMTwvdHNwYW4+PC90ZXh0PgogICAgPHRleHQKICAgICAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjQwcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjEyNSU7bGV0dGVyLXNwYWNpbmc6MHB4O3dvcmQtc3BhY2luZzowcHg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZvbnQtZmFtaWx5OlNhbnMiCiAgICAgICB4PSIyMTguMjAzMTMiCiAgICAgICB5PSI0MDEuMzYyMyIKICAgICAgIGlkPSJ0ZXh0Mzg0Ny0xLTEiCiAgICAgICBzb2RpcG9kaTpsaW5lc3BhY2luZz0iMTI1JSI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjM4NDktNy00IgogICAgICAgICB4PSIyMTguMjAzMTMiCiAgICAgICAgIHk9IjQwMS4zNjIzIgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOjMycHgiPi0yPC90c3Bhbj48L3RleHQ+CiAgICA8dGV4dAogICAgICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6NDBweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6U2FucyIKICAgICAgIHg9IjQuOTY4NzUiCiAgICAgICB5PSI0MDAuOTU2MDUiCiAgICAgICBpZD0idGV4dDM4NDctMS00LTIiCiAgICAgICBzb2RpcG9kaTpsaW5lc3BhY2luZz0iMTI1JSI+PHRzcGFuCiAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgIGlkPSJ0c3BhbjM4NDktNy0wLTMiCiAgICAgICAgIHg9IjQuOTY4NzUiCiAgICAgICAgIHk9IjQwMC45NTYwNSIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMnB4Ij4tMzwvdHNwYW4+PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg=="; From eb16b9405869d4076e2c34d47b67d60a94ecae35 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 12:38:50 +0200 Subject: [PATCH 144/160] Fixed double-fetch of measurement --- src/containers/measurements/MeasurementContainer.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/containers/measurements/MeasurementContainer.jsx b/src/containers/measurements/MeasurementContainer.jsx index 08cf036..a3e7524 100644 --- a/src/containers/measurements/MeasurementContainer.jsx +++ b/src/containers/measurements/MeasurementContainer.jsx @@ -192,6 +192,7 @@ export default class MeasurementContainer extends React.Component< if ( this && prevProps && + prevState.currentMeasurement.measurementId != null && prevState.currentMeasurement.measurementId !== this.state.currentMeasurement.measurementId ) { From fc933395354a1d3533f4979cd84cbc0becdab92d Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 12:39:22 +0200 Subject: [PATCH 145/160] Adjusted handling of return of sensor state XHR --- src/containers/dashboard/DashboardContainer.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/containers/dashboard/DashboardContainer.jsx b/src/containers/dashboard/DashboardContainer.jsx index 9337d83..d3c1f6c 100644 --- a/src/containers/dashboard/DashboardContainer.jsx +++ b/src/containers/dashboard/DashboardContainer.jsx @@ -57,6 +57,8 @@ export default class DashboardContainer extends React.Component { .then(result => { if (result.status === 200) { this.setState({ sensorConnectionState: "CONNECTED" }); + } else if (result.status === 204) { + this.setState({ sensorConnectionState: "DISCONNECTED" }); } this.resetGetSensorTimeout(); }) From 283c2c61c2b802d4aed401b9393762e9a5f154a4 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 12:53:37 +0200 Subject: [PATCH 146/160] Fixed details --- src/containers/dashboard/DashboardContainer.jsx | 6 +++--- src/containers/importexport/ImportExportContainer.jsx | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/containers/dashboard/DashboardContainer.jsx b/src/containers/dashboard/DashboardContainer.jsx index d3c1f6c..00c8bbc 100644 --- a/src/containers/dashboard/DashboardContainer.jsx +++ b/src/containers/dashboard/DashboardContainer.jsx @@ -40,11 +40,11 @@ export default class DashboardContainer extends React.Component { if (result.status === 200) { activeMeasurement = Measurement.fromObject(result.data); } - this.updateState("CONNECTED", activeMeasurement); + this.updateActiveMeasurement("CONNECTED", activeMeasurement); this.resetFetchMeasurementTimeout(); }) .catch(error => { - this.updateState("DISCONNECTED", undefined); + this.updateActiveMeasurement("DISCONNECTED", undefined); this.resetFetchMeasurementTimeout(); }); }; @@ -68,7 +68,7 @@ export default class DashboardContainer extends React.Component { }); }; - updateState = ( + updateActiveMeasurement = ( serverConnection: ConnectionState, activeMeasurement?: Measurement ) => { diff --git a/src/containers/importexport/ImportExportContainer.jsx b/src/containers/importexport/ImportExportContainer.jsx index 9955880..69833df 100644 --- a/src/containers/importexport/ImportExportContainer.jsx +++ b/src/containers/importexport/ImportExportContainer.jsx @@ -59,7 +59,6 @@ export default class ImportExportContainer extends React.Component< }; render() { - console.log(this.state.isLoading); return ( {(showToast: any) => ( From b8425d413e7421910f38d511150d3ccec59e4b56 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 14:27:02 +0200 Subject: [PATCH 147/160] FLUX-154 Fix CSRF exception --- src/containers/app/App.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/containers/app/App.jsx b/src/containers/app/App.jsx index c5b132a..78f8e1f 100644 --- a/src/containers/app/App.jsx +++ b/src/containers/app/App.jsx @@ -29,6 +29,7 @@ export default class App extends React.Component { constructor() { super(); (axios.defaults: Object).baseURL = process.env.REACT_APP_SERVICE_URI; // Sets the default URL for the rest of the applications lifetime. + axios.defaults.headers["X-Requested-With"] = "XMLHttpRequest"; } state = {}; From bd34ed510047b0f2a9524d342d0e6e2ace63910e Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 16:07:21 +0200 Subject: [PATCH 148/160] Fixed test --- src/components/dashboard/Dashboard.test.jsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/dashboard/Dashboard.test.jsx b/src/components/dashboard/Dashboard.test.jsx index f0d718c..9796dd3 100644 --- a/src/components/dashboard/Dashboard.test.jsx +++ b/src/components/dashboard/Dashboard.test.jsx @@ -5,12 +5,19 @@ import { shallow } from "enzyme"; import Dashboard from "./Dashboard"; import type { ServerState } from "./../../types/ServerState"; +import type { ConnectionState } from "./../../types/ServerState"; describe("", () => { it("should render", () => { const serverState: ServerState = { connectionState: "UNKNOWN" }; - shallow(); + const sensorState: ConnectionState = "UNKNOWN"; + shallow( + + ); }); }); From 11c6bdcf151578bfa8a31c9b7de0645e288ea4e0 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Tue, 5 Jun 2018 16:57:48 +0200 Subject: [PATCH 149/160] hide missing end date of measurement --- .../measurements/MeasurementSummary.jsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/components/measurements/MeasurementSummary.jsx b/src/components/measurements/MeasurementSummary.jsx index 6732de7..76711de 100644 --- a/src/components/measurements/MeasurementSummary.jsx +++ b/src/components/measurements/MeasurementSummary.jsx @@ -140,17 +140,19 @@ export default class MeasurementSummary extends React.Component { > Zeitraum: {this.props.currentMeasurement.startDate != null ? ( - + - - - + {this.props.currentMeasurement.endDate != null && ( + + + + + )} + ) : ( nicht verfügbar From ec43803d1588deaae6a851b82987924867f228d2 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 5 Jun 2018 18:08:13 +0200 Subject: [PATCH 150/160] Added swiss german locale for momentjs --- package.json | 1 + src/index.js | 1 + yarn.lock | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3201c15..10123ba 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "grommet": "^1.10.1", "grommet-addons": "^0.6.0", "js-file-download": "^0.4.1", + "moment": "^2.22.2", "node-sass-chokidar": "^1.2.0", "npm-run-all": "^4.1.2", "react": "^16.3.1", diff --git a/src/index.js b/src/index.js index 75f30a7..0c2dd4b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import React from "react"; import ReactDOM from "react-dom"; import registerServiceWorker from "./registerServiceWorker"; +import "moment/locale/de-ch"; import "./index.css"; import App from "./containers/app/App"; diff --git a/yarn.lock b/yarn.lock index 2c2dbd2..5f1a3d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6566,7 +6566,7 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -moment@^2.20.1: +moment@^2.20.1, moment@^2.22.2: version "2.22.2" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" From 3092658276ee20a9fb93d12a90ce7c7c7e4af1ee Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Wed, 6 Jun 2018 09:45:05 +0200 Subject: [PATCH 151/160] Update version to 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10123ba..f625aae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "flux-frontend", - "version": "0.1.0", + "version": "1.0.0", "private": true, "dependencies": { "@flux-coordinator/heatmapjs": "^2.1.4", From e1664ae39fc6cafdb7b8c345d41a36b08c6e59dc Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sat, 9 Jun 2018 09:35:15 +0200 Subject: [PATCH 152/160] remove unused settings menu --- src/components/navmenu/NavMenu.jsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/navmenu/NavMenu.jsx b/src/components/navmenu/NavMenu.jsx index 6bba34b..18b6487 100644 --- a/src/components/navmenu/NavMenu.jsx +++ b/src/components/navmenu/NavMenu.jsx @@ -21,9 +21,6 @@ export default function NavMenu({ onNavigate }: Props) { Import / Export - - Einstellungen - { From f427b4c9edfecc4ebe15648298ba5d45feac3486 Mon Sep 17 00:00:00 2001 From: Patrick Scherler Date: Sat, 9 Jun 2018 09:48:44 +0200 Subject: [PATCH 153/160] initialize missing date with null --- src/models/Measurement.jsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/models/Measurement.jsx b/src/models/Measurement.jsx index 2ca877b..ad6f65b 100644 --- a/src/models/Measurement.jsx +++ b/src/models/Measurement.jsx @@ -8,8 +8,8 @@ type ConstructorType = { measurementId: number, name: string, description: string, - startDate: Date, - endDate: Date, + startDate: ?Date, + endDate: ?Date, measurementState: MeasurementState, xOffset: number, yOffset: number, @@ -25,8 +25,8 @@ export default class Measurement { measurementId: ?number; name: string; description: string; - startDate: Date; - endDate: Date; + startDate: ?Date; + endDate: ?Date; measurementState: MeasurementState; transformation: Transformation; creator: string; @@ -42,8 +42,8 @@ export default class Measurement { xOffset: number, yOffset: number, scaleFactor: number = 1.0, - startDate?: Date = new Date(), - endDate?: Date = new Date(), + startDate?: ?Date = null, + endDate?: ?Date = null, measurementState?: MeasurementState = "READY", creator?: string = "", readings?: Reading[] = [], From 719cf9a45fd6e63ec1948a3f1f1940f3580f9cfb Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 12 Jun 2018 13:45:58 +0200 Subject: [PATCH 154/160] Unregister registered service workers --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 0c2dd4b..aae3f36 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,10 @@ import React from "react"; import ReactDOM from "react-dom"; -import registerServiceWorker from "./registerServiceWorker"; +import { unregister } from "./registerServiceWorker"; import "moment/locale/de-ch"; import "./index.css"; import App from "./containers/app/App"; ReactDOM.render(, document.getElementById("root")); -registerServiceWorker(); +unregister(); From fbf5fe2b8fa00bbc91f56165cbd73e7a1d9f79db Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 12 Jun 2018 14:16:39 +0200 Subject: [PATCH 155/160] Added nginx configuration --- .../heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx | 2 +- static.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 static.json diff --git a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx index 7cb83cd..342fe1b 100644 --- a/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx +++ b/src/components/heatmap/heatmapAnalysisForm/HeatmapAnalysisForm.jsx @@ -140,7 +140,7 @@ export default class HeatmapAnalysisForm extends React.Component { diff --git a/static.json b/static.json new file mode 100644 index 0000000..d641fad --- /dev/null +++ b/static.json @@ -0,0 +1,6 @@ +{ + "root": "build/", + "routes": { + "/**": "index.html" + } +} From e481fbd78b13b28023ceaea33eb04c9d37a2ddbc Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Tue, 12 Jun 2018 19:54:16 +0200 Subject: [PATCH 156/160] Cleanup headers --- src/components/contentBox/ContentBox.jsx | 12 ++++----- src/components/projects/Project.jsx | 2 +- src/components/projects/Projects.jsx | 31 +++++++----------------- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/src/components/contentBox/ContentBox.jsx b/src/components/contentBox/ContentBox.jsx index 7a6e842..36a9c8f 100644 --- a/src/components/contentBox/ContentBox.jsx +++ b/src/components/contentBox/ContentBox.jsx @@ -1,13 +1,14 @@ // @flow import * as React from "react"; -import Header from "grommet/components/Header"; import Heading from "grommet/components/Heading"; +import Paragraph from "grommet/components/Paragraph"; import Article from "grommet/components/Article"; import Box from "grommet/components/Box"; import { withRouter } from "react-router"; type Props = { heading: React.Node, + subheading?: React.Node, children: React.Node, location: any }; @@ -16,11 +17,10 @@ class ContentBox extends React.Component { render() { return (
-
- - {this.props.heading} - -
+ + {this.props.heading} + + {this.props.subheading} {this.props.children}
); diff --git a/src/components/projects/Project.jsx b/src/components/projects/Project.jsx index a874e99..ef1500b 100644 --- a/src/components/projects/Project.jsx +++ b/src/components/projects/Project.jsx @@ -30,7 +30,7 @@ export default function Project({ projects, match, onDeleteRoom }: Props) { } return ( - + { const { projects, loading, onDeleteProject } = this.props; return ( -
-
- Alle Projekte -
-
-
- - project.projectId} - loading={loading} - ItemRenderer={({ item }) => ( - - )} - /> -
+ + project.projectId} + loading={loading} + ItemRenderer={({ item }) => ( + + )} + />
); } From 4015f14ac80fe9af6901e8241136f548a538c412 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Thu, 14 Jun 2018 08:40:04 +0200 Subject: [PATCH 157/160] Simplified the layout of Project and Room views --- src/components/projects/Project.jsx | 33 +++++++++++++---------------- src/components/room/Room.jsx | 20 +++++------------ 2 files changed, 20 insertions(+), 33 deletions(-) diff --git a/src/components/projects/Project.jsx b/src/components/projects/Project.jsx index ef1500b..99d4ea9 100644 --- a/src/components/projects/Project.jsx +++ b/src/components/projects/Project.jsx @@ -1,6 +1,5 @@ // @flow import * as React from "react"; -import Box from "grommet/components/Box"; import NotFound from "../../components/notfound/NotFound"; import ContentBox from "../contentBox/ContentBox"; @@ -31,23 +30,21 @@ export default function Project({ projects, match, onDeleteRoom }: Props) { return ( - - - item.roomId} - ItemRenderer={({ item }) => ( - - )} - /> - + + item.roomId} + ItemRenderer={({ item }) => ( + + )} + /> ); } diff --git a/src/components/room/Room.jsx b/src/components/room/Room.jsx index cae68ce..1b51387 100644 --- a/src/components/room/Room.jsx +++ b/src/components/room/Room.jsx @@ -1,18 +1,16 @@ // @flow import * as React from "react"; -import Heading from "grommet/components/Heading"; import Section from "grommet/components/Section"; -import Article from "grommet/components/Article"; -import Paragraph from "grommet/components/Paragraph"; // eslint-disable-next-line import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; -import Measurement from "../../models/Measurement"; -import RoomModel from "../../models/Room"; +import ContentBox from "../contentBox/ContentBox"; import ItemsList from "../list/ItemsList"; import ItemListHeader from "./../list/ItemListHeader"; import MeasurementContainer from "../../containers/measurements/MeasurementContainer"; import AnchorMeasurementItemRenderer from "../measurements/AnchorMeasurementItemRenderer"; +import RoomModel from "../../models/Room"; +import Measurement from "../../models/Measurement"; type Props = { match: any, @@ -22,15 +20,7 @@ type Props = { export default function Room({ match, room, onDeleteMeasurement }: Props) { return ( -
-
- - {room.name} - - {room.description} -
+ ( @@ -54,7 +44,7 @@ export default function Room({ match, room, onDeleteMeasurement }: Props) { )} />
-
+
); } From b614733b82bb742060c3d17ad9c56605d13761fb Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Thu, 14 Jun 2018 08:44:54 +0200 Subject: [PATCH 158/160] Added the help-text for Room and Measurement export steps --- .../importexport/wizard/SelectMeasurementsStep.jsx | 4 ++++ src/containers/importexport/wizard/SelectRoomsStep.jsx | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx index 215e961..8f724da 100644 --- a/src/containers/importexport/wizard/SelectMeasurementsStep.jsx +++ b/src/containers/importexport/wizard/SelectMeasurementsStep.jsx @@ -30,6 +30,9 @@ export default class SelectMeasurementsStep extends React.Component< projects: [] }; + subheading: string = + "Sie können mit CTRL + Mausclick mehrere Projekte auswählen."; + getMeasurementsOfRoom = ( data: Project[], projectId: ?number, @@ -122,6 +125,7 @@ export default class SelectMeasurementsStep extends React.Component< return ( diff --git a/src/containers/importexport/wizard/SelectRoomsStep.jsx b/src/containers/importexport/wizard/SelectRoomsStep.jsx index 3285d2c..3a3db89 100644 --- a/src/containers/importexport/wizard/SelectRoomsStep.jsx +++ b/src/containers/importexport/wizard/SelectRoomsStep.jsx @@ -24,10 +24,8 @@ export default class SelectRoomsStep extends React.Component { selectedProjects: [] }; - listItemProperties = { - margin: "small", - pad: "small" - }; + subheading: string = + "Sie können mit CTRL + Mausclick mehrere Projekte auswählen."; onSelect = (selected: ?number | number[], project: Project) => { const foundProject = this.props.projects.find( @@ -88,6 +86,7 @@ export default class SelectRoomsStep extends React.Component { return ( {projects && From f959af5f36f9937cffb0a338fea4aae80d11a3c5 Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Thu, 14 Jun 2018 17:10:49 +0200 Subject: [PATCH 159/160] Update readme.md with instructions --- README.md | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e7feae6..f31821f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Flux-Frontend
- + [![Tested with Jest](https://img.shields.io/badge/tested_with-jest-99424f.svg)](https://github.com/facebook/jest) [![GitHub license](https://img.shields.io/github/license/Flux-Coordinator/flux-frontend.svg)](https://github.com/Flux-Coordinator/flux-frontend) [![Sonar Cloud Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating) @@ -12,18 +12,32 @@ [![Dependencies](https://david-dm.org/Flux-Coordinator/flux-frontend.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend) [![DevDependencies](https://david-dm.org/Flux-Coordinator/flux-frontend/dev-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=dev) [![peerDependency Status](https://david-dm.org/Flux-Coordinator/repo/peer-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=peer) - +
-## Ordnerstruktur +## How to run this application in development mode + +Follow the below guide to run this application in development mode. +**Prerequisites:** [NodeJS 8](https://nodejs.org/en/download/) and [Yarn](https://yarnpkg.com/en/docs/install) (recommended) or NPM. + +1. Download the repository +2. Install the dependencies using `yarn` or `npm install` +3. Run the application using the `yarn start` or the `npm run start` command. + +The URI for the connection to the [flux-server](https://github.com/Flux-Coordinator/flux-server) instance needs to be set either as an environment variable REACT_APP_SERVICE_URI or using a `.env` file, in which you have the following content: + +``` +REACT_APP_SERVICE_URI = +``` + +## Run in Production Mode + +To run this application in production mode, you need to build it first, using the `yarn build` or `npm run build` command. After the command has run through, you will find the built application in the _/build_ folder. You can deploy that folder on your preferred static webserver or using [serve](https://github.com/zeit/serve). + +To install serve globally, you can use the `yarn global add serve` or `npm install -g serve`. After the installation is complete, you can use the command `serve -s build`, where build the _/build_ folder. + +If you use a webserver other than serve, you will need to make some changes. Follow the guide [here](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#serving-apps-with-client-side-routing). -Die Ordnerstruktur im **./src** Ordner sieht wie folgt aus: +## More informations -| Ordner | Beschreibung | -| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| src/api | Die JS Dateien in diesem Ordner stellen die Anfragen an das backend API. | -| src/components | In diesem Ordner befinden sich die Presentational Components. Merke, dass die CSS und Tests ebenfalls in diesem Ordner zusammen mit ihren Components befinden. | -| src/containers | In diesem Ordner befinden sich die Container Components. Diese machen die API Calls und besitzen einen State. Merke, dass die CSS und Tests ebenfalls in diesem Ordner zusammen mit ihren Components befinden. | -| src/images | Hier befinden sich die Bilder, die in der Anwendung verwendet werden. | -| src/index.jsx | In dieser Datei wird die App initialisiert. | -| src/utils | Alles, was sonst nicht eingeordnet werden kann und keinen eigenen Ordner verdient. | +For more information about running and deploying the application, you can consult the CRA documentation [here](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md). From ad4b9edc73c1ed389f9ba2e9655d40bcd308224b Mon Sep 17 00:00:00 2001 From: Esteban Luchsinger Date: Thu, 14 Jun 2018 17:25:37 +0200 Subject: [PATCH 160/160] Updated readme --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f31821f..576f88e 100644 --- a/README.md +++ b/README.md @@ -2,29 +2,29 @@
- [![Tested with Jest](https://img.shields.io/badge/tested_with-jest-99424f.svg)](https://github.com/facebook/jest) - [![GitHub license](https://img.shields.io/github/license/Flux-Coordinator/flux-frontend.svg)](https://github.com/Flux-Coordinator/flux-frontend) - [![Sonar Cloud Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating) - [![Sonar Cloud Coverage](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=coverage)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=coverage) - [![Sonar Cloud Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=alert_status)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=alert_status) - [![Build Status](https://travis-ci.org/Flux-Coordinator/flux-frontend.svg?branch=master)](https://travis-ci.org/Flux-Coordinator/flux-frontend) - [![Code Style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) - [![Dependencies](https://david-dm.org/Flux-Coordinator/flux-frontend.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend) - [![DevDependencies](https://david-dm.org/Flux-Coordinator/flux-frontend/dev-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=dev) - [![peerDependency Status](https://david-dm.org/Flux-Coordinator/repo/peer-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=peer) +[![Tested with Jest](https://img.shields.io/badge/tested_with-jest-99424f.svg)](https://github.com/facebook/jest) +[![GitHub license](https://img.shields.io/github/license/Flux-Coordinator/flux-frontend.svg)](https://github.com/Flux-Coordinator/flux-frontend) +[![Sonar Cloud Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=reliability_rating) +[![Sonar Cloud Coverage](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=coverage)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=coverage) +[![Sonar Cloud Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=alert_status)](https://sonarcloud.io/api/project_badges/measure?project=flux-frontend&metric=alert_status) +[![Build Status](https://travis-ci.org/Flux-Coordinator/flux-frontend.svg?branch=master)](https://travis-ci.org/Flux-Coordinator/flux-frontend) +[![Code Style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) +[![Dependencies](https://david-dm.org/Flux-Coordinator/flux-frontend.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend) +[![DevDependencies](https://david-dm.org/Flux-Coordinator/flux-frontend/dev-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=dev) +[![peerDependency Status](https://david-dm.org/Flux-Coordinator/repo/peer-status.svg)](https://david-dm.org/Flux-Coordinator/flux-frontend?type=peer)
## How to run this application in development mode -Follow the below guide to run this application in development mode. +Follow the guide below to run this application in development mode. **Prerequisites:** [NodeJS 8](https://nodejs.org/en/download/) and [Yarn](https://yarnpkg.com/en/docs/install) (recommended) or NPM. 1. Download the repository 2. Install the dependencies using `yarn` or `npm install` 3. Run the application using the `yarn start` or the `npm run start` command. -The URI for the connection to the [flux-server](https://github.com/Flux-Coordinator/flux-server) instance needs to be set either as an environment variable REACT_APP_SERVICE_URI or using a `.env` file, in which you have the following content: +The URI for the connection to the [flux-server](https://github.com/Flux-Coordinator/flux-server) instance needs to be set either as an environment variable named `REACT_APP_SERVICE_URI` or using a [_.env_](https://github.com/motdotla/dotenv) file, in which you have the following content: ``` REACT_APP_SERVICE_URI =