Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
9fcc5b9
chore: fix merge conflicts
JoltCode Dec 17, 2024
b06c8d4
chore: fix merge conflicts 2
JoltCode Dec 17, 2024
81e562b
chore: fix more merge conflicts, switch from yarn to pnpm
JoltCode Dec 17, 2024
356c4fc
chore(frontend/redux): migrate rest of reducers to TypeScript
JoltCode Aug 20, 2024
5930c59
chore(frontend/utils): migrate safe_storage to TypeScript
JoltCode Aug 20, 2024
aa7491d
chore(frontend): fix merge conflicts, more migrations
JoltCode Aug 20, 2024
ed76f93
fix,chore(frontend/redux): fix reducers combined return type
JoltCode Aug 20, 2024
08ba00b
chore(frontend): migrate footer to TS
JoltCode Aug 20, 2024
e89e01d
chore(frontend): more ts migrations
JoltCode Aug 21, 2024
ca18b73
chore(frontned): more TS migrations :D
JoltCode Aug 21, 2024
a8993c4
chore(frontend): more TS Migrations!
JoltCode Aug 21, 2024
c0587f3
chore(frontend): hooks and utils migrations to TS
JoltCode Aug 21, 2024
6027ac6
chore(frontend): mostly comments and contributions TS migrations
JoltCode Aug 21, 2024
ba2315c
chore(frontend): migrate components and utils to TS
JoltCode Aug 22, 2024
dddd6df
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Aug 22, 2024
633bc02
chore(frontend): more migrations to TS
JoltCode Aug 22, 2024
e3c1bea
chore(frontend): TS Migrations, allow JS in tsconfig
JoltCode Aug 23, 2024
f86e575
chore(frontend): migrate loads of svg icons to TS, fix vite config
JoltCode Aug 23, 2024
913e5d3
chore(frontend): migrate more svg icons to TS
JoltCode Aug 23, 2024
7930831
chore(frontend): migrate more svgIcons to TS
JoltCode Aug 24, 2024
e78eab2
chore(frontend/svgIcons): migrate final svgIcons to TS and functional…
JoltCode Aug 24, 2024
bfd5753
chore(frontend): lots of TS Migrations - base site now rendering - al…
JoltCode Aug 24, 2024
9c68ff4
fix(vite): replace all REACT_APP env vars with vite
JoltCode Dec 18, 2024
edaa595
feat(frontend/svgIcons): convert remaining icons to tsx
JoltCode Dec 18, 2024
5c2e511
feat,chore(frontend): move lots of components to jsx - building witho…
JoltCode Dec 18, 2024
8071b53
fix(package): react type versions
JoltCode Dec 18, 2024
8abd578
chore(frontend): add todo
JoltCode Dec 18, 2024
6bd7b55
fix(frontend): make most of remaining files work
JoltCode Dec 19, 2024
93ff019
chore(frontend): move to vitest
JoltCode Dec 19, 2024
147a399
chore(frontend/testing): more test file renames, test fixes
JoltCode Dec 20, 2024
4336de1
feat,chore(frontend): more test fixes
JoltCode Dec 21, 2024
750e654
feat,chore(frontend/tests): further vitest fixes - reset back to yarn
JoltCode Dec 22, 2024
e68dabe
feat,chore(frontend/testing): migrate to msw v2, fix further tests
JoltCode Dec 22, 2024
430ad3e
fix(frontend/tests): further test fixes
JoltCode Dec 23, 2024
c67b8d5
chore,fix(frontend/test): footer testing migration to react testing lib
JoltCode Dec 23, 2024
7a91f29
fix(frontend/tests): more test migrations, starting to fix mapbox mock
JoltCode Dec 23, 2024
da2927c
fix,chore(frontend): make userDetails object property access optional…
JoltCode Dec 24, 2024
be3f2bb
fix,chore(frontend): notification body card infinite render loop, fix…
JoltCode Dec 25, 2024
cfdfdac
fix(frontend): more frontend test fixes, fix mistakes in merge - task…
JoltCode Dec 25, 2024
f8258a0
fix,chore(frontend/tests): further test fixes
JoltCode Dec 26, 2024
59ada54
chore,fix(frontend/tests): more test fixes
JoltCode Dec 26, 2024
4363da7
chore,fix(frontend/tests): further test fixes and migrations
JoltCode Dec 28, 2024
dde4c2f
chore,fix(frontend/tests): more test fixes, fix react-hot-toast mocking
JoltCode Dec 28, 2024
6949364
chore,fix(frontend/tests): migrate remaining tests from old test rend…
JoltCode Dec 28, 2024
4b6032e
fix,chore(frontend/tests): fix remaining tests, move failing users te…
JoltCode Dec 28, 2024
5d29587
fix,chore(frontend/tests): implement final missing test
JoltCode Dec 28, 2024
70e8731
chore(frontend): cleanup
JoltCode Dec 28, 2024
784af9b
chore,fix(frontend): more cleanup, fix builds
JoltCode Dec 29, 2024
3c1848d
chore(frontend): rename build ignore in gitignore
JoltCode Dec 29, 2024
f243b13
chore(frontend): add seperate test command which shows ui
JoltCode Dec 29, 2024
81ef0a5
Merge remote-tracking branch 'origin/develop' into typescript-vite
JoltCode Jan 8, 2025
011db4b
chore,fix(frontend/components): rename datefilter js to jsx
JoltCode Jan 8, 2025
ccc64d1
chore(ci): modify test branch name
JoltCode Jan 8, 2025
33f6d1c
fix(ci): -w (--max-workers): breaking
JoltCode Jan 8, 2025
acdd6d3
fix(frontend/tests): openEditor insert url encoded from env
JoltCode Jan 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
no_output_timeout: 20m
command: |
cd ${CIRCLE_WORKING_DIRECTORY}/frontend/
CI=true yarn test -w 1 --silent
CI=true yarn test --silent
CI=true GENERATE_SOURCEMAP=false yarn build

