@flatbiz/antd 4.2.47 → 4.2.49

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.
Files changed (59) hide show
  1. package/esm/anchor-steps/index.js +2 -1
  2. package/esm/anchor-steps-fba86c87.js +3 -0
  3. package/esm/anchor-steps-fba86c87.js.map +1 -0
  4. package/esm/button-operate/index.css +1 -1
  5. package/esm/button-operate/index.js +4 -1
  6. package/esm/button-operate-9983acab.js +3 -0
  7. package/esm/button-operate-9983acab.js.map +1 -0
  8. package/esm/{cell-render-61a5922f.js → cell-render-6439daca.js} +2 -2
  9. package/esm/{cell-render-61a5922f.js.map → cell-render-6439daca.js.map} +1 -1
  10. package/esm/dialog-alert/index.js +1 -1
  11. package/esm/{dialog-alert-23b4a533.js → dialog-alert-6c8a38d1.js} +2 -2
  12. package/esm/{dialog-alert-23b4a533.js.map → dialog-alert-6c8a38d1.js.map} +1 -1
  13. package/esm/dialog-confirm/index.js +1 -1
  14. package/esm/{dialog-confirm-2656caad.js → dialog-confirm-371e0756.js} +2 -2
  15. package/esm/{dialog-confirm-2656caad.js.map → dialog-confirm-371e0756.js.map} +1 -1
  16. package/esm/dialog-drawer/index.js +1 -1
  17. package/esm/dialog-drawer-3173799f.js +3 -0
  18. package/esm/dialog-drawer-3173799f.js.map +1 -0
  19. package/esm/dialog-modal/index.js +1 -1
  20. package/esm/{dialog-modal-7b705b44.js → dialog-modal-6a753c75.js} +2 -2
  21. package/esm/dialog-modal-6a753c75.js.map +1 -0
  22. package/esm/dropdown-menu-wrapper/index.css +0 -1
  23. package/esm/dropdown-menu-wrapper/index.js +4 -1
  24. package/esm/dropdown-menu-wrapper-a6008e35.js +3 -0
  25. package/esm/dropdown-menu-wrapper-a6008e35.js.map +1 -0
  26. package/esm/editable-table/index.js +1 -1
  27. package/esm/{editable-table-98f1cdf7.js → editable-table-8cb8f895.js} +2 -2
  28. package/esm/{editable-table-98f1cdf7.js.map → editable-table-8cb8f895.js.map} +1 -1
  29. package/esm/index.js +6 -5
  30. package/esm/table-cell-render/index.js +4 -1
  31. package/esm/text-css-ellipsis/index.css +1 -0
  32. package/esm/text-css-ellipsis/index.js +5 -0
  33. package/esm/text-css-ellipsis/index.js.map +1 -0
  34. package/esm/text-css-ellipsis-9135d4c5.js +3 -0
  35. package/esm/text-css-ellipsis-9135d4c5.js.map +1 -0
  36. package/esm/text-overflow-render/index.js +2 -1
  37. package/esm/text-overflow-render-57730b19.js +3 -0
  38. package/esm/text-overflow-render-57730b19.js.map +1 -0
  39. package/esm/tree-selector-wrapper-9cd9da23.js.map +1 -1
  40. package/esm/tree-wrapper/index.js +4 -1
  41. package/esm/tree-wrapper/index.js.map +1 -1
  42. package/esm/upload-wrapper/index.js +1 -1
  43. package/esm/upload-wrapper-4de4e5b3.js +3 -0
  44. package/esm/upload-wrapper-4de4e5b3.js.map +1 -0
  45. package/index.d.ts +111 -82
  46. package/package.json +1 -1
  47. package/esm/anchor-steps-616cd173.js +0 -3
  48. package/esm/anchor-steps-616cd173.js.map +0 -1
  49. package/esm/button-operate-37069516.js +0 -3
  50. package/esm/button-operate-37069516.js.map +0 -1
  51. package/esm/dialog-drawer-a741961f.js +0 -3
  52. package/esm/dialog-drawer-a741961f.js.map +0 -1
  53. package/esm/dialog-modal-7b705b44.js.map +0 -1
  54. package/esm/dropdown-menu-wrapper-3544d20e.js +0 -3
  55. package/esm/dropdown-menu-wrapper-3544d20e.js.map +0 -1
  56. package/esm/text-overflow-render-2ec38800.js +0 -3
  57. package/esm/text-overflow-render-2ec38800.js.map +0 -1
  58. package/esm/upload-wrapper-df8a2277.js +0 -3
  59. package/esm/upload-wrapper-df8a2277.js.map +0 -1
@@ -2,5 +2,5 @@
2
2
  import './../fba-hooks/index.css';
3
3
  import './index.css';
4
4
  /*! @flatjs/forge MIT @flatbiz/antd */
