antd-table-editable-af
Version:
A editable table based on antd table
141 lines (139 loc) • 5.14 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/hooks/useCellEditable.tsx
var useCellEditable_exports = {};
__export(useCellEditable_exports, {
default: () => useCellEditable
});
module.exports = __toCommonJS(useCellEditable_exports);
var import_antd = require("antd");
var import_config_provider = require("antd/lib/config-provider");
var import_clsx = __toESM(require("clsx"));
var import_omit = __toESM(require("lodash/omit"));
var import_ref = require("rc-util/lib/ref");
var import_react = require("react");
var import_useClickAway = __toESM(require("./useClickAway"));
function useCellEditable({
value,
index,
children,
field,
record,
fieldProps: propsFieldProps,
formItemProps: propsFormItemProps,
editorType,
cellComponent: CellComponent,
onClick,
onSave,
...restProps
}) {
const [selected, setSelected] = (0, import_react.useState)(false);
const [mode, setMode] = (0, import_react.useState)("read");
const cellRef = (0, import_react.useRef)(null);
const [form] = import_antd.Form.useForm();
const { getPrefixCls } = (0, import_react.useContext)(import_config_provider.ConfigContext);
const prefixCls = getPrefixCls("table");
(0, import_useClickAway.default)(cellRef, () => {
setSelected(false);
setMode("read");
});
const fieldProps = typeof propsFieldProps === "function" ? propsFieldProps(value, record, index) : propsFieldProps;
const formItemProps = typeof propsFormItemProps === "function" ? propsFormItemProps(value, record, index) : propsFormItemProps;
const cellProps = {
...(0, import_omit.default)(restProps, ["record", "editable"]),
onClick: (e) => {
setSelected(true);
onClick == null ? void 0 : onClick(e);
}
};
const render = (content, params) => {
var _a;
const node = /* @__PURE__ */ React.createElement(
import_antd.Form,
{
form,
component: false,
preserve: false,
...params == null ? void 0 : params.formProps,
onFinish: (values) => {
var _a2, _b;
(_b = (_a2 = params == null ? void 0 : params.formProps) == null ? void 0 : _a2.onFinish) == null ? void 0 : _b.call(_a2, values);
},
onValuesChange: (changedValues, values) => {
var _a2, _b;
(_b = (_a2 = params == null ? void 0 : params.formProps) == null ? void 0 : _a2.onValuesChange) == null ? void 0 : _b.call(_a2, changedValues, values);
onSave({ field, value: Object.values(values)[0], index, editorType });
},
onFinishFailed: (errorInfo) => {
var _a2, _b;
(_b = (_a2 = params == null ? void 0 : params.formProps) == null ? void 0 : _a2.onFinishFailed) == null ? void 0 : _b.call(_a2, errorInfo);
}
},
/* @__PURE__ */ React.createElement(
import_antd.Form.Item,
{
initialValue: value,
noStyle: true,
...params == null ? void 0 : params.formItemProps,
...formItemProps,
name: `${index}-name`
},
content
)
);
return /* @__PURE__ */ React.createElement(
CellComponent,
{
...params == null ? void 0 : params.cellProps,
ref: (0, import_ref.composeRef)(cellRef, (_a = params == null ? void 0 : params.cellProps) == null ? void 0 : _a.ref),
className: (0, import_clsx.default)(
{
[`${prefixCls}-cell-selected`]: selected
},
cellProps == null ? void 0 : cellProps.className,
restProps.className
),
style: {
...cellProps == null ? void 0 : cellProps.style,
...restProps.style
}
},
node
);
};
return {
mode,
selected,
setMode,
setSelected,
render,
form,
fieldProps,
cellProps
};
}