@hzab/list-render 1.10.7 → 1.10.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # @hzab/list-render@1.10.8
2
+
3
+ feat: 行内编辑事件通过onEdit抛出 添加保存前自定义处理函数onEditReqVerify,返回Promise用于截断或正常执行
4
+
1
5
  # @hzab/list-render@1.10.7
2
6
 
3
7
  fix: 去除 调试 log
package/README.md CHANGED
@@ -104,6 +104,7 @@ const listDM = useMemo(
104
104
  | editMode | modal/line/line-cell/cell | 否 | modal | 编辑模式: modal 弹窗/抽屉编辑; line 编辑整行,编辑按钮在操作列; line-cell 编辑整行,操作按钮在单元格; cell 编辑指定单元格 |
105
105
  | appendUrlQuery | boolean | 否 | true | 筛选条件改变时是否将参数(对象形式)设置到 url query 中 |
106
106
  | appendUrlQueryKey | string | 否 | URL_PARAM_NAME = "defaultSearchParams" | 自定义设置 url query 对象参数的 key |
107
+ | onEditReqVerify | Function | 否 | - | 编辑态保存时额外的规则校验函数,返回Promise的resolve或reject用于继续执行或停止执行
107
108
 
108
109
  - fetchOnEdit 展示编辑弹框时,是否会调用一次详情接口进行回填(某些场景下,列表接口只返回部分部分字段,只有详情接口会返回全部字段);若为 false,则会使用表格列表接口返回的 row 数据进行回填
109
110
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/list-render",
3
- "version": "1.10.7",
3
+ "version": "1.10.8",
4
4
  "description": "",
5
5
  "main": "src",
6
6
  "scripts": {
@@ -193,8 +193,8 @@ export const useEditTable = (props) => {
193
193
  const { fieldRef } = opt || {};
194
194
  editingFiledRef.current = fieldRef;
195
195
 
196
- const value = await (props.onEdit && props.onEdit(record));
197
- formRender?.setValues(value);
196
+ // const value = await (props.onEdit && props.onEdit(record));
197
+ formRender?.setValues(record);
198
198
  setEditingId(record[idKey]);
199
199
  setEditingKey(key);
200
200
  };
@@ -212,7 +212,7 @@ export const useEditTable = (props) => {
212
212
  try {
213
213
  // 点击保存,数据抛出
214
214
  (await formRender?.validate()) as Item;
215
- onEditSubmit && onEditSubmit(formRender.values);
215
+ onEditSubmit && await onEditSubmit(formRender.values);
216
216
  // 清除编辑目标
217
217
  setEditingId("");
218
218
  setEditingKey("");
@@ -81,6 +81,7 @@ const ListRender = forwardRef(function (props, parentRef) {
81
81
  const useFormData = _useFormData ?? dialogConf.useFormData ?? modalConf?.useFormData;
82
82
  const getListSourceRef = useRef();
83
83
  const [showSearch, setShowSearch] = useState(true);
84
+ const tableRef = useRef({});
84
85
 
85
86
  useImperativeHandle(parentRef, () => ({
86
87
  getList,
@@ -334,8 +335,6 @@ const ListRender = forwardRef(function (props, parentRef) {
334
335
  }
335
336
 
336
337
  function onEdit(row, idx) {
337
- const { editMode = "modal" } = props;
338
- const isEditTable = editMode !== "modal";
339
338
  //编辑的时候提前存id和状态
340
339
  setRowId(row[idKey]);
341
340
  setFormState("edit");
@@ -351,7 +350,7 @@ const ListRender = forwardRef(function (props, parentRef) {
351
350
  .get(getQuery)
352
351
  .then((res) => {
353
352
  // 解决非弹窗编辑模式触发弹窗问题
354
- !isEditTable && handleEdit(res, row[idKey]);
353
+ handleEdit(res, row[idKey]);
355
354
  return res;
356
355
  })
357
356
  .catch((err) => {
@@ -361,12 +360,17 @@ const ListRender = forwardRef(function (props, parentRef) {
361
360
  });
362
361
  } else {
363
362
  // 解决非弹窗编辑模式触发弹窗问题
364
- !isEditTable && handleEdit(row, row[idKey]);
363
+ handleEdit(row, row[idKey]);
365
364
  return Promise.resolve(row);
366
365
  }
367
366
  }
368
367
 
369
368
  function handleEdit(data, id) {
369
+ const { editMode = "modal" } = props;
370
+ const isEditTable = editMode !== "modal";
371
+ if (isEditTable) {
372
+ return tableRef.current.onEditByTable(data, id);
373
+ }
370
374
  let title = data[modalConf?.title?.editKey] || modalConf?.title?.editText || "编辑";
371
375
  formModalRef.current.show(data, title, "edit");
372
376
  }
@@ -381,6 +385,10 @@ const ListRender = forwardRef(function (props, parentRef) {
381
385
  _data = model.updateMap(data);
382
386
  }
383
387
 
388
+ if (props.onEditReqVerify) {
389
+ await props.onEditReqVerify(_data);
390
+ }
391
+
384
392
  if (useFormData) {
385
393
  _data = objToFormData(_data);
386
394
  }
@@ -489,6 +497,7 @@ const ListRender = forwardRef(function (props, parentRef) {
489
497
  {layout === "default" ? (
490
498
  <TableRender
491
499
  idKey={idKey}
500
+ ref={tableRef}
492
501
  schema={schema?.schema}
493
502
  list={list}
494
503
  config={props.tableConf}
@@ -1,4 +1,4 @@
1
- import { useEffect, useState, useMemo, useRef } from "react";
1
+ import { useEffect, useState, useMemo, useRef, forwardRef, useImperativeHandle } from "react";
2
2
  import { Form, Table, Button, Popconfirm, Tooltip, Checkbox, Popover } from "antd";
3
3
  import { QuestionCircleOutlined, FilterOutlined, SettingOutlined, MenuOutlined } from "@ant-design/icons";
4
4
  import { SortableContainer, SortableElement, SortableHandle } from "react-sortable-hoc";
@@ -22,7 +22,7 @@ import "./index.less";
22
22
 
23
23
  const scenario = "table-render";
24
24
 
25
- function TableRender(props) {
25
+ const TableRender = forwardRef(function (props, tableRef) {
26
26
  const { topProps, config = {}, query = {}, i18n, setList } = props;
27
27
  const { tableDel = "删除", tableEdit = "编辑", tableDelTip = "确认删除该项?", tableDetail = "详情" } = i18n || {};
28
28
  const {
@@ -37,6 +37,9 @@ function TableRender(props) {
37
37
  } = config || {};
38
38
  const { editMode = "modal" } = topProps || {};
39
39
  const isEditTable = editMode !== "modal";
40
+ useImperativeHandle(tableRef, () => ({
41
+ onEditByTable,
42
+ }));
40
43
 
41
44
  const [columns, setColumns] = useState([]);
42
45
  const [columnList, setColumnList] = useState([]);
@@ -280,10 +283,10 @@ function TableRender(props) {
280
283
  <Button
281
284
  type="link"
282
285
  onClick={() => {
283
- // 可编辑表格使用对应回调
284
- if (isEditTable) {
285
- return onEditByTable && onEditByTable(record, index);
286
- }
286
+ // // 可编辑表格使用对应回调
287
+ // if (isEditTable) {
288
+ // return onEditByTable && onEditByTable(record, index);
289
+ // }
287
290
  props.onEdit && props.onEdit(record, index);
288
291
  }}
289
292
  >
@@ -438,6 +441,6 @@ function TableRender(props) {
438
441
  />
439
442
  </div>
440
443
  );
441
- }
444
+ });
442
445
 
443
446
  export default TableRender;