backend-code-check-PEP8:
Expand Down Expand Up @@ -452,7 +452,7 @@ workflows:
value: << pipeline.git.branch >>
- or:
## - equal: [ develop, << pipeline.git.branch >> ] # Disabled while we use dev setup for e2e testing
- equal: [ dev-switch-to-sandbox, << pipeline.git.branch >> ]
- equal: [ typescript-vite, << pipeline.git.branch >> ]
jobs:
- database-backup:
name: Backup development database
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ tasking-manager*.env

# Generated frontend #
frontend/node_modules/
frontend/build/
frontend/dist/
frontend/public/static/
frontend/assets/styles/
frontend/package-lock.json
Expand Down
88 changes: 44 additions & 44 deletions frontend/.env.expand
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,47 @@
# Variables that are available for the frontend.
# Usually doesn't need to be modified
#
REACT_APP_BASE_URL=$TM_APP_BASE_URL
REACT_APP_API_URL=$TM_APP_API_URL
REACT_APP_API_VERSION=$TM_APP_API_VERSION
REACT_APP_ORG_NAME=$TM_ORG_NAME
REACT_APP_ORG_CODE=$TM_ORG_CODE
REACT_APP_ORG_URL=$TM_ORG_URL
REACT_APP_ORG_LOGO=$TM_ORG_LOGO
REACT_APP_ORG_PRIVACY_POLICY_URL=$TM_ORG_PRIVACY_POLICY_URL
REACT_APP_ORG_TWITTER=$TM_ORG_TWITTER
REACT_APP_ORG_FB=$TM_ORG_FB
REACT_APP_ORG_INSTAGRAM=$TM_ORG_INSTAGRAM
REACT_APP_ORG_YOUTUBE=$TM_ORG_YOUTUBE
REACT_APP_ORG_GITHUB=$TM_ORG_GITHUB
REACT_APP_DEFAULT_LOCALE=$TM_DEFAULT_LOCALE
REACT_APP_TM_MAPPER_LEVEL_INTERMEDIATE=$TM_MAPPER_LEVEL_INTERMEDIATE
REACT_APP_TM_MAPPER_LEVEL_ADVANCED=$TM_MAPPER_LEVEL_ADVANCED
REACT_APP_MATOMO_ID=$TM_MATOMO_ID
REACT_APP_MATOMO_ENDPOINT=$TM_MATOMO_ENDPOINT
REACT_APP_SERVICE_DESK=$TM_SERVICE_DESK
REACT_APP_IMAGE_UPLOAD_API_URL=$TM_IMAGE_UPLOAD_API_URL
REACT_APP_HOMEPAGE_VIDEO_URL=$TM_HOMEPAGE_VIDEO_URL
REACT_APP_HOMEPAGE_IMG_HIGH=$TM_HOMEPAGE_IMG_HIGH
REACT_APP_HOMEPAGE_IMG_LOW=$TM_HOMEPAGE_IMG_LOW
REACT_APP_MAPBOX_TOKEN=$TM_MAPBOX_TOKEN
REACT_APP_ENABLE_SERVICEWORKER=$TM_ENABLE_SERVICEWORKER
REACT_APP_MAX_FILESIZE=$TM_IMPORT_MAX_FILESIZE
REACT_APP_MAX_AOI_AREA=$TM_MAX_AOI_AREA
REACT_APP_OHSOME_STATS_BASE_URL=$OHSOME_STATS_BASE_URL
REACT_APP_OHSOME_STATS_TOKEN=$OHSOME_STATS_TOKEN
REACT_APP_OSM_CLIENT_ID=$TM_CLIENT_ID
REACT_APP_OSM_CLIENT_SECRET=$TM_CLIENT_SECRET
REACT_APP_OSM_REDIRECT_URI=$TM_REDIRECT_URI
REACT_APP_OSM_SERVER_URL=$OSM_SERVER_URL
REACT_APP_OSM_SERVER_API_URL=$OSM_SERVER_API_URL
REACT_APP_TM_ORG_NAME=$TM_ORG_NAME
REACT_APP_OSM_REGISTER_URL=$OSM_REGISTER_URL
REACT_APP_ID_EDITOR_URL=$ID_EDITOR_URL
REACT_APP_POTLATCH2_EDITOR_URL=$POTLATCH2_EDITOR_URL
REACT_APP_SENTRY_FRONTEND_DSN=$TM_SENTRY_FRONTEND_DSN
REACT_APP_ENVIRONMENT=$TM_ENVIRONMENT
REACT_APP_TM_DEFAULT_CHANGESET_COMMENT=$TM_DEFAULT_CHANGESET_COMMENT
REACT_APP_RAPID_EDITOR_URL=$RAPID_EDITOR_URL
REACT_APP_EXPORT_TOOL_S3_URL=$EXPORT_TOOL_S3_URL
REACT_APP_ENABLE_EXPORT_TOOL=$ENABLE_EXPORT_TOOL
VITE_BASE_URL=$TM_APP_BASE_URL
VITE_API_URL=$TM_APP_API_URL
VITE_API_VERSION=$TM_APP_API_VERSION
VITE_ORG_NAME=$TM_ORG_NAME
VITE_ORG_CODE=$TM_ORG_CODE
VITE_ORG_URL=$TM_ORG_URL
VITE_ORG_LOGO=$TM_ORG_LOGO
VITE_ORG_PRIVACY_POLICY_URL=$TM_ORG_PRIVACY_POLICY_URL
VITE_ORG_TWITTER=$TM_ORG_TWITTER
VITE_ORG_FB=$TM_ORG_FB
VITE_ORG_INSTAGRAM=$TM_ORG_INSTAGRAM
VITE_ORG_YOUTUBE=$TM_ORG_YOUTUBE
VITE_ORG_GITHUB=$TM_ORG_GITHUB
VITE_DEFAULT_LOCALE=$TM_DEFAULT_LOCALE
VITE_TM_MAPPER_LEVEL_INTERMEDIATE=$TM_MAPPER_LEVEL_INTERMEDIATE
VITE_TM_MAPPER_LEVEL_ADVANCED=$TM_MAPPER_LEVEL_ADVANCED
VITE_MATOMO_ID=$TM_MATOMO_ID
VITE_MATOMO_ENDPOINT=$TM_MATOMO_ENDPOINT
VITE_SERVICE_DESK=$TM_SERVICE_DESK
VITE_IMAGE_UPLOAD_API_URL=$TM_IMAGE_UPLOAD_API_URL
VITE_HOMEPAGE_VIDEO_URL=$TM_HOMEPAGE_VIDEO_URL
VITE_HOMEPAGE_IMG_HIGH=$TM_HOMEPAGE_IMG_HIGH
VITE_HOMEPAGE_IMG_LOW=$TM_HOMEPAGE_IMG_LOW
VITE_MAPBOX_TOKEN=$TM_MAPBOX_TOKEN
VITE_ENABLE_SERVICEWORKER=$TM_ENABLE_SERVICEWORKER
VITE_MAX_FILESIZE=$TM_IMPORT_MAX_FILESIZE
VITE_MAX_AOI_AREA=$TM_MAX_AOI_AREA
VITE_OHSOME_STATS_BASE_URL=$OHSOME_STATS_BASE_URL
VITE_OHSOME_STATS_TOKEN=$OHSOME_STATS_TOKEN
VITE_OSM_CLIENT_ID=$TM_CLIENT_ID
VITE_OSM_CLIENT_SECRET=$TM_CLIENT_SECRET
VITE_OSM_REDIRECT_URI=$TM_REDIRECT_URI
VITE_OSM_SERVER_URL=$OSM_SERVER_URL
VITE_OSM_SERVER_API_URL=$OSM_SERVER_API_URL
VITE_TM_ORG_NAME=$TM_ORG_NAME
VITE_OSM_REGISTER_URL=$OSM_REGISTER_URL
VITE_ID_EDITOR_URL=$ID_EDITOR_URL
VITE_POTLATCH2_EDITOR_URL=$POTLATCH2_EDITOR_URL
VITE_SENTRY_FRONTEND_DSN=$TM_SENTRY_FRONTEND_DSN
VITE_ENVIRONMENT=$TM_ENVIRONMENT
VITE_TM_DEFAULT_CHANGESET_COMMENT=$TM_DEFAULT_CHANGESET_COMMENT
VITE_RAPID_EDITOR_URL=$RAPID_EDITOR_URL
VITE_EXPORT_TOOL_S3_URL=$EXPORT_TOOL_S3_URL
VITE_ENABLE_EXPORT_TOOL=$ENABLE_EXPORT_TOOL
21 changes: 12 additions & 9 deletions frontend/public/index.html β†’ frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/static/favicon.ico" />
<link rel="shortcut icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />

