tdesign-react
Version:
TDesign Component for React
374 lines (366 loc) • 17.5 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2025 tdesign
* @license MIT
*/
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var defineProperty = require('../../_chunks/dep-cc768e34.js');
var slicedToArray = require('../../_chunks/dep-e17e2d31.js');
var toConsumableArray = require('../../_chunks/dep-64a1054a.js');
var React = require('react');
var tdesignIconsReact = require('tdesign-icons-react');
var classNames = require('classnames');
var checkbox_index = require('../../checkbox/index.js');
var dialog_plugin = require('../../dialog/plugin.js');
var table_hooks_useTableHeader = require('./useTableHeader.js');
var hooks_useConfig = require('../../hooks/useConfig.js');
var hooks_useGlobalIcon = require('../../hooks/useGlobalIcon.js');
var hooks_useControlled = require('../../hooks/useControlled.js');
var table_utils = require('../utils.js');
var button_index = require('../../button/index.js');
var intersection = require('../../_chunks/dep-30822ff5.js');
var xorWith = require('../../_chunks/dep-7d3b12a4.js');
require('../../_chunks/dep-6d4d8660.js');
require('../../_chunks/dep-b7d577ac.js');
require('../../_chunks/dep-3d505dbd.js');
require('../../_util/forwardRefWithStatics.js');
require('hoist-non-react-statics');
require('../../common/Check.js');
require('../../_chunks/dep-810b3643.js');
require('../../_util/helper.js');
require('../../_chunks/dep-a70197cb.js');
require('../../_chunks/dep-62193a48.js');
require('../../_chunks/dep-f0379c5f.js');
require('../../_chunks/dep-028b759d.js');
require('../../_chunks/dep-f076775e.js');
require('../../_chunks/dep-ddacd27a.js');
require('../../_chunks/dep-4be7f839.js');
require('../../_chunks/dep-d42c60f4.js');
require('../../_chunks/dep-05b4c661.js');
require('../../_chunks/dep-476c1fcc.js');
require('../../config-provider/ConfigContext.js');
require('../../_chunks/dep-3a869b87.js');
require('../../_chunks/dep-ac58e1cc.js');
require('dayjs');
require('../../_chunks/dep-7da96a57.js');
require('../../_chunks/dep-07b911d8.js');
require('../../_chunks/dep-4b02d669.js');
require('../../_chunks/dep-8a116183.js');
require('../../_chunks/dep-4671b9bd.js');
require('../../_chunks/dep-bed9d73e.js');
require('../../_chunks/dep-780eda7b.js');
require('../../_chunks/dep-47bdc05f.js');
require('../../_chunks/dep-cab13149.js');
require('../../_chunks/dep-a30819a4.js');
require('../../_chunks/dep-6a7ba247.js');
require('../../_chunks/dep-c87d9752.js');
require('../../_chunks/dep-bd956a2d.js');
require('../../_chunks/dep-0cdb3286.js');
require('../../_chunks/dep-865c186c.js');
require('../../_chunks/dep-f4e58639.js');
require('../../_chunks/dep-781a2854.js');
require('../../_chunks/dep-1ef213f8.js');
require('../../_chunks/dep-e2c832a5.js');
require('../../_util/noop.js');
require('../../checkbox/defaultProps.js');
require('../../hooks/useDefaultProps.js');
require('../../_chunks/dep-422caf30.js');
require('../../_chunks/dep-4bc3c0ab.js');
require('../../_util/react-render.js');
require('../../_chunks/dep-a93b6608.js');
require('react-dom');
require('../../dialog/Dialog.js');
require('react-transition-group');
require('../../locale/LocalReceiver.js');
require('../../_chunks/dep-3e2d2665.js');
require('../../config-provider/ConfigProvider.js');
require('../../_chunks/dep-ed886f2a.js');
require('../../_chunks/dep-aeef4e56.js');
require('../../_chunks/dep-0c1ca63f.js');
require('../../_chunks/dep-fd5d57c1.js');
require('../../_chunks/dep-ac2874ce.js');
require('../../_chunks/dep-6cfc06a0.js');
require('../../_chunks/dep-5d9d080b.js');
require('../../common/Portal.js');
require('../../_chunks/dep-3f65dfe7.js');
require('../../hooks/useLayoutEffect.js');
require('../../hooks/useSetState.js');
require('../../dialog/defaultProps.js');
require('../../dialog/DialogCard.js');
require('../../_util/parseTNode.js');
require('../../button/Button.js');
require('../../hooks/useDomRefCallback.js');
require('../../hooks/useRipple.js');
require('../../_chunks/dep-58719304.js');
require('../../hooks/useAnimation.js');
require('../../loading/index.js');
require('../../loading/Loading.js');
require('../../loading/gradient.js');
require('../../_chunks/dep-b8d4cf07.js');
require('../../loading/defaultProps.js');
require('../../loading/plugin.js');
require('../../common/PluginContainer.js');
require('../../button/defaultProps.js');
require('../../dialog/hooks/useDialogEsc.js');
require('../../dialog/hooks/useLockStyle.js');
require('../../_chunks/dep-b57a7208.js');
require('../../dialog/hooks/useDialogPosition.js');
require('../../dialog/hooks/useDialogDrag.js');
require('../../dialog/utils.js');
require('../../hooks/useAttach.js');
require('../../_chunks/dep-f400737d.js');
require('./useMultiHeader.js');
require('./useClassName.js');
require('../Ellipsis.js');
require('../../_util/scroll.js');
require('raf');
require('../../_util/easing.js');
require('../../tooltip/index.js');
require('../../tooltip/Tooltip.js');
require('../../popup/index.js');
require('../../popup/Popup.js');
require('../../_util/ref.js');
require('react-is');
require('../../_util/isFragment.js');
require('../../hooks/useMutationObserver.js');
require('../../hooks/useLatest.js');
require('../../_chunks/dep-d6e82200.js');
require('../../_chunks/dep-94d97586.js');
require('../../_chunks/dep-b12bf98d.js');
require('../../_chunks/dep-1bcdd0a4.js');
require('../../_chunks/dep-c915e145.js');
require('../../hooks/usePopper.js');
require('@popperjs/core');
require('react-fast-compare');
require('../../hooks/useWindowSize.js');
require('../../popup/defaultProps.js');
require('../../popup/hooks/useTrigger.js');
require('../../_util/composeRefs.js');
require('../../_util/listener.js');
require('../../popup/utils/transition.js');
require('../../popup/PopupPlugin.js');
require('../../tooltip/defaultProps.js');
require('../../tooltip/TooltipLite.js');
require('../../hooks/useSwitch.js');
require('../../hooks/usePersistFn.js');
require('../../_chunks/dep-f7574d05.js');
require('../../hooks/useDebounce.js');
require('../../_chunks/dep-fbc19a54.js');
require('../../_chunks/dep-4ba2ac6b.js');
require('../../_chunks/dep-71c315ae.js');
require('../../_chunks/dep-b145cb36.js');
require('../../_chunks/dep-ba1bf618.js');
require('../../_chunks/dep-73c822e3.js');
require('../../_chunks/dep-e6a14ce7.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var CheckboxGroup = checkbox_index.Checkbox.Group;
function getColumnKeys(columns) {
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : /* @__PURE__ */new Set();
for (var i = 0, len = columns.length; i < len; i++) {
var _col$children;
var col = columns[i];
col.colKey && keys.add(col.colKey);
if ((_col$children = col.children) !== null && _col$children !== void 0 && _col$children.length) {
getColumnKeys(col.children, keys);
}
}
return keys;
}
function useColumnController(props, extra) {
var _useConfig = hooks_useConfig["default"](),
classPrefix = _useConfig.classPrefix,
table = _useConfig.table;
var _useGlobalIcon = hooks_useGlobalIcon["default"]({
SettingIcon: tdesignIconsReact.SettingIcon
}),
SettingIcon = _useGlobalIcon.SettingIcon;
var columns = props.columns,
columnController = props.columnController,
_props$displayColumns = props.displayColumns,
displayColumns = _props$displayColumns === void 0 ? [] : _props$displayColumns,
columnControllerVisible = props.columnControllerVisible;
var dialogInstance = React.useRef(null);
var enabledColKeys = function () {
var arr = ((columnController === null || columnController === void 0 ? void 0 : columnController.fields) || toConsumableArray._toConsumableArray(getColumnKeys(columns))).filter(function (v) {
return v;
});
return new Set(arr);
}();
var keys = toConsumableArray._toConsumableArray(getColumnKeys(columns));
var _useControlled = hooks_useControlled["default"](props, "displayColumns", props.onDisplayColumnsChange),
_useControlled2 = slicedToArray._slicedToArray(_useControlled, 2),
tDisplayColumns = _useControlled2[0],
setTDisplayColumns = _useControlled2[1];
var defaultColumnCheckboxKeys = displayColumns || props.defaultDisplayColumns || keys;
var columnCheckboxKeys = React.useRef(defaultColumnCheckboxKeys);
React.useEffect(function () {
var _dialogInstance$curre;
columnCheckboxKeys.current = toConsumableArray._toConsumableArray(displayColumns || props.defaultDisplayColumns || keys);
(_dialogInstance$curre = dialogInstance.current) === null || _dialogInstance$curre === void 0 || _dialogInstance$curre.update({
body: getDialogContent()
});
}, [displayColumns]);
function getCheckboxOptions(columns2) {
var arr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
for (var i = 0, len = columns2.length; i < len; i++) {
var _item$children;
var item = columns2[i];
if (item.colKey) {
arr.push({
label: table_hooks_useTableHeader.renderTitle(item, i),
value: item.colKey,
disabled: !enabledColKeys.has(item.colKey)
});
}
if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) {
getCheckboxOptions(item.children, arr);
}
}
return arr;
}
var handleCheckChange = function handleCheckChange(val, ctx) {
var _props$onColumnChange;
columnCheckboxKeys.current = val;
var params = {
columns: val,
type: ctx.type,
currentColumn: table_utils.getCurrentRowByKey(columns, String(ctx.current)),
e: ctx.e
};
(_props$onColumnChange = props.onColumnChange) === null || _props$onColumnChange === void 0 || _props$onColumnChange.call(props, params);
dialogInstance.current.update({
body: getDialogContent()
});
};
var handleClickAllShowColumns = function handleClickAllShowColumns(checked, ctx) {
if (checked) {
var _props$onColumnChange2;
var checkboxOptions = getCheckboxOptions(columns);
var newData = (checkboxOptions === null || checkboxOptions === void 0 ? void 0 : checkboxOptions.map(function (t) {
return t.value;
})) || [];
columnCheckboxKeys.current = newData;
(_props$onColumnChange2 = props.onColumnChange) === null || _props$onColumnChange2 === void 0 || _props$onColumnChange2.call(props, {
type: "check",
columns: newData,
e: ctx.e
});
} else {
var _props$onColumnChange3;
var disabledColKeys = getCheckboxOptions(columns).filter(function (t) {
return t.disabled;
}).map(function (t) {
return t.value;
});
columnCheckboxKeys.current = disabledColKeys;
(_props$onColumnChange3 = props.onColumnChange) === null || _props$onColumnChange3 === void 0 || _props$onColumnChange3.call(props, {
type: "uncheck",
columns: disabledColKeys,
e: ctx.e
});
}
dialogInstance.current.update({
body: getDialogContent()
});
};
function getDialogContent() {
var checkboxOptions = getCheckboxOptions(columns);
var intersectionChecked = intersection.intersection(columnCheckboxKeys.current, toConsumableArray._toConsumableArray(enabledColKeys));
var widthMode = (columnController === null || columnController === void 0 ? void 0 : columnController.displayType) === "fixed-width" ? "fixed" : "auto";
var checkedLength = intersectionChecked.length;
var isCheckedAll = checkedLength === enabledColKeys.size;
var isIndeterminate = checkedLength > 0 && checkedLength < enabledColKeys.size;
return /* @__PURE__ */React__default["default"].createElement("div", {
className: classNames__default["default"](["".concat(classPrefix, "-table__column-controller"), "".concat(classPrefix, "-table__column-controller--").concat(widthMode)])
}, /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-table__column-controller-body")
}, /* @__PURE__ */React__default["default"].createElement("p", {
className: "".concat(classPrefix, "-table__column-controller-desc")
}, table.columnConfigDescriptionText), /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-table__column-controller-block")
}, /* @__PURE__ */React__default["default"].createElement(checkbox_index.Checkbox, {
indeterminate: isIndeterminate,
checked: isCheckedAll,
onChange: handleClickAllShowColumns
}, table.selectAllText)), /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-table__column-controller-block")
}, /* @__PURE__ */React__default["default"].createElement(CheckboxGroup, _objectSpread(_objectSpread({
options: checkboxOptions
}, (columnController === null || columnController === void 0 ? void 0 : columnController.checkboxProps) || {}), {}, {
value: columnCheckboxKeys.current,
onChange: handleCheckChange
})))));
}
var handleToggleColumnController = function handleToggleColumnController() {
dialogInstance.current = dialog_plugin.DialogPlugin.confirm(_objectSpread({
header: table.columnConfigTitleText,
body: getDialogContent(),
confirmBtn: table.confirmText,
cancelBtn: table.cancelText,
width: 612,
onConfirm: function onConfirm() {
if (columnCheckboxKeys.current.length < displayColumns.length) {
var _extra$onColumnReduce;
var reduceKeys = xorWith.xorWith(displayColumns, columnCheckboxKeys.current);
extra === null || extra === void 0 || (_extra$onColumnReduce = extra.onColumnReduce) === null || _extra$onColumnReduce === void 0 || _extra$onColumnReduce.call(extra, reduceKeys);
}
setTDisplayColumns(toConsumableArray._toConsumableArray(columnCheckboxKeys.current));
if (columnControllerVisible === void 0) {
dialogInstance.current.hide();
} else {
var _props$onColumnContro;
(_props$onColumnContro = props.onColumnControllerVisibleChange) === null || _props$onColumnContro === void 0 || _props$onColumnContro.call(props, false, {
trigger: "cancel"
});
}
},
onClose: function onClose() {
columnCheckboxKeys.current = tDisplayColumns;
if (columnControllerVisible === void 0) {
dialogInstance.current.hide();
} else {
var _props$onColumnContro2;
(_props$onColumnContro2 = props.onColumnControllerVisibleChange) === null || _props$onColumnContro2 === void 0 || _props$onColumnContro2.call(props, false, {
trigger: "confirm"
});
}
}
}, (columnController === null || columnController === void 0 ? void 0 : columnController.dialogProps) || {}));
};
React.useEffect(function () {
if (columnControllerVisible === void 0) return;
if (dialogInstance.current) {
columnControllerVisible ? dialogInstance.current.show() : dialogInstance.current.hide();
} else {
columnControllerVisible && handleToggleColumnController();
}
}, [columnControllerVisible, dialogInstance]);
var renderColumnController = function renderColumnController() {
var _props$columnControll;
var isColumnController = !!(columnController && Object.keys(columnController).length);
var placement = isColumnController ? columnController.placement || "top-right" : "";
if (isColumnController && columnController.hideTriggerButton) return null;
var classes = ["".concat(classPrefix, "-table__column-controller-trigger"), defineProperty._defineProperty({}, "".concat(classPrefix, "-align-").concat(placement), !!placement)];
return /* @__PURE__ */React__default["default"].createElement("div", {
className: classNames__default["default"](classes)
}, /* @__PURE__ */React__default["default"].createElement(button_index.Button, _objectSpread({
theme: "default",
variant: "outline",
onClick: handleToggleColumnController,
content: table.columnConfigButtonText,
icon: /* @__PURE__ */React__default["default"].createElement(SettingIcon, null)
}, (_props$columnControll = props.columnController) === null || _props$columnControll === void 0 ? void 0 : _props$columnControll.buttonProps)));
};
return {
tDisplayColumns: tDisplayColumns,
renderColumnController: renderColumnController
};
}
exports["default"] = useColumnController;
exports.getColumnKeys = getColumnKeys;
//# sourceMappingURL=useColumnController.js.map