@bluemarble/bm-components 0.0.80 → 0.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js
CHANGED
|
@@ -15129,7 +15129,7 @@ function createFilter(filters) {
|
|
|
15129
15129
|
};
|
|
15130
15130
|
}
|
|
15131
15131
|
|
|
15132
|
-
function useGrid({ columns, filters = [], rowsPerPageOptions = [30, 60, 100] }) {
|
|
15132
|
+
function useGrid({ columns, filters = [], search, rowsPerPageOptions = [30, 60, 100] }) {
|
|
15133
15133
|
const [defaultData, setDefaultData] = useState([]);
|
|
15134
15134
|
const [sortedBy, setSortedBy] = useState('');
|
|
15135
15135
|
const [sortedDirection, setSortedDirection] = useState('desc');
|
|
@@ -15192,17 +15192,21 @@ function useGrid({ columns, filters = [], rowsPerPageOptions = [30, 60, 100] })
|
|
|
15192
15192
|
setRowsPerPage(rows);
|
|
15193
15193
|
};
|
|
15194
15194
|
const filteredData = useMemo(() => {
|
|
15195
|
-
|
|
15195
|
+
let newData = defaultData.slice(0);
|
|
15196
|
+
if (search && search.value !== '') {
|
|
15197
|
+
const searchBy = createSearch(search);
|
|
15198
|
+
newData = newData.filter(searchBy);
|
|
15199
|
+
}
|
|
15196
15200
|
const newFilter = createFilter(filters);
|
|
15197
15201
|
return newData.filter(newFilter.apply);
|
|
15198
|
-
}, [defaultData, filters]);
|
|
15202
|
+
}, [defaultData, filters, search]);
|
|
15199
15203
|
const displayData = useMemo(() => {
|
|
15200
15204
|
const sortedData = sortData(filteredData);
|
|
15201
15205
|
const startPage = currentPage * rowsPerPage;
|
|
15202
15206
|
const endPage = startPage + rowsPerPage;
|
|
15203
15207
|
return sortedData.slice(startPage, endPage);
|
|
15204
15208
|
}, [sortedBy, sortedDirection, filteredData, currentPage, rowsPerPage]);
|
|
15205
|
-
const totalNumberOfPages = Math.
|
|
15209
|
+
const totalNumberOfPages = Math.ceil(filteredData.length / rowsPerPage) - 1;
|
|
15206
15210
|
return {
|
|
15207
15211
|
data: displayData,
|
|
15208
15212
|
set,
|
|
@@ -15220,6 +15224,44 @@ function useGrid({ columns, filters = [], rowsPerPageOptions = [30, 60, 100] })
|
|
|
15220
15224
|
setSort
|
|
15221
15225
|
};
|
|
15222
15226
|
}
|
|
15227
|
+
function searchKeysForValue(row, compare) {
|
|
15228
|
+
const rowKeys = Object.keys(row);
|
|
15229
|
+
let match = false;
|
|
15230
|
+
const isNumberOrString = (value) => ['number', 'string'].includes(typeof value);
|
|
15231
|
+
for (const key of rowKeys) {
|
|
15232
|
+
const objValue = row[key];
|
|
15233
|
+
if (objValue) {
|
|
15234
|
+
if (Array.isArray(objValue))
|
|
15235
|
+
match = objValue.some((obj) => isNumberOrString(obj)
|
|
15236
|
+
? compare(obj)
|
|
15237
|
+
: searchKeysForValue(obj, compare));
|
|
15238
|
+
else if (typeof objValue === 'object')
|
|
15239
|
+
match = searchKeysForValue(objValue, compare);
|
|
15240
|
+
else
|
|
15241
|
+
match = compare(row[key]);
|
|
15242
|
+
if (match)
|
|
15243
|
+
return match;
|
|
15244
|
+
}
|
|
15245
|
+
}
|
|
15246
|
+
return match;
|
|
15247
|
+
}
|
|
15248
|
+
function createSearch(options) {
|
|
15249
|
+
const searchValue = options.caseSensitive
|
|
15250
|
+
? options.value
|
|
15251
|
+
: String(options.value).toLowerCase();
|
|
15252
|
+
function compare(objValue) {
|
|
15253
|
+
const value = options.caseSensitive
|
|
15254
|
+
? String(objValue)
|
|
15255
|
+
: String(objValue).toLowerCase();
|
|
15256
|
+
if (options.exact)
|
|
15257
|
+
return value === searchValue;
|
|
15258
|
+
return value.includes(searchValue);
|
|
15259
|
+
}
|
|
15260
|
+
return (row) => {
|
|
15261
|
+
const match = searchKeysForValue(row, compare);
|
|
15262
|
+
return match;
|
|
15263
|
+
};
|
|
15264
|
+
}
|
|
15223
15265
|
|
|
15224
15266
|
/* eslint no-undef: "off" */
|
|
15225
15267
|
function useEvent(event, handler, passive = false) {
|