From fd02748e2aa0352343753542d9a1d949a5cfc86f Mon Sep 17 00:00:00 2001 From: Dave Walker Date: Sun, 3 Dec 2023 09:14:52 +0000 Subject: [PATCH] Added manufacturer list and editing --- README.md | 14 ++- diagrams/manufacturer-editor.png | Bin 0 -> 55218 bytes diagrams/manufacturer-list.png | Bin 0 -> 72393 bytes src/music-catalogue-ui/components/app.js | 10 +- .../components/componentPicker.js | 12 ++ .../equipmentTypes/equipmentTypeEditor.js | 2 +- .../deleteManufacturerActionIcon.js | 59 +++++++++ .../manufacturers/manufacturerEditor.js | 113 ++++++++++++++++++ .../manufacturerEditor.module.css | 27 +++++ .../manufacturers/manufacturerList.js | 66 ++++++++++ .../manufacturers/manufacturerList.module.css | 9 ++ .../manufacturers/manufacturerRow.js | 48 ++++++++ src/music-catalogue-ui/components/menuBar.js | 4 +- .../helpers/api/apiManufacturers.js | 101 ++++++++++++++++ src/music-catalogue-ui/helpers/navigation.js | 2 + .../hooks/useManufacturers.js | 29 +++++ 16 files changed, 490 insertions(+), 6 deletions(-) create mode 100644 diagrams/manufacturer-editor.png create mode 100644 diagrams/manufacturer-list.png create mode 100644 src/music-catalogue-ui/components/manufacturers/deleteManufacturerActionIcon.js create mode 100644 src/music-catalogue-ui/components/manufacturers/manufacturerEditor.js create mode 100644 src/music-catalogue-ui/components/manufacturers/manufacturerEditor.module.css create mode 100644 src/music-catalogue-ui/components/manufacturers/manufacturerList.js create mode 100644 src/music-catalogue-ui/components/manufacturers/manufacturerList.module.css create mode 100644 src/music-catalogue-ui/components/manufacturers/manufacturerRow.js create mode 100644 src/music-catalogue-ui/helpers/api/apiManufacturers.js create mode 100644 src/music-catalogue-ui/hooks/useManufacturers.js diff --git a/README.md b/README.md index 2de8b62..11e0fb3 100644 --- a/README.md +++ b/README.md @@ -268,7 +268,7 @@ To be implemented in a future release. ### Equipment Types - To view a list of equipment types in the database, click on the "Equipment > Equipment Types" menu item -- A page listing the equpiment types in the database is displayed: +- A page listing the equipment types in the database is displayed: Equipment Types List @@ -281,7 +281,17 @@ To be implemented in a future release. ### Manufacturers -To be implemented in a future release. +- To view a list of manufacturers in the database, click on the "Equipment > Manufacturers" menu item +- A page listing the manufacturers in the database is displayed: + +Equipment Types List + +- Clicking on the trash can icon in a row will prompt for confirmation and then attempt to delete the manufacturer on the selected row +- Manufacturers that are currently "in use" (associated with an item of equpiment) cannot be deleted and attempting to delete them will result in an error message being displayed +- Clicking on the "Add" button opens the manufacturer editing page (see below) to add a new manufacturer +- Clicking on the edit icon in a row navigates to the manufacturer editing page for that manufacturer (see below) + +Equipment Type Editor #### The Retailers List diff --git a/diagrams/manufacturer-editor.png b/diagrams/manufacturer-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..de9297fef666bcd605f03008c4c30d08a162e506 GIT binary patch literal 55218 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 literal 0 HcmV?d00001 diff --git a/diagrams/manufacturer-list.png b/diagrams/manufacturer-list.png new file mode 100644 index 0000000000000000000000000000000000000000..d0eafd2d182a0cb9b3b75185f55840e4ddac3407 GIT binary patch literal 72393 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

