From e31052bc2ad146e747385d5b7e2f96dff097453f Mon Sep 17 00:00:00 2001 From: acdunham Date: Mon, 29 May 2023 14:21:42 +1200 Subject: [PATCH] Revert commit 'merge epic-landing-pages into waitp-1259-map-components-ts' --- .dockerignore | 1 - README.md | 87 +---- packages/access-policy/README.md | 2 +- packages/admin-panel-server/README.md | 2 +- packages/admin-panel/README.md | 15 +- packages/admin-panel/src/editor/EditModal.js | 4 +- packages/admin-panel/src/editor/Editor.js | 116 ++---- packages/admin-panel/src/editor/actions.js | 18 +- packages/admin-panel/src/editor/constants.js | 2 - packages/admin-panel/src/pages/ProfilePage.js | 16 +- .../pages/resources/CustomLandingPagesPage.js | 301 --------------- .../src/pages/resources/ProjectsPage.js | 34 +- .../src/pages/resources/ResourcePage.js | 4 +- .../admin-panel/src/pages/resources/index.js | 1 - packages/admin-panel/src/routes.js | 6 - .../admin-panel/src/utilities/getFields.js | 14 - packages/admin-panel/src/utilities/index.js | 1 - .../src/widgets/InputField/InputField.js | 2 +- .../widgets/InputField/registerInputFields.js | 105 ------ packages/aggregator/README.md | 2 +- packages/api-client/README.md | 6 +- packages/auth/README.md | 2 +- packages/central-server/README.md | 21 +- .../doc/importingNewGeojson.md | 0 .../src/apiV2/{projects => }/GETProjects.js | 7 +- packages/central-server/src/apiV2/index.js | 11 +- .../apiV2/landingPages/CreateLandingPage.js | 58 --- .../src/apiV2/landingPages/EditLandingPage.js | 52 --- .../src/apiV2/landingPages/index.js | 7 - .../src/apiV2/projects/CreateProject.js | 46 +-- .../src/apiV2/projects/EditProject.js | 56 --- .../src/apiV2/projects/index.js | 2 - .../constructNewRecordValidationRules.js | 31 -- .../src/apiV2/utilities/index.js | 1 - .../src/apiV2/utilities/uploadImage.js | 43 --- .../landingPages/CreateLandingPage.test.js | 114 ------ .../landingPages/EditLandingPage.test.js | 127 ------- .../apiV2/projects/CreateProject.test.js | 63 ++-- .../tests/apiV2/projects/EditProject.test.js | 136 ------- .../tests/apiV2/projects/GETProjects.test.js | 171 --------- .../submitMeditrakSurveyResponse.test.js | 2 +- .../tests/apiV2/utilities/uploadImage.test.js | 66 ---- .../src/tests/testData/testImageData.js | 2 +- .../getStandardisedImageName.test.js | 12 - .../src/utilities/getStandardisedImageName.js | 8 - .../central-server/src/utilities/index.js | 1 - packages/data-api/README.md | 2 +- packages/data-broker/README.md | 18 +- packages/data-lake-api/README.md | 2 +- packages/data-table-server/README.md | 2 +- packages/database/README.md | 2 +- ...ddTablesForLandingPages-modifies-schema.js | 45 --- .../database/src/modelClasses/LandingPage.js | 18 - packages/database/src/modelClasses/index.js | 2 - packages/database/src/types.js | 1 - packages/devops/README.md | 4 +- packages/devops/ci/tupaia-ci-cd.Dockerfile | 2 +- packages/devops/ci/validation.Dockerfile | 2 +- packages/devops/docker/downloadenv.Dockerfile | 13 - .../deployment/buildDeployablePackages.sh | 2 +- packages/dhis-api/README.md | 2 +- packages/e2e/README.md | 2 +- packages/entity-server/README.md | 15 +- packages/indicators/README.md | 4 +- packages/kobo-api/README.md | 3 - packages/lesmis-server/README.md | 2 +- packages/lesmis/README.md | 9 +- packages/meditrak-app-server/README.md | 2 +- .../sync/PushChangesRoute.test.ts | 2 +- .../__integration__/sync/testImageData.ts | 2 +- packages/meditrak-app/README.md | 2 +- packages/meditrak-app/appcenter-post-clone.sh | 2 +- packages/psss-server/README.md | 2 +- packages/psss/README.md | 4 +- .../psss/src/views/Tabs/ProfileTabView.js | 16 +- packages/report-server/README.md | 12 +- packages/superset-api/README.md | 3 - packages/tsutils/README.md | 3 - packages/types/README.md | 11 +- .../.storybook/AppProviders.js | 2 +- .../ui-chart-components/.storybook/main.js | 2 +- packages/ui-chart-components/package.json | 8 +- .../{VerticalTick.tsx => VerticalTick.js} | 0 .../components/Axes/{XAxis.tsx => XAxis.js} | 0 .../components/Axes/{YAxes.tsx => YAxes.js} | 0 .../components/Axes/{index.ts => index.js} | 0 .../{CartesianChart.tsx => CartesianChart.js} | 0 .../src/components/{Chart.tsx => Chart.js} | 0 .../{ChartTable.tsx => ChartTable.js} | 0 .../Charts/{AreaChart.tsx => AreaChart.js} | 0 .../Charts/{BarChart.tsx => BarChart.js} | 0 .../Charts/{GaugeChart.tsx => GaugeChart.js} | 0 .../Charts/{LineChart.tsx => LineChart.js} | 0 .../Charts/{PieChart.tsx => PieChart.js} | 0 .../components/Charts/{index.ts => index.js} | 0 .../{ChartTooltip.tsx => ChartTooltip.js} | 0 .../Reference/{Legend.tsx => Legend.js} | 0 .../{ReferenceLabel.tsx => ReferenceLabel.js} | 0 .../{ReferenceLines.tsx => ReferenceLines.js} | 0 ...oltipContainer.tsx => TooltipContainer.js} | 0 .../Reference/{index.ts => index.js} | 0 .../src/components/{index.ts => index.js} | 0 .../src/constants/{colors.ts => colors.js} | 0 .../constants/{constants.ts => constants.js} | 0 .../src/constants/{index.ts => index.js} | 0 .../constants/{propTypes.ts => propTypes.js} | 0 .../src/{index.ts => index.js} | 0 ...ChartTableData.ts => getChartTableData.js} | 0 .../src/utils/{index.ts => index.js} | 0 ...arseChartConfig.ts => parseChartConfig.js} | 0 ...artDataExport.ts => useChartDataExport.js} | 0 .../src/utils/{utils.ts => utils.js} | 0 .../ui-chart-components/tsconfig-build.json | 14 - packages/ui-chart-components/tsconfig.json | 24 -- .../src/components/CheckboxList.tsx | 233 ++++++------ .../src/components/ConfirmDeleteModal.tsx | 2 +- .../ui-components/src/components/Dialog.tsx | 10 +- .../src/components/Inputs/Autocomplete.tsx | 3 - .../src/components/Inputs/Checkbox.tsx | 10 +- .../src/components/Inputs/FileUploadField.tsx | 40 +- .../src/components/Inputs/GroupedSelect.tsx | 14 +- .../src/components/Inputs/HexcodeField.tsx | 82 ---- .../components/Inputs/ImageUploadField.tsx | 211 ----------- .../src/components/Inputs/InputGroup.tsx | 51 --- .../src/components/Inputs/InputLabel.tsx | 73 ---- .../components/Inputs/ProfileImageField.tsx | 117 ++++++ .../src/components/Inputs/RadioGroup.tsx | 38 +- .../src/components/Inputs/Select.tsx | 4 +- .../src/components/Inputs/TextField.tsx | 26 +- .../src/components/Inputs/index.ts | 5 +- .../stories/inputs/autocomplete.stories.js | 12 - .../stories/inputs/checkbox.stories.js | 5 - .../stories/inputs/checkboxList.stories.js | 7 +- .../stories/inputs/datePicker.stories.js | 12 - .../stories/inputs/fileUploadField.stories.js | 18 - .../stories/inputs/groupedSelect.stories.js | 11 - .../stories/inputs/hexcodeField.stories.js | 84 ----- .../inputs/imageUploadField.stories.js | 59 --- .../stories/inputs/inputGroup.stories.js | 72 ---- .../stories/inputs/inputLabel.stories.js | 29 -- .../stories/inputs/multiSelect.stories.js | 17 - .../inputs/profileImageField.stories.js | 25 ++ .../stories/inputs/radioGroup.stories.js | 18 - .../stories/inputs/select.stories.js | 13 - .../stories/inputs/textField.stories.js | 1 - packages/utils/README.md | 2 +- .../validation/validatorFunctions.test.js | 56 --- packages/utils/src/s3/S3Client.js | 61 +-- .../src/validation/validatorFunctions.js | 33 +- packages/weather-api/README.md | 3 - packages/web-config-server/README.md | 12 +- packages/web-config-server/src/apiV1/index.js | 2 - .../src/apiV1/landingPages.js | 76 ---- .../src/apiV1/measureData.js | 5 +- packages/web-frontend/README.md | 12 +- .../images/custom-landing-page-default.png | Bin 398369 -> 0 bytes packages/web-frontend/public/index.html | 19 +- packages/web-frontend/src/actions.js | 24 -- .../web-frontend/src/components/Buttons.js | 5 +- .../src/components/mobile/Overlay/index.js | 1 + .../web-frontend/src/constants/constants.js | 6 - .../src/containers/DashboardExportModal.js | 93 ++--- .../components/LandingPage/LoginPage.js | 72 ++-- .../components/LandingPage/index.js | 15 +- .../components/ProjectPage/ProjectCard.js | 60 ++- .../components/ProjectPage/ProjectCardList.js | 112 ------ .../components/ProjectPage/index.js | 61 ++- .../components/RequestProjectAccessDialog.js | 108 +++--- .../src/containers/OverlayDiv/constants.js | 4 - .../src/containers/OverlayDiv/index.js | 3 +- .../src/containers/TopBar/index.js | 73 ++-- .../src/containers/TopBarLogo/index.js | 112 ------ .../src/containers/TupaiaHome/index.js | 56 +++ .../src/containers/UserBar/index.js | 62 ++- .../src/containers/UserMenu/DrawerMenu.js | 129 ------- .../src/containers/UserMenu/MenuList.js | 89 ----- .../src/containers/UserMenu/PopoverMenu.js | 42 --- .../src/containers/UserMenu/UserInfo.js | 80 ---- .../src/containers/UserMenu/index.js | 355 ++++++++++-------- packages/web-frontend/src/projects/actions.js | 7 - .../web-frontend/src/projects/reducers.js | 32 +- packages/web-frontend/src/projects/sagas.js | 46 +-- packages/web-frontend/src/reducers.js | 9 +- .../src/reducers/orgUnitReducers.js | 2 - .../sagas/watchUser/watchAttemptUserLogout.js | 23 +- .../sagas/watchUser/watchFetchInitialData.js | 19 +- .../src/screens/LandingPage/LandingPage.js | 73 ---- .../screens/LandingPage/LandingPageFooter.js | 159 -------- .../LandingPage/MultiProjectLandingPage.js | 96 ----- .../LandingPage/SingleProjectLandingPage.js | 105 ------ .../src/screens/LandingPage/index.js | 6 - .../src/screens/LandingPage/useAuth.js | 10 - .../LandingPage/useCustomLandingPages.js | 36 -- .../src/screens/LandingPage/useNavigation.js | 47 --- .../src/screens/LoadingScreen/index.js | 40 +- .../screens/desktop/RootScreen/MainPage.js | 50 +-- .../desktop/RootScreen/PDFExportPage.js | 10 +- .../src/screens/mobile/RootScreen/index.js | 8 +- packages/web-frontend/src/styles/index.js | 19 +- .../src/utils/getProjectAccessType.js | 13 - packages/web-frontend/src/utils/index.js | 1 - packages/web-frontend/src/utils/request.js | 4 +- scripts/bash/downloadEnvironmentVariables.sh | 4 +- .../docker/downloadEnvironmentVariables.sh | 70 ---- tupaia-packages.code-workspace | 4 - yarn.lock | 38 -- 206 files changed, 1123 insertions(+), 4994 deletions(-) delete mode 100644 packages/admin-panel/src/pages/resources/CustomLandingPagesPage.js delete mode 100644 packages/admin-panel/src/utilities/getFields.js rename packages/{admin-panel => central-server}/doc/importingNewGeojson.md (100%) rename packages/central-server/src/apiV2/{projects => }/GETProjects.js (95%) delete mode 100644 packages/central-server/src/apiV2/landingPages/CreateLandingPage.js delete mode 100644 packages/central-server/src/apiV2/landingPages/EditLandingPage.js delete mode 100644 packages/central-server/src/apiV2/landingPages/index.js delete mode 100644 packages/central-server/src/apiV2/projects/EditProject.js delete mode 100644 packages/central-server/src/apiV2/utilities/uploadImage.js delete mode 100644 packages/central-server/src/tests/apiV2/landingPages/CreateLandingPage.test.js delete mode 100644 packages/central-server/src/tests/apiV2/landingPages/EditLandingPage.test.js delete mode 100644 packages/central-server/src/tests/apiV2/projects/EditProject.test.js delete mode 100644 packages/central-server/src/tests/apiV2/projects/GETProjects.test.js delete mode 100644 packages/central-server/src/tests/apiV2/utilities/uploadImage.test.js delete mode 100644 packages/central-server/src/tests/utilities/getStandardisedImageName.test.js delete mode 100644 packages/central-server/src/utilities/getStandardisedImageName.js delete mode 100644 packages/database/src/migrations/20230430221850-AddTablesForLandingPages-modifies-schema.js delete mode 100644 packages/database/src/modelClasses/LandingPage.js delete mode 100644 packages/devops/docker/downloadenv.Dockerfile delete mode 100644 packages/kobo-api/README.md delete mode 100644 packages/superset-api/README.md delete mode 100644 packages/tsutils/README.md rename packages/ui-chart-components/src/components/Axes/{VerticalTick.tsx => VerticalTick.js} (100%) rename packages/ui-chart-components/src/components/Axes/{XAxis.tsx => XAxis.js} (100%) rename packages/ui-chart-components/src/components/Axes/{YAxes.tsx => YAxes.js} (100%) rename packages/ui-chart-components/src/components/Axes/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/components/{CartesianChart.tsx => CartesianChart.js} (100%) rename packages/ui-chart-components/src/components/{Chart.tsx => Chart.js} (100%) rename packages/ui-chart-components/src/components/{ChartTable.tsx => ChartTable.js} (100%) rename packages/ui-chart-components/src/components/Charts/{AreaChart.tsx => AreaChart.js} (100%) rename packages/ui-chart-components/src/components/Charts/{BarChart.tsx => BarChart.js} (100%) rename packages/ui-chart-components/src/components/Charts/{GaugeChart.tsx => GaugeChart.js} (100%) rename packages/ui-chart-components/src/components/Charts/{LineChart.tsx => LineChart.js} (100%) rename packages/ui-chart-components/src/components/Charts/{PieChart.tsx => PieChart.js} (100%) rename packages/ui-chart-components/src/components/Charts/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/components/Reference/{ChartTooltip.tsx => ChartTooltip.js} (100%) rename packages/ui-chart-components/src/components/Reference/{Legend.tsx => Legend.js} (100%) rename packages/ui-chart-components/src/components/Reference/{ReferenceLabel.tsx => ReferenceLabel.js} (100%) rename packages/ui-chart-components/src/components/Reference/{ReferenceLines.tsx => ReferenceLines.js} (100%) rename packages/ui-chart-components/src/components/Reference/{TooltipContainer.tsx => TooltipContainer.js} (100%) rename packages/ui-chart-components/src/components/Reference/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/components/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/constants/{colors.ts => colors.js} (100%) rename packages/ui-chart-components/src/constants/{constants.ts => constants.js} (100%) rename packages/ui-chart-components/src/constants/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/constants/{propTypes.ts => propTypes.js} (100%) rename packages/ui-chart-components/src/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/utils/{getChartTableData.ts => getChartTableData.js} (100%) rename packages/ui-chart-components/src/utils/{index.ts => index.js} (100%) rename packages/ui-chart-components/src/utils/{parseChartConfig.ts => parseChartConfig.js} (100%) rename packages/ui-chart-components/src/utils/{useChartDataExport.ts => useChartDataExport.js} (100%) rename packages/ui-chart-components/src/utils/{utils.ts => utils.js} (100%) delete mode 100644 packages/ui-chart-components/tsconfig-build.json delete mode 100644 packages/ui-chart-components/tsconfig.json delete mode 100644 packages/ui-components/src/components/Inputs/HexcodeField.tsx delete mode 100644 packages/ui-components/src/components/Inputs/ImageUploadField.tsx delete mode 100644 packages/ui-components/src/components/Inputs/InputGroup.tsx delete mode 100644 packages/ui-components/src/components/Inputs/InputLabel.tsx create mode 100644 packages/ui-components/src/components/Inputs/ProfileImageField.tsx delete mode 100644 packages/ui-components/stories/inputs/hexcodeField.stories.js delete mode 100644 packages/ui-components/stories/inputs/imageUploadField.stories.js delete mode 100644 packages/ui-components/stories/inputs/inputGroup.stories.js delete mode 100644 packages/ui-components/stories/inputs/inputLabel.stories.js create mode 100644 packages/ui-components/stories/inputs/profileImageField.stories.js delete mode 100644 packages/weather-api/README.md delete mode 100644 packages/web-config-server/src/apiV1/landingPages.js delete mode 100644 packages/web-frontend/public/images/custom-landing-page-default.png delete mode 100644 packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCardList.js delete mode 100644 packages/web-frontend/src/containers/TopBarLogo/index.js create mode 100644 packages/web-frontend/src/containers/TupaiaHome/index.js delete mode 100644 packages/web-frontend/src/containers/UserMenu/DrawerMenu.js delete mode 100644 packages/web-frontend/src/containers/UserMenu/MenuList.js delete mode 100644 packages/web-frontend/src/containers/UserMenu/PopoverMenu.js delete mode 100644 packages/web-frontend/src/containers/UserMenu/UserInfo.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/LandingPage.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/LandingPageFooter.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/MultiProjectLandingPage.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/SingleProjectLandingPage.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/index.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/useAuth.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/useCustomLandingPages.js delete mode 100644 packages/web-frontend/src/screens/LandingPage/useNavigation.js delete mode 100644 packages/web-frontend/src/utils/getProjectAccessType.js delete mode 100755 scripts/docker/downloadEnvironmentVariables.sh diff --git a/.dockerignore b/.dockerignore index f795eab19a..dc516fa295 100644 --- a/.dockerignore +++ b/.dockerignore @@ -22,7 +22,6 @@ dump.sql /snapshots.js .idea packages/.vscode/settings.json -packages/devops/docker **/testRequests/*.http *:Zone.Identifier diff --git a/README.md b/README.md index 9b962651b4..e71634579c 100644 --- a/README.md +++ b/README.md @@ -2,105 +2,52 @@ [![Codeship Status for beyondessential/tupaia#dev](https://app.codeship.com/projects/70159bc0-0dac-0138-fdcb-260b82737f4e/status?branch=dev)](https://app.codeship.com/projects/379708) -## Open Source Info - -### Open Source Mission statement - -> By engaging and collaborating with our community we can deliver a more robust product that bridges cultural differences and empowers decision making within health systems worldwide. - -### Code of Conduct - -For contributor's code of conduct - see the [code-of-conduct.md](https://gitlab.com/beyond-essential/tupaia/blob/master/code-of-conduct.md) published in the repo. - -## Packages - > This is a [mono-repo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) It is set up using `yarn workspaces`, meaning any command you would normally run inside a package can be run from the root directory using `yarn workspace @tupaia/package-name command`, e.g. `yarn workspace @tupaia/central-server start-dev` +## Packages + The easiest way to open the packages in vscode is to double click 'tupaia-packages.code-workspace'. This opens all packages as roots in the workspace, and means linting etc. will work correctly. -### Package structure - -The Tupaia mono-repo is comprised for 3 types of packages: - -- Platform interfaces (Frontend React applications that the user interacts with) -- Servers - - Orchestration servers (dedicated backend applications for each platform interface) - - Micro servers (applications which are used by the orchestration servers to perform common system functions) -- Libraries (various utility and common libraries that are used throughout the mono-repo) - -While each package type has their own structure, there are a few common standards: - -- `/package.json` - package definition -- `/src/` - contains source code -- `/.env.example` - file showing what environment variables are required by the package -- `/.env` - environment variables used by package (ignored in git) -- `/src/__tests__/` - contains unit tests - -### Platform interfaces +### Main packages -- [Tupaia](https://github.com/beyondessential/tupaia/blob/dev/packages/web-frontend/README.md) (for legacy reasons referred to as web-frontend) -- [Admin Panel](https://github.com/beyondessential/tupaia/blob/dev/packages/admin-panel/README.md) -- [LESMIS](https://github.com/beyondessential/tupaia/blob/dev/packages/lesmis/README.md) -- [PSSS](https://github.com/beyondessential/tupaia/blob/dev/packages/psss/README.md) -- [Meditrak](https://github.com/beyondessential/tupaia/blob/dev/packages/meditrak-app/README.md) - -### Servers - -#### Orchestration servers - -- [web-config-server](https://github.com/beyondessential/tupaia/blob/dev/packages/web-config-server/README.md) (Tupaia's orchestration server, referred to as web-config-server for legacy reasons) +- [admin-panel](https://github.com/beyondessential/tupaia/blob/dev/packages/admin-panel/README.md) - [admin-panel-server](https://github.com/beyondessential/tupaia/blob/dev/packages/admin-panel-server/README.md) +- [central-server](https://github.com/beyondessential/tupaia/blob/dev/packages/central-server/README.md) +- [lesmis](https://github.com/beyondessential/tupaia/blob/dev/packages/lesmis/README.md) - [lesmis-server](https://github.com/beyondessential/tupaia/blob/dev/packages/lesmis-server/README.md) -- [psss-server](https://github.com/beyondessential/tupaia/blob/dev/packages/psss-server/README.md) +- [meditrak-app](https://github.com/beyondessential/tupaia/blob/dev/packages/meditrak-app/README.md) - [meditrak-app-server](https://github.com/beyondessential/tupaia/blob/dev/packages/meditrak-app-server/README.md) +- [psss](https://github.com/beyondessential/tupaia/blob/dev/packages/psss/README.md) +- [psss-server](https://github.com/beyondessential/tupaia/blob/dev/packages/psss-server/README.md) +- [web-config-server](https://github.com/beyondessential/tupaia/blob/dev/packages/web-config-server/README.md) +- [web-frontend](https://github.com/beyondessential/tupaia/blob/dev/packages/web-frontend/README.md) -#### Micro servers - -- [central-server](https://github.com/beyondessential/tupaia/blob/dev/packages/central-server/README.md) -- [entity-server](https://github.com/beyondessential/tupaia/blob/dev/packages/entity-server/README.md) -- [report-server](https://github.com/beyondessential/tupaia/blob/dev/packages/report-server/README.md) -- [data-table-server](https://github.com/beyondessential/tupaia/blob/dev/packages/data-table-server/README.md) - -Server packages can be built by running `yarn workspace @tupaia/package-name build`. -Server packages can then be started by running `yarn workspace @tupaia/package-name start`. - -All servers are NodeJS express applications, and the packages follow the same basic structure: - -- `/examples.http` - example queries showing the server interface -- `/src/index.ts` - server entrypoint -- `/src/app/createApp.ts` - express router definition -- `/src/routes/` - route definitions +Any of the main packages can be run using `yarn workspace @tupaia/package-name start-dev`. +In the case of the two servers, this will also build and watch all of the internal dependencies, so +that hot reload detects changes to other packages within the mono-repo. As this delays startup time, +if you prefer to pre-build internal dependencies, add `--skip-internal` to the above command. -### Libraries +### Internal dependencies - [access-policy](https://github.com/beyondessential/tupaia/blob/dev/packages/access-policy/README.md) - [aggregator](https://github.com/beyondessential/tupaia/blob/dev/packages/aggregator/README.md) -- [api-client](https://github.com/beyondessential/tupaia/blob/dev/packages/api-client/README.md) - [auth](https://github.com/beyondessential/tupaia/blob/dev/packages/auth/README.md) -- [data-api](https://github.com/beyondessential/tupaia/blob/dev/packages/data-api/README.md) -- [data-broker](https://github.com/beyondessential/tupaia/blob/dev/packages/data-broker/README.md) -- [data-lake-api](https://github.com/beyondessential/tupaia/blob/dev/packages/data-lake-api/README.md) - [database](https://github.com/beyondessential/tupaia/blob/dev/packages/database/README.md) +- [data-broker](https://github.com/beyondessential/tupaia/blob/dev/packages/data-broker/README.md) - [devops](https://github.com/beyondessential/tupaia/blob/dev/packages/devops/README.md) - [dhis-api](https://github.com/beyondessential/tupaia/blob/dev/packages/dhis-api/README.md) -- [e2e](https://github.com/beyondessential/tupaia/blob/dev/packages/e2e/README.md) - [expression-parser](https://github.com/beyondessential/tupaia/blob/dev/packages/expression-parser/README.md) - [indicators](https://github.com/beyondessential/tupaia/blob/dev/packages/indicators/README.md) - [ui-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-components/README.md) - [ui-chart-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-chart-components/README.md) - [ui-map-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-map-components/README.md) - [server-boilerplate](https://github.com/beyondessential/tupaia/blob/dev/packages/server-boilerplate/README.md) -- [superset-api](https://github.com/beyondessential/tupaia/blob/dev/packages/superset-api/README.md) -- [ui-components](https://github.com/beyondessential/tupaia/blob/dev/packages/ui-components/README.md) - [utils](https://github.com/beyondessential/tupaia/blob/dev/packages/utils/README.md) -- [tsutils](https://github.com/beyondessential/tupaia/blob/dev/packages/tsutils/README.md) -- [types](https://github.com/beyondessential/tupaia/blob/dev/packages/types/README.md) -- [weather-api](https://github.com/beyondessential/tupaia/blob/dev/packages/weather-api/README.md) ## Getting started diff --git a/packages/access-policy/README.md b/packages/access-policy/README.md index b4843151ac..faab38ff20 100644 --- a/packages/access-policy/README.md +++ b/packages/access-policy/README.md @@ -1,4 +1,4 @@ -# @tupaia/access-policy +# Tupaia Access Policy Methods for parsing the access policy that is received by Tupaia projects during authentication. diff --git a/packages/admin-panel-server/README.md b/packages/admin-panel-server/README.md index e58426a012..516f0eca85 100644 --- a/packages/admin-panel-server/README.md +++ b/packages/admin-panel-server/README.md @@ -1,3 +1,3 @@ # @tupaia/admin-panel-server -Orchestration server for the Admin Panel web app. +Back end server for the Admin Panel web app. \ No newline at end of file diff --git a/packages/admin-panel/README.md b/packages/admin-panel/README.md index 491f588af3..c1c358daad 100644 --- a/packages/admin-panel/README.md +++ b/packages/admin-panel/README.md @@ -1,15 +1,9 @@ -# @tupaia/admin-panel - -Frontend interface for the [Admin Panel](https://admin.tupaia.org/) web app. +# Tupaia Admin ## User Guide Most aspects are fairly self explanatory, but this guide should cover any tricky bits as they get added -### Importing geojson - -Documentation for importing geojson can be found [here](doc/importingNewGeojson.md) - ### Creating an Api Client When creating a new user, you have the option to create them as an api client. When you do this, you have one chance only to retrieve the client secret. The steps for Google Chrome are: @@ -23,9 +17,8 @@ When creating a new user, you have the option to create them as an api client. W This secret key is used as the password in Basic Auth headers sent by api clients. Their permissions are verified based on the user the api client is attached to. ### Viz Builder App - -The Viz Builder App is an interface for creating Tupaia visualisations such as cartesian charts and pie charts. +The Viz Builder App is an interface for creating Tupaia visualisations such as cartesian charts and pie charts. It is a standalone app that sits inside the admin panel on the `viz-builder` route. -It is inside the admin panel so that it can use the admin panel authentication and to give a more seamless user experience. +It is inside the admin panel so that it can use the admin panel authentication and to give a more seamless user experience. The Viz Builder App code is contained from the admin panel code so that it can be exported and imported into other apps such as Lesmis if required. -It is also separated from the admin panel code so that we can use modern react techniques such as react-query. +It is also separated from the admin panel code so that we can use modern react techniques such as react-query. \ No newline at end of file diff --git a/packages/admin-panel/src/editor/EditModal.js b/packages/admin-panel/src/editor/EditModal.js index 6b2cc19e6b..57a0ee81a6 100644 --- a/packages/admin-panel/src/editor/EditModal.js +++ b/packages/admin-panel/src/editor/EditModal.js @@ -13,7 +13,6 @@ import { getEditorState, getIsUnchanged } from './selectors'; import { Editor } from './Editor'; import { ModalContentProvider } from '../widgets'; import { UsedBy } from '../usedBy/UsedBy'; -import { getExplodedFields } from '../utilities'; const getFieldSourceToEdit = field => { const { source, editConfig = {} } = field; @@ -49,8 +48,7 @@ export const EditModalComponent = ({ saveButtonText, extraDialogProps, }) => { - // key the fields by their source so we can easily find the field to edit. Use the exploded fields so that any subfields are placed into the top level of the array - const fieldsBySource = keyBy(getExplodedFields(fields), 'source'); + const fieldsBySource = keyBy(fields, 'source'); return ( diff --git a/packages/admin-panel/src/editor/Editor.js b/packages/admin-panel/src/editor/Editor.js index ca6df9be68..fbf10ffbd4 100644 --- a/packages/admin-panel/src/editor/Editor.js +++ b/packages/admin-panel/src/editor/Editor.js @@ -5,36 +5,20 @@ import React from 'react'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { InputGroup } from '@tupaia/ui-components'; import { InputField } from '../widgets'; import { checkVisibilityCriteriaAreMet, labelToId } from '../utilities'; -import { createBase64Image } from '../utilities/createBase64Image'; -import { SECTION_FIELD_TYPE } from './constants'; - -const EditorWrapper = styled.div` - .file_upload_label { - font-size: 0.9375rem; - text-transform: initial; - color: ${props => props.theme.palette.text.secondary}; - } -`; export const Editor = ({ fields, recordData, onEditField }) => { - const onInputChange = async (inputKey, inputValue, editConfig = {}) => { - const { setFieldsOnChange, type } = editConfig; - let updatedValue = inputValue; - if (type === 'image' && inputValue) { - // If the input is a file, we need to convert the file to a base64 encoded image. - updatedValue = await createBase64Image(inputValue); - } + const onInputChange = (inputKey, inputValue, editConfig = {}) => { + const { setFieldsOnChange } = editConfig; if (setFieldsOnChange) { - const newFields = setFieldsOnChange(updatedValue, recordData); + const newFields = setFieldsOnChange(inputValue, recordData); Object.entries(newFields).forEach(([fieldKey, fieldValue]) => { onEditField(fieldKey, fieldValue); }); } - onEditField(inputKey, updatedValue); + + onEditField(inputKey, inputValue); }; const selectValue = (editConfig, accessor, source) => { @@ -47,73 +31,37 @@ export const Editor = ({ fields, recordData, onEditField }) => { return recordData[source]; }; - // Get the fields that are visible from an array - const filterVisibleFields = allFields => { - return allFields.filter(({ show = true, editConfig = {} }) => { - const { visibilityCriteria } = editConfig; - - if (!show) { - return false; - } - - // show or hide a field based on another field's value - if (visibilityCriteria) { - return checkVisibilityCriteriaAreMet(visibilityCriteria, recordData); - } - - return true; - }); - }; + return ( +
+ {fields + .filter(({ show = true, editConfig = {} }) => { + const { visibilityCriteria } = editConfig; - // Get the input for the field - const getFieldInput = field => { - const { editable = true, editConfig = {}, source, Header, accessor } = field; - return ( - onInputChange(inputKey, inputValue, editConfig)} - value={selectValue(editConfig, accessor, source)} - disabled={!editable} - recordData={recordData} - id={`inputField-${labelToId(source)}`} - {...editConfig} - /> - ); - }; + if (!show) { + return false; + } - // Get the form fields and sections that are visible from the fields prop, handling nested sections - const visibleFormItems = filterVisibleFields(fields).reduce((result, field) => { - if (field.type === SECTION_FIELD_TYPE) { - const visibleSubfields = filterVisibleFields(field.fields); - if (!visibleSubfields.length) return result; - return [ - ...result, - { - ...field, - fields: visibleSubfields, - }, - ]; - } - return [...result, field]; - }, []); + // show or hide a field based on another field's value + if (visibilityCriteria) { + return checkVisibilityCriteriaAreMet(visibilityCriteria, recordData); + } - return ( - - {visibleFormItems.map(item => - item.type === SECTION_FIELD_TYPE ? ( - getFieldInput(subfield))} + return true; + }) + .map(({ editable = true, editConfig = {}, source, Header, accessor }) => ( + onInputChange(inputKey, inputValue, editConfig)} + value={selectValue(editConfig, accessor, source)} + disabled={!editable} + recordData={recordData} + id={`inputField-${labelToId(source)}`} + {...editConfig} /> - ) : ( - getFieldInput(item) - ), - )} - + ))} +
); }; diff --git a/packages/admin-panel/src/editor/actions.js b/packages/admin-panel/src/editor/actions.js index 4512b4fe01..8a93ad57a7 100644 --- a/packages/admin-panel/src/editor/actions.js +++ b/packages/admin-panel/src/editor/actions.js @@ -13,11 +13,7 @@ import { EDITOR_FIELD_EDIT, EDITOR_OPEN, } from './constants'; -import { - convertSearchTermToFilter, - makeSubstitutionsInString, - getExplodedFields, -} from '../utilities'; +import { convertSearchTermToFilter, makeSubstitutionsInString } from '../utilities'; const STATIC_FIELD_TYPES = ['link']; @@ -26,8 +22,6 @@ export const openBulkEditModal = ( recordId, rowData, ) => async (dispatch, getState, { api }) => { - // explode the fields from any subsections - const explodedFields = getExplodedFields(fields); if (recordId) { dispatch({ type: EDITOR_DATA_FETCH_BEGIN, @@ -42,7 +36,7 @@ export const openBulkEditModal = ( const response = await api.get(makeSubstitutionsInString(bulkGetEndpoint, rowData), { filter: filterString.length > 0 ? filterString : undefined, columns: JSON.stringify( - explodedFields + fields .filter(field => !field.hideValue && !STATIC_FIELD_TYPES.includes(field.type)) // Ignore any that will be hidden, e.g. passwords .map(field => field.source), ), // Fetch fields based on their source @@ -65,7 +59,7 @@ export const openBulkEditModal = ( } } else { // set default values - explodedFields.forEach(field => { + fields.forEach(field => { if (field.editConfig && field.editConfig.default) { const { source: fieldKey, @@ -93,8 +87,6 @@ export const openEditModal = ( { editEndpoint, title, fields, FieldsComponent, extraDialogProps = {}, isLoading = false }, recordId, ) => async (dispatch, getState, { api }) => { - // explode the fields from any subsections - const explodedFields = getExplodedFields(fields); // Open the modal instantly dispatch({ type: EDITOR_OPEN, @@ -121,7 +113,7 @@ export const openEditModal = ( try { const response = await api.get(endpoint, { columns: JSON.stringify( - explodedFields + fields .filter(field => !field.hideValue && !STATIC_FIELD_TYPES.includes(field.type)) // Ignore any that will be hidden, e.g. passwords .map(field => field.source), ), // Fetch fields based on their source @@ -138,7 +130,7 @@ export const openEditModal = ( } } else { // set default values - explodedFields.forEach(field => { + fields.forEach(field => { if (field.editConfig && field.editConfig.default) { const { source: fieldKey, diff --git a/packages/admin-panel/src/editor/constants.js b/packages/admin-panel/src/editor/constants.js index 20662ad805..1e7c5732d2 100644 --- a/packages/admin-panel/src/editor/constants.js +++ b/packages/admin-panel/src/editor/constants.js @@ -17,5 +17,3 @@ export const DATA_CHANGE_ACTIONS = { finish: EDITOR_DATA_EDIT_SUCCESS, error: EDITOR_ERROR, }; - -export const SECTION_FIELD_TYPE = 'section'; diff --git a/packages/admin-panel/src/pages/ProfilePage.js b/packages/admin-panel/src/pages/ProfilePage.js index 30de08d8f9..7382afa2c3 100644 --- a/packages/admin-panel/src/pages/ProfilePage.js +++ b/packages/admin-panel/src/pages/ProfilePage.js @@ -9,7 +9,7 @@ import styled from 'styled-components'; import { connect } from 'react-redux'; import { useForm } from 'react-hook-form'; import MuiDivider from '@material-ui/core/Divider'; -import { Button, SmallAlert, TextField, ImageUploadField } from '@tupaia/ui-components'; +import { Button, SmallAlert, TextField, ProfileImageField } from '@tupaia/ui-components'; import { usePortalWithCallback } from '../utilities'; import { Header } from '../widgets'; import { createBase64Image } from '../utilities/createBase64Image'; @@ -80,8 +80,9 @@ const ProfilePageComponent = React.memo(({ user, onUpdateProfile, getHeaderEl }) } }); - const handleFileChange = async fileObject => { + const handleFileChange = async event => { setStatus(STATUS.DISABLED); + const fileObject = event.target.files[0]; const base64 = await createBase64Image(fileObject); const fileName = fileObject.name.replace(/\.[^/.]+$/, ''); setProfileImage({ @@ -107,17 +108,12 @@ const ProfilePageComponent = React.memo(({ user, onUpdateProfile, getHeaderEl })
{status === STATUS.ERROR && {errorMessage}} {status === STATUS.SUCCESS && {successMessage}} - ( - {`${DISPLAY_URL_PREFIX}${value}`} - ), - editConfig: { - // the prefix to display in the field - startAdornment: DISPLAY_URL_PREFIX, - }, - }, - IMAGE: { - Header: 'Main image', - source: 'image_url', - editConfig: { - type: 'image', - avatarVariant: 'square', - deleteModal: { - title: 'Remove landing page image', - message: 'Are you sure you want to delete your image?', - }, - minWidth: 1500, - minHeight: 900, - maxHeight: 2000, - maxWidth: 2000, - }, - }, - LOGO: { - Header: 'Logo image', - source: 'logo_url', - editConfig: { - type: 'image', - avatarVariant: 'square', - deleteModal: { - title: 'Remove logo image', - message: 'Are you sure you want to delete your image?', - }, - maxHeight: 300, - maxWidth: 300, - }, - }, - PRIMARY_COLOR: { - Header: 'Primary colour hex code', - source: 'primary_hexcode', - editConfig: { - type: 'hexcode', - placeholder: '#000000', - }, - }, - SECONDARY_COLOR: { - Header: 'Secondary colour', - source: 'secondary_hexcode', - editConfig: { - type: 'radio', - name: 'secondary_hexcode', - options: [ - { - label: 'White', - value: '#FFFFFF', - }, - { - label: 'Black', - value: '#000000', - }, - ], - }, - }, - EXTENDED_TITLE: { - Header: 'Extended title (max 60 characters)', - source: 'extended_title', - editConfig: { - maxLength: 60, - type: 'text', - placeholder: 'A short sentence about your project', - labelTooltip: 'This will only be shown on single project landing pages', - }, - }, - LONG_BIO: { - Header: 'Long bio (max 250 characters)', - source: 'long_bio', - editConfig: { - maxLength: 250, - type: 'textarea', - placeholder: 'A longer bio about your project', - }, - }, - PHONE_NUMBER: { - Header: 'Phone', - source: 'phone_number', - editConfig: { - placeholder: '+123456789', - }, - }, - WEBSITE_URL: { - Header: 'Website', - source: 'website_url', - editConfig: { - placeholder: 'www.example.com', - }, - }, - EXTERNAL_LINK: { - Header: 'URL', - source: 'external_link', - editConfig: { - placeholder: 'www.example.com', - }, - }, - PROJECTS: { - Header: 'Project code/s', - source: 'project_codes', - Filter: ArrayFilter, - Cell: ({ value }) => prettyArray(value), - editConfig: { - optionsEndpoint: 'projects', - optionLabelKey: 'code', - optionValueKey: 'code', - allowMultipleValues: true, - }, - }, -}; - -// All the sections -const SECTIONS = { - DETAILS: { - type: SECTION_FIELD_TYPE, - fields: [FIELDS.NAME, FIELDS.NAME_HEADER, FIELDS.URL_SEGMENT], - }, - MAIN_IMAGE: { - type: SECTION_FIELD_TYPE, - title: 'Add main image', - description: '(Width:1500-2000px and height:900-2000px)', - fields: [FIELDS.IMAGE], - }, - LOGO: { - type: SECTION_FIELD_TYPE, - title: 'Add logo image', - description: '(Max 300px x 300px)', - fields: [FIELDS.LOGO], - }, - PRIMARY_COLOR: { - type: SECTION_FIELD_TYPE, - title: 'Primary colour', - description: - 'This colour will be used for the header bar and other details. If no colour is specified a default colour will be applied.', - fields: [FIELDS.PRIMARY_COLOR], - }, - SECONDARY_COLOR: { - title: 'Secondary colour', - description: - 'This colour will be used for text and other accents that appear in the header bar. Please select the option that provides most contrast to your primary colour. If no colour is specified a default colour will be applied.', - type: SECTION_FIELD_TYPE, - fields: [FIELDS.SECONDARY_COLOR], - }, - EXTENDED_DETAILS: { - type: SECTION_FIELD_TYPE, - fields: [FIELDS.EXTENDED_TITLE, FIELDS.LONG_BIO], - }, - CONTACT_DETAILS: { - type: SECTION_FIELD_TYPE, - title: 'Contact information', - description: 'Add contact information you would like to show on the landing page.', - fields: [FIELDS.PHONE_NUMBER, FIELDS.WEBSITE_URL], - }, - EXTERNAL_LINK: { - type: SECTION_FIELD_TYPE, - title: 'External link', - description: 'Add an external link where users can learn more about your project', - fields: [FIELDS.EXTERNAL_LINK], - }, - PROJECTS: { - type: SECTION_FIELD_TYPE, - title: 'Project', - description: 'Enter project code below. You may enter multiple codes separated by a comma.', - fields: [FIELDS.PROJECTS], - }, -}; - -// Fields for creating a landing page -const CREATE_FIELDS = [ - SECTIONS.DETAILS, - SECTIONS.MAIN_IMAGE, - SECTIONS.LOGO, - SECTIONS.PRIMARY_COLOR, - SECTIONS.SECONDARY_COLOR, - SECTIONS.EXTENDED_DETAILS, - SECTIONS.CONTACT_DETAILS, - SECTIONS.EXTERNAL_LINK, - SECTIONS.PROJECTS, -]; - -// Fields for editing a landing page -const EDIT_FIELDS = [ - { - ...SECTIONS.DETAILS, - fields: [ - FIELDS.NAME, - FIELDS.NAME_HEADER, - { - ...FIELDS.URL_SEGMENT, - editable: false, - }, - ], - }, - SECTIONS.MAIN_IMAGE, - SECTIONS.LOGO, - SECTIONS.PRIMARY_COLOR, - SECTIONS.SECONDARY_COLOR, - SECTIONS.EXTENDED_DETAILS, - SECTIONS.CONTACT_DETAILS, - SECTIONS.EXTERNAL_LINK, - SECTIONS.PROJECTS, -]; - -// Table columns -const COLUMNS = [ - FIELDS.NAME, - { - ...FIELDS.PROJECTS, - Header: 'Projects', - }, - { - ...FIELDS.URL_SEGMENT, - Header: 'URL', - }, - { - Header: 'Edit', - type: 'edit', - source: 'id', - actionConfig: { - title: 'Edit Landing page', - editEndpoint: LANDING_PAGES_ENDPOINT, - fields: EDIT_FIELDS, - }, - }, - { - Header: 'Delete', - source: 'id', - type: 'delete', - actionConfig: { - endpoint: LANDING_PAGES_ENDPOINT, - }, - }, -]; - -const CREATE_CONFIG = { - actionConfig: { - title: 'New Landing Page', - editEndpoint: LANDING_PAGES_ENDPOINT, - fields: CREATE_FIELDS, - }, -}; - -export const CustomLandingPagesPage = ({ getHeaderEl }) => { - return ( - - ); -}; - -CustomLandingPagesPage.propTypes = { - getHeaderEl: PropTypes.func.isRequired, -}; diff --git a/packages/admin-panel/src/pages/resources/ProjectsPage.js b/packages/admin-panel/src/pages/resources/ProjectsPage.js index db75a9d28f..c9a9e1f8eb 100644 --- a/packages/admin-panel/src/pages/resources/ProjectsPage.js +++ b/packages/admin-panel/src/pages/resources/ProjectsPage.js @@ -58,34 +58,12 @@ const FIELDS = [ { Header: 'Image', source: 'image_url', - editConfig: { - type: 'image', - name: 'image_url', - avatarVariant: 'square', - deleteModal: { - title: 'Remove Project Image', - message: 'Are you sure you want to delete your image?', - }, - secondaryLabel: 'Recommended size: 480x240px', - maxHeight: 240, - maxWidth: 480, - }, + type: 'tooltip', }, { Header: 'Logo', source: 'logo_url', - editConfig: { - type: 'image', - name: 'logo_url', - avatarVariant: 'square', - deleteModal: { - title: 'Remove Project Logo', - message: 'Are you sure you want to delete your image?', - }, - secondaryLabel: 'Recommended size: 480x240px', - maxHeight: 240, - maxWidth: 480, - }, + type: 'tooltip', }, { Header: 'Config', @@ -109,6 +87,7 @@ const NEW_PROJECT_COLUMNS = [ source: 'name', }, ...FIELDS, + { Header: 'Country Code/s', source: 'country.code', @@ -166,13 +145,6 @@ export const ProjectsPage = ({ getHeaderEl }) => ( columns={COLUMNS} getHeaderEl={getHeaderEl} createConfig={CREATE_CONFIG} - onProcessDataForSave={(editedFields, recordData) => { - // If the project is being edited, and the code field is not being edited, then include the existing code in the edited fields so that it can be used for generating project image names. - if (recordData.code && !editedFields.code) { - return { ...editedFields, code: recordData.code }; - } - return editedFields; - }} /> ); diff --git a/packages/admin-panel/src/pages/resources/ResourcePage.js b/packages/admin-panel/src/pages/resources/ResourcePage.js index 5716db2704..a91dd005f3 100644 --- a/packages/admin-panel/src/pages/resources/ResourcePage.js +++ b/packages/admin-panel/src/pages/resources/ResourcePage.js @@ -9,7 +9,7 @@ import styled from 'styled-components'; import { DataFetchingTable } from '../../table'; import { EditModal } from '../../editor'; import { Header, PageBody } from '../../widgets'; -import { getExplodedFields, usePortalWithCallback } from '../../utilities'; +import { usePortalWithCallback } from '../../utilities'; import { LogsModal } from '../../logsTable'; const Container = styled(PageBody)` @@ -71,7 +71,7 @@ export const ResourcePage = ({ {HeaderPortal} { - return items.reduce((result, item) => { - if (item.type === SECTION_FIELD_TYPE) return [...result, ...item.fields]; - return [...result, item]; - }, []); -}; diff --git a/packages/admin-panel/src/utilities/index.js b/packages/admin-panel/src/utilities/index.js index b3b8cdbe05..4595927952 100644 --- a/packages/admin-panel/src/utilities/index.js +++ b/packages/admin-panel/src/utilities/index.js @@ -13,4 +13,3 @@ export * from './useDebounce'; export { checkVisibilityCriteriaAreMet } from './visibilityCriteria'; export { labelToId } from './labelToId'; export { getColumns } from './getColumns'; -export { getExplodedFields } from './getFields'; diff --git a/packages/admin-panel/src/widgets/InputField/InputField.js b/packages/admin-panel/src/widgets/InputField/InputField.js index 875a81c9c3..2da088564a 100644 --- a/packages/admin-panel/src/widgets/InputField/InputField.js +++ b/packages/admin-panel/src/widgets/InputField/InputField.js @@ -13,7 +13,7 @@ export const registerInputField = (type, Component) => { }; const getInputType = ({ options, optionsEndpoint, type }) => { - if (options && type !== 'radio') { + if (options) { return 'enum'; } if (optionsEndpoint) { diff --git a/packages/admin-panel/src/widgets/InputField/registerInputFields.js b/packages/admin-panel/src/widgets/InputField/registerInputFields.js index 5852503ad8..a3ad8e66ee 100644 --- a/packages/admin-panel/src/widgets/InputField/registerInputFields.js +++ b/packages/admin-panel/src/widgets/InputField/registerInputFields.js @@ -6,7 +6,6 @@ import React from 'react'; import { Link } from 'react-router-dom'; import moment from 'moment'; -import { InputAdornment } from '@material-ui/core'; import styled from 'styled-components'; import { Button, @@ -15,9 +14,6 @@ import { DateTimePicker, RadioGroup, Select, - ImageUploadField, - HexcodeField, - Checkbox, } from '@tupaia/ui-components'; import { stripTimezoneFromDate } from '@tupaia/utils'; import { registerInputField } from './InputField'; @@ -42,24 +38,6 @@ const StyledLink = styled(Link)` } `; -const StyledFileInputWrapper = styled.div` - margin-bottom: 1.2rem; -`; - -// Handle styling of the checkbox for just the admin-panel so as not to overwrite styles of the checkbox used elsewhere -export const StyledCheckboxWrapper = styled.div` - .MuiFormControlLabel-label { - font-size: 0.975rem; - color: ${props => props.theme.palette.text.secondary}; - } - .MuiButtonBase-root:not(.MuiIconButton-colorPrimary) { - color: ${props => props.theme.palette.text.secondary}; - } - .MuiSvgIcon-root { - font-size: 1.2rem; - } -`; - export const registerInputFields = () => { registerInputField('autocomplete', props => ( { parentRecord={props.parentRecord} baseFilter={props.baseFilter} pageSize={props.pageSize} - tooltip={props.labelTooltip} distinct={props.distinct} /> )); @@ -105,7 +82,6 @@ export const registerInputFields = () => { options={props.options} onChange={event => props.onChange(props.inputKey, event.target.value)} disabled={props.disabled} - tooltip={props.labelTooltip} /> )); registerInputField('jsonEditor', props => ( @@ -136,18 +112,15 @@ export const registerInputFields = () => { { label: 'Yes', value: true, - tooltip: props.optionTooltips ? props.optionTooltips.true : null, }, { label: 'No', value: false, - tooltip: props.optionTooltips ? props.optionTooltips.false : null, }, ]} value={props.value} disabled={props.disabled} helperText={props.secondaryLabel} - tooltip={props.labelTooltip} /> )); registerInputField('date', props => ( @@ -158,7 +131,6 @@ export const registerInputFields = () => { value={props.moment(props.value).isValid() ? moment(props.value) : null} onChange={date => props.onChange(props.inputKey, date.toISOString())} disabled={props.disabled} - tooltip={props.labelTooltip} /> )); registerInputField('datetime-local', props => ( @@ -178,7 +150,6 @@ export const registerInputFields = () => { } }} disabled={props.disabled} - tooltip={props.labelTooltip} /> )); registerInputField('datetime-utc', props => ( @@ -228,12 +199,6 @@ export const registerInputFields = () => { multiline type="textarea" rows="4" - tooltip={props.labelTooltip} - placeholder={props.placeholder} - inputProps={{ - minLength: props.minLength, - maxLength: props.maxLength, - }} /> )); registerInputField('text', props => ( @@ -245,15 +210,6 @@ export const registerInputFields = () => { disabled={props.disabled} helperText={props.secondaryLabel} type={props.type} - tooltip={props.labelTooltip} - placeholder={props.placeholder} - InputProps={{ - startAdornment: props.startAdornment ? ( - {props.startAdornment} - ) : null, - minLength: props.minLength, - maxLength: props.maxLength, - }} /> )); registerInputField('password', props => ( @@ -265,67 +221,6 @@ export const registerInputFields = () => { disabled={props.disabled} helperText={props.secondaryLabel} type="password" - tooltip={props.labelTooltip} - /> - )); - registerInputField('image', props => ( - - props.onChange(props.inputKey, null)} - onChange={image => props.onChange(props.inputKey, image)} - label={props.label} - buttonLabel={props.buttonLabel} - avatarVariant={props.avatarVariant} - deleteModal={props.deleteModal} - maxWidth={props.maxWidth} - maxHeight={props.maxHeight} - minWidth={props.minWidth} - minHeight={props.minHeight} - secondaryLabel={props.secondaryLabel} - tooltip={props.labelTooltip} - /> - - )); - registerInputField('hexcode', props => ( - props.onChange(props.inputKey, value)} - disabled={props.disabled} - helperText={props.secondaryLabel} - tooltip={props.labelTooltip} - placeholder={props.placeholder} - /> - )); - registerInputField('checkbox', props => ( - - props.onChange(props.inputKey, e.target.checked ? props.optionValue : null)} - disabled={props.disabled} - helperText={props.secondaryLabel} - tooltip={props.labelTooltip} - color="secondary" - /> - - )); - registerInputField('radio', props => ( - props.onChange(props.inputKey, event.target.value)} // convert to boolean value - options={props.options} - value={props.value} - disabled={props.disabled} - helperText={props.secondaryLabel} - tooltip={props.labelTooltip} - name={props.name} /> )); }; diff --git a/packages/aggregator/README.md b/packages/aggregator/README.md index ee010ff2ad..aa7b0f6d36 100644 --- a/packages/aggregator/README.md +++ b/packages/aggregator/README.md @@ -1,3 +1,3 @@ -# @tupaia/aggregator +## @tupaia/aggregator Aggregates and disaggregates data from various sources, via data-broker diff --git a/packages/api-client/README.md b/packages/api-client/README.md index 95aefab298..64946a20e1 100644 --- a/packages/api-client/README.md +++ b/packages/api-client/README.md @@ -1,6 +1,6 @@ -# @tupaia/api-client +## Tupaia Client -Client for connecting to Tupaia micro service APIs +Client for connecting to Tupaia APIs ### Usage @@ -8,4 +8,4 @@ Client for connecting to Tupaia micro service APIs const auth = new BasicAuthHandler(username, password); const tupaia = new TupaiaApiClient(auth); tupaia.entity.getEntity('...') -``` +``` \ No newline at end of file diff --git a/packages/auth/README.md b/packages/auth/README.md index 285f99bdc9..84cfe45a26 100644 --- a/packages/auth/README.md +++ b/packages/auth/README.md @@ -1,4 +1,4 @@ -# @tupaia/auth +## @tupaia/auth Back-end authentication diff --git a/packages/central-server/README.md b/packages/central-server/README.md index 0350aff58d..eb746cbbe5 100644 --- a/packages/central-server/README.md +++ b/packages/central-server/README.md @@ -1,9 +1,16 @@ -# @tupaia/central-server +# central-server -Central micro service for performing system operations. Primary responsibilities are: +Backend for the MediTrak health facility survey and mapping software -- Permissions based CRUD -- Survey response management -- Authentication -- Running sync services -- Executing database change handlers +## Running Locally + +- Need to have the following installed + - Node + - yarn +- Add a .env file to the root directory. The required variables are listed in `.env.example` +- `yarn` (to install dependencies) +- `yarn start-dev` to run in dev mode or `yarn start` to build and run production + +### Importing geojson + +Documentation for importing geojson can be found [here](doc/importingNewGeojson.md) diff --git a/packages/admin-panel/doc/importingNewGeojson.md b/packages/central-server/doc/importingNewGeojson.md similarity index 100% rename from packages/admin-panel/doc/importingNewGeojson.md rename to packages/central-server/doc/importingNewGeojson.md diff --git a/packages/central-server/src/apiV2/projects/GETProjects.js b/packages/central-server/src/apiV2/GETProjects.js similarity index 95% rename from packages/central-server/src/apiV2/projects/GETProjects.js rename to packages/central-server/src/apiV2/GETProjects.js index 29951ffebd..e6146d16de 100644 --- a/packages/central-server/src/apiV2/projects/GETProjects.js +++ b/packages/central-server/src/apiV2/GETProjects.js @@ -4,9 +4,9 @@ */ import { QUERY_CONJUNCTIONS } from '@tupaia/database'; -import { GETHandler } from '../GETHandler'; -import { assertAnyPermissions, assertBESAdminAccess, hasBESAdminAccess } from '../../permissions'; -import { hasAccessToEntityForVisualisation } from '../utilities'; +import { GETHandler } from './GETHandler'; +import { assertAnyPermissions, assertBESAdminAccess, hasBESAdminAccess } from '../permissions'; +import { hasAccessToEntityForVisualisation } from './utilities'; const { RAW } = QUERY_CONJUNCTIONS; @@ -51,6 +51,7 @@ export class GETProjects extends GETHandler { async getPermissionsFilter(criteria, options) { const dbConditions = { ...criteria }; + if (!hasBESAdminAccess(this.accessPolicy)) { const allPermissionGroups = this.accessPolicy.getPermissionGroups(); const countryCodesByPermissionGroup = {}; diff --git a/packages/central-server/src/apiV2/index.js b/packages/central-server/src/apiV2/index.js index dfc89eeadd..cc00715a4a 100644 --- a/packages/central-server/src/apiV2/index.js +++ b/packages/central-server/src/apiV2/index.js @@ -40,9 +40,10 @@ import { DeleteOptions, EditOptions, GETOptions } from './options'; import { DeleteOptionSets, EditOptionSets, GETOptionSets } from './optionSets'; import { DeleteAnswers, EditAnswers, GETAnswers } from './answers'; import { DeleteSurveys, EditSurveys, GETSurveys } from './surveys'; +import { GETProjects } from './GETProjects'; import { DeleteDashboardItem, EditDashboardItem, GETDashboardItems } from './dashboardItems'; import { CreateDashboard, DeleteDashboard, EditDashboard, GETDashboards } from './dashboards'; -import { CreateProject, EditProject, GETProjects } from './projects'; +import { CreateProject } from './projects'; import { DeleteDashboardRelation, EditDashboardRelation, @@ -123,8 +124,6 @@ import { GETExternalDatabaseConnections, TestExternalDatabaseConnection, } from './externalDatabaseConnections'; -import { CreateLandingPage, EditLandingPage } from './landingPages'; - // quick and dirty permission wrapper for open endpoints const allowAnyone = routeHandler => (req, res, next) => { req.assertPermissions(allowNoPermissions); @@ -245,7 +244,6 @@ apiV2.get( useRouteHandler(TestExternalDatabaseConnection), ); apiV2.get('/entityHierarchy/:recordId?', useRouteHandler(BESAdminGETHandler)); -apiV2.get('/landingPages/:recordId?', useRouteHandler(BESAdminGETHandler)); /** * POST routes @@ -283,7 +281,6 @@ apiV2.post('/dataServiceSyncGroups', useRouteHandler(CreateSyncGroups)); apiV2.post('/dataServiceSyncGroups/:recordId/sync', useRouteHandler(ManuallySyncSyncGroup)); apiV2.post('/dataElementDataServices', useRouteHandler(BESAdminCreateHandler)); apiV2.post('/externalDatabaseConnections', useRouteHandler(BESAdminCreateHandler)); -apiV2.post('/landingPages', useRouteHandler(CreateLandingPage)); /** * PUT routes @@ -314,14 +311,13 @@ apiV2.put('/mapOverlays/:recordId', useRouteHandler(EditMapOverlays)); apiV2.put('/mapOverlayGroups/:recordId', useRouteHandler(EditMapOverlayGroups)); apiV2.put('/mapOverlayGroupRelations/:recordId', useRouteHandler(EditMapOverlayGroupRelations)); apiV2.put('/indicators/:recordId', useRouteHandler(BESAdminEditHandler)); -apiV2.put('/projects/:recordId', useRouteHandler(EditProject)); +apiV2.put('/projects/:recordId', useRouteHandler(BESAdminEditHandler)); apiV2.put('/entities/:recordId', useRouteHandler(EditEntity)); apiV2.put('/me', catchAsyncErrors(editUser)); apiV2.put('/dataServiceSyncGroups/:recordId', useRouteHandler(EditSyncGroups)); apiV2.put('/dataElementDataServices/:recordId', useRouteHandler(BESAdminEditHandler)); apiV2.put('/externalDatabaseConnections/:recordId', useRouteHandler(BESAdminEditHandler)); apiV2.put('/entityHierarchy/:recordId', useRouteHandler(BESAdminEditHandler)); -apiV2.put('/landingPages/:recordId', useRouteHandler(EditLandingPage)); /** * DELETE routes @@ -355,7 +351,6 @@ apiV2.delete('/indicators/:recordId', useRouteHandler(BESAdminDeleteHandler)); apiV2.delete('/dataServiceSyncGroups/:recordId', useRouteHandler(DeleteSyncGroups)); apiV2.delete('/dataElementDataServices/:recordId', useRouteHandler(BESAdminDeleteHandler)); apiV2.delete('/externalDatabaseConnections/:recordId', useRouteHandler(BESAdminDeleteHandler)); -apiV2.delete('/landingPages/:recordId', useRouteHandler(BESAdminDeleteHandler)); apiV2.use(handleError); // error handler must come last diff --git a/packages/central-server/src/apiV2/landingPages/CreateLandingPage.js b/packages/central-server/src/apiV2/landingPages/CreateLandingPage.js deleted file mode 100644 index 030e97d875..0000000000 --- a/packages/central-server/src/apiV2/landingPages/CreateLandingPage.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -/* eslint-disable camelcase */ -import { BESAdminCreateHandler } from '../CreateHandler'; -import { uploadImage } from '../utilities'; - -export class CreateLandingPage extends BESAdminCreateHandler { - async createRecord() { - const { url_segment, image_url, logo_url } = this.newRecordData; - - await this.models.wrapInTransaction(async transactingModels => { - // Add the landing page, and then upload the images afterward, so that if an error is caught when creating the record, the images aren't uploaded unnecessarily - const newLandingPage = await transactingModels.landingPage.create({ - ...this.newRecordData, - image_url: '', - logo_url: '', - }); - await this.insertImagePaths( - transactingModels, - newLandingPage.id, - url_segment, - image_url, - logo_url, - ); - - return newLandingPage; - }); - } - - async insertImagePaths( - models, - landingPageId, - landingPageUrlSegment, - encodedBackgroundImage, - encodedLogoImage, - ) { - // image_url and logo_url are currently required fields, so the validator will error before this point if either of these is falsey. - const updates = { - image_url: await uploadImage( - encodedBackgroundImage, - landingPageUrlSegment, - 'landing_page_image', - true, - ), - logo_url: await uploadImage( - encodedLogoImage, - landingPageUrlSegment, - 'landing_page_logo', - true, - ), - }; - // The record has already been updated, so update the existing record with the new fields - return models.landingPage.updateById(landingPageId, updates); - } -} diff --git a/packages/central-server/src/apiV2/landingPages/EditLandingPage.js b/packages/central-server/src/apiV2/landingPages/EditLandingPage.js deleted file mode 100644 index ea68bbb813..0000000000 --- a/packages/central-server/src/apiV2/landingPages/EditLandingPage.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { BESAdminEditHandler } from '../EditHandler'; -import { uploadImage } from '../utilities'; - -export class EditLandingPage extends BESAdminEditHandler { - // Fetch the url_segment and existing image paths for the landing page - async getFields() { - const landingPage = await this.models.landingPage.findById(this.recordId, { - columns: ['url_segment', 'image_url', 'logo_url'], - }); - return landingPage; - } - - // Before updating the landingPage, if the image_url and logo_url have changed, we need to upload the new images to S3 and update the image_url and logo_url fields with the new urls. - // If image_url/logo_url are undefined, then we are not editing them and can just update the record as normal. - // If image_url/logo_url are null or empty strings, then we are removing the image. - async updateRecord() { - const { image_url: encodedBackgroundImage, logo_url: encodedLogoImage } = this.updatedFields; - const updatedFields = { ...this.updatedFields }; - - // Grab the existing image urls and the landing page url_segment (as this is not editable at this stage) so we can use them for image upload handling - const { - url_segment: urlSegment, - image_url: backgroundImageUrl, - logo_url: logoImageUrl, - } = await this.getFields(); - - // check first if field is undefined, as we don't want to upload an image if the field is not being updated, since this might cause the field to be reset - if (encodedBackgroundImage !== undefined) { - updatedFields.image_url = await uploadImage( - encodedBackgroundImage, - urlSegment, - 'landing_page_background_image', - true, - backgroundImageUrl, - ); - } - if (encodedLogoImage !== undefined) { - updatedFields.logo_url = await uploadImage( - encodedLogoImage, - urlSegment, - 'landing_page_logo_image', - true, - logoImageUrl, - ); - } - await this.models.landingPage.updateById(this.recordId, updatedFields); - } -} diff --git a/packages/central-server/src/apiV2/landingPages/index.js b/packages/central-server/src/apiV2/landingPages/index.js deleted file mode 100644 index 0f22be3a13..0000000000 --- a/packages/central-server/src/apiV2/landingPages/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -export { CreateLandingPage } from './CreateLandingPage'; -export { EditLandingPage } from './EditLandingPage'; diff --git a/packages/central-server/src/apiV2/projects/CreateProject.js b/packages/central-server/src/apiV2/projects/CreateProject.js index 2459bfdb14..877ac52d50 100644 --- a/packages/central-server/src/apiV2/projects/CreateProject.js +++ b/packages/central-server/src/apiV2/projects/CreateProject.js @@ -2,31 +2,40 @@ * Tupaia * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd */ + import { snake } from 'case'; -import { BESAdminCreateHandler } from '../CreateHandler'; -import { uploadImage } from '../utilities'; +import { CreateHandler } from '../CreateHandler'; +import { assertAnyPermissions, assertBESAdminAccess } from '../../permissions'; + /** * Handles POST endpoints: * - /projects */ -export class CreateProject extends BESAdminCreateHandler { +export class CreateProject extends CreateHandler { + async assertUserHasAccess() { + await this.assertPermissions( + assertAnyPermissions([assertBESAdminAccess], 'You need BES Admin to create new projects'), + ); + } + async createRecord() { const { code: rawProjectCode, name, description, sort_order, + image_url, + logo_url, permission_groups, countries, entityTypes, default_measure, dashboard_group_name, - image_url, - logo_url, } = this.newRecordData; const projectCode = snake(rawProjectCode); + await this.models.wrapInTransaction(async transactingModels => { const { id: projectEntityId } = await this.createProjectEntity( transactingModels, @@ -46,41 +55,22 @@ export class CreateProject extends BESAdminCreateHandler { dashboard_group_name, projectCode, ); - // Add the project, and then upload the images afterward, so that if an error is caught when creating the record, the images aren't uploaded unnecessarily - const newProject = await transactingModels.project.create({ + + return transactingModels.project.create({ code: projectCode, description, sort_order, - image_url: '', - logo_url: '', + image_url, + logo_url, permission_groups, default_measure, dashboard_group_name: dashboardGroupName, entity_id: projectEntityId, entity_hierarchy_id: projectEntityHierarchyId, }); - await this.insertImagePaths( - transactingModels, - newProject.id, - projectCode, - image_url, - logo_url, - ); - - return newProject; }); } - async insertImagePaths(models, projectId, projectCode, encodedBackgroundImage, encodedLogoImage) { - // image_url and logo_url are currently required fields, so the validator will error before this point if either of these is falsey. - const updates = { - image_url: await uploadImage(encodedBackgroundImage, projectCode, 'project_image', true), - logo_url: await uploadImage(encodedLogoImage, projectCode, 'project_logo', true), - }; - // The record has already been updated, so update the existing record with the new fields - return models.project.updateById(projectId, updates); - } - async createProjectEntity(models, projectCode, name) { const worldCode = 'World'; const { id: worldId } = await models.entity.findOne({ code: worldCode }); diff --git a/packages/central-server/src/apiV2/projects/EditProject.js b/packages/central-server/src/apiV2/projects/EditProject.js deleted file mode 100644 index ea7621cb23..0000000000 --- a/packages/central-server/src/apiV2/projects/EditProject.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { BESAdminEditHandler } from '../EditHandler'; -import { uploadImage } from '../utilities'; - -export class EditProject extends BESAdminEditHandler { - // Fetch the code of the project, as this is needed as a unique identifier to upload the images to S3. - // Also fetch the existing image_url and logo_url, so we can delete the old images from S3. - async getFields() { - const project = await this.models.project.findById(this.recordId, { - columns: ['code', 'image_url', 'logo_url'], - }); - return project; - } - - // Before updating the project, if the image_url and logo_url have changed, we need to upload the new images to S3 and update the image_url and logo_url fields with the new urls. This also will handle deleting of the image_url and logo_url fields, as the uploadImage function will return the original value if the encoded image is null or not a base64 encoded image. - async updateRecord() { - const { - image_url: encodedBackgroundImage, - logo_url: encodedLogoImage, - code: updatedCode, - } = this.updatedFields; - const updatedFields = { ...this.updatedFields }; - - const { - image_url: existingBackgroundImage, - logo_url: existingLogoImage, - code: existingCode, - } = await this.getFields(); - console.log('existingCode', existingCode); - - const code = updatedCode || existingCode; - // check first if field is undefined, as we don't want to upload an image if the field is not being updated, since this might cause the field to be reset - if (encodedBackgroundImage !== undefined) { - updatedFields.image_url = await uploadImage( - encodedBackgroundImage, - code, - 'project_image', - true, - existingBackgroundImage, - ); - } - if (encodedLogoImage !== undefined) { - updatedFields.logo_url = await uploadImage( - encodedLogoImage, - code, - 'project_logo', - true, - existingLogoImage, - ); - } - await this.models.project.updateById(this.recordId, updatedFields); - } -} diff --git a/packages/central-server/src/apiV2/projects/index.js b/packages/central-server/src/apiV2/projects/index.js index c547736e86..bc102fdbae 100644 --- a/packages/central-server/src/apiV2/projects/index.js +++ b/packages/central-server/src/apiV2/projects/index.js @@ -4,5 +4,3 @@ */ export { CreateProject } from './CreateProject'; -export { EditProject } from './EditProject'; -export { GETProjects } from './GETProjects'; diff --git a/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js b/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js index d9e913b159..cc197b7983 100644 --- a/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js +++ b/packages/central-server/src/apiV2/utilities/constructNewRecordValidationRules.js @@ -20,10 +20,6 @@ import { ValidationError, constructRecordExistsWithCode, constructIsValidEntityType, - isHexColor, - isURL, - isURLPathSegment, - constructIsShorterThan, } from '@tupaia/utils'; import { DataTableType } from '@tupaia/types'; import { DATA_SOURCE_SERVICE_TYPES } from '../../database/models/DataElement'; @@ -307,33 +303,6 @@ export const constructForSingle = (models, recordType) => { }, ], }; - case TYPES.LANDING_PAGE: - return { - name: [hasContent, constructIsShorterThan(40)], - website_url: [constructIsEmptyOr(isURL)], - external_link: [constructIsEmptyOr(isURL)], - primary_hexcode: [constructIsEmptyOr(isHexColor)], - secondary_hexcode: [constructIsEmptyOr(isHexColor)], - long_bio: [constructIsEmptyOr(constructIsShorterThan(250))], - extended_title: [constructIsEmptyOr(constructIsShorterThan(60))], - url_segment: [ - hasContent, - isURLPathSegment, - constructRecordNotExistsWithField(models.landingPage, 'url_segment'), - ], - project_codes: [ - hasContent, - async projectCodes => { - const projects = await models.project.find({ - code: projectCodes, - }); - if (projectCodes.length !== projects.length) { - throw new Error('Some provided projects do not exist'); - } - return true; - }, - ], - }; default: throw new ValidationError(`${recordType} is not a valid POST endpoint`); } diff --git a/packages/central-server/src/apiV2/utilities/index.js b/packages/central-server/src/apiV2/utilities/index.js index 5763c05dec..22cf2258e6 100644 --- a/packages/central-server/src/apiV2/utilities/index.js +++ b/packages/central-server/src/apiV2/utilities/index.js @@ -46,4 +46,3 @@ export { export { translateObjectFields } from './translateObjectFields'; export { getUserInfoInString } from './getUserInfoInString'; export { getPermissionListWithWildcard } from './getPermissionListWithWildcard'; -export { uploadImage } from './uploadImage'; diff --git a/packages/central-server/src/apiV2/utilities/uploadImage.js b/packages/central-server/src/apiV2/utilities/uploadImage.js deleted file mode 100644 index e4e8e5b31a..0000000000 --- a/packages/central-server/src/apiV2/utilities/uploadImage.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import AWS from 'aws-sdk'; -import { S3Client } from '@tupaia/utils'; -import { getStandardisedImageName } from '../../utilities'; - -/** - * - * @param {string} encodedImage - * @param {string} uniqueId - * @param {string} imageSuffix - * @param {boolean} useTimestamp (if true, the image will be uploaded with a timestamp appended to the end of the filename) - * @param {string} existingImagePath (if there is an existing image for the same field, this should be passed in so that it can be deleted before uploading the new image) - * @returns {string} The URL of the uploaded image - */ -export const uploadImage = async ( - encodedImage, - uniqueId, - imageSuffix, - useTimestamp = false, - existingImagePath, -) => { - // If the image is undefined then we are removing the value from the field (but not deleting the image), so return an empty string - if (encodedImage === undefined) return ''; - // If the image is not a base64 encoded image, then it is an external URL (which we need to accept for backwards compatibility with the older way of uploading things like project images). - // If the image is null or an empty string, we are not editing it, so return as usual. - if (encodedImage === null || !encodedImage.includes('data:image')) return encodedImage; - const s3Client = new S3Client(new AWS.S3()); - - // If there is an existing image, remove it before uploading the new one so that we don't end up with extra images for the same field - if (existingImagePath) await s3Client.deleteFile(existingImagePath); - - // Upload the new image with a standardised name - const uploadedImageURL = await s3Client.uploadImage( - encodedImage, - getStandardisedImageName(uniqueId, imageSuffix, useTimestamp), - true, - ); - return uploadedImageURL; -}; diff --git a/packages/central-server/src/tests/apiV2/landingPages/CreateLandingPage.test.js b/packages/central-server/src/tests/apiV2/landingPages/CreateLandingPage.test.js deleted file mode 100644 index e1732b7e30..0000000000 --- a/packages/central-server/src/tests/apiV2/landingPages/CreateLandingPage.test.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { findOrCreateDummyRecord } from '@tupaia/database'; -import { expect } from 'chai'; -import sinon from 'sinon'; -import { BES_ADMIN_PERMISSION_GROUP } from '../../../permissions'; -import { TestableApp } from '../../testUtilities'; -import * as UploadImage from '../../../apiV2/utilities/uploadImage'; - -describe('Creating a landing page', async () => { - let uploadImageStub; - const BES_ADMIN_POLICY = { - DL: [BES_ADMIN_PERMISSION_GROUP], - }; - - const EXAMPLE_UPLOADED_IMAGE_URL = 'https://example.com/image.jpg'; - const TEST_PROJECT_CODE = 'explore'; - - const ENCODED_IMAGE = - 'data:image/gif;base64,R0lGODdh4AHwANUAAKqqqgAAAO7u7ru7u+Xl5czMzN3d3cPDw7KystTU1H9/fxcXF1VVVXJych0dHRkZGS4uLo+Pjzc3N5SUlMHBwSwsLGpqahUVFSoqKklJScjIyBgYGLm5uTk5OW9vbzAwMKurqxYWFqWlpaOjoxwcHEJCQp+fn3d3d0ZGRhoaGpubm4WFhV1dXVlZWT8/P4qKimFhYTMzM25ubtDQ0ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4AHwAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOn/s+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsyYmIIAQyxcCIBBAREFky9YmKIAQ4AADJA8HoI5gObGlhZABmAhgwYBFCBsBjBhAQgBIAJYjoJCxowZNGYXUS2k9u3cu1FHYtDAgZANHBAAQEBhg5ASDQYAGHAChZQEBRAgSGC9CHPnALBr5+5dOSQFDwqs7uBhiIcOQlJIF4IghREXySngQhITkFAEfPLlt990/rn3CAQRALBadQxMwMAHFAgRwIIq/qxGRAIQTEAbBAkk4UFoREAooYYceujgIgxIcMCK04HwQAgBiLCfiwi4OIQIFUxQQYZJQEdEjDOuxqOPLx4ywQNErqbAAhoQUNtsAYg4BJPbvRDACwsawQADCz4ZpYZaatjkIhV85uZntkl3AAjlObDCEBOgZwQMLWSQBHwcENHmm5/Ziaeeax5igACMChAAowGMMMQIBgLAAAtDtIDigTEkYEFyRBgX5qKNPirApZlumugiqwkp4gQlgCCECboBAKgRtWVYQIhGVBCBdkmsRqtlt67KyGoHiIBjCCYAO0BtAcRpRAkR7CdCCUV49iYSqz2rmrTGLiLAEAMQIAABwMAKcYC56B6RwIxCDFAiEaQ2isS46rKbbrj89uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft98pBAAA7'; - - const TEST_LANDING_PAGE_INPUT = { - name: 'test_name', - project_codes: [TEST_PROJECT_CODE], - url_segment: 'test_url_segment', - image_url: EXAMPLE_UPLOADED_IMAGE_URL, - logo_url: EXAMPLE_UPLOADED_IMAGE_URL, - primary_hexcode: '#000000', - secondary_hexcode: '#ffffff', - extended_title: 'test_extended_title', - long_bio: 'test_long_bio', - external_link: 'www.example.com', - website_url: 'www.example.com', - phone_numer: '12345678', - include_name_in_header: false, - }; - - const app = new TestableApp(); - const { models } = app; - - before(() => { - uploadImageStub = sinon.stub(UploadImage, 'uploadImage').resolves(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - beforeEach(async () => { - await findOrCreateDummyRecord(models.project, { code: TEST_PROJECT_CODE }); - }); - - afterEach(async () => { - await models.landingPage.delete({ url_segment: TEST_LANDING_PAGE_INPUT.url_segment }); - await models.project.delete({ code: TEST_PROJECT_CODE }); - app.revokeAccess(); - }); - - after(async () => { - uploadImageStub.restore(); - }); - - describe('POST /landingPages', async () => { - describe('Record creation', async () => { - it('creates a valid landing page record', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.post('landingPages', { - body: { - ...TEST_LANDING_PAGE_INPUT, - }, - }); - - const result = await models.landingPage.find({ - url_segment: TEST_LANDING_PAGE_INPUT.url_segment, - }); - expect(result.length).to.equal(1); - expect(result[0].url_segment).to.equal(TEST_LANDING_PAGE_INPUT.url_segment); - }); - - it('uploads the value of image_url', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.post('landingPages', { - body: { - ...TEST_LANDING_PAGE_INPUT, - image_url: ENCODED_IMAGE, - }, - }); - - const result = await models.landingPage.find({ - url_segment: TEST_LANDING_PAGE_INPUT.url_segment, - }); - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('uploads the value of logo_url', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.post('landingPages', { - body: { - ...TEST_LANDING_PAGE_INPUT, - logo_url: ENCODED_IMAGE, - }, - }); - - const result = await models.landingPage.find({ - url_segment: TEST_LANDING_PAGE_INPUT.url_segment, - }); - expect(result.length).to.equal(1); - expect(result[0].logo_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - }); - }); -}); diff --git a/packages/central-server/src/tests/apiV2/landingPages/EditLandingPage.test.js b/packages/central-server/src/tests/apiV2/landingPages/EditLandingPage.test.js deleted file mode 100644 index 5796d1b825..0000000000 --- a/packages/central-server/src/tests/apiV2/landingPages/EditLandingPage.test.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import { generateId, findOrCreateDummyRecord } from '@tupaia/database'; -import { expect } from 'chai'; -import sinon from 'sinon'; -import { BES_ADMIN_PERMISSION_GROUP } from '../../../permissions'; -import { TestableApp } from '../../testUtilities'; -import * as UploadImage from '../../../apiV2/utilities/uploadImage'; - -describe('Editing a landing page', async () => { - let uploadImageStub; - const EXAMPLE_UPLOADED_IMAGE_URL = 'https://example.com/image.jpg'; - - const BES_ADMIN_POLICY = { - DL: [BES_ADMIN_PERMISSION_GROUP], - }; - const URL_SEGMENT = 'theUrlSegment'; - - const TEST_LANDING_PAGE_INPUT = { - id: generateId(), - image_url: 'www.image.com', - logo_url: 'www.image.com', - extended_title: 'old extended title', - }; - const ENCODED_IMAGE = - 'data:image/gif;base64,R0lGODdh4AHwANUAAKqqqgAAAO7u7ru7u+Xl5czMzN3d3cPDw7KystTU1H9/fxcXF1VVVXJych0dHRkZGS4uLo+Pjzc3N5SUlMHBwSwsLGpqahUVFSoqKklJScjIyBgYGLm5uTk5OW9vbzAwMKurqxYWFqWlpaOjoxwcHEJCQp+fn3d3d0ZGRhoaGpubm4WFhV1dXVlZWT8/P4qKimFhYTMzM25ubtDQ0ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4AHwAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOn/s+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsyYmIIAQyxcCIBBAREFky9YmKIAQ4AADJA8HoI5gObGlhZABmAhgwYBFCBsBjBhAQgBIAJYjoJCxowZNGYXUS2k9u3cu1FHYtDAgZANHBAAQEBhg5ASDQYAGHAChZQEBRAgSGC9CHPnALBr5+5dOSQFDwqs7uBhiIcOQlJIF4IghREXySngQhITkFAEfPLlt990/rn3CAQRALBadQxMwMAHFAgRwIIq/qxGRAIQTEAbBAkk4UFoREAooYYceujgIgxIcMCK04HwQAgBiLCfiwi4OIQIFUxQQYZJQEdEjDOuxqOPLx4ywQNErqbAAhoQUNtsAYg4BJPbvRDACwsawQADCz4ZpYZaatjkIhV85uZntkl3AAjlObDCEBOgZwQMLWSQBHwcENHmm5/Ziaeeax5igACMChAAowGMMMQIBgLAAAtDtIDigTEkYEFyRBgX5qKNPirApZlumugiqwkp4gQlgCCECboBAKgRtWVYQIhGVBCBdkmsRqtlt67KyGoHiIBjCCYAO0BtAcRpRAkR7CdCCUV49iYSqz2rmrTGLiLAEAMQIAABwMAKcYC56B6RwIxCDFAiEaQ2isS46rKbbrj89uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft98pBAAA7'; - - const app = new TestableApp(); - const { models } = app; - - before(() => { - uploadImageStub = sinon.stub(UploadImage, 'uploadImage').resolves(EXAMPLE_UPLOADED_IMAGE_URL); - }); - beforeEach(async () => { - await findOrCreateDummyRecord(models.landingPage, { - ...TEST_LANDING_PAGE_INPUT, - url_segment: URL_SEGMENT, - }); - }); - - afterEach(async () => { - await models.landingPage.delete({ id: TEST_LANDING_PAGE_INPUT.id }); - app.revokeAccess(); - }); - - after(async () => { - uploadImageStub.restore(); - }); - - describe('PUT /landingPages', async () => { - it('updates a landingPage record', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`landingPages/${TEST_LANDING_PAGE_INPUT.id}`, { - body: { - ...TEST_LANDING_PAGE_INPUT, - extended_title: 'the updated extended title', - }, - }); - - const result = await models.landingPage.find({ - id: TEST_LANDING_PAGE_INPUT.id, - }); - expect(result.length).to.equal(1); - expect(result[0].extended_title).to.equal('the updated extended title'); - }); - - it('uploads the value of image_url if it has changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`landingPages/${TEST_LANDING_PAGE_INPUT.id}`, { - body: { - ...TEST_LANDING_PAGE_INPUT, - image_url: ENCODED_IMAGE, - }, - }); - - const result = await models.landingPage.find({ - id: TEST_LANDING_PAGE_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('uploads the value of logo_url if it has changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`landingPages/${TEST_LANDING_PAGE_INPUT.id}`, { - body: { - ...TEST_LANDING_PAGE_INPUT, - logo_url: ENCODED_IMAGE, - }, - }); - - const result = await models.landingPage.find({ - id: TEST_LANDING_PAGE_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].logo_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('does not upload a new image_url or logo_url if these have not changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`landingPages/${TEST_LANDING_PAGE_INPUT.id}`, { - body: { - ...TEST_LANDING_PAGE_INPUT, - image_url: undefined, - logo_url: undefined, - }, - }); - - const result = await models.landingPage.find({ - id: TEST_LANDING_PAGE_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(TEST_LANDING_PAGE_INPUT.image_url); - expect(result[0].logo_url).to.equal(TEST_LANDING_PAGE_INPUT.logo_url); - }); - }); -}); diff --git a/packages/central-server/src/tests/apiV2/projects/CreateProject.test.js b/packages/central-server/src/tests/apiV2/projects/CreateProject.test.js index ca2ab06428..b6b820c3fc 100644 --- a/packages/central-server/src/tests/apiV2/projects/CreateProject.test.js +++ b/packages/central-server/src/tests/apiV2/projects/CreateProject.test.js @@ -5,10 +5,11 @@ import { generateId, findOrCreateDummyRecord } from '@tupaia/database'; import { expect } from 'chai'; -import sinon from 'sinon'; -import { BES_ADMIN_PERMISSION_GROUP } from '../../../permissions'; +import { + BES_ADMIN_PERMISSION_GROUP, + TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, +} from '../../../permissions'; import { TestableApp } from '../../testUtilities'; -import * as UploadImage from '../../../apiV2/utilities/uploadImage'; const rollbackRecords = async (models, projectCode) => { await models.project.delete({ code: projectCode }); @@ -22,12 +23,13 @@ const rollbackRecords = async (models, projectCode) => { }; describe('Creating a project', async () => { - let uploadImageStub; const BES_ADMIN_POLICY = { DL: [BES_ADMIN_PERMISSION_GROUP], }; - const EXAMPLE_UPLOADED_IMAGE_URL = 'https://example.com/image.jpg'; + const TUPAIA_ADMIN_POLICY = { + DL: [TUPAIA_ADMIN_PANEL_PERMISSION_GROUP], + }; const TEST_COUNTRY_ID = generateId(); const TEST_MAP_OVERLAY_ID = generateId(); @@ -45,8 +47,6 @@ describe('Creating a project', async () => { dashboard_group_name: 'test_dashboard', default_measure: TEST_MAP_OVERLAY_ID, }; - const ENCODED_IMAGE = - 'data:image/gif;base64,R0lGODdh4AHwANUAAKqqqgAAAO7u7ru7u+Xl5czMzN3d3cPDw7KystTU1H9/fxcXF1VVVXJych0dHRkZGS4uLo+Pjzc3N5SUlMHBwSwsLGpqahUVFSoqKklJScjIyBgYGLm5uTk5OW9vbzAwMKurqxYWFqWlpaOjoxwcHEJCQp+fn3d3d0ZGRhoaGpubm4WFhV1dXVlZWT8/P4qKimFhYTMzM25ubtDQ0ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4AHwAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOn/s+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsyYmIIAQyxcCIBBAREFky9YmKIAQ4AADJA8HoI5gObGlhZABmAhgwYBFCBsBjBhAQgBIAJYjoJCxowZNGYXUS2k9u3cu1FHYtDAgZANHBAAQEBhg5ASDQYAGHAChZQEBRAgSGC9CHPnALBr5+5dOSQFDwqs7uBhiIcOQlJIF4IghREXySngQhITkFAEfPLlt990/rn3CAQRALBadQxMwMAHFAgRwIIq/qxGRAIQTEAbBAkk4UFoREAooYYceujgIgxIcMCK04HwQAgBiLCfiwi4OIQIFUxQQYZJQEdEjDOuxqOPLx4ywQNErqbAAhoQUNtsAYg4BJPbvRDACwsawQADCz4ZpYZaatjkIhV85uZntkl3AAjlObDCEBOgZwQMLWSQBHwcENHmm5/Ziaeeax5igACMChAAowGMMMQIBgLAAAtDtIDigTEkYEFyRBgX5qKNPirApZlumugiqwkp4gQlgCCECboBAKgRtWVYQIhGVBCBdkmsRqtlt67KyGoHiIBjCCYAO0BtAcRpRAkR7CdCCUV49iYSqz2rmrTGLiLAEAMQIAABwMAKcYC56B6RwIxCDFAiEaQ2isS46rKbbrj89uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft98pBAAA7'; const app = new TestableApp(); const { models } = app; @@ -61,7 +61,6 @@ describe('Creating a project', async () => { await findOrCreateDummyRecord(models.project, { code: 'test_project' }); await findOrCreateDummyRecord(models.permissionGroup, { name: 'test_group1' }); await findOrCreateDummyRecord(models.mapOverlay, { id: TEST_MAP_OVERLAY_ID, code: '126' }); - uploadImageStub = sinon.stub(UploadImage, 'uploadImage').resolves(EXAMPLE_UPLOADED_IMAGE_URL); }); afterEach(async () => { @@ -69,10 +68,6 @@ describe('Creating a project', async () => { app.revokeAccess(); }); - after(() => { - uploadImageStub.restore(); - }); - describe('POST /projects', async () => { describe('New record validation', async () => { it('Throws an error when the project code already exists', async () => { @@ -139,6 +134,20 @@ describe('Creating a project', async () => { }); }); + it('Throws an error when the user does not have BES Admin permission', async () => { + await app.grantAccess(TUPAIA_ADMIN_POLICY); + + const { body: result } = await app.post('projects', { + body: { + ...TEST_PROJECT_INPUT, + }, + }); + + expect(result).to.deep.equal({ + error: 'You need BES Admin to create new projects', + }); + }); + describe('Record creation', async () => { it('creates a valid project record', async () => { await app.grantAccess(BES_ADMIN_POLICY); @@ -182,35 +191,5 @@ describe('Creating a project', async () => { expect(result[0].name).to.equal(TEST_PROJECT_INPUT.code); }); }); - - it('uploads the value of image_url', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.post('projects', { - body: { - ...TEST_PROJECT_INPUT, - image_url: ENCODED_IMAGE, - }, - }); - - const result = await models.project.find({ code: TEST_PROJECT_INPUT.code }); - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('uploads the value of logo_url', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.post('projects', { - body: { - ...TEST_PROJECT_INPUT, - logo_url: ENCODED_IMAGE, - }, - }); - - const result = await models.project.find({ code: TEST_PROJECT_INPUT.code }); - expect(result.length).to.equal(1); - expect(result[0].logo_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); }); }); diff --git a/packages/central-server/src/tests/apiV2/projects/EditProject.test.js b/packages/central-server/src/tests/apiV2/projects/EditProject.test.js deleted file mode 100644 index d5f5d97076..0000000000 --- a/packages/central-server/src/tests/apiV2/projects/EditProject.test.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import { generateId, findOrCreateDummyRecord } from '@tupaia/database'; -import { expect } from 'chai'; -import sinon from 'sinon'; -import { BES_ADMIN_PERMISSION_GROUP } from '../../../permissions'; -import { TestableApp } from '../../testUtilities'; -import * as UploadImage from '../../../apiV2/utilities/uploadImage'; - -const rollbackRecords = async (models, projectCode) => { - await models.project.delete({ code: projectCode }); - await models.dashboard.delete({ root_entity_code: projectCode }); - const projectEntity = await models.entity.findOne({ code: projectCode, type: 'project' }); - if (projectEntity !== null) { - await models.entityRelation.delete({ parent_id: projectEntity.id }); - await models.entity.delete({ id: projectEntity.id }); - } - await models.entityHierarchy.delete({ name: projectCode }); -}; - -describe('Editing a project', async () => { - let uploadImageStub; - const BES_ADMIN_POLICY = { - DL: [BES_ADMIN_PERMISSION_GROUP], - }; - - const EXAMPLE_UPLOADED_IMAGE_URL = 'https://example.com/image.jpg'; - - const TEST_PROJECT_INPUT = { - id: generateId(), - image_url: 'www.image.com', - logo_url: 'www.image.com', - description: 'old description', - code: 'test_existing_project', - }; - const ENCODED_IMAGE = - 'data:image/gif;base64,R0lGODdh4AHwANUAAKqqqgAAAO7u7ru7u+Xl5czMzN3d3cPDw7KystTU1H9/fxcXF1VVVXJych0dHRkZGS4uLo+Pjzc3N5SUlMHBwSwsLGpqahUVFSoqKklJScjIyBgYGLm5uTk5OW9vbzAwMKurqxYWFqWlpaOjoxwcHEJCQp+fn3d3d0ZGRhoaGpubm4WFhV1dXVlZWT8/P4qKimFhYTMzM25ubtDQ0ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4AHwAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOn/s+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsyYmIIAQyxcCIBBAREFky9YmKIAQ4AADJA8HoI5gObGlhZABmAhgwYBFCBsBjBhAQgBIAJYjoJCxowZNGYXUS2k9u3cu1FHYtDAgZANHBAAQEBhg5ASDQYAGHAChZQEBRAgSGC9CHPnALBr5+5dOSQFDwqs7uBhiIcOQlJIF4IghREXySngQhITkFAEfPLlt990/rn3CAQRALBadQxMwMAHFAgRwIIq/qxGRAIQTEAbBAkk4UFoREAooYYceujgIgxIcMCK04HwQAgBiLCfiwi4OIQIFUxQQYZJQEdEjDOuxqOPLx4ywQNErqbAAhoQUNtsAYg4BJPbvRDACwsawQADCz4ZpYZaatjkIhV85uZntkl3AAjlObDCEBOgZwQMLWSQBHwcENHmm5/Ziaeeax5igACMChAAowGMMMQIBgLAAAtDtIDigTEkYEFyRBgX5qKNPirApZlumugiqwkp4gQlgCCECboBAKgRtWVYQIhGVBCBdkmsRqtlt67KyGoHiIBjCCYAO0BtAcRpRAkR7CdCCUV49iYSqz2rmrTGLiLAEAMQIAABwMAKcYC56B6RwIxCDFAiEaQ2isS46rKbbrj89uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft98pBAAA7'; - - const app = new TestableApp(); - const { models } = app; - - before(() => { - uploadImageStub = sinon.stub(UploadImage, 'uploadImage').resolves(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - beforeEach(async () => { - await findOrCreateDummyRecord(models.project, TEST_PROJECT_INPUT); - }); - - afterEach(async () => { - await rollbackRecords(models, TEST_PROJECT_INPUT.code); - app.revokeAccess(); - }); - - after(() => { - uploadImageStub.restore(); - }); - - describe('PUT /projects', async () => { - it('updates a project record', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`projects/${TEST_PROJECT_INPUT.id}`, { - body: { - ...TEST_PROJECT_INPUT, - description: 'the updated description', - }, - }); - - const result = await models.project.find({ - id: TEST_PROJECT_INPUT.id, - }); - expect(result.length).to.equal(1); - expect(result[0].description).to.equal('the updated description'); - }); - - it('uploads the value of image_url if it has changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`projects/${TEST_PROJECT_INPUT.id}`, { - body: { - ...TEST_PROJECT_INPUT, - image_url: ENCODED_IMAGE, - }, - }); - - const result = await models.project.find({ - id: TEST_PROJECT_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('uploads the value of logo_url if it has changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`projects/${TEST_PROJECT_INPUT.id}`, { - body: { - ...TEST_PROJECT_INPUT, - logo_url: ENCODED_IMAGE, - }, - }); - - const result = await models.project.find({ - id: TEST_PROJECT_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].logo_url).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('does not upload a new image_url or logo_url if they have not changed', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - - await app.put(`projects/${TEST_PROJECT_INPUT.id}`, { - body: { - ...TEST_PROJECT_INPUT, - image_url: undefined, - logo_url: undefined, - }, - }); - - const result = await models.project.find({ - id: TEST_PROJECT_INPUT.id, - }); - - expect(result.length).to.equal(1); - expect(result[0].image_url).to.equal(TEST_PROJECT_INPUT.image_url); - expect(result[0].logo_url).to.equal(TEST_PROJECT_INPUT.logo_url); - }); - }); -}); diff --git a/packages/central-server/src/tests/apiV2/projects/GETProjects.test.js b/packages/central-server/src/tests/apiV2/projects/GETProjects.test.js deleted file mode 100644 index b40216101b..0000000000 --- a/packages/central-server/src/tests/apiV2/projects/GETProjects.test.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import { expect } from 'chai'; -import { findOrCreateDummyRecord, generateId } from '@tupaia/database'; -import { TestableApp } from '../../testUtilities'; -import { - BES_ADMIN_PERMISSION_GROUP, - TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, -} from '../../../permissions'; - -const getFilterString = filter => `filter=${JSON.stringify(filter)}`; -// remove test data after the test is finished -const removeTestData = async (models, projectCode) => { - await models.project.delete({ code: projectCode }); - const projectEntity = await models.entity.findOne({ code: projectCode, type: 'project' }); - if (projectEntity !== null) { - await models.entityRelation.delete({ parent_id: projectEntity.id }); - await models.entity.delete({ id: projectEntity.id }); - } - await models.entityHierarchy.delete({ name: projectCode }); -}; - -// generate the test data for the provided project code -const createTestData = async (models, projectCode, permissionGroup, countryEntityId) => { - const { id: projectEntityId } = await findOrCreateDummyRecord(models.entity, { - code: projectCode, - type: 'project', - }); - const { id: entityHierarchyId } = await findOrCreateDummyRecord(models.entityHierarchy, { - name: projectCode, - canonical_types: '{country}', - }); - await findOrCreateDummyRecord(models.entityRelation, { - parent_id: projectEntityId, - child_id: countryEntityId, - entity_hierarchy_id: entityHierarchyId, - }); - return findOrCreateDummyRecord( - models.project, - { - id: generateId(), - code: projectCode, - entity_id: projectEntityId, - entity_hierarchy_id: entityHierarchyId, - }, - { - permission_groups: [permissionGroup], - }, - ); -}; - -describe('Permissions checker for GETProjects', async () => { - const DEFAULT_POLICY = { - DL: [TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, 'Admin'], - KI: [TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, 'Admin'], - SB: [TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, 'Royal Australasian College of Surgeons'], - VU: [TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, 'Admin'], - LA: ['Admin'], - TO: ['Admin'], - }; - - const BES_ADMIN_POLICY = { - DL: [BES_ADMIN_PERMISSION_GROUP], - }; - - const PUBLIC_POLICY = { - DL: ['Public'], - }; - - const PROJECT_CODES = [ - { - code: 'test_project_1', - permissionGroupName: TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, - }, - { - code: 'test_project_2', - permissionGroupName: 'Admin', - }, - ]; - - const app = new TestableApp(); - const { models } = app; - let projects; - let filterString; - - before(async () => { - await findOrCreateDummyRecord(models.permissionGroup, { - name: TUPAIA_ADMIN_PANEL_PERMISSION_GROUP, - }); - await findOrCreateDummyRecord(models.permissionGroup, { - name: 'Admin', - }); - - const { id: countryEntityId } = await findOrCreateDummyRecord(models.entity, { - code: 'DL', - country_code: 'DL', - type: 'country', - }); - // Set up test projects in the database - projects = await Promise.all( - PROJECT_CODES.map(({ code, permissionGroupName }) => - createTestData(models, code, permissionGroupName, countryEntityId), - ), - ); - - filterString = getFilterString({ - id: { comparator: 'in', comparisonValue: projects.map(project => project.id) }, - }); - }); - - afterEach(() => { - app.revokeAccess(); - }); - - after(async () => { - await Promise.all(PROJECT_CODES.map(({ code }) => removeTestData(models, code))); - }); - - describe('GET /projects/:id', async () => { - it('Sufficient permissions: returns a requested project when user has BES admin permissions', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - const { body: result } = await app.get(`projects/${projects[0].id}`); - expect(result.id).to.equal(projects[0].id); - }); - - it('Sufficient permissions: returns a requested project when user has permissions', async () => { - await app.grantAccess(DEFAULT_POLICY); - const { body: result } = await app.get(`projects/${projects[0].id}`); - expect(result.id).to.equal(projects[0].id); - }); - - it('Insufficient permissions: throws an error if requesting project when user does not have permissions', async () => { - await app.grantAccess(PUBLIC_POLICY); - const { body: result } = await app.get(`projects/${projects[0].id}`); - - expect(result).to.have.keys('error'); - }); - }); - - describe('GET /projects', async () => { - it('Sufficient permissions: returns all projects if the user has BES admin access', async () => { - await app.grantAccess(BES_ADMIN_POLICY); - const { body: results } = await app.get(`projects?${filterString}`); - expect(results.length).to.equal(projects.length); - const resultIds = results.map(r => r.id); - projects.forEach(project => { - expect(resultIds.includes(project.id)).to.equal(true); - }); - }); - - it('Sufficient permissions: returns projects when user has permissions', async () => { - await app.grantAccess(DEFAULT_POLICY); - const { body: results } = await app.get(`projects?${filterString}`); - expect(results.length).to.equal(projects.length); - const resultIds = results.map(r => r.id); - projects.forEach(project => { - expect(resultIds.includes(project.id)).to.equal(true); - }); - }); - - it('Insufficient permissions: returns an empty array if users do not have access to any project', async () => { - await app.grantAccess(PUBLIC_POLICY); - const { body: results } = await app.get(`projects?${filterString}`); - - expect(results).to.be.empty; - }); - }); -}); diff --git a/packages/central-server/src/tests/apiV2/submitMeditrakSurveyResponse.test.js b/packages/central-server/src/tests/apiV2/submitMeditrakSurveyResponse.test.js index ac6e9f39ea..f65cdf104d 100644 --- a/packages/central-server/src/tests/apiV2/submitMeditrakSurveyResponse.test.js +++ b/packages/central-server/src/tests/apiV2/submitMeditrakSurveyResponse.test.js @@ -356,7 +356,7 @@ describe('POST /surveyResponse', async () => { const imageResponse = await fetchWithTimeout(answer.text); const imageBuffer = await imageResponse.buffer(); const imageString = imageBuffer.toString('base64'); - expect(imageString).to.equal(TEST_IMAGE_DATA.replace('data:image/png;base64,', '')); + expect(imageString).to.equal(TEST_IMAGE_DATA); }); }); diff --git a/packages/central-server/src/tests/apiV2/utilities/uploadImage.test.js b/packages/central-server/src/tests/apiV2/utilities/uploadImage.test.js deleted file mode 100644 index 7b87cade9f..0000000000 --- a/packages/central-server/src/tests/apiV2/utilities/uploadImage.test.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import AWS from 'aws-sdk'; -import { S3Client } from '@tupaia/utils'; -import { expect } from 'chai'; -import sinon from 'sinon'; -import { uploadImage } from '../../../apiV2/utilities'; - -describe('uploadImage', async () => { - let uploadImageStub; - let deleteFileStub; - const EXAMPLE_UPLOADED_IMAGE_URL = 'https://example.com/image.jpg'; - const UNIQUE_ID = 'theUniqueId'; - const IMAGE_SUFFIX = 'theImageSuffix'; - - const ENCODED_IMAGE = - 'data:image/gif;base64,R0lGODdh4AHwANUAAKqqqgAAAO7u7ru7u+Xl5czMzN3d3cPDw7KystTU1H9/fxcXF1VVVXJych0dHRkZGS4uLo+Pjzc3N5SUlMHBwSwsLGpqahUVFSoqKklJScjIyBgYGLm5uTk5OW9vbzAwMKurqxYWFqWlpaOjoxwcHEJCQp+fn3d3d0ZGRhoaGpubm4WFhV1dXVlZWT8/P4qKimFhYTMzM25ubtDQ0ExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4AHwAAAG/kCAcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOn/s+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsyYmIIAQyxcCIBBAREFky9YmKIAQ4AADJA8HoI5gObGlhZABmAhgwYBFCBsBjBhAQgBIAJYjoJCxowZNGYXUS2k9u3cu1FHYtDAgZANHBAAQEBhg5ASDQYAGHAChZQEBRAgSGC9CHPnALBr5+5dOSQFDwqs7uBhiIcOQlJIF4IghREXySngQhITkFAEfPLlt990/rn3CAQRALBadQxMwMAHFAgRwIIq/qxGRAIQTEAbBAkk4UFoREAooYYceujgIgxIcMCK04HwQAgBiLCfiwi4OIQIFUxQQYZJQEdEjDOuxqOPLx4ywQNErqbAAhoQUNtsAYg4BJPbvRDACwsawQADCz4ZpYZaatjkIhV85uZntkl3AAjlObDCEBOgZwQMLWSQBHwcENHmm5/Ziaeeax5igACMChAAowGMMMQIBgLAAAtDtIDigTEkYEFyRBgX5qKNPirApZlumugiqwkp4gQlgCCECboBAKgRtWVYQIhGVBCBdkmsRqtlt67KyGoHiIBjCCYAO0BtAcRpRAkR7CdCCUV49iYSqz2rmrTGLiLAEAMQIAABwMAKcYC56B6RwIxCDFAiEaQ2isS46rKbbrj89uvvvwAHLPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft98pBAAA7'; - - before(async () => { - sinon.createStubInstance(AWS.S3); - }); - beforeEach(() => { - uploadImageStub = sinon - .stub(S3Client.prototype, 'uploadImage') - .returns(Promise.resolve(EXAMPLE_UPLOADED_IMAGE_URL)); - deleteFileStub = sinon.stub(S3Client.prototype, 'deleteFile').resolves(); - }); - - afterEach(async () => { - uploadImageStub.restore(); - deleteFileStub.restore(); - }); - - it('uploads the image and returns the result if is a base64 encoded image', async () => { - const result = await uploadImage(ENCODED_IMAGE, UNIQUE_ID, IMAGE_SUFFIX, true); - expect(result).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - expect(deleteFileStub).not.called; - }); - - it('removes the existing image if path is passed in', async () => { - uploadImage(ENCODED_IMAGE, UNIQUE_ID, IMAGE_SUFFIX, true, 'existingImageUrl'); - expect(deleteFileStub).calledWith('existingImageUrl'); - }); - - it('does not upload the image if is not a base64 encoded image', async () => { - const result = await uploadImage(EXAMPLE_UPLOADED_IMAGE_URL, UNIQUE_ID, IMAGE_SUFFIX); - expect(result).to.equal(EXAMPLE_UPLOADED_IMAGE_URL); - }); - - it('does not upload the image if encodedImage param is null', async () => { - const result = await uploadImage(null, UNIQUE_ID, IMAGE_SUFFIX); - expect(result).to.equal(null); - }); - - it('does not upload the image if encodedImage param is an empty string', async () => { - const result = await uploadImage('', UNIQUE_ID, IMAGE_SUFFIX); - expect(result).to.equal(''); - }); - - it('does not upload the image, and returns "" if encodedImage param is undefined', async () => { - const result = await uploadImage(undefined, UNIQUE_ID, IMAGE_SUFFIX); - expect(result).to.equal(''); - }); -}); diff --git a/packages/central-server/src/tests/testData/testImageData.js b/packages/central-server/src/tests/testData/testImageData.js index f7ba051de5..b7ed392ab7 100644 --- a/packages/central-server/src/tests/testData/testImageData.js +++ b/packages/central-server/src/tests/testData/testImageData.js @@ -4,4 +4,4 @@ */ export const TEST_IMAGE_DATA = - 'data:image/png;base64,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'; + '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'; diff --git a/packages/central-server/src/tests/utilities/getStandardisedImageName.test.js b/packages/central-server/src/tests/utilities/getStandardisedImageName.test.js deleted file mode 100644 index 27cc524667..0000000000 --- a/packages/central-server/src/tests/utilities/getStandardisedImageName.test.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { expect } from 'chai'; -import { getStandardisedImageName } from '../../utilities/getStandardisedImageName'; - -describe('getStandardisedImageName()', () => { - it('should return the correct image name', () => { - expect(getStandardisedImageName('test', 'logo')).to.equal('test_logo'); - }); -}); diff --git a/packages/central-server/src/utilities/getStandardisedImageName.js b/packages/central-server/src/utilities/getStandardisedImageName.js deleted file mode 100644 index 42e521432b..0000000000 --- a/packages/central-server/src/utilities/getStandardisedImageName.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -/** Generates a standardised image name based on the uniqueId and imageSuffix. For example for a project, uniqueId would be the project code and imageSuffix would be either 'project_image' or 'project_logo' */ -export const getStandardisedImageName = (uniqueId, imageSuffix, useTimestamp) => - `${uniqueId}_${imageSuffix}${useTimestamp ? `_${Date.now()}` : ''}`; diff --git a/packages/central-server/src/utilities/index.js b/packages/central-server/src/utilities/index.js index a025d008cd..8fc491710a 100644 --- a/packages/central-server/src/utilities/index.js +++ b/packages/central-server/src/utilities/index.js @@ -7,4 +7,3 @@ export { getApiUrl } from './getApiUrl'; export { getTempDirectory } from './getTempDirectory'; export { resourceToRecordType } from './resourceToRecordType'; export { sendEmail } from './sendEmail'; -export { getStandardisedImageName } from './getStandardisedImageName'; diff --git a/packages/data-api/README.md b/packages/data-api/README.md index c0312b1cd6..b1804f85bc 100644 --- a/packages/data-api/README.md +++ b/packages/data-api/README.md @@ -1,4 +1,4 @@ -# @tupaia/data-api +## @tupaia/data-api Fetches data from the Tupaia database, in the form of events or analytics. diff --git a/packages/data-broker/README.md b/packages/data-broker/README.md index 24c9e09c65..07c192ee7d 100644 --- a/packages/data-broker/README.md +++ b/packages/data-broker/README.md @@ -1,17 +1,3 @@ -# @tupaia/data-broker +## @tupaia/data-broker -Centralised gateway which provides a common interface to external data sources. - -### Concepts - -- data element - an individual type of data point in a data source (eg. a question in a survey) -- data group - a grouped set of data elements (eg. a survey) -- sync group - a set of data elements that are synced with an external source -- analytic - a data point for a data element (eg. an answer to a question) -- event - a set of data points for each data element in a data group (eg. a survey response) - -### Interface - -- `push` - pushes data to an external data source -- `pull` - pulls analytics or events data for requested data elements or data groups -- `pullMetadata` - pull metadata around requested data elements, data groups, or sync groups +Maps data from Tupaia to external sources, and vice versa diff --git a/packages/data-lake-api/README.md b/packages/data-lake-api/README.md index fb2959df4d..43b2c37f6c 100644 --- a/packages/data-lake-api/README.md +++ b/packages/data-lake-api/README.md @@ -1,3 +1,3 @@ -# @tupaia/data-lake-api +## @tupaia/data-lake-api Fetches data from the Data Lake database, in the form of events or analytics. diff --git a/packages/data-table-server/README.md b/packages/data-table-server/README.md index 3f27e2f8e6..f7cf833264 100644 --- a/packages/data-table-server/README.md +++ b/packages/data-table-server/README.md @@ -1,3 +1,3 @@ # @tupaia/data-table-server -Micro service for querying Tupaia Data Tables +Microservice for querying Tupaia Data Tables diff --git a/packages/database/README.md b/packages/database/README.md index 484cda6226..4402133a6e 100644 --- a/packages/database/README.md +++ b/packages/database/README.md @@ -1,4 +1,4 @@ -# @tupaia/database +# Tupaia Database This package provides common database code for use across other packages within this mono-repo. diff --git a/packages/database/src/migrations/20230430221850-AddTablesForLandingPages-modifies-schema.js b/packages/database/src/migrations/20230430221850-AddTablesForLandingPages-modifies-schema.js deleted file mode 100644 index d36cf049fa..0000000000 --- a/packages/database/src/migrations/20230430221850-AddTablesForLandingPages-modifies-schema.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var dbm; -var type; -var seed; - -/** - * We receive the dbmigrate dependency from dbmigrate initially. - * This enables us to not have to rely on NODE_PATH. - */ -exports.setup = function (options, seedLink) { - dbm = options.dbmigrate; - type = dbm.dataType; - seed = seedLink; -}; - -exports.up = async function (db) { - await db.runSql(` - CREATE TABLE landing_page ( - id TEXT PRIMARY KEY, - name VARCHAR(40) NOT NULL, - url_segment TEXT NOT NULL, - image_url TEXT, - logo_url TEXT, - primary_hexcode TEXT, - secondary_hexcode TEXT, - extended_title TEXT, - long_bio TEXT, - contact_us TEXT, - external_link TEXT, - phone_number TEXT, - website_url TEXT, - include_name_in_header BOOLEAN, - project_codes TEXT[] - ) - `); -}; - -exports.down = async function (db) { - await db.runSql(`DROP TABLE landing_page`); -}; - -exports._meta = { - version: 1, -}; diff --git a/packages/database/src/modelClasses/LandingPage.js b/packages/database/src/modelClasses/LandingPage.js deleted file mode 100644 index 330c37bccc..0000000000 --- a/packages/database/src/modelClasses/LandingPage.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import { DatabaseModel } from '../DatabaseModel'; -import { DatabaseType } from '../DatabaseType'; -import { TYPES } from '../types'; - -class LandingPageType extends DatabaseType { - static databaseType = TYPES.LANDING_PAGE; -} - -export class LandingPageModel extends DatabaseModel { - get DatabaseTypeClass() { - return LandingPageType; - } -} diff --git a/packages/database/src/modelClasses/index.js b/packages/database/src/modelClasses/index.js index 360d8c3a8b..83d6b575a0 100644 --- a/packages/database/src/modelClasses/index.js +++ b/packages/database/src/modelClasses/index.js @@ -29,7 +29,6 @@ import { FacilityModel } from './Facility'; import { FeedItemModel } from './FeedItem'; import { GeographicalAreaModel } from './GeographicalArea'; import { IndicatorModel } from './Indicator'; -import { LandingPageModel } from './LandingPage'; import { LegacyReportModel } from './LegacyReport'; import { UserFavouriteDashboardItemModel } from './UserFavouriteDashboardItem'; import { MapOverlayGroupModel } from './MapOverlayGroup'; @@ -91,7 +90,6 @@ export const modelClasses = { FeedItem: FeedItemModel, GeographicalArea: GeographicalAreaModel, Indicator: IndicatorModel, - LandingPage: LandingPageModel, LegacyReport: LegacyReportModel, MapOverlay: MapOverlayModel, MapOverlayGroup: MapOverlayGroupModel, diff --git a/packages/database/src/types.js b/packages/database/src/types.js index fa1dee27a8..a67e10589a 100644 --- a/packages/database/src/types.js +++ b/packages/database/src/types.js @@ -36,7 +36,6 @@ export const TYPES = { FEED_ITEM: 'feed_item', GEOGRAPHICAL_AREA: 'geographical_area', INDICATOR: 'indicator', - LANDING_PAGE: 'landing_page', LEGACY_REPORT: 'legacy_report', MAP_OVERLAY: 'map_overlay', MAP_OVERLAY_GROUP: 'map_overlay_group', diff --git a/packages/devops/README.md b/packages/devops/README.md index 4eba3e3842..3a0f7ff704 100644 --- a/packages/devops/README.md +++ b/packages/devops/README.md @@ -1,5 +1,3 @@ -# @tupaia/devops +# Tupaia Devops The place where Tupaia devs go to op - -Shell scripts for building and deploying Tupaia in on a server, and CI/CD. Also contains AWS Lambda scripts for managing cloud deployments of Tupaia. diff --git a/packages/devops/ci/tupaia-ci-cd.Dockerfile b/packages/devops/ci/tupaia-ci-cd.Dockerfile index 05d937df2e..43523f4981 100644 --- a/packages/devops/ci/tupaia-ci-cd.Dockerfile +++ b/packages/devops/ci/tupaia-ci-cd.Dockerfile @@ -105,7 +105,7 @@ RUN mkdir -p ./packages/web-frontend COPY packages/web-frontend/package.json ./packages/web-frontend # run yarn without building, so we can cache node_modules without code changes invalidating this layer -RUN SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --immutable +RUN SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --frozen-lockfile ## add content of all internal dependency packages ready for internal dependencies to be built COPY packages/access-policy/. ./packages/access-policy diff --git a/packages/devops/ci/validation.Dockerfile b/packages/devops/ci/validation.Dockerfile index cfedac60bd..6cba1ceac0 100644 --- a/packages/devops/ci/validation.Dockerfile +++ b/packages/devops/ci/validation.Dockerfile @@ -15,7 +15,7 @@ WORKDIR /tupaia COPY . ./ # run yarn without building, so we can cache node_modules without code changes invalidating this layer -RUN SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --immutable +RUN SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --frozen-lockfile # /scripts/node/validateTests.js use utils package RUN yarn workspace @tupaia/utils build \ No newline at end of file diff --git a/packages/devops/docker/downloadenv.Dockerfile b/packages/devops/docker/downloadenv.Dockerfile deleted file mode 100644 index 9a828483d2..0000000000 --- a/packages/devops/docker/downloadenv.Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -# Fetch environment from LastPass and write to /env//.env -# Should be run by the tupaia ECS task prior to starting the service containers. -FROM alpine:3.17.3 -RUN apk --no-cache add \ - bash \ - lastpass-cli -WORKDIR /lastpass/ -COPY ./scripts/bash/getPackagesWithEnvFiles.sh ./scripts/bash/getDeployablePackages.sh ./scripts/bash/ -COPY ./scripts/docker/downloadEnvironmentVariables.sh ./scripts/docker/ -VOLUME /env -ENTRYPOINT ["./scripts/docker/downloadEnvironmentVariables.sh"] -CMD ["dev","/env"] - diff --git a/packages/devops/scripts/deployment/buildDeployablePackages.sh b/packages/devops/scripts/deployment/buildDeployablePackages.sh index cdeb1ea7ea..6638052b38 100755 --- a/packages/devops/scripts/deployment/buildDeployablePackages.sh +++ b/packages/devops/scripts/deployment/buildDeployablePackages.sh @@ -12,7 +12,7 @@ PACKAGES=$(${TUPAIA_DIR}/scripts/bash/getDeployablePackages.sh) # Install external dependencies and build internal dependencies cd ${TUPAIA_DIR} -yarn install --immutable +yarn install --frozen-lockfile # "postinstall" hook may only fire if the dependency tree changes. This may not happen on feature branches based off dev, # because our AMI performs a yarn install already. In this case we can end up in a situation where "internal-depenednecies" diff --git a/packages/dhis-api/README.md b/packages/dhis-api/README.md index 41e3e31929..98a38be048 100644 --- a/packages/dhis-api/README.md +++ b/packages/dhis-api/README.md @@ -1,4 +1,4 @@ -# @tupaia/dhis-api +## @tupaia/dhis-api This package contains an abstraction layer over the DHIS2 api diff --git a/packages/e2e/README.md b/packages/e2e/README.md index f700bc2f8a..548b49d810 100644 --- a/packages/e2e/README.md +++ b/packages/e2e/README.md @@ -1,4 +1,4 @@ -# @tupaia/e2e +# E2e Tests [Cypress](https://www.cypress.io/) is used as the end-to-end test framework. This is the root folder of the test code and its configuration. diff --git a/packages/entity-server/README.md b/packages/entity-server/README.md index 16fe952ead..467ad1574e 100644 --- a/packages/entity-server/README.md +++ b/packages/entity-server/README.md @@ -1,16 +1,3 @@ # @tupaia/entity-server -Micro service for fetching entity and entity hierarchy information within Tupaia. - -## Entities - -Entities are a concept within Tupaia that represent a fixed geographical location. - -Examples include: - -- Countries -- Districts or Provinces -- Households -- Individuals - -Entities are arranged into hierarchies (ie. Districts belong within Countries), and the structure of these hierarchies can change between projects. +Application for fetching entity and entity hierarchy information within Tupaia. diff --git a/packages/indicators/README.md b/packages/indicators/README.md index be900c697c..39118f88c0 100644 --- a/packages/indicators/README.md +++ b/packages/indicators/README.md @@ -1,3 +1,3 @@ -# @tupaia/indicators +## @tupaia/indicators -Indicators are data elements that compute their values based on calculations upon underlying data elements. Used as a way to capture common data computations and create derived data concepts. +Computes derived data diff --git a/packages/kobo-api/README.md b/packages/kobo-api/README.md deleted file mode 100644 index 71f2d00332..0000000000 --- a/packages/kobo-api/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @tupaia/kobo-api - -API interface for querying [Kobo](https://www.kobotoolbox.org) diff --git a/packages/lesmis-server/README.md b/packages/lesmis-server/README.md index 5f15d6dac6..99fd7f99fa 100644 --- a/packages/lesmis-server/README.md +++ b/packages/lesmis-server/README.md @@ -1,3 +1,3 @@ # @tupaia/lesmis-server -Orchestration server for the LESMIS web app. +Back end server for the LESMIS web app. diff --git a/packages/lesmis/README.md b/packages/lesmis/README.md index 56e1a4abab..768d36e71c 100755 --- a/packages/lesmis/README.md +++ b/packages/lesmis/README.md @@ -1,6 +1,8 @@ # @tupaia/lesmis -[Lao PDR Education and Sports Management Information System](https://lesmis.edu.la/) +Lao PDR Education and Sports Management Information System. + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts @@ -16,7 +18,6 @@ In the project directory, you can run: #### Routing The lesmis frontend talks to two APIs: - - **lesmis-server** for lesmis specific routes needed to run the LESMIS custom frontend. - **admin-panel-server** for running the LESMIS Admin Panel, including everything from auth, CRUD and all special routes e.g. viz builder. - Some routes like the CRUD routes are forwarded on to central-server. @@ -24,15 +25,13 @@ The lesmis frontend talks to two APIs: ## Coding Conventions #### Views - A view is a component that connects to a route (ie. react-router Route). ## Environment Variables - - You need to set your environment variables in the .env file for the app to work. Go to the .env.examples file to see a list of the required varialbes. -## URL Pattern +## URL Pattern lesmis.org/:language/:organisationUnitCode:/:view query params diff --git a/packages/meditrak-app-server/README.md b/packages/meditrak-app-server/README.md index bd591ea1bc..0cce46a70d 100644 --- a/packages/meditrak-app-server/README.md +++ b/packages/meditrak-app-server/README.md @@ -1,3 +1,3 @@ # @tupaia/meditrak-app-server -Orchestration server for the Meditrak app. +Back end server for the Meditrak app. diff --git a/packages/meditrak-app-server/src/__tests__/__integration__/sync/PushChangesRoute.test.ts b/packages/meditrak-app-server/src/__tests__/__integration__/sync/PushChangesRoute.test.ts index c48b04383e..f0e242c729 100644 --- a/packages/meditrak-app-server/src/__tests__/__integration__/sync/PushChangesRoute.test.ts +++ b/packages/meditrak-app-server/src/__tests__/__integration__/sync/PushChangesRoute.test.ts @@ -214,7 +214,7 @@ describe('changes (POST)', () => { const uploadedImage = await fetchWithTimeout(IMAGE_URL); const imageBuffer = await uploadedImage.buffer(); const imageString = imageBuffer.toString('base64'); - expect(imageString).toEqual(TEST_IMAGE_DATA.replace('data:image/png;base64,', '')); + expect(imageString).toEqual(TEST_IMAGE_DATA); }); }); diff --git a/packages/meditrak-app-server/src/__tests__/__integration__/sync/testImageData.ts b/packages/meditrak-app-server/src/__tests__/__integration__/sync/testImageData.ts index e765509051..8c351c2f51 100644 --- a/packages/meditrak-app-server/src/__tests__/__integration__/sync/testImageData.ts +++ b/packages/meditrak-app-server/src/__tests__/__integration__/sync/testImageData.ts @@ -4,4 +4,4 @@ */ export const TEST_IMAGE_DATA = - 'data:image/png;base64,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'; + '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'; diff --git a/packages/meditrak-app/README.md b/packages/meditrak-app/README.md index d5821a40f8..664bd06127 100644 --- a/packages/meditrak-app/README.md +++ b/packages/meditrak-app/README.md @@ -1,4 +1,4 @@ -# @tupaia/meditrak +# meditrak Android and iOS app for surveying medical facilities diff --git a/packages/meditrak-app/appcenter-post-clone.sh b/packages/meditrak-app/appcenter-post-clone.sh index 5f082a5ac8..ebf3e3e647 100755 --- a/packages/meditrak-app/appcenter-post-clone.sh +++ b/packages/meditrak-app/appcenter-post-clone.sh @@ -21,7 +21,7 @@ nvm use cd ../.. # install root dependencies -SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --immutable +SKIP_BUILD_INTERNAL_DEPENDENCIES=true yarn install --frozen-lockfile # move to meditrak folder cd packages/meditrak-app diff --git a/packages/psss-server/README.md b/packages/psss-server/README.md index 494c47bd08..de2905fc4c 100644 --- a/packages/psss-server/README.md +++ b/packages/psss-server/README.md @@ -1,3 +1,3 @@ # @tupaia/psss-server -Orchestration server for the PSSS web app. +Back end server for the PSSS web app. diff --git a/packages/psss/README.md b/packages/psss/README.md index b2eefd90b0..36a64b2f2b 100644 --- a/packages/psss/README.md +++ b/packages/psss/README.md @@ -1,6 +1,8 @@ # @tupaia/psss -[Pacific Syndromic Surveillance System](https://psss.tupaia.org/) project. +Pacific Syndromic Surveillance System project. + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts diff --git a/packages/psss/src/views/Tabs/ProfileTabView.js b/packages/psss/src/views/Tabs/ProfileTabView.js index 55b4893606..1711211953 100644 --- a/packages/psss/src/views/Tabs/ProfileTabView.js +++ b/packages/psss/src/views/Tabs/ProfileTabView.js @@ -9,7 +9,7 @@ import styled from 'styled-components'; import { connect } from 'react-redux'; import { useForm } from 'react-hook-form'; import MuiDivider from '@material-ui/core/Divider'; -import { Button, ImageUploadField, SmallAlert, TextField } from '@tupaia/ui-components'; +import { Button, ProfileImageField, SmallAlert, TextField } from '@tupaia/ui-components'; import { Main } from '../../components'; import { updateProfile, getCurrentUser } from '../../store'; import { createBase64Image } from '../../utils/createBase64Image'; @@ -77,8 +77,9 @@ const ProfileTabViewComponent = React.memo(({ user, onUpdateProfile }) => { } }); - const handleFileChange = async fileObject => { + const handleFileChange = async event => { setStatus(STATUS.DISABLED); + const fileObject = event.target.files[0]; const base64 = await createBase64Image(fileObject); const fileName = fileObject.name.replace(/\.[^/.]+$/, ''); setProfileImage({ @@ -103,17 +104,12 @@ const ProfileTabViewComponent = React.memo(({ user, onUpdateProfile }) => { {status === STATUS.ERROR && {errorMessage}} {status === STATUS.SUCCESS && {successMessage}} - `imports` e.g. `"ReportConfig": "./models-extra"` + 1. Write the Type Definition and place it under models-extra e.g. ReportConfig for column report.config + 2. Override the type in `./config/models/config.json` under `typeOverrides` e.g. `"public.report.config": "ReportConfig"` + 3. Import the type at the top of `models.ts` by specifying the import in config under `custom` > `imports` e.g. `"ReportConfig": "./models-extra"` All config options here: https://rmp135.github.io/sql-ts ## Schemas -Json schemas are automatically generated for all exported types. Run `yarn generate:schemas` to update this after a type is changed. +Json schemas are automatically generated for all exported types. Run `yarn generate:schemas` to update this after a type is changed. \ No newline at end of file diff --git a/packages/ui-chart-components/.storybook/AppProviders.js b/packages/ui-chart-components/.storybook/AppProviders.js index bef63eb75c..276eb96bb8 100644 --- a/packages/ui-chart-components/.storybook/AppProviders.js +++ b/packages/ui-chart-components/.storybook/AppProviders.js @@ -8,7 +8,7 @@ import { MuiThemeProvider, StylesProvider } from '@material-ui/core/styles'; import { ThemeProvider } from 'styled-components'; import CssBaseline from '@material-ui/core/CssBaseline'; import PropTypes from 'prop-types'; -import { lightTheme, darkTheme } from '../stories/theme'; +import { lightTheme, darkTheme } from '../stories/story-utils/theme'; export const AppProviders = ({ params, children }) => { const theme = params?.theme === 'dark' ? darkTheme : lightTheme; diff --git a/packages/ui-chart-components/.storybook/main.js b/packages/ui-chart-components/.storybook/main.js index e723272433..e731ebcce9 100644 --- a/packages/ui-chart-components/.storybook/main.js +++ b/packages/ui-chart-components/.storybook/main.js @@ -1,5 +1,5 @@ // import the build chain webpack config and merge it with storybook config module.exports = { - stories: ['../stories/**/*.stories.js', '../stories/**/*.stories.ts'], + stories: ['../stories/**/*.stories.js'], addons: ['@storybook/addon-essentials'], }; diff --git a/packages/ui-chart-components/package.json b/packages/ui-chart-components/package.json index 48dc3ba136..d2449f1d9b 100644 --- a/packages/ui-chart-components/package.json +++ b/packages/ui-chart-components/package.json @@ -11,9 +11,8 @@ "author": "Beyond Essential Systems (https://beyondessential.com.au)", "source": "src/index.js", "main": "dist/index.js", - "types": "dist/index.d.ts", "scripts": { - "build": "rm -rf dist && yarn package:build:ts", + "build": "rm -rf dist && yarn package:build:js", "build-dev": "npm run build", "lint": "yarn package:lint:js", "lint:fix": "yarn lint --fix", @@ -37,9 +36,6 @@ }, "devDependencies": { "@material-ui/styles": "^4.9.10", - "@storybook/react": "^6.3.9", - "@tupaia/types": "1.0.0", - "@types/lodash.get": "^4.4.7", - "@types/recharts": "^1.8.24" + "@storybook/react": "^6.3.9" } } diff --git a/packages/ui-chart-components/src/components/Axes/VerticalTick.tsx b/packages/ui-chart-components/src/components/Axes/VerticalTick.js similarity index 100% rename from packages/ui-chart-components/src/components/Axes/VerticalTick.tsx rename to packages/ui-chart-components/src/components/Axes/VerticalTick.js diff --git a/packages/ui-chart-components/src/components/Axes/XAxis.tsx b/packages/ui-chart-components/src/components/Axes/XAxis.js similarity index 100% rename from packages/ui-chart-components/src/components/Axes/XAxis.tsx rename to packages/ui-chart-components/src/components/Axes/XAxis.js diff --git a/packages/ui-chart-components/src/components/Axes/YAxes.tsx b/packages/ui-chart-components/src/components/Axes/YAxes.js similarity index 100% rename from packages/ui-chart-components/src/components/Axes/YAxes.tsx rename to packages/ui-chart-components/src/components/Axes/YAxes.js diff --git a/packages/ui-chart-components/src/components/Axes/index.ts b/packages/ui-chart-components/src/components/Axes/index.js similarity index 100% rename from packages/ui-chart-components/src/components/Axes/index.ts rename to packages/ui-chart-components/src/components/Axes/index.js diff --git a/packages/ui-chart-components/src/components/CartesianChart.tsx b/packages/ui-chart-components/src/components/CartesianChart.js similarity index 100% rename from packages/ui-chart-components/src/components/CartesianChart.tsx rename to packages/ui-chart-components/src/components/CartesianChart.js diff --git a/packages/ui-chart-components/src/components/Chart.tsx b/packages/ui-chart-components/src/components/Chart.js similarity index 100% rename from packages/ui-chart-components/src/components/Chart.tsx rename to packages/ui-chart-components/src/components/Chart.js diff --git a/packages/ui-chart-components/src/components/ChartTable.tsx b/packages/ui-chart-components/src/components/ChartTable.js similarity index 100% rename from packages/ui-chart-components/src/components/ChartTable.tsx rename to packages/ui-chart-components/src/components/ChartTable.js diff --git a/packages/ui-chart-components/src/components/Charts/AreaChart.tsx b/packages/ui-chart-components/src/components/Charts/AreaChart.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/AreaChart.tsx rename to packages/ui-chart-components/src/components/Charts/AreaChart.js diff --git a/packages/ui-chart-components/src/components/Charts/BarChart.tsx b/packages/ui-chart-components/src/components/Charts/BarChart.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/BarChart.tsx rename to packages/ui-chart-components/src/components/Charts/BarChart.js diff --git a/packages/ui-chart-components/src/components/Charts/GaugeChart.tsx b/packages/ui-chart-components/src/components/Charts/GaugeChart.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/GaugeChart.tsx rename to packages/ui-chart-components/src/components/Charts/GaugeChart.js diff --git a/packages/ui-chart-components/src/components/Charts/LineChart.tsx b/packages/ui-chart-components/src/components/Charts/LineChart.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/LineChart.tsx rename to packages/ui-chart-components/src/components/Charts/LineChart.js diff --git a/packages/ui-chart-components/src/components/Charts/PieChart.tsx b/packages/ui-chart-components/src/components/Charts/PieChart.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/PieChart.tsx rename to packages/ui-chart-components/src/components/Charts/PieChart.js diff --git a/packages/ui-chart-components/src/components/Charts/index.ts b/packages/ui-chart-components/src/components/Charts/index.js similarity index 100% rename from packages/ui-chart-components/src/components/Charts/index.ts rename to packages/ui-chart-components/src/components/Charts/index.js diff --git a/packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx b/packages/ui-chart-components/src/components/Reference/ChartTooltip.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/ChartTooltip.tsx rename to packages/ui-chart-components/src/components/Reference/ChartTooltip.js diff --git a/packages/ui-chart-components/src/components/Reference/Legend.tsx b/packages/ui-chart-components/src/components/Reference/Legend.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/Legend.tsx rename to packages/ui-chart-components/src/components/Reference/Legend.js diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx b/packages/ui-chart-components/src/components/Reference/ReferenceLabel.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/ReferenceLabel.tsx rename to packages/ui-chart-components/src/components/Reference/ReferenceLabel.js diff --git a/packages/ui-chart-components/src/components/Reference/ReferenceLines.tsx b/packages/ui-chart-components/src/components/Reference/ReferenceLines.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/ReferenceLines.tsx rename to packages/ui-chart-components/src/components/Reference/ReferenceLines.js diff --git a/packages/ui-chart-components/src/components/Reference/TooltipContainer.tsx b/packages/ui-chart-components/src/components/Reference/TooltipContainer.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/TooltipContainer.tsx rename to packages/ui-chart-components/src/components/Reference/TooltipContainer.js diff --git a/packages/ui-chart-components/src/components/Reference/index.ts b/packages/ui-chart-components/src/components/Reference/index.js similarity index 100% rename from packages/ui-chart-components/src/components/Reference/index.ts rename to packages/ui-chart-components/src/components/Reference/index.js diff --git a/packages/ui-chart-components/src/components/index.ts b/packages/ui-chart-components/src/components/index.js similarity index 100% rename from packages/ui-chart-components/src/components/index.ts rename to packages/ui-chart-components/src/components/index.js diff --git a/packages/ui-chart-components/src/constants/colors.ts b/packages/ui-chart-components/src/constants/colors.js similarity index 100% rename from packages/ui-chart-components/src/constants/colors.ts rename to packages/ui-chart-components/src/constants/colors.js diff --git a/packages/ui-chart-components/src/constants/constants.ts b/packages/ui-chart-components/src/constants/constants.js similarity index 100% rename from packages/ui-chart-components/src/constants/constants.ts rename to packages/ui-chart-components/src/constants/constants.js diff --git a/packages/ui-chart-components/src/constants/index.ts b/packages/ui-chart-components/src/constants/index.js similarity index 100% rename from packages/ui-chart-components/src/constants/index.ts rename to packages/ui-chart-components/src/constants/index.js diff --git a/packages/ui-chart-components/src/constants/propTypes.ts b/packages/ui-chart-components/src/constants/propTypes.js similarity index 100% rename from packages/ui-chart-components/src/constants/propTypes.ts rename to packages/ui-chart-components/src/constants/propTypes.js diff --git a/packages/ui-chart-components/src/index.ts b/packages/ui-chart-components/src/index.js similarity index 100% rename from packages/ui-chart-components/src/index.ts rename to packages/ui-chart-components/src/index.js diff --git a/packages/ui-chart-components/src/utils/getChartTableData.ts b/packages/ui-chart-components/src/utils/getChartTableData.js similarity index 100% rename from packages/ui-chart-components/src/utils/getChartTableData.ts rename to packages/ui-chart-components/src/utils/getChartTableData.js diff --git a/packages/ui-chart-components/src/utils/index.ts b/packages/ui-chart-components/src/utils/index.js similarity index 100% rename from packages/ui-chart-components/src/utils/index.ts rename to packages/ui-chart-components/src/utils/index.js diff --git a/packages/ui-chart-components/src/utils/parseChartConfig.ts b/packages/ui-chart-components/src/utils/parseChartConfig.js similarity index 100% rename from packages/ui-chart-components/src/utils/parseChartConfig.ts rename to packages/ui-chart-components/src/utils/parseChartConfig.js diff --git a/packages/ui-chart-components/src/utils/useChartDataExport.ts b/packages/ui-chart-components/src/utils/useChartDataExport.js similarity index 100% rename from packages/ui-chart-components/src/utils/useChartDataExport.ts rename to packages/ui-chart-components/src/utils/useChartDataExport.js diff --git a/packages/ui-chart-components/src/utils/utils.ts b/packages/ui-chart-components/src/utils/utils.js similarity index 100% rename from packages/ui-chart-components/src/utils/utils.ts rename to packages/ui-chart-components/src/utils/utils.js diff --git a/packages/ui-chart-components/tsconfig-build.json b/packages/ui-chart-components/tsconfig-build.json deleted file mode 100644 index 2b8b93fde2..0000000000 --- a/packages/ui-chart-components/tsconfig-build.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "declaration": true, - "noEmit": false, - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "src/__tests__", - "src/stories/**/*" - ] -} \ No newline at end of file diff --git a/packages/ui-chart-components/tsconfig.json b/packages/ui-chart-components/tsconfig.json deleted file mode 100644 index d34e2f0cd8..0000000000 --- a/packages/ui-chart-components/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "extends": "../../tsconfig-ts.json", - "compileOnSave": true, - "compilerOptions": { - "jsx": "react", - "allowJs": true, - "outDir": "dist", - "lib": [ - "es6", - "es5", - "es2019", - "dom", - "dom.iterable" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true - }, - "include": [ - "src/**/*", - "jest.config.ts", - "helpers/**/*" - ] -} diff --git a/packages/ui-components/src/components/CheckboxList.tsx b/packages/ui-components/src/components/CheckboxList.tsx index e16fdbbd6a..05917adfbe 100644 --- a/packages/ui-components/src/components/CheckboxList.tsx +++ b/packages/ui-components/src/components/CheckboxList.tsx @@ -5,87 +5,51 @@ import React from 'react'; import { - FormControl as BaseFormControl, - FormControlLabel, Card, CardHeader, - List, - ListItem as BaseListItem, + Grid, + List as MuiList, + ListItem, + ListItemIcon, + ListItemText, Checkbox, + Divider, } from '@material-ui/core'; import styled from 'styled-components'; import { FlexStart } from './Layout/Flexbox'; -import { Tooltip } from './Tooltip'; + +const StyledRootGrid = styled(Grid)` + justify-content: center; +`; const StyledCard = styled(Card)` - width: 100%; + width: 70vw; height: 50vh; + max-width: 60rem; max-height: 30rem; overflow: auto; - background-color: transparent; - border: 1px solid #ebebeb; - .MuiCheckbox-root { - margin: 0 1em; - padding: 0; - } -`; - -const FormControl = styled(BaseFormControl)` - width: 100%; - flex-direction: row; - height: 100%; `; const StyledCardHeader = styled(CardHeader)` text-align: left; - border-bottom: 0.5px solid #ebebeb; - padding: 1.2em 1.7em; - .MuiFormControl-root { - align-items: center; - } `; -const StyledSubHeader = styled.p` - font-size: 0.6rem; - color: ${props => props.theme.palette.text.secondary}; - margin: 0; +const StyledHeader = styled.span` + font-size: 14px; + font-weight: bold; + color: ${props => props.theme.palette.text.primary}; + padding-right: 20px; `; -const ListItem = styled.li` - padding: 0; - .MuiFormControlLabel-root { - width: 100%; - padding: 1.2em 1em; - margin: 0; - } - &:not(&:last-child) { - .MuiFormControlLabel-label { - width: 100%; - position: relative; - &:before { - content: ''; - position: absolute; - /* To reach the base of the list item we need to make it -70% from the base */ - bottom: -1.2em; - left: -0.5em; - height: 1px; - width: 100%; - /* It is not possible to make a line less than 1px, so reducing the opacity of the border so as to make it appear thinner */ - opacity: 0.4; - background-color: #ebebeb; - } - } - } +const StyledSubHeader = styled.span` + font-size: 10px; + color: ${props => props.theme.palette.text.secondary}; + margin-top: 2px; `; -const ListTitle = styled.span` - font-weight: bold; -`; interface ListItemProps { name: string; code: string; - disabled?: boolean; - tooltip?: string; } function not(a: ListItemProps[], b: ListItemProps[]): ListItemProps[] { @@ -100,6 +64,76 @@ function union(a: ListItemProps[], b: ListItemProps[]): ListItemProps[] { return [...a, ...not(b, a)]; } +interface TitleProps { + title: string; + numberOfCheckedItems: number; + totalItems: number; +} + +const Title = ({ title, numberOfCheckedItems, totalItems }: TitleProps) => ( + + {title} + {`${numberOfCheckedItems}/${totalItems} selected`} + +); + +interface ListProps { + items: ListItemProps[]; + title: string; + selectedItems: ListItemProps[]; + handleCheckAll: (items: ListItemProps[]) => () => void; + handleCheck: (item: ListItemProps) => () => void; + numberOfChecked: number; +} + +const List = ({ + items, + handleCheckAll, + title, + numberOfChecked, + handleCheck, + selectedItems, +}: ListProps) => ( + + + } + title={ + + } + /> + <Divider /> + <MuiList dense component="div" role="list"> + {items.map(item => { + const { name, code } = item; + const labelId = `transfer-list-all-item-${name}-label`; + + return ( + <ListItem key={code} role="listitem" button onClick={handleCheck(item)}> + <ListItemIcon> + <Checkbox + checked={selectedItems.findIndex(selectedItem => selectedItem.code === code) !== -1} + tabIndex={-1} + disableRipple + inputProps={{ 'aria-labelledby': labelId }} + /> + </ListItemIcon> + <ListItemText id={labelId} primary={name} /> + </ListItem> + ); + })} + <ListItem /> + </MuiList> + </StyledCard> +); + interface CheckboxListProps { list: ListItemProps[]; title?: string; @@ -115,15 +149,14 @@ export const CheckboxList = ({ }: CheckboxListProps) => { const numberOfChecked = (items: ListItemProps[]) => intersection(selectedItems, items).length; - const enabledItems = list.filter(item => !item.disabled); - const handleCheckAll = (items: ListItemProps[]) => () => { - if (numberOfChecked(items) === enabledItems.length) { + if (numberOfChecked(items) === list.length) { setSelectedItems(not(selectedItems, items)); } else { setSelectedItems(union(selectedItems, items)); } }; + const handleCheck = (item: ListItemProps) => () => { const currentIndex = selectedItems.findIndex(selectedItem => selectedItem.code === item.code); const newChecked = [...selectedItems]; @@ -136,74 +169,18 @@ export const CheckboxList = ({ setSelectedItems(newChecked); }; - // If the list item has a tooltip, wrap it in a tooltip, otherwise just return the list item - // @ts-ignore - const CheckboxWrapper = ({ tooltip, children }) => - tooltip ? ( - <Tooltip title={tooltip} placement="bottom"> - {children} - </Tooltip> - ) : ( - <>{children}</> - ); - - const Title = () => ( - <FlexStart> - <FormControl> - <FormControlLabel - label={<ListTitle>{title}</ListTitle>} - control={ - <Checkbox - onClick={handleCheckAll(enabledItems)} - checked={ - numberOfChecked(enabledItems) === enabledItems.length && enabledItems.length !== 0 - } - indeterminate={ - numberOfChecked(enabledItems) !== enabledItems.length && - numberOfChecked(enabledItems) !== 0 - } - disabled={enabledItems.length === 0} - inputProps={{ 'aria-describedby': `subtitle-select-all-${title}` }} - /> - } - /> - <StyledSubHeader id={`subtitle-select-all-${title}`}>{`${numberOfChecked(list)}/${ - list.length - } selected`}</StyledSubHeader> - </FormControl> - </FlexStart> - ); return ( - <StyledCard> - <StyledCardHeader title={<Title />} /> - <List> - {list.map(item => { - const { name, code, disabled, tooltip } = item; - return ( - <ListItem key={code}> - <FormControl disabled={disabled}> - <FormControlLabel - label={ - <CheckboxWrapper tooltip={tooltip}> - <span>{name}</span> - </CheckboxWrapper> - } - control={ - <Checkbox - checked={ - selectedItems.findIndex(selectedItem => selectedItem.code === code) !== -1 - } - onClick={handleCheck(item)} - tabIndex={-1} - disableRipple - /> - } - /> - </FormControl> - </ListItem> - ); - })} - </List> - </StyledCard> + <StyledRootGrid container spacing={2} alignItems="center"> + <Grid item> + <List + items={list} + selectedItems={selectedItems} + handleCheck={handleCheck} + handleCheckAll={handleCheckAll} + title={title} + numberOfChecked={numberOfChecked(list)} + /> + </Grid> + </StyledRootGrid> ); }; diff --git a/packages/ui-components/src/components/ConfirmDeleteModal.tsx b/packages/ui-components/src/components/ConfirmDeleteModal.tsx index 4a21d7fc89..606401f594 100644 --- a/packages/ui-components/src/components/ConfirmDeleteModal.tsx +++ b/packages/ui-components/src/components/ConfirmDeleteModal.tsx @@ -24,7 +24,7 @@ const Heading = styled(Typography)` margin-bottom: 0.8rem; `; -export interface ConfirmDeleteModalProps { +interface ConfirmDeleteModalProps { isOpen?: boolean; title?: string; message?: string; diff --git a/packages/ui-components/src/components/Dialog.tsx b/packages/ui-components/src/components/Dialog.tsx index 20dd3fcb2a..42f924fcc8 100644 --- a/packages/ui-components/src/components/Dialog.tsx +++ b/packages/ui-components/src/components/Dialog.tsx @@ -40,12 +40,9 @@ const Header = styled(FlexStart)` position: relative; background-color: ${({ theme }) => (theme.palette.type === 'light' ? 'white' : DARK_BACKGROUND)}; padding: 1.3rem 1.875rem 1.25rem; - border-bottom: ${({ border, theme }) => { - if (!border) return 'none'; - return `1px solid ${ - theme.palette.type === 'light' ? theme.palette.grey['400'] : DARK_THEME_BORDER - }`; - }}; + border-bottom: 1px solid + ${({ theme }) => + theme.palette.type === 'light' ? theme.palette.grey['400'] : DARK_THEME_BORDER}; `; const DialogTitle = styled(Typography)` @@ -59,7 +56,6 @@ const CloseButton = styled(IconButton)` top: 0; right: 0; color: ${props => props.theme.palette.text.primary}; - padding: 0.5rem; `; interface DialogHeaderProps { diff --git a/packages/ui-components/src/components/Inputs/Autocomplete.tsx b/packages/ui-components/src/components/Inputs/Autocomplete.tsx index acd10ac907..65c095ee35 100644 --- a/packages/ui-components/src/components/Inputs/Autocomplete.tsx +++ b/packages/ui-components/src/components/Inputs/Autocomplete.tsx @@ -62,7 +62,6 @@ interface AutocompleteProps extends BaseAutocompleteProps { inputRef?: any; name?: string; defaultValue?: any; - tooltip?: string; } export const Autocomplete = ({ @@ -86,7 +85,6 @@ export const Autocomplete = ({ inputRef, name, defaultValue, - tooltip, }: AutocompleteProps) => ( <StyledAutocomplete id={id} @@ -108,7 +106,6 @@ export const Autocomplete = ({ <TextField {...(params as any)} label={label} - tooltip={tooltip} name={name} placeholder={placeholder} error={error} diff --git a/packages/ui-components/src/components/Inputs/Checkbox.tsx b/packages/ui-components/src/components/Inputs/Checkbox.tsx index f0ed79b0d5..49956bc8ec 100644 --- a/packages/ui-components/src/components/Inputs/Checkbox.tsx +++ b/packages/ui-components/src/components/Inputs/Checkbox.tsx @@ -6,8 +6,7 @@ import React from 'react'; import MuiCheckbox, { CheckboxProps as MuiCheckboxProps } from '@material-ui/core/Checkbox'; import MuiFormHelperText from '@material-ui/core/FormHelperText'; import MuiFormControlLabel from '@material-ui/core/FormControlLabel'; -import styled from 'styled-components'; -import { InputLabel } from './InputLabel'; +import styled from 'styled-components'; const StyledCheckbox = styled(MuiCheckbox)` &.MuiButtonBase-root:not(.MuiIconButton-colorPrimary) { @@ -33,7 +32,6 @@ interface CheckboxProps extends MuiCheckboxProps { error?: boolean; className?: string; helperText?: string; - tooltip?: string; } export const Checkbox = ({ @@ -41,16 +39,12 @@ export const Checkbox = ({ helperText, error = false, className, - tooltip, ...props }: CheckboxProps) => { if (label) { return ( <Wrapper className={className}> - <MuiFormControlLabel - control={<StyledCheckbox {...props} />} - label={<InputLabel label={label} tooltip={tooltip} as="span" />} - /> + <MuiFormControlLabel control={<StyledCheckbox {...props} />} label={label} /> {helperText && <FormHelperText error={error}>{helperText}</FormHelperText>} </Wrapper> ); diff --git a/packages/ui-components/src/components/Inputs/FileUploadField.tsx b/packages/ui-components/src/components/Inputs/FileUploadField.tsx index 2710402492..7078660bdd 100644 --- a/packages/ui-components/src/components/Inputs/FileUploadField.tsx +++ b/packages/ui-components/src/components/Inputs/FileUploadField.tsx @@ -8,7 +8,6 @@ import styled from 'styled-components'; import { GreyButton } from '../Button'; import { FlexStart } from '../Layout'; import { SaveAlt } from '../Icons'; -import { InputLabel } from './InputLabel'; const HiddenFileInput = styled.input` width: 0.1px; @@ -24,8 +23,6 @@ const FileName = styled.span` color: ${props => props.theme.palette.text.secondary}; margin-left: 0.8rem; `; -const FileUploadWrapper = styled.div``; -const FileUploadContainer = styled(FlexStart)``; interface FileUploadFieldProps { onChange: (event: React.ChangeEvent<HTMLInputElement>, fileName?: string) => void; @@ -33,8 +30,6 @@ interface FileUploadFieldProps { fileName: string; multiple: boolean; textOnButton: string; - label?: string; - tooltip?: string; } export const FileUploadField = ({ @@ -43,8 +38,6 @@ export const FileUploadField = ({ fileName = 'No File chosen', multiple = false, textOnButton, - label, - tooltip, }: FileUploadFieldProps) => { const inputEl = useRef<HTMLInputElement | null>(null); const text = textOnButton || `Choose file${multiple ? 's' : ''}`; @@ -63,23 +56,20 @@ export const FileUploadField = ({ }; return ( - <FileUploadWrapper as="label" htmlFor={name}> - <InputLabel label={label} tooltip={tooltip} as="span" /> - <FileUploadContainer> - <HiddenFileInput - ref={inputEl} - id={name} - name={name} - type="file" - onChange={handleChange} - value="" - multiple={multiple} - /> - <GreyButton component="span" startIcon={<SaveAlt />}> - {text} - </GreyButton> - {fileName && <FileName>{fileName}</FileName>} - </FileUploadContainer> - </FileUploadWrapper> + <FlexStart as="label" htmlFor={name}> + <HiddenFileInput + ref={inputEl} + id={name} + name={name} + type="file" + onChange={handleChange} + value="" + multiple={multiple} + /> + <GreyButton component="span" startIcon={<SaveAlt />}> + {text} + </GreyButton> + {fileName && <FileName>{fileName}</FileName>} + </FlexStart> ); }; diff --git a/packages/ui-components/src/components/Inputs/GroupedSelect.tsx b/packages/ui-components/src/components/Inputs/GroupedSelect.tsx index c3b898c8c7..36d2a6a25f 100644 --- a/packages/ui-components/src/components/Inputs/GroupedSelect.tsx +++ b/packages/ui-components/src/components/Inputs/GroupedSelect.tsx @@ -3,10 +3,11 @@ * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd */ -import React, { useState, useCallback, ChangeEvent } from 'react'; +import React, { useState, useCallback } from 'react'; import MuiMenuItem from '@material-ui/core/MenuItem'; import { ListSubheader, SvgIconProps, TextFieldProps } from '@material-ui/core'; import { KeyboardArrowDown as MuiKeyboardArrowDown } from '@material-ui/icons'; +import PropTypes from 'prop-types'; import styled from 'styled-components'; import { TextField } from './TextField'; @@ -107,3 +108,14 @@ export const GroupedSelect = ({ </GroupedSelectField> ); }; + +GroupedSelect.propTypes = { + id: PropTypes.string.isRequired, + label: PropTypes.string, + groupedOptions: PropTypes.object.isRequired, // map of group label => standard options array e.g. { Cats: [{ label: 'Ginger', value: 1 }] } + placeholder: PropTypes.string, + showPlaceholder: PropTypes.bool, + defaultValue: PropTypes.any, + value: PropTypes.any, + onChange: PropTypes.func, +}; diff --git a/packages/ui-components/src/components/Inputs/HexcodeField.tsx b/packages/ui-components/src/components/Inputs/HexcodeField.tsx deleted file mode 100644 index e74c4a0966..0000000000 --- a/packages/ui-components/src/components/Inputs/HexcodeField.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { FormHelperText } from '@material-ui/core'; -import styled from 'styled-components'; -import { TextField } from './TextField'; - -const HexcodeFieldWrapper = styled.div` - margin-bottom: 1em; -`; - -const HexcodeFieldContainer = styled.div` - display: flex; - align-items: flex-end; - margin-top: 1em; -`; - -const HexcodePreview = styled.div<any>` - background-color: ${({ backgroundColor }) => backgroundColor}; - border-radius: 50%; - width: 3em; - height: 3em; - margin-left: 1em; - margin-bottom: 0.2em; - border: ${({ theme }) => `1px solid ${theme?.palette?.common?.black}`}; -`; - -const HexInput = styled(TextField)` - margin-bottom: 0; - width: calc(100% - 4em); -`; - -const HEXCODE_PATTERN = /^#([0-9A-F]{3}){1,2}$/i; - -interface HexcodeFieldProps { - value?: string; - onChange?: (value: string) => void; - label?: string; - helperText?: string; - id?: string; - disabled?: boolean; - tooltip?: string; - placeholder?: string; -} - -export const HexcodeField = ({ - value, - onChange = () => {}, - label, - helperText, - id, - disabled, - tooltip, - placeholder, -}: HexcodeFieldProps) => { - const handleChangeValue = (event: React.ChangeEvent<HTMLInputElement>) => { - onChange(event.target.value); - }; - - const isValidHexCode = value ? value.match(HEXCODE_PATTERN) : false; - return ( - <HexcodeFieldWrapper> - <HexcodeFieldContainer> - <HexInput - label={label} - tooltip={tooltip} - value={value} - id={id} - onChange={handleChangeValue} - disabled={disabled} - inputProps={{ - 'aria-describedby': helperText ? `${id}-helper-text` : '', - pattern: HEXCODE_PATTERN, - }} - placeholder={placeholder} - /> - {isValidHexCode && ( - <HexcodePreview backgroundColor={value} aria-label={`Colour preview for ${label}`} /> - )} - </HexcodeFieldContainer> - {helperText && <FormHelperText id={`${id}-helper-text`}>{helperText}</FormHelperText>} - </HexcodeFieldWrapper> - ); -}; diff --git a/packages/ui-components/src/components/Inputs/ImageUploadField.tsx b/packages/ui-components/src/components/Inputs/ImageUploadField.tsx deleted file mode 100644 index c7e1051e96..0000000000 --- a/packages/ui-components/src/components/Inputs/ImageUploadField.tsx +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import React, { useRef, useState } from 'react'; -import styled from 'styled-components'; -import { FormHelperText, Box, Fab, AvatarProps } from '@material-ui/core'; -import DeleteIcon from '@material-ui/icons/Delete'; -import { ConfirmDeleteModal, ConfirmDeleteModalProps } from '../ConfirmDeleteModal'; -import { FlexStart } from '../Layout'; -import { GreyOutlinedButton } from '../Button'; -import { Avatar } from '../Avatar'; -import { InputLabel } from './InputLabel'; - -const HiddenFileInput = styled.input` - width: 0.1px; - height: 0.1px; - opacity: 0; - overflow: hidden; - position: absolute; - z-index: -1; -`; - -const Label = styled(FlexStart)` - margin-bottom: 1.6rem; - align-items: flex-start; -`; - -const StyledAvatar = styled(Avatar)` - position: relative; - color: white; - font-weight: 600; - width: 5.3rem; - height: 5.3rem; - font-size: 2.8rem; - margin-right: 1rem; -`; - -const DeleteButton = styled(Fab)` - position: absolute; - bottom: 0; - right: 0.8rem; - width: 1.875rem; - min-width: 1.875rem; - height: 1.875rem; - min-height: 1.875rem; - box-shadow: none; - background: white; - border: 1px solid ${props => props.theme.palette.grey['400']}; - color: ${props => props.theme.palette.text.secondary}; - - .MuiSvgIcon-root { - font-size: 1.125rem; - } -`; - -const TextLabel = styled.span` - font-size: 0.68rem; - line-height: 0.8rem; - text-transform: uppercase; - color: ${props => props.theme.palette.text.tertiary}; - margin-bottom: 0.6rem; -`; - -const ErrorMessage = styled(FormHelperText)` - color: ${props => props.theme.palette.error.main}; - ${GreyOutlinedButton} + & { - margin-top: 0.8rem; - } -`; - -const LabelWrapper = styled(Box)` - display: flex; - flex-direction: column; -`; - -interface ImageUploadFieldProps { - name: string; - imageSrc?: string; - avatarInitial?: string; - onChange?: (file: File | null) => void; - onDelete?: () => void; - label: string; - buttonLabel?: string; - deleteModal?: Omit<ConfirmDeleteModalProps, 'isOpen' | 'onConfirm' | 'onCancel'>; - avatarVariant?: AvatarProps['variant']; - maxHeight?: number; - maxWidth?: number; - minHeight?: number; - minWidth?: number; - secondaryLabel?: string; - tooltip?: string; -} - -export const ImageUploadField = React.memo( - ({ - name, - imageSrc, - onDelete = () => {}, - onChange = () => {}, - avatarInitial, - label, - buttonLabel = 'Upload photo', - deleteModal = { - title: 'Remove Photo', - message: 'Are you sure you want to remove your photo?', - }, - avatarVariant = 'circle', - maxHeight, - maxWidth, - minHeight, - minWidth, - secondaryLabel, - tooltip, - }: ImageUploadFieldProps) => { - const [confirmModalIsOpen, setConfirmModalIsOpen] = useState(false); - const [errorMessage, setErrorMessage] = useState<string | null>(null); - const inputEl = useRef<HTMLInputElement | null>(null); - - const handleDelete = () => { - setConfirmModalIsOpen(false); - if (inputEl && inputEl.current) inputEl.current.value = ''; - onDelete(); - setErrorMessage(null); - }; - - const getImageSize = async (file: File) => { - const img = new Image(); - img.src = window.URL.createObjectURL(file); - await img.decode(); - const height = img.naturalHeight; - const width = img.naturalWidth; - window.URL.revokeObjectURL(img.src); - return { height, width }; - }; - - const validateImageSize = async (file: File | null) => { - // If no max height or width is provided, or if file is not set, we don't need to validate so can return null. - if (!file || (!minWidth && !minHeight && !maxWidth && !maxHeight)) return null; - // Check image is within the specified height and width, and return the appropriate message if so, else null. - const { height, width } = await getImageSize(file); - - if ((maxHeight && height > maxHeight) || (maxWidth && width > maxWidth)) { - return 'Image size is too large'; - } - if ((minHeight && height < minHeight) || (minWidth && width < minWidth)) { - return 'Image size is too small'; - } - return null; - }; - const handleFileUpload = async (event: React.ChangeEvent<HTMLInputElement>) => { - const image = event?.target.files && event.target.files[0] ? event.target.files[0] : null; - const newErrorMessage = await validateImageSize(image); - setErrorMessage(newErrorMessage); - // Only call onChange if image is validated, so the user can't upload anything invalid. - if (!newErrorMessage) onChange(image); - }; - - return ( - <Label as="label" htmlFor={name}> - <HiddenFileInput - ref={inputEl} - id={name} - name={name} - type="file" - onChange={handleFileUpload} - aria-describedby={secondaryLabel ? `${name}-description` : ''} - aria-invalid={!errorMessage} - /> - <Box position="relative"> - <StyledAvatar - initial={avatarInitial} - src={imageSrc} - variant={avatarVariant} - alt={`Image for field ${label}`} - > - {avatarInitial} - </StyledAvatar> - {imageSrc && ( - <DeleteButton onClick={() => setConfirmModalIsOpen(true)}> - <DeleteIcon /> - </DeleteButton> - )} - </Box> - <LabelWrapper> - <InputLabel - className="file_upload_label" - label={label} - tooltip={tooltip} - as={TextLabel} - /> - {secondaryLabel && ( - <FormHelperText id={`${name}-description`}>{secondaryLabel}</FormHelperText> - )} - <GreyOutlinedButton component="span">{buttonLabel}</GreyOutlinedButton> - {errorMessage && <ErrorMessage id={`${name}-error-message`}>{errorMessage}</ErrorMessage>} - </LabelWrapper> - - {deleteModal && ( - <ConfirmDeleteModal - isOpen={confirmModalIsOpen} - onConfirm={handleDelete} - onCancel={() => setConfirmModalIsOpen(false)} - {...deleteModal} - /> - )} - </Label> - ); - }, -); diff --git a/packages/ui-components/src/components/Inputs/InputGroup.tsx b/packages/ui-components/src/components/Inputs/InputGroup.tsx deleted file mode 100644 index d14a0e5b62..0000000000 --- a/packages/ui-components/src/components/Inputs/InputGroup.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; - -const InputGroupWrapper = styled.section``; -const InputGroupHeading = styled.h2` - padding-inline-start: 0; - margin: 0; - font-weight: ${props => props.theme.typography.fontWeightMedium}; - font-size: 1.2rem; - line-height: 1.4; -`; -const FieldsWrapper = styled.div` - margin-left: 2rem; - margin-bottom: 1.2rem; - ${InputGroupWrapper}:not(:last-child) & { - border-bottom: 1px solid ${props => props.theme.palette.grey['400']}; - } -`; - -const InputGroupHelperText = styled.p` - font-size: 0.9375rem; - margin: 0; - line-height: 1.2; -`; - -const InputGroupHeaderWrapper = styled.div` - margin-bottom: 1rem; -`; - -interface InputGroupProps { - title?: string; - description?: string; - fields: React.ReactNode; -} - -export const InputGroup = ({ title, description, fields }: InputGroupProps) => { - return ( - <InputGroupWrapper> - <InputGroupHeaderWrapper> - {title && <InputGroupHeading>{title}</InputGroupHeading>} - {description && <InputGroupHelperText>{description}</InputGroupHelperText>} - </InputGroupHeaderWrapper> - <FieldsWrapper>{fields}</FieldsWrapper> - </InputGroupWrapper> - ); -}; diff --git a/packages/ui-components/src/components/Inputs/InputLabel.tsx b/packages/ui-components/src/components/Inputs/InputLabel.tsx deleted file mode 100644 index 30a9489de6..0000000000 --- a/packages/ui-components/src/components/Inputs/InputLabel.tsx +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React, { ComponentType } from 'react'; -import { InfoOutlined } from '@material-ui/icons'; -import styled from 'styled-components'; -import { Tooltip as BaseTooltip } from '../Tooltip'; - -/** Styled label for inputs. Handles tooltips for labels if present. */ -const LabelWrapper = styled.span` - display: flex; - align-items: center; -`; - -const TooltipWrapper = styled.span` - pointer-events: auto; - cursor: pointer; - margin-left: 0.4em; - border: 1px solid transparent; - display: flex; - align-items: center; - height: 100%; - width: 1rem; - svg { - height: 100%; - width: 100%; - } - &:hover, - &:focus { - svg { - fill: ${props => props.theme.palette.primary.main}; - } - } -`; - -const Tooltip = styled(BaseTooltip)` - & .MuiTooltip-tooltip { - background-color: ${props => props.theme.palette.text.primary}; - border-radius: 3px; - font-weight: ${props => props.theme.typography.fontWeightRegular}; - font-size: 0.69rem; - .MuiTooltip-arrow { - color: ${props => props.theme.palette.text.primary}; - } - } -`; - -interface InputLabelProps { - label?: string | React.ReactNode; - tooltip?: string; - as?: string | ComponentType<any>; - className?: string; -} - -export const InputLabel = ({ label, tooltip, as = 'label', className }: InputLabelProps) => { - // If no label, don't render anything, so there isn't an empty label tag in the DOM - if (!label) return null; - return ( - // allows us to pass in a custom element to render as, e.g. a span if it is going to be contained in a label element, for example when using MUI's TextField component. Otherwise defaults to a label element so that it can be a standalone label - <LabelWrapper as={as} className={className}> - {label} - {tooltip && ( - <Tooltip title={tooltip} placement="top"> - <TooltipWrapper tabIndex={0}> - <InfoOutlined /> - </TooltipWrapper> - </Tooltip> - )} - </LabelWrapper> - ); -}; diff --git a/packages/ui-components/src/components/Inputs/ProfileImageField.tsx b/packages/ui-components/src/components/Inputs/ProfileImageField.tsx new file mode 100644 index 0000000000..5ece4eadae --- /dev/null +++ b/packages/ui-components/src/components/Inputs/ProfileImageField.tsx @@ -0,0 +1,117 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +import React, { useRef, useState } from 'react'; +import styled from 'styled-components'; +import Box from '@material-ui/core/Box'; +import DeleteIcon from '@material-ui/icons/Delete'; +import Fab from '@material-ui/core/Fab'; +import { ConfirmDeleteModal } from '../ConfirmDeleteModal'; +import { FlexStart } from '../Layout'; +import { GreyOutlinedButton } from '../Button'; +import { Avatar } from '../Avatar'; + +const HiddenFileInput = styled.input` + width: 0.1px; + height: 0.1px; + opacity: 0; + overflow: hidden; + position: absolute; + z-index: -1; +`; + +const Label = styled(FlexStart)` + margin-bottom: 1.6rem; +`; + +const StyledAvatar = styled(Avatar)` + position: relative; + color: white; + font-weight: 600; + width: 5.3rem; + height: 5.3rem; + font-size: 2.8rem; + margin-right: 1rem; +`; + +const DeleteButton = styled(Fab)` + position: absolute; + bottom: 0; + right: 0.8rem; + width: 1.875rem; + min-width: 1.875rem; + height: 1.875rem; + min-height: 1.875rem; + box-shadow: none; + background: white; + border: 1px solid ${props => props.theme.palette.grey['400']}; + color: ${props => props.theme.palette.text.secondary}; + + .MuiSvgIcon-root { + font-size: 1.125rem; + } +`; + +const TextLabel = styled.div` + font-size: 0.68rem; + line-height: 0.8rem; + text-transform: uppercase; + color: ${props => props.theme.palette.text.tertiary}; + margin-bottom: 0.6rem; +`; + +interface ProfileImageFieldProps { + name: string; + profileImage?: string; + userInitial?: string; + onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void; + onDelete?: () => void; +} + +export const ProfileImageField = React.memo( + ({ + name, + profileImage, + userInitial, + onDelete = () => {}, + onChange = () => {}, + }: ProfileImageFieldProps) => { + const [confirmModalIsOpen, setConfirmModalIsOpen] = useState(false); + const inputEl = useRef<HTMLInputElement | null>(null); + + const handleDelete = () => { + setConfirmModalIsOpen(false); + if (inputEl && inputEl.current) inputEl.current.value = ''; + onDelete(); + }; + + return ( + <Label as="label" htmlFor={name}> + <HiddenFileInput ref={inputEl} id={name} name={name} type="file" onChange={onChange} /> + <Box position="relative"> + <StyledAvatar initial={userInitial} src={profileImage}> + {userInitial} + </StyledAvatar> + {profileImage && ( + <DeleteButton onClick={() => setConfirmModalIsOpen(true)}> + <DeleteIcon /> + </DeleteButton> + )} + </Box> + <Box> + <TextLabel>Your Avatar</TextLabel> + <GreyOutlinedButton component="span">Upload photo</GreyOutlinedButton> + </Box> + <ConfirmDeleteModal + isOpen={confirmModalIsOpen} + title="Remove Photo" + message="Are you sure you want to remove your photo?" + onConfirm={handleDelete} + onCancel={() => setConfirmModalIsOpen(false)} + /> + </Label> + ); + }, +); diff --git a/packages/ui-components/src/components/Inputs/RadioGroup.tsx b/packages/ui-components/src/components/Inputs/RadioGroup.tsx index 2ca47b1ece..78702122db 100644 --- a/packages/ui-components/src/components/Inputs/RadioGroup.tsx +++ b/packages/ui-components/src/components/Inputs/RadioGroup.tsx @@ -4,26 +4,25 @@ */ import React from 'react'; import styled from 'styled-components'; -import MuiRadio, { RadioProps } from '@material-ui/core/Radio'; +import MuiRadio from '@material-ui/core/Radio'; import MuiRadioGroup from '@material-ui/core/RadioGroup'; -import FormHelperText from '@material-ui/core/FormHelperText'; import MuiFormControlLabel from '@material-ui/core/FormControlLabel'; import MuiFormControl, { FormControlProps } from '@material-ui/core/FormControl'; +import MuiFormLabel, { FormLabelProps } from '@material-ui/core/FormLabel'; import { OverrideableComponentProps } from '../../types'; -import { InputLabel } from './InputLabel'; const FormControl = styled(MuiFormControl)<OverrideableComponentProps<FormControlProps>>` display: block; margin-bottom: 1.2rem; `; -const Legend = styled.legend` +const FormLabel = styled(MuiFormLabel)<OverrideableComponentProps<FormLabelProps>>` position: relative; font-size: 0.9375rem; line-height: 1.125rem; margin-bottom: 0.25rem; color: ${props => props.theme.palette.text.secondary}; - padding-inline-start: 0; + &.Mui-focused { color: ${props => props.theme.palette.text.secondary}; } @@ -55,13 +54,7 @@ const FormControlLabel = styled(MuiFormControlLabel)` } `; -const Radio = styled(MuiRadio)< - RadioProps & { - InputProps: { - 'aria-describedby': string | null; - }; - } ->` +const Radio = styled(MuiRadio)` color: ${props => props.theme.palette.text.tertiary}; &.Mui-checked { @@ -84,9 +77,6 @@ interface RadioGroupProps { className?: string; labelKey?: string; valueKey?: string; - tooltipKey?: string; - tooltip?: string; - helperText?: string; } export const RadioGroup = ({ @@ -98,26 +88,16 @@ export const RadioGroup = ({ className, labelKey = 'label', valueKey = 'value', - tooltipKey = 'tooltip', - tooltip, - helperText, }: RadioGroupProps) => ( <FormControl component="fieldset" className={className} color="primary"> - <InputLabel as={Legend} label={label} tooltip={tooltip} /> - {helperText && <FormHelperText id={`${name}-helperText`}>{helperText}</FormHelperText>} - <StyledRadioGroup name={name} value={value} onChange={onChange}> + <FormLabel component="legend">{label}</FormLabel> + <StyledRadioGroup aria-label={name} name={name} value={value} onChange={onChange}> {options.map(option => ( <FormControlLabel - control={ - <Radio - InputProps={{ - 'aria-describedby': helperText ? `${name}-helperText` : null, - }} - /> - } + control={<Radio />} key={option[valueKey].toString()} value={option[valueKey]} - label={<InputLabel label={option[labelKey]} tooltip={option[tooltipKey]} />} + label={option[labelKey]} /> ))} </StyledRadioGroup> diff --git a/packages/ui-components/src/components/Inputs/Select.tsx b/packages/ui-components/src/components/Inputs/Select.tsx index eb55a1686e..415302d68e 100644 --- a/packages/ui-components/src/components/Inputs/Select.tsx +++ b/packages/ui-components/src/components/Inputs/Select.tsx @@ -67,7 +67,7 @@ export const Select = ({ const [localValue, setValue] = useState(defaultValue); const handleChange = useCallback( - (event: React.ChangeEvent<HTMLInputElement>) => { + event => { setValue(event.target.value); }, [setValue], @@ -110,7 +110,7 @@ export const NativeSelect = ({ const [localValue, setValue] = useState(defaultValue); const handleChange = useCallback( - (event: React.ChangeEvent<HTMLInputElement>) => { + event => { setValue(event.target.value); }, [setValue], diff --git a/packages/ui-components/src/components/Inputs/TextField.tsx b/packages/ui-components/src/components/Inputs/TextField.tsx index 37da077d17..263250f1ad 100644 --- a/packages/ui-components/src/components/Inputs/TextField.tsx +++ b/packages/ui-components/src/components/Inputs/TextField.tsx @@ -6,12 +6,15 @@ import React from 'react'; import MuiTextField, { TextFieldProps } from '@material-ui/core/TextField'; import styled from 'styled-components'; -import { InputLabel } from './InputLabel'; + +const BaseTextField = (props: TextFieldProps) => ( + <MuiTextField fullWidth {...props} variant="outlined" /> +); const FOCUS_COLOUR = '#99d6ff'; const ADORNMENT_COLOUR = '#c4c4c7'; -const StyledTextField = styled(MuiTextField)<TextFieldProps>` +export const TextField = styled(BaseTextField)<TextFieldProps>` margin-bottom: 1.2rem; cursor: auto; @@ -87,7 +90,6 @@ const StyledTextField = styled(MuiTextField)<TextFieldProps>` font-size: 0.9375rem; line-height: 1.125rem; transform: none; - display: flex; } // Adornments @@ -97,9 +99,6 @@ const StyledTextField = styled(MuiTextField)<TextFieldProps>` .MuiInputAdornment-positionStart { margin-right: 0; - .MuiTypography-body1 { - padding-left: 0.5rem; - } } .MuiInputBase-inputAdornedStart, @@ -131,18 +130,3 @@ const StyledTextField = styled(MuiTextField)<TextFieldProps>` padding: 10px; } `; - -export const TextField = ({ - label = '', - tooltip, - ...props -}: TextFieldProps & { - tooltip?: string; -}) => ( - <StyledTextField - fullWidth - {...props} - variant="outlined" - label={<InputLabel label={label} tooltip={tooltip} as="span" />} - /> -); diff --git a/packages/ui-components/src/components/Inputs/index.ts b/packages/ui-components/src/components/Inputs/index.ts index 60cfe0b775..ac0a694645 100644 --- a/packages/ui-components/src/components/Inputs/index.ts +++ b/packages/ui-components/src/components/Inputs/index.ts @@ -14,8 +14,5 @@ export * from './GroupedSelect'; export * from './DatePicker'; export * from './RadioGroup'; export * from './FileUploadField'; -export * from './ImageUploadField'; +export * from './ProfileImageField'; export * from './SQLQueryEditor'; -export * from './InputLabel'; -export * from './HexcodeField'; -export * from './InputGroup'; diff --git a/packages/ui-components/stories/inputs/autocomplete.stories.js b/packages/ui-components/stories/inputs/autocomplete.stories.js index 446ce9249d..823c9f6e3f 100644 --- a/packages/ui-components/stories/inputs/autocomplete.stories.js +++ b/packages/ui-components/stories/inputs/autocomplete.stories.js @@ -196,15 +196,3 @@ export const Tags = () => { </Container> ); }; - -export const Tooltip = () => ( - <Container> - <Autocomplete - id="tooltip-autocomplete" - label="Auto Complete with tooltip label" - options={options.map(option => option.name)} - placeholder="Search..." - tooltip="This is a tooltip" - /> - </Container> -); diff --git a/packages/ui-components/stories/inputs/checkbox.stories.js b/packages/ui-components/stories/inputs/checkbox.stories.js index 6cef9e8014..0ee0ab011a 100644 --- a/packages/ui-components/stories/inputs/checkbox.stories.js +++ b/packages/ui-components/stories/inputs/checkbox.stories.js @@ -40,11 +40,6 @@ export const labels = () => ( error helperText="Please tick Terms and Conditions" /> - <Checkbox - label="Terms and Conditions" - color="primary" - tooltip="Please read the terms and conditions carefully" - /> </Container> ); diff --git a/packages/ui-components/stories/inputs/checkboxList.stories.js b/packages/ui-components/stories/inputs/checkboxList.stories.js index 016d7fed6a..c5fa478d65 100644 --- a/packages/ui-components/stories/inputs/checkboxList.stories.js +++ b/packages/ui-components/stories/inputs/checkboxList.stories.js @@ -12,12 +12,7 @@ export default { }; export const checkboxList = () => { - const list = [0, 1, 2, 3, 3].map((v, index) => ({ - name: `List item ${v + 1}`, - code: index, - tooltip: index % 2 === 0 ? 'This is a tooltip' : '', - disabled: index % 2 === 0, - })); + const list = [0, 1, 2, 3, 3].map((v, index) => ({ name: `List item ${v + 1}`, code: index })); const [selectedItems, setSelectedItems] = React.useState([]); return ( diff --git a/packages/ui-components/stories/inputs/datePicker.stories.js b/packages/ui-components/stories/inputs/datePicker.stories.js index a785e0d138..c027143dcb 100644 --- a/packages/ui-components/stories/inputs/datePicker.stories.js +++ b/packages/ui-components/stories/inputs/datePicker.stories.js @@ -33,12 +33,6 @@ export const SimpleDatePicker = () => { required: 'Required', })} /> - <DatePicker - label="Basic example with tooltip" - onChange={setValue} - value={value} - tooltip="Please select a date" - /> </Container> ); }; @@ -59,12 +53,6 @@ export const SimpleDateTimePicker = () => { required: 'Required', })} /> - <DateTimePicker - label="Basic example with tooltip" - onChange={setValue} - value={value} - tooltip="Please select a date and time" - /> </Container> ); }; diff --git a/packages/ui-components/stories/inputs/fileUploadField.stories.js b/packages/ui-components/stories/inputs/fileUploadField.stories.js index e770dbd03d..6db41d5d0e 100644 --- a/packages/ui-components/stories/inputs/fileUploadField.stories.js +++ b/packages/ui-components/stories/inputs/fileUploadField.stories.js @@ -28,24 +28,6 @@ export const Simple = () => { }} name="file-upload" fileName={fileName} - label="File Upload" - /> - </Container> - ); -}; - -export const SimpleWithTooltip = () => { - const [fileName, setFileName] = useState('No File chosen'); - return ( - <Container> - <FileUploadField - onChange={(event, newName) => { - setFileName(newName); - }} - name="file-upload" - fileName={fileName} - label="File Upload" - tooltip=".png and .jpg files only" /> </Container> ); diff --git a/packages/ui-components/stories/inputs/groupedSelect.stories.js b/packages/ui-components/stories/inputs/groupedSelect.stories.js index 8bc3747f39..5ba1f98436 100644 --- a/packages/ui-components/stories/inputs/groupedSelect.stories.js +++ b/packages/ui-components/stories/inputs/groupedSelect.stories.js @@ -37,17 +37,6 @@ export const select = () => ( </Container> ); -export const TooltipLabel = () => ( - <Container> - <GroupedSelect - label="Grouped select" - id="tooltip" - groupedOptions={groupedOptions} - tooltip="Select an item" - /> - </Container> -); - export const Controlled = () => { const [value, setValue] = useState('AF'); diff --git a/packages/ui-components/stories/inputs/hexcodeField.stories.js b/packages/ui-components/stories/inputs/hexcodeField.stories.js deleted file mode 100644 index f05d462d1d..0000000000 --- a/packages/ui-components/stories/inputs/hexcodeField.stories.js +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import React, { useState } from 'react'; -import styled from 'styled-components'; -import { HexcodeField } from '../../src'; - -export default { - title: 'Inputs/HexcodeField', -}; - -const Container = styled.div` - max-width: 25em; - padding: 2em; -`; - -export const WithHelperText = () => { - const [value, setValue] = useState('#000000'); - return ( - <Container> - <HexcodeField - value={value} - label="Background color" - id="background-color" - helperText="This is the color that will be used for the background" - onChange={setValue} - /> - </Container> - ); -}; - -export const WithoutHelperText = () => { - const [value, setValue] = useState('#000000'); - return ( - <Container> - <HexcodeField - value={value} - label="Background color" - id="background-color" - onChange={setValue} - /> - </Container> - ); -}; - -export const DisabledInput = () => { - const [value, setValue] = useState('#000000'); - return ( - <Container> - <HexcodeField - value={value} - label="Background color" - id="background-color" - onChange={setValue} - disabled={true} - /> - </Container> - ); -}; - -export const WithTooltip = () => { - const [value, setValue] = useState('#000000'); - return ( - <Container> - <HexcodeField - value={value} - label="Background color" - id="background-color" - onChange={setValue} - tooltip="This colour is for the background" - /> - <HexcodeField - value={value} - label="Main color" - id="main-color" - onChange={setValue} - tooltip="This colour is for the text" - helperText="Please pick a contrasting colour" - /> - </Container> - ); -}; diff --git a/packages/ui-components/stories/inputs/imageUploadField.stories.js b/packages/ui-components/stories/inputs/imageUploadField.stories.js deleted file mode 100644 index a5741c2f42..0000000000 --- a/packages/ui-components/stories/inputs/imageUploadField.stories.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import MuiBox from '@material-ui/core/Box'; -import { ImageUploadField } from '../../src'; - -export default { - title: 'Inputs/ImageUploadField', - component: ImageUploadField, -}; - -const Container = styled(MuiBox)` - max-width: 1200px; - padding: 1rem; -`; - -export const Simple = () => { - const [profileImage, setProfileImage] = React.useState(null); - const createBase64Image = fileObject => { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - - reader.onload = () => { - resolve(reader.result); - }; - - reader.onerror = reject; - - reader.readAsDataURL(fileObject); - }); - }; - const handleFileChange = async fileObject => { - const base64 = await createBase64Image(fileObject); - setProfileImage({ data: base64 }); - }; - const handleFileDelete = () => { - setProfileImage(null); - }; - return ( - <Container> - <ImageUploadField - name="profileImage" - imageSrc={profileImage && profileImage.data} - onChange={handleFileChange} - onDelete={handleFileDelete} - avatarInitial="BES" - label="Your avatar" - deleteModal={{ - title: 'Remove Photo', - message: 'Are you sure you want to delete your photo?', - }} - /> - </Container> - ); -}; diff --git a/packages/ui-components/stories/inputs/inputGroup.stories.js b/packages/ui-components/stories/inputs/inputGroup.stories.js deleted file mode 100644 index 58b0b5e2b3..0000000000 --- a/packages/ui-components/stories/inputs/inputGroup.stories.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React, { useState } from 'react'; -import styled from 'styled-components'; -import { InputGroup, TextField } from '../../src'; - -export default { - title: 'Inputs/InputGroup', -}; - -const Container = styled.div` - max-width: 380px; - padding: 2rem; -`; - -export const inputGroup = () => { - const [firstName, setFirstName] = useState(''); - const [lastName, setLastName] = useState(''); - const [bio, setBio] = useState(''); - const [website, setWebsite] = useState(''); - const [companyName, setCompanyName] = useState(''); - - return ( - <Container> - <InputGroup - title="Your details" - description="Please enter your details" - fields={[ - <TextField - label="First name" - id="first-name" - value={firstName} - onChange={e => setFirstName(e.target.value)} - />, - <TextField - label="Last name" - id="last-name" - value={lastName} - onChange={e => setLastName(e.target.value)} - />, - ]} - /> - <InputGroup - title="About you" - fields={[ - <TextField label="Bio" id="bio" value={bio} onChange={e => setBio(e.target.value)} />, - ]} - /> - <InputGroup - title="Your work" - description="About your work" - fields={[ - <TextField - label="Company name" - id="company-name" - value={companyName} - onChange={e => setCompanyName(e.target.value)} - />, - <TextField - label="Website" - id="website" - value={website} - onChange={e => setWebsite(e.target.value)} - />, - ]} - /> - </Container> - ); -}; diff --git a/packages/ui-components/stories/inputs/inputLabel.stories.js b/packages/ui-components/stories/inputs/inputLabel.stories.js deleted file mode 100644 index cb2a140ed8..0000000000 --- a/packages/ui-components/stories/inputs/inputLabel.stories.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import { InputLabel } from '../../src'; - -export default { - title: 'Inputs/InputLabel', -}; - -const Container = styled.div` - max-width: 380px; - padding: 2rem; -`; - -export const SimpleLabel = () => ( - <Container> - <InputLabel label="Simple input label" /> - </Container> -); - -export const LabelWithTooltip = () => ( - <Container> - <InputLabel label="Label with tooltip" tooltip="This is a tooltip" /> - </Container> -); diff --git a/packages/ui-components/stories/inputs/multiSelect.stories.js b/packages/ui-components/stories/inputs/multiSelect.stories.js index a4cb961d28..cea496967c 100644 --- a/packages/ui-components/stories/inputs/multiSelect.stories.js +++ b/packages/ui-components/stories/inputs/multiSelect.stories.js @@ -45,20 +45,3 @@ export const multiSelect = () => { </Container> ); }; - -export const multiSelectWithTooltip = () => { - return ( - <Container> - <MultiSelect - label="Select Countries" - tooltip="You can select multiple countries" - defaultValue={['All']} - id="multi" - options={options} - renderValue={values => - values.length > 1 ? `${values.length} Countries Selected` : getLabelForValue(values[0]) - } - /> - </Container> - ); -}; diff --git a/packages/ui-components/stories/inputs/profileImageField.stories.js b/packages/ui-components/stories/inputs/profileImageField.stories.js new file mode 100644 index 0000000000..61fdd4bfa3 --- /dev/null +++ b/packages/ui-components/stories/inputs/profileImageField.stories.js @@ -0,0 +1,25 @@ +/* + * Tupaia + * Copyright (c) 2017 - 2020 Beyond Essential Systems Pty Ltd + */ + +import React from 'react'; +import styled from 'styled-components'; +import MuiBox from '@material-ui/core/Box'; +import { ProfileImageField } from '../../src'; + +export default { + title: 'Inputs/ProfileImageField', + component: ProfileImageField, +}; + +const Container = styled(MuiBox)` + max-width: 1200px; + padding: 1rem; +`; + +export const Simple = () => ( + <Container> + <ProfileImageField name="profileImage" /> + </Container> +); diff --git a/packages/ui-components/stories/inputs/radioGroup.stories.js b/packages/ui-components/stories/inputs/radioGroup.stories.js index f0ea58c22b..0158e666c9 100644 --- a/packages/ui-components/stories/inputs/radioGroup.stories.js +++ b/packages/ui-components/stories/inputs/radioGroup.stories.js @@ -46,23 +46,6 @@ export const SimpleExample = () => { ); }; -export const LegendTooltip = () => { - const [value, setValue] = useState('female'); - - return ( - <Container> - <RadioGroup - label="Gender" - name="gender" - tooltip="Please select an option" - options={options} - value={value} - onChange={e => setValue(e.target.value)} - /> - </Container> - ); -}; - export const BooleanField = () => { const [value, setValue] = useState(true); @@ -89,7 +72,6 @@ export const BooleanField = () => { { label: 'Yes', value: true, - tooltip: 'This is a tooltip', }, { label: 'No', diff --git a/packages/ui-components/stories/inputs/select.stories.js b/packages/ui-components/stories/inputs/select.stories.js index c88ac8fa45..ae31627e2e 100644 --- a/packages/ui-components/stories/inputs/select.stories.js +++ b/packages/ui-components/stories/inputs/select.stories.js @@ -30,20 +30,7 @@ const options = [ export const select = () => ( <Container> <Select label="Simple select" id="simple" options={options} /> - <Select - label="Tooltip label" - id="tooltip" - options={options} - tooltip="Please select an option" - /> <Select label="Required select" id="required" options={options} required /> - <Select - label="Required select with tooltip" - id="required" - options={options} - required - tooltip="Please select an option" - /> <NativeSelect label="Native select" id="native" options={options} /> <Select label="Default value" id="default-value" options={options} defaultValue="NZ" /> <Select diff --git a/packages/ui-components/stories/inputs/textField.stories.js b/packages/ui-components/stories/inputs/textField.stories.js index 9e53f0a270..320a307b08 100644 --- a/packages/ui-components/stories/inputs/textField.stories.js +++ b/packages/ui-components/stories/inputs/textField.stories.js @@ -38,7 +38,6 @@ export const textField = () => ( <TextField name="number" label="Number" type="number" /> <TextField name="email" label="Email" type="email" /> <TextField name="password" label="Password" type="password" /> - <TextField name="toolTip" label="Tooltip" autoComplete="off" tooltip="This is a tooltip" /> </Container> ); diff --git a/packages/utils/README.md b/packages/utils/README.md index 14fc3c95ea..dbade026e8 100644 --- a/packages/utils/README.md +++ b/packages/utils/README.md @@ -1,4 +1,4 @@ -# @tupaia/utils +## @tupaia/utils Utility functions that are helpful across multiple packages diff --git a/packages/utils/src/__tests__/validation/validatorFunctions.test.js b/packages/utils/src/__tests__/validation/validatorFunctions.test.js index ebff72e3a4..f57f412bc8 100644 --- a/packages/utils/src/__tests__/validation/validatorFunctions.test.js +++ b/packages/utils/src/__tests__/validation/validatorFunctions.test.js @@ -8,12 +8,8 @@ import { constructEveryItemSync, constructIsArrayOf, constructIsOneOfType, - isURLPathSegment, isArray, isBoolean, - isHexColor, - isURL, - constructIsShorterThan, } from '../../validation'; describe('validatorFunctions', () => { @@ -52,44 +48,6 @@ describe('validatorFunctions', () => { }); }); - describe('isURL', () => { - it('pass if given a valid url', () => { - expect(() => isURL('www.beyondessential.com.au')).not.toThrow(); - expect(() => isURL('https://www.beyondessential.com.au')).not.toThrow(); - }); - - it('fails if given a non valid url', () => { - expect(() => isURL('junk')).toThrow(); - expect(() => isURL('asdf')).toThrow(); - }); - }); - - describe('isHexColor', () => { - it('pass if given a valid hex color', () => { - expect(() => isHexColor('#aabbcc')).not.toThrow(); - expect(() => isHexColor('#333')).not.toThrow(); - }); - - it('fails if given a non valid hex color', () => { - expect(() => isHexColor('123456123')).toThrow(); - expect(() => isHexColor('aaggee')).toThrow(); - expect(() => isHexColor('12')).toThrow(); - }); - }); - - describe('isURLPathSegment', () => { - it('pass if given a valid string', () => { - expect(() => isURLPathSegment('example123')).not.toThrow(); - expect(() => isURLPathSegment('example_segment')).not.toThrow(); - expect(() => isURLPathSegment('example-segment')).not.toThrow(); - }); - - it('fails if given a non valid string', () => { - expect(() => isURLPathSegment('about/page')).toThrow(); - expect(() => isURLPathSegment('invalid!segment"')).toThrow(); - }); - }); - describe('allValuesAreNumbers', () => { it('fails if a not given an object', () => { expect(() => allValuesAreNumbers(null)).toThrowError(); @@ -253,18 +211,4 @@ describe('validatorFunctions', () => { }); }); }); - - describe('constructIsShorterThan', () => { - const validator = constructIsShorterThan(5); - - it('fails if value is longer than max length', () => { - expect(() => validator('123456')).toThrowError(/Must be shorter than 5 characters/i); - }); - - it('passes if given a string shorter than or equal to the max length', () => { - expect(() => validator('123')).not.toThrow(); - expect(() => validator('12345')).not.toThrow(); - expect(() => validator('')).not.toThrow(); - }); - }); }); diff --git a/packages/utils/src/s3/S3Client.js b/packages/utils/src/s3/S3Client.js index 9985854809..166bcbf3cb 100644 --- a/packages/utils/src/s3/S3Client.js +++ b/packages/utils/src/s3/S3Client.js @@ -59,12 +59,12 @@ export class S3Client { /** * @private */ - async uploadPublicImage(fileName, buffer, fileType) { + async uploadPublicImage(fileName, buffer) { return this.upload({ Key: fileName, Body: buffer, ACL: 'public-read', - ContentType: `image/${fileType}`, + ContentType: 'image/png', ContentEncoding: 'base64', }); } @@ -98,61 +98,24 @@ export class S3Client { return this.uploadPrivateFile(s3FilePath, fileStream); } - async deleteFile(filePath) { - const fileName = filePath.split(getS3ImageFilePath())[1]; - if (!(await this.checkIfFileExists(fileName))) return null; - return new Promise((resolve, reject) => { - this.s3.deleteObject( - { - Bucket: S3_BUCKET_NAME, - Key: fileName, - }, - (error, data) => { - if (error) { - reject(error); - } else { - resolve(data); - } - }, - ); - }); - } - /** * @public * @param {*} base64EncodedImage * @param {*} [fileId] - * @param {*} [allowOverwrite] */ - async uploadImage(base64EncodedImage = '', fileId, allowOverwrite = false) { - const imageTypes = ['png', 'jpeg', 'jpg', 'gif', 'svg+xml']; - const encodedImageString = base64EncodedImage.replace( - new RegExp('(data:image)(.*)(;base64,)'), - '', + async uploadImage(base64EncodedImage, fileId) { + const buffer = Buffer.from( + base64EncodedImage.replace(/^data:image\/\w+;base64,/, ''), + 'base64', ); - // remove the base64 prefix from the image. This handles svg and other image types - const buffer = Buffer.from(encodedImageString, 'base64'); - - // use the file type from the image if it's available, otherwise default to png - const fileType = - base64EncodedImage.includes('data:image') && base64EncodedImage.includes(';base64') - ? base64EncodedImage.substring('data:image/'.length, base64EncodedImage.indexOf(';base64')) - : 'png'; - - // If is not an image file type, e.g. a pdf, throw an error - if (!imageTypes.includes(fileType)) throw new Error(`File type ${fileType} is not supported`); - - const fileExtension = fileType.replace('+xml', ''); const filePath = getS3ImageFilePath(); - const fileName = fileId - ? `${filePath}${fileId}.${fileExtension}` - : `${filePath}${getUniqueFileName()}.${fileExtension}`; - // In some cases we want to allow overwriting of existing files - if (!allowOverwrite) { - if (await this.checkIfFileExists(fileName)) - throw new Error(`File ${fileName} already exists on S3, overwrite is not allowed`); + const fileName = fileId ? `${filePath}${fileId}.png` : `${filePath}${getUniqueFileName()}.png`; + + const alreadyExists = await this.checkIfFileExists(fileName); + if (alreadyExists) { + throw new Error(`File ${fileName} already exists on S3, overwrite is not allowed`); } - return this.uploadPublicImage(fileName, buffer, fileType); + return this.uploadPublicImage(fileName, buffer); } } diff --git a/packages/utils/src/validation/validatorFunctions.js b/packages/utils/src/validation/validatorFunctions.js index 3b8c42e9fe..dddf149473 100644 --- a/packages/utils/src/validation/validatorFunctions.js +++ b/packages/utils/src/validation/validatorFunctions.js @@ -91,27 +91,6 @@ export const isEmail = value => { } }; -export const isHexColor = value => { - if (!validator.isHexColor(value.toString())) { - // Coerce to string before checking with validator - throw new ValidationError('Not a valid hex colour'); - } -}; - -export const isURL = value => { - if (!validator.isURL(value.toString())) { - // Coerce to string before checking with validator - throw new ValidationError('Not a valid url'); - } -}; - -export const isURLPathSegment = value => { - const urlSegmentRegex = /^[a-zA-Z0-9_-]+$/; - if (!urlSegmentRegex.test(value.toString())) { - throw new ValidationError('No a valid url segment'); - } -}; - export const isPlainObject = value => { if (!checkIsOfType(value, 'object')) { throw new Error('Not a plain javascript object'); @@ -212,10 +191,10 @@ export const constructRecordExistsWithField = (model, field) => async value => { } }; -export const constructRecordNotExistsWithField = (model, field = 'code') => async value => { +export const constructRecordNotExistsWithField = (model, field) => async value => { hasContent(value); - const record = await model.findOne({ [field]: value }); + const record = await model.findOne({ code: value }); if (record) { throw new ValidationError( `Another ${model.databaseType} record already exists with with ${field}: ${value}`, @@ -287,13 +266,7 @@ export const constructIsNotPresentOr = validatorFunction => (value, object, key) export const constructIsLongerThan = minLength => value => { if (value.length < minLength) { - throw new ValidationError(`Must be longer than ${minLength} characters`); - } -}; - -export const constructIsShorterThan = maxLength => value => { - if (value && value.length > maxLength) { - throw new ValidationError(`Must be shorter than ${maxLength} characters`); + throw new ValidationError(`Must be longer than ${value} characters`); } }; diff --git a/packages/weather-api/README.md b/packages/weather-api/README.md deleted file mode 100644 index f30aa2930b..0000000000 --- a/packages/weather-api/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @tupaia/weather-api - -API interface for querying [Weatherbit.io](https://www.weatherbit.io) diff --git a/packages/web-config-server/README.md b/packages/web-config-server/README.md index 152b847eb9..07eb7a2c80 100755 --- a/packages/web-config-server/README.md +++ b/packages/web-config-server/README.md @@ -1,6 +1,14 @@ -# @tupaia/web-config-server +# Tupaia Config Server -Orchestration server for the main Tupaia application +## Open Source Info + +### Open Source Mission statement + +> By engaging and collaborating with our community we can deliver a more robust product that bridges cultural differences and empowers decision making within health systems worldwide. + +### Code of Conduct + +For contributor's code of conduct - see the [code-of-conduct.md](https://gitlab.com/beyond-essential/tupaia/blob/master/code-of-conduct.md) published in the repo. ## Development diff --git a/packages/web-config-server/src/apiV1/index.js b/packages/web-config-server/src/apiV1/index.js index 8b1fcfa846..a17203d647 100755 --- a/packages/web-config-server/src/apiV1/index.js +++ b/packages/web-config-server/src/apiV1/index.js @@ -31,7 +31,6 @@ import { ReportHandler } from './report'; import { disasters } from './disasters'; import { getProjects } from './projects'; -import { getLandingPage } from './landingPages'; const handleWith = Handler => catchAsyncErrors((...params) => new Handler(...params).handleRequest()); @@ -61,7 +60,6 @@ export const getRoutesForApiV1 = () => { api.get('/projects', catchAsyncErrors(getProjects)); api.get('/dashboards', handleWith(DashboardsHandler)); // New style dashboards api.get('/report/:reportCode', handleWith(ReportHandler)); - api.get('/landingPage/:landingPageUrl', catchAsyncErrors(getLandingPage)); api.post('/pdf', catchAsyncErrors(PDFExportHandler)); return api; diff --git a/packages/web-config-server/src/apiV1/landingPages.js b/packages/web-config-server/src/apiV1/landingPages.js deleted file mode 100644 index 32b12b4864..0000000000 --- a/packages/web-config-server/src/apiV1/landingPages.js +++ /dev/null @@ -1,76 +0,0 @@ -import { respond } from '@tupaia/utils'; - -function buildProjectData(project) { - const { - name, - code, - description, - sort_order: sortOrder, - image_url: imageUrl, - logo_url: logoUrl, - permission_groups: permissionGroups, - dashboard_group_name: dashboardGroupName, - default_measure: defaultMeasure, - config, - } = project; - - return { - name, - code, - permissionGroups, - description, - sortOrder, - imageUrl, - logoUrl, - dashboardGroupName, - defaultMeasure, - config, - }; -} - -async function buildLandingPageDataForFrontend(landingPage, req) { - const projectData = await req.models.project.find({ code: landingPage.project_codes }); - const projects = projectData.map(project => buildProjectData(project)); - - const { - name, - image_url: imageUrl, - logo_url: logoUrl, - primary_hexcode: primaryHexcode, - secondary_hexcode: secondaryHexcode, - long_bio: longBio, - contact_us: contactUs, - external_link: externalLink, - phone_number: phoneNumber, - website_url: websiteUrl, - include_name_in_header: includeNameInHeader, - extended_title: extendedTitle, - } = landingPage; - - return { - name, - imageUrl, - logoUrl, - primaryHexcode, - secondaryHexcode, - longBio, - contactUs, - externalLink, - phoneNumber, - websiteUrl, - includeNameInHeader, - extendedTitle, - projects, - }; -} - -export async function getLandingPage(req, res) { - const { landingPageUrl } = req.params; - - const landingPage = await req.models.landingPage.findOne({ url_segment: landingPageUrl }); - - if (!landingPage) { - return respond(res, null, 200); - } - return respond(res, await buildLandingPageDataForFrontend(landingPage, req), 200); -} diff --git a/packages/web-config-server/src/apiV1/measureData.js b/packages/web-config-server/src/apiV1/measureData.js index 4077864584..cecd4dec0d 100644 --- a/packages/web-config-server/src/apiV1/measureData.js +++ b/packages/web-config-server/src/apiV1/measureData.js @@ -188,10 +188,7 @@ export default class extends DataAggregatingRouteHandler { throw new CustomError(accessDeniedForMeasure); } }), - ).catch(e => { - // in the event of an access denied error, we need to catch this and handle it by throwing it further down the chain, so that the frontend can handle it and not show a blank screen - throw new Error(e); - }); + ); // start fetching actual data const shouldFetchSiblings = this.query.shouldShowAllParentCountryResults === 'true'; const responseData = await Promise.all( diff --git a/packages/web-frontend/README.md b/packages/web-frontend/README.md index 508744cc0d..9af23b0885 100644 --- a/packages/web-frontend/README.md +++ b/packages/web-frontend/README.md @@ -1,6 +1,16 @@ # @tupaia/web-frontend -Main [Tupaia](https://tupaia.org/) application. +Web app that integrates with and displays data from the Tupaia project. + +# Open Source Information + +## Open Source Mission statement + +> By engaging and collaborating with our community we can deliver a more robust product that bridges cultural differences and empowers decision making within health systems worldwide. + +## Code of Conduct + +For contributor's code of conduct - see the [code-of-conduct.md](https://gitlab.com/beyond-essential/tupaia/blob/master/code-of-conduct.md) published in the repo. # Development diff --git a/packages/web-frontend/public/images/custom-landing-page-default.png b/packages/web-frontend/public/images/custom-landing-page-default.png deleted file mode 100644 index f789807b1196b74447d3121d7ccf294d83004a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398369 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�RNoe2#Thpv_SSQpd1@mxu_Vv;MyFpy%90 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℘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 Mt5#P^F5iv%AG_%;i~s-t diff --git a/packages/web-frontend/public/index.html b/packages/web-frontend/public/index.html index b95efec535..78279d1f87 100644 --- a/packages/web-frontend/public/index.html +++ b/packages/web-frontend/public/index.html @@ -98,7 +98,7 @@ <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" /> <link rel="stylesheet" - href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700&display=swap" + href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" crossorigin="anonymous" /> <link @@ -128,16 +128,7 @@ background: #262834; font-family: Roboto, sans-serif; } - #tupaia-spinner { - position: fixed; - top: 0; - left: 0; - height: 100vh; - width: 100vw; - z-index: 9999; - background: #262834; - } - #tupaia-spinner:before { + .spinner:before { content: ''; box-sizing: border-box; position: absolute; @@ -159,10 +150,6 @@ <noscript> <p style="color: white">You need to enable JavaScript to run this app.</p> </noscript> - <!-- App wide loading spinner. - It is placed in the index.html file so that it displays while the react app is mounting and it - is outside of the root so that it still displays while we fetch essential initial app data (eg. landing pages)--> - <div id="tupaia-spinner"></div> - <div id="root"></div> + <div id="root"><div class="spinner"></div></div> </body> </html> diff --git a/packages/web-frontend/src/actions.js b/packages/web-frontend/src/actions.js index 58b8819a31..55786d3b7f 100644 --- a/packages/web-frontend/src/actions.js +++ b/packages/web-frontend/src/actions.js @@ -19,7 +19,6 @@ export const FETCH_INITIAL_DATA = 'FETCH_INITIAL_DATA'; export const ATTEMPT_CHANGE_PASSWORD = 'ATTEMPT_CHANGE_PASSWORD'; export const ATTEMPT_LOGIN = 'ATTEMPT_LOGIN'; export const ATTEMPT_LOGOUT = 'ATTEMPT_LOGOUT'; -export const ATTEMPT_LANDING_PAGE_LOGOUT = 'ATTEMPT_LANDING_PAGE_LOGOUT'; export const ATTEMPT_RESET_PASSWORD = 'ATTEMPT_RESET_PASSWORD'; export const RESEND_VERIFICATION_EMAIL = 'RESEND_VERIFICATION_EMAIL'; export const FETCH_RESEND_VERIFICATION_EMAIL = 'FETCH_RESEND_VERIFICATION_EMAIL'; @@ -67,7 +66,6 @@ export const FETCH_RESET_TOKEN_LOGIN_ERROR = 'FETCH_RESET_TOKEN_LOGIN_ERROR'; export const FETCH_RESET_TOKEN_LOGIN_SUCCESS = 'FETCH_RESET_TOKEN_LOGIN_SUCCESS'; export const FETCH_LOGOUT_ERROR = 'FETCH_LOGOUT_ERROR'; export const FETCH_LOGOUT_SUCCESS = 'FETCH_LOGOUT_SUCCESS'; -export const FETCH_LANDING_PAGE_LOGOUT_SUCCESS = 'FETCH_LANDING_PAGE_LOGOUT_SUCCESS'; export const FETCH_MEASURE_DATA_ERROR = 'FETCH_MEASURE_DATA_ERROR'; export const FETCH_MEASURE_DATA_SUCCESS = 'FETCH_MEASURE_DATA_SUCCESS'; export const FETCH_ALL_MEASURE_DATA_SUCCESS = 'FETCH_ALL_MEASURE_DATA_SUCCESS'; @@ -126,9 +124,6 @@ export const SELECT_DISASTER = 'SELECT_DISASTER'; export const VIEW_DISASTER = 'VIEW_DISASTER'; export const TOGGLE_DASHBOARD_SELECT_EXPAND = 'TOGGLE_DASHBOARD_SELECT_EXPAND'; export const SET_PROJECT_DATA = 'SET_PROJECT_DATA'; -export const SET_CUSTOM_LANDING_PAGE_DATA = 'SET_CUSTOM_LANDING_PAGE_DATA'; -export const CUSTOM_LANDING_PAGE_LOADING = 'CUSTOM_LANDING_PAGE_LOADING'; -export const CLEAR_CUSTOM_LANDING_PAGE_DATA = 'CLEAR_CUSTOM_LANDING_PAGE_DATA'; export const SET_PROJECT = 'SET_PROJECT'; export const FETCH_PROJECTS_ERROR = 'FETCH_PROJECTS_ERROR'; export const REQUEST_PROJECT_ACCESS = 'REQUEST_PROJECT_ACCESS'; @@ -137,7 +132,6 @@ export const UPDATE_HISTORY_LOCATION = 'UPDATE_HISTORY_LOCATION'; export const SET_MAP_OVERLAYS_ONCE_HIERARCHY_LOADS = 'SET_MAP_OVERLAYS_ONCE_HIERARCHY_LOADS'; export const LOCATION_CHANGE = 'LOCATION_CHANGE'; export const SET_MAX_SELECTED_OVERLAYS = 'SET_MAX_SELECTED_OVERLAYS'; -export const SET_AUTH_VIEW_STATE = 'SET_AUTH_VIEW_STATE'; /** * Attempt password change using old password, new password and new password @@ -272,15 +266,6 @@ export function attemptUserLogout() { }; } -/** - * Attempt logout from current user in a CUSTOM LANDING PAGE by clicking on Log out button. - */ -export function attemptLandingPageLogout() { - return { - type: ATTEMPT_LANDING_PAGE_LOGOUT, - }; -} - /** * Changes the current session to logout. Should show Sing in button on UserBar */ @@ -290,12 +275,6 @@ export function fetchUserLogoutSuccess() { }; } -export function fetchLandingPageLogoutSuccess() { - return { - type: FETCH_LANDING_PAGE_LOGOUT_SUCCESS, - }; -} - /** * Changes state to communicate error to logout current user. * @@ -1129,6 +1108,3 @@ export function updateHistoryLocation(location) { export function setMobileTab(tab) { return { type: SET_MOBILE_TAB, tab }; } -export function setAuthViewState(authViewState) { - return { type: SET_AUTH_VIEW_STATE, authViewState }; -} diff --git a/packages/web-frontend/src/components/Buttons.js b/packages/web-frontend/src/components/Buttons.js index 350043944d..5529ea40af 100644 --- a/packages/web-frontend/src/components/Buttons.js +++ b/packages/web-frontend/src/components/Buttons.js @@ -6,13 +6,14 @@ */ import styled from 'styled-components'; -import { Button } from '@tupaia/ui-components'; +import Button from '@material-ui/core/Button'; + import { WHITE, PRIMARY_BLUE, BREWER_PALETTE } from '../styles'; export const PrimaryButton = styled(Button)` color: ${WHITE}; background-color: ${PRIMARY_BLUE}; - padding: 0.375rem 0.8rem; + padding: 6px 12px 7px; &.MuiButton-root.Mui-disabled { color: ${WHITE}; diff --git a/packages/web-frontend/src/components/mobile/Overlay/index.js b/packages/web-frontend/src/components/mobile/Overlay/index.js index 4af991e83e..2394092ffc 100644 --- a/packages/web-frontend/src/components/mobile/Overlay/index.js +++ b/packages/web-frontend/src/components/mobile/Overlay/index.js @@ -42,6 +42,7 @@ const styles = { display: 'flex', flexDirection: 'column', animation: 'x 0.3s', + animationName: Radium.keyframes(modalSlideTransition, 'modalSlideTransition'), }, header: { display: 'flex', diff --git a/packages/web-frontend/src/constants/constants.js b/packages/web-frontend/src/constants/constants.js index c6f62cbdde..ebb6079f13 100644 --- a/packages/web-frontend/src/constants/constants.js +++ b/packages/web-frontend/src/constants/constants.js @@ -36,9 +36,3 @@ export const LOGIN_TYPES = { TOKEN: 'token', MANUAL: 'manual', }; - -export const PROJECT_ACCESS_TYPES = { - PENDING: 'PENDING', - ALLOWED: 'ALLOWED', - DENIED: 'DENIED', -}; diff --git a/packages/web-frontend/src/containers/DashboardExportModal.js b/packages/web-frontend/src/containers/DashboardExportModal.js index 2f8ec7eace..56e94f859b 100644 --- a/packages/web-frontend/src/containers/DashboardExportModal.js +++ b/packages/web-frontend/src/containers/DashboardExportModal.js @@ -6,24 +6,21 @@ import React, { useEffect } from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Grid } from '@material-ui/core'; +import DownloadIcon from '@material-ui/icons/GetApp'; import { Dialog, DialogHeader, DialogContent as BaseDialogContent, + FlexSpaceBetween as BaseFlexSpaceBetween, CheckboxList, LoadingContainer, - FlexEnd, - DialogFooter as BaseDialogFooter, - Button, } from '@tupaia/ui-components'; +import MuiIconButton from '@material-ui/core/Button'; import { useDashboardItemsExportToPDF } from '../utils/useDashboardItemsExportToPDF'; import { DARK_BLUE, PRIMARY_BLUE } from '../styles'; -import { PrimaryButton as BasePrimaryButton } from '../components/Buttons'; -const StyledRootGrid = styled(Grid)` - justify-content: center; - alignitems: center; +const FlexSpaceBetween = styled(BaseFlexSpaceBetween)` + width: 95%; `; const DialogContent = styled(BaseDialogContent)` @@ -37,23 +34,9 @@ const DialogContent = styled(BaseDialogContent)` } `; -const PrimaryButton = styled(BasePrimaryButton)` - text-transform: capitalize; - margin-left: 1rem; -`; -const TextButton = styled(Button)` - text-transform: capitalize; - padding: 0.375rem 0.8rem; +const MuiButton = styled(MuiIconButton)` + margin: 0px 20px; background-color: transparent; - &:hover { - background-color: ${props => props.theme.palette.action.hover}; - } -`; - -const DialogFooter = styled(BaseDialogFooter)` - padding-top: 0; - padding-bottom: 2em; - border-bottom: none; `; export const DashboardExportModal = ({ @@ -69,16 +52,7 @@ export const DashboardExportModal = ({ const [selectedItems, setSelectedItems] = React.useState([]); useEffect(() => { - const defaultList = currentGroupDashboard.items.map((item, index) => { - // at this stage, we only allow exporting charts - const itemIsDisabled = item.type !== 'chart'; - return { - ...item, - index, - disabled: itemIsDisabled, - tooltip: itemIsDisabled ? 'PDF export coming soon' : '', - }; - }); + const defaultList = currentGroupDashboard.items.map((item, index) => ({ ...item, index })); setList(defaultList); setSelectedItems([]); }, [currentGroupDashboard]); @@ -98,8 +72,20 @@ export const DashboardExportModal = ({ }; return ( - <Dialog onClose={onClose} open={isOpen} maxWidth="md"> - <DialogHeader onClose={onClose} /> + <Dialog onClose={onClose} open={isOpen} maxWidth="lg"> + <DialogHeader onClose={onClose}> + <FlexSpaceBetween> + <MuiButton + startIcon={<DownloadIcon />} + variant="outlined" + onClick={exportSelectedItems} + disableElevation + disabled={isExporting} + > + export + </MuiButton> + </FlexSpaceBetween> + </DialogHeader> <DialogContent> <LoadingContainer heading="Exporting charts to PDF" @@ -107,37 +93,14 @@ export const DashboardExportModal = ({ errorMessage={errorMessage} onReset={onReset} > - <StyledRootGrid container> - <Grid item xs={10}> - <CheckboxList - list={list} - selectedItems={selectedItems} - setSelectedItems={setSelectedItems} - title="Select Visualisations" - /> - </Grid> - </StyledRootGrid> + <CheckboxList + list={list} + selectedItems={selectedItems} + setSelectedItems={setSelectedItems} + title="Visualisation" + /> </LoadingContainer> </DialogContent> - <DialogFooter> - <StyledRootGrid container> - <Grid item xs={10}> - <FlexEnd> - <TextButton onClick={onClose} disableElevation> - Cancel - </TextButton> - <PrimaryButton - variant="contained" - onClick={exportSelectedItems} - disableElevation - disabled={isExporting} - > - Download - </PrimaryButton> - </FlexEnd> - </Grid> - </StyledRootGrid> - </DialogFooter> </Dialog> ); }; diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/LoginPage.js b/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/LoginPage.js index d76827f653..b20c97a48b 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/LoginPage.js +++ b/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/LoginPage.js @@ -6,20 +6,18 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; import styled from 'styled-components'; import MuiAppBar from '@material-ui/core/AppBar'; import MuiTabs from '@material-ui/core/Tabs'; import Tab from '@material-ui/core/Tab'; import Typography from '@material-ui/core/Typography'; import Box from '@material-ui/core/Box'; + import { LoginForm } from '../../../LoginForm'; import { SignupForm } from '../../../SignupForm'; import { RequestResetPasswordForm } from '../../../RequestResetPasswordForm'; -import { AUTH_VIEW_STATES, OVERLAY_PADDING } from '../../constants'; +import { OVERLAY_PADDING } from '../../constants'; import { DARK_BLUE, LIGHTENED_DARK_BLUE, PRIMARY_BLUE } from '../../../../styles'; -import { setAuthViewState } from '../../../../actions'; function a11yProps(index) { return { @@ -44,11 +42,6 @@ const Tabs = styled(MuiTabs)` } `; -const TabContentWrapper = styled(Box)` - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - padding: 1.5em; - } -`; const TabPanel = ({ children, value, index, ...other }) => { return ( <Typography @@ -59,16 +52,13 @@ const TabPanel = ({ children, value, index, ...other }) => { aria-labelledby={`wrapped-tab-${index}`} {...other} > - <TabContentWrapper>{children}</TabContentWrapper> + <Box p={3}>{children}</Box> </Typography> ); }; const LoginPanel = styled(TabPanel)` - margin: 0; - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { - margin: 0 4em; - } + margin: 0 64px; `; const ContentContainer = styled.div` @@ -79,7 +69,7 @@ const ContentContainer = styled.div` transition: height 0.4 linear; `; -const LoginView = ({ authViewState, updateAuthViewState }) => { +export const LoginPage = () => { const contentMargin = OVERLAY_PADDING.split(' ') .map(x => `-${x}`) .join(' '); @@ -88,51 +78,35 @@ const LoginView = ({ authViewState, updateAuthViewState }) => { const handleCancelReset = React.useCallback(() => setIsRequestingReset(false), []); const handleRequestReset = React.useCallback(() => setIsRequestingReset(true), []); - const handleChange = (_, newValue) => updateAuthViewState(newValue); - const handleLogin = () => updateAuthViewState(AUTH_VIEW_STATES.LOGIN); + const [value, setValue] = React.useState(1); + const handleChange = React.useCallback((_, newValue) => setValue(newValue)); + const handleLogin = React.useCallback(() => setValue(1)); return ( <ContentContainer margin={contentMargin}> <AppBar position="static" color="default"> <Tabs - value={authViewState} + value={value} onChange={handleChange} variant="fullWidth" - aria-label="Login and register form" + aria-label="full width tabs example" > - <Tab label="Register" {...a11yProps(AUTH_VIEW_STATES.REGISTER)} /> + <Tab label="Register" {...a11yProps(0)} /> <Tab label="Log in" {...a11yProps(1)} /> </Tabs> </AppBar> - <TabPanel value={authViewState} index={AUTH_VIEW_STATES.REGISTER}> - <SignupForm handleLogin={handleLogin} /> - </TabPanel> - <LoginPanel value={authViewState} index={AUTH_VIEW_STATES.LOGIN}> - {isRequestingReset ? ( - <RequestResetPasswordForm onClickCancel={handleCancelReset} key="reset" /> - ) : ( - <LoginForm onClickResetPassword={handleRequestReset} /> - )} - </LoginPanel> + <div> + <TabPanel value={value} index={0}> + <SignupForm handleLogin={handleLogin} /> + </TabPanel> + <LoginPanel value={value} index={1}> + {isRequestingReset ? ( + <RequestResetPasswordForm onClickCancel={handleCancelReset} key="reset" /> + ) : ( + <LoginForm onClickResetPassword={handleRequestReset} /> + )} + </LoginPanel> + </div> </ContentContainer> ); }; - -LoginView.propTypes = { - authViewState: PropTypes.oneOf([AUTH_VIEW_STATES.LOGIN, AUTH_VIEW_STATES.REGISTER]).isRequired, - updateAuthViewState: PropTypes.func.isRequired, -}; - -const mapStateToProps = state => { - return { - authViewState: state.authentication.authViewState, - }; -}; - -const mapDispatchToProps = dispatch => { - return { - updateAuthViewState: authViewState => dispatch(setAuthViewState(authViewState)), - }; -}; - -export const LoginPage = connect(mapStateToProps, mapDispatchToProps)(LoginView); diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/index.js b/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/index.js index 4aa96db0ef..24100a7e91 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/index.js +++ b/packages/web-frontend/src/containers/OverlayDiv/components/LandingPage/index.js @@ -5,16 +5,16 @@ * found in the LICENSE file in the root directory of this source tree. */ -import React, { useCallback, useState } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import styled from 'styled-components'; import Button from '@material-ui/core/Button'; import ExploreIcon from '@material-ui/icons/ExploreOutlined'; + import { LoginPage } from './LoginPage'; import { ProjectPage } from '../ProjectPage'; import { OVERLAY_PADDING } from '../../constants'; import { TUPAIA_LIGHT_LOGO_SRC } from '../../../../constants'; -import { useCustomLandingPages } from '../../../../screens/LandingPage/useCustomLandingPages'; const Container = styled.div` display: grid; @@ -45,10 +45,9 @@ const ViewProjectsButton = styled(Button)` `; export const LandingPage = ({ isUserLoggedIn, isViewingProjects }) => { - const [isProjectsPageVisible, setIsProjectsPageVisible] = useState(isViewingProjects); - const showProjects = useCallback(() => setIsProjectsPageVisible(true)); - const hideProjects = useCallback(() => setIsProjectsPageVisible(false)); - const { isCustomLandingPage } = useCustomLandingPages(); + const [isProjectsPageVisible, setIsProjectsPageVisible] = React.useState(isViewingProjects); + const showProjects = React.useCallback(() => setIsProjectsPageVisible(true)); + const hideProjects = React.useCallback(() => setIsProjectsPageVisible(false)); const isLoginPageVisible = !isUserLoggedIn && !isProjectsPageVisible; @@ -59,14 +58,14 @@ export const LandingPage = ({ isUserLoggedIn, isViewingProjects }) => { <TagLine> Data aggregation, analysis, and visualisation for the most remote settings in the world </TagLine> - {!isCustomLandingPage && isLoginPageVisible && ( + {isLoginPageVisible && ( <ViewProjectsButton onClick={showProjects} variant="outlined"> <ExploreIcon /> View projects </ViewProjectsButton> )} </div> {isLoginPageVisible ? ( - <LoginPage /> + <LoginPage isUserLoggedIn={isUserLoggedIn} /> ) : ( <ProjectPage openLoginDialog={hideProjects} isUserLoggedIn={isUserLoggedIn} /> )} diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCard.js b/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCard.js index 0ba64101ab..830d15d74c 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCard.js +++ b/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCard.js @@ -8,7 +8,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { BOX_SHADOW, WHITE, LIGHT_GREY } from '../../../../styles'; +import Lock from '@material-ui/icons/Lock'; +import Alarm from '@material-ui/icons/Alarm'; +import Button from '@material-ui/core/Button'; + +import { BOX_SHADOW, WHITE, LIGHT_GREY, FORM_BLUE, LIGHT_BLUE } from '../../../../styles'; const Card = styled.div` display: grid; @@ -37,11 +41,7 @@ const Header = styled.div` justify-content: center; margin-bottom: 15px; height: 120px; - background-color: ${LIGHT_GREY}; /* fallback color */ - background-image: ${({ backgroundImage }) => `url(${backgroundImage})`}; - background-position: center; - background-repeat: no-repeat; - background-size: cover; + background: ${LIGHT_GREY}; /* fallback color */ > img { width: 100%; @@ -85,10 +85,38 @@ const Footer = styled(FullWidthRow)` padding: 0 16px; `; -export const ProjectCard = ({ name, description, imageUrl, logoUrl, names, projectButton }) => { +const LockIcon = styled(Lock)` + margin-right: 5px; +`; + +const AlarmIcon = styled(Alarm)` + margin-right: 5px; +`; + +const styles = { + pendingAccessButton: { + background: LIGHT_BLUE, + color: FORM_BLUE, + padding: '5px', + }, + accessButton: {}, +}; + +export const ProjectCard = ({ + name, + description, + imageUrl, + logoUrl, + names, + projectAction, + actionText, + accessType, + hasAccessPending, +}) => { return ( <Card> - <Header backgroundImage={imageUrl}> + <Header> + <img alt="project background" src={imageUrl} /> {logoUrl && ( <Logo> <img alt="project logo" src={logoUrl} /> @@ -99,7 +127,16 @@ export const ProjectCard = ({ name, description, imageUrl, logoUrl, names, proje <FullWidthRow>{description}</FullWidthRow> <Footer> <Countries>{name === 'Disaster Response' ? 'Global' : names.sort().join(', ')}</Countries> - {projectButton} + <Button + onClick={projectAction} + color="primary" + style={hasAccessPending ? styles.pendingAccessButton : styles.accessButton} + variant={accessType || hasAccessPending ? 'contained' : 'outlined'} + > + {!accessType && !hasAccessPending && <LockIcon />} + {hasAccessPending && <AlarmIcon />} + {actionText} + </Button> </Footer> </Card> ); @@ -111,7 +148,10 @@ ProjectCard.propTypes = { imageUrl: PropTypes.string.isRequired, logoUrl: PropTypes.string, names: PropTypes.arrayOf(PropTypes.string).isRequired, - projectButton: PropTypes.node.isRequired, + projectAction: PropTypes.func.isRequired, + actionText: PropTypes.string.isRequired, + accessType: PropTypes.bool.isRequired, + hasAccessPending: PropTypes.bool.isRequired, }; ProjectCard.defaultProps = { diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCardList.js b/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCardList.js deleted file mode 100644 index 15e938119b..0000000000 --- a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/ProjectCardList.js +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2021 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Button } from '@material-ui/core'; -import Lock from '@material-ui/icons/Lock'; -import Alarm from '@material-ui/icons/Alarm'; -import { ProjectCard } from './ProjectCard'; -import { PROJECT_ACCESS_TYPES } from '../../../../constants'; -import { FORM_BLUE, LIGHT_BLUE } from '../../../../styles'; -import { getProjectAccessType } from '../../../../utils'; - -const EXPLORE_CODE = 'explore'; -const LockIcon = styled(Lock)` - margin-right: 5px; -`; - -const AlarmIcon = styled(Alarm)` - margin-right: 5px; -`; - -const StyledPendingButton = styled(Button)` - background: ${LIGHT_BLUE}; - color: ${FORM_BLUE}; - padding: 5px; -`; -// eslint-disable-next-line react/prop-types -const ProjectDeniedButton = ({ action, isUserLoggedIn }) => ( - <Button onClick={action} color="primary" variant="outlined"> - <LockIcon /> - {isUserLoggedIn ? 'Request access' : 'Log in'} - </Button> -); - -// eslint-disable-next-line react/prop-types -const ProjectPendingButton = ({ action }) => ( - <StyledPendingButton onClick={action} variant="contained"> - <AlarmIcon /> - Approval in progress - </StyledPendingButton> -); -// eslint-disable-next-line react/prop-types -const ProjectAllowedButton = ({ action }) => ( - <Button onClick={action} variant="contained" color="primary"> - View project - </Button> -); - -export const ProjectCardList = ({ projects, actions, isUserLoggedIn }) => { - const ProjectButtons = { - [PROJECT_ACCESS_TYPES.PENDING]: ProjectPendingButton, - [PROJECT_ACCESS_TYPES.ALLOWED]: ProjectAllowedButton, - [PROJECT_ACCESS_TYPES.DENIED]: ProjectDeniedButton, - }; - const sortedProjects = Object.keys(PROJECT_ACCESS_TYPES).reduce((result, accessType) => { - const action = actions[PROJECT_ACCESS_TYPES[accessType]]; - // If there is no action passed in for this access type, then the project card is useless, so ignore it so that nothing breaks - if (!action) return result; - const accessTypeProjects = projects.filter(({ code, hasAccess, hasPendingAccess = false }) => { - const projectAccessType = getProjectAccessType({ hasPendingAccess, hasAccess }); - return code !== EXPLORE_CODE && projectAccessType === accessType; - }); - return [ - ...result, - ...accessTypeProjects - .sort((a, b) => a.sortOrder - b.sortOrder) - .map(project => ({ - ...project, - ProjectButton: ProjectButtons[accessType], - action: actions[accessType], - })), - ]; - }, []); - return sortedProjects.map(project => { - const { name, description, logoUrl, imageUrl, ProjectButton, names, action } = project; - return ( - <ProjectCard - key={name} - name={name} - description={description} - imageUrl={imageUrl} - logoUrl={logoUrl} - projectButton={ - <ProjectButton action={() => action(project)} isUserLoggedIn={isUserLoggedIn} /> - } - names={names} - /> - ); - }); -}; - -ProjectCardList.propTypes = { - actions: PropTypes.shape({ - [PROJECT_ACCESS_TYPES.ALLOWED]: PropTypes.func.isRequired, - [PROJECT_ACCESS_TYPES.DENIED]: PropTypes.func.isRequired, - [PROJECT_ACCESS_TYPES.PENDING]: PropTypes.func.isRequired, - }), - projects: PropTypes.arrayOf( - PropTypes.shape({ - name: PropTypes.string.isRequired, - description: PropTypes.string.isRequired, - imageUrl: PropTypes.string.isRequired, - logoUrl: PropTypes.string, - names: PropTypes.arrayOf(PropTypes.string).isRequired, - }), - ).isRequired, - isUserLoggedIn: PropTypes.bool.isRequired, -}; diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/index.js b/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/index.js index 6f8bb93d82..1f5eaa42a7 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/index.js +++ b/packages/web-frontend/src/containers/OverlayDiv/components/ProjectPage/index.js @@ -17,8 +17,7 @@ import { } from '../../constants'; import { setProject, setRequestingAccess } from '../../../../projects/actions'; import { setOverlayComponent } from '../../../../actions'; -import { ProjectCardList } from './ProjectCardList'; -import { PROJECT_ACCESS_TYPES } from '../../../../constants'; +import { ProjectCard } from './ProjectCard'; // code for general explore mode project. const EXPLORE_CODE = 'explore'; @@ -46,6 +45,27 @@ const ExploreButton = styled(Button)` } `; +const renderProjectsWithFilter = (projects, accessType, action, actionText) => { + const hasPendingType = accessType === 'pending'; + const hasAccessType = hasPendingType ? false : accessType; + return projects + .filter( + ({ code, hasAccess, hasPendingAccess = false }) => + code !== EXPLORE_CODE && hasAccess === hasAccessType && hasPendingAccess === hasPendingType, + ) + .sort((a, b) => a.sortOrder - b.sortOrder) + .map(project => ( + <ProjectCard + key={project.name} + projectAction={() => action(project)} + actionText={actionText} + accessType={hasAccessType} + hasAccessPending={hasPendingType} + {...project} + /> + )); +}; + const ProjectPageComponent = ({ onSelectProject, onRequestProjectAccess, @@ -59,23 +79,38 @@ const ProjectPageComponent = ({ exploreProject, ]); + const projectsWithAccess = renderProjectsWithFilter( + projects, + true, + onSelectProject, + 'View project', + ); + + const projectsPendingAccess = renderProjectsWithFilter( + projects, + 'pending', + onRequestProjectAccess, + 'Approval in progress', + ); + + const noAccessAction = isUserLoggedIn ? onRequestProjectAccess : openLoginDialog; + const noAccessText = isUserLoggedIn ? 'Request access' : 'Log in'; + const projectsWithoutAccess = renderProjectsWithFilter( + projects, + false, + noAccessAction, + noAccessText, + ); + return ( <div> <ExploreButton onClick={selectExploreProject} variant="outlined"> <ExploreIcon /> I just want to explore </ExploreButton> <Container> - <ProjectCardList - projects={projects} - actions={{ - [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn - ? onRequestProjectAccess - : openLoginDialog, - [PROJECT_ACCESS_TYPES.ALLOWED]: onSelectProject, - [PROJECT_ACCESS_TYPES.PENDING]: onRequestProjectAccess, - }} - isUserLoggedIn={isUserLoggedIn} - /> + {projectsWithAccess} + {projectsPendingAccess} + {projectsWithoutAccess} </Container> </div> ); diff --git a/packages/web-frontend/src/containers/OverlayDiv/components/RequestProjectAccessDialog.js b/packages/web-frontend/src/containers/OverlayDiv/components/RequestProjectAccessDialog.js index cb4c98a336..bc435687d9 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/components/RequestProjectAccessDialog.js +++ b/packages/web-frontend/src/containers/OverlayDiv/components/RequestProjectAccessDialog.js @@ -27,7 +27,6 @@ import { import { LANDING } from '../constants'; import { TUPAIA_LIGHT_LOGO_SRC } from '../../../constants'; import { BLUE, WHITE, GREY } from '../../../styles'; -import { useCustomLandingPages } from '../../../screens/LandingPage/useCustomLandingPages'; const leftPadding = '40px'; @@ -197,7 +196,6 @@ export const RequestProjectAccessComponent = React.memo( success, errorMessage, }) => { - const { isCustomLandingPage } = useCustomLandingPages(); const requestedCountries = countries.filter(c => c.accessRequests.includes(project.code)); const availableCountries = countries.filter(c => !c.accessRequests.includes(project.code)); @@ -206,42 +204,15 @@ export const RequestProjectAccessComponent = React.memo( hideForm = true; const modalMessage = success ? ( - <> - <Alert severity="success"> - Thank you for your access request to {project.name}. We will review your application and - respond by email shortly. - </Alert> - <Note> - Note: This can take some time to process, as requests require formal permission to be - granted. - </Note> - {!isCustomLandingPage && ( - <BackButton onClick={onBackToProjects}>Back to Projects</BackButton> - )} - </> + <SuccessMessage projectName={project.name} onBackToProjects={onBackToProjects} /> ) : ( - <> - <p> - <b>You have already requested access to this project</b> - </p> - <RequestedProjectCountryAccessList - requestedCountries={requestedCountries} - availableCountries={availableCountries} - handleRequest={onRequestProjectAdditionalAccess} - /> - <p> - This can take some time to process, as requests require formal permission to be granted. - </p> - <p> - {`If you have any questions, please email: `} - <a style={styles.contactLink} href="mailto:admin@tupaia.org"> - admin@tupaia.org - </a> - </p> - {!isCustomLandingPage && ( - <BackButton onClick={onBackToProjects}>Back to Projects</BackButton> - )} - </> + <RequestPendingMessage + requestedCountries={requestedCountries} + availableCountries={availableCountries} + setRequestingAdditionalCountryAccess={setRequestingAdditionalCountryAccess} + handleRequest={onRequestProjectAdditionalAccess} + onBackToProjects={onBackToProjects} + /> ); return ( @@ -254,12 +225,10 @@ export const RequestProjectAccessComponent = React.memo( world </TagLine> </div> - {!isCustomLandingPage && ( - <ExploreButton onClick={onBackToProjects} variant="outlined"> - <ExploreIcon /> -   View other projects - </ExploreButton> - )} + <ExploreButton onClick={onBackToProjects} variant="outlined"> + <ExploreIcon /> +   View other projects + </ExploreButton> </Header> <Title>Requesting Project Access @@ -311,6 +280,45 @@ export const RequestProjectAccessComponent = React.memo( }, ); +export const SuccessMessage = ({ projectName, onBackToProjects }) => ( + <> + + Thank you for your access request to {projectName}. We will review your application and + respond by email shortly. + + + Note: This can take some time to process, as requests require formal permission to be granted. + + Back to Projects + +); + +export const RequestPendingMessage = ({ + requestedCountries, + availableCountries, + handleRequest, + onBackToProjects, +}) => ( + <> +

+ You have already requested access to this project +

+ +

This can take some time to process, as requests require formal permission to be granted.

+

+ {`If you have any questions, please email: `} + + admin@tupaia.org + +

+ Back to Projects + +); + export const RequestedProjectCountryAccessList = ({ requestedCountries, availableCountries, @@ -333,12 +341,24 @@ export const RequestedProjectCountryAccessList = ({ ); }; +SuccessMessage.propTypes = { + projectName: PropTypes.string.isRequired, + onBackToProjects: PropTypes.func.isRequired, +}; + RequestedProjectCountryAccessList.propTypes = { requestedCountries: PropTypes.arrayOf(PropTypes.object).isRequired, availableCountries: PropTypes.arrayOf(PropTypes.object).isRequired, handleRequest: PropTypes.func.isRequired, }; +RequestPendingMessage.propTypes = { + requestedCountries: PropTypes.arrayOf(PropTypes.object).isRequired, + availableCountries: PropTypes.arrayOf(PropTypes.object).isRequired, + handleRequest: PropTypes.func.isRequired, + onBackToProjects: PropTypes.func.isRequired, +}; + RequestProjectAccessComponent.propTypes = { project: PropTypes.shape({ name: PropTypes.string, @@ -371,7 +391,7 @@ const mapStateToProps = state => { return { project: requestingAccess, - countries: countries.filter(c => requestingAccess.names?.includes(c.name)), + countries: countries.filter(c => requestingAccess.names.includes(c.name)), isRequestingCountryAccess, isRequestingAdditionalCountryAccess, isLoading: isFetchingCountryAccessData || isRequestingCountryAccess, diff --git a/packages/web-frontend/src/containers/OverlayDiv/constants.js b/packages/web-frontend/src/containers/OverlayDiv/constants.js index 8c30a08605..de20568fe5 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/constants.js +++ b/packages/web-frontend/src/containers/OverlayDiv/constants.js @@ -6,10 +6,6 @@ export const PROJECT_LANDING = 'projectLanding'; export const DISASTER = 'disaster'; export const REQUEST_PROJECT_ACCESS = 'requestProjectAccess'; export const OVERLAY_PADDING = `35px ${isMobile() ? '35px' : '64px'}`; -export const AUTH_VIEW_STATES = { - REGISTER: 0, - LOGIN: 1, -}; export const PROJECTS_WITH_LANDING_PAGES = { aim_demo: true, diff --git a/packages/web-frontend/src/containers/OverlayDiv/index.js b/packages/web-frontend/src/containers/OverlayDiv/index.js index e1465b36c7..adc9bc7263 100644 --- a/packages/web-frontend/src/containers/OverlayDiv/index.js +++ b/packages/web-frontend/src/containers/OverlayDiv/index.js @@ -14,7 +14,7 @@ import MuiCloseIcon from 'material-ui/svg-icons/navigation/close'; import styled from 'styled-components'; import { isMobile } from '../../utils'; import { DARK_BLUE, DIALOG_Z_INDEX } from '../../styles'; -import { closeUserPage, setOverlayComponent } from '../../actions'; +import { setOverlayComponent } from '../../actions'; import { setProject } from '../../projects/actions'; import { LandingPage } from './components/LandingPage'; import { ProjectLandingPage } from './components/ProjectLandingPage'; @@ -140,7 +140,6 @@ const mergeProps = (stateProps, { dispatch }, ownProps) => ({ viewProjectList: () => dispatch(setOverlayComponent(LANDING)), closeOverlay: () => { dispatch(setOverlayComponent(null)); - dispatch(closeUserPage()); }, }); diff --git a/packages/web-frontend/src/containers/TopBar/index.js b/packages/web-frontend/src/containers/TopBar/index.js index 2c048ad15a..b9902c6217 100644 --- a/packages/web-frontend/src/containers/TopBar/index.js +++ b/packages/web-frontend/src/containers/TopBar/index.js @@ -6,59 +6,32 @@ */ import React from 'react'; -import styled from 'styled-components'; -import TopBarLogo from '../TopBarLogo'; +import TupaiaHome from '../TupaiaHome'; import SearchBar from '../SearchBar'; import UserBar from '../UserBar'; -import { DARK_BLUE, TOP_BAR_HEIGHT, TOP_BAR_HEIGHT_MOBILE, WHITE } from '../../styles'; -import { useCustomLandingPages } from '../../screens/LandingPage/useCustomLandingPages'; +import { TOP_BAR_HEIGHT } from '../../styles'; -// Both min height and height must be specified due to bugs in Firefox flexbox -// that means that topbar height will be ignored even if using flex-basis. -const TopBarWrapper = styled.div` - background-color: ${props => props.primaryColor}; - min-height: ${TOP_BAR_HEIGHT_MOBILE}px; - box-sizing: border-box; - display: flex; - z-index: 1000; - position: relative; - padding: 0 10px; - border-bottom: 1px solid rgba(151, 151, 151, 0.3); - > * { - background-color: ${props => props.primaryColor}; - } - button, - a, - p, - h1, - li { - color: ${props => props.secondaryColor}; - } - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - min-height: ${TOP_BAR_HEIGHT}px; - height: ${TOP_BAR_HEIGHT}px; - } -`; - -const TopBar = () => { - const { isCustomLandingPage, customLandingPageSettings } = useCustomLandingPages(); - let primaryColor = DARK_BLUE; - let secondaryColor = WHITE; - - // If a custom landing page is being used, use the primary and secondary colors from settings if set, else default back to the original colors - if (isCustomLandingPage) { - primaryColor = customLandingPageSettings.primaryHexcode || DARK_BLUE; - secondaryColor = customLandingPageSettings.secondaryHexcode || WHITE; - } - - return ( - - - {/** only display the search bar when not in a custom landing page */} - {!isCustomLandingPage && } - - - ); +const styles = { + topBar: { + backgroundColor: '#282a35', + // Both min height and height must be specified due to bugs in Firefox flexbox + // that means that topbar height will be ignored even if using flex-basis. + minHeight: TOP_BAR_HEIGHT, + height: TOP_BAR_HEIGHT, + display: 'flex', + zIndex: 1000, + position: 'relative', + padding: '0 10px', + borderBottom: '1px solid rgba(151, 151, 151, 0.3)', + }, }; +const TopBar = () => ( +
+ + + +
+); + export default TopBar; diff --git a/packages/web-frontend/src/containers/TopBarLogo/index.js b/packages/web-frontend/src/containers/TopBarLogo/index.js deleted file mode 100644 index 0439aadc4d..0000000000 --- a/packages/web-frontend/src/containers/TopBarLogo/index.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Tupaia Web - * Copyright (c) 2019 Beyond Essential Systems Pty Ltd. - * This source code is licensed under the AGPL-3.0 license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * TupaiaHome - * - * Home button for the app, center top of map. - */ - -import React from 'react'; -import styled from 'styled-components'; -import { connect } from 'react-redux'; -import PropTypes from 'prop-types'; -import { Typography } from '@material-ui/core'; -import { useCustomLandingPages } from '../../screens/LandingPage/useCustomLandingPages'; -import { TUPAIA_LIGHT_LOGO_SRC } from '../../constants'; -import { goHome } from '../../actions'; - -const LogoWrapper = styled.div` - flex-grow: 1; - height: 100%; - box-sizing: border-box; - display: flex; - align-items: center; -`; - -const LogoImage = styled.img` - max-height: 40px; // 80% of top bar height - width: auto; - max-width: 50px; - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - max-width: 100%; - max-height: 48px; // 80% of top bar height - } -`; - -const LogoButton = styled.button` - cursor: pointer; - pointer-events: auto; - padding: 0.5em; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - background: none; - border: none; -`; - -const Name = styled(Typography)` - font-style: normal; - font-weight: ${props => props.theme.typography.fontWeightBold}; - font-size: 1rem; - line-height: 1.4; - letter-spacing: 0.1rem; - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - font-size: 1.2rem; - } - @media screen and (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { - font-size: 1.5rem; - } -`; - -const NameWrapper = styled.div` - max-width: 100%; - ${LogoImage} + & { - margin-left: 1.2rem; - } -`; - -// If logo is from a custom landing page, don't wrap in clickable button -const Logo = ({ isCustomLandingPage, children, onClick }) => - isCustomLandingPage ? children : {children}; - -export const TopBarLogoComponent = ({ onClickLogo }) => { - const { isCustomLandingPage, customLandingPageSettings = {} } = useCustomLandingPages(); - const { - name, - includeNameInHeader: displayName = false, - logoUrl: customLandingPageLogo, - } = customLandingPageSettings; - - // If is a custom landing page, use the logo from the settings, else use the Tupaia logo - const logoSrc = - isCustomLandingPage && customLandingPageLogo ? customLandingPageLogo : TUPAIA_LIGHT_LOGO_SRC; - return ( - - - - {/** If a custom landing page has set to display the name in the header, display it here */} - {displayName && ( - - {name} - - )} - - - ); -}; - -TopBarLogoComponent.propTypes = { - onClickLogo: PropTypes.func.isRequired, -}; - -const mapDispatchToProps = dispatch => ({ - onClickLogo: () => dispatch(goHome()), -}); - -export default connect(null, mapDispatchToProps)(TopBarLogoComponent); diff --git a/packages/web-frontend/src/containers/TupaiaHome/index.js b/packages/web-frontend/src/containers/TupaiaHome/index.js new file mode 100644 index 0000000000..055813fc21 --- /dev/null +++ b/packages/web-frontend/src/containers/TupaiaHome/index.js @@ -0,0 +1,56 @@ +/** + * Tupaia Web + * Copyright (c) 2019 Beyond Essential Systems Pty Ltd. + * This source code is licensed under the AGPL-3.0 license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * TupaiaHome + * + * Home button for the app, center top of map. + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { goHome } from '../../actions'; +import { TUPAIA_LIGHT_LOGO_SRC } from '../../constants'; + +const styles = { + logo: { + flexGrow: 1, + }, + logoImage: { + height: 36, + width: 'auto', + margin: 12, + cursor: 'pointer', + pointerEvents: 'auto', + }, +}; + +export const TupaiaHomeComponent = ({ goHome }) => { + return ( +
+ Tupaia logo +
+ ); +}; + +TupaiaHomeComponent.propTypes = { + goHome: PropTypes.func.isRequired, +}; + +const mapDispatchToProps = dispatch => ({ + goHome: () => { + dispatch(goHome()); + }, +}); + +export default connect(null, mapDispatchToProps)(TupaiaHomeComponent); diff --git a/packages/web-frontend/src/containers/UserBar/index.js b/packages/web-frontend/src/containers/UserBar/index.js index 4dcb357b55..bd56c1e8dd 100644 --- a/packages/web-frontend/src/containers/UserBar/index.js +++ b/packages/web-frontend/src/containers/UserBar/index.js @@ -12,11 +12,11 @@ */ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { connect } from 'react-redux'; import Dialog from '@material-ui/core/Dialog'; import DialogContent from '@material-ui/core/DialogContent'; import DialogTitle from '@material-ui/core/DialogTitle'; + import { closeUserPage, openUserPage, @@ -29,7 +29,6 @@ import { DIALOG_PAGE_REQUEST_COUNTRY_ACCESS, DIALOG_PAGE_VERIFICATION_PAGE, DIALOG_PAGE_ONE_TIME_LOGIN, - setAuthViewState, goHome, } from '../../actions'; import { LoginForm } from '../LoginForm'; @@ -39,26 +38,11 @@ import { SignupForm } from '../SignupForm'; import { ChangePasswordForm } from '../ChangePasswordForm'; import { RequestCountryAccessForm } from '../RequestCountryAccessForm'; import UserMenu from '../UserMenu'; -import { LANDING, AUTH_VIEW_STATES } from '../OverlayDiv/constants'; -import { DARK_BLUE, WHITE } from '../../styles'; +import { LANDING, VIEW_PROJECTS } from '../OverlayDiv/constants'; +import { USER_BAR_STYLES, DARK_BLUE, WHITE } from '../../styles'; import { OneTimeLoginForm } from '../ResetPasswordOneTimeLoginForm'; import { LightThemeProvider } from '../../styles/LightThemeProvider'; -const UserBarWrapper = styled.div` - margin-left: 10px; - display: flex; - justify-content: flex-end; - position: relative; -`; - -const UserBarContainer = styled.div` - border-radius: 8px; - pointer-events: auto; - cursor: auto; - display: flex; - justify-content: space-around; -`; - export class UserBar extends Component { getDialogTitle() { const { dialogPage } = this.props; @@ -111,7 +95,7 @@ export class UserBar extends Component { /* Don't let the user close a dialog if it is a password reset form as the one time login token is used to load the form and so they need to do the password reset now */ handleCloseDialog = () => { const { dialogPage, onCloseUserDialog, resetToHome } = this.props; - if (dialogPage === DIALOG_PAGE_RESET_PASSWORD) return; + if(dialogPage === DIALOG_PAGE_RESET_PASSWORD) return; if (dialogPage === DIALOG_PAGE_ONE_TIME_LOGIN) { resetToHome(); } @@ -140,12 +124,7 @@ export class UserBar extends Component { } renderDialogContent() { - const { - dialogPage, - onOpenUserPage, - onCloseUserDialog, - onNavigateToRequestPasswordReset, - } = this.props; + const { dialogPage, onOpenUserPage, onCloseUserDialog, onOpenLandingPage } = this.props; switch (dialogPage) { case DIALOG_PAGE_LOGIN: @@ -159,7 +138,13 @@ export class UserBar extends Component { case DIALOG_PAGE_ONE_TIME_LOGIN: return ( - + { + // This prop can be changed to a simple link/removed after url based routing implemented in #770 + onCloseUserDialog(); + onOpenLandingPage(); + }} + /> ); @@ -205,20 +190,24 @@ export class UserBar extends Component { const form = this.renderDialog(); return ( - - - +
+
+ - +
{form} - +
); } } UserBar.propTypes = { onOpenUserPage: PropTypes.func.isRequired, - onNavigateToRequestPasswordReset: PropTypes.func.isRequired, + onOpenLandingPage: PropTypes.func.isRequired, + onOpenViewProjects: PropTypes.func.isRequired, onCloseUserDialog: PropTypes.func.isRequired, isDialogVisible: PropTypes.bool.isRequired, dialogPage: PropTypes.oneOf([ @@ -264,11 +253,8 @@ const mapStateToProps = state => { const mapDispatchToProps = dispatch => { return { onCloseUserDialog: () => dispatch(closeUserPage()), - onNavigateToRequestPasswordReset: () => { - dispatch(setOverlayComponent(LANDING)); - dispatch(setAuthViewState(AUTH_VIEW_STATES.LOGIN)); - dispatch(closeUserPage()); - }, + onOpenLandingPage: () => dispatch(setOverlayComponent(LANDING)), + onOpenViewProjects: () => dispatch(setOverlayComponent(VIEW_PROJECTS)), onOpenUserPage: userPage => dispatch(openUserPage(userPage)), resetToHome: () => dispatch(goHome()), }; diff --git a/packages/web-frontend/src/containers/UserMenu/DrawerMenu.js b/packages/web-frontend/src/containers/UserMenu/DrawerMenu.js deleted file mode 100644 index 1b1b2d944a..0000000000 --- a/packages/web-frontend/src/containers/UserMenu/DrawerMenu.js +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { Drawer } from '@material-ui/core'; -import { IconButton } from '@tupaia/ui-components'; -import CloseIcon from '@material-ui/icons/Close'; -import { MenuItem, MenuList } from './MenuList'; -import { DARK_BLUE, WHITE } from '../../styles'; - -/** - * DrawerMenu is a drawer menu used when the user is on a mobile device - */ - -const MenuWrapper = styled.div` - padding: 0 1.5em; - li a, - li button { - font-size: 1.2em; - padding: 0.8em; - line-height: 1.4; - text-align: left; - width: 100%; - font-weight: ${props => props.theme.typography.fontWeightRegular}; - color: inherit; - } - a > span { - text-decoration: underline; - } -`; - -const Username = styled.p` - font-weight: ${props => props.theme.typography.fontWeightMedium}; - text-transform: uppercase; - margin: 0; - width: 100%; - padding: 0 1em; -`; - -const MenuHeaderWrapper = styled.div` - padding: 0; -`; - -const MenuHeaderContainer = styled.div` - border-bottom: 1px solid ${({ secondaryColor }) => secondaryColor}; - display: flex; - justify-content: flex-end; - padding: 0.8em 0; - align-items: center; - color: ${({ secondaryColor }) => secondaryColor}; -`; - -const MenuCloseIcon = styled(CloseIcon)` - width: 1.2em; - height: 1.2em; - fill: ${({ secondaryColor }) => secondaryColor}; -`; - -const MenuCloseButton = styled(IconButton)` - padding: 0; -`; - -export const DrawerMenu = ({ - children, - menuOpen, - onCloseMenu, - primaryColor, - secondaryColor, - onClickSignIn, - onClickRegister, - isUserLoggedIn, - currentUserUsername, -}) => { - return ( - - - - - {currentUserUsername && {currentUserUsername}} - - - - - - - {/** If the user is not logged in, show the register and login buttons */} - {!isUserLoggedIn && ( - <> - - Log in - - - Register - - - )} - {children} - - - - ); -}; - -DrawerMenu.propTypes = { - children: PropTypes.node.isRequired, - menuOpen: PropTypes.bool.isRequired, - onCloseMenu: PropTypes.func.isRequired, - primaryColor: PropTypes.string, - secondaryColor: PropTypes.string, - onClickSignIn: PropTypes.func.isRequired, - onClickRegister: PropTypes.func.isRequired, - isUserLoggedIn: PropTypes.bool.isRequired, - currentUserUsername: PropTypes.string, -}; - -DrawerMenu.defaultProps = { - currentUserUsername: null, - primaryColor: DARK_BLUE, - secondaryColor: WHITE, -}; diff --git a/packages/web-frontend/src/containers/UserMenu/MenuList.js b/packages/web-frontend/src/containers/UserMenu/MenuList.js deleted file mode 100644 index 87885df458..0000000000 --- a/packages/web-frontend/src/containers/UserMenu/MenuList.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { Button, Link, ListItem } from '@material-ui/core'; - -/** - * Menulist is a component that displays a list of menu items for the hamburger menu - */ -const MenuListWrapper = styled.ul` - list-style: none; - margin-block-start: 0; - margin-block-end: 0; - padding-inline-start: 0; - * { - color: ${({ secondaryColor }) => secondaryColor}; - } -`; - -const MenuItemButton = styled(Button)` - text-transform: none; - font-size: 1rem; - font-weight: ${props => props.theme.typography.fontWeightRegular}; - padding: 0.4em 1em; - line-height: 1.4; - width: 100%; - justify-content: flex-start; -`; -const MenuItemLink = styled(Link)` - font-size: 1rem; - padding: 0.4em 1em; - line-height: 1.4; - width: 100%; - text-decoration: none; - &:hover, - &:focus { - text-decoration: none; - background-color: rgba(255, 255, 255, 0.08); - } -`; - -const MenuListItem = styled(ListItem)` - padding: 0; - color: ${({ secondaryColor }) => secondaryColor}; -`; - -// If is a link, use a link component, else a button so that we have correct semantic HTML -export const MenuItem = ({ href, children, onClick, onCloseMenu, secondaryColor }) => { - const handleClickMenuItem = () => { - if (onClick) onClick(); - onCloseMenu(); - }; - return ( - - {href ? ( - - {children} - - ) : ( - {children} - )} - - ); -}; - -MenuItem.propTypes = { - href: PropTypes.string, - children: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired, - onCloseMenu: PropTypes.func.isRequired, - onClick: PropTypes.func, -}; - -MenuItem.defaultProps = { - href: null, - onClick: null, -}; - -export const MenuList = ({ children, secondaryColor }) => { - return {children}; -}; - -MenuList.propTypes = { - children: PropTypes.node.isRequired, - secondaryColor: PropTypes.string.isRequired, -}; diff --git a/packages/web-frontend/src/containers/UserMenu/PopoverMenu.js b/packages/web-frontend/src/containers/UserMenu/PopoverMenu.js deleted file mode 100644 index 87ab9f0ddb..0000000000 --- a/packages/web-frontend/src/containers/UserMenu/PopoverMenu.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import { Popover } from '@material-ui/core'; -import { MenuList } from './MenuList'; - -/** - * PopoverMenu is a popover menu used when the user is on a desktop device - */ - -export const PopoverMenu = ({ children, primaryColor, menuOpen, onCloseMenu, secondaryColor }) => { - return ( - document.getElementById('user-menu-button')} - onClose={onCloseMenu} - anchorOrigin={{ - vertical: 'bottom', - horizontal: 'right', - }} - transformOrigin={{ - vertical: 'top', - horizontal: 'right', - }} - > - {children} - - ); -}; - -PopoverMenu.propTypes = { - children: PropTypes.node.isRequired, - menuOpen: PropTypes.bool.isRequired, - onCloseMenu: PropTypes.func.isRequired, - primaryColor: PropTypes.string.isRequired, - secondaryColor: PropTypes.string.isRequired, -}; diff --git a/packages/web-frontend/src/containers/UserMenu/UserInfo.js b/packages/web-frontend/src/containers/UserMenu/UserInfo.js deleted file mode 100644 index ff02bfe837..0000000000 --- a/packages/web-frontend/src/containers/UserMenu/UserInfo.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Button } from '@material-ui/core'; - -/** - * UserInfo is a component that displays the user's name if user is logged in, or a register and sign in button if not set - */ -const UsernameContainer = styled.p` - padding-right: 1.5rem; - padding-right: ${({ isCustomLandingPage }) => (isCustomLandingPage ? '1.5rem' : '5px')}; - margin: 0; - font-weight: ${({ isCustomLandingPage, theme }) => - isCustomLandingPage ? theme.typography.fontWeightMedium : theme.typography.fontWeightRegular}; - font-size: 0.875rem; - text-transform: ${({ isCustomLandingPage }) => (isCustomLandingPage ? 'uppercase' : 'none')}; -`; - -const RegisterButton = styled(Button)` - text-transform: none; - margin-right: 1.3rem; -`; - -const SignInButton = styled(Button)` - text-transform: none; - border: 1px solid ${props => props.secondaryColor}; - border-radius: 18px; - font-weight: ${props => props.theme.typography.fontWeightMedium}; - height: 30px; - margin-right: 1.7rem; - padding-left: 1em; - padding-right: 1em; -`; - -export const UserInfo = ({ - currentUserUsername, - onClickRegister, - signInText, - onClickSignIn, - isCustomLandingPage, - secondaryColor, - showRegisterButton, -}) => { - if (currentUserUsername) - return ( - - {currentUserUsername} - - ); - return ( - <> - {showRegisterButton && Register} - - {signInText} - - - ); -}; - -UserInfo.propTypes = { - currentUserUsername: PropTypes.string, - onClickRegister: PropTypes.func.isRequired, - signInText: PropTypes.string, - onClickSignIn: PropTypes.func.isRequired, - isCustomLandingPage: PropTypes.bool, - secondaryColor: PropTypes.string.isRequired, - showRegisterButton: PropTypes.bool, -}; - -UserInfo.defaultProps = { - currentUserUsername: null, - showRegisterButton: false, - signInText: 'Sign in', - isCustomLandingPage: false, -}; diff --git a/packages/web-frontend/src/containers/UserMenu/index.js b/packages/web-frontend/src/containers/UserMenu/index.js index 65cd5ce168..93e77fbb97 100644 --- a/packages/web-frontend/src/containers/UserMenu/index.js +++ b/packages/web-frontend/src/containers/UserMenu/index.js @@ -9,207 +9,262 @@ * UserMenu * * The controls for user Menu: show signIn option and loginForm. - * If user is logged in, shows username and SignOut option. + * If user is logged in, shows username and SingOut option. */ -import React, { useState } from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; + import styled from 'styled-components'; import MenuIcon from '@material-ui/icons/Menu'; -import { Button } from '@material-ui/core'; -import { DARK_BLUE, WHITE } from '../../styles'; -import { useCustomLandingPages } from '../../screens/LandingPage/useCustomLandingPages'; +import Button from '@material-ui/core/Button'; +import Popover from '@material-ui/core/Popover'; +import MenuItem from '@material-ui/core/MenuItem'; import { - DIALOG_PAGE_CHANGE_PASSWORD, - DIALOG_PAGE_REQUEST_COUNTRY_ACCESS, - attemptLandingPageLogout, attemptUserLogout, closeDropdownOverlays, openUserPage, - setAuthViewState, - setOverlayComponent, + DIALOG_PAGE_LOGIN, + DIALOG_PAGE_CHANGE_PASSWORD, + DIALOG_PAGE_REQUEST_COUNTRY_ACCESS, } from '../../actions'; -import { LANDING, AUTH_VIEW_STATES, VIEW_PROJECTS } from '../OverlayDiv/constants'; -import { isMobile } from '../../utils'; -import { PopoverMenu } from './PopoverMenu'; -import { DrawerMenu } from './DrawerMenu'; -import { UserInfo } from './UserInfo'; -import { MenuItem } from './MenuList'; +import { DARK_BLUE } from '../../styles'; + +const LOG_IN_ITEM = 'LOG_IN_ITEM'; +const PROJECTS_ITEM = 'PROJECTS_ITEM'; +const CHANGE_PASSWORD_ITEM = 'CHANGE_PASSWORD_ITEM'; +const REQUEST_COUNTRY_ACCESS_ITEM = 'REQUEST_COUNTRY_ACCESS_ITEM'; +const LOG_OUT_ITEM = 'LOG_OUT_ITEM'; const UserMenuContainer = styled.div` display: flex; align-items: center; - color: ${props => props.secondaryColor}; +`; + +const SignInButton = styled(Button)` + text-transform: none; + + border-color: ${props => props.theme.palette.text.primary}; + border: 1px; + border-style: solid; + border-radius: 18px; + + font-weight: 400; + height: 30px; + margin-right: 5px; `; const StyledMenuButton = styled(Button)` - width: 2em; - min-width: 2em; - height: 2em; - text-align: right; - padding: 0; + width: 32px; + min-width: 32px; + height: 32px; `; const StyledMenuIcon = styled(MenuIcon)` - width: 100%; - height: 100%; + width: 28px; + height: 28px; `; -const UserMenu = ({ - isUserLoggedIn, - currentUserUsername, - onClickSignIn, - onOpenViewProjects, - onToggleChangePasswordPanel, - onToggleRequestCountryAccessPanel, - onAttemptUserLogout, - onClickRegister, - onAttemptLandingPageLogout, -}) => { - const { isCustomLandingPage, customLandingPageSettings = {} } = useCustomLandingPages(); - const [menuOpen, setMenuOpen] = useState(false); - const { - secondaryHexcode: customLandingPageSecondaryColor, - primaryHexcode: customLandingPagePrimaryColor, - } = customLandingPageSettings; +const UsernameContainer = styled.div` + padding-right: 5px; + color: ${props => props.theme.palette.text.primary}; + font-weight: 400; + font-size: 0.875rem; +`; - const primaryColor = customLandingPagePrimaryColor || DARK_BLUE; - const secondaryColor = customLandingPageSecondaryColor || WHITE; +const SignInContainer = styled.span` + padding-right: 4px; + padding-left: 4px; +`; - const isDrawer = isMobile(); +const openHelpCenter = () => + window + .open('https://beyond-essential.slab.com/posts/tupaia-instruction-manuals-05nke1dm', '_blank') + .focus(); - // When is mobile, use a drawer menu, otherwise use a popover menu - const MenuComponent = isDrawer ? DrawerMenu : PopoverMenu; +class UserMenu extends Component { + constructor(props) { + super(props); - const toggleUserMenu = () => { - setMenuOpen(!menuOpen); - }; + this.state = { + menuOpen: false, + }; + } - const onCloseMenu = () => { - setMenuOpen(false); - }; + toggleUserMenu(isMenuOpen) { + this.setState({ + menuOpen: !isMenuOpen, + }); + } + + closeUserMenu() { + this.setState({ + menuOpen: false, + }); + } - // Create the menu items - const BaseMenuItem = ({ children, ...props }) => ( - - {children} - - ); - - const VisitMainSite = ( - - Visit tupaia.org - - ); - - const ViewProjects = View projects; - - const HelpCentre = ( - - Help centre - - ); - const Logout = ( - - Logout - - ); - const ChangePassword = ( - Change password - ); - // The custom landing pages need different menu items to the other views - const customLandingPageMenuItems = isUserLoggedIn - ? [VisitMainSite, ChangePassword, Logout] - : [VisitMainSite]; - - const baseMenuItems = isUserLoggedIn - ? [ - ViewProjects, - ChangePassword, - - Request country access - , - HelpCentre, - Logout, - ] - : [ViewProjects, HelpCentre]; - - // The different types of menus need different props, so handle this here and give the correct ones - const menuProps = isDrawer - ? { - primaryColor, - menuOpen, - onCloseMenu, - secondaryColor, - onClickSignIn, - onClickRegister, - isUserLoggedIn, - currentUserUsername, - } - : { primaryColor, menuOpen, onCloseMenu, secondaryColor }; - - return ( - - {/** Only display the user info before the menu button if user is not on a mobile device, as the drawer menu handles this for mobile devices */} - {!isDrawer && ( - - )} - - - - - {isCustomLandingPage ? customLandingPageMenuItems : baseMenuItems} - - - ); + selectMenuItem(item) { + switch (item) { + case LOG_IN_ITEM: + this.props.onToggleLoginPanel(); + break; + + case PROJECTS_ITEM: + this.props.onToggleProjectsPanel(); + break; + + case CHANGE_PASSWORD_ITEM: + this.props.onToggleChangePasswordPanel(); + break; + + case REQUEST_COUNTRY_ACCESS_ITEM: + this.props.onToggleRequestCountryAccessPanel(); + break; + + case LOG_OUT_ITEM: + default: + this.props.onAttemptUserLogout(); + break; + } + this.closeUserMenu(); + } + + render() { + const { isUserLoggedIn, currentUserUsername, openLandingPage, openViewProjects } = this.props; + + const Menu = ({ children: menuItems }) => ( +
+ this.toggleUserMenu(this.state.menuOpen)} + style={styles.username} + disableRipple + id="user-menu-button" + > + + + document.getElementById('user-menu-button')} + onClose={() => this.closeUserMenu()} + anchorOrigin={{ + vertical: 'bottom', + horizontal: 'right', + }} + transformOrigin={{ + vertical: 'top', + horizontal: 'right', + }} + > + {menuItems} + +
+ ); + + const ViewProjects = () => ( + { + openViewProjects(); + this.closeUserMenu(); + }} + > + View projects + + ); + + const HelpCenter = () => ( + { + openHelpCenter(); + this.closeUserMenu(); + }} + > + Help centre + + ); + + if (!isUserLoggedIn) { + return ( + + openLandingPage()}> + Sign in / Register + + + + + + + ); + } + + return ( + + {currentUserUsername} + + + this.selectMenuItem(CHANGE_PASSWORD_ITEM)}> + Change password + + this.selectMenuItem(REQUEST_COUNTRY_ACCESS_ITEM)}> + Request country access + + + this.selectMenuItem(LOG_OUT_ITEM)}>Log out + + + ); + } +} + +const styles = { + menu: { + textAlign: 'right', + }, + username: { + textAlign: 'right', + }, }; UserMenu.propTypes = { isUserLoggedIn: PropTypes.bool.isRequired, - onClickSignIn: PropTypes.func.isRequired, + onAttemptUserLogout: PropTypes.func.isRequired, + openLandingPage: PropTypes.func.isRequired, + openViewProjects: PropTypes.func.isRequired, currentUserUsername: PropTypes.string.isRequired, - onOpenViewProjects: PropTypes.func.isRequired, + onToggleLoginPanel: PropTypes.func.isRequired, + onToggleProjectsPanel: PropTypes.func.isRequired, onToggleChangePasswordPanel: PropTypes.func.isRequired, onToggleRequestCountryAccessPanel: PropTypes.func.isRequired, - onAttemptUserLogout: PropTypes.func.isRequired, - onClickRegister: PropTypes.func.isRequired, - onAttemptLandingPageLogout: PropTypes.func.isRequired, }; const mapStateToProps = state => { - const { isUserLoggedIn, currentUserUsername } = state.authentication; + const { + isUserLoggedIn, + currentUserUsername, + isRequestingLogin, + loginFailedMessage, + } = state.authentication; + return { isUserLoggedIn, - currentUserUsername: isUserLoggedIn ? currentUserUsername : null, + currentUserUsername, + isRequestingLogin, + loginFailedMessage, }; }; const mapDispatchToProps = dispatch => { return { - onOpenViewProjects: () => dispatch(setOverlayComponent(VIEW_PROJECTS)), + onToggleLoginPanel: () => + dispatch(closeDropdownOverlays()) && dispatch(openUserPage(DIALOG_PAGE_LOGIN)), + onToggleProjectsPanel: () => + dispatch(closeDropdownOverlays()) && dispatch(openUserPage(DIALOG_PAGE_LOGIN)), onToggleChangePasswordPanel: () => dispatch(closeDropdownOverlays()) && dispatch(openUserPage(DIALOG_PAGE_CHANGE_PASSWORD)), onToggleRequestCountryAccessPanel: () => dispatch(closeDropdownOverlays()) && dispatch(openUserPage(DIALOG_PAGE_REQUEST_COUNTRY_ACCESS)), - onClickSignIn: () => { - dispatch(setOverlayComponent(LANDING)); - dispatch(setAuthViewState(AUTH_VIEW_STATES.LOGIN)); - }, onAttemptUserLogout: () => dispatch(attemptUserLogout()), - onClickRegister: () => { - dispatch(setOverlayComponent(LANDING)); - dispatch(setAuthViewState(AUTH_VIEW_STATES.REGISTER)); - }, - onAttemptLandingPageLogout: () => dispatch(attemptLandingPageLogout()), }; }; diff --git a/packages/web-frontend/src/projects/actions.js b/packages/web-frontend/src/projects/actions.js index cb6f363669..91dfcae54a 100644 --- a/packages/web-frontend/src/projects/actions.js +++ b/packages/web-frontend/src/projects/actions.js @@ -10,7 +10,6 @@ import { SET_PROJECT_DATA, FETCH_PROJECTS_ERROR, REQUEST_PROJECT_ACCESS, - CLEAR_CUSTOM_LANDING_PAGE_DATA, } from '../actions'; export function setProject(projectCode) { @@ -37,9 +36,3 @@ export function setRequestingAccess(project) { project, }; } - -export function clearCustomLandingPageData() { - return { - type: CLEAR_CUSTOM_LANDING_PAGE_DATA, - }; -} diff --git a/packages/web-frontend/src/projects/reducers.js b/packages/web-frontend/src/projects/reducers.js index d3aa854436..fe0d42daf2 100644 --- a/packages/web-frontend/src/projects/reducers.js +++ b/packages/web-frontend/src/projects/reducers.js @@ -5,31 +5,17 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { - SET_PROJECT_DATA, - REQUEST_PROJECT_ACCESS, - SET_CUSTOM_LANDING_PAGE_DATA, - CLEAR_CUSTOM_LANDING_PAGE_DATA, - CUSTOM_LANDING_PAGE_LOADING, - FETCH_LOGIN_SUCCESS, -} from '../actions'; +import { SET_PROJECT_DATA, REQUEST_PROJECT_ACCESS } from '../actions'; export default function projects( state = { projects: [], - isLoadingCustomLandingPage: true, - customLandingPage: null, requestingAccess: null, error: '', }, action, ) { switch (action.type) { - case FETCH_LOGIN_SUCCESS: - return { - ...state, - projects: [], - }; case SET_PROJECT_DATA: return { ...state, @@ -40,22 +26,6 @@ export default function projects( ...state, requestingAccess: action.project, }; - case CUSTOM_LANDING_PAGE_LOADING: - return { - ...state, - isLoadingCustomLandingPage: action.isLoading, - }; - case SET_CUSTOM_LANDING_PAGE_DATA: - return { - ...state, - customLandingPage: action.data, - isLoadingCustomLandingPage: false, - }; - case CLEAR_CUSTOM_LANDING_PAGE_DATA: - return { - ...state, - customLandingPage: null, - }; default: return state; } diff --git a/packages/web-frontend/src/projects/sagas.js b/packages/web-frontend/src/projects/sagas.js index 2da75eb154..e95907de11 100644 --- a/packages/web-frontend/src/projects/sagas.js +++ b/packages/web-frontend/src/projects/sagas.js @@ -3,14 +3,7 @@ import { call, put, take, takeLatest, select } from 'redux-saga/effects'; import request from '../utils/request'; import { setProjects, fetchProjectsError } from './actions'; -import { - SET_PROJECT, - setOrgUnit, - FETCH_LOGOUT_SUCCESS, - FETCH_LANDING_PAGE_LOGOUT_SUCCESS, - SET_CUSTOM_LANDING_PAGE_DATA, - CUSTOM_LANDING_PAGE_LOADING, -} from '../actions'; +import { SET_PROJECT, setOrgUnit, FETCH_LOGOUT_SUCCESS } from '../actions'; import { selectProjectByCode, selectCurrentOrgUnitCode } from '../selectors'; export function* fetchProjectData() { @@ -23,41 +16,10 @@ export function* fetchProjectData() { } } -export function* fetchCustomLandingPageData() { - try { - yield put({ - type: CUSTOM_LANDING_PAGE_LOADING, - isLoading: true, - }); - const { routing: location } = yield select(); - const urlSegment = location.pathname.split('/')[1]; - - if (urlSegment) { - const data = yield call(request, `landingPage/${urlSegment}`); - yield put({ - type: SET_CUSTOM_LANDING_PAGE_DATA, - data, - }); - } - } catch (error) { - // eslint-disable-next-line no-console - console.error(error); - } finally { - yield put({ - type: CUSTOM_LANDING_PAGE_LOADING, - isLoading: false, - }); - } -} - function* watchUserLogoutSuccessAndRefetchProjectData() { yield takeLatest(FETCH_LOGOUT_SUCCESS, fetchProjectData); } -function* watchLandingPageLogoutSuccessAndRefetchProjectData() { - yield takeLatest(FETCH_LANDING_PAGE_LOGOUT_SUCCESS, fetchProjectData); -} - function* loadProject(action) { let state = yield select(); if (state.project.projects.length === 0) { @@ -81,8 +43,4 @@ function* watchSelectProjectAndLoadProjectState() { yield takeLatest(SET_PROJECT, loadProject); } -export default [ - watchSelectProjectAndLoadProjectState, - watchUserLogoutSuccessAndRefetchProjectData, - watchLandingPageLogoutSuccessAndRefetchProjectData, -]; +export default [watchSelectProjectAndLoadProjectState, watchUserLogoutSuccessAndRefetchProjectData]; diff --git a/packages/web-frontend/src/reducers.js b/packages/web-frontend/src/reducers.js index 188370215b..5af0b03de0 100644 --- a/packages/web-frontend/src/reducers.js +++ b/packages/web-frontend/src/reducers.js @@ -21,7 +21,7 @@ import disaster from './disaster/reducers'; import project from './projects/reducers'; import orgUnits from './reducers/orgUnitReducers'; import { isMobile, getUniqueViewId } from './utils'; -import { LANDING, AUTH_VIEW_STATES } from './containers/OverlayDiv/constants'; +import { LANDING } from './containers/OverlayDiv/constants'; import { EMAIL_VERIFIED_STATUS } from './containers/EmailVerification'; import { getInitialLocation } from './historyNavigation'; @@ -58,7 +58,6 @@ import { SHOW_UNVERIFIED_LOGIN, FETCH_LOGOUT_ERROR, FETCH_LOGOUT_SUCCESS, - FETCH_LANDING_PAGE_LOGOUT_SUCCESS, FETCH_MEASURES_ERROR, FETCH_MEASURES_SUCCESS, CHANGE_ORG_UNIT_ERROR, @@ -99,7 +98,6 @@ import { FETCH_RESET_TOKEN_LOGIN_ERROR, SET_ENLARGED_DIALOG_DATE_RANGE, SET_OVERLAY_CONFIGS, - SET_AUTH_VIEW_STATE, } from './actions'; import { LOGIN_TYPES } from './constants'; import { updateOverlayConfigs } from './utils/mapOverlays'; @@ -118,7 +116,6 @@ function authentication( successMessage: '', emailVerified: EMAIL_VERIFIED_STATUS.VERIFIED, errors: [], - authViewState: AUTH_VIEW_STATES.LOGIN, }, action, ) { @@ -215,7 +212,6 @@ function authentication( isRequestingLogin: false, }; case FETCH_LOGOUT_SUCCESS: - case FETCH_LANDING_PAGE_LOGOUT_SUCCESS: return { ...state, currentUserUsername: 'Public User', @@ -245,8 +241,6 @@ function authentication( }; case SHOW_SESSION_EXPIRED_ERROR: return { ...state, showSessionExpireDialog: true }; - case SET_AUTH_VIEW_STATE: - return { ...state, authViewState: action.authViewState }; default: return state; } @@ -564,7 +558,6 @@ function searchBar( searchString: '', }; case FETCH_LOGOUT_SUCCESS: - case FETCH_LANDING_PAGE_LOGOUT_SUCCESS: // Clear search results on logout incase of permission change return { ...state, diff --git a/packages/web-frontend/src/reducers/orgUnitReducers.js b/packages/web-frontend/src/reducers/orgUnitReducers.js index ad8170e6d5..90c3cd7ddb 100644 --- a/packages/web-frontend/src/reducers/orgUnitReducers.js +++ b/packages/web-frontend/src/reducers/orgUnitReducers.js @@ -13,7 +13,6 @@ import { FETCH_ORG_UNIT_ERROR, FETCH_LOGIN_SUCCESS, FETCH_LOGOUT_SUCCESS, - FETCH_LANDING_PAGE_LOGOUT_SUCCESS, SET_PROJECT, } from '../actions'; @@ -27,7 +26,6 @@ function orgUnitMap(state = {}, action) { return updateLoading(state, action.organisationUnitCode, false); case FETCH_LOGIN_SUCCESS: return {}; // Clear org units on login incase of permission change - case FETCH_LANDING_PAGE_LOGOUT_SUCCESS: case FETCH_LOGOUT_SUCCESS: return {}; // Clear org units on logout incase of permission change case SET_PROJECT: diff --git a/packages/web-frontend/src/sagas/watchUser/watchAttemptUserLogout.js b/packages/web-frontend/src/sagas/watchUser/watchAttemptUserLogout.js index 82389b2126..aa457f730d 100644 --- a/packages/web-frontend/src/sagas/watchUser/watchAttemptUserLogout.js +++ b/packages/web-frontend/src/sagas/watchUser/watchAttemptUserLogout.js @@ -1,11 +1,5 @@ import { call, put, takeLatest } from 'redux-saga/effects'; -import { - ATTEMPT_LANDING_PAGE_LOGOUT, - ATTEMPT_LOGOUT, - fetchUserLogoutError, - fetchUserLogoutSuccess, - fetchLandingPageLogoutSuccess, -} from '../../actions'; +import { ATTEMPT_LOGOUT, fetchUserLogoutError, fetchUserLogoutSuccess } from '../../actions'; import { request } from '../../utils'; /** @@ -27,18 +21,3 @@ function* attemptUserLogout() { export function* watchAttemptUserLogout() { yield takeLatest(ATTEMPT_LOGOUT, attemptUserLogout); } - -// Landing pages - -function* attemptLandingPageLogout() { - const requestResourceUrl = 'logout'; - try { - yield call(request, requestResourceUrl, fetchUserLogoutError); - yield put(fetchLandingPageLogoutSuccess()); - } catch (error) { - yield put(error.errorFunction(error)); - } -} -export function* watchAttemptLandingPageLogout() { - yield takeLatest(ATTEMPT_LANDING_PAGE_LOGOUT, attemptLandingPageLogout); -} diff --git a/packages/web-frontend/src/sagas/watchUser/watchFetchInitialData.js b/packages/web-frontend/src/sagas/watchUser/watchFetchInitialData.js index 7405767558..8e64099f7c 100644 --- a/packages/web-frontend/src/sagas/watchUser/watchFetchInitialData.js +++ b/packages/web-frontend/src/sagas/watchUser/watchFetchInitialData.js @@ -1,29 +1,22 @@ -import { call, put, take, select } from 'redux-saga/effects'; +import { call, put, take } from 'redux-saga/effects'; import { fetchUserLoginSuccess, FETCH_INITIAL_DATA, findUserLoginFailed } from '../../actions'; import { LOGIN_TYPES } from '../../constants'; import { getInitialLocation } from '../../historyNavigation'; import { clearLocation } from '../../historyNavigation/historyNavigation'; -import { fetchCustomLandingPageData, fetchProjectData } from '../../projects/sagas'; +import { fetchProjectData } from '../../projects/sagas'; import request from '../../utils/request'; import { handleLocationChange } from '../handlers'; export function* watchFetchInitialData() { yield take(FETCH_INITIAL_DATA); - yield call(fetchCustomLandingPageData); // Login must happen first so that projects return the correct access flags yield call(findUserLoggedIn, LOGIN_TYPES.AUTO); yield call(fetchProjectData); - - const state = yield select(); - - // Only handle the location change if it's not a custom landing page - if (!state.project?.customLandingPage) { - yield call(handleLocationChange, { - location: getInitialLocation(), - previousLocation: clearLocation(), - }); - } + yield call(handleLocationChange, { + location: getInitialLocation(), + previousLocation: clearLocation(), + }); } /** diff --git a/packages/web-frontend/src/screens/LandingPage/LandingPage.js b/packages/web-frontend/src/screens/LandingPage/LandingPage.js deleted file mode 100644 index 23eb3c72be..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/LandingPage.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import MuiContainer from '@material-ui/core/Container'; -import { EnvBanner } from '@tupaia/ui-components'; -import OverlayDiv from '../../containers/OverlayDiv'; -import { SingleProjectLandingPage } from './SingleProjectLandingPage'; -import { MultiProjectLandingPage } from './MultiProjectLandingPage'; -import TopBar from '../../containers/TopBar'; -import { TOP_BAR_HEIGHT, TOP_BAR_HEIGHT_MOBILE } from '../../styles'; -import { LandingPageFooter } from './LandingPageFooter'; -import { useCustomLandingPages } from './useCustomLandingPages'; -import { LoadingScreen } from '../LoadingScreen'; - -/** - * This is the template for landing pages when the user is not on a mobile device - */ - -const DEFAULT_LANDING_IMAGE_URL = '/images/custom-landing-page-default.png'; - -const Wrapper = styled.div` - position: relative; - background-size: cover; - background-position: center; - background-color: #262834; - background-image: ${({ backgroundImage }) => - backgroundImage ? `url(${backgroundImage})` : 'none'}; -`; - -const Container = styled(MuiContainer)` - background: linear-gradient(rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.7) 100%); - padding: 1em; - display: flex; - flex-direction: column; - justify-content: space-between; - min-height: calc(100vh - ${TOP_BAR_HEIGHT_MOBILE}px); - overflow-y: auto; - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - padding: 2em 3.5em; - min-height: calc(100vh - ${TOP_BAR_HEIGHT}px); - } -`; - -export const LandingPage = () => { - const { customLandingPageSettings, projects } = useCustomLandingPages(); - const { imageUrl } = customLandingPageSettings; - - return ( - <> - - - - - {/* tupaia requires projects to work so we can assume that if there are no projects, it's just */} - {/* because they haven't loaded yet. We can replace this with more idiomatic loading state */} - {/* when we refactor to use react-query */} - {projects.length === 0 && } - {projects.length === 1 && } - {projects.length > 1 && } - - - - {/* Include the OverlayDiv so that the login and logout functionality is available on the */} - {/* custom landing pages */} - - - ); -}; diff --git a/packages/web-frontend/src/screens/LandingPage/LandingPageFooter.js b/packages/web-frontend/src/screens/LandingPage/LandingPageFooter.js deleted file mode 100644 index edfffdd462..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/LandingPageFooter.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import { Link, Typography, List } from '@material-ui/core'; -import { useCustomLandingPages } from './useCustomLandingPages'; - -const Footer = styled.footer` - margin-top: auto; - color: ${props => props.theme.palette.common.white}; - display: flex; - flex-direction: column; -`; - -const FooterContentWrapper = styled.div` - display: flex; - flex-direction: column; - @media screen and (min-width: ${props => props.theme.breakpoints.values.md}px) { - flex-direction: row; - } -`; - -const FooterHeader = styled(Typography)` - font-size: 1.2em; - font-weight: 600; - margin-bottom: 1em; -`; - -const FooterBodyText = styled.p` - margin: 0; - font-size: 0.875em; - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - font-size: 1em; - } -`; - -const FooterLink = styled(Link)` - color: ${props => props.theme.palette.common.white}; - text-decoration: underline; -`; - -const FooterContentContainer = styled.div` - & + & { - margin-top: 1em; - } - @media screen and (min-width: ${props => props.theme.breakpoints.values.md}px) { - width: 30%; - & + & { - margin-left: 4em; - margin-top: 0; - } - } -`; - -const FooterContactList = styled(List)` - list-style: none; - padding: 0; -`; - -const FooterContactListItem = styled.li` - font-size: 0.875em; - & + & { - margin-top: 0.5em; - } - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - font-size: 1em; - } -`; - -const FooterPoweredByWrapper = styled.div` - margin-top: -2px; - display: flex; - justify-content: flex-end; - padding-top: 1em; - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - padding-top: 2em; - margin-top: -3px; - } -`; - -export const LandingPageFooter = () => { - const { customLandingPageSettings } = useCustomLandingPages(); - const { - longBio, - name, - includeNameInHeader, - externalLink, - phoneNumber, - websiteUrl, - } = customLandingPageSettings; - - // use h3 for footer item headers if there is already an h2 in the page (i.e. the name is h1, and the extended title is h2, else h2) - const footerHeaderVariant = includeNameInHeader ? 'h3' : 'h2'; - - // Parse the url, because if the http(s) is not included, the link will not be assumed to be the current origin + the url - const parseUrl = url => { - if (url.includes('http')) return url; - return `https://${url}`; - }; - - const hasAboutSection = longBio || externalLink; - const hasContactSection = phoneNumber || websiteUrl; - return ( -
- - {hasAboutSection && ( - - About {name} - - {longBio} - {externalLink && ( - <> -   - - Learn more - - - )} - - - )} - {hasContactSection && ( - - Contact us - - {phoneNumber && ( - - Ph:  {phoneNumber} - - )} - {websiteUrl && ( - - Website:   - - {websiteUrl} - - - )} - - - )} - - - - Powered by   - - Tupaia - - - -
- ); -}; diff --git a/packages/web-frontend/src/screens/LandingPage/MultiProjectLandingPage.js b/packages/web-frontend/src/screens/LandingPage/MultiProjectLandingPage.js deleted file mode 100644 index e3a48f20a1..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/MultiProjectLandingPage.js +++ /dev/null @@ -1,96 +0,0 @@ -import React from 'react'; -import styled from 'styled-components'; -import { Typography } from '@material-ui/core'; -import { ProjectCardList } from '../../containers/OverlayDiv/components/ProjectPage/ProjectCardList'; -import { PROJECT_ACCESS_TYPES } from '../../constants'; -import { useNavigation } from './useNavigation'; -import { useCustomLandingPages } from './useCustomLandingPages'; -import { useAuth } from './useAuth'; -import { TRANS_BLACK } from '../../styles'; - -const ProjectsWrapper = styled.div` - width: 100%; - max-width: ${({ theme }) => theme.breakpoints.values.lg}px; - margin: 0 auto; -`; - -const ProjectsContainer = styled.div` - display: grid; - grid-template-columns: 1fr; - column-gap: 1.2em; - row-gap: 1.2em; - > div { - border: 1.1em solid ${props => props.primaryColor}; - border-radius: 4px; - } - @media (min-width: ${({ theme }) => theme.breakpoints.values.sm}px) { - grid-template-columns: repeat(auto-fill, minmax(18em, 1fr)); - column-gap: 3.2em; - row-gap: 3.2em; - } - @media (min-width: ${({ theme }) => theme.breakpoints.values.md}px) { - > div { - border-width: 1.5em; - } - } -`; - -const Title = styled(Typography)` - font-weight: ${({ theme }) => theme.typography.fontWeightBold}; - font-size: 1.5em; - line-height: 1.4; - margin-bottom: 1.2em; - color: ${({ theme }) => theme.palette.common.white}; - text-shadow: 1px 1px ${TRANS_BLACK}; - max-width: 30em; - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - font-size: 2em; - } - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.lg}px) and (min-height: 800px) { - margin-bottom: 1.8em; - } -`; - -const Wrapper = styled.div` - height: 100%; - display: flex; - flex-direction: column; - width: 100%; - margin-bottom: 2em; - @media (min-width: ${({ theme }) => theme.breakpoints.values.lg}px) { - margin-top: 2em; - } -`; - -export function MultiProjectLandingPage() { - const { navigateToProject, navigateToRequestProjectAccess, navigateToLogin } = useNavigation(); - const { - projects, - customLandingPageSettings: { includeNameInHeader, primaryHexcode }, - } = useCustomLandingPages(); - - const { isUserLoggedIn } = useAuth(); - - return ( - - Select a project below to view. - - - - - - - ); -} diff --git a/packages/web-frontend/src/screens/LandingPage/SingleProjectLandingPage.js b/packages/web-frontend/src/screens/LandingPage/SingleProjectLandingPage.js deleted file mode 100644 index 7344c680e6..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/SingleProjectLandingPage.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import React from 'react'; -import styled from 'styled-components'; -import { Button, Typography } from '@material-ui/core'; -import { useCustomLandingPages } from './useCustomLandingPages'; -import { useAuth } from './useAuth'; -import { getProjectAccessType } from '../../utils'; -import { PROJECT_ACCESS_TYPES } from '../../constants'; -import { useNavigation } from './useNavigation'; - -/** - * This is the template for the content of a landing page if there is only one project - */ - -const Wrapper = styled.div` - max-width: 30em; - display: flex; - flex-direction: column; - justify-content: center; - height: 100%; - min-height: 55vh; -`; - -const ExtendedTitle = styled(Typography)` - color: ${props => props.theme.palette.common.white}; - font-weight: ${props => props.theme.typography.fontWeightBold}; - font-size: 1.5em; - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - font-size: 2em; - } -`; - -const ActionButton = styled(Button)` - width: 75%; - min-width: 10rem; - background-color: ${props => props.theme.palette.common.white}; - color: ${props => props.theme.palette.common.black}; - text-transform: none; - font-size: 0.975em; - line-height: 1.5; - padding: 1em; - border-radius: 0.6em; - ${ExtendedTitle} + & { - margin-top: 2em; - } - @media screen and (min-width: ${({ theme }) => - theme.breakpoints.values.sm}px) and (min-height: 600px) { - font-size: 1em; - } -`; - -export function SingleProjectLandingPage() { - const { - customLandingPageSettings: { extendedTitle, includeNameInHeader }, - projects, - } = useCustomLandingPages(); - - const { isUserLoggedIn } = useAuth(); - const { navigateToLogin, navigateToProject, navigateToRequestProjectAccess } = useNavigation(); - - const actionTexts = { - [PROJECT_ACCESS_TYPES.PENDING]: 'Approval in progress', - [PROJECT_ACCESS_TYPES.ALLOWED]: 'View data', - [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn ? 'Request access' : 'Log in to view data', - }; - - const [project] = projects; - - const accessType = getProjectAccessType(project); - - const actions = { - [PROJECT_ACCESS_TYPES.ALLOWED]: navigateToProject, - [PROJECT_ACCESS_TYPES.DENIED]: isUserLoggedIn - ? navigateToRequestProjectAccess - : navigateToLogin, - }; - - const onClickActionButton = () => { - const action = actions[accessType]; - if (!action) return; - action(project); - }; - return ( - - {extendedTitle && ( - {extendedTitle} - )} - {/* Only display a button if access type is set, and button is disabled if access has not yet been granted */} - {accessType && ( - - {actionTexts[accessType]} - - )} - - ); -} diff --git a/packages/web-frontend/src/screens/LandingPage/index.js b/packages/web-frontend/src/screens/LandingPage/index.js deleted file mode 100644 index eb671c23a1..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -export { LandingPage } from './LandingPage'; diff --git a/packages/web-frontend/src/screens/LandingPage/useAuth.js b/packages/web-frontend/src/screens/LandingPage/useAuth.js deleted file mode 100644 index 0855fec223..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/useAuth.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import { useSelector } from 'react-redux'; - -export const useAuth = () => { - return useSelector(state => state.authentication); -}; diff --git a/packages/web-frontend/src/screens/LandingPage/useCustomLandingPages.js b/packages/web-frontend/src/screens/LandingPage/useCustomLandingPages.js deleted file mode 100644 index d7712ea6b9..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/useCustomLandingPages.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ -import { useEffect } from 'react'; -import { useSelector } from 'react-redux'; - -function getLandingPageProjects(landingPage, projects) { - if (!landingPage) { - return []; - } - const landingPageProjectsCodes = landingPage.projects.map(({ code }) => code); - return projects.filter(project => landingPageProjectsCodes.includes(project.code)); -} - -export const useCustomLandingPages = () => { - const projectData = useSelector(({ project }) => project?.projects || []); - const landingPage = useSelector(state => state.project.customLandingPage); - const isCustomLandingPageLoading = useSelector(state => state.project.isLoadingCustomLandingPage); - - // Once the custom landing pages are loaded, hide the tupaia app loader in index.html - useEffect(() => { - if (isCustomLandingPageLoading === false) { - const el = document.getElementById('tupaia-spinner'); - if (el) { - el.remove(); - } - } - }, [isCustomLandingPageLoading]); - - return { - isCustomLandingPage: !!landingPage, - customLandingPageSettings: landingPage || {}, - projects: getLandingPageProjects(landingPage, projectData), - }; -}; diff --git a/packages/web-frontend/src/screens/LandingPage/useNavigation.js b/packages/web-frontend/src/screens/LandingPage/useNavigation.js deleted file mode 100644 index e8f8ed7219..0000000000 --- a/packages/web-frontend/src/screens/LandingPage/useNavigation.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Tupaia - * Copyright (c) 2017 - 2023 Beyond Essential Systems Pty Ltd - */ - -import { useDispatch } from 'react-redux'; -import { - setProject, - setRequestingAccess, - clearCustomLandingPageData, -} from '../../projects/actions'; -import { - REQUEST_PROJECT_ACCESS, - LANDING, - AUTH_VIEW_STATES, -} from '../../containers/OverlayDiv/constants'; -import { attemptLandingPageLogout, setAuthViewState, setOverlayComponent } from '../../actions'; - -export const useNavigation = () => { - const dispatch = useDispatch(); - - const navigateToLogin = () => { - dispatch(setOverlayComponent(LANDING)); - dispatch(setAuthViewState(AUTH_VIEW_STATES.LOGIN)); - }; - - const navigateToLogout = () => { - dispatch(attemptLandingPageLogout()); - }; - - const navigateToRequestProjectAccess = project => { - dispatch(setRequestingAccess(project)); - dispatch(setOverlayComponent(REQUEST_PROJECT_ACCESS)); - }; - - const navigateToProject = project => { - dispatch(clearCustomLandingPageData()); - dispatch(setProject(project.code)); - }; - - return { - navigateToLogin, - navigateToLogout, - navigateToProject, - navigateToRequestProjectAccess, - }; -}; diff --git a/packages/web-frontend/src/screens/LoadingScreen/index.js b/packages/web-frontend/src/screens/LoadingScreen/index.js index 3a76f56c06..798af7ef5e 100644 --- a/packages/web-frontend/src/screens/LoadingScreen/index.js +++ b/packages/web-frontend/src/screens/LoadingScreen/index.js @@ -8,35 +8,21 @@ import React from 'react'; import CircularProgress from 'material-ui/CircularProgress'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -const Screen = styled.div` - position: fixed; - top: 0; - left: 0; - height: 100vh; - width: 100vw; - display: flex; - background: ${props => props.$background}; - align-items: center; - justify-content: center; - z-index: ${Number.MAX_SAFE_INTEGER}; -`; +const loadingScreenStyle = { + height: '100vh', + width: '100vw', + display: 'flex', + background: 'rgba(0, 0, 0, 0.5)', + position: 'fixed', + alignItems: 'center', + justifyContent: 'center', + zIndex: Number.MAX_SAFE_INTEGER, // top top top +}; -export const LoadingScreen = ({ isLoading, background }) => +export const LoadingScreen = ({ isLoading }) => isLoading ? ( - +
- +
) : null; - -LoadingScreen.propTypes = { - isLoading: PropTypes.bool, - background: PropTypes.string, -}; - -LoadingScreen.defaultProps = { - isLoading: false, - background: 'rgba(0, 0, 0, 0.5)', -}; diff --git a/packages/web-frontend/src/screens/desktop/RootScreen/MainPage.js b/packages/web-frontend/src/screens/desktop/RootScreen/MainPage.js index 2acd84009f..95525fa3cc 100644 --- a/packages/web-frontend/src/screens/desktop/RootScreen/MainPage.js +++ b/packages/web-frontend/src/screens/desktop/RootScreen/MainPage.js @@ -13,8 +13,6 @@ import { EnlargedDialog } from '../../../containers/EnlargedDialog'; import SessionExpiredDialog from '../../../containers/SessionExpiredDialog'; import OverlayDiv from '../../../containers/OverlayDiv'; import { DIALOG_Z_INDEX } from '../../../styles'; -import { useCustomLandingPages } from '../../LandingPage/useCustomLandingPages'; -import { LandingPage } from '../../LandingPage'; const Container = styled.div` position: fixed; @@ -49,34 +47,26 @@ const MapContainer = styled.div` transition: width 0.5s ease; `; -const MainPage = ({ enlargedDialogIsVisible, isLoading, sidePanelWidth }) => { - const { isCustomLandingPage } = useCustomLandingPages(); - - if (isCustomLandingPage) { - return ; - } - - return ( - <> - {/* The order here matters, Map must be added to the DOM body after FlexContainer */} - - - - - - - - - - {enlargedDialogIsVisible ? : null} - - - - - - - ); -}; +const MainPage = ({ enlargedDialogIsVisible, isLoading, sidePanelWidth }) => ( + <> + {/* The order here matters, Map must be added to the DOM body after FlexContainer */} + + + + + + + + + + {enlargedDialogIsVisible ? : null} + + + + + + +); MainPage.propTypes = { enlargedDialogIsVisible: PropTypes.bool, diff --git a/packages/web-frontend/src/screens/desktop/RootScreen/PDFExportPage.js b/packages/web-frontend/src/screens/desktop/RootScreen/PDFExportPage.js index c4e1445b13..53a79a776f 100644 --- a/packages/web-frontend/src/screens/desktop/RootScreen/PDFExportPage.js +++ b/packages/web-frontend/src/screens/desktop/RootScreen/PDFExportPage.js @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import styled from 'styled-components'; @@ -27,14 +27,6 @@ const Divider = styled(BaseDivider)` `; const PDFExportPage = ({ currentGroupDashboard, viewResponses, selectedDashboardItems }) => { - // Hide the tupaia app loader in index.html - useEffect(() => { - const el = document.getElementById('tupaia-spinner'); - if (el) { - el.remove(); - } - }, []); - if (!currentGroupDashboard) return null; // Hacky way to change default background color without touching root css. document.body.style.backgroundColor = 'white'; diff --git a/packages/web-frontend/src/screens/mobile/RootScreen/index.js b/packages/web-frontend/src/screens/mobile/RootScreen/index.js index b12a491530..268e4d136e 100644 --- a/packages/web-frontend/src/screens/mobile/RootScreen/index.js +++ b/packages/web-frontend/src/screens/mobile/RootScreen/index.js @@ -30,8 +30,6 @@ import { SearchBar } from '../../../containers/mobile/SearchBar'; import { Dashboard } from '../../../containers/mobile/Dashboard'; import { setMobileTab } from '../../../actions'; import { MapSection } from '../../../containers/mobile/MapSection'; -import { useCustomLandingPages } from '../../LandingPage/useCustomLandingPages'; -import { LandingPage } from '../../LandingPage/LandingPage'; const RootContainer = styled(StyleRoot)` min-height: 100vh; @@ -111,16 +109,12 @@ const RootScreen = ({ // overfill and become scrollable const headerRef = useRef(); const [headerHeight, setHeaderHeight] = useState(0); - const { isCustomLandingPage } = useCustomLandingPages(); const updateHeaderHeight = () => { - if (isCustomLandingPage) return; setHeaderHeight(headerRef.current.clientHeight); }; useEffect(() => { updateHeaderHeight(); - }, [isCustomLandingPage]); - - if (isCustomLandingPage) return ; + }); return ( diff --git a/packages/web-frontend/src/styles/index.js b/packages/web-frontend/src/styles/index.js index e5eab8e94f..3d9ec5d788 100644 --- a/packages/web-frontend/src/styles/index.js +++ b/packages/web-frontend/src/styles/index.js @@ -41,7 +41,6 @@ export const BLUE = '#22c7fc'; export const LIGHT_BLUE = '#cde9ff'; export const DARKENED_BLUE = '#0296c5'; export const DARK_GREY = 'rgba(255, 255, 255, 0.6)'; -export const DARKEST_GREY = 'rgb(40, 42, 53)'; export const GREY = '#c7c7c7'; export const LIGHT_GREY = '#EFEFF0'; export const ERROR = red[500]; @@ -56,7 +55,6 @@ export const LEAFLET_Z_INDEX = 1000; // Leaflet base z-index is 400, but attribu export const EXPORT_CHART_PADDING = 20; export const DASHBOARD_META_MARGIN = 15; export const TOP_BAR_HEIGHT = 60; -export const TOP_BAR_HEIGHT_MOBILE = 50; export const CONTROL_BAR_WIDTH = 340; export const CONTROL_BAR_PADDING = 10; export const MAP_CONTROLS_WIDTH = 166; @@ -582,3 +580,20 @@ export const VIEW_STYLES = { lineHeight: 1.3, }, }; + +export const USER_BAR_STYLES = { + container: { + marginLeft: 10, + display: 'flex', + justifyContent: 'flex-end', + position: 'relative', + }, + userMenu: { + backgroundColor: TRANS_BLACK, + borderRadius: '8px', + pointerEvents: 'auto', + cursor: 'auto', + display: 'flex', + justifyContent: 'space-around', + }, +}; diff --git a/packages/web-frontend/src/utils/getProjectAccessType.js b/packages/web-frontend/src/utils/getProjectAccessType.js deleted file mode 100644 index c3d858ce2e..0000000000 --- a/packages/web-frontend/src/utils/getProjectAccessType.js +++ /dev/null @@ -1,13 +0,0 @@ -import { PROJECT_ACCESS_TYPES } from '../constants'; - -export const getProjectAccessType = project => { - if (!project) return null; - const { hasAccess, hasPendingAccess } = project; - if (hasPendingAccess) { - return PROJECT_ACCESS_TYPES.PENDING; - } - if (hasAccess) { - return PROJECT_ACCESS_TYPES.ALLOWED; - } - return PROJECT_ACCESS_TYPES.DENIED; -}; diff --git a/packages/web-frontend/src/utils/index.js b/packages/web-frontend/src/utils/index.js index fdc8240f16..f8ad8d6448 100644 --- a/packages/web-frontend/src/utils/index.js +++ b/packages/web-frontend/src/utils/index.js @@ -36,4 +36,3 @@ export { } from './getUniqueViewId'; export { sleep } from './sleep'; export { getLayeredOpacity } from './opacity'; -export { getProjectAccessType } from './getProjectAccessType'; diff --git a/packages/web-frontend/src/utils/request.js b/packages/web-frontend/src/utils/request.js index f469274adb..fcff8c681b 100644 --- a/packages/web-frontend/src/utils/request.js +++ b/packages/web-frontend/src/utils/request.js @@ -164,7 +164,7 @@ export const download = async (resourceUrl, errorFunction, options, fileName) => } }; -export const getAbsoluteApiRequestUri = resourceUrl => { +export const getAbsoluteApiRequestUri = (resourceUrl) => { const baseUrl = process.env.REACT_APP_CONFIG_SERVER_BASE_URL || 'http://localhost:8080/api/v1/'; return baseUrl + resourceUrl; -}; +} \ No newline at end of file diff --git a/scripts/bash/downloadEnvironmentVariables.sh b/scripts/bash/downloadEnvironmentVariables.sh index 2adbf76fed..9dfa253ad3 100755 --- a/scripts/bash/downloadEnvironmentVariables.sh +++ b/scripts/bash/downloadEnvironmentVariables.sh @@ -3,7 +3,6 @@ set +x # do not output commands in this script, as some would show credentials i DEPLOYMENT_NAME=$1 DIR=$(dirname "$0") -FOLDER="Shared-Tupaia Environment Variables" # Folder in LastPass when .env vars are kept # can provide one or more packages as command line arguments, or will default to all if [ -z $2 ]; then @@ -20,8 +19,7 @@ for PACKAGE in $PACKAGES; do ENV_FILE_PATH=${DIR}/../../packages/${PACKAGE}/.env # checkout deployment specific env vars, or dev as fallback, temporarily redirecting stderr - lpass show --notes "${FOLDER}/${PACKAGE}.${DEPLOYMENT_NAME}.env" 2> /dev/null > ${ENV_FILE_PATH} \ - || lpass show --notes "${FOLDER}/${PACKAGE}.dev.env" > ${ENV_FILE_PATH} + lpass show --notes ${PACKAGE}.${DEPLOYMENT_NAME}.env 2> /dev/null > ${ENV_FILE_PATH} || lpass show --notes ${PACKAGE}.dev.env > ${ENV_FILE_PATH} # Replace any instances of the placeholder [deployment-name] in the .env file with the actual deployment # name (e.g. [deployment-name]-api.tupaia.org -> specific-deployment-api.tupaia.org) diff --git a/scripts/docker/downloadEnvironmentVariables.sh b/scripts/docker/downloadEnvironmentVariables.sh deleted file mode 100755 index a10db05dc1..0000000000 --- a/scripts/docker/downloadEnvironmentVariables.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -e - -# Fetch environment from LastPass, write to ${ENV_DEST}/${DEPLOYMENT_NAME}/.env -# Is modified from ../../scripts/bash/downloadEnvironmentVariables.sh - -# Attempting multiple logins to LastPass from the same IP in succession often -# results in LastPass blocking the IP for some time. To avoid getting blocked -# the script can be run by a "non essential" container in the ECS Task to fetch -# configuration from LastPass prior to the application containers starting. The -# configuration is written to a Docker volume which can be mounted into each -# application container. - -# The following changes have been made to the original script: - -# - By not being in the ../../scripts/bash directory, modifications to this -# script don't invalidate the Docker cache prior to the application packages -# build. This was done to speed up development and testing of the script. -# -# - Containers running in the ECS task will read env files from a common volume -# mount. To support this a destination directory needs to be provided as the -# first argument. -# -# - The fallback to 'dev' environments has been removed, if the specified -# deployment name is missing from the LastPass vault the script will error. - -# Usage: downloadEnvironmentVariables.sh [package]... - -set +x # do not output commands in this script, as some would show credentials in plain text - -DEPLOYMENT_NAME=$1 -ENV_DEST=$2 -DIR=$(dirname "$0") - - -# can provide one or more packages as command line arguments, or will default to all -if [ -z $3 ]; then - echo "Fetching all .env files" - PACKAGES=$(${DIR}/../bash/getPackagesWithEnvFiles.sh) -else - PACKAGES=${@:3} - echo "Fetching environment variables for ${PACKAGES}" -fi - -echo ${LASTPASS_PASSWORD} | LPASS_DISABLE_PINENTRY=1 lpass login ${LASTPASS_EMAIL} - -for PACKAGE in $PACKAGES; do - ENV_FILE_DIR="${ENV_DEST}/packages/${PACKAGE}" - mkdir -p "$ENV_FILE_DIR" - ENV_FILE_PATH="${ENV_FILE_DIR}/.env" - # checkout deployment specific env vars - lpass show --notes ${PACKAGE}.${DEPLOYMENT_NAME}.env > ${ENV_FILE_PATH} - - # Replace any instances of the placeholder [deployment-name] in the .env file with the actual deployment - # name (e.g. [deployment-name]-api.tupaia.org -> specific-deployment-api.tupaia.org) - sed -i -e "s/\[deployment-name\]/${DEPLOYMENT_NAME}/g" ${ENV_FILE_PATH} - - if [[ "${DEPLOYMENT_NAME}" == *-e2e || "${DEPLOYMENT_NAME}" == e2e ]]; then - # Update e2e environment variables - if [[ ${PACKAGE} == "central-server" || ${PACKAGE} == "web-config-server" ]]; then - sed -i -E 's/^AGGREGATION_URL_PREFIX="?dev-"?$/AGGREGATION_URL_PREFIX=e2e-/g' ${ENV_FILE_PATH} - fi - fi - - if [[ "${DEPLOYMENT_NAME}" == dev ]]; then - # Update dev specific environment variables - # (removes ###DEV_ONLY### prefixes, leaving the key=value pair uncommented) - # (after removing prefix, if there are duplicate keys, dotenv uses the last one in the file) - sed -i -E 's/^###DEV_ONLY###//g' ${ENV_FILE_PATH} - fi -done diff --git a/tupaia-packages.code-workspace b/tupaia-packages.code-workspace index 16e165c488..acc99810c4 100644 --- a/tupaia-packages.code-workspace +++ b/tupaia-packages.code-workspace @@ -60,10 +60,6 @@ "name": "dhis-api", "path": "packages/dhis-api" }, - { - "name": "e2e", - "path": "packages/e2e" - }, { "name": "entity-server", "path": "packages/entity-server" diff --git a/yarn.lock b/yarn.lock index 8e779e71dc..51e1abcab0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5814,11 +5814,8 @@ __metadata: "@material-ui/core": ^4.9.8 "@material-ui/styles": ^4.9.10 "@storybook/react": ^6.3.9 - "@tupaia/types": 1.0.0 "@tupaia/ui-components": 1.0.0 "@tupaia/utils": 1.0.0 - "@types/lodash.get": ^4.4.7 - "@types/recharts": ^1.8.24 lodash.get: ^4.4.2 moment: ^2.29.1 prop-types: ^15.7.2 @@ -6231,22 +6228,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-path@npm:^1": - version: 1.0.9 - resolution: "@types/d3-path@npm:1.0.9" - checksum: acbf7376fd7bef61701bce915bf5a9cb5eaa9741b7919d3e644f841a65faf1aea3cf63ba949c21ddda8c9849221394856a2054805aa698d3bb5ac3fe7d029817 - languageName: node - linkType: hard - -"@types/d3-shape@npm:^1": - version: 1.3.8 - resolution: "@types/d3-shape@npm:1.3.8" - dependencies: - "@types/d3-path": ^1 - checksum: a7f78a3f0be1215b512efb636ba381768ab4104ef9b72b7fcc2ab9810e7d6fc2ee062f3103ef99236f4462deabac60d2fd96375315ec7ad33278757918c94592 - languageName: node - linkType: hard - "@types/eslint-visitor-keys@npm:^1.0.0": version: 1.0.0 resolution: "@types/eslint-visitor-keys@npm:1.0.0" @@ -6552,15 +6533,6 @@ __metadata: languageName: node linkType: hard -"@types/lodash.get@npm:^4.4.7": - version: 4.4.7 - resolution: "@types/lodash.get@npm:4.4.7" - dependencies: - "@types/lodash": "*" - checksum: 0dbf1960606e4707c34e8ffbe97ffaad0e47fc5df7a6e24ea6e4fe5838d2468aa13360f38815c77b06e3c9932631ae15662b4139036a69ee16aeb54827a21405 - languageName: node - linkType: hard - "@types/lodash.groupby@npm:^4.6.0": version: 4.6.6 resolution: "@types/lodash.groupby@npm:4.6.6" @@ -6976,16 +6948,6 @@ __metadata: languageName: node linkType: hard -"@types/recharts@npm:^1.8.24": - version: 1.8.24 - resolution: "@types/recharts@npm:1.8.24" - dependencies: - "@types/d3-shape": ^1 - "@types/react": "*" - checksum: 1341e5472bf62a83ab98648bc5c14a9a81fba16af9255203ef12a21caa21a988fac3198d9771703394eb876d4fbefb42e818865e35ecfe0d105aee1d1164aa6e - languageName: node - linkType: hard - "@types/resolve@npm:0.0.8": version: 0.0.8 resolution: "@types/resolve@npm:0.0.8"