diff --git a/app/src/api/api.ts b/app/src/api/api.ts index a829fd4c..628c9165 100644 --- a/app/src/api/api.ts +++ b/app/src/api/api.ts @@ -1,12 +1,11 @@ -import express from 'express'; import bodyParser from 'body-parser'; - -import { authUser, getNewUserAPIKey, logout } from './services/user'; -import { queryLocation } from './services/search'; +import express from 'express'; import buildingsRouter from './routes/buildingsRouter'; -import usersRouter from './routes/usersRouter'; import extractsRouter from './routes/extractsRouter'; +import usersRouter from './routes/usersRouter'; +import { queryLocation } from './services/search'; +import { authUser, getNewUserAPIKey, logout } from './services/user'; const server = express.Router(); diff --git a/app/src/api/controllers/buildingController.ts b/app/src/api/controllers/buildingController.ts index 40a94e03..6b5e31b8 100644 --- a/app/src/api/controllers/buildingController.ts +++ b/app/src/api/controllers/buildingController.ts @@ -1,7 +1,8 @@ import express from 'express'; + +import asyncController from '../routes/asyncController'; import * as buildingService from '../services/building'; import * as userService from '../services/user'; -import asyncController from '../routes/asyncController'; // GET buildings diff --git a/app/src/api/controllers/extractController.ts b/app/src/api/controllers/extractController.ts index 6aed512b..183c23d8 100644 --- a/app/src/api/controllers/extractController.ts +++ b/app/src/api/controllers/extractController.ts @@ -1,6 +1,7 @@ import express from 'express'; -import * as dataExtractService from '../services/dataExtract'; + import asyncController from '../routes/asyncController'; +import * as dataExtractService from '../services/dataExtract'; const getAllDataExtracts = asyncController(async function(req: express.Request, res: express.Response) { diff --git a/app/src/api/controllers/userController.ts b/app/src/api/controllers/userController.ts index b29291a2..43c9e801 100644 --- a/app/src/api/controllers/userController.ts +++ b/app/src/api/controllers/userController.ts @@ -1,11 +1,9 @@ -import { URL } from 'url'; - import express from 'express'; -import * as userService from '../services/user'; +import asyncController from '../routes/asyncController'; import * as passwordResetService from '../services/passwordReset'; import { TokenVerificationError } from '../services/passwordReset'; -import asyncController from '../routes/asyncController'; +import * as userService from '../services/user'; import { ValidationError } from '../validation'; const createUser = asyncController(async (req: express.Request, res: express.Response) => { diff --git a/app/src/api/routes/asyncController.ts b/app/src/api/routes/asyncController.ts index 333f664b..ab809bb8 100644 --- a/app/src/api/routes/asyncController.ts +++ b/app/src/api/routes/asyncController.ts @@ -1,4 +1,4 @@ -import { Request, Response, NextFunction } from 'express'; +import { NextFunction, Request, Response } from 'express'; /** * A wrapper for controller functions that return a Promise, enabling them to be used with Express @@ -14,4 +14,4 @@ function asyncController(fn: (req: Request, res: Response, next: NextFunction) = }; } -export default asyncController; \ No newline at end of file +export default asyncController; diff --git a/app/src/api/services/building.ts b/app/src/api/services/building.ts index 85d7df37..388514e1 100644 --- a/app/src/api/services/building.ts +++ b/app/src/api/services/building.ts @@ -2,10 +2,11 @@ * Building data access * */ +import { ITask } from 'pg-promise'; + import db from '../../db'; import { tileCache } from '../../tiles/rendererDefinition'; import { BoundingBox } from '../../tiles/types'; -import { ITask } from 'pg-promise'; // data type note: PostgreSQL bigint (64-bit) is handled as string in JavaScript, because of // JavaScript numerics are 64-bit double, giving only partial coverage. diff --git a/app/src/api/services/passwordReset.ts b/app/src/api/services/passwordReset.ts index facbc074..2bcb3fdb 100644 --- a/app/src/api/services/passwordReset.ts +++ b/app/src/api/services/passwordReset.ts @@ -1,12 +1,13 @@ -import url, { URL } from 'url'; -import { errors } from 'pg-promise'; import nodemailer from 'nodemailer'; +import { errors } from 'pg-promise'; +import url, { URL } from 'url'; import db from '../../db'; -import * as userService from './user'; -import { transporter } from './email'; import { validatePassword } from '../validation'; +import { transporter } from './email'; +import * as userService from './user'; + /** * Generate a password reset token for the specified account and send the password reset link by email diff --git a/app/src/api/services/user.ts b/app/src/api/services/user.ts index c91c8e60..bce3ec14 100644 --- a/app/src/api/services/user.ts +++ b/app/src/api/services/user.ts @@ -3,10 +3,10 @@ * */ import { errors } from 'pg-promise'; +import { promisify } from 'util'; import db from '../../db'; -import { validateUsername, ValidationError, validatePassword } from '../validation'; -import { promisify } from 'util'; +import { validatePassword, validateUsername, ValidationError } from '../validation'; async function createUser(user) { diff --git a/app/src/client.tsx b/app/src/client.tsx index 3c0d7d83..cc1799de 100644 --- a/app/src/client.tsx +++ b/app/src/client.tsx @@ -2,9 +2,9 @@ * Client-side entry point to shared frontend React App * */ -import { BrowserRouter } from 'react-router-dom'; import React from 'react'; import { hydrate } from 'react-dom'; +import { BrowserRouter } from 'react-router-dom'; import App from './frontend/app'; diff --git a/app/src/frontend/app.tsx b/app/src/frontend/app.tsx index 2d2b357c..64e35c8b 100644 --- a/app/src/frontend/app.tsx +++ b/app/src/frontend/app.tsx @@ -1,29 +1,27 @@ import React, { Fragment } from 'react'; -import { Route, Switch, Link } from 'react-router-dom'; +import { Link, Route, Switch } from 'react-router-dom'; + +import Header from './header'; +import MapApp from './map-app'; +import { Building } from './models/building'; +import { User } from './models/user'; +import AboutPage from './pages/about'; +import ContactPage from './pages/contact'; +import ContributorAgreementPage from './pages/contributor-agreement'; +import DataAccuracyPage from './pages/data-accuracy'; +import DataExtracts from './pages/data-extracts'; +import OrdnanceSurveyLicencePage from './pages/ordnance-survey-licence'; +import OrdnanceSurveyUprnPage from './pages/ordnance-survey-uprn'; +import PrivacyPolicyPage from './pages/privacy-policy'; +import ForgottenPassword from './user/forgotten-password'; +import Login from './user/login'; +import MyAccountPage from './user/my-account'; +import PasswordReset from './user/password-reset'; +import SignUp from './user/signup'; import '../../node_modules/bootstrap/dist/css/bootstrap.min.css'; import './app.css'; -import Header from './header'; -import AboutPage from './pages/about'; -import ContributorAgreementPage from './pages/contributor-agreement'; -import PrivacyPolicyPage from './pages/privacy-policy'; -import DataExtracts from './pages/data-extracts'; - -import Login from './user/login'; -import MyAccountPage from './user/my-account'; -import SignUp from './user/signup'; -import ForgottenPassword from './user/forgotten-password'; -import PasswordReset from './user/password-reset'; - -import MapApp from './map-app'; -import ContactPage from './pages/contact'; -import DataAccuracyPage from './pages/data-accuracy'; -import OrdnanceSurveyLicencePage from './pages/ordnance-survey-licence'; -import OrdnanceSurveyUprnPage from './pages/ordnance-survey-uprn'; -import { Building } from './models/building'; -import { User } from './models/user'; - interface AppProps { user?: User; diff --git a/app/src/frontend/building/building-view.tsx b/app/src/frontend/building/building-view.tsx index 25fe53b9..9f4279c7 100644 --- a/app/src/frontend/building/building-view.tsx +++ b/app/src/frontend/building/building-view.tsx @@ -1,21 +1,21 @@ import React from 'react'; -import BuildingNotFound from './building-not-found'; - -import LocationContainer from './data-containers/location'; -import UseContainer from './data-containers/use'; -import TypeContainer from './data-containers/type'; -import AgeContainer from './data-containers/age'; -import SizeContainer from './data-containers/size'; -import ConstructionContainer from './data-containers/construction'; -import TeamContainer from './data-containers/team'; -import SustainabilityContainer from './data-containers/sustainability'; -import StreetscapeContainer from './data-containers/streetscape'; -import CommunityContainer from './data-containers/community'; -import PlanningContainer from './data-containers/planning'; -import LikeContainer from './data-containers/like'; import { Building } from '../models/building'; +import BuildingNotFound from './building-not-found'; +import AgeContainer from './data-containers/age'; +import CommunityContainer from './data-containers/community'; +import ConstructionContainer from './data-containers/construction'; +import LikeContainer from './data-containers/like'; +import LocationContainer from './data-containers/location'; +import PlanningContainer from './data-containers/planning'; +import SizeContainer from './data-containers/size'; +import StreetscapeContainer from './data-containers/streetscape'; +import SustainabilityContainer from './data-containers/sustainability'; +import TeamContainer from './data-containers/team'; +import TypeContainer from './data-containers/type'; +import UseContainer from './data-containers/use'; + interface BuildingViewProps { cat: string; diff --git a/app/src/frontend/building/data-components/checkbox-data-entry.tsx b/app/src/frontend/building/data-components/checkbox-data-entry.tsx index 2434136c..ddbeedf4 100644 --- a/app/src/frontend/building/data-components/checkbox-data-entry.tsx +++ b/app/src/frontend/building/data-components/checkbox-data-entry.tsx @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; -import { DataTitleCopyable } from './data-title'; import { BaseDataEntryProps } from './data-entry'; +import { DataTitleCopyable } from './data-title'; interface CheckboxDataEntryProps extends BaseDataEntryProps { value: boolean; diff --git a/app/src/frontend/building/data-components/data-entry-group.tsx b/app/src/frontend/building/data-components/data-entry-group.tsx index e013365c..a0a18829 100644 --- a/app/src/frontend/building/data-components/data-entry-group.tsx +++ b/app/src/frontend/building/data-components/data-entry-group.tsx @@ -1,7 +1,8 @@ import React, { Fragment, useState } from "react"; +import { DownIcon, RightIcon } from "../../components/icons"; + import './data-entry-group.css'; -import { RightIcon, DownIcon } from "../../components/icons"; interface DataEntryGroupProps { /** Name of the group */ diff --git a/app/src/frontend/building/data-components/data-entry.tsx b/app/src/frontend/building/data-components/data-entry.tsx index a9032885..ebcfcdc4 100644 --- a/app/src/frontend/building/data-components/data-entry.tsx +++ b/app/src/frontend/building/data-components/data-entry.tsx @@ -1,8 +1,9 @@ import React, { Fragment } from 'react'; -import { DataTitleCopyable } from './data-title'; import { CopyProps } from '../data-containers/category-view-props'; +import { DataTitleCopyable } from './data-title'; + interface BaseDataEntryProps { slug: string; title: string; diff --git a/app/src/frontend/building/data-components/multi-data-entry.tsx b/app/src/frontend/building/data-components/multi-data-entry.tsx index 755d0583..0fbe608b 100644 --- a/app/src/frontend/building/data-components/multi-data-entry.tsx +++ b/app/src/frontend/building/data-components/multi-data-entry.tsx @@ -1,8 +1,9 @@ import React, { Component, Fragment } from 'react'; import { sanitiseURL } from '../../helpers'; -import { DataTitleCopyable } from './data-title'; + import { BaseDataEntryProps } from './data-entry'; +import { DataTitleCopyable } from './data-title'; interface MultiDataEntryProps extends BaseDataEntryProps { diff --git a/app/src/frontend/building/data-components/numeric-data-entry.tsx b/app/src/frontend/building/data-components/numeric-data-entry.tsx index f949cb5c..4867994f 100644 --- a/app/src/frontend/building/data-components/numeric-data-entry.tsx +++ b/app/src/frontend/building/data-components/numeric-data-entry.tsx @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; -import { DataTitleCopyable } from './data-title'; import { BaseDataEntryProps } from './data-entry'; +import { DataTitleCopyable } from './data-title'; interface NumericDataEntryProps extends BaseDataEntryProps { diff --git a/app/src/frontend/building/data-components/select-data-entry.tsx b/app/src/frontend/building/data-components/select-data-entry.tsx index 969b2de2..859c3a4a 100644 --- a/app/src/frontend/building/data-components/select-data-entry.tsx +++ b/app/src/frontend/building/data-components/select-data-entry.tsx @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; -import { DataTitleCopyable } from './data-title'; import { BaseDataEntryProps } from './data-entry'; +import { DataTitleCopyable } from './data-title'; interface SelectDataEntryProps extends BaseDataEntryProps { value: string; diff --git a/app/src/frontend/building/data-components/textbox-data-entry.tsx b/app/src/frontend/building/data-components/textbox-data-entry.tsx index 27f929ed..3b5cca28 100644 --- a/app/src/frontend/building/data-components/textbox-data-entry.tsx +++ b/app/src/frontend/building/data-components/textbox-data-entry.tsx @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; -import { DataTitleCopyable } from './data-title'; import { BaseDataEntryProps } from './data-entry'; +import { DataTitleCopyable } from './data-title'; interface TextboxDataEntryProps extends BaseDataEntryProps { value: string; diff --git a/app/src/frontend/building/data-components/year-data-entry.tsx b/app/src/frontend/building/data-components/year-data-entry.tsx index 94fcc2cb..17f60836 100644 --- a/app/src/frontend/building/data-components/year-data-entry.tsx +++ b/app/src/frontend/building/data-components/year-data-entry.tsx @@ -1,9 +1,10 @@ import React, { Component, Fragment } from 'react'; -import NumericDataEntry from './numeric-data-entry'; import { dataFields } from '../../data_fields'; import { CopyProps } from '../data-containers/category-view-props'; +import NumericDataEntry from './numeric-data-entry'; + interface YearDataEntryProps { year: number; upper: number; diff --git a/app/src/frontend/building/data-container.tsx b/app/src/frontend/building/data-container.tsx index c5685fe6..03edb95a 100644 --- a/app/src/frontend/building/data-container.tsx +++ b/app/src/frontend/building/data-container.tsx @@ -1,15 +1,16 @@ import React, { Fragment } from 'react'; -import { Redirect, NavLink } from 'react-router-dom'; +import { NavLink, Redirect } from 'react-router-dom'; -import ContainerHeader from './container-header'; import ErrorBox from '../components/error-box'; import InfoBox from '../components/info-box'; -import { CopyControl } from './header-buttons/copy-control'; -import { ViewEditControl } from './header-buttons/view-edit-control'; +import { compareObjects } from '../helpers'; import { Building } from '../models/building'; import { User } from '../models/user'; -import { compareObjects } from '../helpers'; + +import ContainerHeader from './container-header'; import { CategoryViewProps, CopyProps } from './data-containers/category-view-props'; +import { CopyControl } from './header-buttons/copy-control'; +import { ViewEditControl } from './header-buttons/view-edit-control'; interface DataContainerProps { title: string; diff --git a/app/src/frontend/building/data-containers/age.tsx b/app/src/frontend/building/data-containers/age.tsx index 4cb1789c..cd872db4 100644 --- a/app/src/frontend/building/data-containers/age.tsx +++ b/app/src/frontend/building/data-containers/age.tsx @@ -1,12 +1,13 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; +import { dataFields } from '../../data_fields'; import MultiDataEntry from '../data-components/multi-data-entry'; import NumericDataEntry from '../data-components/numeric-data-entry'; import SelectDataEntry from '../data-components/select-data-entry'; import TextboxDataEntry from '../data-components/textbox-data-entry'; import YearDataEntry from '../data-components/year-data-entry'; -import { dataFields } from '../../data_fields'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/community.tsx b/app/src/frontend/building/data-containers/community.tsx index 0446e9f2..4c232239 100644 --- a/app/src/frontend/building/data-containers/community.tsx +++ b/app/src/frontend/building/data-containers/community.tsx @@ -1,6 +1,7 @@ import React, { Fragment } from 'react'; import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/construction.tsx b/app/src/frontend/building/data-containers/construction.tsx index a2630c4e..d053f018 100644 --- a/app/src/frontend/building/data-containers/construction.tsx +++ b/app/src/frontend/building/data-containers/construction.tsx @@ -1,7 +1,6 @@ import React, { Fragment } from 'react'; import withCopyEdit from '../data-container'; -import DataEntry from '../data-components/data-entry'; /** * Construction view/edit section diff --git a/app/src/frontend/building/data-containers/like.tsx b/app/src/frontend/building/data-containers/like.tsx index 0a366bdb..bd0922bc 100644 --- a/app/src/frontend/building/data-containers/like.tsx +++ b/app/src/frontend/building/data-containers/like.tsx @@ -1,7 +1,8 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; import LikeDataEntry from '../data-components/like-data-entry'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/location.tsx b/app/src/frontend/building/data-containers/location.tsx index a3ecf591..e3e26f35 100644 --- a/app/src/frontend/building/data-containers/location.tsx +++ b/app/src/frontend/building/data-containers/location.tsx @@ -1,11 +1,12 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; +import InfoBox from '../../components/info-box'; +import { dataFields } from '../../data_fields'; import DataEntry from '../data-components/data-entry'; import NumericDataEntry from '../data-components/numeric-data-entry'; import UPRNsDataEntry from '../data-components/uprns-data-entry'; -import InfoBox from '../../components/info-box'; -import { dataFields } from '../../data_fields'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; const LocationView: React.FunctionComponent = (props) => ( diff --git a/app/src/frontend/building/data-containers/planning.tsx b/app/src/frontend/building/data-containers/planning.tsx index 83078714..38b346ea 100644 --- a/app/src/frontend/building/data-containers/planning.tsx +++ b/app/src/frontend/building/data-containers/planning.tsx @@ -1,11 +1,12 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; -import DataEntry from '../data-components/data-entry'; -import CheckboxDataEntry from '../data-components/checkbox-data-entry'; -import SelectDataEntry from '../data-components/select-data-entry'; -import { DataEntryGroup } from '../data-components/data-entry-group'; import { dataFields } from '../../data_fields'; +import CheckboxDataEntry from '../data-components/checkbox-data-entry'; +import DataEntry from '../data-components/data-entry'; +import { DataEntryGroup } from '../data-components/data-entry-group'; +import SelectDataEntry from '../data-components/select-data-entry'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/size.tsx b/app/src/frontend/building/data-containers/size.tsx index 61d100d5..ff22e062 100644 --- a/app/src/frontend/building/data-containers/size.tsx +++ b/app/src/frontend/building/data-containers/size.tsx @@ -1,10 +1,11 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; +import { dataFields } from '../../data_fields'; +import { DataEntryGroup } from '../data-components/data-entry-group'; import NumericDataEntry from '../data-components/numeric-data-entry'; import SelectDataEntry from '../data-components/select-data-entry'; -import { DataEntryGroup } from '../data-components/data-entry-group'; -import { dataFields } from '../../data_fields'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/streetscape.tsx b/app/src/frontend/building/data-containers/streetscape.tsx index 8a063319..c1584faa 100644 --- a/app/src/frontend/building/data-containers/streetscape.tsx +++ b/app/src/frontend/building/data-containers/streetscape.tsx @@ -1,6 +1,7 @@ import React, { Fragment } from 'react'; import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/sustainability.tsx b/app/src/frontend/building/data-containers/sustainability.tsx index 6b719b07..8ab41bd3 100644 --- a/app/src/frontend/building/data-containers/sustainability.tsx +++ b/app/src/frontend/building/data-containers/sustainability.tsx @@ -1,10 +1,10 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; -import DataEntry from '../data-components/data-entry'; -import SelectDataEntry from '../data-components/select-data-entry'; -import NumericDataEntry from '../data-components/numeric-data-entry'; import { dataFields } from '../../data_fields'; +import NumericDataEntry from '../data-components/numeric-data-entry'; +import SelectDataEntry from '../data-components/select-data-entry'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; const EnergyCategoryOptions = ["A", "B", "C", "D", "E", "F", "G"]; diff --git a/app/src/frontend/building/data-containers/team.tsx b/app/src/frontend/building/data-containers/team.tsx index c8a70a74..b2fb12eb 100644 --- a/app/src/frontend/building/data-containers/team.tsx +++ b/app/src/frontend/building/data-containers/team.tsx @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; import withCopyEdit from '../data-container'; -import DataEntry from '../data-components/data-entry'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/data-containers/type.tsx b/app/src/frontend/building/data-containers/type.tsx index d8aaf269..356b1640 100644 --- a/app/src/frontend/building/data-containers/type.tsx +++ b/app/src/frontend/building/data-containers/type.tsx @@ -1,10 +1,11 @@ import React, { Fragment } from 'react'; -import withCopyEdit from '../data-container'; -import SelectDataEntry from '../data-components/select-data-entry'; -import NumericDataEntry from '../data-components/numeric-data-entry'; -import DataEntry from '../data-components/data-entry'; import { dataFields } from '../../data_fields'; +import DataEntry from '../data-components/data-entry'; +import NumericDataEntry from '../data-components/numeric-data-entry'; +import SelectDataEntry from '../data-components/select-data-entry'; +import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; const AttachmentFormOptions = [ diff --git a/app/src/frontend/building/data-containers/use.tsx b/app/src/frontend/building/data-containers/use.tsx index ac4bb383..1e98413d 100644 --- a/app/src/frontend/building/data-containers/use.tsx +++ b/app/src/frontend/building/data-containers/use.tsx @@ -1,6 +1,7 @@ import React, { Fragment } from 'react'; import withCopyEdit from '../data-container'; + import { CategoryViewProps } from './category-view-props'; /** diff --git a/app/src/frontend/building/edit-history/building-edit-summary.tsx b/app/src/frontend/building/edit-history/building-edit-summary.tsx index fec2df08..fe5dacf5 100644 --- a/app/src/frontend/building/edit-history/building-edit-summary.tsx +++ b/app/src/frontend/building/edit-history/building-edit-summary.tsx @@ -1,7 +1,9 @@ import React from 'react'; -import { EditHistoryEntry } from '../models/edit-history-entry'; -import { arrayToDictionary, parseDate } from '../../helpers'; + import { dataFields } from '../../data_fields'; +import { arrayToDictionary, parseDate } from '../../helpers'; +import { EditHistoryEntry } from '../../models/edit-history-entry'; + import { CategoryEditSummary } from './category-edit-summary'; import './building-edit-summary.css'; diff --git a/app/src/frontend/building/edit-history/category-edit-summary.tsx b/app/src/frontend/building/edit-history/category-edit-summary.tsx index 73a0d542..2c00f211 100644 --- a/app/src/frontend/building/edit-history/category-edit-summary.tsx +++ b/app/src/frontend/building/edit-history/category-edit-summary.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import './category-edit-summary.css'; import { FieldEditSummary } from './field-edit-summary'; +import './category-edit-summary.css'; + interface CategoryEditSummaryProps { category: string; fields: { diff --git a/app/src/frontend/building/edit-history/edit-history.tsx b/app/src/frontend/building/edit-history/edit-history.tsx index 772be6d3..ae6194ff 100644 --- a/app/src/frontend/building/edit-history/edit-history.tsx +++ b/app/src/frontend/building/edit-history/edit-history.tsx @@ -1,10 +1,12 @@ -import React, { useState, useEffect } from 'react'; -import { EditHistoryEntry } from '../models/edit-history-entry'; +import React, { useEffect, useState } from 'react'; + +import { Building } from '../../models/building'; +import { EditHistoryEntry } from '../../models/edit-history-entry'; +import ContainerHeader from '../container-header'; + import { BuildingEditSummary } from './building-edit-summary'; import './edit-history.css'; -import { Building } from '../../models/building'; -import ContainerHeader from '../container-header'; interface EditHistoryProps { building: Building; diff --git a/app/src/frontend/building/header-buttons/view-edit-control.tsx b/app/src/frontend/building/header-buttons/view-edit-control.tsx index 1eb4801d..2498c45e 100644 --- a/app/src/frontend/building/header-buttons/view-edit-control.tsx +++ b/app/src/frontend/building/header-buttons/view-edit-control.tsx @@ -1,7 +1,8 @@ import React from 'react'; -import { Building } from '../../models/building'; import { NavLink } from 'react-router-dom'; -import { ViewIcon, EditIcon } from '../../components/icons'; + +import { EditIcon, ViewIcon } from '../../components/icons'; +import { Building } from '../../models/building'; interface ViewEditControlProps { cat: string; diff --git a/app/src/frontend/building/multi-edit.tsx b/app/src/frontend/building/multi-edit.tsx index eddd6c85..e3435080 100644 --- a/app/src/frontend/building/multi-edit.tsx +++ b/app/src/frontend/building/multi-edit.tsx @@ -1,14 +1,15 @@ +import { parse } from 'query-string'; import React from 'react'; import { Link, Redirect, RouteComponentProps } from 'react-router-dom'; -import { parse } from 'query-string'; -import Sidebar from './sidebar'; +import { BackIcon } from '../components/icons'; import InfoBox from '../components/info-box'; -import { BackIcon }from '../components/icons'; -import DataEntry from './data-components/data-entry'; import { dataFields } from '../data_fields'; import { User } from '../models/user'; +import DataEntry from './data-components/data-entry'; +import Sidebar from './sidebar'; + interface MultiEditRouteParams { cat: string; } diff --git a/app/src/frontend/components/icons.tsx b/app/src/frontend/components/icons.tsx index a7352d20..faf037fe 100644 --- a/app/src/frontend/components/icons.tsx +++ b/app/src/frontend/components/icons.tsx @@ -1,11 +1,11 @@ /** * Mini-library of icons */ -import React from 'react' import { library } from '@fortawesome/fontawesome-svg-core' +import { faAngleLeft, faCaretDown, faCaretRight, faCaretUp, faCheck, faCheckDouble, + faEye, faInfoCircle, faPaintBrush, faQuestionCircle, faSearch, faTimes } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faQuestionCircle, faPaintBrush, faInfoCircle, faTimes, faCheck, faCheckDouble, - faAngleLeft, faCaretDown, faSearch, faEye, faCaretUp, faCaretRight } from '@fortawesome/free-solid-svg-icons' +import React from 'react' library.add( faQuestionCircle, diff --git a/app/src/frontend/components/logo.tsx b/app/src/frontend/components/logo.tsx index 1b574183..aa932966 100644 --- a/app/src/frontend/components/logo.tsx +++ b/app/src/frontend/components/logo.tsx @@ -1,4 +1,5 @@ import React from 'react'; + import './logo.css'; interface LogoProps { diff --git a/app/src/frontend/components/tooltip.tsx b/app/src/frontend/components/tooltip.tsx index 04cb8a28..e8402396 100644 --- a/app/src/frontend/components/tooltip.tsx +++ b/app/src/frontend/components/tooltip.tsx @@ -1,8 +1,9 @@ import React, { Component } from 'react'; -import './tooltip.css'; import { InfoIcon } from './icons'; +import './tooltip.css'; + interface TooltipProps { text: string; } diff --git a/app/src/frontend/map-app.tsx b/app/src/frontend/map-app.tsx index cf4cfda9..90e131cc 100644 --- a/app/src/frontend/map-app.tsx +++ b/app/src/frontend/map-app.tsx @@ -1,15 +1,15 @@ -import React, { Fragment } from 'react'; -import { Switch, Route, RouteComponentProps, Redirect } from 'react-router-dom'; - -import Welcome from './pages/welcome'; -import Sidebar from './building/sidebar'; -import Categories from './building/categories'; -import MultiEdit from './building/multi-edit'; -import BuildingView from './building/building-view'; -import ColouringMap from './map/map'; import { parse } from 'query-string'; +import React, { Fragment } from 'react'; +import { Redirect, Route, RouteComponentProps, Switch } from 'react-router-dom'; + +import BuildingView from './building/building-view'; +import Categories from './building/categories'; import { EditHistory } from './building/edit-history/edit-history'; +import MultiEdit from './building/multi-edit'; +import Sidebar from './building/sidebar'; +import ColouringMap from './map/map'; import { Building } from './models/building'; +import Welcome from './pages/welcome'; interface MapAppRouteParams { mode: 'view' | 'edit' | 'multi-edit'; diff --git a/app/src/frontend/map/legend.tsx b/app/src/frontend/map/legend.tsx index 75ea3d44..c2cdd552 100644 --- a/app/src/frontend/map/legend.tsx +++ b/app/src/frontend/map/legend.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import './legend.css'; +import { DownIcon, UpIcon } from '../components/icons'; import { Logo } from '../components/logo'; -import { DownIcon, UpIcon, BackIcon } from '../components/icons'; + +import './legend.css'; const LEGEND_CONFIG = { location: { diff --git a/app/src/frontend/map/map.tsx b/app/src/frontend/map/map.tsx index f8199f1b..293816c5 100644 --- a/app/src/frontend/map/map.tsx +++ b/app/src/frontend/map/map.tsx @@ -1,15 +1,16 @@ -import React, { Component, Fragment } from 'react'; -import { Map, TileLayer, ZoomControl, AttributionControl, GeoJSON } from 'react-leaflet-universal'; import { GeoJsonObject } from 'geojson'; - -import '../../../node_modules/leaflet/dist/leaflet.css' -import './map.css' +import React, { Component, Fragment } from 'react'; +import { AttributionControl, GeoJSON, Map, TileLayer, ZoomControl } from 'react-leaflet-universal'; import { HelpIcon } from '../components/icons'; +import { Building } from '../models/building'; + import Legend from './legend'; import SearchBox from './search-box'; import ThemeSwitcher from './theme-switcher'; -import { Building } from '../models/building'; + +import '../../../node_modules/leaflet/dist/leaflet.css' +import './map.css' const OS_API_KEY = 'NVUxtY5r8eA6eIfwrPTAGKrAAsoeI9E9'; diff --git a/app/src/frontend/map/search-box.tsx b/app/src/frontend/map/search-box.tsx index 79fd03f2..ed81f802 100644 --- a/app/src/frontend/map/search-box.tsx +++ b/app/src/frontend/map/search-box.tsx @@ -1,8 +1,9 @@ +import { Point } from 'geojson'; import React, { Component } from 'react'; -import './search-box.css'; import { SearchIcon } from '../components/icons'; -import { Point } from 'geojson'; + +import './search-box.css'; interface SearchResult { type: string; diff --git a/app/src/frontend/building/models/edit-history-entry.ts b/app/src/frontend/models/edit-history-entry.ts similarity index 100% rename from app/src/frontend/building/models/edit-history-entry.ts rename to app/src/frontend/models/edit-history-entry.ts diff --git a/app/src/frontend/pages/about.tsx b/app/src/frontend/pages/about.tsx index 1d3f98ea..f5b546c5 100644 --- a/app/src/frontend/pages/about.tsx +++ b/app/src/frontend/pages/about.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import SupporterLogos from '../components/supporter-logos'; -import './about.css'; import Categories from '../building/categories'; +import SupporterLogos from '../components/supporter-logos'; + +import './about.css'; const AboutPage = () => (
diff --git a/app/src/frontend/pages/contributor-agreement.tsx b/app/src/frontend/pages/contributor-agreement.tsx index c44da55b..f498f0a3 100644 --- a/app/src/frontend/pages/contributor-agreement.tsx +++ b/app/src/frontend/pages/contributor-agreement.tsx @@ -1,8 +1,6 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import InfoBox from '../components/info-box'; - const ContributorAgreementPage : React.SFC = () => (
diff --git a/app/src/frontend/pages/data-extracts.tsx b/app/src/frontend/pages/data-extracts.tsx index 7ac54c3a..16021689 100644 --- a/app/src/frontend/pages/data-extracts.tsx +++ b/app/src/frontend/pages/data-extracts.tsx @@ -1,7 +1,7 @@ import React, { FunctionComponent } from 'react'; +import { NavLink } from 'react-router-dom'; import { dateReviver } from '../../helpers'; -import { NavLink } from 'react-router-dom'; interface ExtractViewModel { extract_id: number; diff --git a/app/src/frontend/pages/privacy-policy.tsx b/app/src/frontend/pages/privacy-policy.tsx index b11af2e5..34a8974f 100644 --- a/app/src/frontend/pages/privacy-policy.tsx +++ b/app/src/frontend/pages/privacy-policy.tsx @@ -1,8 +1,6 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import InfoBox from '../components/info-box'; - const PrivacyPolicyPage: React.SFC = () => (
diff --git a/app/src/frontend/user/forgotten-password.tsx b/app/src/frontend/user/forgotten-password.tsx index bc2fe8ec..344d4493 100644 --- a/app/src/frontend/user/forgotten-password.tsx +++ b/app/src/frontend/user/forgotten-password.tsx @@ -1,6 +1,7 @@ -import React, { FormEvent, ChangeEvent } from 'react'; -import InfoBox from '../components/info-box'; +import React, { ChangeEvent, FormEvent } from 'react'; + import ErrorBox from '../components/error-box'; +import InfoBox from '../components/info-box'; interface ForgottenPasswordState { success: boolean; diff --git a/app/src/frontend/user/login.tsx b/app/src/frontend/user/login.tsx index dbfbb12c..038f6188 100644 --- a/app/src/frontend/user/login.tsx +++ b/app/src/frontend/user/login.tsx @@ -1,5 +1,5 @@ import React, { Component } from 'react'; -import { Redirect, Link } from 'react-router-dom'; +import { Link, Redirect } from 'react-router-dom'; import ErrorBox from '../components/error-box'; import InfoBox from '../components/info-box'; diff --git a/app/src/frontend/user/password-reset.tsx b/app/src/frontend/user/password-reset.tsx index e270aa61..c23b4a11 100644 --- a/app/src/frontend/user/password-reset.tsx +++ b/app/src/frontend/user/password-reset.tsx @@ -1,8 +1,8 @@ import React, { FormEvent } from 'react'; -import { RouteComponentProps, Redirect } from 'react-router'; +import { Redirect, RouteComponentProps } from 'react-router'; +import { Link } from 'react-router-dom'; import ErrorBox from '../components/error-box'; -import { Link } from 'react-router-dom'; interface PasswordResetState { error: string; diff --git a/app/src/frontend/user/signup.tsx b/app/src/frontend/user/signup.tsx index 6c1e2835..64c1d0c9 100644 --- a/app/src/frontend/user/signup.tsx +++ b/app/src/frontend/user/signup.tsx @@ -1,5 +1,5 @@ import React, { Component } from 'react'; -import { Redirect, Link } from 'react-router-dom'; +import { Link, Redirect } from 'react-router-dom'; import ErrorBox from '../components/error-box'; import InfoBox from '../components/info-box'; diff --git a/app/src/frontendRoute.tsx b/app/src/frontendRoute.tsx index 3b07e3c2..7a8a6d9c 100644 --- a/app/src/frontendRoute.tsx +++ b/app/src/frontendRoute.tsx @@ -1,20 +1,18 @@ import express from 'express'; import React from 'react'; -import { StaticRouter } from 'react-router-dom'; - import { renderToString } from 'react-dom/server'; +import { StaticRouter } from 'react-router-dom'; import serialize from 'serialize-javascript'; -import App from './frontend/app'; - -import { parseBuildingURL } from './parse'; -import { getUserById } from './api/services/user'; import { getBuildingById, getBuildingLikeById, getBuildingUPRNsById, getLatestRevisionId } from './api/services/building'; +import { getUserById } from './api/services/user'; +import App from './frontend/app'; +import { parseBuildingURL } from './parse'; // reference packed assets diff --git a/app/src/server.tsx b/app/src/server.tsx index 3ed45fe0..489133dc 100644 --- a/app/src/server.tsx +++ b/app/src/server.tsx @@ -4,15 +4,14 @@ * - entry-point to shared React App * */ -import express from 'express'; - -import session from 'express-session'; import pgConnect from 'connect-pg-simple'; +import express from 'express'; +import session from 'express-session'; -import db from './db'; -import tileserver from './tiles/tileserver'; import apiServer from './api/api'; +import db from './db'; import frontendRoute from './frontendRoute'; +import tileserver from './tiles/tileserver'; // create server const server = express(); diff --git a/app/tslint.json b/app/tslint.json index a0a32198..f28fa159 100644 --- a/app/tslint.json +++ b/app/tslint.json @@ -1,6 +1,18 @@ { "defaultSeverity": "warning", "rules": { - "eofline": true + "eofline": true, + "ordered-imports": [ + true, + { + "grouped-imports": true, + "groups": [ + { "name": "css", "match": "\\.css$", "order": 40 }, + { "name": "parent directories", "match": "^\\.\\.", "order": 20 }, + { "name": "current directory", "match": "^\\.", "order": 30 }, + { "name": "libraries", "match": ".*", "order": 10 } + ] + } + ] } } \ No newline at end of file