From 2863bdb149cedc292786c9a1a76edc1ab872c763 Mon Sep 17 00:00:00 2001 From: Chris Lindelof Date: Tue, 27 Aug 2024 08:44:33 -0400 Subject: [PATCH] Template out authorized side of application. --- front-end/package-lock.json | 153 ++++++++++++++++++ front-end/package.json | 7 + front-end/src/App.js | 28 ++-- .../FleetManager-Components/FuelPurchases.js | 110 +++++++++++++ .../FleetManager-Components/Header.js | 18 +++ .../FleetManager-Components/Sidebar.js | 27 ++++ .../VehicleInformation.js | 33 ++++ .../VehicleInformation/Registration.js | 42 +++++ .../VehicleInformation/ServiceHistory.js | 47 ++++++ .../VehicleInformation/VehicleDetails.js | 46 ++++++ .../VehicleInformation/VehicleImage.js | 35 ++++ .../VehicleInformation/VehicleName.js | 72 +++++++++ front-end/src/components/FleetManager.js | 39 ++++- .../EditableTextDisplay.js | 76 +++++++++ .../Informational-Components/Loading.js | 9 ++ .../src/images/car-silhouet-png-21300.png | Bin 0 -> 26335 bytes front-end/src/index.js | 7 +- front-end/src/main.css | 2 +- .../src/stateSlicers/authenticationSlice.js | 29 ---- front-end/src/store.js | 7 - 20 files changed, 730 insertions(+), 57 deletions(-) create mode 100644 front-end/src/components/FleetManager-Components/FuelPurchases.js create mode 100644 front-end/src/components/FleetManager-Components/Header.js create mode 100644 front-end/src/components/FleetManager-Components/Sidebar.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation/Registration.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation/ServiceHistory.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation/VehicleDetails.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation/VehicleImage.js create mode 100644 front-end/src/components/FleetManager-Components/VehicleInformation/VehicleName.js create mode 100644 front-end/src/components/Informational-Components/EditableTextDisplay.js create mode 100644 front-end/src/components/Informational-Components/Loading.js create mode 100644 front-end/src/images/car-silhouet-png-21300.png delete mode 100644 front-end/src/stateSlicers/authenticationSlice.js delete mode 100644 front-end/src/store.js diff --git a/front-end/package-lock.json b/front-end/package-lock.json index 3f83781..fddb663 100644 --- a/front-end/package-lock.json +++ b/front-end/package-lock.json @@ -8,14 +8,21 @@ "name": "front-end", "version": "0.1.0", "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-brands-svg-icons": "^6.6.0", + "@fortawesome/free-regular-svg-icons": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", "@reduxjs/toolkit": "^2.2.7", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.2", "react-scripts": "5.0.1", + "react-tooltip": "^5.28.0", "web-vitals": "^2.1.4" }, "devDependencies": { @@ -2565,6 +2572,101 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", + "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz", + "integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.6.0.tgz", + "integrity": "sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz", + "integrity": "sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz", + "integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -5883,6 +5985,31 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", @@ -6618,6 +6745,12 @@ "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "license": "MIT" }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -15897,6 +16030,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -16379,6 +16518,20 @@ } } }, + "node_modules/react-tooltip": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.0.tgz", + "integrity": "sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.1", + "classnames": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/front-end/package.json b/front-end/package.json index 5436421..2365a3d 100644 --- a/front-end/package.json +++ b/front-end/package.json @@ -3,14 +3,21 @@ "version": "0.1.0", "private": true, "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-brands-svg-icons": "^6.6.0", + "@fortawesome/free-regular-svg-icons": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", "@reduxjs/toolkit": "^2.2.7", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.7.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.2", "react-scripts": "5.0.1", + "react-tooltip": "^5.28.0", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/front-end/src/App.js b/front-end/src/App.js index 92beefb..411364d 100644 --- a/front-end/src/App.js +++ b/front-end/src/App.js @@ -1,19 +1,25 @@ -import React from "react"; +import React, {Component} from "react"; import './main.css' -import { useSelector } from "react-redux"; -import { selectAuthenticated } from "./stateSlicers/authenticationSlice"; - import FleetManager from "./components/FleetManager"; import Login from "./components/Login"; -function App () { - const authed = useSelector(selectAuthenticated); - return ( - (authed) - ? +export default class App extends Component { + constructor(props) { + super(props) + + this.state = { + authenticated: true, + userId: 1, + fullName: "Chris Lindelof" + } + } + + render() { + return ( + (this.state.authenticated) + ? : ) + } } - -export default App; diff --git a/front-end/src/components/FleetManager-Components/FuelPurchases.js b/front-end/src/components/FleetManager-Components/FuelPurchases.js new file mode 100644 index 0000000..6257b9e --- /dev/null +++ b/front-end/src/components/FleetManager-Components/FuelPurchases.js @@ -0,0 +1,110 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faChevronUp, faChevronDown, faClose } from "@fortawesome/free-solid-svg-icons"; +import React, { Component } from "react"; + +export default class FuelPurchases extends Component { + + constructor(props) { + super(props) + + this.state = { + expanded: false, + showModal: true + } + } + + toggleExpanded = () => { + this.setState({ + expanded: !this.state.expanded + }) + } + + setShowModal = (value) => { + this.setState({ + showModal: value + }) + } + render() { + return ( + <> +
+
Fuel Purchases
+
+
this.setShowModal(true)} className="mr-2 px-2 py-1 rounded bg-green-400 hover:cursor-pointer">Add
+
+ { + (this.state.expanded) + ? + : + } +
+
+
+ + { + (this.state.showModal) + ? ( + <> +
+
+ {/*content*/} +
+ {/*header*/} +
+

+ Add Fuel Purchase +

+ +
+ {/*body*/} +
+
+ +
Date
+
+
+ + Fuel Purchased +
+
+ + Total Cost +
+
+ {/*footer*/} +
+ + +
+
+
+
+
+ + ) : null + } + + ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/Header.js b/front-end/src/components/FleetManager-Components/Header.js new file mode 100644 index 0000000..fa35dd7 --- /dev/null +++ b/front-end/src/components/FleetManager-Components/Header.js @@ -0,0 +1,18 @@ +import React, {Component} from "react"; + +export default class Header extends Component { + + render() { + return ( +
+
+ Fleet Management +
+ +
+ {this.props.user.fullName} +
+
+ ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/Sidebar.js b/front-end/src/components/FleetManager-Components/Sidebar.js new file mode 100644 index 0000000..5fab916 --- /dev/null +++ b/front-end/src/components/FleetManager-Components/Sidebar.js @@ -0,0 +1,27 @@ +import React, {Component} from "react"; + +export default class Sidebar extends Component { + + constructor(props) { + super(props) + + this.state={ + + } + } + + render() { + + var vehicleList = this.props.companyVehicles.map((vehicle, index) => { + return ( +
this.props.selectVehicle(vehicle.id)} key={`vehicleList-${index}`} className={`py-2 border-b pl-4 hover:cursor-pointer ${(this.props.selectedVehicle === vehicle.id) ? 'bg-gray-400 text-white': ''}`}>Vehicle {vehicle.name}
+ ) + }) + + return ( +
+ {vehicleList} +
+ ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation.js b/front-end/src/components/FleetManager-Components/VehicleInformation.js new file mode 100644 index 0000000..c603d7e --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation.js @@ -0,0 +1,33 @@ +import React, {Component} from "react"; + +import VehicleName from "./VehicleInformation/VehicleName"; +import VehicleImage from "./VehicleInformation/VehicleImage"; +import Registration from "./VehicleInformation/Registration"; +import VehicleDetails from "./VehicleInformation/VehicleDetails"; +import ServiceHistory from "./VehicleInformation/ServiceHistory"; +import FuelPurchases from "./FuelPurchases"; + +export default class VehicleInformation extends Component { + + render() { + return ( + +
+ + +
+ +
+ + +
+
+ + + + +
+ ) + } +} + diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation/Registration.js b/front-end/src/components/FleetManager-Components/VehicleInformation/Registration.js new file mode 100644 index 0000000..93807ed --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation/Registration.js @@ -0,0 +1,42 @@ +import React, {Component} from "react"; +import EditableTextDisplay from "../../Informational-Components/EditableTextDisplay"; + +export default class Registration extends Component { + + constructor(props){ + super(props) + + this.state = { + plate: '', + expiration: '', + locale: '' + } + } + + editFieldCallBack = (newValue, label) => { + this.setState({ + [label]: newValue + }) + } + + render() { + + return ( +
+
Registration
+
+
Locale:
+ +
+
+
Plate:
+ +
+
+
Expiration:
+ +
+
+ ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation/ServiceHistory.js b/front-end/src/components/FleetManager-Components/VehicleInformation/ServiceHistory.js new file mode 100644 index 0000000..32f5099 --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation/ServiceHistory.js @@ -0,0 +1,47 @@ +import { faChevronUp, faChevronDown } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import React, {Component} from "react"; + +export default class ServiceHistory extends Component { + + constructor(props){ + super() + + this.state = { + expanded: false + } + } + + toggleExpanded = () => { + this.setState({ + expanded: !this.state.expanded + }) + } + + render() { + + return ( + <> +
+
Service History
+ +
+
Add
+
+ { + (this.state.expanded) + ? + : + } +
+
+
+ { + (this.state.expanded) + ?
Service History
+ : null + } + + ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleDetails.js b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleDetails.js new file mode 100644 index 0000000..0380918 --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleDetails.js @@ -0,0 +1,46 @@ +import React, {Component} from "react"; +import EditableTextDisplay from "../../Informational-Components/EditableTextDisplay"; + +export default class VehicleDetails extends Component { + + constructor(props) { + super(props) + + this.state = { + vin: "1HGBH41JXMN109186", + year: 2017, + make: "Chevrolet", + model: "Silverado" + } + } + + editedTextCallback = (newValue, label) => { + this.setState({ + [label]: newValue + }) + } + + render() { + return ( +
+
Information
+
+
VIN:
+ +
+
+
Year:
+ +
+
+
Make:
+ +
+
+
Model:
+ +
+
+ ) + } +} diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleImage.js b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleImage.js new file mode 100644 index 0000000..d3d9afd --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleImage.js @@ -0,0 +1,35 @@ +import React, { Component } from "react"; +import { Tooltip } from 'react-tooltip' + +export default class VehicleImage extends Component { + + constructor(props) { + super(props) + + this.state = { + imageSet: false, + edit: true + } + } + + updateImage = () => { + + } + + render () { + return ( + <> +
+
{ + (this.state.imageSet) + ? Vehicle + :
Image Not Set
+ }
+
+ +
Click to Edit
+
+ + ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleName.js b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleName.js new file mode 100644 index 0000000..9671432 --- /dev/null +++ b/front-end/src/components/FleetManager-Components/VehicleInformation/VehicleName.js @@ -0,0 +1,72 @@ +import React, { Component } from "react" +import Loading from "../../Informational-Components/Loading" +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" +import { faPenToSquare, faSave } from "@fortawesome/free-solid-svg-icons" + +import { Tooltip } from "react-tooltip" + +export default class VehicleName extends Component { + constructor(props) { + super(props) + + this.state = { + vehicleName: 'Temp Vehicle Name', + vehicleNameEdit: '', + loading: false, + editing: false + } + } + + editVehicleName = () => { + this.setState({ + vehicleNameEdit: this.state.vehicleName, + editing: true + }) + } + + updateVehicleName = (event) => { + this.setState({ + vehicleNameEdit: event.target.value + }) + } + + saveVehicleNameChange = () => { + this.setState({ + loading: true + }, () => this.setState({ + vehicleName: this.state.vehicleNameEdit, + editing: false + }, () => { + this.setState({ + loading: false + }) + })) + + } + + render() { + return ( +
+ { + (this.state.loading) + ? + : (this.state.editing) + ?
+ +
+ Save changes +
+ :
+ {this.state.vehicleName} +
+ + Edit vehicle name +
+
+ } + + +
+ ) + } +} \ No newline at end of file diff --git a/front-end/src/components/FleetManager.js b/front-end/src/components/FleetManager.js index 8d9d1cc..7c889b7 100644 --- a/front-end/src/components/FleetManager.js +++ b/front-end/src/components/FleetManager.js @@ -1,5 +1,36 @@ -export default function FleetManager() { - return ( -
- ) +import { Component } from "react"; +import Header from "./FleetManager-Components/Header"; +import Sidebar from "./FleetManager-Components/Sidebar"; +import VehicleInformation from "./FleetManager-Components/VehicleInformation"; + +export default class FleetManager extends Component { + constructor(props) { + super(props) + + this.state = { + companyVehicles: [ + {id: 1, name: "1"}, {id: 2, name: "2"}, {id: 3, name: "3"}, {id: 4, name: "4"}, {id: 5, name: "5"} + ], + selectedVehicle: 3 + } + } + + updateSelectedVehicle = (selected) => { + this.setState({ + selectedVehicle: selected + }) + } + + render () { + return ( +
+
+
+ + +
+
+ ) + } + } \ No newline at end of file diff --git a/front-end/src/components/Informational-Components/EditableTextDisplay.js b/front-end/src/components/Informational-Components/EditableTextDisplay.js new file mode 100644 index 0000000..c6e9c4a --- /dev/null +++ b/front-end/src/components/Informational-Components/EditableTextDisplay.js @@ -0,0 +1,76 @@ +import React, {Component} from "react"; +import Loading from "./Loading"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faCancel, faSave, faEdit } from "@fortawesome/free-solid-svg-icons"; +import { Tooltip } from "react-tooltip"; +export default class EditableTextDisplay extends Component { + + constructor(props) { + super(props) + + this.state = { + editValue: '', + loading: false, + edit: false + } + } + + edit = () => { + this.setState({ + editValue: this.props.defaultValue, + edit: true + }) + } + + handleChange = (event) => { + this.setState({ + editValue: event.target.value + }) + } + + cancel = () => { + this.setState({ + editValue: '', + edit: false + }) + } + + propagateChange = () => { + this.props.callback(this.state.editValue, this.props.label); + + this.setState({ + edit: false + }) + } + + render () { + return ( +
+ { + (this.state.loading) + ? + : (this.state.edit) + ?
+ +
+
+ + Save {this.props.label.toUpperCase()} + + + Cancel {this.props.label.toUpperCase()} Edit + +
+ :
+
{this.props.defaultValue}
+
+ + Edit {this.props.label.toUpperCase()} + +
+ + } +
+ ) + } +} \ No newline at end of file diff --git a/front-end/src/components/Informational-Components/Loading.js b/front-end/src/components/Informational-Components/Loading.js new file mode 100644 index 0000000..10bd3d4 --- /dev/null +++ b/front-end/src/components/Informational-Components/Loading.js @@ -0,0 +1,9 @@ +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' + +import { faSpinner } from '@fortawesome/free-solid-svg-icons' + +export default function Loading() { + return ( + + ) +} \ No newline at end of file diff --git a/front-end/src/images/car-silhouet-png-21300.png b/front-end/src/images/car-silhouet-png-21300.png new file mode 100644 index 0000000000000000000000000000000000000000..28cd92d164d788f696e9c5bb0dc115f0ff1a6f5c GIT binary patch literal 26335 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 literal 0 HcmV?d00001 diff --git a/front-end/src/index.js b/front-end/src/index.js index ba4beca..5d4fdcf 100644 --- a/front-end/src/index.js +++ b/front-end/src/index.js @@ -3,14 +3,11 @@ import ReactDOM from 'react-dom/client'; import App from './App'; import reportWebVitals from './reportWebVitals'; -import { Provider } from 'react-redux' -import store from './store' - const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + - + ); // If you want to start measuring performance in your app, pass a function diff --git a/front-end/src/main.css b/front-end/src/main.css index b5c61c9..bd6213e 100644 --- a/front-end/src/main.css +++ b/front-end/src/main.css @@ -1,3 +1,3 @@ @tailwind base; @tailwind components; -@tailwind utilities; +@tailwind utilities; \ No newline at end of file diff --git a/front-end/src/stateSlicers/authenticationSlice.js b/front-end/src/stateSlicers/authenticationSlice.js deleted file mode 100644 index 49dbeb7..0000000 --- a/front-end/src/stateSlicers/authenticationSlice.js +++ /dev/null @@ -1,29 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - -export const authenticationSlice = createSlice({ - name: 'auth', - initialState: { - authenticated: false, - userId: null, - fullName: null - }, - reducers: { - authenticated: (state, action) => { - state.authenticated = true; - state.userId = action.payload.userId; - state.fullName = action.payload.fullName; - }, - logout: (state) => { - state = { - authenticated: false, - userId: null, - fullName: null - } - } - } -}) - -export const {authenticated, logout} = authenticationSlice.actions -export const selectAuthenticated = (state) => state.authenticated - -export default authenticationSlice.reducer \ No newline at end of file diff --git a/front-end/src/store.js b/front-end/src/store.js deleted file mode 100644 index fdd6bdd..0000000 --- a/front-end/src/store.js +++ /dev/null @@ -1,7 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit' - -import authenticationReducer from './stateSlicers/authenticationSlice' - -export default configureStore({ - reducer: {authenticationReducer}, -}) \ No newline at end of file