;hP)0pkDD1@9xMl8fw!WRF*{HeHEqqO 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

sTe_%Y8-jNIy)16HCetR&118_@b(by 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

h4sqT^w!M1bUhwQYT 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 IKls~!0-GQVxBvhE literal 0 HcmV?d00001 diff --git a/src/music-catalogue-ui/components/app.js b/src/music-catalogue-ui/components/app.js index ac3037d..77db2c1 100644 --- a/src/music-catalogue-ui/components/app.js +++ b/src/music-catalogue-ui/components/app.js @@ -15,14 +15,18 @@ const defaultContext = { // Current page page: pages.artists, - // Artist, album, track and retailer context + // Music catalogue artist: null, album: null, track: null, + genre: null, retailer: null, + // Equipment registry + equipmentType: null, + manufacturer: null, + // Data retrieval/filering criteria - genre: null, filter: "A", isWishList: false, }; @@ -43,6 +47,7 @@ const App = () => { retailer = null, genre = null, equipmentType = null, + manufacturer = null, filter = "A", isWishList = false, } = {}) => { @@ -55,6 +60,7 @@ const App = () => { retailer: typeof retailer != "undefined" ? retailer : null, genre: typeof genre != "undefined" ? genre : null, equipmentType: typeof equipmentType != "undefined" ? equipmentType : null, + manufacturer: typeof manufacturer != "undefined" ? manufacturer : null, filter: typeof filter != "undefined" ? filter : "A", isWishList: typeof isWishList != "undefined" ? isWishList : false, }; diff --git a/src/music-catalogue-ui/components/componentPicker.js b/src/music-catalogue-ui/components/componentPicker.js index 1f79f69..df4a0d6 100644 --- a/src/music-catalogue-ui/components/componentPicker.js +++ b/src/music-catalogue-ui/components/componentPicker.js @@ -19,6 +19,8 @@ import ArtistEditor from "./artists/artistEditor"; import RetailerStatisticsReport from "./reports/retailerStatisticsReport"; import EquipmentTypeList from "./equipmentTypes/equipmentTypeList"; import EquipmentTypeEditor from "./equipmentTypes/equipmentTypeEditor"; +import ManufacturerList from "./manufacturers/manufacturerList"; +import ManufacturerEditor from "./manufacturers/manufacturerEditor"; /** * Component using the current context to select and render the current page @@ -129,6 +131,16 @@ const ComponentPicker = ({ context, navigate, logout }) => { logout={logout} /> ); + case pages.manufacturers: + return ; + case pages.manufacturerEditor: + return ( + + ); case pages.export: return ; case pages.artistStatisticsReport: diff --git a/src/music-catalogue-ui/components/equipmentTypes/equipmentTypeEditor.js b/src/music-catalogue-ui/components/equipmentTypes/equipmentTypeEditor.js index 8bef8e1..75e0429 100644 --- a/src/music-catalogue-ui/components/equipmentTypes/equipmentTypeEditor.js +++ b/src/music-catalogue-ui/components/equipmentTypes/equipmentTypeEditor.js @@ -43,7 +43,7 @@ const EquipmentTypeEditor = ({ equipmentType, navigate, logout }) => { ); } - // Go back to the artist list, which should reflect the updated details + // Go back to the equipment type list, which should reflect the updated details navigate({ page: pages.equipmentTypes, }); diff --git a/src/music-catalogue-ui/components/manufacturers/deleteManufacturerActionIcon.js b/src/music-catalogue-ui/components/manufacturers/deleteManufacturerActionIcon.js new file mode 100644 index 0000000..cb8524e --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/deleteManufacturerActionIcon.js @@ -0,0 +1,59 @@ +import { useCallback } from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faTrashAlt } from "@fortawesome/free-solid-svg-icons"; +import { + apiDeleteManufacturer, + apiFetchManufacturers, +} from "@/helpers/api/apiManufacturers"; + +/** + * Icon and associated action to delete a manufacturer + * @param {*} manufacturer + * @param {*} logout + * @param {*} setManufacturers + * @param {*} setError + * @returns + */ +const DeleteManufacturerActionIcon = ({ + manufacturer, + logout, + setManufacturers, + setError, +}) => { + /* Callback to prompt for confirmation and delete amanufacturer */ + const confirmDeleteManufacturer = useCallback( + async (e) => { + // Prevent the default action associated with the click event + e.preventDefault(); + + // Show a confirmation message and get the user response + const message = `This will delete the manufacturer "${manufacturer.name}" - click OK to confirm`; + const result = confirm(message); + + // If they've confirmed the deletion ... + if (result) { + // ... delete the manufacturer and confirm the API call was successful + try { + const result = await apiDeleteManufacturer(manufacturer.id, logout); + if (result) { + // Successful, so refresh the manufacturer list + const fetchedManufacturers = await apiFetchManufacturers(logout); + setManufacturers(fetchedManufacturers); + } + } catch (ex) { + setError(`Error deleting the equipment type: ${ex.message}`); + } + } + }, + [manufacturer, logout, setManufacturers, setError] + ); + + return ( + confirmDeleteManufacturer(e)} + /> + ); +}; + +export default DeleteManufacturerActionIcon; diff --git a/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.js b/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.js new file mode 100644 index 0000000..6543a55 --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.js @@ -0,0 +1,113 @@ +import styles from "./manufacturerEditor.module.css"; +import pages from "@/helpers/navigation"; +import FormInputField from "../common/formInputField"; +import { useState, useCallback } from "react"; +import { + apiCreateManufacturer, + apiUpdateManufacturer, +} from "@/helpers/api/apiManufacturers"; + +/** + * Component to render the manufacturer editor + * @param {*} manufacturer + * @param {*} navigate + * @param {*} logout + */ +const EquipmentTypeEditor = ({ manufacturer, navigate, logout }) => { + // Set up state + const initialName = manufacturer != null ? manufacturer.name : null; + const [name, setName] = useState(initialName); + const [error, setError] = useState(""); + + const saveManufacturer = useCallback( + async (e) => { + // Prevent the default action associated with the click event + e.preventDefault(); + + // Clear pre-existing errors + setError(""); + + try { + // Either add or update the manufacturer, depending on whether there's an + // existing manufacturer or not + let updatedEquipmentType = null; + if (manufacturer == null) { + // Create the manufacturer + updatedEquipmentType = await apiCreateManufacturer(name, logout); + } else { + // Update the existing manufacturer + updatedEquipmentType = await apiUpdateManufacturer( + manufacturer.id, + name, + logout + ); + } + + // Go back to the manufacturer list, which should reflect the updated details + navigate({ + page: pages.manufacturers, + }); + } catch (ex) { + setError( + `Error saving the updated manufacturer details: ${ex.message}` + ); + } + }, + [manufacturer, logout, name, navigate] + ); + + // Set the page title + const pageTitle = + manufacturer != null ? manufacturer.name : "New Manufacturer"; + + return ( + <> +

+
+
+
+ {error != "" ? ( +
{error}
+ ) : ( + <> + )} +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + ); +}; + +export default EquipmentTypeEditor; diff --git a/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.module.css b/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.module.css new file mode 100644 index 0000000..b9aa728 --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/manufacturerEditor.module.css @@ -0,0 +1,27 @@ +.manufacturerEditorFormContainer { + display: flex; + justify-content: center; + align-items: center; +} + +.manufacturerEditorForm { + width: 80%; + padding-top: 20px; + padding-bottom: 20px; +} + +.manufacturerEditorFormLabel { + font-size: 14px; + font-weight: 600; + color: rgb(34, 34, 34); +} + +.manufacturerEditorButton { + margin-left: 10px; + float: right; +} + +.manufacturerEditorError { + font-weight: bold; + color: red; +} diff --git a/src/music-catalogue-ui/components/manufacturers/manufacturerList.js b/src/music-catalogue-ui/components/manufacturers/manufacturerList.js new file mode 100644 index 0000000..f85a240 --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/manufacturerList.js @@ -0,0 +1,66 @@ +import styles from "./manufacturerList.module.css"; +import pages from "@/helpers/navigation"; +import useManufacturers from "@/hooks/useManufacturers"; +import { useState } from "react"; +import ManufacturerRow from "./manufacturerRow"; + +/** + * Component to render a table listing all the manufacturers in the register + * @param {*} navigate + * @param {*} logout + * @returns + */ +const ManufacturerList = ({ navigate, logout }) => { + const { manufacturers, setManufacturers } = useManufacturers(logout); + const [error, setError] = useState(""); + + return ( + <> +
+
Manufacturers
+
+
+ {error != "" ? ( +
{error}
+ ) : ( + <> + )} +
+ + + + + + + {manufacturers != null && ( + + {manufacturers.map((m) => ( + + ))} + + )} +
Name
+
+ +
+ + ); +}; + +export default ManufacturerList; diff --git a/src/music-catalogue-ui/components/manufacturers/manufacturerList.module.css b/src/music-catalogue-ui/components/manufacturers/manufacturerList.module.css new file mode 100644 index 0000000..2f6a20c --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/manufacturerList.module.css @@ -0,0 +1,9 @@ +.manufacturerListAddButton { + float: right; +} + +.manufacturerListError { + font-weight: bold; + color: red; + text-align: center; +} diff --git a/src/music-catalogue-ui/components/manufacturers/manufacturerRow.js b/src/music-catalogue-ui/components/manufacturers/manufacturerRow.js new file mode 100644 index 0000000..c869f4a --- /dev/null +++ b/src/music-catalogue-ui/components/manufacturers/manufacturerRow.js @@ -0,0 +1,48 @@ +import pages from "@/helpers/navigation"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faPenToSquare } from "@fortawesome/free-solid-svg-icons"; +import DeleteManufacturerActionIcon from "./deleteManufacturerActionIcon"; + +/** + * Component to render a row containing the details for a single manufacturer + * @param {*} manufacturer + * @param {*} navigate + * @param {*} logout + * @param {*} setManufacturers + * @param {*} setError + * @returns + */ +const ManufacturerRow = ({ + manufacturer, + navigate, + logout, + setManufacturers, + setError, +}) => { + return ( + + {manufacturer.name} + + + + + + navigate({ + page: pages.manufacturerEditor, + manufacturer: manufacturer, + }) + } + /> + + + ); +}; + +export default ManufacturerRow; diff --git a/src/music-catalogue-ui/components/menuBar.js b/src/music-catalogue-ui/components/menuBar.js index 09894e2..4c52ba6 100644 --- a/src/music-catalogue-ui/components/menuBar.js +++ b/src/music-catalogue-ui/components/menuBar.js @@ -66,7 +66,9 @@ const MenuBar = ({ navigate, logout }) => {
navigate({ page: pages.equipmentTypes })}> Equipment Types - Manufacturers + navigate({ page: pages.manufacturers })}> + Manufacturers + navigate({ page: pages.retailers })}>Retailers diff --git a/src/music-catalogue-ui/helpers/api/apiManufacturers.js b/src/music-catalogue-ui/helpers/api/apiManufacturers.js new file mode 100644 index 0000000..d6cac69 --- /dev/null +++ b/src/music-catalogue-ui/helpers/api/apiManufacturers.js @@ -0,0 +1,101 @@ +import config from "@/config.json"; +import { apiReadResponseData } from "./apiUtils"; +import { apiGetPostHeaders, apiGetHeaders } from "./apiHeaders"; + +/** + * Create an manufacturer + * @param {*} name + * @param {*} logout + * @returns + */ +const apiCreateManufacturer = async (name, logout) => { + // Create the request body + const body = JSON.stringify({ + name: name, + }); + + // Call the API to create the manufacturer. This will just return the current + // record if it already exists + const url = `${config.api.baseUrl}/manufacturers`; + const response = await fetch(url, { + method: "POST", + headers: apiGetPostHeaders(), + body: body, + }); + + const equipmentType = await apiReadResponseData(response, logout); + return equipmentType; +}; + +/** + * Update an manufacturer + * @param {*} id + * @param {*} name + * @param {*} logout + * @returns + */ +const apiUpdateManufacturer = async (id, name, logout) => { + // Construct the body + const body = JSON.stringify({ + id: id, + name: name, + }); + + // Call the API to set the wish list flag for a given album + const url = `${config.api.baseUrl}/manufacturers`; + const response = await fetch(url, { + method: "PUT", + headers: apiGetPostHeaders(), + body: body, + }); + + const equipmentType = await apiReadResponseData(response, logout); + return equipmentType; +}; + +/** + * Delete the manufacturer with the specified ID + * @param {*} equipmentTypeId + * @param {*} logout + * @returns + */ +const apiDeleteManufacturer = async (equipmentTypeId, logout) => { + // Call the API to delete the specified manufacturer + const url = `${config.api.baseUrl}/manufacturers/${equipmentTypeId}`; + const response = await fetch(url, { + method: "DELETE", + headers: apiGetHeaders(), + }); + + if (response.status == 401) { + // Unauthorized so the token's likely expired - force a login + logout(); + } else { + // Return the response status code + return response.ok; + } +}; + +/** + * Return a list of manufacturers + * @param {*} logout + * @returns + */ +const apiFetchManufacturers = async (logout) => { + // Call the API to retrieve the manufacturer list + const url = `${config.api.baseUrl}/manufacturers`; + const response = await fetch(url, { + method: "GET", + headers: apiGetHeaders(), + }); + + const manufacturers = await apiReadResponseData(response, logout); + return manufacturers; +}; + +export { + apiCreateManufacturer, + apiUpdateManufacturer, + apiDeleteManufacturer, + apiFetchManufacturers, +}; diff --git a/src/music-catalogue-ui/helpers/navigation.js b/src/music-catalogue-ui/helpers/navigation.js index 35e4a6b..6bf927f 100644 --- a/src/music-catalogue-ui/helpers/navigation.js +++ b/src/music-catalogue-ui/helpers/navigation.js @@ -13,6 +13,8 @@ const pages = { retailerEditor: "RetailerEditor", equipmentTypes: "EquipmentTypes", equipmentTypeEditor: "EquipmentTypeEditor", + manufacturers: "Manufacturers", + manufacturerEditor: "ManufacturerEditor", lookup: "Lookup", export: "Export", artistStatisticsReport: "ArtistStatisticsReport", diff --git a/src/music-catalogue-ui/hooks/useManufacturers.js b/src/music-catalogue-ui/hooks/useManufacturers.js new file mode 100644 index 0000000..9538c2b --- /dev/null +++ b/src/music-catalogue-ui/hooks/useManufacturers.js @@ -0,0 +1,29 @@ +import { useState, useEffect } from "react"; +import { apiFetchManufacturers } from "@/helpers/api/apiManufacturers"; + +/** + * Hook that uses the API helpers to retrieve a list of manufacturers + * from the Music Catalogue REST API + * @param {*} logout + * @returns + */ +const useManufacturers = (logout) => { + // Current list of manufacturers and the method to change it + const [manufacturers, setManufacturers] = useState([]); + + useEffect(() => { + const fetchEquipmentTypes = async () => { + try { + // Get a list of manufacturers via the service and store it in state + var fetchedManufacturers = await apiFetchManufacturers(logout); + setManufacturers(fetchedManufacturers); + } catch {} + }; + + fetchEquipmentTypes(); + }, [logout]); + + return { manufacturers, setManufacturers }; +}; + +export default useManufacturers;