@talend/react-components
Version:
Set of react components.
43 lines (42 loc) • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sortCollection = void 0;
exports.useCollectionSort = useCollectionSort;
var _react = require("react");
function getDefaultSortFunction({
sortBy,
isDescending
}) {
const direction = isDescending ? -1 : 1;
return function defaultSort(a, b) {
const result = new Intl.Collator(undefined, {
sensitivity: 'base',
numeric: true
}).compare(a[sortBy], b[sortBy]);
return result * direction;
};
}
function sort(collection, sortParams, sortFunctions) {
const {
sortBy
} = sortParams;
if (!sortBy) {
return collection;
}
const sortFunctionGetter = sortFunctions[sortBy] || getDefaultSortFunction;
return collection.slice(0).sort(sortFunctionGetter(sortParams));
}
const sortCollection = (sortParams, sortFunctions) => collection => (0, _react.useMemo)(() => sort(collection, sortParams, sortFunctions), [collection, sortParams, sortFunctions]);
exports.sortCollection = sortCollection;
function useCollectionSort(collection = [], initialSortParams = {}, sortFunctions = {}) {
const [sortParams, setSortParams] = (0, _react.useState)(initialSortParams);
const sortedCollection = sortCollection(sortParams, sortFunctions)(collection);
return {
sortedCollection,
sortParams,
setSortParams
};
}
//# sourceMappingURL=useCollectionSort.hook.js.map