@flatbiz/antd 4.2.22 → 4.2.24

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.
@@ -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{Result as r,Button as n,Spin as t}from"antd";import{forwardRef as e,useState as i,useImperativeHandle as o,Fragment as a}from"react";import{fbaHooks as c}from"../fba-hooks/index.js";import{jsx as u}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-1f4d8910.js";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";var s=e((function(e,s){var l=e.serviceConfig,f=e.isAsync,h=e.children,m=e.errorRender;var d=i("loading"),v=d[0],p=d[1];var y=i(),g=y[0],j=y[1];var b=i(false),x=b[0],P=b[1];var C=function r(){return new Promise((function(r,n){var t;var e=function(){try{return r()}catch(r){return n(r)}};var i=function(r){try{p("error");return e()}catch(r){return n(r)}};try{p("loading");return Promise.resolve(l.onRequest(l.params)).then((function(r){try{t=r;p("success");j(t);return e()}catch(r){return i(r)}}),i)}catch(r){i()}}))};c.useEffectCustomAsync(C,[]);var H=e.loadingHeight===undefined?100:e.loadingHeight;o(s,(function(){return{onRefresh:function r(){return new Promise((function(r,n){var t=function(r){return function(t){try{P(false);return r&&r.call(this,t)}catch(r){return n(r)}}.bind(this)}.bind(this);var e;var i=function(){try{return r()}catch(r){return n(r)}};var o=function(r){try{p("error");return t(i)()}catch(r){return t(n)(r)}};try{P(true);return Promise.resolve(l.onRequest(l.params)).then((function(r){try{e=r;j(e);return t(i)()}catch(r){return o(r)}}),o)}catch(r){o()}}))}}}));if(v==="error"){if(m){return m(g)}return u(r,{status:"error",className:"local-loading-error",subTitle:(g==null?void 0:g.message)||"数据处理异常",style:{minHeight:H},extra:[u(n,{type:"primary",onClick:C,children:"重新获取"},"console")]})}var R=v==="loading";if(R&&!f){return u("div",{style:{height:H,display:"flex",justifyContent:"center"},children:u(t,{spinning:true,children:u(a,{})})})}return u(t,{spinning:x||R,children:h(g)})}));export{s as LocalLoading};
5
+ import{isDeepEqual as r}from"@dimjs/lang/cjs/is-deep-equal";import{a as n}from"../_rollupPluginBabelHelpers-1f4d8910.js";import{toArray as e}from"@flatbiz/utils";import{Result as t,Button as i,Spin as a}from"antd";import{forwardRef as o,useState as u,useMemo as s,useImperativeHandle as c,Fragment as f}from"react";import{fbaHooks as l}from"../fba-hooks/index.js";import{jsx as m}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";var v=o((function(o,v){var d=o.serviceConfig,h=o.isAsync,p=o.children,y=o.errorRender;var g=u("loading"),j=g[0],P=g[1];var b=u(),x=b[0],C=b[1];var H=u(false),R=H[0],k=H[1];var q=o.loadingHeight===undefined?100:o.loadingHeight;var w=l.usePrevious(d.params);var E=s((function(){var r;if(!d.params||e(d.invalidParamKey).length===0){return d.params}var t=n({},d.params);(r=d.invalidParamKey)==null?void 0:r.forEach((function(r){t[r]=undefined}));return t}),[d]);var A=function r(){return new Promise((function(r,n){var e;var t=function(){try{return r()}catch(r){return n(r)}};var i=function(r){try{P("error");return t()}catch(r){return n(r)}};try{P("loading");return Promise.resolve(d.onRequest(E)).then((function(r){try{e=r;P("success");C(e);return t()}catch(r){return i(r)}}),i)}catch(r){i()}}))};l.useEffectCustomAsync(A,[]);l.useEffectCustom((function(){if(w){if(!r(d.params,w)){void K()}}}),[w,d.params]);var K=function r(){return new Promise((function(r,n){var e=function(r){return function(e){try{k(false);return r&&r.call(this,e)}catch(r){return n(r)}}.bind(this)}.bind(this);var t;var i=function(){try{return r()}catch(r){return n(r)}};var a=function(r){try{P("error");return e(i)()}catch(r){return e(n)(r)}};try{k(true);return Promise.resolve(d.onRequest(E)).then((function(r){try{t=r;C(t);return e(i)()}catch(r){return a(r)}}),a)}catch(r){a()}}))};c(v,(function(){return{onRefresh:K}}));if(j==="error"){if(y){return y(x)}return m(t,{status:"error",className:"local-loading-error",subTitle:(x==null?void 0:x.message)||"数据处理异常",style:{minHeight:q},extra:[m(i,{type:"primary",onClick:A,children:"重新获取"},"console")]})}var z=j==="loading";if(z&&!h){return m("div",{style:{height:q,display:"flex",justifyContent:"center"},children:m(a,{spinning:true,children:m(f,{})})})}return m(a,{spinning:R||z,children:p(x)})}));export{v as LocalLoading};
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/local-loading.tsx"],"sourcesContent":["import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number;\n /** 当值变更时,重新发起调用服务接口, 初始化不起作用 */\n // serviceRefreshKey?: number;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: () => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 正常接口数据渲染\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'loading'>('loading');\n const [respData, setRespData] = useState<TAny>();\n const [refreshLoading, setRefreshLoading] = useState(false);\n\n const onRequest = async () => {\n try {\n setStatus('loading');\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setStatus('success');\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n }\n };\n\n fbaHooks.useEffectCustomAsync(onRequest, []);\n\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n\n useImperativeHandle(ref, () => {\n return {\n onRefresh: async () => {\n try {\n setRefreshLoading(true);\n const respData = await serviceConfig.onRequest(serviceConfig.params);\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n } finally {\n setRefreshLoading(false);\n }\n },\n };\n });\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender(respData);\n }\n return (\n <Result\n status=\"error\"\n className=\"local-loading-error\"\n subTitle={(respData?.message as string) || '数据处理异常'}\n style={{ minHeight: loadingHeight }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n const isLoading = status === 'loading';\n\n if (isLoading && !isAsync) {\n return (\n <div style={{ height: loadingHeight, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return <Spin spinning={refreshLoading || isLoading}>{children(respData)}</Spin>;\n});\n"],"names":["LocalLoading","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","_useState","useState","status","setStatus","_useState2","respData","setRespData","_useState3","refreshLoading","setRefreshLoading","onRequest","Promise","$return","$error","_respData","$Try_1_Post","$boundEx","$Try_1_Catch","error","resolve","params","then","$await_3","fbaHooks","useEffectCustomAsync","loadingHeight","undefined","useImperativeHandle","onRefresh","$Try_2_Finally","$Try_2_Exit","$Try_2_Value","call","this","bind","_respData2","$Try_2_Post","$Try_2_Catch","$await_4","_jsx","Result","className","subTitle","message","style","minHeight","extra","Button","type","onClick","isLoading","height","display","justifyContent","Spin","spinning","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/local-loading.tsx"],"sourcesContent":["import { isDeepEqual } from '@dimjs/lang';\nimport { TAny, toArray, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useMemo, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TPlainObject>;\n params?: TPlainObject;\n /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */\n invalidParamKey?: string[];\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: () => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 获取服务数据\n * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * ```\n * @param props\n * @returns\n */\nexport const LocalLoading = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'loading'>('loading');\n const [respData, setRespData] = useState<TAny>();\n const [refreshLoading, setRefreshLoading] = useState(false);\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n\n const prevParams = fbaHooks.usePrevious(serviceConfig.params);\n\n // 用于直接发起接口调用,不能用于比较\n const serviceParams = useMemo(() => {\n if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {\n return serviceConfig.params;\n }\n const newParams = { ...serviceConfig.params };\n serviceConfig.invalidParamKey?.forEach((key) => {\n newParams[key] = undefined;\n });\n return newParams;\n }, [serviceConfig]);\n\n const onInitRequest = async () => {\n try {\n setStatus('loading');\n const respData = await serviceConfig.onRequest(serviceParams);\n setStatus('success');\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n }\n };\n\n fbaHooks.useEffectCustomAsync(onInitRequest, []);\n\n fbaHooks.useEffectCustom(() => {\n if (prevParams) {\n if (!isDeepEqual(serviceConfig.params, prevParams)) {\n void onRefresh();\n }\n }\n }, [prevParams, serviceConfig.params]);\n\n const onRefresh = async () => {\n try {\n setRefreshLoading(true);\n const respData = await serviceConfig.onRequest(serviceParams);\n setRespData(respData);\n } catch (error) {\n setStatus('error');\n } finally {\n setRefreshLoading(false);\n }\n };\n\n useImperativeHandle(ref, () => {\n return { onRefresh };\n });\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender(respData);\n }\n return (\n <Result\n status=\"error\"\n className=\"local-loading-error\"\n subTitle={(respData?.message as string) || '数据处理异常'}\n style={{ minHeight: loadingHeight }}\n extra={[\n <Button type=\"primary\" key=\"console\" onClick={onInitRequest}>\n 重新获取\n </Button>,\n ]}\n />\n );\n }\n const isLoading = status === 'loading';\n\n if (isLoading && !isAsync) {\n return (\n <div style={{ height: loadingHeight, display: 'flex', justifyContent: 'center' }}>\n <Spin spinning={true}>\n <Fragment />\n </Spin>\n </div>\n );\n }\n\n return <Spin spinning={refreshLoading || isLoading}>{children(respData)}</Spin>;\n});\n"],"names":["LocalLoading","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","_useState","useState","status","setStatus","_useState2","respData","setRespData","_useState3","refreshLoading","setRefreshLoading","loadingHeight","undefined","prevParams","fbaHooks","usePrevious","params","serviceParams","useMemo","_serviceConfig$invali","toArray","invalidParamKey","length","newParams","_extends","forEach","key","onInitRequest","Promise","$return","$error","_respData","$Try_1_Post","$boundEx","$Try_1_Catch","error","resolve","onRequest","then","$await_3","useEffectCustomAsync","useEffectCustom","_isDeepEqual","onRefresh","$Try_2_Finally","$Try_2_Exit","$Try_2_Value","call","this","bind","_respData2","$Try_2_Post","$Try_2_Catch","$await_4","useImperativeHandle","_jsx","Result","className","subTitle","message","style","minHeight","extra","Button","type","onClick","isLoading","height","display","justifyContent","Spin","spinning","Fragment"],"mappings":"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"}
@@ -3,5 +3,5 @@ import './../dynamic-node/index.css';
3
3
  import './../fba-hooks/index.css';
