From 3f3dcc70f6a5b129c62aa0d022a2f63d9f25257e Mon Sep 17 00:00:00 2001 From: npalOmega Date: Tue, 13 Jan 2026 12:03:46 -0600 Subject: [PATCH] fix --- src/index.css | 54 +++++++++++++ src/pages/accounts/list/List.js | 120 +++++++++++++++++++--------- src/pages/accounts/list/api.js | 28 ++++--- src/pages/contacts/list/api.js | 22 +++--- src/pages/employees/list/List.js | 132 +++++++++++++++++-------------- src/pages/employees/list/api.js | 16 ++-- 6 files changed, 244 insertions(+), 128 deletions(-) diff --git a/src/index.css b/src/index.css index 68c33e8b..541ff956 100644 --- a/src/index.css +++ b/src/index.css @@ -305,3 +305,57 @@ body { .contactTable tbody tr:nth-child(even) { background: #fbfbfb; } + +.controlsTop { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; +} + +.leftControls { + display: flex; + align-items: center; +} + +.filter { + display: flex; + align-items: center; +} + +.filter select { + height: 34px; + border: 1px solid #ccc; + border-right: none; + border-radius: 4px 0 0 4px; + padding: 6px 8px; + background: #fff; +} + +.filter input { + height: 34px; + width: 260px; + border: 1px solid #ccc; + border-left: none; + border-right: none; + padding: 6px 10px; +} + +.searchBtn { + height: 34px; + padding: 0 14px; + border: 1px solid #0073aa; + background-color: #0073aa; + color: #fff; + border-radius: 0 4px 4px 0; + cursor: pointer; +} + +.searchBtn:hover { + background-color: #005f8d; +} + +.rightControls { + display: flex; + align-items: center; +} diff --git a/src/pages/accounts/list/List.js b/src/pages/accounts/list/List.js index c5e47b2c..bf1969b5 100644 --- a/src/pages/accounts/list/List.js +++ b/src/pages/accounts/list/List.js @@ -1,52 +1,100 @@ import React, { useEffect, useState } from "react"; import { fetchAccountsPaged, deleteAccount } from "./api"; +import { useNavigate } from "react-router"; +import "./styles.css"; export default function AccountList() { - const [data, setData] = useState([]); + const navigate = useNavigate(); + const [rows, setRows] = useState([]); + const [search, setSearch] = useState(""); + const [loading, setLoading] = useState(true); + + const load = async () => { + setLoading(true); + const res = await fetchAccountsPaged({ search }); + setRows(res?.rows ?? []); + setLoading(false); + }; useEffect(() => { load(); - }, []); + }, [search]); - const load = async () => { - const res = await fetchAccountsPaged({}); - setData(res.rows); + const handleDelete = async (id) => { + if (!window.confirm("Delete this account?")) return; + await deleteAccount(id); + load(); }; return ( -
-

Accounts

+
+
Accounts
- +
+
+
+
+ setSearch(e.target.value)} + placeholder="Enter search criteria here..." + /> + +
+
- - - - - - - - - +
+ +
+ - - {data.map((x) => ( - - - - - - - ))} - -
NameIndustryPhone
{x.name}{x.industry}{x.phone} - - -
-
+ {loading ? ( +
Loading accounts...
+ ) : ( + + + + + + + + + + + + {rows.map((x) => ( + + + + + + + ))} + +
NameIndustryPhone
{x.name}{x.industry}{x.phoneNumber} + + +
+ )} +
+
); } diff --git a/src/pages/accounts/list/api.js b/src/pages/accounts/list/api.js index 3bd62a40..21762832 100644 --- a/src/pages/accounts/list/api.js +++ b/src/pages/accounts/list/api.js @@ -12,23 +12,25 @@ export const fetchAccountsPaged = async ({ )}&page=${page}&pageSize=${pageSize}` ); - const rows = (res?.data || res?.Data || []).map((x) => ({ - id: x.Id, - name: x.Name ?? x.AccountName ?? "", - number: x.AccountNumber ?? "", - industry: x.Industry ?? "", - website: x.Website ?? "", - primaryContact: x.PrimaryContact ?? "", - phoneNumber: x.Phone ?? x.PhoneNumber ?? "", - owner: x.Owner ?? "", + const data = res?.data || res?.Data || []; + + const rows = data.map((x) => ({ + id: x.id ?? x.Id, + name: x.name ?? x.Name ?? x.AccountName ?? "", + number: x.number ?? x.AccountNumber ?? "", + industry: x.industry ?? x.Industry ?? "", + website: x.website ?? x.Website ?? "", + primaryContact: x.primaryContact ?? x.PrimaryContact ?? "", + phoneNumber: x.phoneNumber ?? x.Phone ?? x.PhoneNumber ?? "", + owner: x.owner ?? x.Owner ?? "", })); return { rows, - page: res?.PageNumber ?? 1, - pageSize: res?.PageSize ?? pageSize, - totalCount: res?.TotalCount ?? rows.length, - totalPages: res?.TotalPages ?? 1, + page: res?.page ?? res?.PageNumber ?? page, + pageSize: res?.pageSize ?? res?.PageSize ?? pageSize, + totalCount: res?.totalCount ?? res?.TotalCount ?? rows.length, + totalPages: res?.totalPages ?? res?.TotalPages ?? 1, }; }; diff --git a/src/pages/contacts/list/api.js b/src/pages/contacts/list/api.js index 69526405..726de4d9 100644 --- a/src/pages/contacts/list/api.js +++ b/src/pages/contacts/list/api.js @@ -5,20 +5,20 @@ import { API_URL } from '../../../constants'; export const fetchContactsPaged = async ({ search = "", page = 1, pageSize = 12 }) => { const res = await get(`${API_URL}/Contact/GetContactList?search=${encodeURIComponent(search)}&page=${page}&pageSize=${pageSize}`); const rows = (res?.data || res?.Data || []).map(x => ({ - id: x.Id, - name: x.Name, - account: x.Account ?? "", - title: x.Title ?? "", - email: x.email ?? x.Email ?? "", - phoneNumber: x.phone ?? x.PhoneNumber ?? "", - owner: x.Owner ?? "", + id: x.id, + name: x.name, + account: x.account ?? "", + title: x.title ?? "", + email: x.email ?? "", + phoneNumber: x.phone ?? "", + owner: x.owner ?? "", })); return { rows, - page: res?.PageNumber ?? 1, - pageSize: res?.PageSize ?? pageSize, - totalCount: res?.TotalCount ?? rows.length, - totalPages: res?.TotalPages ?? 1, + page: res?.pageNumber ?? 1, + pageSize: res?.pageSize ?? pageSize, + totalCount: res?.totalCount ?? rows.length, + totalPages: res?.totalPages ?? 1, }; }; diff --git a/src/pages/employees/list/List.js b/src/pages/employees/list/List.js index 637c534e..eef5bc6f 100644 --- a/src/pages/employees/list/List.js +++ b/src/pages/employees/list/List.js @@ -1,18 +1,18 @@ import React, { useEffect, useState } from "react"; import { fetchEmployeesPaged, deleteEmployee } from "./api"; import { useNavigate } from "react-router"; -import { toast } from "react-toastify"; +import "./styles.css"; export default function EmployeeList() { const navigate = useNavigate(); - const [loading, setLoading] = useState(true); const [rows, setRows] = useState([]); const [search, setSearch] = useState(""); + const [loading, setLoading] = useState(true); const load = async () => { setLoading(true); const res = await fetchEmployeesPaged({ search }); - setRows(res.rows); + setRows(res?.rows ?? []); setLoading(false); }; @@ -23,70 +23,82 @@ export default function EmployeeList() { const handleDelete = async (id) => { if (!window.confirm("Delete this employee?")) return; await deleteEmployee(id); - toast.success("Employee deleted"); load(); }; return ( -
-
-

Employees

- -
+
+
Employees
- setSearch(e.target.value)} - /> +
+
+
+
+ setSearch(e.target.value)} + placeholder="Enter search criteria here..." + /> + +
+
- {loading ? ( -

Loading employees...

- ) : ( - - - - - - - - - - - - +
+ +
+ - - {rows.map((r) => ( - - - - - - - - + {loading ? ( +
Loading employees...
+ ) : ( +
NameJob TitleEmailPhoneDepartmentStatus
{r.name}{r.jobTitle}{r.email}{r.phone}{r.department}{r.status} - - -
+ + + + + + + + - ))} - -
NameJob TitleEmailPhoneStatus
- )} -
+ + + + {rows.map((r) => ( + + {r.name} + {r.jobTitle} + {r.email} + {r.phone} + {r.status} + + + + + + ))} + + + )} +
+
); } diff --git a/src/pages/employees/list/api.js b/src/pages/employees/list/api.js index 097ef582..463a4478 100644 --- a/src/pages/employees/list/api.js +++ b/src/pages/employees/list/api.js @@ -12,14 +12,14 @@ export const fetchEmployeesPaged = async ({ )}&page=${page}&pageSize=${pageSize}` ); - const rows = (res?.data || res?.Data || []).map((x) => ({ - id: x.Id, - name: `${x.FirstName ?? ""} ${x.LastName ?? ""}`.trim(), - jobTitle: x.JobTitle ?? "", - email: x.Email ?? "", - phone: x.Phone ?? "", - department: x.Department ?? "", - status: x.Status ?? "", + const rows = (res || []).map((x) => ({ + id: x.id, + name: `${x.name ?? ""} ${x.name ?? ""}`.trim(), + jobTitle: x.jobTitle ?? "", + email: x.email ?? "", + phone: x.phone ?? "", + department: x.department ?? "", + status: x.status ?? "", })); return {