nishant-design-system
Version:
Sense UI components library
69 lines (67 loc) • 3.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSortableEntries = useSortableEntries;
var React = _interopRequireWildcard(require("react"));
var _get = _interopRequireDefault(require("lodash/get"));
var _sortBy = _interopRequireDefault(require("lodash/sortBy"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function useSortableEntries(entries, idName, _ref) {
let {
defaultSortKey = 'id',
defaultSortDirection = 'original',
onSort
} = _ref;
const [sortKey, setSortKey] = React.useState(defaultSortKey);
const [sortDirection, setSortDirection] = React.useState(defaultSortDirection);
const getNextDirection = direction => {
switch (direction) {
case 'original':
return 'desc';
case 'asc':
return 'original';
case 'desc':
return 'asc';
default:
return 'original';
}
};
const advanceSortDirection = dir => {
const nextDirection = getNextDirection(dir);
// eslint-disable-next-line unused-imports/no-unused-vars
setSortDirection(dir => nextDirection);
return nextDirection;
};
const handleSortClick = React.useCallback(nextSortKey => {
let nextSortDirection = sortDirection;
if (nextSortKey === sortKey) {
nextSortDirection = advanceSortDirection(sortDirection);
} else {
setSortKey(nextSortKey);
setSortDirection('desc');
}
onSort?.(nextSortKey, nextSortDirection);
}, [sortKey, sortDirection, entries]);
const sortedEntries = React.useMemo(() => {
if (sortDirection === 'original') {
return entries;
}
const sortedDesc = (0, _sortBy.default)(entries, sortKey);
if (sortDirection === 'asc') {
return sortedDesc;
} else {
return sortedDesc.reverse();
}
}, [sortDirection, sortKey, entries]);
const sortedKeys = React.useMemo(() => sortedEntries.map(ent => (0, _get.default)(ent, idName)), [sortedEntries]);
return {
sortedEntries,
sortedKeys,
sortDirection,
sortKey,
handleSortClick
};
}