diff --git a/public/assets/vendor/css/core.css b/public/assets/vendor/css/core.css index 48163eb5..244677ff 100644 --- a/public/assets/vendor/css/core.css +++ b/public/assets/vendor/css/core.css @@ -480,6 +480,24 @@ th { border-style: solid; border-width: 0; } +.vs-th { + position: relative; + border: none; + background-color: #f8f9fa; + padding: 0.75rem 1rem; + vertical-align: middle; +} + + +.vs-th::after { +content: ""; + position: absolute; + left: 0; + top: 6px; + bottom: 6px; + width: 1px; + background-color: #dee2e6; +} label { display: inline-block; diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 752ad7b4..6c5c2d74 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -26,14 +26,18 @@ import { useNavigate } from "react-router-dom"; const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { const [deletingId, setDeletingId] = useState(null); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); - const { setViewExpense, setManageExpenseModal, filterData, removeFilterChip } = useExpenseContext(); + const { + setViewExpense, + setManageExpenseModal, + filterData, + removeFilterChip, + } = useExpenseContext(); const IsExpenseEditable = useHasUserPermission(); const IsExpesneApprpve = useHasUserPermission(APPROVE_EXPENSE); const [currentPage, setCurrentPage] = useState(1); const debouncedSearch = useDebounce(searchText, 500); const navigate = useNavigate(); - const { mutate: DeleteExpense, isPending } = useDeleteExpense(); const { data, isLoading, isError, isInitialLoading, error } = useExpenseList( ITEMS_PER_PAGE, @@ -80,8 +84,9 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { displayField = "Status"; break; case "submittedBy": - key = `${item?.createdBy?.firstName ?? ""} ${item.createdBy?.lastName ?? "" - }`.trim(); + key = `${item?.createdBy?.firstName ?? ""} ${ + item.createdBy?.lastName ?? "" + }`.trim(); displayField = "Submitted By"; break; case "project": @@ -139,11 +144,14 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { label: "Submitted By", align: "text-start", getValue: (e) => - `${e.createdBy?.firstName ?? ""} ${e.createdBy?.lastName ?? "" - }`.trim() || "N/A", + `${e.createdBy?.firstName ?? ""} ${ + e.createdBy?.lastName ?? "" + }`.trim() || "N/A", customRender: (e) => ( -
navigate(`/employee/${e.createdBy?.id}`)}> +
navigate(`/employee/${e.createdBy?.id}`)} + > { lastName={e.createdBy?.lastName} /> - {`${e.createdBy?.firstName ?? ""} ${e.createdBy?.lastName ?? "" - }`.trim() || "N/A"} + {`${e.createdBy?.firstName ?? ""} ${ + e.createdBy?.lastName ?? "" + }`.trim() || "N/A"}
), @@ -176,10 +185,9 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { align: "text-center", getValue: (e) => ( {e.status?.name || "Unknown"} diff --git a/src/router/AppRoutes.jsx b/src/router/AppRoutes.jsx index 48371d83..04bdf208 100644 --- a/src/router/AppRoutes.jsx +++ b/src/router/AppRoutes.jsx @@ -107,8 +107,8 @@ const router = createBrowserRouter( { path: "/tenant/self", element: }, { path: "/organizations", element: }, { path: "/help/support", element: }, - { path: "/help/docs", element: }, - { path: "/help/connect", element: }, + { path: "/help/docs", element: }, + ], }, ], diff --git a/src/services/pmsGrid/BasicTable.jsx b/src/services/pmsGrid/BasicTable.jsx index ffbfeb03..885a2396 100644 --- a/src/services/pmsGrid/BasicTable.jsx +++ b/src/services/pmsGrid/BasicTable.jsx @@ -190,7 +190,6 @@ const boqColumns = [ */ export default function DemoBOQGrid() { useEffect(() => { - // 🔥 Initialize Bootstrap popovers after first render initPopover(); }, []); const wrapperRef = useRef() @@ -204,15 +203,7 @@ useEffect(() => { }, []); return (
- +
-
-
- {features.search && ( +
+
+
+
+ {features.search && ( setSearch(e.target.value)} /> )} +
{features.export && (
- -
+
+
+
{features.columnVisibility && ( )}
+
- +
@@ -202,7 +208,7 @@ export default function PmsGrid({ + {features.selection && ( ); })} {features.actions && ( - )} @@ -461,3 +477,4 @@ function ColumnVisibilityPanel({ columns, onToggle }) { ); } + \ No newline at end of file
0 && currentRows.every((r) => selected.has(r[rowKey])) @@ -232,19 +238,25 @@ export default function PmsGrid({ onDragStart={(e) => onDragStart(e, col.key)} onDragOver={(e) => e.preventDefault()} onDrop={(e) => onDrop(e, col.key)} - className={`pms-col-header ${col.pinned ? "pinned" : ""}`} + className={`pms-col-header vs-th ${ + col.pinned ? "pinned" : "" + }`} style={style} > -
+
col.sortable && changeSort(col.key)} style={{ cursor: col.sortable ? "pointer" : "default" }} > {col.title} {sortBy.key === col.key && ( - - [{sortBy.dir}] - + )}
@@ -270,7 +282,7 @@ export default function PmsGrid({ })} {features.actions && (
Actions @@ -357,12 +369,12 @@ export default function PmsGrid({ function renderRow(row) { return ( -
toggleSelect(row[rowKey])} /> @@ -379,13 +391,17 @@ export default function PmsGrid({ if (col.pinned === "right") style.right = `${getRightOffset(colState, col.key)}px`; return ( - + {col.render ? col.render(row) : row[col.key] ?? ""} + {features.actions(row, toggleExpand)}