4
4
  import './index.css';
5
5
  /*! @flatjs/forge MIT @flatbiz/antd */
6
- export{R as RichTextEditor}from"../rich-text-editor-417bf0d8.js";import"../_rollupPluginBabelHelpers-1f4d8910.js";import"@dimjs/utils/cjs/class-names";import"@wove/react/cjs/hooks";import"@tinymce/tinymce-react";import"ahooks";import"react";import"@ant-design/icons/es/icons/PlusCircleOutlined";import"antd";import"../dynamic-node-577ef8fd.js";import"react-dom";import"../dom-4d04aa64.js";import"react/jsx-runtime";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";
6
+ import{_ as e,a as n}from"../_rollupPluginBabelHelpers-1f4d8910.js";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{Editor as i}from"@tinymce/tinymce-react";import{useKeyPress as o}from"ahooks";import{Fragment as a,useRef as l,useState as s}from"react";import c from"@ant-design/icons/es/icons/PlusCircleOutlined";import{Image as m}from"antd";import{d as u}from"../dynamic-node-577ef8fd.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{jsx as p,Fragment as f,jsxs as v}from"react/jsx-runtime";import"react-dom";import"../dom-4d04aa64.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var g=function e(n){var t=n.visible,r=n.url;d.useEffectCustom((function(){if(t){u.append({content:p(c,{onClick:n.close,className:"preview-image-popup-close",twoToneColor:"#1890ff"})})}else{u.remove()}}),[t]);if(!r)return p(f,{});return p(a,{children:p(m,{style:{left:"100px"},preview:{className:"preview-image-popup",maskStyle:{backgroundColor:"rgba(0,0,0,0.85)"},visible:t,src:r,onVisibleChange:function e(){n.close()}}},r)})};var h=["onUploadImage","onChange","className"];var y=function a(c){var m,u,d,f;var y=c.onUploadImage,b=c.onChange,C=c.className,k=e(c,h);var x=l(null);var w=s(""),_=w[0],j=w[1];var E=((m=c.init)==null?void 0:m.img_ratio)||[{min:0,max:1e3,ratio:.5},{min:1e3,ratio:.3}];o((function(){return true}),(function(e){try{if(e.type==="keyup"&&e.key==="Escape"){var n;var t=(n=x.current)==null?void 0:n.editorContainer.classList.contains("tox-fullscreen");if(t){var r;(r=x.current)==null?void 0:r.editorCommands.execCommand("mceFullScreen")}}}catch(e){}}),{events:["keydown","keyup"]});var I=r.useCallbackRef((function(e,n){try{if(e.keyCode==27){var t;var r=(t=x.current)==null?void 0:t.editorContainer.classList.contains("tox-fullscreen");if(r){var i;(i=x.current)==null?void 0:i.editorCommands.execCommand("mceFullScreen")}}}catch(e){}c.onKeyDown==null?void 0:c.onKeyDown(e,n)}));var N=r.useCallbackRef((function(e,n){x.current=n;try{var t,r;(t=n.iframeElement)==null?void 0:(r=t.contentDocument)==null?void 0:r.addEventListener("click",(function(e){var n;if(c.imgPreview&&((n=e.target)==null?void 0:n["tagName"])==="IMG"){j(e.target["src"])}}),true)}catch(e){}k.onInit==null?void 0:k.onInit(e,n)}));var P=r.useCallbackRef((function(e,n){x.current=n;k.onEditorChange==null?void 0:k.onEditorChange(e,n);b==null?void 0:b(e)}));var S="https://file.40017.cn/tcsk/tinymce@6.4.1";var z=function e(n){if(E.length===0)return 1;for(var t=0;t<E.length;t++){var r=E[t];if(r.max){if(n>=r.min&&n<=r.max)return r.ratio}else{if(n>=r.min)return r.ratio}}return 1};var D=r.useCallbackRef((function(e,n){try{var t=n.node.children||[];if(t.length===1&&t[0].nodeName==="IMG"){t[0].setAttribute("style","display:none");var r=document.createElement("img");r.src=t[0].getAttribute("src");console.log("img.src",r.src);r.onload=function(){var n=z(r.width);e.execCommand("mceInsertContent",true,'<img src="'+r.src+'" width="'+r.width*n+'" height="'+r.height*n+'" />')}}}catch(e){}}));return v("div",{className:t("v-editor-wrapper",C),children:[p(i,n({tinymceScriptSrc:S+"/tinymce.min.js"},k,{onInit:N,onKeyDown:I,onEditorChange:P,init:n({promotion:false,language:"zh-Hans",height:500,paste_data_images:y?true:false,paste_postprocess:D,autosave_ask_before_unload:false,base_url:S,autoresize_bottom_margin:0,images_upload_handler:function e(n){return new Promise((function(e,t){var r,i,o;var a=function(n){try{return e(Promise.reject((n==null?void 0:n.message)||"图片上传异常"))}catch(e){return t(e)}};try{r=n.blob();i=new File([r],r.name,{type:r.type});return Promise.resolve(y==null?void 0:y(i)).then((function(n){try{o=n;return e(Promise.resolve(o))}catch(e){return a(e)}}),a)}catch(e){a(e)}}))},plugins:"lists link image advlist charmap preview fullscreen code table help codesample "+(((u=c.init)==null?void 0:u.plugins_append)||""),toolbar:"undo redo fullscreen preview | bold italic underline strikethrough |"+"fontsize blocks |"+"forecolor backcolor removeformat |"+"numlist bullist advlist |"+"alignleft aligncenter alignright alignjustify |"+"outdent indent |"+"hr image link code codesample |"+(((d=c.init)==null?void 0:d.toolbar_append)||""),font_size_formats:"8px 10px 12px 14px 16px 18px 24px 36px 48px"},c.init,{content_style:"img {max-width:100%;} table{width:100%} "+((f=c.init)==null?void 0:f.content_style)})})),p(g,{visible:!!_,url:_,close:function e(){j("")}})]})};export{y as RichTextEditor};
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /**\n * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度\n * 1. 默认值值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n */\n img_ratio?: { min: number; max?: number; ratio: number }[];\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 获取富文本实例,通过onInit(_, editor)函数获取\n * 3. 预览富文本数据,使用 RichTextViewer 组件\n * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 6. 其他插件\n * emoticons 表情插件\n * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例\n * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n const imgRatio = props.init?.img_ratio || [\n { min: 0, max: 1000, ratio: 0.5 },\n { min: 1000, ratio: 0.3 },\n ];\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n // const images_upload_handler = hooks.useCallbackRef(async (blobInfo: BlobInfo, progress: ProgressFn) => {\n // try {\n // const respData = await props.onUploadImage?.(blobInfo.blob());\n // success(respData);\n // } catch (error) {\n // failure(error.message);\n // }\n // });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n const getImgRatio = (width: number) => {\n if (imgRatio.length === 0) return 1;\n for (let index = 0; index < imgRatio.length; index++) {\n const element = imgRatio[index];\n if (element.max) {\n if (width >= element.min && width <= element.max) return element.ratio;\n } else {\n if (width >= element.min) return element.ratio;\n }\n }\n return 1;\n };\n\n const paste_postprocess = hooks.useCallbackRef((editor, args) => {\n try {\n const nodes = (args.node.children || []) as unknown as HTMLElement[];\n if (nodes.length === 1 && nodes[0].nodeName === 'IMG') {\n nodes[0].setAttribute('style', `display:none`);\n const img = document.createElement('img');\n img.src = nodes[0].getAttribute('src') as string;\n console.log('img.src', img.src);\n img.onload = () => {\n const ratio = getImgRatio(img.width);\n editor.execCommand(\n 'mceInsertContent',\n true,\n `<img src=\"${img.src}\" width=\"${img.width * ratio}\" height=\"${img.height * ratio}\" />`,\n );\n };\n }\n } catch (error) {}\n });\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n paste_postprocess,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init2","_props$init3","_props$init4","onUploadImage","onChange","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","imgRatio","init","img_ratio","min","max","ratio","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","_editor$iframeElement","_editor$iframeElement2","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","getImgRatio","width","length","index","element","paste_postprocess","args","nodes","node","nodeName","setAttribute","img","document","createElement","getAttribute","console","log","onload","height","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","promotion","language","paste_data_images","autosave_ask_before_unload","base_url","autoresize_bottom_margin","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_5_Catch","reject","message","$boundEx","file","File","name","resolve","then","$await_6","plugins","plugins_append","toolbar","toolbar_append","font_size_formats","content_style"],"mappings":"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"}
@@ -1,8 +1,5 @@
1
1
  /* eslint-disable */
