"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useExpand; var _warning = _interopRequireDefault(require("@rc-component/util/lib/warning")); var React = _interopRequireWildcard(require("react")); var _constant = require("../constant"); var _expandUtil = require("../utils/expandUtil"); var _legacyUtil = require("../utils/legacyUtil"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function useExpand(props, mergedData, getRowKey) { const expandableConfig = (0, _legacyUtil.getExpandableProps)(props); const { expandIcon, expandedRowKeys, defaultExpandedRowKeys, defaultExpandAllRows, expandedRowRender, onExpand, onExpandedRowsChange, childrenColumnName } = expandableConfig; const mergedExpandIcon = expandIcon || _expandUtil.renderExpandIcon; const mergedChildrenColumnName = childrenColumnName || 'children'; const expandableType = React.useMemo(() => { if (expandedRowRender) { return 'row'; } /* eslint-disable no-underscore-dangle */ /** * Fix https://github.com/ant-design/ant-design/issues/21154 * This is a workaround to not to break current behavior. * We can remove follow code after final release. * * To other developer: * Do not use `__PARENT_RENDER_ICON__` in prod since we will remove this when refactor */ if (props.expandable && props.internalHooks === _constant.INTERNAL_HOOKS && props.expandable.__PARENT_RENDER_ICON__ || mergedData.some(record => record && typeof record === 'object' && record[mergedChildrenColumnName])) { return 'nest'; } /* eslint-enable */ return false; }, [!!expandedRowRender, mergedData]); const [innerExpandedKeys, setInnerExpandedKeys] = React.useState(() => { if (defaultExpandedRowKeys) { return defaultExpandedRowKeys; } if (defaultExpandAllRows) { return (0, _expandUtil.findAllChildrenKeys)(mergedData, getRowKey, mergedChildrenColumnName); } return []; }); const mergedExpandedKeys = React.useMemo(() => new Set(expandedRowKeys || innerExpandedKeys || []), [expandedRowKeys, innerExpandedKeys]); const onTriggerExpand = React.useCallback(record => { const key = getRowKey(record, mergedData.indexOf(record)); let newExpandedKeys; const hasKey = mergedExpandedKeys.has(key); if (hasKey) { mergedExpandedKeys.delete(key); newExpandedKeys = [...mergedExpandedKeys]; } else { newExpandedKeys = [...mergedExpandedKeys, key]; } setInnerExpandedKeys(newExpandedKeys); if (onExpand) { onExpand(!hasKey, record); } if (onExpandedRowsChange) { onExpandedRowsChange(newExpandedKeys); } }, [getRowKey, mergedExpandedKeys, mergedData, onExpand, onExpandedRowsChange]); // Warning if use `expandedRowRender` and nest children in the same time if (process.env.NODE_ENV !== 'production' && expandedRowRender && mergedData.some(record => { return Array.isArray(record?.[mergedChildrenColumnName]); })) { (0, _warning.default)(false, '`expandedRowRender` should not use with nested Table'); } return [expandableConfig, expandableType, mergedExpandedKeys, mergedExpandIcon, mergedChildrenColumnName, onTriggerExpand]; }