@flatbiz/antd 4.4.4 → 4.4.6

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.
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable */
2
+ import './../fba-hooks/index.css';
2
3
  import './index.css';
3
4
  /*! @flatjs/forge MIT @flatbiz/antd */
4
- import{a as r,_ as e}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as n}from"@wove/react/cjs/hooks";import{fbaHooks as t}from"@flatbiz/antd";import{toArray as o}from"@flatbiz/utils";import{useEventListener as i}from"ahooks";import{Mentions as a}from"antd";import{useRef as l,useState as u,useMemo as s}from"react";import{jsx as v}from"react/jsx-runtime";var c=function r(e){if(!e.value||!e.overallKeyWords.length)return[];var n=Array.from(new Set(e.overallKeyWords||[]));var t=[];n.forEach((function(r){var n;if(!((n=e.value)!=null&&n.includes(r)))return;var o=r.replace(/\$/g,"\\$").replace(/\{/g,"\\{").replace(/\}/g,"\\}").replace(/\]/g,"\\]").replace(/\[/g,"\\[");var i=new RegExp(o,"g");var a=[];var l;while((l=i.exec(e.value))!==null){a.push(l.index)}var u=[];a.forEach((function(e){u.push({start:e+1,end:e+r.length})}));t.push(u)}));return t};var f=function r(e){for(var n=0;n<e.keyWordsPosition.length;n++){var t=e.keyWordsPosition[n].find((function(r){return e.cursorPosition>=r.start&&e.cursorPosition<r.end}));if(t)return t}return undefined};var d=["value","onChange","onClick","onCursorChange","options","prefix"];var g=function g(p){var h=p.value,m=p.onChange,k=p.onClick,y=p.onCursorChange,P=p.options,S=p.prefix,w=r(p,d);var C=n.useId(undefined,"overall-input");var R=l();var W=u(0),b=W[0],x=W[1];var A=l(false);var E=h||"";var j=s((function(){if(P){return c({overallKeyWords:P||[],value:E})}return[]}),[P,E]);var K=function r(){var e;return(e=R.current)==null?void 0:e.textarea};t.useEffectCustom((function(){y==null?void 0:y(b||0)}),[b]);i("keydown",(function(r){var e;var n=(e=K())==null?void 0:e.selectionStart;if(["ArrowLeft","ArrowRight"].includes(r.code)){var t=0;if(r.code==="ArrowLeft"){if(n-1<0)return;t=n-1;x(t);var o=f({keyWordsPosition:j,cursorPosition:t});if(o){var i;(i=K())==null?void 0:i.setSelectionRange(o.start,o.start)}}else if(r.code==="ArrowRight"){if(n+1>E.length)return;t=n+1;x(t);var a=f({keyWordsPosition:j,cursorPosition:t});if(a){var l;(l=K())==null?void 0:l.setSelectionRange(a.end-1,a.end-1)}}}else if(r.code==="Backspace"){var u=f({keyWordsPosition:j,cursorPosition:n-1});if(u){A.current=true;var s=E.substring(0,u.start-1)+E.substring(u.end);setTimeout((function(){var r;(r=K())==null?void 0:r.setSelectionRange(u.start-1,u.start-1)}),50);if(!s){A.current=false}m==null?void 0:m(s)}}}),{target:function r(){return document.querySelector("#"+C)}});i("keyup",(function(r){var e;var n=((e=K())==null?void 0:e.selectionStart)||0;if(["ArrowUp","ArrowDown"].includes(r.code)){x(n);var t=f({keyWordsPosition:j,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=K())==null?void 0:o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=K())==null?void 0:i.setSelectionRange(t.end,t.end)}}}}),{target:function r(){return document.querySelector("#"+C)}});var q=n.useCallbackRef((function(r){var e;if(w.disabled)return;if(A.current){A.current=false;return}var n=((e=K())==null?void 0:e.selectionStart)||0;x(n);m==null?void 0:m(r)}));var z=n.useCallbackRef((function(r){var e;var n=((e=K())==null?void 0:e.selectionStart)||0;x(n);k==null?void 0:k(r.target.value);var t=f({keyWordsPosition:j,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=K())==null?void 0:o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=K())==null?void 0:i.setSelectionRange(t.end,t.end)}}}));var B=s((function(){var r=o(S);return(P==null?void 0:P.map((function(e){var n=e;for(var t=0;t<r.length;t++){var o=r[t];if(n.startsWith(o)){n=n.replace(o,"");break}}return{label:n,value:n}})))||[]}),[P,S]);return v(a,e({notFoundContent:v("div",{children:"暂无数据"}),rows:3},w,{prefix:S,style:e({width:"100%"},w.style),id:C,value:E,ref:R,onChange:q,onClick:z,split:"",validateSearch:function r(e){if(!B.length)return false;var n=B.find((function(r){return e.indexOf(r.value)>=0}));return n&&e.length>n.value.length?false:true},options:B}))};export{g as MentionsWrapper};
5
+ import{a as r,_ as e}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as n}from"@wove/react/cjs/hooks";import{toArray as t}from"@flatbiz/utils";import{useEventListener as o}from"ahooks";import{Mentions as i}from"antd";import{useRef as a,useState as l,useMemo as u}from"react";import{fbaHooks as s}from"../fba-hooks/index.js";import{jsx as v}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var c=function r(e){if(!e.value||!e.overallKeyWords.length)return[];var n=Array.from(new Set(e.overallKeyWords||[]));var t=[];n.forEach((function(r){var n;if(!((n=e.value)!=null&&n.includes(r)))return;var o=r.replace(/\$/g,"\\$").replace(/\{/g,"\\{").replace(/\}/g,"\\}").replace(/\]/g,"\\]").replace(/\[/g,"\\[");var i=new RegExp(o,"g");var a=[];var l;while((l=i.exec(e.value))!==null){a.push(l.index)}var u=[];a.forEach((function(e){u.push({start:e+1,end:e+r.length})}));t.push(u)}));return t};var f=function r(e){for(var n=0;n<e.keyWordsPosition.length;n++){var t=e.keyWordsPosition[n].find((function(r){return e.cursorPosition>=r.start&&e.cursorPosition<r.end}));if(t)return t}return undefined};var d=["value","onChange","onClick","onCursorChange","options","prefix"];var p=function p(g){var h=g.value,m=g.onChange,k=g.onClick,y=g.onCursorChange,P=g.options,S=g.prefix,w=r(g,d);var C=n.useId(undefined,"overall-input");var R=a();var b=l(0),x=b[0],W=b[1];var j=a(false);var A=h||"";var E=u((function(){if(P){return c({overallKeyWords:P||[],value:A})}return[]}),[P,A]);var K=function r(){var e;return(e=R.current)==null?void 0:e.textarea};s.useEffectCustom((function(){y==null?void 0:y(x||0)}),[x]);o("keydown",(function(r){var e;var n=(e=K())==null?void 0:e.selectionStart;if(["ArrowLeft","ArrowRight"].includes(r.code)){var t=0;if(r.code==="ArrowLeft"){if(n-1<0)return;t=n-1;W(t);var o=f({keyWordsPosition:E,cursorPosition:t});if(o){var i;(i=K())==null?void 0:i.setSelectionRange(o.start,o.start)}}else if(r.code==="ArrowRight"){if(n+1>A.length)return;t=n+1;W(t);var a=f({keyWordsPosition:E,cursorPosition:t});if(a){var l;(l=K())==null?void 0:l.setSelectionRange(a.end-1,a.end-1)}}}else if(r.code==="Backspace"){var u=f({keyWordsPosition:E,cursorPosition:n-1});if(u){j.current=true;var s=A.substring(0,u.start-1)+A.substring(u.end);setTimeout((function(){var r;(r=K())==null?void 0:r.setSelectionRange(u.start-1,u.start-1)}),50);if(!s){j.current=false}m==null?void 0:m(s)}}}),{target:function r(){return document.querySelector("#"+C)}});o("keyup",(function(r){var e;var n=((e=K())==null?void 0:e.selectionStart)||0;if(["ArrowUp","ArrowDown"].includes(r.code)){W(n);var t=f({keyWordsPosition:E,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=K())==null?void 0:o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=K())==null?void 0:i.setSelectionRange(t.end,t.end)}}}}),{target:function r(){return document.querySelector("#"+C)}});var q=n.useCallbackRef((function(r){var e;if(w.disabled)return;if(j.current){j.current=false;return}var n=((e=K())==null?void 0:e.selectionStart)||0;W(n);m==null?void 0:m(r)}));var B=n.useCallbackRef((function(r){var e;var n=((e=K())==null?void 0:e.selectionStart)||0;W(n);k==null?void 0:k(r.target.value);var t=f({keyWordsPosition:E,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=K())==null?void 0:o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=K())==null?void 0:i.setSelectionRange(t.end,t.end)}}}));var L=u((function(){var r=t(S);return(P==null?void 0:P.map((function(e){var n=e;for(var t=0;t<r.length;t++){var o=r[t];if(n.startsWith(o)){n=n.replace(o,"");break}}return{label:n,value:n}})))||[]}),[P,S]);return v(i,e({notFoundContent:v("div",{children:"暂无数据"}),rows:3},w,{prefix:S,style:e({width:"100%"},w.style),id:C,value:A,ref:R,onChange:q,onClick:B,split:"",validateSearch:function r(e){if(!L.length)return false;var n=L.find((function(r){return e.indexOf(r.value)>=0}));return n&&e.length>n.value.length?false:true},options:L}))};export{p as MentionsWrapper};
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mentions-wrapper/utils.ts","@flatbiz/antd/src/mentions-wrapper/mentions.tsx"],"sourcesContent":["import { type OverallKeyWordsPosition } from './types';\n\nexport const getOverallKeyWordsPosition = (params: { overallKeyWords: string[]; value?: string }) => {\n if (!params.value || !params.overallKeyWords.length) return [];\n const overallKeyWordsNew = Array.from(new Set(params.overallKeyWords || []));\n const positionItem: OverallKeyWordsPosition[][] = [];\n overallKeyWordsNew.forEach((item) => {\n if (!params.value?.includes(item)) return;\n const newItem = item\n .replace(/\\$/g, '\\\\$')\n .replace(/\\{/g, '\\\\{')\n .replace(/\\}/g, '\\\\}')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\[/g, '\\\\[');\n const regex = new RegExp(newItem, 'g');\n const positions: number[] = [];\n let match;\n // console.log\n while ((match = regex.exec(params.value)) !== null) {\n positions.push(match.index as number);\n }\n const innerList: OverallKeyWordsPosition[] = [];\n positions.forEach((temp) => {\n innerList.push({ start: temp + 1, end: temp + item.length });\n });\n positionItem.push(innerList);\n });\n return positionItem;\n};\n\n/**\n * 判断光标是否处在关键词位置内\n */\nexport const judgmentCursorInKeyWordsPosition = (params: {\n keyWordsPosition: OverallKeyWordsPosition[][];\n cursorPosition: number;\n}) => {\n for (let index = 0; index < params.keyWordsPosition.length; index++) {\n const element = params.keyWordsPosition[index].find((temp) => {\n return params.cursorPosition >= temp.start && params.cursorPosition < temp.end;\n });\n if (element) return element;\n }\n return undefined;\n};\n","import { fbaHooks } from '@flatbiz/antd';\nimport { toArray, type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useEventListener } from 'ahooks';\nimport { Mentions, type MentionProps } from 'antd';\nimport { useMemo, useRef, useState } from 'react';\nimport { getOverallKeyWordsPosition, judgmentCursorInKeyWordsPosition } from './utils';\n\nexport type MentionsWrapperProps = Omit<\n MentionProps,\n | 'value'\n | 'onChange'\n | 'onClick'\n | 'onCursorChange'\n | 'options'\n | 'id'\n | 'split'\n | 'validateSearch'\n | 'ref'\n | 'prefix'\n> & {\n value?: string;\n onChange?: (value?: string) => void;\n /** 设置列表提示关键字,例如:@、$等 */\n prefix?: string | string[];\n onClick?: (value?: string) => void;\n /** 光标移动回调 */\n onCursorChange?: (position: number) => void;\n /**\n * 输入框内整体关键词列表\n * ```\n * 整体关键词交互\n * 1. 光标可整体移动\n * 2. 光标不会存在关键词内部\n * 3. 删除时,整体删除\n * ```\n */\n options?: string[];\n};\n\n/**\n * 基于Antd Mentions进行二次封装,可实现输入内关键字整体控制,包括光标移动、关键词删除等\n * ```\n * 可实现\n * 1. 控制光标输入\n * 2. 可设置关键词,光标不会出现在关键词内部\n * 3. 可整体删除关键词\n *\n * 应用场景例如:\n * 1. 公式输入\n * (【xx金额1】+【xx金额2】)*2\n * <MentionsWrapper prefix=\"$\" options={['【xx金额1】', '【xx金额2】']}/>\n *\n * 2. 短信模板设置\n * 您的订单号为${订单号},订单交易时间为${订单时间}\n * <MentionsWrapper prefix=\"$\" options={['${订单号}', '${订单时间}']}/>\n *\n * demo:https://fex.qa.tcshuke.com/docs/admin/main/other/widget\n * ```\n *\n */\nexport const MentionsWrapper = (props: MentionsWrapperProps) => {\n const { value, onChange, onClick, onCursorChange, options, prefix, ...otherProps } = props;\n const id = hooks.useId(undefined, 'overall-input');\n const inputInnerRef = useRef<TAny>();\n const [cursorPosition, setCursorPosition] = useState(0);\n const invalidOnChangeRef = useRef(false);\n const valueNew = value || '';\n /** 关键词位置 */\n const overallKeyWordsPosition = useMemo(() => {\n if (options) {\n return getOverallKeyWordsPosition({\n overallKeyWords: options || [],\n value: valueNew,\n });\n }\n return [];\n }, [options, valueNew]);\n\n const getInputInstance = () => {\n return inputInnerRef.current?.textarea;\n };\n\n fbaHooks.useEffectCustom(() => {\n onCursorChange?.(cursorPosition || 0);\n }, [cursorPosition]);\n\n useEventListener(\n 'keydown',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart as number;\n if (['ArrowLeft', 'ArrowRight'].includes(ev.code)) {\n let positionValue = 0;\n if (ev.code === 'ArrowLeft') {\n if (selectionStart - 1 < 0) return;\n positionValue = selectionStart - 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.start, targret.start);\n }\n } else if (ev.code === 'ArrowRight') {\n if (selectionStart + 1 > valueNew.length) return;\n positionValue = selectionStart + 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.end - 1, targret.end - 1);\n }\n }\n } else if (ev.code === 'Backspace') {\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart - 1,\n });\n if (targret) {\n invalidOnChangeRef.current = true;\n const result = valueNew.substring(0, targret.start - 1) + valueNew.substring(targret.end);\n setTimeout(() => {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n }, 50);\n if (!result) {\n invalidOnChangeRef.current = false;\n }\n onChange?.(result);\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n useEventListener(\n 'keyup',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n if (['ArrowUp', 'ArrowDown'].includes(ev.code)) {\n setCursorPosition(selectionStart);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n const onInputChange = hooks.useCallbackRef((value) => {\n if (otherProps.disabled) return;\n if (invalidOnChangeRef.current) {\n invalidOnChangeRef.current = false;\n return;\n }\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onChange?.(value);\n });\n\n const onInputClick = hooks.useCallbackRef((event) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onClick?.(event.target.value);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n });\n\n const mentionOptions = useMemo(() => {\n const prefixList = toArray<string>(prefix);\n return (\n options?.map((item) => {\n let opValue = item;\n for (let index = 0; index < prefixList.length; index++) {\n const element = prefixList[index];\n if (opValue.startsWith(element)) {\n opValue = opValue.replace(element, '');\n break;\n }\n }\n return { label: opValue, value: opValue };\n }) || []\n );\n }, [options, prefix]);\n\n return (\n <Mentions\n notFoundContent={<div>暂无数据</div>}\n rows={3}\n {...otherProps}\n prefix={prefix}\n style={{ width: '100%', ...otherProps.style }}\n id={id}\n value={valueNew}\n ref={inputInnerRef}\n onChange={onInputChange}\n onClick={onInputClick}\n split=\"\"\n validateSearch={(text: string) => {\n if (!mentionOptions.length) return false;\n const target = mentionOptions.find((item) => text.indexOf(item.value) >= 0);\n return target && text.length > target.value.length ? false : true;\n }}\n options={mentionOptions}\n />\n );\n};\n"],"names":["getOverallKeyWordsPosition","params","value","overallKeyWords","length","overallKeyWordsNew","Array","from","Set","positionItem","forEach","item","_params$value","includes","newItem","replace","regex","RegExp","positions","match","exec","push","index","innerList","temp","start","end","judgmentCursorInKeyWordsPosition","keyWordsPosition","element","find","cursorPosition","undefined","MentionsWrapper","props","onChange","onClick","onCursorChange","options","prefix","otherProps","_objectWithoutPropertiesLoose","_excluded","id","_hooks","useId","inputInnerRef","useRef","_useState","useState","setCursorPosition","invalidOnChangeRef","valueNew","overallKeyWordsPosition","useMemo","getInputInstance","_inputInnerRef$curren","current","textarea","fbaHooks","useEffectCustom","useEventListener","ev","_getInputInstance","selectionStart","code","positionValue","targret","_getInputInstance2","setSelectionRange","_getInputInstance3","result","substring","setTimeout","_getInputInstance4","target","document","querySelector","_getInputInstance5","_getInputInstance6","_getInputInstance7","onInputChange","useCallbackRef","_getInputInstance8","disabled","onInputClick","event","_getInputInstance9","_getInputInstance10","_getInputInstance11","mentionOptions","prefixList","toArray","map","opValue","startsWith","label","_jsx","Mentions","_extends","notFoundContent","children","rows","style","width","ref","split","validateSearch","text","indexOf"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mentions-wrapper/utils.ts","@flatbiz/antd/src/mentions-wrapper/mentions.tsx"],"sourcesContent":["import { type OverallKeyWordsPosition } from './types';\n\nexport const getOverallKeyWordsPosition = (params: { overallKeyWords: string[]; value?: string }) => {\n if (!params.value || !params.overallKeyWords.length) return [];\n const overallKeyWordsNew = Array.from(new Set(params.overallKeyWords || []));\n const positionItem: OverallKeyWordsPosition[][] = [];\n overallKeyWordsNew.forEach((item) => {\n if (!params.value?.includes(item)) return;\n const newItem = item\n .replace(/\\$/g, '\\\\$')\n .replace(/\\{/g, '\\\\{')\n .replace(/\\}/g, '\\\\}')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\[/g, '\\\\[');\n const regex = new RegExp(newItem, 'g');\n const positions: number[] = [];\n let match;\n // console.log\n while ((match = regex.exec(params.value)) !== null) {\n positions.push(match.index as number);\n }\n const innerList: OverallKeyWordsPosition[] = [];\n positions.forEach((temp) => {\n innerList.push({ start: temp + 1, end: temp + item.length });\n });\n positionItem.push(innerList);\n });\n return positionItem;\n};\n\n/**\n * 判断光标是否处在关键词位置内\n */\nexport const judgmentCursorInKeyWordsPosition = (params: {\n keyWordsPosition: OverallKeyWordsPosition[][];\n cursorPosition: number;\n}) => {\n for (let index = 0; index < params.keyWordsPosition.length; index++) {\n const element = params.keyWordsPosition[index].find((temp) => {\n return params.cursorPosition >= temp.start && params.cursorPosition < temp.end;\n });\n if (element) return element;\n }\n return undefined;\n};\n","import { toArray, type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useEventListener } from 'ahooks';\nimport { Mentions, type MentionProps } from 'antd';\nimport { useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { getOverallKeyWordsPosition, judgmentCursorInKeyWordsPosition } from './utils';\n\nexport type MentionsWrapperProps = Omit<\n MentionProps,\n | 'value'\n | 'onChange'\n | 'onClick'\n | 'onCursorChange'\n | 'options'\n | 'id'\n | 'split'\n | 'validateSearch'\n | 'ref'\n | 'prefix'\n> & {\n value?: string;\n onChange?: (value?: string) => void;\n /** 设置列表提示关键字,例如:@、$等 */\n prefix?: string | string[];\n onClick?: (value?: string) => void;\n /** 光标移动回调 */\n onCursorChange?: (position: number) => void;\n /**\n * 输入框内整体关键词列表\n * ```\n * 整体关键词交互\n * 1. 光标可整体移动\n * 2. 光标不会存在关键词内部\n * 3. 删除时,整体删除\n * ```\n */\n options?: string[];\n};\n\n/**\n * 基于Antd Mentions进行二次封装,可实现输入内关键字整体控制,包括光标移动、关键词删除等\n * ```\n * 可实现\n * 1. 控制光标输入\n * 2. 可设置关键词,光标不会出现在关键词内部\n * 3. 可整体删除关键词\n *\n * 应用场景例如:\n * 1. 公式输入\n * (【xx金额1】+【xx金额2】)*2\n * <MentionsWrapper prefix=\"$\" options={['【xx金额1】', '【xx金额2】']}/>\n *\n * 2. 短信模板设置\n * 您的订单号为${订单号},订单交易时间为${订单时间}\n * <MentionsWrapper prefix=\"$\" options={['${订单号}', '${订单时间}']}/>\n *\n * demo:https://fex.qa.tcshuke.com/docs/admin/main/other/widget\n * ```\n *\n */\nexport const MentionsWrapper = (props: MentionsWrapperProps) => {\n const { value, onChange, onClick, onCursorChange, options, prefix, ...otherProps } = props;\n const id = hooks.useId(undefined, 'overall-input');\n const inputInnerRef = useRef<TAny>();\n const [cursorPosition, setCursorPosition] = useState(0);\n const invalidOnChangeRef = useRef(false);\n const valueNew = value || '';\n /** 关键词位置 */\n const overallKeyWordsPosition = useMemo(() => {\n if (options) {\n return getOverallKeyWordsPosition({\n overallKeyWords: options || [],\n value: valueNew,\n });\n }\n return [];\n }, [options, valueNew]);\n\n const getInputInstance = () => {\n return inputInnerRef.current?.textarea;\n };\n\n fbaHooks.useEffectCustom(() => {\n onCursorChange?.(cursorPosition || 0);\n }, [cursorPosition]);\n\n useEventListener(\n 'keydown',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart as number;\n if (['ArrowLeft', 'ArrowRight'].includes(ev.code)) {\n let positionValue = 0;\n if (ev.code === 'ArrowLeft') {\n if (selectionStart - 1 < 0) return;\n positionValue = selectionStart - 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.start, targret.start);\n }\n } else if (ev.code === 'ArrowRight') {\n if (selectionStart + 1 > valueNew.length) return;\n positionValue = selectionStart + 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.end - 1, targret.end - 1);\n }\n }\n } else if (ev.code === 'Backspace') {\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart - 1,\n });\n if (targret) {\n invalidOnChangeRef.current = true;\n const result = valueNew.substring(0, targret.start - 1) + valueNew.substring(targret.end);\n setTimeout(() => {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n }, 50);\n if (!result) {\n invalidOnChangeRef.current = false;\n }\n onChange?.(result);\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n useEventListener(\n 'keyup',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n if (['ArrowUp', 'ArrowDown'].includes(ev.code)) {\n setCursorPosition(selectionStart);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n const onInputChange = hooks.useCallbackRef((value) => {\n if (otherProps.disabled) return;\n if (invalidOnChangeRef.current) {\n invalidOnChangeRef.current = false;\n return;\n }\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onChange?.(value);\n });\n\n const onInputClick = hooks.useCallbackRef((event) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onClick?.(event.target.value);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n });\n\n const mentionOptions = useMemo(() => {\n const prefixList = toArray<string>(prefix);\n return (\n options?.map((item) => {\n let opValue = item;\n for (let index = 0; index < prefixList.length; index++) {\n const element = prefixList[index];\n if (opValue.startsWith(element)) {\n opValue = opValue.replace(element, '');\n break;\n }\n }\n return { label: opValue, value: opValue };\n }) || []\n );\n }, [options, prefix]);\n\n return (\n <Mentions\n notFoundContent={<div>暂无数据</div>}\n rows={3}\n {...otherProps}\n prefix={prefix}\n style={{ width: '100%', ...otherProps.style }}\n id={id}\n value={valueNew}\n ref={inputInnerRef}\n onChange={onInputChange}\n onClick={onInputClick}\n split=\"\"\n validateSearch={(text: string) => {\n if (!mentionOptions.length) return false;\n const target = mentionOptions.find((item) => text.indexOf(item.value) >= 0);\n return target && text.length > target.value.length ? false : true;\n }}\n options={mentionOptions}\n />\n );\n};\n"],"names":["getOverallKeyWordsPosition","params","value","overallKeyWords","length","overallKeyWordsNew","Array","from","Set","positionItem","forEach","item","_params$value","includes","newItem","replace","regex","RegExp","positions","match","exec","push","index","innerList","temp","start","end","judgmentCursorInKeyWordsPosition","keyWordsPosition","element","find","cursorPosition","undefined","MentionsWrapper","props","onChange","onClick","onCursorChange","options","prefix","otherProps","_objectWithoutPropertiesLoose","_excluded","id","_hooks","useId","inputInnerRef","useRef","_useState","useState","setCursorPosition","invalidOnChangeRef","valueNew","overallKeyWordsPosition","useMemo","getInputInstance","_inputInnerRef$curren","current","textarea","fbaHooks","useEffectCustom","useEventListener","ev","_getInputInstance","selectionStart","code","positionValue","targret","_getInputInstance2","setSelectionRange","_getInputInstance3","result","substring","setTimeout","_getInputInstance4","target","document","querySelector","_getInputInstance5","_getInputInstance6","_getInputInstance7","onInputChange","useCallbackRef","_getInputInstance8","disabled","onInputClick","event","_getInputInstance9","_getInputInstance10","_getInputInstance11","mentionOptions","prefixList","toArray","map","opValue","startsWith","label","_jsx","Mentions","_extends","notFoundContent","children","rows","style","width","ref","split","validateSearch","text","indexOf"],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  import './../fba-hooks/index.css';
3
3
  import './index.css';
4
4
  /*! @flatjs/forge MIT @flatbiz/antd */
5
- import r from"@ant-design/icons/es/icons/PlusOutlined";import{a as e,_ as i}from"../_rollupPluginBabelHelpers-a0769acd.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 o}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as s,toArray as u}from"@flatbiz/utils";import{message as l,Upload as d,Button as f}from"antd";import{useState as m,useMemo as c,Fragment as p}from"react";import{flushSync as v}from"react-dom";import{fbaHooks as g}from"../fba-hooks/index.js";import{jsx as h,jsxs as x}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var j=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit"];var C=function r(f){var p=f.onChange,x=f.onUploadError,C=f.value,b=f.triggerText,y=f.limitHidden,O=f.autoSubmit,R=e(f,j);var U=s(C)?undefined:u(C);var E=m(),k=E[0],D=E[1];var H=o({uid:"uid",name:"name",url:"url"},f.fieldNames);g.useEffectCustom((function(){var r=(k==null?void 0:k.filter((function(r){return r["status"]==="error"})))||[];var e=(U==null?void 0:U.map((function(r){return{uid:r[H.uid],name:r[H.name],url:r[H.url],status:"done",isOriginal:true,responseData:r["responseData"]}})))||[];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)}D(e)}),[H.name,H.uid,H.url,U]);var L=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[H.uid]=r.uid,e[H.name]=r.name,e[H.url]=r.url,e))}}else if(a(r.response)){if(r.response.code==="0000"){var t;var o=r.response.data;var s=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(o))||o;i.push((t={},t[H.uid]=s[H.uid]||r.uid,t[H.name]=s[H.name]||r.name,t[H.url]=s[H.url],t.responseData=o,t))}else{var u=r.response.message||"上传失败";n=true;r.status="error";r.response=r.response.message||"上传失败";if(x){x==null?void 0:x(u)}else{void l.error("上传操作失败...")}}}}));if(n){D([].concat(e))}p==null?void 0:p(i)};var N=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){L(i)}v((function(){return D(i)}));return}else if(r.file.status==="removed"){var a=r.file.uid;var o=U!==undefined?[].concat(U):[];var s=o.findIndex((function(r){var e=r[H.uid];return e===a}));if(s>=0){o.splice(s,1)}p==null?void 0:p(o)}else if(r.file.status==="error"){if(x){x()}else{void l.error("上传操作失败...")}}D([].concat(e));f.onUploadChange==null?void 0:f.onUploadChange(r)}));var q=c((function(){if(R.maxCount===undefined||!y)return false;if(R.maxCount===0)return true;if(k&&k.length>=R.maxCount)return true;return false}),[y,R.maxCount,k]);var w=function r(e,i){if(O===false){var n=[].concat(k||[],i);D(n);f.onChange==null?void 0:f.onChange(n);return false}return true};return h(d,i({beforeUpload:w},R,{onChange:N,fileList:k,className:n("v-upload-wrapper",R.className),children:R.disabled||q?null:h(T,{triggerText:b,listType:R.listType,children:f.children})}))};var T=function e(i){if(i.children)return h(p,{children:i.children});if(i.listType==="picture-card"){return x("div",{children:[h(r,{}),h("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return h(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return h(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{C as UploadWrapper};
5
+ import e from"@ant-design/icons/es/icons/PlusOutlined";import{a as r,_ as i}from"../_rollupPluginBabelHelpers-a0769acd.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 o}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as s,toArray as u}from"@flatbiz/utils";import{message as l,Upload as d,Button as f}from"antd";import{useState as m,useMemo as c,Fragment as p}from"react";import{flushSync as v}from"react-dom";import{fbaHooks as g}from"../fba-hooks/index.js";import{jsx as h,jsxs as x}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var j=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit"];var C=function e(f){var p=f.onChange,x=f.onUploadError,C=f.value,b=f.triggerText,y=f.limitHidden,E=f.autoSubmit,O=r(f,j);var R=s(C)?undefined:u(C);var U=m(),k=U[0],D=U[1];var H=o({uid:"uid",name:"name",url:"url"},f.fieldNames);g.useEffectCustom((function(){var e=(k==null?void 0:k.filter((function(e){return e["status"]==="error"})))||[];var r=[];R==null?void 0:R.forEach((function(e){if(e["lastModified"]){r.push(e);return undefined}r.push({uid:e[H.uid],name:e[H.name],url:e[H.url],status:"done",isOriginal:true,responseData:e["responseData"]})}));if(e.length>0){var i=e.map((function(e){return{uid:e.uid,name:e.name,status:"error",isOriginal:true,response:e["response"]}}));r=r.concat(i)}D(r)}),[H.name,H.uid,H.url,R]);var L=function e(r){var i=[];var n=false;r.forEach((function(e){if(e["isOriginal"]){if(e["status"]!=="error"){var r;i.push((r={},r[H.uid]=e.uid,r[H.name]=e.name,r[H.url]=e.url,r))}}else if(a(e.response)){if(e.response.code==="0000"){var t;var o=e.response.data;var s=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(o))||o;i.push((t={},t[H.uid]=s[H.uid]||e.uid,t[H.name]=s[H.name]||e.name,t[H.url]=s[H.url],t.responseData=o,t))}else{var u=e.response.message||"上传失败";n=true;e.status="error";e.response=e.response.message||"上传失败";if(x){x==null?void 0:x(u)}else{void l.error("上传操作失败...")}}}}));if(n){D([].concat(r))}p==null?void 0:p(i)};var N=t.useCallbackRef((function(e){var r=e.fileList;if(e.file.status==="done"){var i=[].concat(e.fileList);var n=i.filter((function(e){return e.status==="done"||e["isOriginal"]}));var t=n.length===i.length;if(t){L(i)}v((function(){return D(i)}));return}else if(e.file.status==="removed"){var a=e.file.uid;var o=R!==undefined?[].concat(R):[];var s=o.findIndex((function(e){var r=e[H.uid]||e.uid;return r===a}));if(s>=0){o.splice(s,1)}p==null?void 0:p(o)}else if(e.file.status==="error"){if(x){x()}else{void l.error("上传操作失败...")}}D([].concat(r));f.onUploadChange==null?void 0:f.onUploadChange(e)}));var q=c((function(){if(O.maxCount===undefined||!y)return false;if(O.maxCount===0)return true;if(k&&k.length>=O.maxCount)return true;return false}),[y,O.maxCount,k]);var w=function e(r,i){if(E===false){var n=O.maxCount;var t=[].concat(R||[],i);var a=[].concat(k||[],i);if(n!==undefined&&n!==null){if(t.length>n){t=t.slice(t.length-n);a=a.slice(a.length-n)}}D(a);f.onChange==null?void 0:f.onChange(t);return false}return true};return h(d,i({beforeUpload:w},O,{onChange:N,fileList:k,className:n("v-upload-wrapper",O.className),children:O.disabled||q?null:h(T,{triggerText:b,listType:O.listType,children:f.children})}))};var T=function r(i){if(i.children)return h(p,{children:i.children});if(i.listType==="picture-card"){return x("div",{children:[h(e,{}),h("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return h(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return h(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{C as UploadWrapper};
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.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 { isUndefinedOrNull, 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, 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[] | 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 /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: 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, autoSubmit, ...otherProps } = props;\n const valueList = isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value);\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 valueList?.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 responseData: item['responseData'],\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, valueList]);\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 responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\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 = valueList !== undefined ? [...valueList] : [];\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 const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const mergeList = [...(uploadList || []), ...fileList];\n setUploadList(mergeList);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n return (\n <Upload\n beforeUpload={beforeUpload}\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","autoSubmit","otherProps","_objectWithoutPropertiesLoose","_excluded","valueList","isUndefinedOrNull","undefined","toArray","_useState","useState","uploadList","setUploadList","fieldNames","_extend","uid","name","url","fbaHooks","useEffectCustom","errorList","filter","item","newList","map","status","isOriginal","responseData","length","newErrorList","response","concat","handleResponse","fileList","newFileList","hasError","forEach","_newFileList$push","push","_isPlainObject","code","_newFileList$push2","respData","data","result","onRequestResultAdapter","errorMsg","message","error","onUploadChange","_hooks","useCallbackRef","info","file","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","useMemo","maxCount","beforeUpload","_file","mergeList","_jsx","Upload","_extends","className","_classNames","children","disabled","UploadTrigger","listType","Fragment","_jsxs","_PlusOutlined","style","marginTop","Button","type","ghost"],"mappings":"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"}
1
+ {"version":3,"file":"index.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 { isUndefinedOrNull, 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, 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[] | 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 /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: 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, autoSubmit, ...otherProps } = props;\n const valueList = isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value);\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 = [] as TAny[];\n valueList?.forEach((item) => {\n // 判断item 为 File类型\n if (item['lastModified']) {\n newList.push(item);\n return undefined;\n }\n newList.push({\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n responseData: item['responseData'],\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 as TAny[]);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, valueList]);\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 responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\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 = valueList !== undefined ? [...valueList] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid] || item.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 const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const maxCount = otherProps.maxCount;\n let mergeList = [...(valueList || []), ...fileList];\n let uploadListMerge = [...(uploadList || []), ...fileList];\n if (maxCount !== undefined && maxCount !== null) {\n if (mergeList.length > maxCount) {\n mergeList = mergeList.slice(mergeList.length - maxCount);\n uploadListMerge = uploadListMerge.slice(uploadListMerge.length - maxCount);\n }\n }\n setUploadList(uploadListMerge);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n return (\n <Upload\n beforeUpload={beforeUpload}\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","autoSubmit","otherProps","_objectWithoutPropertiesLoose","_excluded","valueList","isUndefinedOrNull","undefined","toArray","_useState","useState","uploadList","setUploadList","fieldNames","_extend","uid","name","url","fbaHooks","useEffectCustom","errorList","filter","item","newList","forEach","push","status","isOriginal","responseData","length","newErrorList","map","response","concat","handleResponse","fileList","newFileList","hasError","_newFileList$push","_isPlainObject","code","_newFileList$push2","respData","data","result","onRequestResultAdapter","errorMsg","message","error","onUploadChange","_hooks","useCallbackRef","info","file","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","useMemo","maxCount","beforeUpload","_file","mergeList","uploadListMerge","slice","_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
@@ -105,6 +105,9 @@ export type AceEditorJsonProps = Omit<IAceEditorProps, "onLoad" | "mode" | "valu
105
105
  * ```
106
106
  */
107
107
  theme?: string;
108
+ /** 底部额外布局 */
109
+ footerExtraRender?: (children: ReactElement) => ReactElement;
110
+ footerStyle?: CSSProperties;
108
111
  };
109
112
  /**
110
113
  * Json编辑器
@@ -139,6 +142,9 @@ export type AceEditorMysqlProps = Omit<IAceEditorProps, "onLoad" | "theme" | "mo
139
142
  * ```
140
143
  */
141
144
  theme?: string;
145
+ /** 底部额外布局 */
146
+ footerExtraRender?: (children: ReactElement) => ReactElement;
147
+ footerStyle?: CSSProperties;
142
148
  };
143
149
  export declare const AceEditorMysql: (props: AceEditorMysqlProps) => import("react/jsx-runtime").JSX.Element;
144
150
  export type AceEditorXmlProps = Omit<IAceEditorProps, "onLoad" | "mode" | "value" | "onChange" | "theme"> & {
@@ -163,6 +169,9 @@ export type AceEditorXmlProps = Omit<IAceEditorProps, "onLoad" | "mode" | "value
163
169
  * ```
164
170
  */
165
171
  theme?: string;
172
+ /** 底部额外布局 */
173
+ footerExtraRender?: (children: ReactElement) => ReactElement;
174
+ footerStyle?: CSSProperties;
166
175
  };
167
176
  /**
168
177
  * xml编辑器
@@ -292,6 +301,57 @@ export type BootstrapProps = {
292
301
  * ```
293
302
  */
294
303
  export declare const Bootstrap: (props: BootstrapProps) => import("react/jsx-runtime").JSX.Element;
304
+ declare const PresetDefaultGrid: {
305
+ xs: number;
306
+ sm: number;
307
+ md: number;
308
+ lg: number;
309
+ xl: number;
310
+ xxl: number;
311
+ };
312
+ export type TBoxBreakpoint = "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
313
+ export interface ICommonReact {
314
+ children?: ReactNode;
315
+ className?: string;
316
+ style?: CSSProperties;
317
+ }
318
+ export type Gutter = number | undefined | Partial<Record<TBoxBreakpoint, number>>;
319
+ export type GutterParams = Gutter | [
320
+ Gutter,
321
+ Gutter
322
+ ];
323
+ export interface BoxRowProps {
324
+ /**
325
+ * 默认的栅格配置
326
+ */
327
+ defaultGrid?: Partial<typeof PresetDefaultGrid>;
328
+ /** 间距 */
329
+ gutter?: GutterParams;
330
+ /** flex 布局的垂直对齐方式 */
331
+ align?: "top" | "middle" | "bottom" | "stretch";
332
+ /** flex 布局的水平排列方式 */
333
+ justify?: "start" | "end" | "center" | "space-around" | "space-between" | "space-evenly";
334
+ }
335
+ export type BoxColProps = {
336
+ /** 栅格占位格数,固定分数,为0相当于隐藏 */
337
+ span?: number;
338
+ /** 屏幕 < 576px */
339
+ xs?: number;
340
+ /** 屏幕 ≥ 576px */
341
+ sm?: number;
342
+ /** 屏幕 ≥ 768px */
343
+ md?: number;
344
+ /** 屏幕 ≥ 992px */
345
+ lg?: number;
346
+ /** 屏幕 ≥ 1200px */
347
+ xl?: number;
348
+ /** 屏幕 ≥ 1600px */
349
+ xxl?: number;
350
+ };
351
+ export declare const BoxGrid: {
352
+ Row: import("react").FC<BoxRowProps & ICommonReact>;
353
+ Col: import("react").FC<BoxColProps & ICommonReact>;
354
+ };
295
355
  export type ButtonWrapperProps = Omit<ButtonProps, "onClick"> & {
296
356
  onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;
297
357
  debounceDuration?: number;
@@ -334,16 +394,15 @@ export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
334
394
  titleExtra?: ReactElement;
335
395
  };
336
396
  /**
337
- *
338
- * @deprecated 已过期
397
+ * 居中弹框
339
398
  * ```
340
- * 1. 为什么过期
399
+ * 1. 可嵌套使用
400
+ * 2. 为什么不推荐使用
341
401
  * dialogModal.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
342
402
  * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)
343
- * 2. 请使用
344
- * const { appDialogModal } = FbaApp.useDialogModal();
345
- * appDialogModal.open({})
346
- *
403
+ * 3. 需要修改默认主题风格的场景,请使用
404
+ * const { appDialogModal } = FbaApp.useDialogModal();
405
+ * appDialogModal.open({})
347
406
  * ```
348
407
  */
349
408
  export declare const dialogModal: {
@@ -868,14 +927,15 @@ export type DialogAlertProps = Omit<DialogModalProps, "onOk" | "cancelHidden" |
868
927
  onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
869
928
  };
870
929
  /**
871
- * @deprecated 已过期
930
+ * 确认弹框
872
931
  * ```
873
- * 1. 为什么过期
874
- * dialogAlert.open 打开的内容无法配兼自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
932
+ * 1. 可嵌套使用
933
+ * 2. 为什么不推荐使用
934
+ * dialogAlert.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
875
935
  * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)
876
- * 2. 请使用
877
- * const { appDialogModal } = FbaApp.useDialogModal();
878
- * appDialogModal.open({})
936
+ * 3. 需要修改默认主题风格的场景,请使用
937
+ * const { appDialogAlert } = FbaApp.useDialogAlert();
938
+ * appDialogAlert.open({})
879
939
  * ```
880
940
  */
881
941
  export declare const dialogAlert: {
@@ -884,14 +944,15 @@ export declare const dialogAlert: {
884
944
  };
885
945
  };
886
946
  /**
887
- * @deprecated 已过期
947
+ * 确认弹框
888
948
  * ```
889
- * 1. 为什么过期
890
- * dialogConfirm.open 打开的内容无法配兼自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
949
+ * 1. 可嵌套使用
950
+ * 2. 为什么不推荐使用
951
+ * dialogConfirm.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
891
952
  * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)
892
- * 2. 请使用
893
- * const { appDialogModal } = FbaApp.useDialogModal();
894
- * appDialogModal.open({})
953
+ * 3. 需要修改默认主题风格的场景,请使用
954
+ * const { appDialogConfirm } = FbaApp.useDialogConfirm();
955
+ * appDialogConfirm.open({})
895
956
  * ```
896
957
  */
897
958
  export declare const dialogConfirm: {
@@ -917,16 +978,15 @@ export type DialogDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getCont
917
978
  extra?: ReactNode | ((form: FormInstance) => ReactElement);
918
979
  };
919
980
  /**
920
- *
921
- * @deprecated 已过期
981
+ * 抽屉弹框
922
982
  * ```
923
- * 1. 为什么过期
924
- * dialogConfirm.open 打开的内容无法配兼自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
983
+ * 1. 可嵌套使用
984
+ * 2. 为什么不推荐使用
985
+ * dialogDrawer.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
925
986
  * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)
926
- * 2. 请使用
927
- * const { appDialogModal } = FbaApp.useDialogModal();
928
- * appDialogModal.open({})
929
- *
987
+ * 3. 需要修改默认主题风格的场景,请使用
988
+ * const { appDialogDrawer } = FbaApp.useDialogDrawer();
989
+ * appDialogDrawer.open({})
930
990
  * ```
931
991
  */
932
992
  export declare const dialogDrawer: {
@@ -969,16 +1029,15 @@ export type DialogLoadingProps = {
969
1029
  mask?: boolean;
970
1030
  };
971
1031
  /**
972
- *
973
- * @deprecated 已过期
1032
+ * Loading弹框
974
1033
  * ```
975
- * 1. 为什么过期
976
- * dialogLoading.open 打开的内容无法配兼自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
1034
+ * 1. 可嵌套使用
1035
+ * 2. 为什么不推荐使用
1036
+ * dialogLoading.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化
977
1037
  * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)
978
- * 2. 请使用
979
- * const { appDialogModal } = FbaApp.useDialogModal();
980
- * appDialogModal.open({})
981
- *
1038
+ * 3. 需要修改默认主题风格的场景,请使用
1039
+ * const { appDialogLoading } = FbaApp.useDialogLoading();
1040
+ * appDialogLoading.open({})
982
1041
  * ```
983
1042
  */
984
1043
  export declare const dialogLoading: {
@@ -2009,6 +2068,15 @@ export type EasyTableTableProps<T> = Omit<TableProps<TAny>, "dataSource" | "load
2009
2068
  /** table Form 外层 SimpleLayout className */
2010
2069
  tableWrapperClassName?: string;
2011
2070
  columns: TEasyTableTableColumn<T>[];
2071
+ /**
2072
+ * 数据加载与表格初始化渲染 是否同步
2073
+ * ```
2074
+ * 1. true:获取数据后再初始化渲染表格(可用于实现表格中defaultXxxx相关功能的使用)
2075
+ * ```
2076
+ */
2077
+ isSync?: boolean;
2078
+ /** 空效果显示尺寸,默认值:small */
2079
+ emptyShowSize?: "small" | "large";
2012
2080
  };
2013
2081
  /**
2014
2082
  * 对 查询条件+表格数据 进行深度封装,内置数据交互处理
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.4.4",
3
+ "version": "4.4.6",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",