d855102e9aa53fb04900f59e566960d3.json 58.8 KB
{"ast":null,"code":"import _toArray from \"@babel/runtime/helpers/toArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport * as React from 'react';\nimport { useState, useCallback, useMemo } from 'react';\nimport DownOutlined from '@ant-design/icons/DownOutlined';\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport { arrAdd, arrDel } from \"rc-tree/es/util\";\nimport { INTERNAL_COL_DEFINE } from 'rc-table';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport Checkbox from '../../checkbox';\nimport Dropdown from '../../dropdown';\nimport Menu from '../../menu';\nimport Radio from '../../radio';\nimport devWarning from '../../_util/devWarning'; // TODO: warning if use ajax!!!\n\nexport var SELECTION_ALL = 'SELECT_ALL';\nexport var SELECTION_INVERT = 'SELECT_INVERT';\n\nfunction getFixedType(column) {\n  return column && column.fixed;\n}\n\nfunction flattenData(data, childrenColumnName) {\n  var list = [];\n  (data || []).forEach(function (record) {\n    list.push(record);\n\n    if (record && _typeof(record) === 'object' && childrenColumnName in record) {\n      list = [].concat(_toConsumableArray(list), _toConsumableArray(flattenData(record[childrenColumnName], childrenColumnName)));\n    }\n  });\n  return list;\n}\n\nexport default function useSelection(rowSelection, config) {\n  var _ref = rowSelection || {},\n      preserveSelectedRowKeys = _ref.preserveSelectedRowKeys,\n      selectedRowKeys = _ref.selectedRowKeys,\n      getCheckboxProps = _ref.getCheckboxProps,\n      onSelectionChange = _ref.onChange,\n      onSelect = _ref.onSelect,\n      onSelectAll = _ref.onSelectAll,\n      onSelectInvert = _ref.onSelectInvert,\n      onSelectMultiple = _ref.onSelectMultiple,\n      selectionColWidth = _ref.columnWidth,\n      selectionType = _ref.type,\n      selections = _ref.selections,\n      fixed = _ref.fixed,\n      customizeRenderCell = _ref.renderCell,\n      hideSelectAll = _ref.hideSelectAll,\n      _ref$checkStrictly = _ref.checkStrictly,\n      checkStrictly = _ref$checkStrictly === void 0 ? true : _ref$checkStrictly;\n\n  var prefixCls = config.prefixCls,\n      data = config.data,\n      pageData = config.pageData,\n      getRecordByKey = config.getRecordByKey,\n      getRowKey = config.getRowKey,\n      expandType = config.expandType,\n      childrenColumnName = config.childrenColumnName,\n      tableLocale = config.locale,\n      expandIconColumnIndex = config.expandIconColumnIndex,\n      getPopupContainer = config.getPopupContainer; // ======================== Caches ========================\n\n  var preserveRecordsRef = React.useRef(new Map()); // ========================= Keys =========================\n\n  var _useMergedState = useMergedState(selectedRowKeys || [], {\n    value: selectedRowKeys\n  }),\n      _useMergedState2 = _slicedToArray(_useMergedState, 2),\n      mergedSelectedKeys = _useMergedState2[0],\n      setMergedSelectedKeys = _useMergedState2[1];\n\n  var _useMemo = useMemo(function () {\n    return checkStrictly ? {\n      keyEntities: null\n    } : convertDataToEntities(data, undefined, getRowKey);\n  }, [data, getRowKey, checkStrictly]),\n      keyEntities = _useMemo.keyEntities; // Get flatten data\n\n\n  var flattedData = useMemo(function () {\n    return flattenData(pageData, childrenColumnName);\n  }, [pageData, childrenColumnName]); // Get all checkbox props\n\n  var checkboxPropsMap = useMemo(function () {\n    var map = new Map();\n    flattedData.forEach(function (record, index) {\n      var key = getRowKey(record, index);\n      var checkboxProps = (getCheckboxProps ? getCheckboxProps(record) : null) || {};\n      map.set(key, checkboxProps);\n\n      if (process.env.NODE_ENV !== 'production' && ('checked' in checkboxProps || 'defaultChecked' in checkboxProps)) {\n        devWarning(false, 'Table', 'Do not set `checked` or `defaultChecked` in `getCheckboxProps`. Please use `selectedRowKeys` instead.');\n      }\n    });\n    return map;\n  }, [flattedData, getRowKey, getCheckboxProps]);\n  var isCheckboxDisabled = useCallback(function (r) {\n    var _a;\n\n    return !!((_a = checkboxPropsMap.get(getRowKey(r))) === null || _a === void 0 ? void 0 : _a.disabled);\n  }, [checkboxPropsMap, getRowKey]);\n\n  var _useMemo2 = useMemo(function () {\n    if (checkStrictly) {\n      return [mergedSelectedKeys || [], []];\n    }\n\n    var _conductCheck = conductCheck(mergedSelectedKeys, true, keyEntities, isCheckboxDisabled),\n        checkedKeys = _conductCheck.checkedKeys,\n        halfCheckedKeys = _conductCheck.halfCheckedKeys;\n\n    return [checkedKeys || [], halfCheckedKeys];\n  }, [mergedSelectedKeys, checkStrictly, keyEntities, isCheckboxDisabled]),\n      _useMemo3 = _slicedToArray(_useMemo2, 2),\n      derivedSelectedKeys = _useMemo3[0],\n      derivedHalfSelectedKeys = _useMemo3[1];\n\n  var derivedSelectedKeySet = useMemo(function () {\n    var keys = selectionType === 'radio' ? derivedSelectedKeys.slice(0, 1) : derivedSelectedKeys;\n    return new Set(keys);\n  }, [derivedSelectedKeys, selectionType]);\n  var derivedHalfSelectedKeySet = useMemo(function () {\n    return selectionType === 'radio' ? new Set() : new Set(derivedHalfSelectedKeys);\n  }, [derivedHalfSelectedKeys, selectionType]); // Save last selected key to enable range selection\n\n  var _useState = useState(null),\n      _useState2 = _slicedToArray(_useState, 2),\n      lastSelectedKey = _useState2[0],\n      setLastSelectedKey = _useState2[1]; // Reset if rowSelection reset\n\n\n  React.useEffect(function () {\n    if (!rowSelection) {\n      setMergedSelectedKeys([]);\n    }\n  }, [!!rowSelection]);\n  var setSelectedKeys = useCallback(function (keys) {\n    var availableKeys;\n    var records;\n\n    if (preserveSelectedRowKeys) {\n      // Keep key if mark as preserveSelectedRowKeys\n      var newCache = new Map();\n      availableKeys = keys;\n      records = keys.map(function (key) {\n        var record = getRecordByKey(key);\n\n        if (!record && preserveRecordsRef.current.has(key)) {\n          record = preserveRecordsRef.current.get(key);\n        }\n\n        newCache.set(key, record);\n        return record;\n      }); // Refresh to new cache\n\n      preserveRecordsRef.current = newCache;\n    } else {\n      // Filter key which not exist in the `dataSource`\n      availableKeys = [];\n      records = [];\n      keys.forEach(function (key) {\n        var record = getRecordByKey(key);\n\n        if (record !== undefined) {\n          availableKeys.push(key);\n          records.push(record);\n        }\n      });\n    }\n\n    setMergedSelectedKeys(availableKeys);\n\n    if (onSelectionChange) {\n      onSelectionChange(availableKeys, records);\n    }\n  }, [setMergedSelectedKeys, getRecordByKey, onSelectionChange, preserveSelectedRowKeys]); // ====================== Selections ======================\n  // Trigger single `onSelect` event\n\n  var triggerSingleSelection = useCallback(function (key, selected, keys, event) {\n    if (onSelect) {\n      var rows = keys.map(function (k) {\n        return getRecordByKey(k);\n      });\n      onSelect(getRecordByKey(key), selected, rows, event);\n    }\n\n    setSelectedKeys(keys);\n  }, [onSelect, getRecordByKey, setSelectedKeys]);\n  var mergedSelections = useMemo(function () {\n    if (!selections || hideSelectAll) {\n      return null;\n    }\n\n    var selectionList = selections === true ? [SELECTION_ALL, SELECTION_INVERT] : selections;\n    return selectionList.map(function (selection) {\n      if (selection === SELECTION_ALL) {\n        return {\n          key: 'all',\n          text: tableLocale.selectionAll,\n          onSelect: function onSelect() {\n            setSelectedKeys(data.map(function (record, index) {\n              return getRowKey(record, index);\n            }));\n          }\n        };\n      }\n\n      if (selection === SELECTION_INVERT) {\n        return {\n          key: 'invert',\n          text: tableLocale.selectInvert,\n          onSelect: function onSelect() {\n            var keySet = new Set(derivedSelectedKeySet);\n            pageData.forEach(function (record, index) {\n              var key = getRowKey(record, index);\n\n              if (keySet.has(key)) {\n                keySet[\"delete\"](key);\n              } else {\n                keySet.add(key);\n              }\n            });\n            var keys = Array.from(keySet);\n            setSelectedKeys(keys);\n\n            if (onSelectInvert) {\n              devWarning(false, 'Table', '`onSelectInvert` will be removed in future. Please use `onChange` instead.');\n              onSelectInvert(keys);\n            }\n          }\n        };\n      }\n\n      return selection;\n    });\n  }, [selections, derivedSelectedKeySet, pageData, getRowKey, onSelectInvert, setSelectedKeys]); // ======================= Columns ========================\n\n  var transformColumns = useCallback(function (columns) {\n    if (!rowSelection) {\n      return columns;\n    } // Support selection\n\n\n    var keySet = new Set(derivedSelectedKeySet); // Record key only need check with enabled\n\n    var recordKeys = flattedData.map(getRowKey).filter(function (key) {\n      return !checkboxPropsMap.get(key).disabled;\n    });\n    var checkedCurrentAll = recordKeys.every(function (key) {\n      return keySet.has(key);\n    });\n    var checkedCurrentSome = recordKeys.some(function (key) {\n      return keySet.has(key);\n    });\n\n    var onSelectAllChange = function onSelectAllChange() {\n      var changeKeys = [];\n\n      if (checkedCurrentAll) {\n        recordKeys.forEach(function (key) {\n          keySet[\"delete\"](key);\n          changeKeys.push(key);\n        });\n      } else {\n        recordKeys.forEach(function (key) {\n          if (!keySet.has(key)) {\n            keySet.add(key);\n            changeKeys.push(key);\n          }\n        });\n      }\n\n      var keys = Array.from(keySet);\n      setSelectedKeys(keys);\n\n      if (onSelectAll) {\n        onSelectAll(!checkedCurrentAll, keys.map(function (k) {\n          return getRecordByKey(k);\n        }), changeKeys.map(function (k) {\n          return getRecordByKey(k);\n        }));\n      }\n    }; // ===================== Render =====================\n    // Title Cell\n\n\n    var title;\n\n    if (selectionType !== 'radio') {\n      var customizeSelections;\n\n      if (mergedSelections) {\n        var menu = /*#__PURE__*/React.createElement(Menu, {\n          getPopupContainer: getPopupContainer\n        }, mergedSelections.map(function (selection, index) {\n          var key = selection.key,\n              text = selection.text,\n              onSelectionClick = selection.onSelect;\n          return /*#__PURE__*/React.createElement(Menu.Item, {\n            key: key || index,\n            onClick: function onClick() {\n              if (onSelectionClick) {\n                onSelectionClick(recordKeys);\n              }\n            }\n          }, text);\n        }));\n        customizeSelections = /*#__PURE__*/React.createElement(\"div\", {\n          className: \"\".concat(prefixCls, \"-selection-extra\")\n        }, /*#__PURE__*/React.createElement(Dropdown, {\n          overlay: menu,\n          getPopupContainer: getPopupContainer\n        }, /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(DownOutlined, null))));\n      }\n\n      var allDisabled = flattedData.every(function (record, index) {\n        var key = getRowKey(record, index);\n        var checkboxProps = checkboxPropsMap.get(key) || {};\n        return checkboxProps.disabled;\n      });\n      title = !hideSelectAll && /*#__PURE__*/React.createElement(\"div\", {\n        className: \"\".concat(prefixCls, \"-selection\")\n      }, /*#__PURE__*/React.createElement(Checkbox, {\n        checked: !allDisabled && !!flattedData.length && checkedCurrentAll,\n        indeterminate: !checkedCurrentAll && checkedCurrentSome,\n        onChange: onSelectAllChange,\n        disabled: flattedData.length === 0 || allDisabled\n      }), customizeSelections);\n    } // Body Cell\n\n\n    var renderCell;\n\n    if (selectionType === 'radio') {\n      renderCell = function renderCell(_, record, index) {\n        var key = getRowKey(record, index);\n        var checked = keySet.has(key);\n        return {\n          node: /*#__PURE__*/React.createElement(Radio, _extends({}, checkboxPropsMap.get(key), {\n            checked: checked,\n            onClick: function onClick(e) {\n              return e.stopPropagation();\n            },\n            onChange: function onChange(event) {\n              if (!keySet.has(key)) {\n                triggerSingleSelection(key, true, [key], event.nativeEvent);\n              }\n            }\n          })),\n          checked: checked\n        };\n      };\n    } else {\n      renderCell = function renderCell(_, record, index) {\n        var _a;\n\n        var key = getRowKey(record, index);\n        var checked = keySet.has(key);\n        var indeterminate = derivedHalfSelectedKeySet.has(key);\n        var checkboxProps = checkboxPropsMap.get(key);\n        var mergedIndeterminate;\n\n        if (expandType === 'nest') {\n          mergedIndeterminate = indeterminate;\n          devWarning(!(typeof (checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) === 'boolean'), 'Table', 'set `indeterminate` using `rowSelection.getCheckboxProps` is not allowed with tree structured dataSource.');\n        } else {\n          mergedIndeterminate = (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== null && _a !== void 0 ? _a : indeterminate;\n        } // Record checked\n\n\n        return {\n          node: /*#__PURE__*/React.createElement(Checkbox, _extends({}, checkboxProps, {\n            indeterminate: mergedIndeterminate,\n            checked: checked,\n            onClick: function onClick(e) {\n              return e.stopPropagation();\n            },\n            onChange: function onChange(_ref2) {\n              var nativeEvent = _ref2.nativeEvent;\n              var shiftKey = nativeEvent.shiftKey;\n              var startIndex = -1;\n              var endIndex = -1; // Get range of this\n\n              if (shiftKey && checkStrictly) {\n                var pointKeys = new Set([lastSelectedKey, key]);\n                recordKeys.some(function (recordKey, recordIndex) {\n                  if (pointKeys.has(recordKey)) {\n                    if (startIndex === -1) {\n                      startIndex = recordIndex;\n                    } else {\n                      endIndex = recordIndex;\n                      return true;\n                    }\n                  }\n\n                  return false;\n                });\n              }\n\n              if (endIndex !== -1 && startIndex !== endIndex && checkStrictly) {\n                // Batch update selections\n                var rangeKeys = recordKeys.slice(startIndex, endIndex + 1);\n                var changedKeys = [];\n\n                if (checked) {\n                  rangeKeys.forEach(function (recordKey) {\n                    if (keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet[\"delete\"](recordKey);\n                    }\n                  });\n                } else {\n                  rangeKeys.forEach(function (recordKey) {\n                    if (!keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.add(recordKey);\n                    }\n                  });\n                }\n\n                var keys = Array.from(keySet);\n                setSelectedKeys(keys);\n\n                if (onSelectMultiple) {\n                  onSelectMultiple(!checked, keys.map(function (recordKey) {\n                    return getRecordByKey(recordKey);\n                  }), changedKeys.map(function (recordKey) {\n                    return getRecordByKey(recordKey);\n                  }));\n                }\n              } else {\n                // Single record selected\n                var originCheckedKeys = derivedSelectedKeys;\n\n                if (checkStrictly) {\n                  var checkedKeys = checked ? arrDel(originCheckedKeys, key) : arrAdd(originCheckedKeys, key);\n                  triggerSingleSelection(key, !checked, checkedKeys, nativeEvent);\n                } else {\n                  // Always fill first\n                  var result = conductCheck([].concat(_toConsumableArray(originCheckedKeys), [key]), true, keyEntities, isCheckboxDisabled);\n                  var _checkedKeys = result.checkedKeys,\n                      halfCheckedKeys = result.halfCheckedKeys;\n                  var nextCheckedKeys = _checkedKeys; // If remove, we do it again to correction\n\n                  if (checked) {\n                    var tempKeySet = new Set(_checkedKeys);\n                    tempKeySet[\"delete\"](key);\n                    nextCheckedKeys = conductCheck(Array.from(tempKeySet), {\n                      checked: false,\n                      halfCheckedKeys: halfCheckedKeys\n                    }, keyEntities, isCheckboxDisabled).checkedKeys;\n                  }\n\n                  triggerSingleSelection(key, !checked, nextCheckedKeys, nativeEvent);\n                }\n              }\n\n              setLastSelectedKey(key);\n            }\n          })),\n          checked: checked\n        };\n      };\n    }\n\n    var renderSelectionCell = function renderSelectionCell(_, record, index) {\n      var _renderCell = renderCell(_, record, index),\n          node = _renderCell.node,\n          checked = _renderCell.checked;\n\n      if (customizeRenderCell) {\n        return customizeRenderCell(checked, record, index, node);\n      }\n\n      return node;\n    }; // Columns\n\n\n    var selectionColumn = _defineProperty({\n      width: selectionColWidth,\n      className: \"\".concat(prefixCls, \"-selection-column\"),\n      title: rowSelection.columnTitle || title,\n      render: renderSelectionCell\n    }, INTERNAL_COL_DEFINE, {\n      className: \"\".concat(prefixCls, \"-selection-col\")\n    });\n\n    if (expandType === 'row' && columns.length && !expandIconColumnIndex) {\n      var _columns = _toArray(columns),\n          expandColumn = _columns[0],\n          restColumns = _columns.slice(1);\n\n      var selectionFixed = fixed || getFixedType(restColumns[0]);\n\n      if (selectionFixed) {\n        expandColumn.fixed = selectionFixed;\n      }\n\n      return [expandColumn, _extends(_extends({}, selectionColumn), {\n        fixed: selectionFixed\n      })].concat(_toConsumableArray(restColumns));\n    }\n\n    return [_extends(_extends({}, selectionColumn), {\n      fixed: fixed || getFixedType(columns[0])\n    })].concat(_toConsumableArray(columns));\n  }, [getRowKey, flattedData, rowSelection, derivedSelectedKeys, derivedSelectedKeySet, derivedHalfSelectedKeySet, selectionColWidth, mergedSelections, expandType, lastSelectedKey, checkboxPropsMap, onSelectMultiple, triggerSingleSelection, isCheckboxDisabled]);\n  return [transformColumns, derivedSelectedKeySet];\n}","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/antd/es/table/hooks/useSelection.js"],"names":["_toArray","_defineProperty","_extends","_slicedToArray","_toConsumableArray","_typeof","React","useState","useCallback","useMemo","DownOutlined","convertDataToEntities","conductCheck","arrAdd","arrDel","INTERNAL_COL_DEFINE","useMergedState","Checkbox","Dropdown","Menu","Radio","devWarning","SELECTION_ALL","SELECTION_INVERT","getFixedType","column","fixed","flattenData","data","childrenColumnName","list","forEach","record","push","concat","useSelection","rowSelection","config","_ref","preserveSelectedRowKeys","selectedRowKeys","getCheckboxProps","onSelectionChange","onChange","onSelect","onSelectAll","onSelectInvert","onSelectMultiple","selectionColWidth","columnWidth","selectionType","type","selections","customizeRenderCell","renderCell","hideSelectAll","_ref$checkStrictly","checkStrictly","prefixCls","pageData","getRecordByKey","getRowKey","expandType","tableLocale","locale","expandIconColumnIndex","getPopupContainer","preserveRecordsRef","useRef","Map","_useMergedState","value","_useMergedState2","mergedSelectedKeys","setMergedSelectedKeys","_useMemo","keyEntities","undefined","flattedData","checkboxPropsMap","map","index","key","checkboxProps","set","process","env","NODE_ENV","isCheckboxDisabled","r","_a","get","disabled","_useMemo2","_conductCheck","checkedKeys","halfCheckedKeys","_useMemo3","derivedSelectedKeys","derivedHalfSelectedKeys","derivedSelectedKeySet","keys","slice","Set","derivedHalfSelectedKeySet","_useState","_useState2","lastSelectedKey","setLastSelectedKey","useEffect","setSelectedKeys","availableKeys","records","newCache","current","has","triggerSingleSelection","selected","event","rows","k","mergedSelections","selectionList","selection","text","selectionAll","selectInvert","keySet","add","Array","from","transformColumns","columns","recordKeys","filter","checkedCurrentAll","every","checkedCurrentSome","some","onSelectAllChange","changeKeys","title","customizeSelections","menu","createElement","onSelectionClick","Item","onClick","className","overlay","allDisabled","checked","length","indeterminate","_","node","e","stopPropagation","nativeEvent","mergedIndeterminate","_ref2","shiftKey","startIndex","endIndex","pointKeys","recordKey","recordIndex","rangeKeys","changedKeys","originCheckedKeys","result","_checkedKeys","nextCheckedKeys","tempKeySet","renderSelectionCell","_renderCell","selectionColumn","width","columnTitle","render","_columns","expandColumn","restColumns","selectionFixed"],"mappings":"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","sourcesContent":["import _toArray from \"@babel/runtime/helpers/toArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport * as React from 'react';\nimport { useState, useCallback, useMemo } from 'react';\nimport DownOutlined from '@ant-design/icons/DownOutlined';\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport { arrAdd, arrDel } from \"rc-tree/es/util\";\nimport { INTERNAL_COL_DEFINE } from 'rc-table';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport Checkbox from '../../checkbox';\nimport Dropdown from '../../dropdown';\nimport Menu from '../../menu';\nimport Radio from '../../radio';\nimport devWarning from '../../_util/devWarning'; // TODO: warning if use ajax!!!\n\nexport var SELECTION_ALL = 'SELECT_ALL';\nexport var SELECTION_INVERT = 'SELECT_INVERT';\n\nfunction getFixedType(column) {\n  return column && column.fixed;\n}\n\nfunction flattenData(data, childrenColumnName) {\n  var list = [];\n  (data || []).forEach(function (record) {\n    list.push(record);\n\n    if (record && _typeof(record) === 'object' && childrenColumnName in record) {\n      list = [].concat(_toConsumableArray(list), _toConsumableArray(flattenData(record[childrenColumnName], childrenColumnName)));\n    }\n  });\n  return list;\n}\n\nexport default function useSelection(rowSelection, config) {\n  var _ref = rowSelection || {},\n      preserveSelectedRowKeys = _ref.preserveSelectedRowKeys,\n      selectedRowKeys = _ref.selectedRowKeys,\n      getCheckboxProps = _ref.getCheckboxProps,\n      onSelectionChange = _ref.onChange,\n      onSelect = _ref.onSelect,\n      onSelectAll = _ref.onSelectAll,\n      onSelectInvert = _ref.onSelectInvert,\n      onSelectMultiple = _ref.onSelectMultiple,\n      selectionColWidth = _ref.columnWidth,\n      selectionType = _ref.type,\n      selections = _ref.selections,\n      fixed = _ref.fixed,\n      customizeRenderCell = _ref.renderCell,\n      hideSelectAll = _ref.hideSelectAll,\n      _ref$checkStrictly = _ref.checkStrictly,\n      checkStrictly = _ref$checkStrictly === void 0 ? true : _ref$checkStrictly;\n\n  var prefixCls = config.prefixCls,\n      data = config.data,\n      pageData = config.pageData,\n      getRecordByKey = config.getRecordByKey,\n      getRowKey = config.getRowKey,\n      expandType = config.expandType,\n      childrenColumnName = config.childrenColumnName,\n      tableLocale = config.locale,\n      expandIconColumnIndex = config.expandIconColumnIndex,\n      getPopupContainer = config.getPopupContainer; // ======================== Caches ========================\n\n  var preserveRecordsRef = React.useRef(new Map()); // ========================= Keys =========================\n\n  var _useMergedState = useMergedState(selectedRowKeys || [], {\n    value: selectedRowKeys\n  }),\n      _useMergedState2 = _slicedToArray(_useMergedState, 2),\n      mergedSelectedKeys = _useMergedState2[0],\n      setMergedSelectedKeys = _useMergedState2[1];\n\n  var _useMemo = useMemo(function () {\n    return checkStrictly ? {\n      keyEntities: null\n    } : convertDataToEntities(data, undefined, getRowKey);\n  }, [data, getRowKey, checkStrictly]),\n      keyEntities = _useMemo.keyEntities; // Get flatten data\n\n\n  var flattedData = useMemo(function () {\n    return flattenData(pageData, childrenColumnName);\n  }, [pageData, childrenColumnName]); // Get all checkbox props\n\n  var checkboxPropsMap = useMemo(function () {\n    var map = new Map();\n    flattedData.forEach(function (record, index) {\n      var key = getRowKey(record, index);\n      var checkboxProps = (getCheckboxProps ? getCheckboxProps(record) : null) || {};\n      map.set(key, checkboxProps);\n\n      if (process.env.NODE_ENV !== 'production' && ('checked' in checkboxProps || 'defaultChecked' in checkboxProps)) {\n        devWarning(false, 'Table', 'Do not set `checked` or `defaultChecked` in `getCheckboxProps`. Please use `selectedRowKeys` instead.');\n      }\n    });\n    return map;\n  }, [flattedData, getRowKey, getCheckboxProps]);\n  var isCheckboxDisabled = useCallback(function (r) {\n    var _a;\n\n    return !!((_a = checkboxPropsMap.get(getRowKey(r))) === null || _a === void 0 ? void 0 : _a.disabled);\n  }, [checkboxPropsMap, getRowKey]);\n\n  var _useMemo2 = useMemo(function () {\n    if (checkStrictly) {\n      return [mergedSelectedKeys || [], []];\n    }\n\n    var _conductCheck = conductCheck(mergedSelectedKeys, true, keyEntities, isCheckboxDisabled),\n        checkedKeys = _conductCheck.checkedKeys,\n        halfCheckedKeys = _conductCheck.halfCheckedKeys;\n\n    return [checkedKeys || [], halfCheckedKeys];\n  }, [mergedSelectedKeys, checkStrictly, keyEntities, isCheckboxDisabled]),\n      _useMemo3 = _slicedToArray(_useMemo2, 2),\n      derivedSelectedKeys = _useMemo3[0],\n      derivedHalfSelectedKeys = _useMemo3[1];\n\n  var derivedSelectedKeySet = useMemo(function () {\n    var keys = selectionType === 'radio' ? derivedSelectedKeys.slice(0, 1) : derivedSelectedKeys;\n    return new Set(keys);\n  }, [derivedSelectedKeys, selectionType]);\n  var derivedHalfSelectedKeySet = useMemo(function () {\n    return selectionType === 'radio' ? new Set() : new Set(derivedHalfSelectedKeys);\n  }, [derivedHalfSelectedKeys, selectionType]); // Save last selected key to enable range selection\n\n  var _useState = useState(null),\n      _useState2 = _slicedToArray(_useState, 2),\n      lastSelectedKey = _useState2[0],\n      setLastSelectedKey = _useState2[1]; // Reset if rowSelection reset\n\n\n  React.useEffect(function () {\n    if (!rowSelection) {\n      setMergedSelectedKeys([]);\n    }\n  }, [!!rowSelection]);\n  var setSelectedKeys = useCallback(function (keys) {\n    var availableKeys;\n    var records;\n\n    if (preserveSelectedRowKeys) {\n      // Keep key if mark as preserveSelectedRowKeys\n      var newCache = new Map();\n      availableKeys = keys;\n      records = keys.map(function (key) {\n        var record = getRecordByKey(key);\n\n        if (!record && preserveRecordsRef.current.has(key)) {\n          record = preserveRecordsRef.current.get(key);\n        }\n\n        newCache.set(key, record);\n        return record;\n      }); // Refresh to new cache\n\n      preserveRecordsRef.current = newCache;\n    } else {\n      // Filter key which not exist in the `dataSource`\n      availableKeys = [];\n      records = [];\n      keys.forEach(function (key) {\n        var record = getRecordByKey(key);\n\n        if (record !== undefined) {\n          availableKeys.push(key);\n          records.push(record);\n        }\n      });\n    }\n\n    setMergedSelectedKeys(availableKeys);\n\n    if (onSelectionChange) {\n      onSelectionChange(availableKeys, records);\n    }\n  }, [setMergedSelectedKeys, getRecordByKey, onSelectionChange, preserveSelectedRowKeys]); // ====================== Selections ======================\n  // Trigger single `onSelect` event\n\n  var triggerSingleSelection = useCallback(function (key, selected, keys, event) {\n    if (onSelect) {\n      var rows = keys.map(function (k) {\n        return getRecordByKey(k);\n      });\n      onSelect(getRecordByKey(key), selected, rows, event);\n    }\n\n    setSelectedKeys(keys);\n  }, [onSelect, getRecordByKey, setSelectedKeys]);\n  var mergedSelections = useMemo(function () {\n    if (!selections || hideSelectAll) {\n      return null;\n    }\n\n    var selectionList = selections === true ? [SELECTION_ALL, SELECTION_INVERT] : selections;\n    return selectionList.map(function (selection) {\n      if (selection === SELECTION_ALL) {\n        return {\n          key: 'all',\n          text: tableLocale.selectionAll,\n          onSelect: function onSelect() {\n            setSelectedKeys(data.map(function (record, index) {\n              return getRowKey(record, index);\n            }));\n          }\n        };\n      }\n\n      if (selection === SELECTION_INVERT) {\n        return {\n          key: 'invert',\n          text: tableLocale.selectInvert,\n          onSelect: function onSelect() {\n            var keySet = new Set(derivedSelectedKeySet);\n            pageData.forEach(function (record, index) {\n              var key = getRowKey(record, index);\n\n              if (keySet.has(key)) {\n                keySet[\"delete\"](key);\n              } else {\n                keySet.add(key);\n              }\n            });\n            var keys = Array.from(keySet);\n            setSelectedKeys(keys);\n\n            if (onSelectInvert) {\n              devWarning(false, 'Table', '`onSelectInvert` will be removed in future. Please use `onChange` instead.');\n              onSelectInvert(keys);\n            }\n          }\n        };\n      }\n\n      return selection;\n    });\n  }, [selections, derivedSelectedKeySet, pageData, getRowKey, onSelectInvert, setSelectedKeys]); // ======================= Columns ========================\n\n  var transformColumns = useCallback(function (columns) {\n    if (!rowSelection) {\n      return columns;\n    } // Support selection\n\n\n    var keySet = new Set(derivedSelectedKeySet); // Record key only need check with enabled\n\n    var recordKeys = flattedData.map(getRowKey).filter(function (key) {\n      return !checkboxPropsMap.get(key).disabled;\n    });\n    var checkedCurrentAll = recordKeys.every(function (key) {\n      return keySet.has(key);\n    });\n    var checkedCurrentSome = recordKeys.some(function (key) {\n      return keySet.has(key);\n    });\n\n    var onSelectAllChange = function onSelectAllChange() {\n      var changeKeys = [];\n\n      if (checkedCurrentAll) {\n        recordKeys.forEach(function (key) {\n          keySet[\"delete\"](key);\n          changeKeys.push(key);\n        });\n      } else {\n        recordKeys.forEach(function (key) {\n          if (!keySet.has(key)) {\n            keySet.add(key);\n            changeKeys.push(key);\n          }\n        });\n      }\n\n      var keys = Array.from(keySet);\n      setSelectedKeys(keys);\n\n      if (onSelectAll) {\n        onSelectAll(!checkedCurrentAll, keys.map(function (k) {\n          return getRecordByKey(k);\n        }), changeKeys.map(function (k) {\n          return getRecordByKey(k);\n        }));\n      }\n    }; // ===================== Render =====================\n    // Title Cell\n\n\n    var title;\n\n    if (selectionType !== 'radio') {\n      var customizeSelections;\n\n      if (mergedSelections) {\n        var menu = /*#__PURE__*/React.createElement(Menu, {\n          getPopupContainer: getPopupContainer\n        }, mergedSelections.map(function (selection, index) {\n          var key = selection.key,\n              text = selection.text,\n              onSelectionClick = selection.onSelect;\n          return /*#__PURE__*/React.createElement(Menu.Item, {\n            key: key || index,\n            onClick: function onClick() {\n              if (onSelectionClick) {\n                onSelectionClick(recordKeys);\n              }\n            }\n          }, text);\n        }));\n        customizeSelections = /*#__PURE__*/React.createElement(\"div\", {\n          className: \"\".concat(prefixCls, \"-selection-extra\")\n        }, /*#__PURE__*/React.createElement(Dropdown, {\n          overlay: menu,\n          getPopupContainer: getPopupContainer\n        }, /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(DownOutlined, null))));\n      }\n\n      var allDisabled = flattedData.every(function (record, index) {\n        var key = getRowKey(record, index);\n        var checkboxProps = checkboxPropsMap.get(key) || {};\n        return checkboxProps.disabled;\n      });\n      title = !hideSelectAll && /*#__PURE__*/React.createElement(\"div\", {\n        className: \"\".concat(prefixCls, \"-selection\")\n      }, /*#__PURE__*/React.createElement(Checkbox, {\n        checked: !allDisabled && !!flattedData.length && checkedCurrentAll,\n        indeterminate: !checkedCurrentAll && checkedCurrentSome,\n        onChange: onSelectAllChange,\n        disabled: flattedData.length === 0 || allDisabled\n      }), customizeSelections);\n    } // Body Cell\n\n\n    var renderCell;\n\n    if (selectionType === 'radio') {\n      renderCell = function renderCell(_, record, index) {\n        var key = getRowKey(record, index);\n        var checked = keySet.has(key);\n        return {\n          node: /*#__PURE__*/React.createElement(Radio, _extends({}, checkboxPropsMap.get(key), {\n            checked: checked,\n            onClick: function onClick(e) {\n              return e.stopPropagation();\n            },\n            onChange: function onChange(event) {\n              if (!keySet.has(key)) {\n                triggerSingleSelection(key, true, [key], event.nativeEvent);\n              }\n            }\n          })),\n          checked: checked\n        };\n      };\n    } else {\n      renderCell = function renderCell(_, record, index) {\n        var _a;\n\n        var key = getRowKey(record, index);\n        var checked = keySet.has(key);\n        var indeterminate = derivedHalfSelectedKeySet.has(key);\n        var checkboxProps = checkboxPropsMap.get(key);\n        var mergedIndeterminate;\n\n        if (expandType === 'nest') {\n          mergedIndeterminate = indeterminate;\n          devWarning(!(typeof (checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) === 'boolean'), 'Table', 'set `indeterminate` using `rowSelection.getCheckboxProps` is not allowed with tree structured dataSource.');\n        } else {\n          mergedIndeterminate = (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== null && _a !== void 0 ? _a : indeterminate;\n        } // Record checked\n\n\n        return {\n          node: /*#__PURE__*/React.createElement(Checkbox, _extends({}, checkboxProps, {\n            indeterminate: mergedIndeterminate,\n            checked: checked,\n            onClick: function onClick(e) {\n              return e.stopPropagation();\n            },\n            onChange: function onChange(_ref2) {\n              var nativeEvent = _ref2.nativeEvent;\n              var shiftKey = nativeEvent.shiftKey;\n              var startIndex = -1;\n              var endIndex = -1; // Get range of this\n\n              if (shiftKey && checkStrictly) {\n                var pointKeys = new Set([lastSelectedKey, key]);\n                recordKeys.some(function (recordKey, recordIndex) {\n                  if (pointKeys.has(recordKey)) {\n                    if (startIndex === -1) {\n                      startIndex = recordIndex;\n                    } else {\n                      endIndex = recordIndex;\n                      return true;\n                    }\n                  }\n\n                  return false;\n                });\n              }\n\n              if (endIndex !== -1 && startIndex !== endIndex && checkStrictly) {\n                // Batch update selections\n                var rangeKeys = recordKeys.slice(startIndex, endIndex + 1);\n                var changedKeys = [];\n\n                if (checked) {\n                  rangeKeys.forEach(function (recordKey) {\n                    if (keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet[\"delete\"](recordKey);\n                    }\n                  });\n                } else {\n                  rangeKeys.forEach(function (recordKey) {\n                    if (!keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.add(recordKey);\n                    }\n                  });\n                }\n\n                var keys = Array.from(keySet);\n                setSelectedKeys(keys);\n\n                if (onSelectMultiple) {\n                  onSelectMultiple(!checked, keys.map(function (recordKey) {\n                    return getRecordByKey(recordKey);\n                  }), changedKeys.map(function (recordKey) {\n                    return getRecordByKey(recordKey);\n                  }));\n                }\n              } else {\n                // Single record selected\n                var originCheckedKeys = derivedSelectedKeys;\n\n                if (checkStrictly) {\n                  var checkedKeys = checked ? arrDel(originCheckedKeys, key) : arrAdd(originCheckedKeys, key);\n                  triggerSingleSelection(key, !checked, checkedKeys, nativeEvent);\n                } else {\n                  // Always fill first\n                  var result = conductCheck([].concat(_toConsumableArray(originCheckedKeys), [key]), true, keyEntities, isCheckboxDisabled);\n                  var _checkedKeys = result.checkedKeys,\n                      halfCheckedKeys = result.halfCheckedKeys;\n                  var nextCheckedKeys = _checkedKeys; // If remove, we do it again to correction\n\n                  if (checked) {\n                    var tempKeySet = new Set(_checkedKeys);\n                    tempKeySet[\"delete\"](key);\n                    nextCheckedKeys = conductCheck(Array.from(tempKeySet), {\n                      checked: false,\n                      halfCheckedKeys: halfCheckedKeys\n                    }, keyEntities, isCheckboxDisabled).checkedKeys;\n                  }\n\n                  triggerSingleSelection(key, !checked, nextCheckedKeys, nativeEvent);\n                }\n              }\n\n              setLastSelectedKey(key);\n            }\n          })),\n          checked: checked\n        };\n      };\n    }\n\n    var renderSelectionCell = function renderSelectionCell(_, record, index) {\n      var _renderCell = renderCell(_, record, index),\n          node = _renderCell.node,\n          checked = _renderCell.checked;\n\n      if (customizeRenderCell) {\n        return customizeRenderCell(checked, record, index, node);\n      }\n\n      return node;\n    }; // Columns\n\n\n    var selectionColumn = _defineProperty({\n      width: selectionColWidth,\n      className: \"\".concat(prefixCls, \"-selection-column\"),\n      title: rowSelection.columnTitle || title,\n      render: renderSelectionCell\n    }, INTERNAL_COL_DEFINE, {\n      className: \"\".concat(prefixCls, \"-selection-col\")\n    });\n\n    if (expandType === 'row' && columns.length && !expandIconColumnIndex) {\n      var _columns = _toArray(columns),\n          expandColumn = _columns[0],\n          restColumns = _columns.slice(1);\n\n      var selectionFixed = fixed || getFixedType(restColumns[0]);\n\n      if (selectionFixed) {\n        expandColumn.fixed = selectionFixed;\n      }\n\n      return [expandColumn, _extends(_extends({}, selectionColumn), {\n        fixed: selectionFixed\n      })].concat(_toConsumableArray(restColumns));\n    }\n\n    return [_extends(_extends({}, selectionColumn), {\n      fixed: fixed || getFixedType(columns[0])\n    })].concat(_toConsumableArray(columns));\n  }, [getRowKey, flattedData, rowSelection, derivedSelectedKeys, derivedSelectedKeySet, derivedHalfSelectedKeySet, selectionColWidth, mergedSelections, expandType, lastSelectedKey, checkboxPropsMap, onSelectMultiple, triggerSingleSelection, isCheckboxDisabled]);\n  return [transformColumns, derivedSelectedKeySet];\n}"]},"metadata":{},"sourceType":"module"}