UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

90 lines (85 loc) 3.33 kB
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import { useSelections } from 'ahooks'; import { isArray, mergeWith, cloneDeep } from 'lodash'; import React, { forwardRef, useImperativeHandle, useState } from 'react'; import defaultConfig from "./defaultConfig"; import Wrapper from "./wrapper"; /** 合并参数 */ // const mergeProps = (props: ChartTableProps) => { // const { resizeConfig, checkboxConfig, rowConfig, fieldNames } = props // return { // resizeConfig: merge(defaultResizeConfig, resizeConfig), // checkboxConfig: merge(defaultCheckboxConfig, checkboxConfig), // rowConfig: merge(defaultRowConfig, rowConfig), // fieldNames: merge(defaultFieldNames, fieldNames), // ...props, // } // } function customizer(objValue, srcValue) { if (isArray(objValue)) { return srcValue; } } /** 拓展行数据保存 */ var useSelection = function useSelection(_ref) { var dataSource = _ref.dataSource, checkboxConfig = _ref.checkboxConfig, id = _ref.id; var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), selectedRecords = _useState2[0], setSelectedRecords = _useState2[1]; var selectedResult = useSelections([], checkboxConfig.defaultSelected || []); var toggle = function toggle(value) { var _selectedResult$selec; var isSelected = (_selectedResult$selec = selectedResult.selected) === null || _selectedResult$selec === void 0 ? void 0 : _selectedResult$selec.includes(value); selectedResult.toggle(value); if (isSelected) { setSelectedRecords(function (o) { return o.filter(function (v) { return v[id] !== value; }); }); } else { setSelectedRecords(function (o) { return [].concat(_toConsumableArray(o), [dataSource.find(function (v) { return v[id] === value; })]); }); } }; return _objectSpread(_objectSpread({}, selectedResult), {}, { toggle: toggle, selectedRecords: selectedRecords }); }; var ChartTable = function ChartTable(props, ref) { /** 防止改变对象 object */ var mergeProps = mergeWith(cloneDeep(defaultConfig), props, customizer); var selectedResult = useSelection(mergeProps); /** 受控, 外部存在时调用外部参数 */ var checkboxConfigRes = _objectSpread(_objectSpread({}, selectedResult), mergeProps.checkboxConfig); var instance = _objectSpread(_objectSpread({}, mergeProps), {}, { checkboxConfig: checkboxConfigRes }); // const instance = useReactive({ ...mergeProps, checkboxConfig: checkboxConfigRes }); // const instance = mergeWith(mergeProps, { checkboxConfig: selectedResult }) // console.log('mergeResult: ', instance) useImperativeHandle(ref, function () { return { getInstance: function getInstance() { return instance; }, getCheckboxRecords: function getCheckboxRecords() { return checkboxConfigRes.selectedRecords; }, getSelection: function getSelection() { return checkboxConfigRes; } }; }); return /*#__PURE__*/React.createElement(Wrapper, instance); }; export default /*#__PURE__*/forwardRef(ChartTable);