2
- import './../rich-text-editor/index.css';
3
- import './../dynamic-node/index.css';
4
- import './../fba-hooks/index.css';
5
2
  import './index.css';
6
3
  /*! @flatjs/forge MIT @flatbiz/antd */
7
- import e from"@ant-design/icons/es/icons/FullscreenOutlined";import{classNames as i}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{IconWrapper as o}from"@flatbiz/antd";import{useKeyPress as t}from"ahooks";import{useState as s}from"react";import{R as n}from"../rich-text-editor-417bf0d8.js";import{jsxs as a,jsx as l}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-1f4d8910.js";import"@tinymce/tinymce-react";import"@ant-design/icons/es/icons/PlusCircleOutlined";import"antd";import"../dynamic-node-577ef8fd.js";import"react-dom";import"../dom-4d04aa64.js";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var m=function m(c){var u=s(false),p=u[0],d=u[1];t((function(){return true}),(function(e){if(e.type==="keyup"&&e.key==="Escape"&&p){d(false)}}),{events:["keydown","keyup"]});var f=r.useCallbackRef((function(){d(!p)}));var v=r.useCallbackRef((function(e,i){c.onInit==null?void 0:c.onInit(i)}));return a("div",{className:i("fba-editor-viewer",{"fba-editor-viewer-fixed":p},c.className),style:c.style,children:[c.children,c.fullscreen&&c.data&&l("div",{className:"fba-editor-viewer-icon",children:l(o,{hoverTips:c.fullscreenIconTips,icon:l(e,{}),onClick:f})}),l(n,{value:c.data,onInit:v,imgPreview:true,disabled:true,init:{plugins:"autoresize",menubar:false,toolbar:"",statusbar:false}})]})};export{m as RichTextViewer};
4
+ import e from"@ant-design/icons/es/icons/FullscreenOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{useKeyPress as o}from"ahooks";import{useState as n,useRef as t}from"react";import{fbaHooks as a,IconWrapper as s,RichTextEditor as l}from"packages/antd";import{jsxs as c,jsx as u}from"react/jsx-runtime";var f=function f(m){var d=n(false),v=d[0],p=d[1];var k=t();o((function(){return true}),(function(e){if(e.type==="keyup"&&e.key==="Escape"&&v){p(false)}}),{events:["keydown","keyup"]});var b=i.useCallbackRef((function(){p(!v)}));var y=i.useCallbackRef((function(e,r){k.current=r;m.onInit==null?void 0:m.onInit(r)}));a.useEffectCustom((function(){var e;(e=k.current)==null?void 0:e.editorCommands.execCommand("mceAutoResize")}),[m.value]);return c("div",{className:r("fba-editor-viewer",{"fba-editor-viewer-fixed":v},m.className),style:m.style,children:[m.children,m.fullscreen&&m.value&&u("div",{className:"fba-editor-viewer-icon",children:u(s,{hoverTips:m.fullscreenIconTips,icon:u(e,{}),onClick:b})}),u(l,{value:'<div style="overflow: hidden">'+m.value+"</div>",onInit:y,imgPreview:true,disabled:true,init:{plugins:"autoresize",menubar:false,toolbar:"",statusbar:false}})]})};export{f as RichTextViewer};
8
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-viewer/rich-text-viewer.tsx"],"sourcesContent":["import { FullscreenOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { IconWrapper } from '@flatbiz/antd';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { CSSProperties, ReactElement, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { RichTextEditor } from '../rich-text-editor';\n\nimport './style.less';\n\ntype RichTextViewerProps = {\n data: string;\n className?: string;\n fullscreen?: boolean;\n onInit?: (editor: TinyMCEEditor) => void;\n children?: ReactElement;\n style?: CSSProperties;\n fullscreenIconTips?: string;\n};\n\n/**\n * 预览 RichTextEditor 生成的富文本数据\n * ```\n * 1. 如果高度发生变更,可执行 editor.execCommand('mceAutoResize');\n * ```\n * @param props\n * @returns\n */\nexport const RichTextViewer = (props: RichTextViewerProps) => {\n const [isFixed, setIsFixed] = useState(false);\n\n useKeyPress(\n () => true,\n (event) => {\n if (event.type === 'keyup' && event.key === 'Escape' && isFixed) {\n setIsFixed(false);\n }\n },\n { events: ['keydown', 'keyup'] },\n );\n\n const onChangeFixed = hooks.useCallbackRef(() => {\n setIsFixed(!isFixed);\n });\n const onInit = hooks.useCallbackRef((_, editor) => {\n props.onInit?.(editor);\n });\n\n return (\n <div\n className={classNames('fba-editor-viewer', { 'fba-editor-viewer-fixed': isFixed }, props.className)}\n style={props.style}\n >\n {props.children}\n {props.fullscreen && props.data && (\n <div className=\"fba-editor-viewer-icon\">\n <IconWrapper\n hoverTips={props.fullscreenIconTips}\n icon={<FullscreenOutlined />}\n onClick={onChangeFixed}\n />\n </div>\n )}\n <RichTextEditor\n value={props.data}\n onInit={onInit}\n imgPreview\n disabled\n init={{\n plugins: 'autoresize',\n menubar: false,\n toolbar: '',\n statusbar: false,\n }}\n />\n </div>\n );\n};\n"],"names":["RichTextViewer","props","_useState","useState","isFixed","setIsFixed","useKeyPress","event","type","key","events","onChangeFixed","_hooks","useCallbackRef","onInit","_","editor","_jsxs","className","_classNames","style","children","fullscreen","data","_jsx","IconWrapper","hoverTips","fullscreenIconTips","icon","_FullscreenOutlined","onClick","RichTextEditor","value","imgPreview","disabled","init","plugins","menubar","toolbar","statusbar"],"mappings":";gtBA6BaA,EAAiB,SAAjBA,EAAkBC,GAC7B,IAAAC,EAA8BC,EAAS,OAAhCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAE1BI,GACE,WAAA,OAAM,IACN,IAAA,SAACC,GACC,GAAIA,EAAMC,OAAS,SAAWD,EAAME,MAAQ,UAAYL,EAAS,CAC/DC,EAAW,MACb,CACF,GACA,CAAEK,OAAQ,CAAC,UAAW,WAGxB,IAAMC,EAAgBC,EAAMC,gBAAe,WACzCR,GAAYD,EACd,IACA,IAAMU,EAASF,EAAMC,gBAAe,SAACE,EAAGC,GACtCf,EAAMa,QAANb,UAAAA,EAAAA,EAAMa,OAASE,EACjB,IAEA,OACEC,EAAA,MAAA,CACEC,UAAWC,EAAW,oBAAqB,CAAE,0BAA2Bf,GAAWH,EAAMiB,WACzFE,MAAOnB,EAAMmB,MAAMC,SAElBpB,CAAAA,EAAMoB,SACNpB,EAAMqB,YAAcrB,EAAMsB,MACzBC,EAAA,MAAA,CAAKN,UAAU,yBAAwBG,SACrCG,EAACC,EAAW,CACVC,UAAWzB,EAAM0B,mBACjBC,KAAMJ,EAAAK,EAAuB,IAC7BC,QAASnB,MAIfa,EAACO,EAAc,CACbC,MAAO/B,EAAMsB,KACbT,OAAQA,EACRmB,WAAU,KACVC,SAAQ,KACRC,KAAM,CACJC,QAAS,aACTC,QAAS,MACTC,QAAS,GACTC,UAAW,WAKrB"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-viewer/rich-text-viewer.tsx"],"sourcesContent":["import { FullscreenOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\n\nimport { fbaHooks, IconWrapper, RichTextEditor } from 'packages/antd';\nimport './style.less';\n\ntype RichTextViewerProps = {\n value: string;\n className?: string;\n style?: CSSProperties;\n fullscreen?: boolean;\n onInit?: (editor: TinyMCEEditor) => void;\n children?: ReactElement;\n fullscreenIconTips?: string;\n};\n\n/**\n * 预览 RichTextEditor 生成的富文本数据\n * ```\n * 1. 通过 onInit 属性可获取实例:editor\n * 2. 如果高度发生变更,可执行 editor.execCommand('mceAutoResize');\n *\n * ```\n * @param props\n * @returns\n */\nexport const RichTextViewer = (props: RichTextViewerProps) => {\n const [isFixed, setIsFixed] = useState(false);\n const editorRef = useRef<TinyMCEEditor>();\n\n useKeyPress(\n () => true,\n (event) => {\n if (event.type === 'keyup' && event.key === 'Escape' && isFixed) {\n setIsFixed(false);\n }\n },\n { events: ['keydown', 'keyup'] },\n );\n\n const onChangeFixed = hooks.useCallbackRef(() => {\n setIsFixed(!isFixed);\n });\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n props.onInit?.(editor);\n });\n\n fbaHooks.useEffectCustom(() => {\n editorRef.current?.editorCommands.execCommand('mceAutoResize');\n }, [props.value]);\n\n return (\n <div\n className={classNames('fba-editor-viewer', { 'fba-editor-viewer-fixed': isFixed }, props.className)}\n style={props.style}\n >\n {props.children}\n {props.fullscreen && props.value && (\n <div className=\"fba-editor-viewer-icon\">\n <IconWrapper\n hoverTips={props.fullscreenIconTips}\n icon={<FullscreenOutlined />}\n onClick={onChangeFixed}\n />\n </div>\n )}\n <RichTextEditor\n value={`<div style=\"overflow: hidden\">${props.value}</div>`}\n onInit={onInit}\n imgPreview\n disabled\n init={{\n plugins: 'autoresize',\n menubar: false,\n toolbar: '',\n statusbar: false,\n }}\n />\n </div>\n );\n};\n"],"names":["RichTextViewer","props","_useState","useState","isFixed","setIsFixed","editorRef","useRef","useKeyPress","event","type","key","events","onChangeFixed","_hooks","useCallbackRef","onInit","_","editor","current","fbaHooks","useEffectCustom","_editorRef$current","editorCommands","execCommand","value","_jsxs","className","_classNames","style","children","fullscreen","_jsx","IconWrapper","hoverTips","fullscreenIconTips","icon","_FullscreenOutlined","onClick","RichTextEditor","imgPreview","disabled","init","plugins","menubar","toolbar","statusbar"],"mappings":";2XA8BaA,EAAiB,SAAjBA,EAAkBC,GAC7B,IAAAC,EAA8BC,EAAS,OAAhCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAC1B,IAAMI,EAAYC,IAElBC,GACE,WAAA,OAAM,IACN,IAAA,SAACC,GACC,GAAIA,EAAMC,OAAS,SAAWD,EAAME,MAAQ,UAAYP,EAAS,CAC/DC,EAAW,MACb,CACF,GACA,CAAEO,OAAQ,CAAC,UAAW,WAGxB,IAAMC,EAAgBC,EAAMC,gBAAe,WACzCV,GAAYD,EACd,IACA,IAAMY,EAASF,EAAMC,gBAAe,SAACE,EAAGC,GACtCZ,EAAUa,QAAUD,EACpBjB,EAAMe,QAANf,UAAAA,EAAAA,EAAMe,OAASE,EACjB,IAEAE,EAASC,iBAAgB,WAAM,IAAAC,GAC7BA,EAAAhB,EAAUa,UAAO,UAAA,EAAjBG,EAAmBC,eAAeC,YAAY,gBAChD,GAAG,CAACvB,EAAMwB,QAEV,OACEC,EAAA,MAAA,CACEC,UAAWC,EAAW,oBAAqB,CAAE,0BAA2BxB,GAAWH,EAAM0B,WACzFE,MAAO5B,EAAM4B,MAAMC,SAElB7B,CAAAA,EAAM6B,SACN7B,EAAM8B,YAAc9B,EAAMwB,OACzBO,EAAA,MAAA,CAAKL,UAAU,yBAAwBG,SACrCE,EAACC,EAAW,CACVC,UAAWjC,EAAMkC,mBACjBC,KAAMJ,EAAAK,EAAuB,IAC7BC,QAASzB,MAIfmB,EAACO,EAAc,CACbd,MAAwCxB,iCAAAA,EAAMwB,MAAc,SAC5DT,OAAQA,EACRwB,WAAU,KACVC,SAAQ,KACRC,KAAM,CACJC,QAAS,aACTC,QAAS,MACTC,QAAS,GACTC,UAAW,WAKrB"}
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
2
  import './index.css';
3
3
  /*! @flatjs/forge MIT @flatbiz/antd */
4
- import{_ as e,a as o}from"../_rollupPluginBabelHelpers-1f4d8910.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isUndefinedOrNull as r}from"@flatbiz/utils";import{Tooltip as l,Switch as a}from"antd";import{jsx as n}from"react/jsx-runtime";var i=["checkedValue","unCheckedValue","onChange","value","tooltipProps","tooltipTitle"];var c=function c(u){var p=u.checkedValue,f=u.unCheckedValue,h=u.onChange,m=u.value,s=u.tooltipProps,d=u.tooltipTitle,v=e(u,i);var k=t.useCallbackRef((function(e){h==null?void 0:h(e?p:f)}));var C;if(typeof d==="function"){C=d(m)}else{C=d}if(C){return n(l,o({placement:"top"},s,{title:C,children:n(a,o({},v,{checked:!r(m)&&p===m,onChange:k}))}))}return n(a,o({},v,{checked:!r(m)&&p===m,onChange:k}))};export{c as SwitchWrapper};
4
+ import{_ as e,a as r}from"../_rollupPluginBabelHelpers-1f4d8910.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{message as o,Tooltip as i,Switch as l}from"antd";import{useState as u}from"react";import{jsx as a}from"react/jsx-runtime";var c=["checkedValue","unCheckedValue","onChange","value","tooltipProps","tooltipTitle","serviceConfig"];var s=function s(f){var v=f.checkedValue,h=f.unCheckedValue,d=f.onChange,m=f.value,p=f.tooltipProps,g=f.tooltipTitle,C=f.serviceConfig,k=e(f,c);var b=u(),y=b[0],P=b[1];var V=t.useCallbackRef((function(e){return new Promise((function(r,t){var n,i,l;n=e?v:h;if(C!=null&&C.onRequest){var u=function(e){return function(r){try{P(false);return e&&e.call(this,r)}catch(e){return t(e)}}.bind(this)}.bind(this);var a=function(){try{return s.call(this)}catch(e){return t(e)}}.bind(this);var c=function(e){try{void o.error((e==null?void 0:e.message)||(C==null?void 0:(l=C.message)==null?void 0:l.defaultError)||"状态修改失败!");return u(a)()}catch(e){return u(t)(e)}};try{P(true);return Promise.resolve(C.onRequest(n)).then((function(e){try{d==null?void 0:d(n);void o.success((C==null?void 0:(i=C.message)==null?void 0:i.success)||"状态修改成功!");return u(a)()}catch(e){return c(e)}}),c)}catch(e){c(e)}}else{d==null?void 0:d(n);return s.call(this)}function s(){return r()}}))}));var j;if(typeof g==="function"){j=g(m)}else{j=g}if(j){return a(i,r({placement:"top"},p,{title:j,children:a(l,r({},k,{checked:!n(m)&&v===m,onChange:V}))}))}return a(l,r({loading:y},k,{checked:!n(m)&&v===m,onChange:V}))};export{s as SwitchWrapper};
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/switch-wrapper/switch-wrapper.tsx"],"sourcesContent":["import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: string | number | boolean;\n checkedValue: string | number | boolean;\n unCheckedValue: string | number | boolean;\n onChange?: (value: string | number | boolean) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: string | number | boolean) => string | undefined);\n};\n/**\n * 解决Switch只能接收boolean的限制,与Form.Item结合使用最佳\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 结合使用,不再需要配置 valuePropName\n * <Form.Item name=\"fieldName\">\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n if (tipTitle) {\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n }\n\n return (\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n );\n};\n"],"names":["SwitchWrapper","props","checkedValue","unCheckedValue","onChange","value","tooltipProps","tooltipTitle","otherProps","_objectWithoutPropertiesLoose","_excluded","onChangeHandle","_hooks","useCallbackRef","checked","tipTitle","_jsx","Tooltip","_extends","placement","title","children","Switch","isUndefinedOrNull"],"mappings":";qVAyBaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAQC,EAA6FD,EAA7FC,aAAcC,EAA+EF,EAA/EE,eAAgBC,EAA+DH,EAA/DG,SAAUC,EAAqDJ,EAArDI,MAAOC,EAA8CL,EAA9CK,aAAcC,EAAgCN,EAAhCM,aAAiBC,EAAUC,EAAKR,EAAKS,GAC1G,IAAMC,EAAiBC,EAAMC,gBAAe,SAACC,GAC3CV,GAAQ,UAAA,EAARA,EAAWU,EAAUZ,EAAeC,EACtC,IAEA,IAAIY,EAEJ,UAAWR,IAAiB,WAAY,CACtCQ,EAAWR,EAAaF,EAC1B,KAAO,CACLU,EAAWR,CACb,CAEA,GAAIQ,EAAU,CACZ,OACEC,EAACC,EAAOC,EAAA,CAACC,UAAU,OAAUb,EAAY,CAAEc,MAAOL,EAASM,SACzDL,EAACM,EAAMJ,KACDV,EAAU,CACdM,SAAUS,EAAkBlB,IAAUH,IAAiBG,EACvDD,SAAUO,OAIlB,CAEA,OACEK,EAACM,EAAMJ,KACDV,EAAU,CACdM,SAAUS,EAAkBlB,IAAUH,IAAiBG,EACvDD,SAAUO,IAGhB"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/switch-wrapper/switch-wrapper.tsx"],"sourcesContent":["import { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message, Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\nimport { useState } from 'react';\n\nexport type SwitchWrapperValue = string | number | boolean;\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n serviceConfig?: {\n onRequest: (value: SwitchWrapperValue) => TAny;\n message?: {\n success?: string;\n defaultError?: string;\n };\n };\n};\n/**\n * 解决Switch只能接收boolean的限制,与Form.Item结合使用最佳\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 结合使用,不再需要配置 valuePropName\n * <Form.Item name=\"fieldName\">\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * 6. 可设置 serviceConfig 配置服务调用交互\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const {\n checkedValue,\n unCheckedValue,\n onChange,\n value,\n tooltipProps,\n tooltipTitle,\n serviceConfig,\n ...otherProps\n } = props;\n const [loading, setLoading] = useState<boolean>();\n const onChangeHandle = hooks.useCallbackRef(async (checked) => {\n const changeValue = checked ? checkedValue : unCheckedValue;\n if (serviceConfig?.onRequest) {\n try {\n setLoading(true);\n await serviceConfig.onRequest(changeValue);\n onChange?.(changeValue);\n void message.success(serviceConfig?.message?.success || '状态修改成功!');\n } catch (error) {\n void message.error(error?.message || serviceConfig?.message?.defaultError || '状态修改失败!');\n } finally {\n setLoading(false);\n }\n } else {\n onChange?.(changeValue);\n }\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n if (tipTitle) {\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n }\n\n return (\n <Switch\n loading={loading}\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n );\n};\n"],"names":["SwitchWrapper","props","checkedValue","unCheckedValue","onChange","value","tooltipProps","tooltipTitle","serviceConfig","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","loading","setLoading","onChangeHandle","_hooks","useCallbackRef","checked","Promise","$return","$error","changeValue","_serviceConfig$messag","_serviceConfig$messag2","onRequest","$Try_1_Finally","$Try_1_Exit","$Try_1_Value","call","this","$boundEx","bind","$Try_1_Post","$If_2","$Try_1_Catch","error","message","defaultError","resolve","then","$await_3","success","tipTitle","_jsx","Tooltip","_extends","placement","title","children","Switch","isUndefinedOrNull"],"mappings":";mZAmCaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IACEC,EAQED,EARFC,aACAC,EAOEF,EAPFE,eACAC,EAMEH,EANFG,SACAC,EAKEJ,EALFI,MACAC,EAIEL,EAJFK,aACAC,EAGEN,EAHFM,aACAC,EAEEP,EAFFO,cACGC,EAAUC,EACXT,EAAKU,GACT,IAAAC,EAA8BC,IAAvBC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAC1B,IAAMI,EAAiBC,EAAMC,gBAAe,SAAOC,GAAP,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GAAA,IACpCC,EAAqDC,EAAAC,EAArDF,EAAcJ,EAAUjB,EAAeC,EAC7C,GAAIK,GAAa,MAAbA,EAAekB,UAAW,CAAA,IAAAC,EAjDlC,SAAAC,GAAA,OAAC,SAAAC,GAAD,IA0DQd,EAAW,OA1D4F,OAAOa,GAAUA,EAAME,KAAKC,KAAIF,EAAtI,CAAC,MAAAG,GAAW,OAAOV,EAAAU,EAAM,CAAgI,EAA/JC,KAAKF,OAALE,KAAKF,MAAR,IAAIG,EAAJ,WAAA,IAAI,OAAJC,EAAGL,KAAQC,KAAF,CAAC,MAAAC,GAAW,OAAOV,EAAAU,EAAM,GAA/BC,KAAKF,MAAR,IAAIK,EAAA,SAuDWC,GAvDf,SAwDaC,EAAQD,OAAMA,GAAAA,UAAAA,EAAAA,EAAOC,WAAW9B,gBAAaiB,EAAbjB,EAAe8B,UAAO,UAAA,EAAtBb,EAAwBc,eAAgB,WAxDrF,OAAOZ,EAAAO,EAAAP,EAAE,CAAC,MAAAK,GAAW,OAAOL,EAAAL,EAAAK,CAAAK,EAAM,GAkD5B,IACEjB,EAAW,MACX,OAAAK,QAAAoB,QAAMhC,EAAckB,UAAUH,IAA9BkB,eAA0CC,GApDlD,IAqDQtC,GAAAA,UAAAA,EAAAA,EAAWmB,QACNe,EAAQK,SAAQnC,gBAAagB,EAAbhB,EAAe8B,UAAfd,UAAAA,EAAAA,EAAwBmB,UAAW,WAtDhE,OAAOhB,EAAAO,EAAAP,EAAE,CAAC,MAAAK,GAAW,OAAOI,EAAAJ,EAAM,CAAC,GAAAI,EAuD5B,CAAC,MAAOC,GAAOD,EAAPC,EAET,CAGF,KAAO,CACLjC,GAAAA,UAAAA,EAAAA,EAAWmB,GAAa,OA7D9BY,EAAGL,KAAQC,KA8DP,CAAC,SAAAI,IAAA,OAAAd,GAAA,CAAA,OAGH,IAAIuB,EAEJ,UAAWrC,IAAiB,WAAY,CACtCqC,EAAWrC,EAAaF,EAC1B,KAAO,CACLuC,EAAWrC,CACb,CAEA,GAAIqC,EAAU,CACZ,OACEC,EAACC,EAAOC,EAAA,CAACC,UAAU,OAAU1C,EAAY,CAAE2C,MAAOL,EAASM,SACzDL,EAACM,EAAMJ,KACDtC,EAAU,CACdU,SAAUiC,EAAkB/C,IAAUH,IAAiBG,EACvDD,SAAUY,OAIlB,CAEA,OACE6B,EAACM,EAAMJ,EAAA,CACLjC,QAASA,GACLL,EAAU,CACdU,SAAUiC,EAAkB/C,IAAUH,IAAiBG,EACvDD,SAAUY,IAGhB"}
package/index.d.ts CHANGED
@@ -1375,6 +1375,8 @@ export declare const LabelValueLayout: (props: LabelValueLayoutProps) => JSX.Ele
1375
1375
  export type LocalLoadingServiceConfig = {
1376
1376
  onRequest: (params?: TAny) => Promise<TPlainObject>;
1377
1377
  params?: TPlainObject;
1378
+ /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */
1379
+ invalidParamKey?: string[];
1378
1380
  };
1379
1381
  export interface LocalLoadingProps {
1380
1382
  /** 接口数据配置 */
@@ -1403,7 +1405,8 @@ export type LocalLoadingRefApi = {
1403
1405
  * 包括
1404
1406
  * 1. loading显示效果
1405
1407
  * 2. error显示效果
1406
- * 3. 正常接口数据渲染
1408
+ * 3. 获取服务数据
1409
+ * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用
1407
1410
  * ```
1408
1411
  * @param props
1409
1412
  * @returns
@@ -1610,13 +1613,28 @@ export type TRelationTreeOperate = {
1610
1613
  onChange: (name: string, value: TAny) => void;
1611
1614
  };
1612
1615
  export declare const RelationTree: (props: RelationTreeProps) => JSX.Element;
1613
- export interface RichTextEditorProps extends Omit<IAllProps, "onChange"> {
1616
+ export interface RichTextEditorProps extends Omit<IAllProps, "onChange" | "init"> {
1614
1617
  onChange?: (data?: string) => void;
1615
1618
  /** 上传图片服务 */
1616
1619
  onUploadImage?: (file: File) => Promise<string>;
1617
1620
  className?: string;
1618
1621
  /** 图片点击预览 */
1619
1622
  imgPreview?: boolean;
1623
+ init?: IAllProps["init"] & {
1624
+ /**
1625
+ * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度
1626
+ * 1. 默认值值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]
1627
+ */
1628
+ img_ratio?: {
1629
+ min: number;
1630
+ max?: number;
1631
+ ratio: number;
1632
+ }[];
1633
+ /** 插件添加;自定义plugins后失效 */
1634
+ plugins_append?: string;
1635
+ /** 工具栏添加;自定义toolbar后失效 */
1636
+ toolbar_append?: string;
1637
+ };
1620
1638
  }
1621
1639
  /**
1622
1640
  * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6
@@ -1624,25 +1642,33 @@ export interface RichTextEditorProps extends Omit<IAllProps, "onChange"> {
1624
1642
  * @returns
1625
1643
  * ```
1626
1644
  * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口
1627
- * 2. 如果不需要粘贴上传图片,可配置 init.paste_data_images = false
1628
- * 3. 获取富文本实例,通过onInit(_, editor)函数获取
1629
- * 5. 预览富文本数据,使用 RichTextViewer 组件
1645
+ * 2. 获取富文本实例,通过onInit(_, editor)函数获取
1646
+ * 3. 预览富文本数据,使用 RichTextViewer 组件
1647
+ * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append
1648
+ * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />
1649
+ * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏
1650
+ * 6. 其他插件
1651
+ * emoticons 表情插件
1652
+ * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例
1653
+ * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]
1630
1654
  * ```
1631
1655
  */
1632
1656
  export declare const RichTextEditor: (props: RichTextEditorProps) => JSX.Element;
1633
1657
  export type RichTextViewerProps = {
1634
- data: string;
1658
+ value: string;
1635
1659
  className?: string;
1660
+ style?: CSSProperties;
1636
1661
  fullscreen?: boolean;
1637
1662
  onInit?: (editor: TinyMCEEditor) => void;
1638
1663
  children?: ReactElement;
1639
- style?: CSSProperties;
1640
1664
  fullscreenIconTips?: string;
1641
1665
  };
1642
1666
  /**
1643
1667
  * 预览 RichTextEditor 生成的富文本数据
1644
1668
  * ```
1645
- * 1. 如果高度发生变更,可执行 editor.execCommand('mceAutoResize');
1669
+ * 1. 通过 onInit 属性可获取实例:editor
1670
+ * 2. 如果高度发生变更,可执行 editor.execCommand('mceAutoResize');
1671
+ *
1646
1672
  * ```
1647
1673
  * @param props
1648
1674
  * @returns
@@ -1820,13 +1846,21 @@ export interface SmsCountDownProps {
1820
1846
  }
1821
1847
  export declare const SmsCountDown: FC<SmsCountDownProps>;
1822
1848
  export declare const styles: () => void;
1849
+ export type SwitchWrapperValue = string | number | boolean;
1823
1850
  export type SwitchWrapperProps = Omit<SwitchProps, "checked" | "defaultChecked" | "onChange"> & {
1824
- value?: string | number | boolean;
1825
- checkedValue: string | number | boolean;
1826
- unCheckedValue: string | number | boolean;
1827
- onChange?: (value: string | number | boolean) => void;
1851
+ value?: SwitchWrapperValue;
1852
+ checkedValue: SwitchWrapperValue;
1853
+ unCheckedValue: SwitchWrapperValue;
1854
+ onChange?: (value: SwitchWrapperValue) => void;
1828
1855
  tooltipProps?: Omit<TooltipProps, "title">;
1829
- tooltipTitle?: string | ((value?: string | number | boolean) => string | undefined);
1856
+ tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);
1857
+ serviceConfig?: {
1858
+ onRequest: (value: SwitchWrapperValue) => TAny;
1859
+ message?: {
1860
+ success?: string;
1861
+ defaultError?: string;
1862
+ };
1863
+ };
1830
1864
  };
1831
1865
  /**
1832
1866
  * 解决Switch只能接收boolean的限制,与Form.Item结合使用最佳
@@ -1839,6 +1873,7 @@ export type SwitchWrapperProps = Omit<SwitchProps, "checked" | "defaultChecked"
1839
1873
  * <SwitchWrapper checkedValue={2} unCheckedValue={1} />
1840
1874
  * </Form.Item>
1841
1875
  * 5. 可设置tooltip效果数据显示
1876
+ * 6. 可设置 serviceConfig 配置服务调用交互
1842
1877
  * ```
1843
1878
  */
1844
1879
  export declare const SwitchWrapper: (props: SwitchWrapperProps) => JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.2.22",
3
+ "version": "4.2.24",
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{_ as e,a as n}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as o}from"@wove/react/cjs/hooks";import{Editor as t}from"@tinymce/tinymce-react";import{useKeyPress as i}from"ahooks";import{Fragment as a,useRef as l,useState as s}from"react";import c from"@ant-design/icons/es/icons/PlusCircleOutlined";import{Image as u}from"antd";import{d as m}from"./dynamic-node-577ef8fd.js";import{fbaHooks as d}from"./fba-hooks/index.js";import{jsx as f,Fragment as p,jsxs as v}from"react/jsx-runtime";var g=function e(n){var r=n.visible,o=n.url;d.useEffectCustom((function(){if(r){m.append({content:f(c,{onClick:n.close,className:"preview-image-popup-close",twoToneColor:"#1890ff"})})}else{m.remove()}}),[r]);if(!o)return f(p,{});return f(a,{children:f(u,{style:{left:"100px"},preview:{className:"preview-image-popup",maskStyle:{backgroundColor:"rgba(0,0,0,0.85)"},visible:r,src:o,onVisibleChange:function e(){n.close()}}},o)})};var h=["onUploadImage","onChange","className"];var y=function a(c){var u=c.onUploadImage,m=c.onChange,d=c.className,p=e(c,h);var y=l(null);var b=s(""),k=b[0],C=b[1];i((function(){return true}),(function(e){try{if(e.type==="keyup"&&e.key==="Escape"){var n;var r=(n=y.current)==null?void 0:n.editorContainer.classList.contains("tox-fullscreen");if(r){var o;(o=y.current)==null?void 0:o.editorCommands.execCommand("mceFullScreen")}}}catch(e){}}),{events:["keydown","keyup"]});var x=o.useCallbackRef((function(e,n){try{if(e.keyCode==27){var r;var o=(r=y.current)==null?void 0:r.editorContainer.classList.contains("tox-fullscreen");if(o){var t;(t=y.current)==null?void 0:t.editorCommands.execCommand("mceFullScreen")}}}catch(e){}c.onKeyDown==null?void 0:c.onKeyDown(e,n)}));var w=o.useCallbackRef((function(e,n){y.current=n;try{var r,o;(r=n.iframeElement)==null?void 0:(o=r.contentDocument)==null?void 0:o.addEventListener("click",(function(e){var n;if(c.imgPreview&&((n=e.target)==null?void 0:n["tagName"])==="IMG"){C(e.target["src"])}}),true)}catch(e){}p.onInit==null?void 0:p.onInit(e,n)}));var _=o.useCallbackRef((function(e,n){y.current=n;p.onEditorChange==null?void 0:p.onEditorChange(e,n);m==null?void 0:m(e)}));var j="https://file.40017.cn/tcsk/tinymce@6.4.1";return v("div",{className:r("v-editor-wrapper",d),children:[f(t,n({tinymceScriptSrc:j+"/tinymce.min.js"},p,{onInit:w,onKeyDown:x,onEditorChange:_,init:n({promotion:false,language:"zh-Hans",height:500,paste_data_images:u?true:false,autosave_ask_before_unload:false,base_url:j,images_upload_handler:function e(n){return new Promise((function(e,r){var o,t,i;var a=function(n){try{return e(Promise.reject((n==null?void 0:n.message)||"图片上传异常"))}catch(e){return r(e)}};try{o=n.blob();t=new File([o],o.name,{type:o.type});return Promise.resolve(u==null?void 0:u(t)).then((function(n){try{i=n;return e(Promise.resolve(i))}catch(e){return a(e)}}),a)}catch(e){a(e)}}))},content_style:"img {max-width:100%;} table{width:100%}",plugins:"lists link image advlist charmap preview fullscreen code table help",toolbar:"undo redo fullscreen preview | bold italic underline strikethrough |"+"fontsize blocks |"+"alignleft aligncenter alignright alignjustify |"+"outdent indent | numlist bullist advlist |"+"forecolor backcolor removeformat |"+"code image link",font_size_formats:"8px 10px 12px 14px 16px 18px 24px 36px 48px"},c.init)})),f(g,{visible:!!k,url:k,close:function e(){C("")}})]})};export{y as R};
3
- //# sourceMappingURL=rich-text-editor-417bf0d8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text-editor-417bf0d8.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 如果不需要粘贴上传图片,可配置 init.paste_data_images = false\n * 3. 获取富文本实例,通过onInit(_, editor)函数获取\n * 5. 预览富文本数据,使用 RichTextViewer 组件\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n // const images_upload_handler = hooks.useCallbackRef(async (blobInfo: BlobInfo, progress: ProgressFn) => {\n // try {\n // const respData = await props.onUploadImage?.(blobInfo.blob());\n // success(respData);\n // } catch (error) {\n // failure(error.message);\n // }\n // });\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n content_style: 'img {max-width:100%;} table{width:100%}',\n plugins: 'lists link image advlist charmap preview fullscreen code table help',\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent | numlist bullist advlist |' +\n 'forecolor backcolor removeformat |' +\n 'code image link',\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","onUploadImage","onChange","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","_editor$iframeElement","_editor$iframeElement2","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","init","promotion","language","height","paste_data_images","autosave_ask_before_unload","base_url","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_4_Catch","reject","message","$boundEx","file","File","name","resolve","then","$await_5","content_style","plugins","toolbar","font_size_formats"],"mappings":"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"}