5
- export{U as UploadWrapper}from"../upload-wrapper-df8a2277.js";import"@ant-design/icons/es/icons/PlusOutlined";import"../_rollupPluginBabelHelpers-1f4d8910.js";import"@dimjs/utils/cjs/class-names";import"@dimjs/lang/cjs/is-empty";import"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/utils/cjs/extend";import"@flatbiz/utils";import"antd";import"react";import"react-dom";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"react/jsx-runtime";
5
+ export{U as UploadWrapper}from"../upload-wrapper-4de4e5b3.js";import"@ant-design/icons/es/icons/PlusOutlined";import"../_rollupPluginBabelHelpers-1f4d8910.js";import"@dimjs/utils/cjs/class-names";import"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/utils/cjs/extend";import"antd";import"react";import"react-dom";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"react/jsx-runtime";
6
6
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ /*! @flatjs/forge MIT @flatbiz/antd */
2
+ import r from"@ant-design/icons/es/icons/PlusOutlined";import{_ as e,a as i}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{hooks as t}from"@wove/react/cjs/hooks";import{isPlainObject as a}from"@dimjs/lang/cjs/is-plain-object";import{extend as u}from"@dimjs/utils/cjs/extend";import{message as o,Upload as s,Button as l}from"antd";import{useState as d,useMemo as f,Fragment as m}from"react";import{flushSync as c}from"react-dom";import{fbaHooks as p}from"./fba-hooks/index.js";import{jsx as v,jsxs as g}from"react/jsx-runtime";var h=["onChange","onUploadError","value","triggerText","limitHidden"];var x=function r(l){var m=l.onChange,g=l.onUploadError,x=l.value,C=l.triggerText,T=l.limitHidden,y=e(l,h);var b=d(),O=b[0],R=b[1];var U=u({uid:"uid",name:"name",url:"url"},l.fieldNames);p.useEffectCustom((function(){var r=(O==null?void 0:O.filter((function(r){return r["status"]==="error"})))||[];var e=(x==null?void 0:x.map((function(r){return{uid:r[U.uid],name:r[U.name],url:r[U.url],status:"done",isOriginal:true}})))||[];if(r.length>0){var i=r.map((function(r){return{uid:r.uid,name:r.name,status:"error",isOriginal:true,response:r["response"]}}));e=e.concat(i)}R(e)}),[U.name,U.uid,U.url,x]);var E=function r(e){var i=[];var n=false;e.forEach((function(r){if(r["isOriginal"]){if(r["status"]!=="error"){var e;i.push((e={},e[U.uid]=r.uid,e[U.name]=r.name,e[U.url]=r.url,e))}}else if(a(r.response)){if(r.response.code==="0000"){var t;var u=r.response.data;var o=(l.onRequestResultAdapter==null?void 0:l.onRequestResultAdapter(u))||u;i.push((t={},t[U.uid]=o[U.uid]||r.uid,t[U.name]=o[U.name]||r.name,t[U.url]=o[U.url],t))}else{n=true;r.status="error";r.response=r.response.message||"上传失败"}}}));if(n){R([].concat(e))}m==null?void 0:m(i)};var k=t.useCallbackRef((function(r){var e=r.fileList;if(r.file.status==="done"){var i=[].concat(r.fileList);var n=i.filter((function(r){return r.status==="done"||r["isOriginal"]}));var t=n.length===i.length;if(t){E(i)}c((function(){return R(i)}));return}else if(r.file.status==="removed"){var a=r.file.uid;var u=x!==undefined?[].concat(x):[];var s=u.findIndex((function(r){var e=r[U.uid];return e===a}));if(s>=0){u.splice(s,1)}m==null?void 0:m(u)}else if(r.file.status==="error"){if(g){g()}else{void o.error("上传操作失败...")}}R([].concat(e));l.onUploadChange==null?void 0:l.onUploadChange(r)}));var H=f((function(){if(y.maxCount===undefined||!T)return false;if(y.maxCount===0)return true;if(O&&O.length>=y.maxCount)return true;return false}),[T,y.maxCount,O]);return v(s,i({},y,{onChange:k,fileList:O,className:n("v-upload-wrapper",y.className),children:y.disabled||H?null:v(j,{triggerText:C,listType:y.listType,children:l.children})}))};var j=function e(i){if(i.children)return v(m,{children:i.children});if(i.listType==="picture-card"){return g("div",{children:[v(r,{}),v("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return v(l,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return v(l,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{x as U};
3
+ //# sourceMappingURL=upload-wrapper-4de4e5b3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-wrapper-4de4e5b3.js","sources":["@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useMemo, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n /** 超过maxCount 隐藏上传入口 */\n limitHidden?: boolean;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, triggerText, limitHidden, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n const hiddenEmtry = useMemo(() => {\n if (otherProps.maxCount === undefined || !limitHidden) return false;\n if (otherProps.maxCount === 0) return true;\n if (uploadList && uploadList.length >= otherProps.maxCount) return true;\n return false;\n }, [limitHidden, otherProps.maxCount, uploadList]);\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled || hiddenEmtry ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["UploadWrapper","props","onChange","onUploadError","value","triggerText","limitHidden","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","uploadList","setUploadList","fieldNames","_extend","uid","name","url","fbaHooks","useEffectCustom","errorList","filter","item","newList","map","status","isOriginal","length","newErrorList","response","concat","handleResponse","fileList","newFileList","hasError","forEach","_newFileList$push","push","_isPlainObject","code","_newFileList$push2","respData","data","result","onRequestResultAdapter","message","onUploadChange","_hooks","useCallbackRef","info","file","donwList","allDone","flushSync","targetList","undefined","targetIndex","findIndex","tempUid","splice","error","hiddenEmtry","useMemo","maxCount","_jsx","Upload","_extends","className","_classNames","children","disabled","UploadTrigger","listType","Fragment","_jsxs","_PlusOutlined","style","marginTop","Button","type","ghost"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -49,7 +49,74 @@ export type ButtonWrapperProps = Omit<ButtonProps, "onClick"> & {
49
49
  * @returns
50
50
  */
51
51
  export declare const ButtonWrapper: (props: ButtonWrapperProps) => JSX.Element | null;
52
+ export type ConfigProviderWrapperProps = Omit<ConfigProviderProps, "locale"> & {
53
+ locale?: "en" | "zh-cn";
54
+ };
55
+ export declare const ConfigProviderWrapper: (props: ConfigProviderWrapperProps) => JSX.Element;
56
+ export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContainer" | "open" | "open" | "okButtonProps" | "cancelButtonProps"> & {
57
+ onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
58
+ onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
59
+ content: string | ReactElement | ((form: FormInstance, operate: {
60
+ onClose: TNoopDefine;
61
+ }) => ReactElement);
62
+ configProviderProps?: ConfigProviderWrapperProps;
63
+ okHidden?: boolean;
64
+ cancelHidden?: boolean;
65
+ okButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
66
+ cancelButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
67
+ /**
68
+ * 设置modal body height 为当前窗口height的百分比,例如:30
69
+ * ```
70
+ * 1. 最大值:80
71
+ * 1. 设置bodyStyle.height 后,bodyHeightPercent失效
72
+ * ```
73
+ */
74
+ bodyHeightPercent?: number;
75
+ };
76
+ /**
77
+ * 函数式调用弹框;初始化后,内容无法更新
78
+ *```
79
+ * 1. 基础使用方式
80
+ * dialogModal.open({
81
+ * title: '我是弹框',
82
+ * content: <div>我是内容</div>,
83
+ * });
84
+ * ```
85
+ * ```
86
+ * ***************************
87
+ * 2. 结合内置form使用,可在onOK、onCancel获取form对象
88
+ * dialogModal.open({
89
+ * title: '我是弹框',
90
+ * content: (form, operate) => {
91
+ * return (
92
+ * <Form form={form}>
93
+ * <Form.Item name="useName">
94
+ * <Input placeholder="请输入" />
95
+ * </Form.Item>
96
+ * </Form>
97
+ * );
98
+ * },
99
+ * onOK: (form) => {
100
+ * console.log('content form数据', form.getFieldsValue());
101
+ * return Promise.resolve();
102
+ * },
103
+ * });
104
+ * ```
105
+ */
106
+ export declare const dialogModal: {
107
+ open: (props: DialogModalProps) => {
108
+ close: () => void;
109
+ };
110
+ /**
111
+ * ```
112
+ * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个
113
+ * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close
114
+ * ```
115
+ */
116
+ close: () => void;
117
+ };
52
118
  export interface ButtonOperateItem extends ButtonWrapperProps {
119
+ hidden?: boolean;
53
120
  /** hover 提示文字 */
54
121
  hoverTips?: string | React.ReactElement;
55
122
  /** hover 提示类型 默认:'tooltip' */
@@ -58,11 +125,14 @@ export interface ButtonOperateItem extends ButtonWrapperProps {
58
125
  color?: string;
59
126
  onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;
60
127
  permission?: string;
128
+ /** 是否需要二次弹框确认 */
61
129
  needConfirm?: boolean;
130
+ /** 二次弹框确认文案 */
62
131
  confirmMessage?: string;
63
- hidden?: boolean;
64
132
  popconfirmProps?: Pick<PopconfirmProps, "placement" | "okText" | "cancelText" | "trigger">;
133
+ /** 是否折叠合拢 */
65
134
  isFold?: boolean;
135
+ confirmModalProps?: DialogModalProps;
66
136
  }
67
137
  export interface ButtonOperateProps {
68
138
  /**
@@ -85,6 +155,14 @@ export interface ButtonOperateProps {
85
155
  export declare const ButtonOperateItemContent: (props: Pick<ButtonOperateItem, "hoverTips" | "tipsType"> & {
86
156
  children?: ReactNode;
87
157
  }) => JSX.Element;
158
+ /**
159
+ * 按钮组合处理组件
160
+ * ```
161
+ * @flatbiz/antd@4.2.49
162
+ * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能
163
+ * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题
164
+ * ```
165
+ */
88
166
  export declare const ButtonOperate: FC<ButtonOperateProps>;
89
167
  export type TRequestStatus = "request-init" | "request-progress" | "request-success" | "request-error" | "no-dependencies-params";
90
168
  export type TRequestStatusProps = {
@@ -205,10 +283,6 @@ export type CheckboxWrapperProps = Omit<CheckboxProps, "checked" | "defaultCheck
205
283
  * ```
206
284
  */
207
285
  export declare const CheckboxWrapper: (props: CheckboxWrapperProps) => JSX.Element;
208
- export type ConfigProviderWrapperProps = Omit<ConfigProviderProps, "locale"> & {
209
- locale?: "en" | "zh-cn";
210
- };
211
- export declare const ConfigProviderWrapper: (props: ConfigProviderWrapperProps) => JSX.Element;
212
286
  export interface DrawerStateType {
213
287
  title: string;
214
288
  /**
@@ -403,68 +477,6 @@ export type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, "name"> &
403
477
  * ```
404
478
  */
405
479
  export declare const DateRangePickerWrapperFormItem: (props: DateRangePickerWrapperFormItemProps) => JSX.Element;
406
- export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContainer" | "open" | "open" | "okButtonProps" | "cancelButtonProps"> & {
407
- onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
408
- onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
409
- content: string | ReactElement | ((form: FormInstance, operate: {
410
- onClose: TNoopDefine;
411
- }) => ReactElement);
412
- configProviderProps?: ConfigProviderWrapperProps;
413
- okHidden?: boolean;
414
- cancelHidden?: boolean;
415
- okButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
416
- cancelButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
417
- /**
418
- * 设置modal body height 为当前窗口height的百分比,例如:30
419
- * ```
420
- * 1. 最大值:80
421
- * 1. 设置bodyStyle.height 后,bodyHeightPercent失效
422
- * ```
423
- */
424
- bodyHeightPercent?: number;
425
- };
426
- /**
427
- * 函数式调用弹框;初始化后,内容无法更新
428
- *```
429
- * 1. 基础使用方式
430
- * dialogModal.open({
431
- * title: '我是弹框',
432
- * content: <div>我是内容</div>,
433
- * });
434
- * ```
435
- * ```
436
- * ***************************
437
- * 2. 结合内置form使用,可在onOK、onCancel获取form对象
438
- * dialogModal.open({
439
- * title: '我是弹框',
440
- * content: (form, operate) => {
441
- * return (
442
- * <Form form={form}>
443
- * <Form.Item name="useName">
444
- * <Input placeholder="请输入" />
445
- * </Form.Item>
446
- * </Form>
447
- * );
448
- * },
449
- * onOK: (form) => {
450
- * console.log('content form数据', form.getFieldsValue());
451
- * return Promise.resolve();
452
- * },
453
- * });
454
- * ```
455
- */
456
- export declare const dialogModal: {
457
- open: (props: DialogModalProps) => {
458
- close: () => void;
459
- };
460
- /**
461
- * ```
462
- * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个
463
- * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close
464
- * ```
465
- */
466
- close: () => void;
467
- };
468
480
  export type DialogAlertProps = Omit<DialogModalProps, "onOk" | "cancelHidden" | "cancelButtonProps" | "onCancel" | "onClick"> & {
469
481
  onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
470
482
  };
@@ -478,7 +490,7 @@ export declare const dialogConfirm: {
478
490
  close: () => void;
479
491
  };
480
492
  };
481
- export type DialogDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getContainer" | "open" | "open" | "footer"> & {
493
+ export type DialogDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getContainer" | "open" | "open" | "footer" | "extra"> & {
482
494
  okText?: string | ReactElement;
483
495
  cancelText?: string | ReactElement;
484
496
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
@@ -493,6 +505,7 @@ export type DialogDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getCont
493
505
  operateRender?: (form: FormInstance) => ReactElement;
494
506
  okHidden?: boolean;
495
507
  cancelHidden?: boolean;
508
+ extra?: ReactNode | ((form: FormInstance) => ReactElement);
496
509
  };
497
510
  /**
498
511
  * 函数式调用弹框;初始化后,内容无法更新
@@ -604,12 +617,18 @@ export interface DropdownMenuItem extends ButtonProps {
604
617
  needConfirm?: boolean;
605
618
  confirmMessage?: string;
606
619
  hidden?: boolean;
607
- popconfirmProps?: Pick<PopconfirmProps, "placement" | "okText" | "cancelText" | "trigger">;
620
+ confirmModalProps?: DialogModalProps;
608
621
  }
609
622
  export interface DropdownMenuWrapperProps extends Omit<DropdownProps, "menu"> {
610
623
  menuList: Array<DropdownMenuItem | null>;
611
624
  isFixed?: boolean;
612
625
  }
626
+ /**
627
+ * DropdownMenuWrapper
628
+ * 升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框使用存在问题,所以在 @flatbiz/antd@4.2.49版本修改为使用dialogConfirm组件实现二次弹框确认功能
629
+ * @param props
630
+ * @returns
631
+ */
613
632
  export declare const DropdownMenuWrapper: (props: DropdownMenuWrapperProps) => JSX.Element;
614
633
  export type TDynamicNodeProps = {
615
634
  className?: string;
@@ -1017,6 +1036,8 @@ export type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {
1017
1036
  onRequestResultAdapter?: (respData: TAny) => TPlainObject;
1018
1037
  /** 操作触发显示文本 */
1019
1038
  triggerText?: string;
1039
+ /** 超过maxCount 隐藏上传入口 */
1040
+ limitHidden?: boolean;
1020
1041
  } & Omit<UploadProps, "onChange" | "fileList">;
1021
1042
  /**
1022
1043
  * 文件上传
@@ -2291,29 +2312,37 @@ export type TagWrapperProps = Omit<TagProps, "onClick"> & {
2291
2312
  * 为 Tag 添加 loading 效果
2292
2313
  */
2293
2314
  export declare const TagWrapper: (props: TagWrapperProps) => JSX.Element;
2315
+ export type CssTextEllipsisProps = {
2316
+ text?: string;
2317
+ width: number;
2318
+ };
2319
+ /**
2320
+ * 根据配置宽度显示数据,内容超过宽度截取,并在尾部添加...,被截取的添加Tooltip显示完整数据
2321
+ * @param props
2322
+ * @returns
2323
+ */
2324
+ export declare const TextCssEllipsis: (props: CssTextEllipsisProps) => JSX.Element;
2294
2325
  export type TextOverflowRenderProps = {
2295
- /** 设置 children 属性后,maxLength失效 */
2326
+ /** width 宽度控制超长 */
2327
+ width?: number;
2328
+ /** maxLength 数字控制超长 */
2296
2329
  maxLength?: number;
2297
2330
  /** 完整文本 */
2298
2331
  text?: string;
2299
- /** 配置children属性(maxLength、prefix失效) */
2300
- children?: string | ReactElement;
2301
- /**
2302
- * 文本前缀显示
2303
- * 设置 children 属性后,prefix失效
2304
- */
2332
+ /** 文本前缀显示 */
2305
2333
  prefix?: string | ReactElement;
2306
2334
  /** 数据不存在时,占位符 */
2307
2335
  placeholder?: ReactElement | string;
2308
2336
  onClick?: (e: any) => void;
2309
2337
  };
2310
2338
  /**
2311
- * 文本显示,可通过长度控制溢出效果
2339
+ * 文本显示超出截取,被截取的添加Tooltip显示完整数据
2312
2340
  * ```
2313
- * 显示文本通过两种方式
2314
- * 1. 配置text属性
2315
- * 2. 配置children属性(maxLength、prefix失效)
2316
- * 3. 需要控制长度配置 maxLength
2341
+ * 控制文本显示两种方式
2342
+ * 1. 通过 maxLength 控制超长
2343
+ * 2. 通过 width 控制超长
2344
+ *
2345
+ * 3. maxLength 与 width 互斥,优先级:maxLength > width
2317
2346
  * ```
2318
2347
  * @param props
2319
2348
  * @returns
@@ -2499,7 +2528,7 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
2499
2528
  selectedParentCheckedAllChildrenList?: boolean;
2500
2529
  };
2501
2530
  /**
2502
- * 树选择器包装组件
2531
+ * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现
2503
2532
  * @param props
2504
2533
  * @returns
2505
2534
  * ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.2.47",
3
+ "version": "4.2.49",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import{classNames as t}from"@dimjs/utils/cjs/class-names";import{Gap as e}from"@flatbiz/antd";import{Anchor as r,Steps as n}from"antd";import{useState as i,useRef as a}from"react";import{jsxs as o,jsx as s}from"react/jsx-runtime";function c(t){var e=1;return t.tagName!=="HTML"&&t.tagName!=="BODY"&&t.nodeType===e}function f(t){var e=t;while(e&&c(e)){var r=window.getComputedStyle(e),n=r.overflowY;if(/scroll|auto/i.test(n)){return e}e=e.parentNode}return undefined}var d=function c(d){var u=i(),m=u[0],l=u[1];var p=a();var v=function t(e){if(e){l(e.replace("#vas-",""))}};var h=function t(){return f(p.current)||window};var w=function t(e){if(e){p.current=e}};return o("div",{className:t("v-anchor-steps",d.className),ref:w,children:[s(r,{onChange:v,className:"v-fixed-anchor",affix:false,getContainer:h,children:s(n,{size:"small",direction:"vertical",current:d.steps.findIndex((function(t){return t.id===m})),items:d.steps.map((function(t){return{title:s(r.Link,{href:"#vas-"+t.id,title:t.title}),description:s(e,{height:20}),status:t.id===m?"process":"wait"}}))})}),d.steps.map((function(t){return s("div",{id:"vas-"+t.id,children:t.content},t.id)}))]})};export{d as A};
3
- //# sourceMappingURL=anchor-steps-616cd173.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anchor-steps-616cd173.js","sources":["@flatbiz/antd/src/anchor-steps/anchor-steps.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { Gap } from '@flatbiz/antd';\nimport { Anchor, Steps } from 'antd';\nimport { ReactElement, useRef, useState } from 'react';\nimport './style.less';\n\nfunction isElement(node: Element) {\n const ELEMENT_NODE_TYPE = 1;\n return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === ELEMENT_NODE_TYPE;\n}\n\nfunction getParentScroll(el: HTMLElement) {\n let node = el;\n\n while (node && isElement(node)) {\n const { overflowY } = window.getComputedStyle(node);\n if (/scroll|auto/i.test(overflowY)) {\n return node;\n }\n node = node.parentNode as HTMLElement;\n }\n return undefined;\n}\n\nexport type AnchorStepsProps = {\n steps: {\n id: string;\n title: string;\n content: ReactElement;\n }[];\n className?: string;\n};\n\n/**\n * 锚点步骤组件\n * @param props\n * @returns\n */\nexport const AnchorSteps = (props: AnchorStepsProps) => {\n const [activeKey, setActiveKey] = useState<string>();\n const rootNode = useRef<HTMLDivElement>();\n\n const onChange = (link: string) => {\n if (link) {\n setActiveKey(link.replace('#vas-', ''));\n }\n };\n\n const getContainer = () => {\n return getParentScroll(rootNode.current as HTMLElement) || (window as Window);\n };\n const refHandle = (node) => {\n if (node) {\n rootNode.current = node;\n }\n };\n\n return (\n <div className={classNames('v-anchor-steps', props.className)} ref={refHandle}>\n <Anchor onChange={onChange} className=\"v-fixed-anchor\" affix={false} getContainer={getContainer}>\n <Steps\n size=\"small\"\n direction=\"vertical\"\n current={props.steps.findIndex((item) => item.id === activeKey)}\n items={props.steps.map((item) => {\n return {\n title: <Anchor.Link href={`#vas-${item.id}`} title={item.title} />,\n description: <Gap height={20} />,\n status: item.id === activeKey ? 'process' : 'wait',\n };\n })}\n />\n </Anchor>\n {props.steps.map((item) => {\n return (\n <div id={`vas-${item.id}`} key={item.id}>\n {item.content}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["isElement","node","ELEMENT_NODE_TYPE","tagName","nodeType","getParentScroll","el","_window$getComputedSt","window","getComputedStyle","overflowY","test","parentNode","undefined","AnchorSteps","props","_useState","useState","activeKey","setActiveKey","rootNode","useRef","onChange","link","replace","getContainer","current","refHandle","_jsxs","className","_classNames","ref","children","_jsx","Anchor","affix","Steps","size","direction","steps","findIndex","item","id","items","map","title","Link","href","description","Gap","height","status","content"],"mappings":";sOAMA,SAASA,EAAUC,GACjB,IAAMC,EAAoB,EAC1B,OAAOD,EAAKE,UAAY,QAAUF,EAAKE,UAAY,QAAUF,EAAKG,WAAaF,CACjF,CAEA,SAASG,EAAgBC,GACvB,IAAIL,EAAOK,EAEX,MAAOL,GAAQD,EAAUC,GAAO,CAC9B,IAAAM,EAAsBC,OAAOC,iBAAiBR,GAAtCS,EAASH,EAATG,UACR,GAAI,eAAeC,KAAKD,GAAY,CAClC,OAAOT,CACT,CACAA,EAAOA,EAAKW,UACd,CACA,OAAOC,SACT,KAgBaC,EAAc,SAAdA,EAAeC,GAC1B,IAAAC,EAAkCC,IAA3BC,EAASF,EAAA,GAAEG,EAAYH,EAAA,GAC9B,IAAMI,EAAWC,IAEjB,IAAMC,EAAW,SAAXA,EAAYC,GAChB,GAAIA,EAAM,CACRJ,EAAaI,EAAKC,QAAQ,QAAS,IACrC,GAGF,IAAMC,EAAe,SAAfA,IACJ,OAAOpB,EAAgBe,EAASM,UAA4BlB,QAE9D,IAAMmB,EAAY,SAAZA,EAAa1B,GACjB,GAAIA,EAAM,CACRmB,EAASM,QAAUzB,CACrB,GAGF,OACE2B,EAAA,MAAA,CAAKC,UAAWC,EAAW,iBAAkBf,EAAMc,WAAYE,IAAKJ,EAAUK,SAAA,CAC5EC,EAACC,EAAM,CAACZ,SAAUA,EAAUO,UAAU,iBAAiBM,MAAO,MAAOV,aAAcA,EAAaO,SAC9FC,EAACG,EAAK,CACJC,KAAK,QACLC,UAAU,WACVZ,QAASX,EAAMwB,MAAMC,WAAU,SAACC,GAAI,OAAKA,EAAKC,KAAOxB,KACrDyB,MAAO5B,EAAMwB,MAAMK,KAAI,SAACH,GACtB,MAAO,CACLI,MAAOZ,EAACC,EAAOY,KAAI,CAACC,KAAI,QAAUN,EAAKC,GAAMG,MAAOJ,EAAKI,QACzDG,YAAaf,EAACgB,EAAG,CAACC,OAAQ,KAC1BC,OAAQV,EAAKC,KAAOxB,EAAY,UAAY,eAKnDH,EAAMwB,MAAMK,KAAI,SAACH,GAChB,OACER,EAAA,MAAA,CAAKS,GAAE,OAASD,EAAKC,GAAKV,SACvBS,EAAKW,SADwBX,EAAKC,GAIzC,MAGN"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import r from"@ant-design/icons/es/icons/MoreOutlined";import{a as e,_ as i}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{isUndefined as n}from"@dimjs/lang/cjs/is-undefined";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{isPlainObject as t}from"@dimjs/lang/cjs/is-plain-object";import{isString as s}from"@dimjs/lang/cjs/is-string";import{isPromise as l}from"@dimjs/lang/cjs/is-promise";import{hooks as a}from"@wove/react/cjs/hooks";import{Popover as p,Tooltip as c,Space as f,Divider as u,Popconfirm as d,Button as m}from"antd";import{Fragment as h,useState as v,isValidElement as g,useMemo as T,createElement as j}from"react";import{B as y}from"./button-wrapper-e833e139.js";import{D as k}from"./dropdown-menu-wrapper-3544d20e.js";import{f as C}from"./fba-utils-1e895394.js";import{jsx as P,jsxs as b}from"react/jsx-runtime";var w=["text","onClick","needConfirm","confirmMessage","popconfirmProps","hoverTips"];var x=function r(e){if(e.hoverTips){if(e.tipsType==="popover"){return P(p,{content:e.hoverTips,zIndex:1e3,children:P(h,{children:e.children})})}return P(c,{title:e.hoverTips,zIndex:1e3,children:P(h,{children:e.children})})}return P(h,{children:e.children})};var B=function p(c){var h=v(false),B=h[0],I=h[1];var z=a.useCallbackRef((function(r,e){var i=r.onClick==null?void 0:r.onClick(e);if(i&&l(i)){I(true);return i.finally((function(){I(false)}))}return}));var F=c.operateList.filter((function(r){if(!r)return false;if(g(r)){var e,i;if(((e=r.props)==null?void 0:e["hidden"])===true)return false;var n=(i=r.props)==null?void 0:i["v-permission"];if(s(n)){return C.hasPermission(n)}return true}if(t(r)){if(!C.hasPermission(r["permission"])){return false}return!r["hidden"]}return false}));var M=T((function(){return F.filter((function(r){if(g(r)){return true}return!r["isFold"]}))}),[F]);var N=T((function(){var r=F.filter((function(r){if(g(r)){return false}return r["isFold"]}));var i=[];r.forEach((function(r){var n=e({},r);delete n.isFold;i.push(n)}));return i}),[F]);var O=c.gap===undefined?10:c.gap;var H=!c.split?O:0;return P("div",{className:o("table-operate",c.className),style:c.style,children:b(f,e({split:c.split?P(u,{type:"vertical"}):null,size:H,wrap:n(c.wrap)?true:c.wrap},c.spaceProps,{children:[M.map((function(r,n){if(r&&g(r)){return P(x,{hoverTips:r.hoverTips,tipsType:r.tipsType,children:r},n)}var o=r.text,t=r.onClick,s=r.needConfirm,l=r.confirmMessage,a=r.popconfirmProps,p=r.hoverTips,c=i(r,w);var f=r.type||"link";if(s&&!c.disabled){var u=!!r.color?false:true;return P(x,{hoverTips:p,tipsType:r.tipsType,children:j(d,e({okText:"确定",cancelText:"取消",trigger:["click"],placement:"topRight",arrow:true,destroyTooltipOnHide:true},a,{title:l,onConfirm:z.bind(null,r),key:n,okButtonProps:{loading:B},onOpenChange:function r(e){if(!e){I(false)}},onCancel:function r(e){e==null?void 0:e.stopPropagation()}}),P(y,e({danger:u},c,{onClick:function r(e){e.stopPropagation()},type:f,children:g(o)?P("span",{children:o}):o})))},n)}return P(x,{hoverTips:p,tipsType:r.tipsType,children:P(y,e({loadingPosition:"center"},c,{type:f,onClick:function r(e){e.stopPropagation();return t==null?void 0:t(e)},children:g(o)?P("span",{children:o}):o}))},n)})),N.length>0?P(k,{menuList:N,children:P(m,{type:"link",className:"fold-more-button",onClick:function r(e){e.stopPropagation()},children:c.foldIcon?c.foldIcon:P(r,{})})}):null]}))})};B.defaultProps={split:true};export{x as B,B as a};
3
- //# sourceMappingURL=button-operate-37069516.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-operate-37069516.js","sources":["@flatbiz/antd/src/button-operate/button-operate.tsx"],"sourcesContent":["import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Divider, Popconfirm, PopconfirmProps, Popover, Space, SpaceProps, Tooltip } from 'antd';\nimport {\n CSSProperties,\n FC,\n Fragment,\n isValidElement,\n ReactElement,\n ReactNode,\n useMemo,\n useState,\n} from 'react';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaUtils } from '../fba-utils';\n\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n text?: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n spaceProps?: SpaceProps;\n /** 间距,默认:10;split=true配置下无效(可通过spaceProps设置间距) */\n gap?: number;\n style?: CSSProperties;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & { children?: ReactNode },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <Fragment>{props.children}</Fragment>\n </Tooltip>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return fbaUtils.hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!fbaUtils.hasPermission(item['permission'])) {\n return false;\n }\n return !item['hidden'];\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item['isFold'];\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item['isFold'];\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item)) {\n return (\n <ButtonOperateItemContent hoverTips={item.hoverTips} tipsType={item.tipsType} key={index}>\n {item}\n </ButtonOperateItemContent>\n );\n }\n const { text, onClick, needConfirm, confirmMessage, popconfirmProps, hoverTips, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n const danger = !!item.color ? false : true;\n return (\n <ButtonOperateItemContent hoverTips={hoverTips} tipsType={item.tipsType} key={index}>\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrow={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n onCancel={(event) => {\n event?.stopPropagation();\n }}\n >\n <ButtonWrapper\n danger={danger}\n {...otherProps}\n onClick={(event) => {\n event.stopPropagation();\n }}\n type={type}\n >\n {isValidElement(text) ? <span>{text}</span> : text}\n </ButtonWrapper>\n </Popconfirm>\n </ButtonOperateItemContent>\n );\n }\n return (\n <ButtonOperateItemContent hoverTips={hoverTips} tipsType={item.tipsType} key={index}>\n <ButtonWrapper\n loadingPosition=\"center\"\n {...otherProps}\n type={type}\n onClick={(event) => {\n event.stopPropagation();\n return onClick?.(event);\n }}\n >\n {isValidElement(text) ? <span>{text}</span> : text}\n </ButtonWrapper>\n </ButtonOperateItemContent>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n split: true,\n};\n"],"names":["ButtonOperateItemContent","props","hoverTips","tipsType","_jsx","Popover","content","zIndex","children","Fragment","Tooltip","title","ButtonOperate","_useState","useState","loading","setLoading","onConfirm","_hooks","useCallbackRef","item","event","result","onClick","_isPromise","finally","operateList","filter","isValidElement","_item$props","_item$props2","permission","_isString","fbaUtils","hasPermission","_isPlainObject","viewList","useMemo","foldList","filterList","forEach","target","_extends","isFold","push","gap","undefined","size","split","className","_classNames","style","_jsxs","Space","Divider","type","wrap","_isUndefined","spaceProps","map","index","text","needConfirm","confirmMessage","popconfirmProps","otherProps","_objectWithoutPropertiesLoose","_excluded","disabled","danger","color","_createElement","Popconfirm","okText","cancelText","trigger","placement","arrow","destroyTooltipOnHide","bind","key","okButtonProps","onOpenChange","_open","onCancel","stopPropagation","ButtonWrapper","loadingPosition","length","DropdownMenuWrapper","menuList","Button","foldIcon","_MoreOutlined","defaultProps"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import{isString as e}from"@dimjs/lang/cjs/is-string";import{a as r,_ as o}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{isPromise as n}from"@dimjs/lang/cjs/is-promise";import{hooks as t}from"@wove/react/cjs/hooks";import{Form as i,Space as a,Drawer as l}from"antd";import{useState as d}from"react";import{createRoot as c}from"react-dom/client";import{B as s}from"./button-wrapper-e833e139.js";import{C as m}from"./config-provider-wrapper-dfe8f592.js";import{fbaHooks as u}from"./fba-hooks/index.js";import{b as f}from"./dom-4d04aa64.js";import{jsx as p,jsxs as v}from"react/jsx-runtime";var w=["divElement","elementId","onOk","onCancel","content","configProviderProps","okText","cancelText","okButtonExtraProps","cancelButtonExtraProps","operatePosition","operateRender","width","okHidden","cancelHidden"];var h=function e(c){var f=c.divElement,h=c.elementId,k=c.onOk,C=c.onCancel,x=c.content,j=c.configProviderProps,P=c.okText,g=c.cancelText,_=c.okButtonExtraProps,E=c.cancelButtonExtraProps,b=c.operatePosition,y=b===void 0?"footer":b,B=c.operateRender,I=c.width,H=I===void 0?600:I,R=c.okHidden,T=c.cancelHidden,O=o(c,w);var W=d(true),F=W[0],S=W[1];var q=i.useForm(),z=q[0];var A=t.useCallbackRef((function(){try{delete window[h]}catch(e){}S(false)}));u.useEffectCustom((function(){window[h]=A}),[A]);var D=t.useCallbackRef((function(e){if(C){var r=C(z,e);if(r&&n(r)){return r.then(A)}}return A()}));var G=t.useCallbackRef((function(e){if(k){var r=k(z,e);if(r&&n(r)){return r.then(A)}}return A()}));var J=v(a,{children:[T||E!=null&&E.hidden?null:p(s,r({},E,{onClick:D,children:g||"取消"})),R||_!=null&&_.hidden?null:p(s,r({type:"primary"},_,{onClick:G,children:P||"提交"}))]});var K=function e(){if(B){return B(z)}if(!R||!T){return J}return null};return p(m,r({},j,{children:p(l,r({maskClosable:true,destroyOnClose:true,onClose:A,width:"80%",contentWrapperStyle:{maxWidth:H},extra:y==="header"?K():null,footer:y==="footer"?K():null},O,{open:F,getContainer:f,children:typeof x==="function"?x(z,{onClose:A}):x}))}))};var k={open:function e(o){var n=f(),t=n.divElement,i=n.elementId;window["__dialog_drawer_elementId"]=i;var a=c(t);a.render(p(h,r({},o,{divElement:t,elementId:i})));return{close:function e(){var r,o;(r=(o=window)[i])==null?void 0:r.call(o)}}},close:function r(){try{var o,n;var t=window["__dialog_drawer_elementId"];if(e(t))(o=(n=window)[t])==null?void 0:o.call(n)}catch(e){}}};export{k as d};
3
- //# sourceMappingURL=dialog-drawer-a741961f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-drawer-a741961f.js","sources":["@flatbiz/antd/src/dialog-drawer/dialog-drawer.tsx"],"sourcesContent":["import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from '../_utils/dom';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonWrapperProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonWrapperProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n fbaHooks.useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {cancelHidden || cancelButtonExtraProps?.hidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {okHidden || okButtonExtraProps?.hidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n"],"names":["ModalRender","props","divElement","elementId","onOk","onCancel","content","configProviderProps","okText","cancelText","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","width","okHidden","cancelHidden","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","open","setOpen","_Form$useForm","Form","useForm","form","onClose","_hooks","useCallbackRef","window","error","fbaHooks","useEffectCustom","onCancelHandle","e","response","_isPromise","then","onOkHandle","operateGroup","_jsxs","Space","children","hidden","_jsx","ButtonWrapper","_extends","onClick","type","operateRenderHandle","ConfigProviderWrapper","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","extra","footer","getContainer","dialogDrawer","_bodyAppendDivElement","bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","_isString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-modal-7b705b44.js","sources":["@flatbiz/antd/src/dialog-modal/dialog-modal.tsx"],"sourcesContent":["import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\n\nimport { BodyAppendDivElementProps, dom, TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useSize } from 'ahooks';\nimport { Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n /**\n * 设置modal body height 为当前窗口height的百分比,例如:30\n * ```\n * 1. 最大值:80\n * 1. 设置bodyStyle.height 后,bodyHeightPercent失效\n * ```\n */\n bodyHeightPercent?: number;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n bodyHeightPercent,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n const size = useSize(document.querySelector('html'));\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n fbaHooks.useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n dom.removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n const height = useMemo(() => {\n if (!size?.height || !bodyHeightPercent) {\n return 'auto';\n }\n return size?.height * (bodyHeightPercent / 100);\n }, [bodyHeightPercent, size?.height]);\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n bodyStyle={{\n height,\n maxHeight: size?.height ? size?.height * 0.8 : 'calc(100vh - 200px)',\n ...otherProps.bodyStyle,\n }}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n style={{ color: 'red' }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = dom.bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n"],"names":["ModalRender","props","divElement","elementId","onOk","onCancel","okButtonProps","cancelButtonProps","content","configProviderProps","className","okHidden","cancelHidden","footer","cancelText","okText","bodyHeightPercent","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","open","setOpen","_Form$useForm","Form","useForm","form","size","useSize","document","querySelector","onClose","_hooks","useCallbackRef","window","error","fbaHooks","useEffectCustom","onCancelHandle","e","response","_isPromise","then","onOkHandle","onAfterClose","dom","removeBodyChild","afterClose","operateGroup","_jsx","ButtonWrapper","_extends","onClick","hidden","children","type","footerNew","height","useMemo","ConfigProviderWrapper","Modal","maskClosable","centered","destroyOnClose","bodyStyle","maxHeight","_classNames","getContainer","style","color","dialogModal","_dom$bodyAppendDivEle","bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","_isString"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import{_ as e,a as o}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{isPromise as r}from"@dimjs/lang/cjs/is-promise";import{hooks as n}from"@wove/react/cjs/hooks";import{Popconfirm as i,Dropdown as t}from"antd";import{useState as a,createElement as l,useMemo as s}from"react";import{B as f}from"./button-wrapper-e833e139.js";import{fbaHooks as u}from"./fba-hooks/index.js";import{f as p}from"./fba-utils-1e895394.js";import{jsx as d}from"react/jsx-runtime";function c(e){var o=true;var r=false;while(o){if(e.tagName==="HTML"||e.tagName==="BODY"){o=false;r=false}else{var n=window.getComputedStyle(e),i=n.position;if(i==="sticky"){r=true;o=false}else{if(!e||!e.parentNode){o=false}else{e=e.parentNode}}}}return r}var m=["menuList"],v=["text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps"];var g=function g(y){var k=y.menuList,C=e(y,m);var h=a([]),b=h[0],P=h[1];var x=n.useId(undefined,"DropdownMenuWrapper");var w=a({}),j=w[0],N=w[1];var B=n.useCallbackRef((function(e,o){var r;o.stopPropagation();N((r={},r[e]={open:true},r))}));var S=n.useCallbackRef((function(e,n,i){i.stopPropagation();var t=e.onClick==null?void 0:e.onClick(i);if(t&&r(t)){j[n]={loading:true,open:true};N(o({},j));t.finally((function(){j[n]={loading:false,open:false};N(o({},j))}));return}j[n]={loading:false,open:false};N(o({},j))}));var z=n.useCallbackRef((function(e,o){o.stopPropagation();return e.onClick==null?void 0:e.onClick(o)}));u.useEffectCustom((function(){var r=[];k.filter(Boolean).forEach((function(n,t){var a,s;if(!n)return;var u=n.text,c=n.color,m=n.permission,g=n.needConfirm,y=n.confirmMessage,k=n.hidden,C=n.type,h=n.style,b=n.popconfirmProps,P=e(n,v);if(k)return;if(m&&!p.hasPermission(m))return;var x=c?o({color:c},h):h;var w=C||"link";var M={key:t,label:l(f,o({loadingPosition:"center",size:"small"},P,{type:w,style:x,key:t,onClick:z.bind(null,n)}),u)};var T={key:t,label:l(i,o({okText:"确定",cancelText:"取消",trigger:["click"],destroyTooltipOnHide:true},b,{title:y,onConfirm:S.bind(null,n,t),onCancel:function e(o){o==null?void 0:o.stopPropagation();N({})},overlayClassName:"dmw-popconfirm",arrow:true,key:t,overlayStyle:{zIndex:10},open:((a=j[t])==null?void 0:a.open)||false,okButtonProps:{loading:(s=j[t])==null?void 0:s.loading}}),d(f,o({loadingPosition:"center",size:"small",danger:c?false:P.danger},P,{onClick:B.bind(null,t),type:w,style:x,children:u})))};if(g&&!P.disabled){r.push(T)}else{r.push(M)}}));P(r)}),[k,j]);var M=document.querySelector("."+x);var T=s((function(){if(y.isFixed||M&&c(M)){return undefined}return M}),[y.isFixed,M]);return d("div",{className:x,style:{position:"relative"},children:d(t,o({trigger:(C==null?void 0:C.trigger)||["hover"],getPopupContainer:T?function(){return M}:undefined,arrow:{pointAtCenter:true}},C,{overlayStyle:o({zIndex:9},C.overlayStyle),menu:{items:b},onOpenChange:function e(o){if(!o){N({})}},children:y.children}))})};export{g as D};
3
- //# sourceMappingURL=dropdown-menu-wrapper-3544d20e.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu-wrapper-3544d20e.js","sources":["@flatbiz/antd/src/dropdown-menu-wrapper/utils.ts","@flatbiz/antd/src/dropdown-menu-wrapper/dropdown-menu-wrapper.tsx"],"sourcesContent":["export function parentsHasSticky(node: Element) {\n let condition = true;\n let result = false;\n while (condition) {\n if (node.tagName === 'HTML' || node.tagName === 'BODY') {\n condition = false;\n result = false;\n } else {\n const { position } = window.getComputedStyle(node);\n if (position === 'sticky') {\n result = true;\n condition = false;\n } else {\n if (!node || !node.parentNode) {\n condition = false;\n } else {\n node = node.parentNode as Element;\n }\n }\n }\n }\n return result;\n}\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport './style.less';\nimport { parentsHasSticky } from './utils';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text?: string | ReactElement;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n isFixed?: boolean;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const [menuItems, setMenuItems] = useState<ItemType[]>([]);\n const clsName = hooks.useId(undefined, 'DropdownMenuWrapper');\n\n const [statusMap, setStatusMap] = useState<Record<string, { open?: boolean; loading?: boolean }>>({});\n const onConfirmtTriggerClick = hooks.useCallbackRef((index, event) => {\n event.stopPropagation();\n setStatusMap({ [index]: { open: true } });\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, index: number, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n statusMap[index] = { loading: true, open: true };\n setStatusMap({ ...statusMap });\n result.finally(() => {\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n return;\n }\n statusMap[index] = { loading: false, open: false };\n setStatusMap({ ...statusMap });\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n fbaHooks.useEffectCustom(() => {\n const menuItemsNew: ItemType[] = [];\n menuList.filter(Boolean).forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !fbaUtils.hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n loadingPosition=\"center\"\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item, index)}\n onCancel={(event) => {\n event?.stopPropagation();\n setStatusMap({});\n }}\n overlayClassName=\"dmw-popconfirm\"\n arrow={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={statusMap[index]?.open || false}\n okButtonProps={{\n loading: statusMap[index]?.loading,\n }}\n >\n <ButtonWrapper\n loadingPosition=\"center\"\n size=\"small\"\n danger={color ? false : otherProps.danger}\n {...otherProps}\n onClick={onConfirmtTriggerClick.bind(null, index)}\n type={buttonType}\n style={newStyle}\n >\n {text}\n </ButtonWrapper>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItemsNew.push(confirm);\n } else {\n menuItemsNew.push(nromal);\n }\n });\n setMenuItems(menuItemsNew);\n }, [menuList, statusMap]);\n\n const target = document.querySelector(`.${clsName}`);\n const container = useMemo(() => {\n if (props.isFixed || (target && parentsHasSticky(target))) {\n return undefined;\n }\n return target;\n }, [props.isFixed, target]);\n\n return (\n <div className={clsName} style={{ position: 'relative' }}>\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n getPopupContainer={container ? () => target as HTMLElement : undefined}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setStatusMap({});\n }\n }}\n >\n {props.children}\n </Dropdown>\n </div>\n );\n};\n"],"names":["parentsHasSticky","node","condition","result","tagName","_window$getComputedSt","window","getComputedStyle","position","parentNode","DropdownMenuWrapper","props","menuList","dropdownOtherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","menuItems","setMenuItems","clsName","_hooks","useId","undefined","_useState2","statusMap","setStatusMap","onConfirmtTriggerClick","useCallbackRef","index","event","_setStatusMap","stopPropagation","open","onConfirm","item","onClick","_isPromise","loading","_extends","finally","fbaHooks","useEffectCustom","menuItemsNew","filter","Boolean","forEach","_statusMap$index","_statusMap$index2","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","fbaUtils","hasPermission","newStyle","buttonType","nromal","key","label","_createElement","ButtonWrapper","loadingPosition","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","overlayClassName","arrow","overlayStyle","zIndex","okButtonProps","_jsx","danger","children","disabled","push","target","document","querySelector","container","useMemo","isFixed","className","Dropdown","getPopupContainer","pointAtCenter","menu","items","onOpenChange","_open"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import{isEmpty as r}from"@dimjs/lang/cjs/is-empty";import{_ as i,a as e}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{getStrByteLen as n,cutString as l}from"@flatbiz/utils";import{Tooltip as t}from"antd";import{Fragment as a}from"react";import{B as p}from"./button-wrapper-e833e139.js";import{jsx as o,jsxs as c}from"react/jsx-runtime";var d=["onClick","children","prefix"];var f=function r(n){var l=n.onClick,t=n.children,a=n.prefix,f=i(n,d);if(!!l){return c(p,e({type:"link",onClick:l,style:{padding:0,height:"initial"}},f,{children:[a?o("span",{style:{paddingRight:5},children:a}):null,t]}))}return c("span",e({},f,{children:[a?o("span",{style:{paddingRight:5},children:a}):null,t]}))};var s=function i(e){var p=e.text,c=e.maxLength,d=e.placeholder,s=e.onClick,m=e.children,h=e.prefix;if(!p||r(p)||p==="")return o(a,{children:d});var u=!m?h:null;if(!!c){var x=n(p);if(x<=c*2){return o(f,{onClick:s,prefix:u,children:m||p})}else{var g=l(p,c*2);return o(t,{placement:"topLeft",title:p,children:o(f,{onClick:s,prefix:u,children:m||g})})}}else{return o(f,{onClick:s,prefix:u,children:m||p})}};export{s as T};
3
- //# sourceMappingURL=text-overflow-render-2ec38800.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-overflow-render-2ec38800.js","sources":["@flatbiz/antd/src/text-overflow-render/text-overflow-render.tsx"],"sourcesContent":["import { isEmpty } from '@dimjs/lang';\nimport { cutString, getStrByteLen } from '@flatbiz/utils';\nimport { Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\n\nconst LinkRender = (props: {\n onClick?: (e) => void;\n children: ReactElement | string;\n prefix?: string | ReactElement | null;\n}) => {\n const { onClick, children, prefix, ...otherProps } = props;\n if (!!onClick) {\n return (\n <ButtonWrapper type=\"link\" onClick={onClick} style={{ padding: 0, height: 'initial' }} {...otherProps}>\n {prefix ? <span style={{ paddingRight: 5 }}>{prefix}</span> : null}\n {children}\n </ButtonWrapper>\n );\n }\n return (\n <span {...otherProps}>\n {prefix ? <span style={{ paddingRight: 5 }}>{prefix}</span> : null}\n {children}\n </span>\n );\n};\n\nexport type TextOverflowRenderProps = {\n /** 设置 children 属性后,maxLength失效 */\n maxLength?: number;\n /** 完整文本 */\n text?: string;\n /** 配置children属性(maxLength、prefix失效) */\n children?: string | ReactElement;\n /**\n * 文本前缀显示\n * 设置 children 属性后,prefix失效\n */\n prefix?: string | ReactElement;\n /** 数据不存在时,占位符 */\n placeholder?: ReactElement | string;\n onClick?: (e) => void;\n};\n\n/**\n * 文本显示,可通过长度控制溢出效果\n * ```\n * 显示文本通过两种方式\n * 1. 配置text属性\n * 2. 配置children属性(maxLength、prefix失效)\n * 3. 需要控制长度配置 maxLength\n * ```\n * @param props\n * @returns\n */\nexport const TextOverflowRender = (props: TextOverflowRenderProps) => {\n const { text, maxLength, placeholder, onClick, children, prefix } = props;\n\n if (!text || isEmpty(text) || text === '') return <Fragment>{placeholder}</Fragment>;\n const prefixNew = !children ? prefix : null;\n if (!!maxLength) {\n const strByteLen = getStrByteLen(text);\n if (strByteLen <= maxLength * 2) {\n return (\n <LinkRender onClick={onClick} prefix={prefixNew}>\n {children || text}\n </LinkRender>\n );\n } else {\n const resultTitle = cutString(text, maxLength * 2);\n return (\n <Tooltip placement=\"topLeft\" title={text}>\n <LinkRender onClick={onClick} prefix={prefixNew}>\n {children || resultTitle}\n </LinkRender>\n </Tooltip>\n );\n }\n } else {\n return (\n <LinkRender onClick={onClick} prefix={prefixNew}>\n {children || text}\n </LinkRender>\n );\n }\n};\n"],"names":["LinkRender","props","onClick","children","prefix","otherProps","_objectWithoutPropertiesLoose","_excluded","_jsxs","ButtonWrapper","_extends","type","style","padding","height","_jsx","paddingRight","TextOverflowRender","text","maxLength","placeholder","_isEmpty","Fragment","prefixNew","strByteLen","getStrByteLen","resultTitle","cutString","Tooltip","placement","title"],"mappings":";6XAMA,IAAMA,EAAa,SAAbA,EAAcC,GAKlB,IAAQC,EAA6CD,EAA7CC,QAASC,EAAoCF,EAApCE,SAAUC,EAA0BH,EAA1BG,OAAWC,EAAUC,EAAKL,EAAKM,GAC1D,KAAML,EAAS,CACb,OACEM,EAACC,EAAaC,EAAA,CAACC,KAAK,OAAOT,QAASA,EAASU,MAAO,CAAEC,QAAS,EAAGC,OAAQ,YAAiBT,EAAU,CAAAF,SAAA,CAClGC,EAASW,EAAA,OAAA,CAAMH,MAAO,CAAEI,aAAc,GAAIb,SAAEC,IAAiB,KAC7DD,KAGP,CACA,OACEK,EAAA,OAAAE,EAAA,CAAA,EAAUL,EAAU,CAAAF,SAAA,CACjBC,EAASW,EAAA,OAAA,CAAMH,MAAO,CAAEI,aAAc,GAAIb,SAAEC,IAAiB,KAC7DD,KAGP,MA8Bac,EAAqB,SAArBA,EAAsBhB,GACjC,IAAQiB,EAA4DjB,EAA5DiB,KAAMC,EAAsDlB,EAAtDkB,UAAWC,EAA2CnB,EAA3CmB,YAAalB,EAA8BD,EAA9BC,QAASC,EAAqBF,EAArBE,SAAUC,EAAWH,EAAXG,OAEzD,IAAKc,GAAQG,EAAQH,IAASA,IAAS,GAAI,OAAOH,EAACO,EAAQ,CAAAnB,SAAEiB,IAC7D,IAAMG,GAAapB,EAAWC,EAAS,KACvC,KAAMe,EAAW,CACf,IAAMK,EAAaC,EAAcP,GACjC,GAAIM,GAAcL,EAAY,EAAG,CAC/B,OACEJ,EAACf,EAAU,CAACE,QAASA,EAASE,OAAQmB,EAAUpB,SAC7CA,GAAYe,GAGnB,KAAO,CACL,IAAMQ,EAAcC,EAAUT,EAAMC,EAAY,GAChD,OACEJ,EAACa,EAAO,CAACC,UAAU,UAAUC,MAAOZ,EAAKf,SACvCY,EAACf,EAAU,CAACE,QAASA,EAASE,OAAQmB,EAAUpB,SAC7CA,GAAYuB,KAIrB,CACF,KAAO,CACL,OACEX,EAACf,EAAU,CAACE,QAASA,EAASE,OAAQmB,EAAUpB,SAC7CA,GAAYe,GAGnB,CACF"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import r from"@ant-design/icons/es/icons/PlusOutlined";import{_ as e,a as i}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{isEmpty as t}from"@dimjs/lang/cjs/is-empty";import{hooks as a}from"@wove/react/cjs/hooks";import{isPlainObject as o}from"@dimjs/lang/cjs/is-plain-object";import{extend as s}from"@dimjs/utils/cjs/extend";import{toArray as u}from"@flatbiz/utils";import{message as l,Upload as d,Button as f}from"antd";import{useState as m,Fragment as c}from"react";import{flushSync as p}from"react-dom";import{fbaHooks as v}from"./fba-hooks/index.js";import{jsx as g,jsxs as h}from"react/jsx-runtime";var j=["onChange","onUploadError","value","triggerText"];var x=function r(f){var c=f.onChange,h=f.onUploadError,x=f.value,y=f.triggerText,C=e(f,j);var b=m(),O=b[0],R=b[1];var U=s({uid:"uid",name:"name",url:"url"},f.fieldNames);v.useEffectCustom((function(){var r=(O==null?void 0:O.filter((function(r){return r["status"]==="error"})))||[];var e=(x==null?void 0:x.map((function(r){return{uid:r[U.uid],name:r[U.name],url:r[U.url],status:"done",isOriginal:true}})))||[];if(r.length>0){var i=r.map((function(r){return{uid:r.uid,name:r.name,status:"error",isOriginal:true,response:r["response"]}}));e=e.concat(i)}R(e)}),[U.name,U.uid,U.url,x]);var E=function r(e){var i=[];var n=false;e.forEach((function(r){if(r["isOriginal"]){if(r["status"]!=="error"){var e;i.push((e={},e[U.uid]=r.uid,e[U.name]=r.name,e[U.url]=r.url,e))}}else if(o(r.response)){if(r.response.code==="0000"){var t;var a=r.response.data;var s=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(a))||a;i.push((t={},t[U.uid]=s[U.uid]||r.uid,t[U.name]=s[U.name]||r.name,t[U.url]=s[U.url],t))}else{n=true;r.status="error";r.response=r.response.message||"上传失败"}}}));if(n){R([].concat(e))}c==null?void 0:c(i)};var k=a.useCallbackRef((function(r){var e=r.fileList;if(r.file.status==="done"){var i=[].concat(r.fileList);var n=i.filter((function(r){return r.status==="done"||r["isOriginal"]}));var t=n.length===i.length;if(t){E(i)}p((function(){return R(i)}));return}else if(r.file.status==="removed"){var a=r.file.uid;var o=x!==undefined?[].concat(x):[];var s=o.findIndex((function(r){var e=r[U.uid];return e===a}));if(s>=0){o.splice(s,1)}c==null?void 0:c(o)}else if(r.file.status==="error"){if(h){h()}else{void l.error("上传操作失败...")}}R([].concat(e));f.onUploadChange==null?void 0:f.onUploadChange(r)}));var L=t(C.maxCount)?undefined:C.maxCount;return g(d,i({},C,{onChange:k,fileList:O,className:n("v-upload-wrapper",C.className),children:C.disabled||L===0||L&&u(O).length>=L?null:g(T,{triggerText:y,listType:C.listType,children:f.children})}))};var T=function e(i){if(i.children)return g(c,{children:i.children});if(i.listType==="picture-card"){return h("div",{children:[g(r,{}),g("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return g(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return g(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{x as U};
3
- //# sourceMappingURL=upload-wrapper-df8a2277.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload-wrapper-df8a2277.js","sources":["@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { isEmpty, isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, toArray, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, triggerText, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n const maxCount = isEmpty(otherProps.maxCount) ? undefined : otherProps.maxCount;\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ||\n maxCount === 0 ||\n (maxCount && toArray(uploadList).length >= maxCount) ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["UploadWrapper","props","onChange","onUploadError","value","triggerText","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","uploadList","setUploadList","fieldNames","_extend","uid","name","url","fbaHooks","useEffectCustom","errorList","filter","item","newList","map","status","isOriginal","length","newErrorList","response","concat","handleResponse","fileList","newFileList","hasError","forEach","_newFileList$push","push","_isPlainObject","code","_newFileList$push2","respData","data","result","onRequestResultAdapter","message","onUploadChange","_hooks","useCallbackRef","info","file","donwList","allDone","flushSync","targetList","undefined","targetIndex","findIndex","tempUid","splice","error","maxCount","_isEmpty","_jsx","Upload","_extends","className","_classNames","children","disabled","toArray","UploadTrigger","listType","Fragment","_jsxs","_PlusOutlined","style","marginTop","Button","type","ghost"],"mappings":"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"}