UNPKG

@duongtrungnguyen/next-helper

Version:
122 lines 4.51 kB
"use strict"; "use client"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var use_listing_exports = {}; __export(use_listing_exports, { useListing: () => useListing }); module.exports = __toCommonJS(use_listing_exports); var import_react = require("react"); var import_use_debounce = require("use-debounce"); const useListing = (dataSource = []) => { const [displayItems, setDisplayItems] = (0, import_react.useState)([]); (0, import_react.useEffect)(() => { if (dataSource) { setDisplayItems(dataSource); } }, [dataSource]); const onSearchChange = (0, import_react.useCallback)( (0, import_use_debounce.useDebouncedCallback)((query) => { if (query) { setDisplayItems(searchFilterByStringQuery(query, dataSource)); } else { setDisplayItems(dataSource); } }, 300), [dataSource] ); const onFieldFilterChange = (0, import_react.useCallback)( (fieldName, query) => { if (query === "-") { setDisplayItems(dataSource); } else { setDisplayItems(searchFilterByField(query, fieldName, dataSource)); } }, [dataSource] ); const swapItems = (0, import_react.useCallback)((selfId, targetId, compareByField) => { setDisplayItems((prevItems) => { const newItems = [...prevItems]; const index1 = newItems.findIndex((item) => compareByField(item) === selfId); const index2 = newItems.findIndex((item) => compareByField(item) === targetId); if (index1 >= 0 && index2 >= 0) { [newItems[index1], newItems[index2]] = [newItems[index2], newItems[index1]]; } return newItems; }); }, []); const insertAfter = (0, import_react.useCallback)((selfId, targetId, compareByField) => { setDisplayItems((prevItems) => { const newItems = [...prevItems]; const indexSelf = newItems.findIndex((item) => compareByField(item) === selfId); const indexTarget = newItems.findIndex((item) => compareByField(item) === targetId); if (indexSelf >= 0 && indexTarget >= 0 && indexSelf !== indexTarget) { const [itemToMove] = newItems.splice(indexSelf, 1); newItems.splice(indexTarget + 1, 0, itemToMove); } return newItems; }); }, []); const groupSort = (0, import_react.useCallback)((groupByField, groupOrder) => { setDisplayItems((prevItems) => { const newItems = [...prevItems].sort((a, b) => { const groupA = groupByField(a); const groupB = groupByField(b); const indexA = groupOrder.indexOf(groupA); const indexB = groupOrder.indexOf(groupB); const adjustedIndexA = indexA === -1 ? groupOrder.length : indexA; const adjustedIndexB = indexB === -1 ? groupOrder.length : indexB; return adjustedIndexA - adjustedIndexB; }); return newItems; }); }, []); const searchFilterByStringQuery = (query, dataSource2) => { return (prevState) => { return (dataSource2 || prevState).filter((item) => { return Object.values(item).some( (fieldValue) => fieldValue == null ? void 0 : fieldValue.toString().toLowerCase().includes(query.toLowerCase()) ); }); }; }; const searchFilterByField = (query, field, dataSource2) => { return (prevState) => { return (dataSource2 || prevState).filter((item) => { var _a; return (_a = item[field]) == null ? void 0 : _a.toString().toLowerCase().includes(query.toLowerCase()); }); }; }; return { displayItems, setDisplayItems, onSearchChange, onFieldFilterChange, swapItems, insertAfter, groupSort }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { useListing }); //# sourceMappingURL=use-listing.js.map