{"ast":null,"code":"\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport DownOutlined from \"@ant-design/icons/es/icons/DownOutlined\";\nimport classNames from 'classnames';\nimport { INTERNAL_COL_DEFINE } from 'rc-table';\nimport { arrAdd, arrDel } from \"rc-tree/es/util\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { devUseWarning } from '../../_util/warning';\nimport Checkbox from '../../checkbox';\nimport Dropdown from '../../dropdown';\nimport Radio from '../../radio';\n// TODO: warning if use ajax!!!\nexport const SELECTION_COLUMN = {};\nexport const SELECTION_ALL = 'SELECT_ALL';\nexport const SELECTION_INVERT = 'SELECT_INVERT';\nexport const SELECTION_NONE = 'SELECT_NONE';\nconst EMPTY_LIST = [];\nconst flattenData = (childrenColumnName, data) => {\n  let list = [];\n  (data || []).forEach(record => {\n    list.push(record);\n    if (record && typeof record === 'object' && childrenColumnName in record) {\n      list = [].concat(_toConsumableArray(list), _toConsumableArray(flattenData(childrenColumnName, record[childrenColumnName])));\n    }\n  });\n  return list;\n};\nconst useSelection = (config, rowSelection) => {\n  const {\n    preserveSelectedRowKeys,\n    selectedRowKeys,\n    defaultSelectedRowKeys,\n    getCheckboxProps,\n    onChange: onSelectionChange,\n    onSelect,\n    onSelectAll,\n    onSelectInvert,\n    onSelectNone,\n    onSelectMultiple,\n    columnWidth: selectionColWidth,\n    type: selectionType,\n    selections,\n    fixed,\n    renderCell: customizeRenderCell,\n    hideSelectAll,\n    checkStrictly = true\n  } = rowSelection || {};\n  const {\n    prefixCls,\n    data,\n    pageData,\n    getRecordByKey,\n    getRowKey,\n    expandType,\n    childrenColumnName,\n    locale: tableLocale,\n    getPopupContainer\n  } = config;\n  const warning = devUseWarning('Table');\n  // ========================= Keys =========================\n  const [mergedSelectedKeys, setMergedSelectedKeys] = useMergedState(selectedRowKeys || defaultSelectedRowKeys || EMPTY_LIST, {\n    value: selectedRowKeys\n  });\n  // ======================== Caches ========================\n  const preserveRecordsRef = React.useRef(new Map());\n  const updatePreserveRecordsCache = useCallback(keys => {\n    if (preserveSelectedRowKeys) {\n      const newCache = new Map();\n      // Keep key if mark as preserveSelectedRowKeys\n      keys.forEach(key => {\n        let record = getRecordByKey(key);\n        if (!record && preserveRecordsRef.current.has(key)) {\n          record = preserveRecordsRef.current.get(key);\n        }\n        newCache.set(key, record);\n      });\n      // Refresh to new cache\n      preserveRecordsRef.current = newCache;\n    }\n  }, [getRecordByKey, preserveSelectedRowKeys]);\n  // Update cache with selectedKeys\n  React.useEffect(() => {\n    updatePreserveRecordsCache(mergedSelectedKeys);\n  }, [mergedSelectedKeys]);\n  const {\n    keyEntities\n  } = useMemo(() => {\n    if (checkStrictly) {\n      return {\n        keyEntities: null\n      };\n    }\n    let convertData = data;\n    if (preserveSelectedRowKeys) {\n      const keysSet = new Set(data.map((record, index) => getRowKey(record, index)));\n      // remove preserveRecords that duplicate data\n      const preserveRecords = Array.from(preserveRecordsRef.current).reduce((total, _ref) => {\n        let [key, value] = _ref;\n        return keysSet.has(key) ? total : total.concat(value);\n      }, []);\n      convertData = [].concat(_toConsumableArray(convertData), _toConsumableArray(preserveRecords));\n    }\n    return convertDataToEntities(convertData, {\n      externalGetKey: getRowKey,\n      childrenPropName: childrenColumnName\n    });\n  }, [data, getRowKey, checkStrictly, childrenColumnName, preserveSelectedRowKeys]);\n  // Get flatten data\n  const flattedData = useMemo(() => flattenData(childrenColumnName, pageData), [childrenColumnName, pageData]);\n  // Get all checkbox props\n  const checkboxPropsMap = useMemo(() => {\n    const map = new Map();\n    flattedData.forEach((record, index) => {\n      const key = getRowKey(record, index);\n      const checkboxProps = (getCheckboxProps ? getCheckboxProps(record) : null) || {};\n      map.set(key, checkboxProps);\n      process.env.NODE_ENV !== \"production\" ? warning(!('checked' in checkboxProps || 'defaultChecked' in checkboxProps), 'usage', 'Do not set `checked` or `defaultChecked` in `getCheckboxProps`. Please use `selectedRowKeys` instead.') : void 0;\n    });\n    return map;\n  }, [flattedData, getRowKey, getCheckboxProps]);\n  const isCheckboxDisabled = useCallback(r => {\n    var _a;\n    return !!((_a = checkboxPropsMap.get(getRowKey(r))) === null || _a === void 0 ? void 0 : _a.disabled);\n  }, [checkboxPropsMap, getRowKey]);\n  const [derivedSelectedKeys, derivedHalfSelectedKeys] = useMemo(() => {\n    if (checkStrictly) {\n      return [mergedSelectedKeys || [], []];\n    }\n    const {\n      checkedKeys,\n      halfCheckedKeys\n    } = conductCheck(mergedSelectedKeys, true, keyEntities, isCheckboxDisabled);\n    return [checkedKeys || [], halfCheckedKeys];\n  }, [mergedSelectedKeys, checkStrictly, keyEntities, isCheckboxDisabled]);\n  const derivedSelectedKeySet = useMemo(() => {\n    const keys = selectionType === 'radio' ? derivedSelectedKeys.slice(0, 1) : derivedSelectedKeys;\n    return new Set(keys);\n  }, [derivedSelectedKeys, selectionType]);\n  const derivedHalfSelectedKeySet = useMemo(() => selectionType === 'radio' ? new Set() : new Set(derivedHalfSelectedKeys), [derivedHalfSelectedKeys, selectionType]);\n  // Save last selected key to enable range selection\n  const [lastSelectedKey, setLastSelectedKey] = useState(null);\n  // Reset if rowSelection reset\n  React.useEffect(() => {\n    if (!rowSelection) {\n      setMergedSelectedKeys(EMPTY_LIST);\n    }\n  }, [!!rowSelection]);\n  const setSelectedKeys = useCallback((keys, method) => {\n    let availableKeys;\n    let records;\n    updatePreserveRecordsCache(keys);\n    if (preserveSelectedRowKeys) {\n      availableKeys = keys;\n      records = keys.map(key => preserveRecordsRef.current.get(key));\n    } else {\n      // Filter key which not exist in the `dataSource`\n      availableKeys = [];\n      records = [];\n      keys.forEach(key => {\n        const record = getRecordByKey(key);\n        if (record !== undefined) {\n          availableKeys.push(key);\n          records.push(record);\n        }\n      });\n    }\n    setMergedSelectedKeys(availableKeys);\n    onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(availableKeys, records, {\n      type: method\n    });\n  }, [setMergedSelectedKeys, getRecordByKey, onSelectionChange, preserveSelectedRowKeys]);\n  // ====================== Selections ======================\n  // Trigger single `onSelect` event\n  const triggerSingleSelection = useCallback((key, selected, keys, event) => {\n    if (onSelect) {\n      const rows = keys.map(k => getRecordByKey(k));\n      onSelect(getRecordByKey(key), selected, rows, event);\n    }\n    setSelectedKeys(keys, 'single');\n  }, [onSelect, getRecordByKey, setSelectedKeys]);\n  const mergedSelections = useMemo(() => {\n    if (!selections || hideSelectAll) {\n      return null;\n    }\n    const selectionList = selections === true ? [SELECTION_ALL, SELECTION_INVERT, SELECTION_NONE] : selections;\n    return selectionList.map(selection => {\n      if (selection === SELECTION_ALL) {\n        return {\n          key: 'all',\n          text: tableLocale.selectionAll,\n          onSelect() {\n            setSelectedKeys(data.map((record, index) => getRowKey(record, index)).filter(key => {\n              const checkProps = checkboxPropsMap.get(key);\n              return !(checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled) || derivedSelectedKeySet.has(key);\n            }), 'all');\n          }\n        };\n      }\n      if (selection === SELECTION_INVERT) {\n        return {\n          key: 'invert',\n          text: tableLocale.selectInvert,\n          onSelect() {\n            const keySet = new Set(derivedSelectedKeySet);\n            pageData.forEach((record, index) => {\n              const key = getRowKey(record, index);\n              const checkProps = checkboxPropsMap.get(key);\n              if (!(checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled)) {\n                if (keySet.has(key)) {\n                  keySet.delete(key);\n                } else {\n                  keySet.add(key);\n                }\n              }\n            });\n            const keys = Array.from(keySet);\n            if (onSelectInvert) {\n              warning.deprecated(false, 'onSelectInvert', 'onChange');\n              onSelectInvert(keys);\n            }\n            setSelectedKeys(keys, 'invert');\n          }\n        };\n      }\n      if (selection === SELECTION_NONE) {\n        return {\n          key: 'none',\n          text: tableLocale.selectNone,\n          onSelect() {\n            onSelectNone === null || onSelectNone === void 0 ? void 0 : onSelectNone();\n            setSelectedKeys(Array.from(derivedSelectedKeySet).filter(key => {\n              const checkProps = checkboxPropsMap.get(key);\n              return checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled;\n            }), 'none');\n          }\n        };\n      }\n      return selection;\n    }).map(selection => Object.assign(Object.assign({}, selection), {\n      onSelect: function () {\n        var _a2;\n        var _a;\n        for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {\n          rest[_key] = arguments[_key];\n        }\n        (_a = selection.onSelect) === null || _a === void 0 ? void 0 : (_a2 = _a).call.apply(_a2, [selection].concat(rest));\n        setLastSelectedKey(null);\n      }\n    }));\n  }, [selections, derivedSelectedKeySet, pageData, getRowKey, onSelectInvert, setSelectedKeys]);\n  // ======================= Columns ========================\n  const transformColumns = useCallback(columns => {\n    var _a;\n    // >>>>>>>>>>> Skip if not exists `rowSelection`\n    if (!rowSelection) {\n      process.env.NODE_ENV !== \"production\" ? warning(!columns.includes(SELECTION_COLUMN), 'usage', '`rowSelection` is not config but `SELECTION_COLUMN` exists in the `columns`.') : void 0;\n      return columns.filter(col => col !== SELECTION_COLUMN);\n    }\n    // >>>>>>>>>>> Support selection\n    let cloneColumns = _toConsumableArray(columns);\n    const keySet = new Set(derivedSelectedKeySet);\n    // Record key only need check with enabled\n    const recordKeys = flattedData.map(getRowKey).filter(key => !checkboxPropsMap.get(key).disabled);\n    const checkedCurrentAll = recordKeys.every(key => keySet.has(key));\n    const checkedCurrentSome = recordKeys.some(key => keySet.has(key));\n    const onSelectAllChange = () => {\n      const changeKeys = [];\n      if (checkedCurrentAll) {\n        recordKeys.forEach(key => {\n          keySet.delete(key);\n          changeKeys.push(key);\n        });\n      } else {\n        recordKeys.forEach(key => {\n          if (!keySet.has(key)) {\n            keySet.add(key);\n            changeKeys.push(key);\n          }\n        });\n      }\n      const keys = Array.from(keySet);\n      onSelectAll === null || onSelectAll === void 0 ? void 0 : onSelectAll(!checkedCurrentAll, keys.map(k => getRecordByKey(k)), changeKeys.map(k => getRecordByKey(k)));\n      setSelectedKeys(keys, 'all');\n      setLastSelectedKey(null);\n    };\n    // ===================== Render =====================\n    // Title Cell\n    let title;\n    if (selectionType !== 'radio') {\n      let customizeSelections;\n      if (mergedSelections) {\n        const menu = {\n          getPopupContainer,\n          items: mergedSelections.map((selection, index) => {\n            const {\n              key,\n              text,\n              onSelect: onSelectionClick\n            } = selection;\n            return {\n              key: key !== null && key !== void 0 ? key : index,\n              onClick: () => {\n                onSelectionClick === null || onSelectionClick === void 0 ? void 0 : onSelectionClick(recordKeys);\n              },\n              label: text\n            };\n          })\n        };\n        customizeSelections = /*#__PURE__*/React.createElement(\"div\", {\n          className: `${prefixCls}-selection-extra`\n        }, /*#__PURE__*/React.createElement(Dropdown, {\n          menu: menu,\n          getPopupContainer: getPopupContainer\n        }, /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(DownOutlined, null))));\n      }\n      const allDisabledData = flattedData.map((record, index) => {\n        const key = getRowKey(record, index);\n        const checkboxProps = checkboxPropsMap.get(key) || {};\n        return Object.assign({\n          checked: keySet.has(key)\n        }, checkboxProps);\n      }).filter(_ref2 => {\n        let {\n          disabled\n        } = _ref2;\n        return disabled;\n      });\n      const allDisabled = !!allDisabledData.length && allDisabledData.length === flattedData.length;\n      const allDisabledAndChecked = allDisabled && allDisabledData.every(_ref3 => {\n        let {\n          checked\n        } = _ref3;\n        return checked;\n      });\n      const allDisabledSomeChecked = allDisabled && allDisabledData.some(_ref4 => {\n        let {\n          checked\n        } = _ref4;\n        return checked;\n      });\n      title = !hideSelectAll && /*#__PURE__*/React.createElement(\"div\", {\n        className: `${prefixCls}-selection`\n      }, /*#__PURE__*/React.createElement(Checkbox, {\n        checked: !allDisabled ? !!flattedData.length && checkedCurrentAll : allDisabledAndChecked,\n        indeterminate: !allDisabled ? !checkedCurrentAll && checkedCurrentSome : !allDisabledAndChecked && allDisabledSomeChecked,\n        onChange: onSelectAllChange,\n        disabled: flattedData.length === 0 || allDisabled,\n        \"aria-label\": customizeSelections ? 'Custom selection' : 'Select all',\n        skipGroup: true\n      }), customizeSelections);\n    }\n    // Body Cell\n    let renderCell;\n    if (selectionType === 'radio') {\n      renderCell = (_, record, index) => {\n        const key = getRowKey(record, index);\n        const checked = keySet.has(key);\n        return {\n          node: /*#__PURE__*/React.createElement(Radio, Object.assign({}, checkboxPropsMap.get(key), {\n            checked: checked,\n            onClick: e => e.stopPropagation(),\n            onChange: event => {\n              if (!keySet.has(key)) {\n                triggerSingleSelection(key, true, [key], event.nativeEvent);\n              }\n            }\n          })),\n          checked\n        };\n      };\n    } else {\n      renderCell = (_, record, index) => {\n        var _a;\n        const key = getRowKey(record, index);\n        const checked = keySet.has(key);\n        const indeterminate = derivedHalfSelectedKeySet.has(key);\n        const checkboxProps = checkboxPropsMap.get(key);\n        let mergedIndeterminate;\n        if (expandType === 'nest') {\n          mergedIndeterminate = indeterminate;\n          process.env.NODE_ENV !== \"production\" ? warning(typeof (checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== 'boolean', 'usage', 'set `indeterminate` using `rowSelection.getCheckboxProps` is not allowed with tree structured dataSource.') : void 0;\n        } else {\n          mergedIndeterminate = (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== null && _a !== void 0 ? _a : indeterminate;\n        }\n        // Record checked\n        return {\n          node: /*#__PURE__*/React.createElement(Checkbox, Object.assign({}, checkboxProps, {\n            indeterminate: mergedIndeterminate,\n            checked: checked,\n            skipGroup: true,\n            onClick: e => e.stopPropagation(),\n            onChange: _ref5 => {\n              let {\n                nativeEvent\n              } = _ref5;\n              const {\n                shiftKey\n              } = nativeEvent;\n              let startIndex = -1;\n              let endIndex = -1;\n              // Get range of this\n              if (shiftKey && checkStrictly) {\n                const pointKeys = new Set([lastSelectedKey, key]);\n                recordKeys.some((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                  return false;\n                });\n              }\n              if (endIndex !== -1 && startIndex !== endIndex && checkStrictly) {\n                // Batch update selections\n                const rangeKeys = recordKeys.slice(startIndex, endIndex + 1);\n                const changedKeys = [];\n                if (checked) {\n                  rangeKeys.forEach(recordKey => {\n                    if (keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.delete(recordKey);\n                    }\n                  });\n                } else {\n                  rangeKeys.forEach(recordKey => {\n                    if (!keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.add(recordKey);\n                    }\n                  });\n                }\n                const keys = Array.from(keySet);\n                onSelectMultiple === null || onSelectMultiple === void 0 ? void 0 : onSelectMultiple(!checked, keys.map(recordKey => getRecordByKey(recordKey)), changedKeys.map(recordKey => getRecordByKey(recordKey)));\n                setSelectedKeys(keys, 'multiple');\n              } else {\n                // Single record selected\n                const originCheckedKeys = derivedSelectedKeys;\n                if (checkStrictly) {\n                  const checkedKeys = checked ? arrDel(originCheckedKeys, key) : arrAdd(originCheckedKeys, key);\n                  triggerSingleSelection(key, !checked, checkedKeys, nativeEvent);\n                } else {\n                  // Always fill first\n                  const result = conductCheck([].concat(_toConsumableArray(originCheckedKeys), [key]), true, keyEntities, isCheckboxDisabled);\n                  const {\n                    checkedKeys,\n                    halfCheckedKeys\n                  } = result;\n                  let nextCheckedKeys = checkedKeys;\n                  // If remove, we do it again to correction\n                  if (checked) {\n                    const tempKeySet = new Set(checkedKeys);\n                    tempKeySet.delete(key);\n                    nextCheckedKeys = conductCheck(Array.from(tempKeySet), {\n                      checked: false,\n                      halfCheckedKeys\n                    }, keyEntities, isCheckboxDisabled).checkedKeys;\n                  }\n                  triggerSingleSelection(key, !checked, nextCheckedKeys, nativeEvent);\n                }\n              }\n              if (checked) {\n                setLastSelectedKey(null);\n              } else {\n                setLastSelectedKey(key);\n              }\n            }\n          })),\n          checked\n        };\n      };\n    }\n    const renderSelectionCell = (_, record, index) => {\n      const {\n        node,\n        checked\n      } = renderCell(_, record, index);\n      if (customizeRenderCell) {\n        return customizeRenderCell(checked, record, index, node);\n      }\n      return node;\n    };\n    // Insert selection column if not exist\n    if (!cloneColumns.includes(SELECTION_COLUMN)) {\n      // Always after expand icon\n      if (cloneColumns.findIndex(col => {\n        var _a;\n        return ((_a = col[INTERNAL_COL_DEFINE]) === null || _a === void 0 ? void 0 : _a.columnType) === 'EXPAND_COLUMN';\n      }) === 0) {\n        const [expandColumn, ...restColumns] = cloneColumns;\n        cloneColumns = [expandColumn, SELECTION_COLUMN].concat(_toConsumableArray(restColumns));\n      } else {\n        // Normal insert at first column\n        cloneColumns = [SELECTION_COLUMN].concat(_toConsumableArray(cloneColumns));\n      }\n    }\n    // Deduplicate selection column\n    const selectionColumnIndex = cloneColumns.indexOf(SELECTION_COLUMN);\n    process.env.NODE_ENV !== \"production\" ? warning(cloneColumns.filter(col => col === SELECTION_COLUMN).length <= 1, 'usage', 'Multiple `SELECTION_COLUMN` exist in `columns`.') : void 0;\n    cloneColumns = cloneColumns.filter((column, index) => column !== SELECTION_COLUMN || index === selectionColumnIndex);\n    // Fixed column logic\n    const prevCol = cloneColumns[selectionColumnIndex - 1];\n    const nextCol = cloneColumns[selectionColumnIndex + 1];\n    let mergedFixed = fixed;\n    if (mergedFixed === undefined) {\n      if ((nextCol === null || nextCol === void 0 ? void 0 : nextCol.fixed) !== undefined) {\n        mergedFixed = nextCol.fixed;\n      } else if ((prevCol === null || prevCol === void 0 ? void 0 : prevCol.fixed) !== undefined) {\n        mergedFixed = prevCol.fixed;\n      }\n    }\n    if (mergedFixed && prevCol && ((_a = prevCol[INTERNAL_COL_DEFINE]) === null || _a === void 0 ? void 0 : _a.columnType) === 'EXPAND_COLUMN' && prevCol.fixed === undefined) {\n      prevCol.fixed = mergedFixed;\n    }\n    const columnCls = classNames(`${prefixCls}-selection-col`, {\n      [`${prefixCls}-selection-col-with-dropdown`]: selections && selectionType === 'checkbox'\n    });\n    // Replace with real selection column\n    const selectionColumn = {\n      fixed: mergedFixed,\n      width: selectionColWidth,\n      className: `${prefixCls}-selection-column`,\n      title: rowSelection.columnTitle || title,\n      render: renderSelectionCell,\n      onCell: rowSelection.onCell,\n      [INTERNAL_COL_DEFINE]: {\n        className: columnCls\n      }\n    };\n    return cloneColumns.map(col => col === SELECTION_COLUMN ? selectionColumn : col);\n  }, [getRowKey, flattedData, rowSelection, derivedSelectedKeys, derivedSelectedKeySet, derivedHalfSelectedKeySet, selectionColWidth, mergedSelections, expandType, lastSelectedKey, checkboxPropsMap, onSelectMultiple, triggerSingleSelection, isCheckboxDisabled]);\n  return [transformColumns, derivedSelectedKeySet];\n};\nexport default useSelection;","map":{"version":3,"names":["_toConsumableArray","React","useCallback","useMemo","useState","DownOutlined","classNames","INTERNAL_COL_DEFINE","arrAdd","arrDel","conductCheck","convertDataToEntities","useMergedState","devUseWarning","Checkbox","Dropdown","Radio","SELECTION_COLUMN","SELECTION_ALL","SELECTION_INVERT","SELECTION_NONE","EMPTY_LIST","flattenData","childrenColumnName","data","list","forEach","record","push","concat","useSelection","config","rowSelection","preserveSelectedRowKeys","selectedRowKeys","defaultSelectedRowKeys","getCheckboxProps","onChange","onSelectionChange","onSelect","onSelectAll","onSelectInvert","onSelectNone","onSelectMultiple","columnWidth","selectionColWidth","type","selectionType","selections","fixed","renderCell","customizeRenderCell","hideSelectAll","checkStrictly","prefixCls","pageData","getRecordByKey","getRowKey","expandType","locale","tableLocale","getPopupContainer","warning","mergedSelectedKeys","setMergedSelectedKeys","value","preserveRecordsRef","useRef","Map","updatePreserveRecordsCache","keys","newCache","key","current","has","get","set","useEffect","keyEntities","convertData","keysSet","Set","map","index","preserveRecords","Array","from","reduce","total","_ref","externalGetKey","childrenPropName","flattedData","checkboxPropsMap","checkboxProps","process","env","NODE_ENV","isCheckboxDisabled","r","_a","disabled","derivedSelectedKeys","derivedHalfSelectedKeys","checkedKeys","halfCheckedKeys","derivedSelectedKeySet","slice","derivedHalfSelectedKeySet","lastSelectedKey","setLastSelectedKey","setSelectedKeys","method","availableKeys","records","undefined","triggerSingleSelection","selected","event","rows","k","mergedSelections","selectionList","selection","text","selectionAll","filter","checkProps","selectInvert","keySet","delete","add","deprecated","selectNone","Object","assign","_a2","_len","arguments","length","rest","_key","call","apply","transformColumns","columns","includes","col","cloneColumns","recordKeys","checkedCurrentAll","every","checkedCurrentSome","some","onSelectAllChange","changeKeys","title","customizeSelections","menu","items","onSelectionClick","onClick","label","createElement","className","allDisabledData","checked","_ref2","allDisabled","allDisabledAndChecked","_ref3","allDisabledSomeChecked","_ref4","indeterminate","skipGroup","_","node","e","stopPropagation","nativeEvent","mergedIndeterminate","_ref5","shiftKey","startIndex","endIndex","pointKeys","recordKey","recordIndex","rangeKeys","changedKeys","originCheckedKeys","result","nextCheckedKeys","tempKeySet","renderSelectionCell","findIndex","columnType","expandColumn","restColumns","selectionColumnIndex","indexOf","column","prevCol","nextCol","mergedFixed","columnCls","selectionColumn","width","columnTitle","render","onCell"],"sources":["/Users/chrishaack/UC_Trains_Voice/react-demo/node_modules/antd/es/table/hooks/useSelection.js"],"sourcesContent":["\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport DownOutlined from \"@ant-design/icons/es/icons/DownOutlined\";\nimport classNames from 'classnames';\nimport { INTERNAL_COL_DEFINE } from 'rc-table';\nimport { arrAdd, arrDel } from \"rc-tree/es/util\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { devUseWarning } from '../../_util/warning';\nimport Checkbox from '../../checkbox';\nimport Dropdown from '../../dropdown';\nimport Radio from '../../radio';\n// TODO: warning if use ajax!!!\nexport const SELECTION_COLUMN = {};\nexport const SELECTION_ALL = 'SELECT_ALL';\nexport const SELECTION_INVERT = 'SELECT_INVERT';\nexport const SELECTION_NONE = 'SELECT_NONE';\nconst EMPTY_LIST = [];\nconst flattenData = (childrenColumnName, data) => {\n  let list = [];\n  (data || []).forEach(record => {\n    list.push(record);\n    if (record && typeof record === 'object' && childrenColumnName in record) {\n      list = [].concat(_toConsumableArray(list), _toConsumableArray(flattenData(childrenColumnName, record[childrenColumnName])));\n    }\n  });\n  return list;\n};\nconst useSelection = (config, rowSelection) => {\n  const {\n    preserveSelectedRowKeys,\n    selectedRowKeys,\n    defaultSelectedRowKeys,\n    getCheckboxProps,\n    onChange: onSelectionChange,\n    onSelect,\n    onSelectAll,\n    onSelectInvert,\n    onSelectNone,\n    onSelectMultiple,\n    columnWidth: selectionColWidth,\n    type: selectionType,\n    selections,\n    fixed,\n    renderCell: customizeRenderCell,\n    hideSelectAll,\n    checkStrictly = true\n  } = rowSelection || {};\n  const {\n    prefixCls,\n    data,\n    pageData,\n    getRecordByKey,\n    getRowKey,\n    expandType,\n    childrenColumnName,\n    locale: tableLocale,\n    getPopupContainer\n  } = config;\n  const warning = devUseWarning('Table');\n  // ========================= Keys =========================\n  const [mergedSelectedKeys, setMergedSelectedKeys] = useMergedState(selectedRowKeys || defaultSelectedRowKeys || EMPTY_LIST, {\n    value: selectedRowKeys\n  });\n  // ======================== Caches ========================\n  const preserveRecordsRef = React.useRef(new Map());\n  const updatePreserveRecordsCache = useCallback(keys => {\n    if (preserveSelectedRowKeys) {\n      const newCache = new Map();\n      // Keep key if mark as preserveSelectedRowKeys\n      keys.forEach(key => {\n        let record = getRecordByKey(key);\n        if (!record && preserveRecordsRef.current.has(key)) {\n          record = preserveRecordsRef.current.get(key);\n        }\n        newCache.set(key, record);\n      });\n      // Refresh to new cache\n      preserveRecordsRef.current = newCache;\n    }\n  }, [getRecordByKey, preserveSelectedRowKeys]);\n  // Update cache with selectedKeys\n  React.useEffect(() => {\n    updatePreserveRecordsCache(mergedSelectedKeys);\n  }, [mergedSelectedKeys]);\n  const {\n    keyEntities\n  } = useMemo(() => {\n    if (checkStrictly) {\n      return {\n        keyEntities: null\n      };\n    }\n    let convertData = data;\n    if (preserveSelectedRowKeys) {\n      const keysSet = new Set(data.map((record, index) => getRowKey(record, index)));\n      // remove preserveRecords that duplicate data\n      const preserveRecords = Array.from(preserveRecordsRef.current).reduce((total, _ref) => {\n        let [key, value] = _ref;\n        return keysSet.has(key) ? total : total.concat(value);\n      }, []);\n      convertData = [].concat(_toConsumableArray(convertData), _toConsumableArray(preserveRecords));\n    }\n    return convertDataToEntities(convertData, {\n      externalGetKey: getRowKey,\n      childrenPropName: childrenColumnName\n    });\n  }, [data, getRowKey, checkStrictly, childrenColumnName, preserveSelectedRowKeys]);\n  // Get flatten data\n  const flattedData = useMemo(() => flattenData(childrenColumnName, pageData), [childrenColumnName, pageData]);\n  // Get all checkbox props\n  const checkboxPropsMap = useMemo(() => {\n    const map = new Map();\n    flattedData.forEach((record, index) => {\n      const key = getRowKey(record, index);\n      const checkboxProps = (getCheckboxProps ? getCheckboxProps(record) : null) || {};\n      map.set(key, checkboxProps);\n      process.env.NODE_ENV !== \"production\" ? warning(!('checked' in checkboxProps || 'defaultChecked' in checkboxProps), 'usage', 'Do not set `checked` or `defaultChecked` in `getCheckboxProps`. Please use `selectedRowKeys` instead.') : void 0;\n    });\n    return map;\n  }, [flattedData, getRowKey, getCheckboxProps]);\n  const isCheckboxDisabled = useCallback(r => {\n    var _a;\n    return !!((_a = checkboxPropsMap.get(getRowKey(r))) === null || _a === void 0 ? void 0 : _a.disabled);\n  }, [checkboxPropsMap, getRowKey]);\n  const [derivedSelectedKeys, derivedHalfSelectedKeys] = useMemo(() => {\n    if (checkStrictly) {\n      return [mergedSelectedKeys || [], []];\n    }\n    const {\n      checkedKeys,\n      halfCheckedKeys\n    } = conductCheck(mergedSelectedKeys, true, keyEntities, isCheckboxDisabled);\n    return [checkedKeys || [], halfCheckedKeys];\n  }, [mergedSelectedKeys, checkStrictly, keyEntities, isCheckboxDisabled]);\n  const derivedSelectedKeySet = useMemo(() => {\n    const keys = selectionType === 'radio' ? derivedSelectedKeys.slice(0, 1) : derivedSelectedKeys;\n    return new Set(keys);\n  }, [derivedSelectedKeys, selectionType]);\n  const derivedHalfSelectedKeySet = useMemo(() => selectionType === 'radio' ? new Set() : new Set(derivedHalfSelectedKeys), [derivedHalfSelectedKeys, selectionType]);\n  // Save last selected key to enable range selection\n  const [lastSelectedKey, setLastSelectedKey] = useState(null);\n  // Reset if rowSelection reset\n  React.useEffect(() => {\n    if (!rowSelection) {\n      setMergedSelectedKeys(EMPTY_LIST);\n    }\n  }, [!!rowSelection]);\n  const setSelectedKeys = useCallback((keys, method) => {\n    let availableKeys;\n    let records;\n    updatePreserveRecordsCache(keys);\n    if (preserveSelectedRowKeys) {\n      availableKeys = keys;\n      records = keys.map(key => preserveRecordsRef.current.get(key));\n    } else {\n      // Filter key which not exist in the `dataSource`\n      availableKeys = [];\n      records = [];\n      keys.forEach(key => {\n        const record = getRecordByKey(key);\n        if (record !== undefined) {\n          availableKeys.push(key);\n          records.push(record);\n        }\n      });\n    }\n    setMergedSelectedKeys(availableKeys);\n    onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(availableKeys, records, {\n      type: method\n    });\n  }, [setMergedSelectedKeys, getRecordByKey, onSelectionChange, preserveSelectedRowKeys]);\n  // ====================== Selections ======================\n  // Trigger single `onSelect` event\n  const triggerSingleSelection = useCallback((key, selected, keys, event) => {\n    if (onSelect) {\n      const rows = keys.map(k => getRecordByKey(k));\n      onSelect(getRecordByKey(key), selected, rows, event);\n    }\n    setSelectedKeys(keys, 'single');\n  }, [onSelect, getRecordByKey, setSelectedKeys]);\n  const mergedSelections = useMemo(() => {\n    if (!selections || hideSelectAll) {\n      return null;\n    }\n    const selectionList = selections === true ? [SELECTION_ALL, SELECTION_INVERT, SELECTION_NONE] : selections;\n    return selectionList.map(selection => {\n      if (selection === SELECTION_ALL) {\n        return {\n          key: 'all',\n          text: tableLocale.selectionAll,\n          onSelect() {\n            setSelectedKeys(data.map((record, index) => getRowKey(record, index)).filter(key => {\n              const checkProps = checkboxPropsMap.get(key);\n              return !(checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled) || derivedSelectedKeySet.has(key);\n            }), 'all');\n          }\n        };\n      }\n      if (selection === SELECTION_INVERT) {\n        return {\n          key: 'invert',\n          text: tableLocale.selectInvert,\n          onSelect() {\n            const keySet = new Set(derivedSelectedKeySet);\n            pageData.forEach((record, index) => {\n              const key = getRowKey(record, index);\n              const checkProps = checkboxPropsMap.get(key);\n              if (!(checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled)) {\n                if (keySet.has(key)) {\n                  keySet.delete(key);\n                } else {\n                  keySet.add(key);\n                }\n              }\n            });\n            const keys = Array.from(keySet);\n            if (onSelectInvert) {\n              warning.deprecated(false, 'onSelectInvert', 'onChange');\n              onSelectInvert(keys);\n            }\n            setSelectedKeys(keys, 'invert');\n          }\n        };\n      }\n      if (selection === SELECTION_NONE) {\n        return {\n          key: 'none',\n          text: tableLocale.selectNone,\n          onSelect() {\n            onSelectNone === null || onSelectNone === void 0 ? void 0 : onSelectNone();\n            setSelectedKeys(Array.from(derivedSelectedKeySet).filter(key => {\n              const checkProps = checkboxPropsMap.get(key);\n              return checkProps === null || checkProps === void 0 ? void 0 : checkProps.disabled;\n            }), 'none');\n          }\n        };\n      }\n      return selection;\n    }).map(selection => Object.assign(Object.assign({}, selection), {\n      onSelect: function () {\n        var _a2;\n        var _a;\n        for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {\n          rest[_key] = arguments[_key];\n        }\n        (_a = selection.onSelect) === null || _a === void 0 ? void 0 : (_a2 = _a).call.apply(_a2, [selection].concat(rest));\n        setLastSelectedKey(null);\n      }\n    }));\n  }, [selections, derivedSelectedKeySet, pageData, getRowKey, onSelectInvert, setSelectedKeys]);\n  // ======================= Columns ========================\n  const transformColumns = useCallback(columns => {\n    var _a;\n    // >>>>>>>>>>> Skip if not exists `rowSelection`\n    if (!rowSelection) {\n      process.env.NODE_ENV !== \"production\" ? warning(!columns.includes(SELECTION_COLUMN), 'usage', '`rowSelection` is not config but `SELECTION_COLUMN` exists in the `columns`.') : void 0;\n      return columns.filter(col => col !== SELECTION_COLUMN);\n    }\n    // >>>>>>>>>>> Support selection\n    let cloneColumns = _toConsumableArray(columns);\n    const keySet = new Set(derivedSelectedKeySet);\n    // Record key only need check with enabled\n    const recordKeys = flattedData.map(getRowKey).filter(key => !checkboxPropsMap.get(key).disabled);\n    const checkedCurrentAll = recordKeys.every(key => keySet.has(key));\n    const checkedCurrentSome = recordKeys.some(key => keySet.has(key));\n    const onSelectAllChange = () => {\n      const changeKeys = [];\n      if (checkedCurrentAll) {\n        recordKeys.forEach(key => {\n          keySet.delete(key);\n          changeKeys.push(key);\n        });\n      } else {\n        recordKeys.forEach(key => {\n          if (!keySet.has(key)) {\n            keySet.add(key);\n            changeKeys.push(key);\n          }\n        });\n      }\n      const keys = Array.from(keySet);\n      onSelectAll === null || onSelectAll === void 0 ? void 0 : onSelectAll(!checkedCurrentAll, keys.map(k => getRecordByKey(k)), changeKeys.map(k => getRecordByKey(k)));\n      setSelectedKeys(keys, 'all');\n      setLastSelectedKey(null);\n    };\n    // ===================== Render =====================\n    // Title Cell\n    let title;\n    if (selectionType !== 'radio') {\n      let customizeSelections;\n      if (mergedSelections) {\n        const menu = {\n          getPopupContainer,\n          items: mergedSelections.map((selection, index) => {\n            const {\n              key,\n              text,\n              onSelect: onSelectionClick\n            } = selection;\n            return {\n              key: key !== null && key !== void 0 ? key : index,\n              onClick: () => {\n                onSelectionClick === null || onSelectionClick === void 0 ? void 0 : onSelectionClick(recordKeys);\n              },\n              label: text\n            };\n          })\n        };\n        customizeSelections = /*#__PURE__*/React.createElement(\"div\", {\n          className: `${prefixCls}-selection-extra`\n        }, /*#__PURE__*/React.createElement(Dropdown, {\n          menu: menu,\n          getPopupContainer: getPopupContainer\n        }, /*#__PURE__*/React.createElement(\"span\", null, /*#__PURE__*/React.createElement(DownOutlined, null))));\n      }\n      const allDisabledData = flattedData.map((record, index) => {\n        const key = getRowKey(record, index);\n        const checkboxProps = checkboxPropsMap.get(key) || {};\n        return Object.assign({\n          checked: keySet.has(key)\n        }, checkboxProps);\n      }).filter(_ref2 => {\n        let {\n          disabled\n        } = _ref2;\n        return disabled;\n      });\n      const allDisabled = !!allDisabledData.length && allDisabledData.length === flattedData.length;\n      const allDisabledAndChecked = allDisabled && allDisabledData.every(_ref3 => {\n        let {\n          checked\n        } = _ref3;\n        return checked;\n      });\n      const allDisabledSomeChecked = allDisabled && allDisabledData.some(_ref4 => {\n        let {\n          checked\n        } = _ref4;\n        return checked;\n      });\n      title = !hideSelectAll && /*#__PURE__*/React.createElement(\"div\", {\n        className: `${prefixCls}-selection`\n      }, /*#__PURE__*/React.createElement(Checkbox, {\n        checked: !allDisabled ? !!flattedData.length && checkedCurrentAll : allDisabledAndChecked,\n        indeterminate: !allDisabled ? !checkedCurrentAll && checkedCurrentSome : !allDisabledAndChecked && allDisabledSomeChecked,\n        onChange: onSelectAllChange,\n        disabled: flattedData.length === 0 || allDisabled,\n        \"aria-label\": customizeSelections ? 'Custom selection' : 'Select all',\n        skipGroup: true\n      }), customizeSelections);\n    }\n    // Body Cell\n    let renderCell;\n    if (selectionType === 'radio') {\n      renderCell = (_, record, index) => {\n        const key = getRowKey(record, index);\n        const checked = keySet.has(key);\n        return {\n          node: /*#__PURE__*/React.createElement(Radio, Object.assign({}, checkboxPropsMap.get(key), {\n            checked: checked,\n            onClick: e => e.stopPropagation(),\n            onChange: event => {\n              if (!keySet.has(key)) {\n                triggerSingleSelection(key, true, [key], event.nativeEvent);\n              }\n            }\n          })),\n          checked\n        };\n      };\n    } else {\n      renderCell = (_, record, index) => {\n        var _a;\n        const key = getRowKey(record, index);\n        const checked = keySet.has(key);\n        const indeterminate = derivedHalfSelectedKeySet.has(key);\n        const checkboxProps = checkboxPropsMap.get(key);\n        let mergedIndeterminate;\n        if (expandType === 'nest') {\n          mergedIndeterminate = indeterminate;\n          process.env.NODE_ENV !== \"production\" ? warning(typeof (checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== 'boolean', 'usage', 'set `indeterminate` using `rowSelection.getCheckboxProps` is not allowed with tree structured dataSource.') : void 0;\n        } else {\n          mergedIndeterminate = (_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.indeterminate) !== null && _a !== void 0 ? _a : indeterminate;\n        }\n        // Record checked\n        return {\n          node: /*#__PURE__*/React.createElement(Checkbox, Object.assign({}, checkboxProps, {\n            indeterminate: mergedIndeterminate,\n            checked: checked,\n            skipGroup: true,\n            onClick: e => e.stopPropagation(),\n            onChange: _ref5 => {\n              let {\n                nativeEvent\n              } = _ref5;\n              const {\n                shiftKey\n              } = nativeEvent;\n              let startIndex = -1;\n              let endIndex = -1;\n              // Get range of this\n              if (shiftKey && checkStrictly) {\n                const pointKeys = new Set([lastSelectedKey, key]);\n                recordKeys.some((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                  return false;\n                });\n              }\n              if (endIndex !== -1 && startIndex !== endIndex && checkStrictly) {\n                // Batch update selections\n                const rangeKeys = recordKeys.slice(startIndex, endIndex + 1);\n                const changedKeys = [];\n                if (checked) {\n                  rangeKeys.forEach(recordKey => {\n                    if (keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.delete(recordKey);\n                    }\n                  });\n                } else {\n                  rangeKeys.forEach(recordKey => {\n                    if (!keySet.has(recordKey)) {\n                      changedKeys.push(recordKey);\n                      keySet.add(recordKey);\n                    }\n                  });\n                }\n                const keys = Array.from(keySet);\n                onSelectMultiple === null || onSelectMultiple === void 0 ? void 0 : onSelectMultiple(!checked, keys.map(recordKey => getRecordByKey(recordKey)), changedKeys.map(recordKey => getRecordByKey(recordKey)));\n                setSelectedKeys(keys, 'multiple');\n              } else {\n                // Single record selected\n                const originCheckedKeys = derivedSelectedKeys;\n                if (checkStrictly) {\n                  const checkedKeys = checked ? arrDel(originCheckedKeys, key) : arrAdd(originCheckedKeys, key);\n                  triggerSingleSelection(key, !checked, checkedKeys, nativeEvent);\n                } else {\n                  // Always fill first\n                  const result = conductCheck([].concat(_toConsumableArray(originCheckedKeys), [key]), true, keyEntities, isCheckboxDisabled);\n                  const {\n                    checkedKeys,\n                    halfCheckedKeys\n                  } = result;\n                  let nextCheckedKeys = checkedKeys;\n                  // If remove, we do it again to correction\n                  if (checked) {\n                    const tempKeySet = new Set(checkedKeys);\n                    tempKeySet.delete(key);\n                    nextCheckedKeys = conductCheck(Array.from(tempKeySet), {\n                      checked: false,\n                      halfCheckedKeys\n                    }, keyEntities, isCheckboxDisabled).checkedKeys;\n                  }\n                  triggerSingleSelection(key, !checked, nextCheckedKeys, nativeEvent);\n                }\n              }\n              if (checked) {\n                setLastSelectedKey(null);\n              } else {\n                setLastSelectedKey(key);\n              }\n            }\n          })),\n          checked\n        };\n      };\n    }\n    const renderSelectionCell = (_, record, index) => {\n      const {\n        node,\n        checked\n      } = renderCell(_, record, index);\n      if (customizeRenderCell) {\n        return customizeRenderCell(checked, record, index, node);\n      }\n      return node;\n    };\n    // Insert selection column if not exist\n    if (!cloneColumns.includes(SELECTION_COLUMN)) {\n      // Always after expand icon\n      if (cloneColumns.findIndex(col => {\n        var _a;\n        return ((_a = col[INTERNAL_COL_DEFINE]) === null || _a === void 0 ? void 0 : _a.columnType) === 'EXPAND_COLUMN';\n      }) === 0) {\n        const [expandColumn, ...restColumns] = cloneColumns;\n        cloneColumns = [expandColumn, SELECTION_COLUMN].concat(_toConsumableArray(restColumns));\n      } else {\n        // Normal insert at first column\n        cloneColumns = [SELECTION_COLUMN].concat(_toConsumableArray(cloneColumns));\n      }\n    }\n    // Deduplicate selection column\n    const selectionColumnIndex = cloneColumns.indexOf(SELECTION_COLUMN);\n    process.env.NODE_ENV !== \"production\" ? warning(cloneColumns.filter(col => col === SELECTION_COLUMN).length <= 1, 'usage', 'Multiple `SELECTION_COLUMN` exist in `columns`.') : void 0;\n    cloneColumns = cloneColumns.filter((column, index) => column !== SELECTION_COLUMN || index === selectionColumnIndex);\n    // Fixed column logic\n    const prevCol = cloneColumns[selectionColumnIndex - 1];\n    const nextCol = cloneColumns[selectionColumnIndex + 1];\n    let mergedFixed = fixed;\n    if (mergedFixed === undefined) {\n      if ((nextCol === null || nextCol === void 0 ? void 0 : nextCol.fixed) !== undefined) {\n        mergedFixed = nextCol.fixed;\n      } else if ((prevCol === null || prevCol === void 0 ? void 0 : prevCol.fixed) !== undefined) {\n        mergedFixed = prevCol.fixed;\n      }\n    }\n    if (mergedFixed && prevCol && ((_a = prevCol[INTERNAL_COL_DEFINE]) === null || _a === void 0 ? void 0 : _a.columnType) === 'EXPAND_COLUMN' && prevCol.fixed === undefined) {\n      prevCol.fixed = mergedFixed;\n    }\n    const columnCls = classNames(`${prefixCls}-selection-col`, {\n      [`${prefixCls}-selection-col-with-dropdown`]: selections && selectionType === 'checkbox'\n    });\n    // Replace with real selection column\n    const selectionColumn = {\n      fixed: mergedFixed,\n      width: selectionColWidth,\n      className: `${prefixCls}-selection-column`,\n      title: rowSelection.columnTitle || title,\n      render: renderSelectionCell,\n      onCell: rowSelection.onCell,\n      [INTERNAL_COL_DEFINE]: {\n        className: columnCls\n      }\n    };\n    return cloneColumns.map(col => col === SELECTION_COLUMN ? selectionColumn : col);\n  }, [getRowKey, flattedData, rowSelection, derivedSelectedKeys, derivedSelectedKeySet, derivedHalfSelectedKeySet, selectionColWidth, mergedSelections, expandType, lastSelectedKey, checkboxPropsMap, onSelectMultiple, triggerSingleSelection, isCheckboxDisabled]);\n  return [transformColumns, derivedSelectedKeySet];\n};\nexport default useSelection;"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}