UNPKG

@braineet/ui

Version:

Braineet design system

80 lines (79 loc) 3.21 kB
"use strict"; exports.__esModule = true; exports.useSearch = void 0; var _react = _interopRequireDefault(require("react")); var _fuse = _interopRequireDefault(require("fuse.js/dist/fuse.min")); var _isEqual = _interopRequireDefault(require("lodash/isEqual")); var _excluded = ["filter"], _excluded2 = ["initialQuery"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } var searchBy = function searchBy(array, searchValue, fields, options) { if (array === void 0) { array = []; } var filter = options.filter, fuseOptions = _objectWithoutPropertiesLoose(options, _excluded); if (typeof searchValue === 'undefined' || (searchValue == null ? void 0 : searchValue.length) === 0) { if (filter) return array.filter(filter); return array; } var fuseConfig = _extends({ includeScore: true, shouldSort: true, includeMatches: true, ignoreLocation: true, threshold: 0.4 }, fuseOptions); if ((fields == null ? void 0 : fields.length) > 0) { fuseConfig.keys = fields; } var fuse = new _fuse.default(array, fuseConfig); var result = fuse.search(searchValue).map(function (res) { return res.item; }); if (filter) return result.filter(filter); return result; }; var usePrevious = function usePrevious(value) { var ref = _react.default.useRef(); _react.default.useEffect(function () { ref.current = value; }, [value]); return ref.current; }; var useSearch = exports.useSearch = function useSearch(collection, predicate, options) { if (collection === void 0) { collection = []; } if (options === void 0) { options = { initialQuery: '' }; } var _options = options, initialQuery = _options.initialQuery, searchConfig = _objectWithoutPropertiesLoose(_options, _excluded2); var _React$useState = _react.default.useState(initialQuery), value = _React$useState[0], setValue = _React$useState[1]; var prevCollection = usePrevious(collection); var prevPredicate = usePrevious(predicate); var prevValue = usePrevious(value); var _React$useState2 = _react.default.useState(function () { return searchBy(collection, value, predicate, searchConfig); }), filteredCollection = _React$useState2[0], setFilteredCollection = _React$useState2[1]; _react.default.useEffect(function () { if (!(0, _isEqual.default)(collection, prevCollection) || !(0, _isEqual.default)(predicate, prevPredicate) || !(0, _isEqual.default)(value, prevValue)) { setFilteredCollection(searchBy(collection, value, predicate, searchConfig)); } }, [collection, predicate, value, searchConfig]); return { items: filteredCollection, value: value, setValue: setValue }; };