diff --git a/src/services/pmsGrid/useGridCore.js b/src/services/pmsGrid/useGridCore.js
index 92ebc87f..e419cfed 100644
--- a/src/services/pmsGrid/useGridCore.js
+++ b/src/services/pmsGrid/useGridCore.js
@@ -43,6 +43,35 @@ export function useGridCore({
}))
);
+ /* ---------------- SELECTION ---------------- */
+ const toggleSelect = useCallback((id) => {
+ setSelected((prev) => {
+ const s = new Set(prev);
+ s.has(id) ? s.delete(id) : s.add(id);
+ return s;
+ });
+ }, []);
+ const selectAllOnPage = useCallback(
+ (rows) => {
+ setSelected((prev) => {
+ const s = new Set(prev);
+ rows.forEach((r) => s.add(r[rowKey]));
+ return s;
+ });
+ },
+ [rowKey]
+ );
+ const deselectAllOnPage = useCallback(
+ (rows) => {
+ setSelected((prev) => {
+ const s = new Set(prev);
+ rows.forEach((r) => s.delete(r[rowKey]));
+ return s;
+ });
+ },
+ [rowKey]
+ );
+
/* ---------------- SEARCH (DEBOUNCE) ---------------- */
useEffect(() => {
const t = setTimeout(() => {
@@ -53,40 +82,46 @@ export function useGridCore({
}, [search]);
/* ---------------- CLIENT MODE ---------------- */
- const clientRows = useMemo(() => {
- if (serverMode) return [];
+const filteredData = useMemo(() => {
+ if (serverMode) return [];
+ let filtered = data;
- let filtered = data;
+ if (search) {
+ const q = search.toLowerCase();
+ filtered = filtered.filter((r) =>
+ Object.values(r).some((v) =>
+ String(v ?? "").toLowerCase().includes(q)
+ )
+ );
+ }
- if (search) {
- const q = search.toLowerCase();
- filtered = filtered.filter((r) =>
- Object.values(r).some((v) =>
- String(v ?? "")
- .toLowerCase()
- .includes(q)
- )
- );
- }
+ if (sortBy.key) {
+ const dir = sortBy.dir === "asc" ? 1 : -1;
+ filtered = [...filtered].sort(
+ (a, b) =>
+ String(a[sortBy.key] ?? "").localeCompare(
+ String(b[sortBy.key] ?? "")
+ ) * dir
+ );
+ }
- if (sortBy.key) {
- const dir = sortBy.dir === "asc" ? 1 : -1;
- filtered = [...filtered].sort(
- (a, b) =>
- String(a[sortBy.key] ?? "").localeCompare(
- String(b[sortBy.key] ?? "")
- ) * dir
- );
- }
+ return filtered;
+}, [data, search, sortBy, serverMode]);
- setTotalRows(filtered.length);
- const start = (page - 1) * pageSize;
- return filtered.slice(start, start + pageSize);
- }, [data, search, sortBy, page, pageSize, serverMode]);
- useEffect(() => {
- if (!serverMode) setRows(clientRows);
- }, [clientRows, serverMode]);
+
+const pagedRows = useMemo(() => {
+ const start = (page - 1) * pageSize;
+ return filteredData.slice(start, start + pageSize);
+}, [filteredData, page, pageSize]);
+
+useEffect(() => {
+ if (!serverMode) {
+ setRows(pagedRows);
+ setTotalRows(filteredData.length);
+ }
+}, [serverMode, page, pageSize, filteredData.length]);
+
/* ---------------- ADVANCED FILTER ---------------- */
const setColumnAdvanceFilter = useCallback((column, filter) => {
@@ -148,35 +183,41 @@ export function useGridCore({
setSearch,
debouncedSearch,
- /* sorting */
+ /* ----------sorting------ */
sortBy,
changeSort,
- /* grouping */
+ /* --------------grouping---------------- */
groupBy,
setGroupBy,
- /* advanced filter */
+ /* --------------advanced filter----------------- */
advanceFilters,
setColumnAdvanceFilter,
- /* selection */
+ /*--------- selection ---------------------- */
selected,
setSelected,
+ toggleSelect,
+ selectAllOnPage,
+ deselectAllOnPage,
+
+ // *------------- Expanding Row --------------*/
expanded,
setExpanded,
- /* columns */
+ /* --------------columns--------------------- */
colState,
visibleColumns,
updateColumn,
setColState,
toggleExpand,
- /* data */
+
+ /* ---------------data---------------------- */
rows,
setRows,
setTotalRows,
-
+ /*------------Key and grid-mode-------------*/
serverMode,
rowKey,
};