<!-- for Google -->
Expand All @@ -14,20 +14,20 @@
<meta name="application-name" content="Tasking Manager" />

<!-- for Facebook -->
<meta property="og:title" content="%REACT_APP_ORG_CODE% Tasking Manager" />
<meta property="og:site_name" content="%REACT_APP_ORG_CODE% Tasking Manager" />
<meta property="og:title" content="%VITE_ORG_CODE% Tasking Manager" />
<meta property="og:site_name" content="%VITE_ORG_CODE% Tasking Manager" />
<meta property="og:type" content="website" />
<meta property="og:description" content="Collaborative mapping for humanitarian action." />

<!-- for Twitter -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="%REACT_APP_ORG_CODE% Tasking Manager" />
<meta name="twitter:title" content="%VITE_ORG_CODE% Tasking Manager" />
<meta name="twitter:description" content="Collaborative mapping for humanitarian action." />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="manifest" href="/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Expand All @@ -36,12 +36,15 @@
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.

%PUBLIC_URL% is now no longer used, it is automatically refactored to the correct path during the build process.
-->
<title>%REACT_APP_ORG_CODE% Tasking Manager</title>
<title>%VITE_ORG_CODE% Tasking Manager</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
<div
id="action-root"
class="w-100 h-100 vh-minus-122-ns"
Expand All @@ -56,10 +59,10 @@
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']); // Tracks downloads
_paq.push(['trackVisibleContentImpressions']); // Tracks content blocks
var site_id = '%REACT_APP_MATOMO_ID%';
if (site_id && '%REACT_APP_MATOMO_ENDPOINT%') {
var site_id = '%VITE_MATOMO_ID%';
if (site_id && '%VITE_MATOMO_ENDPOINT%') {
(function () {
var u = '%REACT_APP_MATOMO_ENDPOINT%';
var u = '%VITE_MATOMO_ENDPOINT%';
_paq.push(['setTrackerUrl', u + 'piwik.php']);
_paq.push(['setSiteId', site_id]);

Expand Down
51 changes: 35 additions & 16 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "TaskingManager-frontend",
"version": "0.1.0",
"license": "BSD-2-Clause",
"private": false,
"type": "module",
"dependencies": {
"@hotosm/id": "^2.30.2",
"@hotosm/iso-countries-languages": "^1.1.2",
Expand All @@ -12,9 +12,10 @@
"@mapbox/mapbox-gl-language": "^0.10.1",
"@placemarkio/geo-viewport": "^1.0.2",
"@rapideditor/rapid": "^2.4.2",
"@redux-devtools/extension": "^3.3.0",
"@sentry/react": "^7.102.0",
"@tanstack/react-query": "^4.29.7",
"@tanstack/react-query-devtools": "^4.29.7",
"@tanstack/react-query": "^5.52.0",
"@tanstack/react-query-devtools": "^5.62.8",
"@tanstack/react-table": "^8.20.1",
"@tmcw/togeojson": "^5.8.1",
"@turf/area": "^6.5.0",
Expand All @@ -30,7 +31,7 @@
"axios": "^1.6.7",
"chart.js": "^4.4.1",
"chartjs-adapter-date-fns": "^3.0.0",
"date-fns": "^2.30.0",
"date-fns": "^3.6.0",
"dompurify": "^3.0.9",
"downshift-hooks": "^0.8.1",
"final-form": "^4.20.10",
Expand All @@ -39,7 +40,7 @@
"humanize-duration": "^3.31.0",
"mapbox-gl": "^1.13.3",
"mapbox-gl-draw-rectangle-mode": "^1.0.4",
"marked": "^4.3.0",
"marked": "^14.0.0",
"osmtogeojson": "^3.0.0-beta.5",
"prop-types": "^15.8.1",
"query-string": "^8.2.0",
Expand Down Expand Up @@ -85,12 +86,16 @@
"copy-static": "bash -c \"mkdir -p public/static/rapid; if ! (test -a public/static/rapid/rapid.js); then cp -R node_modules/@rapideditor/rapid/dist/* public/static/rapid; fi\"",
"copy-id-static": "bash -c \"mkdir -p public/static/id; if ! (test -a public/static/id/data); then cp -R node_modules/@hotosm/id/dist/data public/static/id && cp -R node_modules/@hotosm/id/dist/img public/static/id && cp -R node_modules/@hotosm/id/dist/locales public/static/id; fi;\"",
"update-static": "bash -c \"mkdir -p public/static/rapid; cp -R node_modules/@rapideditor/rapid/dist/* public/static/rapid;\"",
"update-id-static": "bash -c \"mkdir -p public/static/id; cp -R node_modules/@hotosm/id/dist/data public/static/id && cp -R node_modules/@hotosm/id/dist/img public/static/id && cp -R node_modules/@hotosm/id/dist/locales public/static/id;\"", "patch-rapid": "bash -c \"cp patch/rapid-imagery.min.json public/static/rapid/data/imagery.min.json\"",
"update-id-static": "bash -c \"mkdir -p public/static/id; cp -R node_modules/@hotosm/id/dist/data public/static/id && cp -R node_modules/@hotosm/id/dist/img public/static/id && cp -R node_modules/@hotosm/id/dist/locales public/static/id;\"",
"patch-rapid": "bash -c \"cp patch/rapid-imagery.min.json public/static/rapid/data/imagery.min.json\"",
"preparation": "bash -c \"if (test -a ../tasking-manager.env); then grep -hs ^ ../tasking-manager.env .env.expand > .env; else cp .env.expand .env; fi\"",
"start": "npm run preparation && npm run copy-static && npm run copy-id-static && npm run patch-rapid && craco start",
"build": "npm run preparation && npm run update-static && npm run update-id-static && npm run patch-rapid && craco build && npm run sentry:sourcemaps", "prettier": "prettier --write 'src/**/*.js'",
"dev": "vite",
"start": "npm run preparation && npm run copy-static && npm run copy-id-static && npm run patch-rapid && vite start",
"build": "npm run preparation && npm run update-static && npm run update-id-static && npm run patch-rapid && vite build && npm run sentry:sourcemaps",
"prettier": "prettier --write 'src/**/*.js'",
"lint": "eslint src",
"test": "npm run lint && craco test --env=jsdom",
"test": "npm run lint && vitest",
"test:ui": "npm run lint && vitest --ui",
"coverage": "npm run test -- --coverage --watchAll=false",
"analyze": "source-map-explorer 'build/static/js/*.js'",
"sentry:sourcemaps": "if sentry-cli info; then sentry-cli sourcemaps inject --org humanitarian-openstreetmap-tea --project taskingmanager-frontend ./build && sentry-cli sourcemaps upload --org humanitarian-openstreetmap-tea --project taskingmanager-frontend ./build; fi"
Expand All @@ -112,20 +117,33 @@
},
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@craco/craco": "^7.1.0",
"@sentry/cli": "^2.28.6",
"@tanstack/eslint-plugin-query": "^4.29.8",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.2.1",
"@testing-library/user-event": "^14.4.3",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.1.0",
"@testing-library/user-event": "^14.5.2",
"@types/chart.js": "^2.9.41",
"@types/dompurify": "^3.0.5",
"@types/react": "^19.0.2",
"@types/react-dom": "^19.0.2",
"@types/react-redux": "^7.1.34",
"@types/react-router-dom": "^5.3.3",
"@types/react-test-renderer": "^18.3.0",
"@types/slug": "^5.0.9",
"@vitejs/plugin-react-swc": "^3.7.0",
"@vitest/ui": "2.1.8",
"combine-react-intl-messages": "^4.0.0",
"jest-canvas-mock": "^2.5.2",
"msw": "^1.3.2",
"msw": "^2.7.0",
"prettier": "^2.8.8",
"react-scripts": "^5.0.1",
"react-select-event": "^5.5.1",
"react-test-renderer": "^18.2.0",
"source-map-explorer": "^2.5.3"
"source-map-explorer": "^2.5.3",
"typescript": "^5.7.2",
"vite": "^5.4.2",
"vitest": "^2.1.8"
},
"resolutions": {
"dom-accessibility-api": "0.5.14"
Expand All @@ -142,6 +160,7 @@
]
},
"volta": {
"node": "18.19.1"
"node": "18.19.1",
"yarn": "1.22.19"
}
}
84 changes: 0 additions & 84 deletions frontend/src/App.js

This file was deleted.

Loading