| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import { __awaiter, __rest } from "tslib";
- import { jsx as _jsx } from "react/jsx-runtime";
- import { cloneElement, useContext, useEffect, useRef, useState, } from "react";
- import { Form } from "antd";
- import { DageEditableContext } from "./context";
- import { EditableCellValueWrap } from "./style";
- export const DageEditableCell = (_a) => {
- var { title, editable, children, dataIndex, record, Input, handleSave } = _a, restProps = __rest(_a, ["title", "editable", "children", "dataIndex", "record", "Input", "handleSave"]);
- // 防止首次触发校验
- const firstRender = useRef(true);
- const [editing, setEditing] = useState(Boolean(editable && Array.isArray(children) && !children[1]));
- const inputRef = useRef(null);
- const form = useContext(DageEditableContext);
- useEffect(() => {
- var _a;
- if (firstRender.current) {
- firstRender.current = false;
- return;
- }
- if (editing) {
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
- }
- }, [editing]);
- const toggleEdit = () => {
- setEditing(!editing);
- form.setFieldsValue({ [dataIndex]: record[dataIndex] });
- };
- const save = () => __awaiter(void 0, void 0, void 0, function* () {
- const values = yield form.validateFields();
- toggleEdit();
- handleSave(Object.assign(Object.assign({}, record), values));
- });
- let childNode = children;
- if (editable) {
- childNode = editing ? (_jsx(Form.Item, { style: { margin: 0 },
- // @ts-ignore
- name: dataIndex, rules: [{ required: true, message: `请填写${title}` }], children: cloneElement(Input, {
- ref: inputRef,
- onPressEnter: save,
- onBlur: save,
- }) })) : (_jsx(EditableCellValueWrap, { style: { paddingInlineEnd: 24 }, onClick: toggleEdit, children: children }));
- }
- return _jsx("td", Object.assign({}, restProps, { children: childNode }));
- };
|