UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

85 lines 3.76 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useExpandAll = exports.useExpanded = void 0; var react_1 = require("react"); var store_1 = require("../../store"); /** * State-like hook for controlling the expanded state of a list item * * @param {string} resource The resource name, e.g. 'posts' * @param {string|integer} id The record identifier, e.g. 123 * @param {boolean} single Forces only one id to be expanded at a time * @returns {Object} Destructure as [expanded, toggleExpanded]. * * @example * * const [expanded, toggleExpanded] = useExpanded('posts', 123); * const expandIcon = expanded ? ExpandLess : ExpandMore; * const onExpandClick = () => toggleExpanded(); */ var useExpanded = function (resource, id, single) { if (single === void 0) { single = false; } var _a = (0, store_1.useStore)("".concat(resource, ".datagrid.expanded"), []), expandedIds = _a[0], setExpandedIds = _a[1]; var expanded = Array.isArray(expandedIds) ? // eslint-disable-next-line eqeqeq expandedIds.map(function (el) { return el == id; }).indexOf(true) !== -1 : false; var toggleExpanded = (0, react_1.useCallback)(function () { setExpandedIds(function (ids) { if (!Array.isArray(ids)) { return [id]; } var index = ids.findIndex(function (el) { return el == id; }); // eslint-disable-line eqeqeq return index > -1 ? single ? [] : __spreadArray(__spreadArray([], ids.slice(0, index), true), ids.slice(index + 1), true) : single ? [id] : __spreadArray(__spreadArray([], ids, true), [id], false); }); }, [setExpandedIds, id, single]); return [expanded, toggleExpanded]; }; exports.useExpanded = useExpanded; /** * State-like hook for controlling the expanded state of many list items * expanded state is true when at least one item from ids is expanded. * * @param {string} resource The resource name, e.g. 'posts' * @param {Identifier[]} ids A list of record identifiers * @returns {Object} Destructure as [expanded, toggleExpanded]. * * @example * * const [expanded, toggleExpanded] = useExpandAll('posts', [123, 124, 125]); * const expandIcon = expanded ? ExpandLess : ExpandMore; * const onExpandClick = () => toggleExpanded(); */ var useExpandAll = function (resource, ids) { var _a = (0, store_1.useStore)("".concat(resource, ".datagrid.expanded"), []), expandedIds = _a[0], setExpandedIds = _a[1]; var isExpanded = Array.isArray(expandedIds) ? // eslint-disable-next-line eqeqeq expandedIds.some(function (id) { return ids.some(function (id2) { return id2 == id; }); }) : false; var toggleExpandedAll = (0, react_1.useCallback)(function () { var unaffectedExpandedIds = expandedIds.filter( // eslint-disable-next-line eqeqeq function (expanded_id) { return !ids.some(function (id) { return id == expanded_id; }); }); setExpandedIds(isExpanded ? unaffectedExpandedIds : unaffectedExpandedIds.concat(ids)); }, [expandedIds, setExpandedIds, isExpanded, ids]); return [isExpanded, toggleExpandedAll]; }; exports.useExpandAll = useExpandAll; //# sourceMappingURL=useExpanded.js.map