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..."
+ />
+
+
+
-
-
-
- | Name |
- Industry |
- Phone |
- |
-
-
+
+
+
+
-
- {data.map((x) => (
-
- | {x.name} |
- {x.industry} |
- {x.phone} |
-
-
-
- |
-
- ))}
-
-
-
+ {loading ? (
+
Loading accounts...
+ ) : (
+
+
+
+ | Name |
+ Industry |
+ Phone |
+ |
+
+
+
+
+ {rows.map((x) => (
+
+ | {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...
- ) : (
-
-
-
- | Name |
- Job Title |
- Email |
- Phone |
- Department |
- Status |
- |
-
-
+
+
+
+
-
- {rows.map((r) => (
-
- | {r.name} |
- {r.jobTitle} |
- {r.email} |
- {r.phone} |
- {r.department} |
- {r.status} |
-
-
-
- |
+ {loading ? (
+ Loading employees...
+ ) : (
+
+
+
+ | Name |
+ Job Title |
+ Email |
+ Phone |
+ Status |
+ |
- ))}
-
-
- )}
-
+
+
+
+ {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 {