From 27d68b50e96b37b37637d11fca04b8e49a490cea Mon Sep 17 00:00:00 2001 From: npalOmega Date: Sun, 11 Jan 2026 17:35:46 -0600 Subject: [PATCH] commiting changes --- public/logo.png | Bin 0 -> 7456 bytes src/App.js | 80 +++- src/apiUtil.js | 14 +- src/components/Sidebar.js | 165 ++----- src/components/Topbar.js | 18 +- src/index.css | 419 ++++++++++++------ src/index.js | 2 - src/pages/ContactsPage.js | 74 ---- src/pages/PmSchedule/edit/api.js | 6 + src/pages/PmSchedule/form/ContactFormPage.css | 180 ++++++++ .../PmSchedule/form/PmScheduleFormPage.js | 114 +++++ src/pages/PmSchedule/list/Delete.js | 22 + src/pages/PmSchedule/list/Form.js | 0 src/pages/PmSchedule/list/List.js | 63 +++ src/pages/PmSchedule/list/Table.js | 37 ++ src/pages/PmSchedule/list/api.js | 30 ++ src/pages/PmSchedule/list/styles.css | 6 + src/pages/PmSchedule/list/useItems.js | 31 ++ src/pages/PmSchedule/new/api.js | 11 + src/pages/accounts/edit/api.js | 5 + src/pages/accounts/form/AccountFormPage.js | 223 ++++++++++ src/pages/accounts/form/ContactFormPage.css | 180 ++++++++ src/pages/accounts/list/Delete.js | 22 + src/pages/accounts/list/Form.js | 0 src/pages/accounts/list/List.js | 52 +++ src/pages/accounts/list/Table.js | 37 ++ src/pages/accounts/list/api.js | 36 ++ src/pages/accounts/list/styles.css | 6 + src/pages/accounts/list/useItems.js | 31 ++ src/pages/accounts/new/api.js | 5 + src/pages/employees/edit/api.js | 6 + src/pages/employees/form/ContactFormPage.css | 180 ++++++++ src/pages/employees/form/EmployeeFormPage.js | 189 ++++++++ src/pages/employees/list/Delete.js | 22 + src/pages/employees/list/Form.js | 0 src/pages/employees/list/List.js | 92 ++++ src/pages/employees/list/Table.js | 37 ++ src/pages/employees/list/api.js | 35 ++ src/pages/employees/list/styles.css | 6 + src/pages/employees/list/useItems.js | 31 ++ src/pages/employees/new/api.js | 6 + src/pages/followup/edit/api.js | 6 + src/pages/followup/form/ContactFormPage.css | 180 ++++++++ src/pages/followup/form/FollowUpFormPage.js | 106 +++++ src/pages/followup/list/Delete.js | 22 + src/pages/followup/list/Form.js | 0 src/pages/followup/list/List.js | 98 ++++ src/pages/followup/list/Table.js | 37 ++ src/pages/followup/list/api.js | 49 ++ src/pages/followup/list/styles.css | 6 + src/pages/followup/list/useItems.js | 31 ++ src/pages/followup/new/api.js | 43 ++ 52 files changed, 2699 insertions(+), 352 deletions(-) create mode 100644 public/logo.png delete mode 100644 src/pages/ContactsPage.js create mode 100644 src/pages/PmSchedule/edit/api.js create mode 100644 src/pages/PmSchedule/form/ContactFormPage.css create mode 100644 src/pages/PmSchedule/form/PmScheduleFormPage.js create mode 100644 src/pages/PmSchedule/list/Delete.js create mode 100644 src/pages/PmSchedule/list/Form.js create mode 100644 src/pages/PmSchedule/list/List.js create mode 100644 src/pages/PmSchedule/list/Table.js create mode 100644 src/pages/PmSchedule/list/api.js create mode 100644 src/pages/PmSchedule/list/styles.css create mode 100644 src/pages/PmSchedule/list/useItems.js create mode 100644 src/pages/PmSchedule/new/api.js create mode 100644 src/pages/accounts/edit/api.js create mode 100644 src/pages/accounts/form/AccountFormPage.js create mode 100644 src/pages/accounts/form/ContactFormPage.css create mode 100644 src/pages/accounts/list/Delete.js create mode 100644 src/pages/accounts/list/Form.js create mode 100644 src/pages/accounts/list/List.js create mode 100644 src/pages/accounts/list/Table.js create mode 100644 src/pages/accounts/list/api.js create mode 100644 src/pages/accounts/list/styles.css create mode 100644 src/pages/accounts/list/useItems.js create mode 100644 src/pages/accounts/new/api.js create mode 100644 src/pages/employees/edit/api.js create mode 100644 src/pages/employees/form/ContactFormPage.css create mode 100644 src/pages/employees/form/EmployeeFormPage.js create mode 100644 src/pages/employees/list/Delete.js create mode 100644 src/pages/employees/list/Form.js create mode 100644 src/pages/employees/list/List.js create mode 100644 src/pages/employees/list/Table.js create mode 100644 src/pages/employees/list/api.js create mode 100644 src/pages/employees/list/styles.css create mode 100644 src/pages/employees/list/useItems.js create mode 100644 src/pages/employees/new/api.js create mode 100644 src/pages/followup/edit/api.js create mode 100644 src/pages/followup/form/ContactFormPage.css create mode 100644 src/pages/followup/form/FollowUpFormPage.js create mode 100644 src/pages/followup/list/Delete.js create mode 100644 src/pages/followup/list/Form.js create mode 100644 src/pages/followup/list/List.js create mode 100644 src/pages/followup/list/Table.js create mode 100644 src/pages/followup/list/api.js create mode 100644 src/pages/followup/list/styles.css create mode 100644 src/pages/followup/list/useItems.js create mode 100644 src/pages/followup/new/api.js diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa57f7bd9f28dcb555c096b0c704f7fc72519b5 GIT binary patch literal 7456 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 literal 0 HcmV?d00001 diff --git a/src/App.js b/src/App.js index a6d479d5..c06f9a32 100644 --- a/src/App.js +++ b/src/App.js @@ -1,21 +1,77 @@ -import React from "react"; +import React, { useState } from "react"; +import { BrowserRouter, Routes, Route } from "react-router-dom"; + import Sidebar from "./components/Sidebar"; import Topbar from "./components/Topbar"; -import Contacts from "./components/Contacts"; -import ContactsList from './pages/contacts/list/List' -import ContactFormPage from './pages/contacts/form/ContactFormPage' +// CONTACTS +import ContactsList from "./pages/contacts/list/List"; +import ContactFormPage from "./pages/contacts/form/ContactFormPage"; +import ContactEditPage from "./pages/contacts/form/ContactFormPage"; + +// ACCOUNTS +import AccountList from "./pages/accounts/list/List"; +import AccountForm from "./pages/accounts/form/AccountFormPage"; +import AccountEdit from "./pages/accounts/form/AccountFormPage"; + +// EMPLOYEES +import EmployeeList from "./pages/employees/list/List"; +import EmployeeForm from "./pages/employees/form/EmployeeFormPage"; +import EmployeeEdit from "./pages/employees/form/EmployeeFormPage"; + +// FOLLOW UPS +import FollowUpList from "./pages/followup/list/List"; +import FollowUpForm from "./pages/followup/form/FollowUpFormPage"; +import FollowUpEdit from "./pages/followup/form/FollowUpFormPage"; + +// PM SCHEDULES +import PMScheduleList from "./pages/PmSchedule/list/List"; +import PMScheduleForm from "./pages/PmSchedule/form/PmScheduleFormPage"; +import PMScheduleEdit from "./pages/PmSchedule/form/PmScheduleFormPage"; export default function App() { + const [navCollapsed, setNavCollapsed] = useState(false); + return ( -
- -
- -
- + +
+ + +
+ setNavCollapsed(v => !v)} /> + +
+ + + {/* CONTACTS ROUTES */} + } /> + } /> + } /> + + {/* ACCOUNTS ROUTES */} + } /> + } /> + } /> + + {/* EMPLOYEES ROUTES */} + } /> + } /> + } /> + + {/* FOLLOW UPS */} + } /> + } /> + } /> + + {/* PM SCHEDULES */} + } /> + } /> + } /> + + +
-
+ ); -} \ No newline at end of file +} diff --git a/src/apiUtil.js b/src/apiUtil.js index 6a6a1c24..c2b1e150 100644 --- a/src/apiUtil.js +++ b/src/apiUtil.js @@ -23,7 +23,7 @@ export const get = (url) => }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); export const post = (url, payload) => @@ -34,7 +34,7 @@ export const post = (url, payload) => }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); export const postFormBody = (url, payload) => { @@ -53,7 +53,7 @@ export const post = (url, payload) => }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); }; @@ -65,7 +65,7 @@ export const put = (url, payload) => }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); export const putFormBody = (url, payload) => { @@ -84,7 +84,7 @@ export const putFormBody = (url, payload) => { }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); } export const deleteItem = (url, payload) => @@ -95,14 +95,14 @@ export const deleteItem = (url, payload) => }) .then(handleHttpResponse) .catch((ex) => { - throw new Error(ex.message || API_ERROR_MESSAGE); + // throw new Error(ex.message || API_ERROR_MESSAGE); }); const handleHttpResponse = (response) => { if (response.ok) return response.json(); else if (response.status === 401) { - throw new Error("You are not authorized to access this page."); + //throw new Error("You are not authorized to access this page."); } throw new Error(API_ERROR_MESSAGE); }; diff --git a/src/components/Sidebar.js b/src/components/Sidebar.js index ba98f9e3..a5f0e553 100644 --- a/src/components/Sidebar.js +++ b/src/components/Sidebar.js @@ -1,4 +1,5 @@ import React from "react"; +import { NavLink } from "react-router-dom"; import { FaTachometerAlt, FaCalendarAlt, @@ -15,143 +16,49 @@ import { } from "react-icons/fa"; const navItems = [ - { label: "Dashboard", icon: }, - { label: "Calendar", icon: }, - { label: "Documents", icon: }, - { label: "Employees", icon: }, - { label: "Accounts", icon: }, - { label: "Contacts", icon: }, - { label: "Reports", icon: }, - { label: "Work Orders", icon: }, - { label: "Follow Ups", icon: }, - { label: "PM Schedules", icon: }, - { label: "Assets", icon: }, - { label: "Locations", icon: }, + { label: "Dashboard", icon: , path: "/" }, + { label: "Calendar", icon: , path: "/calendar" }, + { label: "Documents", icon: , path: "/documents" }, + { label: "Employees", icon: , path: "/employees" }, + { label: "Accounts", icon: , path: "/accounts" }, + { label: "Contacts", icon: , path: "/contacts" }, + { label: "Reports", icon: , path: "/reports" }, + { label: "Work Orders", icon: , path: "/workorders" }, + { label: "Follow Ups", icon: , path: "/followups" }, + { label: "PM Schedules", icon: , path: "/pmschedules" }, + { label: "Assets", icon: , path: "/assets" }, + { label: "Locations", icon: , path: "/locations" }, ]; export default function Sidebar() { - const [selected, setSelected] = React.useState("Contacts"); - return ( -