@flatbiz/antd 4.5.47 → 4.5.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/ace-editor-json/index.js +1 -1
- package/esm/ace-editor-json/index.js.map +1 -1
- package/esm/ace-editor-mysql/index.js +1 -1
- package/esm/ace-editor-mysql/index.js.map +1 -1
- package/esm/ace-editor-xml/index.js +1 -1
- package/esm/ace-editor-xml/index.js.map +1 -1
- package/esm/ai-search/index.css +0 -0
- package/esm/ai-search/index.js +11 -0
- package/esm/ai-search/index.js.map +1 -0
- package/esm/bootstrap/index.js +1 -1
- package/esm/bootstrap/index.js.map +1 -1
- package/esm/button-operate/index.js +1 -1
- package/esm/button-operate/index.js.map +1 -1
- package/esm/button-wrapper/index.js +1 -1
- package/esm/button-wrapper/index.js.map +1 -1
- package/esm/cascader-wrapper/index.js +1 -1
- package/esm/cascader-wrapper/index.js.map +1 -1
- package/esm/check-list/index.js +1 -1
- package/esm/check-list/index.js.map +1 -1
- package/esm/config-provider-wrapper/index.js +1 -1
- package/esm/date-range-picker-wrapper-form-item/index.js +1 -1
- package/esm/date-range-picker-wrapper-form-item/index.js.map +1 -1
- package/esm/dialog-alert/index.js +1 -1
- package/esm/dialog-alert/index.js.map +1 -1
- package/esm/dialog-confirm/index.js +1 -1
- package/esm/dialog-confirm/index.js.map +1 -1
- package/esm/dialog-drag-modal/index.js +1 -1
- package/esm/dialog-drag-modal/index.js.map +1 -1
- package/esm/dialog-drawer/index.js +1 -1
- package/esm/dialog-drawer/index.js.map +1 -1
- package/esm/dialog-drawer-content/index.js +1 -1
- package/esm/dialog-drawer-content/index.js.map +1 -1
- package/esm/dialog-loading/index.js +1 -1
- package/esm/dialog-loading/index.js.map +1 -1
- package/esm/dialog-modal/index.js +1 -1
- package/esm/dialog-modal/index.js.map +1 -1
- package/esm/dialog-preview-image/index.js +1 -1
- package/esm/dialog-preview-image/index.js.map +1 -1
- package/esm/drag-collapse/index.js +1 -1
- package/esm/drag-collapse/index.js.map +1 -1
- package/esm/drag-collapse-form-list/index.js +1 -1
- package/esm/drag-collapse-form-list/index.js.map +1 -1
- package/esm/drag-editable-card/index.css +1 -0
- package/esm/drag-editable-card/index.js +2 -2
- package/esm/drag-editable-card/index.js.map +1 -1
- package/esm/drag-editable-table/index.js +1 -1
- package/esm/drag-editable-table/index.js.map +1 -1
- package/esm/drag-editable-table-pro/index.js +1 -1
- package/esm/drag-editable-table-pro/index.js.map +1 -1
- package/esm/drag-form-list/index.js +1 -1
- package/esm/drag-form-list/index.js.map +1 -1
- package/esm/drawer-wrapper/index.js +1 -1
- package/esm/drawer-wrapper/index.js.map +1 -1
- package/esm/dropdown-menu-wrapper/index.js +1 -1
- package/esm/dropdown-menu-wrapper/index.js.map +1 -1
- package/esm/easy-form/index.js +1 -1
- package/esm/easy-form/index.js.map +1 -1
- package/esm/easy-table/index.js +1 -1
- package/esm/easy-table/index.js.map +1 -1
- package/esm/editable-card/index.css +1 -1
- package/esm/editable-card/index.js +2 -2
- package/esm/editable-card/index.js.map +1 -1
- package/esm/editable-field/index.js +1 -1
- package/esm/editable-field/index.js.map +1 -1
- package/esm/editable-table/index.js +1 -1
- package/esm/editable-table/index.js.map +1 -1
- package/esm/editable-table-pro/index.js +1 -1
- package/esm/editable-table-pro/index.js.map +1 -1
- package/esm/error-boundary-wrapper/index.js +1 -1
- package/esm/error-boundary-wrapper/index.js.map +1 -1
- package/esm/fba-app/index.js +1 -1
- package/esm/fba-app/index.js.map +1 -1
- package/esm/fba-hooks/index.js +1 -1
- package/esm/fba-hooks/index.js.map +1 -1
- package/esm/form-item-group/index.js +1 -1
- package/esm/form-item-group/index.js.map +1 -1
- package/esm/form-item-text/index.js +1 -1
- package/esm/form-item-text/index.js.map +1 -1
- package/esm/form-item-wrapper/index.js +1 -1
- package/esm/form-item-wrapper/index.js.map +1 -1
- package/esm/form-list-wrapper/index.js +1 -1
- package/esm/form-list-wrapper/index.js.map +1 -1
- package/esm/index.js +3 -1
- package/esm/input-search-wrapper/index.js +1 -1
- package/esm/input-search-wrapper/index.js.map +1 -1
- package/esm/input-text-area-wrapper/index.js +1 -1
- package/esm/input-text-area-wrapper/index.js.map +1 -1
- package/esm/input-wrapper/index.js +1 -1
- package/esm/input-wrapper/index.js.map +1 -1
- package/esm/json-editor/index.js +1 -1
- package/esm/json-editor/index.js.map +1 -1
- package/esm/label-value-render/index.js +1 -1
- package/esm/label-value-render/index.js.map +1 -1
- package/esm/local-loading/index.js +1 -1
- package/esm/local-loading/index.js.map +1 -1
- package/esm/mention-editor/index.js +1 -1
- package/esm/mention-editor/index.js.map +1 -1
- package/esm/mentions-wrapper/index.js +1 -1
- package/esm/mentions-wrapper/index.js.map +1 -1
- package/esm/modal-wrapper/index.js +1 -1
- package/esm/modal-wrapper/index.js.map +1 -1
- package/esm/number-range-form-item/index.js +1 -1
- package/esm/number-range-form-item/index.js.map +1 -1
- package/esm/pagination-wrapper/index.js +1 -1
- package/esm/pagination-wrapper/index.js.map +1 -1
- package/esm/pdf/index.js +1 -1
- package/esm/pdf/index.js.map +1 -1
- package/esm/pdf-preview/index.js +1 -1
- package/esm/pdf-preview/index.js.map +1 -1
- package/esm/relation-tree/index.js +1 -1
- package/esm/relation-tree/index.js.map +1 -1
- package/esm/resizable-drawer/index.css +1 -0
- package/esm/resizable-drawer/index.js +15 -0
- package/esm/resizable-drawer/index.js.map +1 -0
- package/esm/rich-text-editor/index.js +1 -1
- package/esm/rich-text-editor/index.js.map +1 -1
- package/esm/rich-text-viewer/index.js +1 -1
- package/esm/rich-text-viewer/index.js.map +1 -1
- package/esm/roll-location-center/index.js +1 -1
- package/esm/roll-location-center/index.js.map +1 -1
- package/esm/roll-location-in-view/index.js +1 -1
- package/esm/roll-location-in-view/index.js.map +1 -1
- package/esm/rule-describe/index.js +1 -1
- package/esm/rule-describe/index.js.map +1 -1
- package/esm/search-form/index.js +1 -1
- package/esm/search-form/index.js.map +1 -1
- package/esm/search-menu/index.js +1 -1
- package/esm/search-menu/index.js.map +1 -1
- package/esm/selector-wrapper/index.js +1 -1
- package/esm/selector-wrapper/index.js.map +1 -1
- package/esm/selector-wrapper-search/index.js +1 -1
- package/esm/selector-wrapper-search/index.js.map +1 -1
- package/esm/selector-wrapper-simple/index.js +1 -1
- package/esm/selector-wrapper-simple/index.js.map +1 -1
- package/esm/simple-layout/index.js +1 -1
- package/esm/simple-layout/index.js.map +1 -1
- package/esm/switch-confirm-wrapper/index.js +1 -1
- package/esm/switch-confirm-wrapper/index.js.map +1 -1
- package/esm/table-cell-render/index.js +1 -1
- package/esm/table-cell-render/index.js.map +1 -1
- package/esm/table-scrollbar/index.js +1 -1
- package/esm/table-scrollbar/index.js.map +1 -1
- package/esm/tag-group/index.js +1 -1
- package/esm/tag-group/index.js.map +1 -1
- package/esm/tag-wrapper/index.js +1 -1
- package/esm/tag-wrapper/index.js.map +1 -1
- package/esm/text-css-ellipsis/index.js +1 -1
- package/esm/text-css-ellipsis/index.js.map +1 -1
- package/esm/text-overflow/index.js +1 -1
- package/esm/text-overflow/index.js.map +1 -1
- package/esm/text-overflow-render/index.js +1 -1
- package/esm/text-overflow-render/index.js.map +1 -1
- package/esm/time-range-picker-wrapper-form-item/index.js +1 -1
- package/esm/time-range-picker-wrapper-form-item/index.js.map +1 -1
- package/esm/tips-title/index.css +1 -1
- package/esm/tips-title/index.js +1 -1
- package/esm/tips-title/index.js.map +1 -1
- package/esm/tree-modal/index.js +1 -1
- package/esm/tree-modal/index.js.map +1 -1
- package/esm/tree-modal-selector/index.js +1 -1
- package/esm/tree-modal-selector/index.js.map +1 -1
- package/esm/tree-selector-wrapper/index.js +1 -1
- package/esm/tree-selector-wrapper/index.js.map +1 -1
- package/esm/tree-wrapper/index.js +1 -1
- package/esm/tree-wrapper/index.js.map +1 -1
- package/esm/upload-wrapper/index.js +1 -1
- package/esm/upload-wrapper/index.js.map +1 -1
- package/index.d.ts +60 -8
- package/package.json +6 -3
|
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
|
|
|
8
8
|
import './../flex-layout/index.css';
|
|
9
9
|
import './index.css';
|
|
10
10
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
11
|
-
import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as i}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n,jsonStringToJsonObject as a}from"@flatbiz/utils";import{useState as s,useRef as l,useMemo as m,Fragment as u}from"react";import d from"react-ace";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as p}from"../error-boundary-wrapper/index.js";import{FlexLayout as f}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-json";import"ace-builds/src-noconflict/snippets/json";import{jsxs as
|
|
11
|
+
import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as i}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n,jsonStringToJsonObject as a}from"@flatbiz/utils";import{useState as s,useRef as l,useMemo as m,Fragment as u}from"react";import d from"react-ace";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as p}from"../error-boundary-wrapper/index.js";import{FlexLayout as f}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-json";import"ace-builds/src-noconflict/snippets/json";import{jsxs as j,jsx as h}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"antd";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var g=["value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var v=function v(y){var b=y.value,x=y.onChange,w=y.height,C=y.hiddenVerifyBtn,k=y.autoCompleterList,L=y.onLoad,N=y.hiddenErrorMsg,R=e(y,g);var S=n(w)?"100%":w;var z=s(Date.now()),B=z[0],O=z[1];var _=s(),E=_[0],V=_[1];var A=l();var D=m((function(){if(i(b)){return JSON.stringify(b,null,2)}return b}),[b]);var M=t.useCallbackRef((function(e){if(E){V(undefined)}x==null||x(e)}));var P=t.useCallbackRef((function(e,o,r,t,i){i(null,k==null?void 0:k.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var F=function e(o){A.current=o;var r=o.completers.findIndex((function(e){return e.id==="custom"}));if(r>=0){o.completers[r]={getCompletions:P,id:"custom"}}else{o.completers.push({getCompletions:P,id:"custom"})}L==null||L(o)};var I=function e(o){try{var r=a(o);x==null||x(r)}catch(e){V('数据解析异常,正确格式:{"name":"张三", "age": 20}')}};var Y=j(u,{children:[h(c,{hidden:C===true,type:"primary",block:false,ghost:true,onClick:function e(){var o;var r=(o=A.current)==null?void 0:o.getValue();if(!r){x==null||x(r);return}I(r)},children:"验证&格式化数据"}),!N&&E?h("span",{style:{color:"red",marginLeft:10},children:E}):null]});return j(f,{fullIndex:0,className:r("ace-editor-json",y.className),style:o({height:S},y.style),children:[h("div",{className:"aej-content",children:h(p,{onRenderReset:function e(){x==null||x(undefined);O(Date.now())},children:h(d,o({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},R,{setOptions:o({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},R.setOptions),mode:"json",onLoad:F,onChange:M,onBlur:function e(o,r){var t=r==null?void 0:r.getValue();if(t){I(t)}},value:D}))})}),h("div",{className:"ace-editor-json-footer",style:o({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(Y):h(u,{children:Y})})]},B)};export{v as AceEditorJson};
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-json/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, jsonStringToJsonObject, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, Fragment, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\n\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/snippets/json';\n\nexport type AceEditorJsonProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 是否隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * Json编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn 配置隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJson = (props: AceEditorJsonProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n try {\n const result = jsonStringToJsonObject(inputValue);\n onChange?.(result);\n } catch (error: TAny) {\n setErrorMsg('数据解析异常,正确格式:{\"name\":\"张三\", \"age\": 20}');\n }\n };\n const footer = (\n <Fragment>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n block={false}\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? <span style={{ color: 'red', marginLeft: 10 }}>{errorMsg}</span> : null}\n </Fragment>\n );\n\n return (\n <FlexLayout\n fullIndex={0}\n className={classNames('ace-editor-json', props.className)}\n style={{ height: heightFt, ...props.style }}\n key={rootNodekey}\n >\n <div className=\"aej-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"json\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-json-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : <Fragment>{footer}</Fragment>}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["AceEditorJson","props","value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","result","jsonStringToJsonObject","error","footer","_jsxs","Fragment","children","_jsx","ButtonWrapper","hidden","type","block","ghost","onClick","_editorRef$current","currentValue","getValue","style","color","marginLeft","FlexLayout","fullIndex","className","_classNames","_extends","ErrorBoundaryWrapper","onRenderReset","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-json/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, jsonStringToJsonObject, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, Fragment, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\n\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/snippets/json';\n\nexport type AceEditorJsonProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 是否隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * Json编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn 配置隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJson = (props: AceEditorJsonProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n try {\n const result = jsonStringToJsonObject(inputValue);\n onChange?.(result);\n } catch (error: TAny) {\n setErrorMsg('数据解析异常,正确格式:{\"name\":\"张三\", \"age\": 20}');\n }\n };\n const footer = (\n <Fragment>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n block={false}\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? <span style={{ color: 'red', marginLeft: 10 }}>{errorMsg}</span> : null}\n </Fragment>\n );\n\n return (\n <FlexLayout\n fullIndex={0}\n className={classNames('ace-editor-json', props.className)}\n style={{ height: heightFt, ...props.style }}\n key={rootNodekey}\n >\n <div className=\"aej-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"json\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-json-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : <Fragment>{footer}</Fragment>}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["AceEditorJson","props","value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","result","jsonStringToJsonObject","error","footer","_jsxs","Fragment","children","_jsx","ButtonWrapper","hidden","type","block","ghost","onClick","_editorRef$current","currentValue","getValue","style","color","marginLeft","FlexLayout","fullIndex","className","_classNames","_extends","ErrorBoundaryWrapper","onRenderReset","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
|
|
|
8
8
|
import './../flex-layout/index.css';
|
|
9
9
|
import './index.css';
|
|
10
10
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
11
|
-
import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{useState as i,useRef as a}from"react";import n from"react-ace";import{format as s}from"sql-formatter";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-mysql";import"ace-builds/src-noconflict/snippets/mysql";import{ButtonWrapper as l}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import{jsxs as p,jsx as u}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@flatbiz/utils";import"antd";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";import"../flex-layout/index.js";var c=["value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad"];var d=function e(t){return s(t,{language:"sql"}).replace(/\$ /g,"$").replace(/\{ /g,"{").replace(/ \}/g,"}")};var f=function s(f){var g=i(Date.now()),j=g[0],h=g[1];var v=f.value,y=f.hiddenFormatterBtn,b=f.autoCompleterList,x=f.onChange,w=f.onLoad,C=e(f,c);var L=a();var k=r.useCallbackRef((function(e){x==null||x(e)}));var q=r.useCallbackRef((function(e,t,o,r,i){i(null,b==null?void 0:b.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var R=function e(t){L.current=t;var o=t.completers.findIndex((function(e){return e.id==="custom"}));if(o>=0){t.completers[o]={getCompletions:q,id:"custom"}}else{t.completers.push({getCompletions:q,id:"custom"})}w==null||w(t)};var S=u(l,{hidden:y===true,type:"primary",ghost:true,onClick:function e(){var t;var o=(t=L.current)==null?void 0:t.getValue();x==null||x(d(o||""))},children:"美化"});return p("div",{className:o("ace-editor-mysql",f.className),style:f.style,children:[u(m,{onRenderReset:function e(){x==null||x(undefined);h(Date.now())},children:u(n,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,placeholder:"输入SQL",height:"250px",width:"auto"},C,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},C.setOptions),mode:"mysql",onLoad:R,onChange:k,value:v}))}),u("div",{className:"ace-editor-mysql-footer",style:t({marginTop:10},f.footerStyle),children:f.footerExtraRender?f.footerExtraRender(S):S})]},j)};export{f as AceEditorMysql};
|
|
11
|
+
import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{useState as i,useRef as a}from"react";import n from"react-ace";import{format as s}from"sql-formatter";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-mysql";import"ace-builds/src-noconflict/snippets/mysql";import{ButtonWrapper as l}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import{jsxs as p,jsx as u}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@flatbiz/utils";import"antd";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";import"../flex-layout/index.js";var c=["value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad"];var d=function e(t){return s(t,{language:"sql"}).replace(/\$ /g,"$").replace(/\{ /g,"{").replace(/ \}/g,"}")};var f=function s(f){var g=i(Date.now()),j=g[0],h=g[1];var v=f.value,y=f.hiddenFormatterBtn,b=f.autoCompleterList,x=f.onChange,w=f.onLoad,C=e(f,c);var L=a();var k=r.useCallbackRef((function(e){x==null||x(e)}));var q=r.useCallbackRef((function(e,t,o,r,i){i(null,b==null?void 0:b.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var R=function e(t){L.current=t;var o=t.completers.findIndex((function(e){return e.id==="custom"}));if(o>=0){t.completers[o]={getCompletions:q,id:"custom"}}else{t.completers.push({getCompletions:q,id:"custom"})}w==null||w(t)};var S=u(l,{hidden:y===true,type:"primary",ghost:true,onClick:function e(){var t;var o=(t=L.current)==null?void 0:t.getValue();x==null||x(d(o||""))},children:"美化"});return p("div",{className:o("ace-editor-mysql",f.className),style:f.style,children:[u(m,{onRenderReset:function e(){x==null||x(undefined);h(Date.now())},children:u(n,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,placeholder:"输入SQL",height:"250px",width:"auto"},C,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},C.setOptions),mode:"mysql",onLoad:R,onChange:k,value:v}))}),u("div",{className:"ace-editor-mysql-footer",style:t({marginTop:10},f.footerStyle),children:f.footerExtraRender?f.footerExtraRender(S):S})]},j)};export{f as AceEditorMysql};
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-mysql/editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport type { IAceEditorProps } from 'react-ace';\nimport Ace from 'react-ace';\nimport { format } from 'sql-formatter';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-mysql';\nimport 'ace-builds/src-noconflict/snippets/mysql';\n\nimport { classNames } from '@dimjs/utils';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nconst formatSql = (sqlContent: string) => {\n return format(sqlContent, { language: 'sql' })\n .replace(/\\$ /g, '$')\n .replace(/\\{ /g, '{')\n .replace(/ \\}/g, '}');\n};\n\nexport type AceEditorMysqlProps = Omit<IAceEditorProps, 'theme' | 'mode' | 'value' | 'onChange'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string;\n onChange?: (value?: string) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\nexport const AceEditorMysql = (props: AceEditorMysqlProps) => {\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const { value, hiddenFormatterBtn, autoCompleterList, onChange, onLoad, ...otherProps } = props;\n\n const editorRef = useRef<TAny>();\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const footer = (\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(formatSql(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n );\n\n return (\n <div key={rootNodekey} className={classNames('ace-editor-mysql', props.className)} style={props.style}>\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n placeholder=\"输入SQL\"\n height=\"250px\"\n width=\"auto\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"mysql\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n value={value}\n />\n </ErrorBoundaryWrapper>\n <div className=\"ace-editor-mysql-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </div>\n );\n};\n"],"names":["formatSql","sqlContent","format","language","replace","AceEditorMysql","props","_useState","useState","Date","now","rootNodekey","setRootNodekey","value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","handleChange","_hooks","useCallbackRef","content","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","footer","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","children","_jsxs","className","_classNames","style","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","placeholder","height","width","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","marginTop","footerStyle","footerExtraRender"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-mysql/editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport type { IAceEditorProps } from 'react-ace';\nimport Ace from 'react-ace';\nimport { format } from 'sql-formatter';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-mysql';\nimport 'ace-builds/src-noconflict/snippets/mysql';\n\nimport { classNames } from '@dimjs/utils';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nconst formatSql = (sqlContent: string) => {\n return format(sqlContent, { language: 'sql' })\n .replace(/\\$ /g, '$')\n .replace(/\\{ /g, '{')\n .replace(/ \\}/g, '}');\n};\n\nexport type AceEditorMysqlProps = Omit<IAceEditorProps, 'theme' | 'mode' | 'value' | 'onChange'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string;\n onChange?: (value?: string) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\nexport const AceEditorMysql = (props: AceEditorMysqlProps) => {\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const { value, hiddenFormatterBtn, autoCompleterList, onChange, onLoad, ...otherProps } = props;\n\n const editorRef = useRef<TAny>();\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const footer = (\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(formatSql(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n );\n\n return (\n <div key={rootNodekey} className={classNames('ace-editor-mysql', props.className)} style={props.style}>\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n placeholder=\"输入SQL\"\n height=\"250px\"\n width=\"auto\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"mysql\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n value={value}\n />\n </ErrorBoundaryWrapper>\n <div className=\"ace-editor-mysql-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </div>\n );\n};\n"],"names":["formatSql","sqlContent","format","language","replace","AceEditorMysql","props","_useState","useState","Date","now","rootNodekey","setRootNodekey","value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","handleChange","_hooks","useCallbackRef","content","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","footer","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","children","_jsxs","className","_classNames","style","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","placeholder","height","width","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","marginTop","footerStyle","footerExtraRender"],"mappings":";65CAeA,IAAMA,EAAY,SAAZA,EAAaC,GACjB,OAAOC,EAAOD,EAAY,CAAEE,SAAU,QACnCC,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,IACrB,MAwBaC,EAAiB,SAAjBA,EAAkBC,GAC7B,IAAAC,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAClC,IAAQM,EAAkFP,EAAlFO,MAAOC,EAA2ER,EAA3EQ,mBAAoBC,EAAuDT,EAAvDS,kBAAmBC,EAAoCV,EAApCU,SAAUC,EAA0BX,EAA1BW,OAAWC,EAAUC,EAAKb,EAAKc,GAE/F,IAAMC,EAAYC,IAElB,IAAMC,EAAeC,EAAMC,gBAAe,SAACC,GACzCV,GAAAA,MAAAA,EAAWU,EACb,IAEA,IAAMC,EAAiBH,EAAMC,gBAAe,SAACG,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACAjB,GAAiB,UAAA,EAAjBA,EAAmBkB,KAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXtB,MAAOqB,EAAKC,KAEZC,KAAMF,EAAKG,KACX,IAEN,IAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBlB,EAAUmB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,WAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,YACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEd,eAAAA,EAAgBgB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEjB,eAAAA,EAAgBgB,GAAI,UAC/C,CACA1B,GAAAA,MAAAA,EAASsB,IAGX,IAAMM,EACJC,EAACC,EAAa,CACZC,OAAQlC,IAAuB,KAC/BmC,KAAK,UACLC,MAAK,KACLC,QAAS,SAATA,IAAe,IAAAC,EACb,IAAMC,GAAYD,EAAG/B,EAAUmB,UAAO,UAAA,EAAjBY,EAAmBE,WACxCtC,GAAQ,MAARA,EAAWhB,EAAUqD,GAAgB,IACrC,EAAAE,SACH,OAKH,OACEC,EAAA,MAAA,CAAuBC,UAAWC,EAAW,mBAAoBpD,EAAMmD,WAAYE,MAAOrD,EAAMqD,MAAMJ,SAAA,CACpGT,EAACc,EAAoB,CACnBC,cAAe,SAAfA,IACE7C,GAAAA,MAAAA,EAAW8C,WACXlD,EAAeH,KAAKC,MACpB,EAAA6C,SAEFT,EAACiB,EAAGC,EAAA,CACFC,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBC,YAAY,QACZC,OAAO,QACPC,MAAM,QACFrD,EAAU,CACdsD,WAAUR,EAAA,CACRS,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,QACL9D,OAAQqB,EACRtB,SAAUO,EACVV,MAAOA,OAGXiC,EAAA,MAAA,CAAKW,UAAU,0BAA0BE,MAAKK,EAAA,CAAIgB,UAAW,IAAO1E,EAAM2E,aAAc1B,SACrFjD,EAAM4E,kBAAoB5E,EAAM4E,kBAAkBrC,GAAUA,MAhCvDlC,EAoCd"}
|
|
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
|
|
|
8
8
|
import './../flex-layout/index.css';
|
|
9
9
|
import './index.css';
|
|
10
10
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
11
|
-
import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Space as i}from"antd";import{useState as a,useRef as l,useMemo as s}from"react";import m from"react-ace";import
|
|
11
|
+
import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Space as i}from"antd";import{useState as a,useRef as l,useMemo as s}from"react";import m from"react-ace";import u from"xml-formatter";import{ButtonWrapper as d}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as c}from"../error-boundary-wrapper/index.js";import{FlexLayout as p}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-xml";import"ace-builds/src-noconflict/snippets/xml";import{jsxs as f,jsx as g}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@dimjs/utils/cjs/class-names";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var h=function e(r){var t=0;var o;if(window["ActiveXObject"]){var n=new window["ActiveXObject"]("Microsoft.XMLDOM");n.async="false";n.loadXML(r);if(n.parseError.errorCode!=0){o="错误code: "+n.parseError.errorCode+" \n";o=o+" 错误原因: "+n.parseError.reason+" \n";o=o+" 错误位置: "+n.parseError.line;t=1}else{o="格式正确"}}else if(document.implementation["createDocument"]){var i=new DOMParser;var a=i.parseFromString(r,"text/xml");var l=a.getElementsByTagName("parsererror");if(l.length>0){if(a.documentElement.nodeName=="parsererror"){t=1;o=a.documentElement.childNodes[0].nodeValue}else{t=1;o=a.getElementsByTagName("parsererror")[0].innerHTML}}else{o="格式正确"}}else{t=2;o="浏览器不支持验证,无法验证xml正确性"}return{message:o,result:t==0?true:false}};var v=["value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var j=function j(y){var x=y.value,b=y.onChange,w=y.height,C=y.hiddenVerifyBtn,L=y.hiddenFormatterBtn,E=y.autoCompleterList,k=y.onLoad,M=y.hiddenErrorMsg,N=e(y,v);var B=n(w)?"100%":w;var O=a(Date.now()),S=O[0],_=O[1];var D=a(),R=D[0],V=D[1];var z=l();var A=s((function(){if(o(x)){return JSON.stringify(x,null,2)}return x}),[x]);var F=t.useCallbackRef((function(e){if(R){V(undefined)}b==null||b(e)}));var T=t.useCallbackRef((function(e,r,t,o,n){n(null,E==null?void 0:E.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var I=function e(r){z.current=r;var t=r.completers.findIndex((function(e){return e.id==="custom"}));if(t>=0){r.completers[t]={getCompletions:T,id:"custom"}}else{r.completers.push({getCompletions:T,id:"custom"})}k==null||k(r)};var P=function e(r){var t=h(r);if(t.result){b==null||b(r)}else{V(t.message)}};var X=f(i,{style:{alignItems:"flex-start"},children:[g(d,{hidden:L===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();b==null||b(u(t||""))},children:"美化"}),g(d,{hidden:C===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();if(!t){b==null||b(t);return}P(t)},children:"验证&格式化数据"}),!M&&R?g("span",{style:{color:"red"},dangerouslySetInnerHTML:{__html:R}}):null]});return f(p,{fullIndex:0,className:"ace-editor-xml",style:{height:B},children:[g("div",{className:"aex-content",children:g(c,{onRenderReset:function e(){b==null||b(undefined);_(Date.now())},children:g(m,r({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},N,{setOptions:r({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},N.setOptions),mode:"xml",onLoad:I,onChange:F,onBlur:function e(r,t){var o=t==null?void 0:t.getValue();if(o){P(o)}},value:A}))})}),g("div",{className:"ace-editor-xml-footer",style:r({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(X):X})]},S)};export{j as AceEditorXml};
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-xml/validate-xml.ts","@flatbiz/antd/src/ace-editor-xml/editor.tsx"],"sourcesContent":["/**\n * 验证xml格式的正确性\n * ```\n * result / true 验证通过\n * result / false 验证不通过,message为失败描述(使用富文本渲染)\n * ```\n */\nexport const validateXML = (xmlContent: string) => {\n // errorCode 0是xml正确,1是xml错误,2是无法验证\n let errorCode = 0;\n let errorMessage;\n // code for IE\n if (window['ActiveXObject']) {\n const xmlDoc = new window['ActiveXObject']('Microsoft.XMLDOM');\n xmlDoc.async = 'false';\n xmlDoc.loadXML(xmlContent);\n\n if (xmlDoc.parseError.errorCode != 0) {\n errorMessage = `错误code: ${xmlDoc.parseError.errorCode} \\n`;\n errorMessage = `${errorMessage} 错误原因: ${xmlDoc.parseError.reason} \\n`;\n errorMessage = `${errorMessage} 错误位置: ${xmlDoc.parseError.line}`;\n errorCode = 1;\n } else {\n errorMessage = '格式正确';\n }\n }\n // code for Mozilla, Firefox, Opera, chrome, safari,etc.\n else if (document.implementation['createDocument']) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');\n const error = xmlDoc.getElementsByTagName('parsererror');\n if (error.length > 0) {\n if (xmlDoc.documentElement.nodeName == 'parsererror') {\n errorCode = 1;\n errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;\n } else {\n errorCode = 1;\n errorMessage = xmlDoc.getElementsByTagName('parsererror')[0].innerHTML;\n }\n } else {\n errorMessage = '格式正确';\n }\n } else {\n errorCode = 2;\n errorMessage = '浏览器不支持验证,无法验证xml正确性';\n }\n return {\n message: errorMessage,\n result: errorCode == 0 ? true : false,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport xmlFormat from 'xml-formatter';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\nimport { validateXML } from './validate-xml';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-xml';\nimport 'ace-builds/src-noconflict/snippets/xml';\n\nexport type AceEditorXmlProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * xml编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorXml = (props: AceEditorXmlProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n hiddenFormatterBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n const result = validateXML(inputValue);\n if (result.result) {\n onChange?.(inputValue);\n } else {\n setErrorMsg(result.message);\n }\n };\n\n const footer = (\n <Space style={{ alignItems: 'flex-start' }}>\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(xmlFormat(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? (\n <span style={{ color: 'red' }} dangerouslySetInnerHTML={{ __html: errorMsg }}></span>\n ) : null}\n </Space>\n );\n\n return (\n <FlexLayout fullIndex={0} className=\"ace-editor-xml\" key={rootNodekey} style={{ height: heightFt }}>\n <div className=\"aex-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"xml\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-xml-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["validateXML","xmlContent","errorCode","errorMessage","window","xmlDoc","async","loadXML","parseError","reason","line","document","implementation","parser","DOMParser","parseFromString","error","getElementsByTagName","length","documentElement","nodeName","childNodes","nodeValue","innerHTML","message","result","AceEditorXml","props","value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","footer","_jsxs","Space","style","alignItems","children","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","xmlFormat","_editorRef$current2","color","dangerouslySetInnerHTML","__html","FlexLayout","fullIndex","className","ErrorBoundaryWrapper","onRenderReset","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-xml/validate-xml.ts","@flatbiz/antd/src/ace-editor-xml/editor.tsx"],"sourcesContent":["/**\n * 验证xml格式的正确性\n * ```\n * result / true 验证通过\n * result / false 验证不通过,message为失败描述(使用富文本渲染)\n * ```\n */\nexport const validateXML = (xmlContent: string) => {\n // errorCode 0是xml正确,1是xml错误,2是无法验证\n let errorCode = 0;\n let errorMessage;\n // code for IE\n if (window['ActiveXObject']) {\n const xmlDoc = new window['ActiveXObject']('Microsoft.XMLDOM');\n xmlDoc.async = 'false';\n xmlDoc.loadXML(xmlContent);\n\n if (xmlDoc.parseError.errorCode != 0) {\n errorMessage = `错误code: ${xmlDoc.parseError.errorCode} \\n`;\n errorMessage = `${errorMessage} 错误原因: ${xmlDoc.parseError.reason} \\n`;\n errorMessage = `${errorMessage} 错误位置: ${xmlDoc.parseError.line}`;\n errorCode = 1;\n } else {\n errorMessage = '格式正确';\n }\n }\n // code for Mozilla, Firefox, Opera, chrome, safari,etc.\n else if (document.implementation['createDocument']) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');\n const error = xmlDoc.getElementsByTagName('parsererror');\n if (error.length > 0) {\n if (xmlDoc.documentElement.nodeName == 'parsererror') {\n errorCode = 1;\n errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;\n } else {\n errorCode = 1;\n errorMessage = xmlDoc.getElementsByTagName('parsererror')[0].innerHTML;\n }\n } else {\n errorMessage = '格式正确';\n }\n } else {\n errorCode = 2;\n errorMessage = '浏览器不支持验证,无法验证xml正确性';\n }\n return {\n message: errorMessage,\n result: errorCode == 0 ? true : false,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport xmlFormat from 'xml-formatter';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\nimport { validateXML } from './validate-xml';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-xml';\nimport 'ace-builds/src-noconflict/snippets/xml';\n\nexport type AceEditorXmlProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * xml编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorXml = (props: AceEditorXmlProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n hiddenFormatterBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n const result = validateXML(inputValue);\n if (result.result) {\n onChange?.(inputValue);\n } else {\n setErrorMsg(result.message);\n }\n };\n\n const footer = (\n <Space style={{ alignItems: 'flex-start' }}>\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(xmlFormat(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? (\n <span style={{ color: 'red' }} dangerouslySetInnerHTML={{ __html: errorMsg }}></span>\n ) : null}\n </Space>\n );\n\n return (\n <FlexLayout fullIndex={0} className=\"ace-editor-xml\" key={rootNodekey} style={{ height: heightFt }}>\n <div className=\"aex-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"xml\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-xml-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["validateXML","xmlContent","errorCode","errorMessage","window","xmlDoc","async","loadXML","parseError","reason","line","document","implementation","parser","DOMParser","parseFromString","error","getElementsByTagName","length","documentElement","nodeName","childNodes","nodeValue","innerHTML","message","result","AceEditorXml","props","value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","footer","_jsxs","Space","style","alignItems","children","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","xmlFormat","_editorRef$current2","color","dangerouslySetInnerHTML","__html","FlexLayout","fullIndex","className","ErrorBoundaryWrapper","onRenderReset","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import './../button-wrapper/index.css';
|
|
3
|
+
import './../config-provider-wrapper/index.css';
|
|
4
|
+
import './../fba-hooks/index.css';
|
|
5
|
+
import './../types/index.css';
|
|
6
|
+
import './../fba-utils/index.css';
|
|
7
|
+
import './../flex-layout/index.css';
|
|
8
|
+
import './index.css';
|
|
9
|
+
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
10
|
+
import{classNames as r}from"@dimjs/utils/cjs/class-names";import{aiRequestStop as e,aiRequest as t}from"@flatbiz/ai-request";import{isNotEmptyArray as i}from"@flatbiz/utils";import{Spin as o,Input as n,Progress as a,message as s}from"antd";import{useState as l,useEffect as m}from"react";import{ButtonWrapper as u}from"../button-wrapper/index.js";import{FlexLayout as c}from"../flex-layout/index.js";import{jsxs as p,jsx as d}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"../_rollupPluginBabelHelpers-c0dbec57.js";import"@dimjs/lang/cjs/is-promise";import"@wove/react/cjs/hooks";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var f=function f(j){var y=l(0),g=y[0],v=y[1];var h=l(false),x=h[0],w=h[1];var b=l(),k=b[0],z=b[1];var C=l(false),A=C[0],I=C[1];var P=(j.progressTime||10)*1e3/100;m((function(){if(x){var r=setTimeout((function(){var r=g+1;v(r>95?95:r)}),P);return function(){clearInterval(r)}}else{v(0)}return function(){}}),[x,g,P]);var T=function r(){return new Promise((function(r,e){var o,n,a;I(true);if(!k)return r();var l=function(){try{return r()}catch(r){return e(r)}};var m=function(r){try{void s.error((r==null?void 0:r["message"])||"AI搜索异常");w(false);return l()}catch(r){return e(r)}};try{w(true);o=Date.now();return Promise.resolve(t({questionContent:j.getPromptValue(k),stream:j.stream})).then((function(r){try{n=r;w(false);if(i(n)){j.onAiCallback(n)}else{j.onAiCallback([]);void s.warning("AI搜索结果为空")}a=Date.now();console.log("AI智能查询耗时",(a-o)/1e3);return l()}catch(r){return m(r)}}),m)}catch(r){m(r)}}))};return p("div",{className:r("ai-search",j.className),style:j.style,children:[p("div",{style:{position:"relative"},children:[d(o,{spinning:x,children:d(n.TextArea,{placeholder:j.placeholder,autoSize:j.inputAutoSize||{minRows:3,maxRows:3},status:A&&!k?"error":undefined,onChange:function r(e){z(e.target.value)}})}),d("div",{style:{position:"absolute",left:0,right:0,zIndex:99,bottom:-20},children:g>0?d(a,{percent:g,strokeColor:{"0%":"#108ee9","100%":"#87d068"},style:{margin:0}}):null})]}),p(c,{fullIndex:[0,1],direction:"horizontal",gap:15,style:{marginTop:20},children:[d(u,{type:"primary",ghost:true,onClick:function r(){e();w(false)},children:"停止"}),d(u,{type:"primary",onClick:T,loadingPosition:"center",children:"查询"})]})]})};export{f as AiSearch};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ai-search/ai-search.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { aiRequest, aiRequestStop } from '@flatbiz/ai-request';\nimport { isNotEmptyArray, type TPlainObject } from '@flatbiz/utils';\nimport { Input, message, Progress, Spin } from 'antd';\nimport { useEffect, useState, type CSSProperties } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FlexLayout } from '../flex-layout';\n\ntype AiSearchProps = {\n className?: string;\n style?: CSSProperties;\n /** 获取AI提示词 */\n getPromptValue: (inputValue: string) => string;\n /** AI回调 */\n onAiCallback: (dataList: TPlainObject[]) => void;\n /** 输入框placeholder */\n placeholder?: string;\n /** 默认值:{ minRows: 3, maxRows: 3 } */\n inputAutoSize?: { minRows?: number; maxRows?: number };\n /** 是否使用流式交互 */\n stream?: boolean;\n /** 设置进度条跑完时间,单位秒,默认值:10秒 */\n progressTime?: number;\n};\n\n/**\n * 与AI的一次交互,没有上下文\n */\nexport const AiSearch = (props: AiSearchProps) => {\n const [percent, setPercent] = useState(0);\n const [loading, setLoading] = useState(false);\n const [value, setValue] = useState<string | undefined>();\n const [submitFlag, setSubmitFlag] = useState<boolean>(false);\n\n const timeoutCount = ((props.progressTime || 10) * 1000) / 100;\n\n useEffect(() => {\n if (loading) {\n const interval = setTimeout(() => {\n const progress = percent + 1;\n setPercent(progress > 95 ? 95 : progress);\n }, timeoutCount);\n return () => {\n clearInterval(interval);\n };\n } else {\n setPercent(0);\n }\n return () => {\n //\n };\n }, [loading, percent, timeoutCount]);\n\n const onRequest = async () => {\n setSubmitFlag(true);\n if (!value) return;\n try {\n setLoading(true);\n const timeStart = Date.now();\n const respData = await aiRequest({\n questionContent: props.getPromptValue(value),\n stream: props.stream,\n });\n setLoading(false);\n if (isNotEmptyArray(respData)) {\n props.onAiCallback(respData);\n } else {\n props.onAiCallback([]);\n void message.warning('AI搜索结果为空');\n }\n const timeEnd = Date.now();\n console.log('AI智能查询耗时', (timeEnd - timeStart) / 1000);\n } catch (error) {\n void message.error(error?.['message'] || 'AI搜索异常');\n setLoading(false);\n }\n };\n\n return (\n <div className={classNames('ai-search', props.className)} style={props.style}>\n <div style={{ position: 'relative' }}>\n <Spin spinning={loading}>\n <Input.TextArea\n placeholder={props.placeholder}\n autoSize={props.inputAutoSize || { minRows: 3, maxRows: 3 }}\n status={submitFlag && !value ? 'error' : undefined}\n onChange={(e) => {\n setValue(e.target.value);\n }}\n />\n </Spin>\n <div\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n zIndex: 99,\n bottom: -20,\n }}\n >\n {percent > 0 ? (\n <Progress\n percent={percent}\n strokeColor={{\n '0%': '#108ee9',\n '100%': '#87d068',\n }}\n style={{ margin: 0 }}\n />\n ) : null}\n </div>\n </div>\n <FlexLayout fullIndex={[0, 1]} direction=\"horizontal\" gap={15} style={{ marginTop: 20 }}>\n <ButtonWrapper\n type=\"primary\"\n ghost\n onClick={() => {\n aiRequestStop();\n setLoading(false);\n }}\n >\n 停止\n </ButtonWrapper>\n <ButtonWrapper type=\"primary\" onClick={onRequest} loadingPosition=\"center\">\n 查询\n </ButtonWrapper>\n </FlexLayout>\n </div>\n );\n};\n"],"names":["AiSearch","props","_useState","useState","percent","setPercent","_useState2","loading","setLoading","_useState3","value","setValue","_useState4","submitFlag","setSubmitFlag","timeoutCount","progressTime","useEffect","interval","setTimeout","progress","clearInterval","onRequest","Promise","$return","$error","timeStart","respData","timeEnd","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","Date","now","resolve","aiRequest","questionContent","getPromptValue","stream","then","$await_2","isNotEmptyArray","onAiCallback","warning","console","log","_jsxs","className","_classNames","style","children","position","_jsx","Spin","spinning","Input","TextArea","placeholder","autoSize","inputAutoSize","minRows","maxRows","status","undefined","onChange","e","target","left","right","zIndex","bottom","Progress","strokeColor","margin","FlexLayout","fullIndex","direction","gap","marginTop","ButtonWrapper","type","ghost","onClick","aiRequestStop","loadingPosition"],"mappings":";8rCA4BaA,EAAW,SAAXA,EAAYC,GACvB,IAAAC,EAA8BC,EAAS,GAAhCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAC1B,IAAAI,EAA8BH,EAAS,OAAhCI,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GAC1B,IAAAG,EAA0BN,IAAnBO,EAAKD,EAAA,GAAEE,EAAQF,EAAA,GACtB,IAAAG,EAAoCT,EAAkB,OAA/CU,EAAUD,EAAA,GAAEE,EAAaF,EAAA,GAEhC,IAAMG,GAAiBd,EAAMe,cAAgB,IAAM,IAAQ,IAE3DC,GAAU,WACR,GAAIV,EAAS,CACX,IAAMW,EAAWC,YAAW,WAC1B,IAAMC,EAAWhB,EAAU,EAC3BC,EAAWe,EAAW,GAAK,GAAKA,EACjC,GAAEL,GACH,OAAO,WACLM,cAAcH,GAElB,KAAO,CACLb,EAAW,EACb,CACA,OAAO,YAGR,GAAE,CAACE,EAASH,EAASW,IAEtB,IAAMO,EAAY,SAAZA,IAAY,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GAAA,IAKRC,EACAC,EAWAC,EAhBRd,EAAc,MACd,IAAKJ,EAAO,OAAAc,IAvDhB,IAAIK,aAAJ,IAAI,OAAAL,GAAK,CAAC,MAAAM,GAAW,OAAOL,EAAAK,EAAM,GAAlC,IAAIC,EAAA,SAwESC,GAxEb,SAyEWC,EAAQD,OAAMA,GAAAA,UAAAA,EAAAA,EAAQ,aAAc,UACzCxB,EAAW,OA1EjB,OAAOqB,GAAE,CAAC,MAAAC,GAAW,OAAOL,EAAAK,EAAM,GAwD9B,IACEtB,EAAW,MACLkB,EAAYQ,KAAKC,MACN,OAAAZ,QAAAa,QAAMC,EAAU,CAC/BC,gBAAiBrC,EAAMsC,eAAe7B,GACtC8B,OAAQvC,EAAMuC,UAFCC,MAGf,SAAAC,GA9DR,IA2DYf,EAAWe,EAIjBlC,EAAW,OACX,GAAImC,EAAgBhB,GAAW,CAC7B1B,EAAM2C,aAAajB,EACrB,KAAO,CACL1B,EAAM2C,aAAa,SACdX,EAAQY,QAAQ,WACvB,CACMjB,EAAUM,KAAKC,MACrBW,QAAQC,IAAI,YAAanB,EAAUF,GAAa,KAvEtD,OAAOG,GAAE,CAAC,MAAAC,GAAW,OAAOC,EAAAD,EAAM,CAAC,GAAAC,EAwE9B,CAAC,MAAOC,GAAOD,EAAPC,EAGT,CAAC,GACF,EAED,OACEgB,EAAA,MAAA,CAAKC,UAAWC,EAAW,YAAajD,EAAMgD,WAAYE,MAAOlD,EAAMkD,MAAMC,UAC3EJ,EAAA,MAAA,CAAKG,MAAO,CAAEE,SAAU,YAAaD,SAAA,CACnCE,EAACC,EAAI,CAACC,SAAUjD,EAAQ6C,SACtBE,EAACG,EAAMC,SAAQ,CACbC,YAAa1D,EAAM0D,YACnBC,SAAU3D,EAAM4D,eAAiB,CAAEC,QAAS,EAAGC,QAAS,GACxDC,OAAQnD,IAAeH,EAAQ,QAAUuD,UACzCC,SAAU,SAAVA,EAAWC,GACTxD,EAASwD,EAAEC,OAAO1D,MACpB,MAGJ4C,EAAA,MAAA,CACEH,MAAO,CACLE,SAAU,WACVgB,KAAM,EACNC,MAAO,EACPC,OAAQ,GACRC,QAAS,IACTpB,SAEDhD,EAAU,EACTkD,EAACmB,EAAQ,CACPrE,QAASA,EACTsE,YAAa,CACX,KAAM,UACN,OAAQ,WAEVvB,MAAO,CAAEwB,OAAQ,KAEjB,UAGR3B,EAAC4B,EAAU,CAACC,UAAW,CAAC,EAAG,GAAIC,UAAU,aAAaC,IAAK,GAAI5B,MAAO,CAAE6B,UAAW,IAAK5B,SAAA,CACtFE,EAAC2B,EAAa,CACZC,KAAK,UACLC,MAAK,KACLC,QAAS,SAATA,IACEC,IACA7E,EAAW,MACX,EAAA4C,SACH,OAGDE,EAAC2B,EAAa,CAACC,KAAK,UAAUE,QAAS9D,EAAWgE,gBAAgB,SAAQlC,SAAC,YAMnF"}
|
package/esm/bootstrap/index.js
CHANGED
|
@@ -9,5 +9,5 @@ import './../flex-layout/index.css';
|
|
|
9
9
|
import './../block-layout/index.css';
|
|
10
10
|
import './index.css';
|
|
11
11
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
12
|
-
import{_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{get as r}from"@dimjs/utils/cjs/get";import{toArray as i}from"@flatbiz/utils";import{theme as
|
|
12
|
+
import{_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{get as r}from"@dimjs/utils/cjs/get";import{toArray as i}from"@flatbiz/utils";import{theme as t,App as e}from"antd";import{useEffect as a}from"react";import{C as l}from"../index-83bede1b.js";import{FbaApp as s}from"../fba-app/index.js";import{fbaHooks as m}from"../fba-hooks/index.js";import{jsx as c}from"react/jsx-runtime";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"@wove/react/cjs/hooks";import"@dimjs/utils/cjs/class-names";import"@dimjs/lang/cjs/is-promise";import"ahooks";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"../block-layout/index.js";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";var d=function d(n){var p,g;a((function(){var o=document.body.style.cssText;var i={};if(o){var t=/(.+?):\s*(.+?);/g;var e;while(e=t.exec(o)){var a=e[1].trim();var l=e[2];i[a]=l}}if(n.dark){i["--bg-color"]=r(n,"bgColorConfig.dark.bgColor","#1b1a1a");i["--block-bg-color"]=r(n,"bgColorConfig.dark.blockBgColor","#000")}else{i["--bg-color"]=r(n,"bgColorConfig.light.bgColor","#f9f9f9");i["--block-bg-color"]=r(n,"bgColorConfig.light.blockBgColor","#FFF")}var s="";Object.keys(i).forEach((function(o){if(i[o]){s=s+(o+":"+i[o]+";")}}));document.body.style.cssText=s;if(n.dark){document.body.classList.add("dark-theme")}else{document.body.classList.add("light-theme")}if(n.compact){document.body.classList.add("compact-theme")}}),[n.bgColorConfig,n.dark]);var u=m.useThemeToken();var f=(p=n.configProviderProps)==null||(p=p.theme)==null?void 0:p.algorithm;var j=i(f);j=[].concat(j,[n.dark?t.darkAlgorithm:null,n.compact?t.compactAlgorithm:null]).filter(Boolean);return c(l,o({locale:n.locale,componentSize:"middle",space:{size:"middle"}},n.configProviderProps,{theme:o({},(g=n.configProviderProps)==null?void 0:g.theme,{algorithm:j}),children:c(e,{style:{"--color-primary":u.colorPrimary},className:"bootstrap-app",children:c(s,{children:n.children})})}))};export{d as Bootstrap};
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/bootstrap/bootstrap.tsx"],"sourcesContent":["import { get } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { App, theme } from 'antd';\nimport { CSSProperties, ReactNode, useEffect } from 'react';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { FbaApp } from '../fba-app';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type BootstrapProps = {\n /** 是否紧凑模式 */\n compact?: boolean;\n /** 是否drak模式 */\n dark?: boolean;\n children: ReactNode;\n configProviderProps?: ConfigProviderWrapperProps;\n /** @default zhCN */\n locale?: 'en' | 'zh-cn';\n /**\n * 背景颜色配置\n * ```\n * 默认值:\n * dark: { bgColor: '#1b1a1a', blockBgColor: '#000' }\n * light: { bgColor: '#f9f9f9', blockBgColor: '#FFF' }\n * ```\n */\n bgColorConfig?: {\n dark?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n light?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n };\n};\n/**\n * 如果当前项目入口不使用@flatbiz/pro-layout,必须使用 Bootstrap 组件包装\n * ```\n * Bootstrap 内部\n * 1. 封装 antd App组件\n * 2. 封装 @flatbiz/antd FbaApp组件\n * 3. 适配 light/dark模式\n * 4. 封装 antd ConfigProvider 可配置主题\n * ```\n */\nexport const Bootstrap = (props: BootstrapProps) => {\n useEffect(() => {\n const bodyStyle = document.body.style.cssText;\n const keyValuePairs = {};\n if (bodyStyle) {\n const regex = /(.+?):\\s*(.+?);/g;\n\n let match;\n while ((match = regex.exec(bodyStyle))) {\n const key = match[1].trim();\n const value = match[2];\n keyValuePairs[key] = value;\n }\n }\n if (props.dark) {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.dark.bgColor', '#1b1a1a');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.dark.blockBgColor', '#000');\n } else {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.light.bgColor', '#f9f9f9');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.light.blockBgColor', '#FFF');\n }\n let varStyleText = '';\n Object.keys(keyValuePairs).forEach((key) => {\n if (keyValuePairs[key]) {\n varStyleText = varStyleText + `${key}:${keyValuePairs[key]};`;\n }\n });\n document.body.style.cssText = varStyleText;\n\n if (props.dark) {\n document.body.classList.add('dark-theme');\n } else {\n document.body.classList.add('light-theme');\n }\n if (props.compact) {\n document.body.classList.add('compact-theme');\n }\n }, [props.bgColorConfig, props.dark]);\n\n const innerTheme = fbaHooks.useThemeToken();\n\n const algorithm = props.configProviderProps?.theme?.algorithm;\n\n let algorithmArray = toArray<any>(algorithm);\n\n algorithmArray = [\n ...algorithmArray,\n props.dark ? theme.darkAlgorithm : null,\n props.compact ? theme.compactAlgorithm : null,\n ].filter(Boolean);\n\n return (\n <ConfigProviderWrapper\n locale={props.locale}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...props.configProviderProps}\n theme={{\n ...props.configProviderProps?.theme,\n algorithm: algorithmArray,\n }}\n >\n <App style={{ '--color-primary': innerTheme.colorPrimary } as CSSProperties} className=\"bootstrap-app\">\n <FbaApp>{props.children}</FbaApp>\n </App>\n </ConfigProviderWrapper>\n );\n};\n"],"names":["Bootstrap","props","_props$configProvider","_props$configProvider2","useEffect","bodyStyle","document","body","style","cssText","keyValuePairs","regex","match","exec","key","trim","value","dark","_get","varStyleText","Object","keys","forEach","classList","add","compact","bgColorConfig","innerTheme","fbaHooks","useThemeToken","algorithm","configProviderProps","theme","algorithmArray","toArray","concat","darkAlgorithm","compactAlgorithm","filter","Boolean","_jsx","ConfigProviderWrapper","_extends","locale","componentSize","space","size","children","App","colorPrimary","className","FbaApp"],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/bootstrap/bootstrap.tsx"],"sourcesContent":["import { get } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { App, theme } from 'antd';\nimport { CSSProperties, ReactNode, useEffect } from 'react';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { FbaApp } from '../fba-app';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type BootstrapProps = {\n /** 是否紧凑模式 */\n compact?: boolean;\n /** 是否drak模式 */\n dark?: boolean;\n children: ReactNode;\n configProviderProps?: ConfigProviderWrapperProps;\n /** @default zhCN */\n locale?: 'en' | 'zh-cn';\n /**\n * 背景颜色配置\n * ```\n * 默认值:\n * dark: { bgColor: '#1b1a1a', blockBgColor: '#000' }\n * light: { bgColor: '#f9f9f9', blockBgColor: '#FFF' }\n * ```\n */\n bgColorConfig?: {\n dark?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n light?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n };\n};\n/**\n * 如果当前项目入口不使用@flatbiz/pro-layout,必须使用 Bootstrap 组件包装\n * ```\n * Bootstrap 内部\n * 1. 封装 antd App组件\n * 2. 封装 @flatbiz/antd FbaApp组件\n * 3. 适配 light/dark模式\n * 4. 封装 antd ConfigProvider 可配置主题\n * ```\n */\nexport const Bootstrap = (props: BootstrapProps) => {\n useEffect(() => {\n const bodyStyle = document.body.style.cssText;\n const keyValuePairs = {};\n if (bodyStyle) {\n const regex = /(.+?):\\s*(.+?);/g;\n\n let match;\n while ((match = regex.exec(bodyStyle))) {\n const key = match[1].trim();\n const value = match[2];\n keyValuePairs[key] = value;\n }\n }\n if (props.dark) {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.dark.bgColor', '#1b1a1a');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.dark.blockBgColor', '#000');\n } else {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.light.bgColor', '#f9f9f9');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.light.blockBgColor', '#FFF');\n }\n let varStyleText = '';\n Object.keys(keyValuePairs).forEach((key) => {\n if (keyValuePairs[key]) {\n varStyleText = varStyleText + `${key}:${keyValuePairs[key]};`;\n }\n });\n document.body.style.cssText = varStyleText;\n\n if (props.dark) {\n document.body.classList.add('dark-theme');\n } else {\n document.body.classList.add('light-theme');\n }\n if (props.compact) {\n document.body.classList.add('compact-theme');\n }\n }, [props.bgColorConfig, props.dark]);\n\n const innerTheme = fbaHooks.useThemeToken();\n\n const algorithm = props.configProviderProps?.theme?.algorithm;\n\n let algorithmArray = toArray<any>(algorithm);\n\n algorithmArray = [\n ...algorithmArray,\n props.dark ? theme.darkAlgorithm : null,\n props.compact ? theme.compactAlgorithm : null,\n ].filter(Boolean);\n\n return (\n <ConfigProviderWrapper\n locale={props.locale}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...props.configProviderProps}\n theme={{\n ...props.configProviderProps?.theme,\n algorithm: algorithmArray,\n }}\n >\n <App style={{ '--color-primary': innerTheme.colorPrimary } as CSSProperties} className=\"bootstrap-app\">\n <FbaApp>{props.children}</FbaApp>\n </App>\n </ConfigProviderWrapper>\n );\n};\n"],"names":["Bootstrap","props","_props$configProvider","_props$configProvider2","useEffect","bodyStyle","document","body","style","cssText","keyValuePairs","regex","match","exec","key","trim","value","dark","_get","varStyleText","Object","keys","forEach","classList","add","compact","bgColorConfig","innerTheme","fbaHooks","useThemeToken","algorithm","configProviderProps","theme","algorithmArray","toArray","concat","darkAlgorithm","compactAlgorithm","filter","Boolean","_jsx","ConfigProviderWrapper","_extends","locale","componentSize","space","size","children","App","colorPrimary","className","FbaApp"],"mappings":";mtCA+CaA,EAAY,SAAZA,EAAaC,GAA0B,IAAAC,EAAAC,EAClDC,GAAU,WACR,IAAMC,EAAYC,SAASC,KAAKC,MAAMC,QACtC,IAAMC,EAAgB,CAAA,EACtB,GAAIL,EAAW,CACb,IAAMM,EAAQ,mBAEd,IAAIC,EACJ,MAAQA,EAAQD,EAAME,KAAKR,GAAa,CACtC,IAAMS,EAAMF,EAAM,GAAGG,OACrB,IAAMC,EAAQJ,EAAM,GACpBF,EAAcI,GAAOE,CACvB,CACF,CACA,GAAIf,EAAMgB,KAAM,CACdP,EAAc,cAAgBQ,EAAIjB,EAAO,6BAA8B,WACvES,EAAc,oBAAsBQ,EAAIjB,EAAO,kCAAmC,OACpF,KAAO,CACLS,EAAc,cAAgBQ,EAAIjB,EAAO,8BAA+B,WACxES,EAAc,oBAAsBQ,EAAIjB,EAAO,mCAAoC,OACrF,CACA,IAAIkB,EAAe,GACnBC,OAAOC,KAAKX,GAAeY,SAAQ,SAACR,GAClC,GAAIJ,EAAcI,GAAM,CACtBK,EAAeA,GAAkBL,MAAOJ,EAAcI,GAAO,IAC/D,CACF,IACAR,SAASC,KAAKC,MAAMC,QAAUU,EAE9B,GAAIlB,EAAMgB,KAAM,CACdX,SAASC,KAAKgB,UAAUC,IAAI,aAC9B,KAAO,CACLlB,SAASC,KAAKgB,UAAUC,IAAI,cAC9B,CACA,GAAIvB,EAAMwB,QAAS,CACjBnB,SAASC,KAAKgB,UAAUC,IAAI,gBAC9B,CACD,GAAE,CAACvB,EAAMyB,cAAezB,EAAMgB,OAE/B,IAAMU,EAAaC,EAASC,gBAE5B,IAAMC,GAAS5B,EAAGD,EAAM8B,sBAAmB,OAAA7B,EAAzBA,EAA2B8B,QAA3B9B,UAAAA,EAAAA,EAAkC4B,UAEpD,IAAIG,EAAiBC,EAAaJ,GAElCG,EAAiB,GAAAE,OACZF,EAAc,CACjBhC,EAAMgB,KAAOe,EAAMI,cAAgB,KACnCnC,EAAMwB,QAAUO,EAAMK,iBAAmB,OACzCC,OAAOC,SAET,OACEC,EAACC,EAAqBC,EAAA,CACpBC,OAAQ1C,EAAM0C,OACdC,cAAe,SACfC,MAAO,CAAEC,KAAM,WACX7C,EAAM8B,oBAAmB,CAC7BC,MAAKU,EAAA,IAAAvC,EACAF,EAAM8B,sBAAmB,UAAA,EAAzB5B,EAA2B6B,MAAK,CACnCF,UAAWG,IACXc,SAEFP,EAACQ,EAAG,CAACxC,MAAO,CAAE,kBAAmBmB,EAAWsB,cAAiCC,UAAU,gBAAeH,SACpGP,EAACW,EAAM,CAAAJ,SAAE9C,EAAM8C,eAIvB"}
|
|
@@ -9,5 +9,5 @@ import './../dialog-confirm/index.css';
|
|
|
9
9
|
import './../dialog-modal/index.css';
|
|
10
10
|
import './index.css';
|
|
11
11
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
12
|
-
import r from"@ant-design/icons/es/icons/MoreOutlined";import{_ as e,a as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isUndefined as o}from"@dimjs/lang/cjs/is-undefined";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{isPlainObject as n}from"@dimjs/lang/cjs/is-plain-object";import{isString as s}from"@dimjs/lang/cjs/is-string";import{isPromise as p}from"@dimjs/lang/cjs/is-promise";import{hooks as a}from"@wove/react/cjs/hooks";import{Popover as l,Tooltip as c,Space as d,Divider as m,Popconfirm as u,Button as f}from"antd";import{isValidElement as
|
|
12
|
+
import r from"@ant-design/icons/es/icons/MoreOutlined";import{_ as e,a as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isUndefined as o}from"@dimjs/lang/cjs/is-undefined";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{isPlainObject as n}from"@dimjs/lang/cjs/is-plain-object";import{isString as s}from"@dimjs/lang/cjs/is-string";import{isPromise as p}from"@dimjs/lang/cjs/is-promise";import{hooks as a}from"@wove/react/cjs/hooks";import{Popover as l,Tooltip as c,Space as d,Divider as m,Popconfirm as u,Button as f}from"antd";import{isValidElement as j,Fragment as v,useState as h,useMemo as y,createElement as g}from"react";import{ButtonWrapper as k}from"../button-wrapper/index.js";import{DropdownMenuWrapper as x}from"../dropdown-menu-wrapper/index.js";import{fbaUtils as T}from"../fba-utils/index.js";import{jsx as w,jsxs as P}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@flatbiz/utils";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"ahooks";import"react-dom/client";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"@dimjs/model";var C=["text","onClick","needConfirm","confirmMessage","popconfirmProps","hoverTips","color","tipsType","type","isFold"];var b=function r(e){if(e.hoverTips){if(e.tipsType==="popover"){return w(l,{content:e.hoverTips,zIndex:1e3,children:w("span",{children:e.content})})}return w(c,{title:e.hoverTips,zIndex:1e3,children:w("span",{children:e.content})})}if(j(e.content)){return w(v,{children:e.content})}return w("span",{children:e.content})};var O=function l(c){var v=h(false),O=v[0],F=v[1];var z=a.useCallbackRef((function(r,e){var i=r.onClick==null?void 0:r.onClick(e);if(i&&p(i)){F(true);return i.finally((function(){F(false)}))}return}));var I=c.operateList.filter((function(r){if(!r)return false;if(j(r)){var e,i,o;if(((e=r.props)==null?void 0:e["hidden"])===true)return false;if(((i=r.props)==null?void 0:i["v-hidden"])===true)return false;var t=(o=r.props)==null?void 0:o["v-permission"];if(s(t)){return T.hasPermission(t)}return true}if(n(r)){if(!T.hasPermission(r["permission"])){return false}if(Object.prototype.hasOwnProperty.call(r,"show")){return r["show"]}else if(Object.prototype.hasOwnProperty.call(r,"hidden")){return!r["hidden"]}return true}return false}));var M=y((function(){return I.filter((function(r){if(j(r)){return true}return!r["isFold"]}))}),[I]);var N=y((function(){var r=I.filter((function(r){if(j(r)){return false}return r["isFold"]}));var i=[];r.forEach((function(r){var o=e({},r);delete o.isFold;i.push(o)}));return i}),[I]);var _=c.gap===undefined?10:c.gap;var L=!c.split?_:0;return w("div",{className:t("table-operate",c.className),style:c.style,children:P(d,e({split:c.split?w(m,{type:"vertical"}):null,size:L,wrap:o(c.wrap)?true:c.wrap},c.spaceProps,{children:[M.map((function(r,o){if(r&&j(r)){return w(b,{content:r,hoverTips:r.hoverTips,tipsType:r.tipsType},o)}var t=r.text,n=r.onClick,s=r.needConfirm,p=r.confirmMessage,a=r.popconfirmProps,l=r.hoverTips,c=r.color,d=r.tipsType,m=r.type;r.isFold;var f=i(r,C);var v=m||"link";if(s&&!f.disabled){var h=c?false:true;return g(u,e({okText:"确定",cancelText:"取消",trigger:["click"],placement:"topRight",arrow:true,destroyTooltipOnHide:true},a,{title:p,onConfirm:z.bind(null,r),key:o,okButtonProps:{loading:O},onOpenChange:function r(e){if(!e){F(false)}},onCancel:function r(e){e==null||e.stopPropagation()}}),w(k,e({danger:h},f,{onClick:function r(e){e.stopPropagation()},type:v,children:w(b,{content:t,hoverTips:l,tipsType:d},o)})))}return g(k,e({loadingPosition:"center"},f,{type:v,onClick:function r(e){e.stopPropagation();return n==null?void 0:n(e)},key:o}),w(b,{content:t,hoverTips:l,tipsType:r.tipsType}))})),N.length>0?w(x,e({menuList:N,placement:"bottom"},c.dropdownMenuProps,{children:w(f,{type:"link",className:"fold-more-button",onClick:function r(e){e.stopPropagation()},children:c.foldIcon?c.foldIcon:w(r,{})})})):null]}))})};O.defaultProps={split:true};export{O as ButtonOperate,b as ButtonOperateItemContent};
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-operate/button-operate.tsx"],"sourcesContent":["import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport type { PopconfirmProps, SpaceProps } from 'antd';\nimport { Button, Divider, Popconfirm, Popover, Space, Tooltip } from 'antd';\nimport type { CSSProperties, FC, ReactElement, ReactNode } from 'react';\nimport { Fragment, isValidElement, useMemo, useState } from 'react';\nimport type { ButtonWrapperProps } from '../button-wrapper/button-wrapper.jsx';\nimport { ButtonWrapper } from '../button-wrapper/button-wrapper.jsx';\nimport type { DialogModalProps } from '../dialog-modal/dialog-modal.jsx';\nimport type { DropdownMenuWrapperProps } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { fbaUtils } from '../fba-utils/index.js';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字,isFold=true无效 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n /** 按钮文案 */\n text?: string | ReactElement;\n /** 自定义按钮颜色 */\n color?: string;\n /** 是否需要二次弹框确认 */\n needConfirm?: boolean;\n /** 二次弹框确认文案 */\n confirmMessage?: ReactNode;\n /* isFold=false & needConfirm=true 有效 */\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n /** 是否折叠合拢 */\n isFold?: boolean;\n /* isFold=true & needConfirm=true 有效 */\n confirmModalProps?: DialogModalProps;\n /** 是否显示按钮,优先级高于 hidden */\n show?: boolean;\n}\n\nexport interface ButtonOperateProps {\n className?: string;\n style?: CSSProperties;\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true、v-hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n /** 是否换行,默认true */\n wrap?: boolean;\n /** 隐藏图标Icon */\n foldIcon?: ReactElement;\n /** 按钮之间是否添加分隔符 */\n split?: boolean;\n /** 多个按钮的包装组件Space属性 */\n spaceProps?: SpaceProps;\n /** 间距,默认:10;split=true配置下无效(可通过spaceProps设置间距) */\n gap?: number;\n /** 折叠合拢属性 */\n dropdownMenuProps?: Omit<DropdownMenuWrapperProps, 'menuList'>;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & {\n content: ReactNode;\n },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Tooltip>\n );\n }\n if (isValidElement(props.content)) {\n return <Fragment>{props.content}</Fragment>;\n }\n // ButtonOperate item 内部 span 包文案会有动态效果\n return <span>{props.content}</span>;\n};\n\n/**\n * 按钮组合处理组件\n * ```\n * 1. operateList中存在ReactElement类型的元素,可通过配置 v-permission 属性来设置权限,例如 v-permission=\"add\"\n * 2. operateList中存在ReactElement类型的元素,如果有hidden、v-hidden属性,值为true会隐藏\n *\n *\n * flatbiz/antd@4.2.49\n * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能\n * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题\n * ```\n */\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n if (item.props?.['v-hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return fbaUtils.hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!fbaUtils.hasPermission(item['permission'])) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(item, 'show')) {\n return item['show'];\n } else if (Object.prototype.hasOwnProperty.call(item, 'hidden')) {\n return !item['hidden'];\n }\n return true;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item['isFold'];\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item['isFold'];\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item)) {\n return (\n <ButtonOperateItemContent\n content={item}\n hoverTips={item.hoverTips}\n tipsType={item.tipsType}\n key={index}\n />\n );\n }\n const {\n text,\n onClick,\n needConfirm,\n confirmMessage,\n popconfirmProps,\n hoverTips,\n color,\n tipsType,\n type,\n // 多余字段渲染到react dom上,出现警告\n isFold: _isFold,\n ...otherProps\n } = item;\n const typeFt = type || 'link';\n if (needConfirm && !otherProps.disabled) {\n const danger = color ? false : true;\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrow={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n onCancel={(event) => {\n event?.stopPropagation();\n }}\n >\n <ButtonWrapper\n danger={danger}\n {...otherProps}\n onClick={(event) => {\n event.stopPropagation();\n }}\n type={typeFt}\n >\n <ButtonOperateItemContent\n content={text}\n hoverTips={hoverTips}\n tipsType={tipsType}\n key={index}\n />\n </ButtonWrapper>\n </Popconfirm>\n );\n }\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...otherProps}\n type={typeFt}\n onClick={(event) => {\n event.stopPropagation();\n return onClick?.(event);\n }}\n key={index}\n >\n <ButtonOperateItemContent content={text} hoverTips={hoverTips} tipsType={item.tipsType} />\n </ButtonWrapper>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList} placement=\"bottom\" {...props.dropdownMenuProps}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n split: true,\n};\n"],"names":["ButtonOperateItemContent","props","hoverTips","tipsType","_jsx","Popover","content","zIndex","children","Tooltip","title","isValidElement","Fragment","ButtonOperate","_useState","useState","loading","setLoading","onConfirm","_hooks","useCallbackRef","item","event","result","onClick","_isPromise","finally","operateList","filter","_item$props","_item$props2","_item$props3","permission","_isString","fbaUtils","hasPermission","_isPlainObject","Object","prototype","hasOwnProperty","call","viewList","useMemo","foldList","filterList","forEach","target","_extends","isFold","push","gap","undefined","size","split","className","_classNames","style","_jsxs","Space","Divider","type","wrap","_isUndefined","spaceProps","map","index","text","needConfirm","confirmMessage","popconfirmProps","color","otherProps","_objectWithoutPropertiesLoose","_excluded","typeFt","disabled","danger","_createElement","Popconfirm","okText","cancelText","trigger","placement","arrow","destroyTooltipOnHide","bind","key","okButtonProps","onOpenChange","_open","onCancel","stopPropagation","ButtonWrapper","loadingPosition","length","DropdownMenuWrapper","menuList","dropdownMenuProps","Button","foldIcon","_MoreOutlined","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-operate/button-operate.tsx"],"sourcesContent":["import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport type { PopconfirmProps, SpaceProps } from 'antd';\nimport { Button, Divider, Popconfirm, Popover, Space, Tooltip } from 'antd';\nimport type { CSSProperties, FC, ReactElement, ReactNode } from 'react';\nimport { Fragment, isValidElement, useMemo, useState } from 'react';\nimport type { ButtonWrapperProps } from '../button-wrapper/button-wrapper.jsx';\nimport { ButtonWrapper } from '../button-wrapper/button-wrapper.jsx';\nimport type { DialogModalProps } from '../dialog-modal/dialog-modal.jsx';\nimport type { DropdownMenuWrapperProps } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper/dropdown-menu-wrapper.jsx';\nimport { fbaUtils } from '../fba-utils/index.js';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonWrapperProps {\n /** hover 提示文字,isFold=true无效 */\n hoverTips?: string | React.ReactElement;\n /** hover 提示类型 默认:'tooltip' */\n tipsType?: 'popover' | 'tooltip';\n /** 按钮文案 */\n text?: string | ReactElement;\n /** 自定义按钮颜色 */\n color?: string;\n /** 是否需要二次弹框确认 */\n needConfirm?: boolean;\n /** 二次弹框确认文案 */\n confirmMessage?: ReactNode;\n /* isFold=false & needConfirm=true 有效 */\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n /** 是否折叠合拢 */\n isFold?: boolean;\n /* isFold=true & needConfirm=true 有效 */\n confirmModalProps?: DialogModalProps;\n /** 是否显示按钮,优先级高于 hidden */\n show?: boolean;\n}\n\nexport interface ButtonOperateProps {\n className?: string;\n style?: CSSProperties;\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true、v-hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n /** 是否换行,默认true */\n wrap?: boolean;\n /** 隐藏图标Icon */\n foldIcon?: ReactElement;\n /** 按钮之间是否添加分隔符 */\n split?: boolean;\n /** 多个按钮的包装组件Space属性 */\n spaceProps?: SpaceProps;\n /** 间距,默认:10;split=true配置下无效(可通过spaceProps设置间距) */\n gap?: number;\n /** 折叠合拢属性 */\n dropdownMenuProps?: Omit<DropdownMenuWrapperProps, 'menuList'>;\n}\n\nexport const ButtonOperateItemContent = (\n props: Pick<ButtonOperateItem, 'hoverTips' | 'tipsType'> & {\n content: ReactNode;\n },\n) => {\n if (props.hoverTips) {\n if (props.tipsType === 'popover') {\n return (\n <Popover content={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Popover>\n );\n }\n return (\n <Tooltip title={props.hoverTips} zIndex={1000}>\n <span>{props.content}</span>\n </Tooltip>\n );\n }\n if (isValidElement(props.content)) {\n return <Fragment>{props.content}</Fragment>;\n }\n // ButtonOperate item 内部 span 包文案会有动态效果\n return <span>{props.content}</span>;\n};\n\n/**\n * 按钮组合处理组件\n * ```\n * 1. operateList中存在ReactElement类型的元素,可通过配置 v-permission 属性来设置权限,例如 v-permission=\"add\"\n * 2. operateList中存在ReactElement类型的元素,如果有hidden、v-hidden属性,值为true会隐藏\n *\n *\n * flatbiz/antd@4.2.49\n * 1. 替换 Fold 中 needConfirm交互,有 Popconfirm 改为 dialogConfirm组件实现二次弹框确认功能\n * 2. 修改原因:升级 antd 5.5.1 后,Dropdown 中 Popconfirm弹框组合使用存在问题\n * ```\n */\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n if (item.props?.['v-hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return fbaUtils.hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!fbaUtils.hasPermission(item['permission'])) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(item, 'show')) {\n return item['show'];\n } else if (Object.prototype.hasOwnProperty.call(item, 'hidden')) {\n return !item['hidden'];\n }\n return true;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item['isFold'];\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item['isFold'];\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const gap = props.gap === undefined ? 10 : props.gap;\n const size = !props.split ? gap : 0;\n\n return (\n <div className={classNames('table-operate', props.className)} style={props.style}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n {...props.spaceProps}\n >\n {viewList.map((item, index) => {\n if (item && isValidElement(item)) {\n return (\n <ButtonOperateItemContent\n content={item}\n hoverTips={item.hoverTips}\n tipsType={item.tipsType}\n key={index}\n />\n );\n }\n const {\n text,\n onClick,\n needConfirm,\n confirmMessage,\n popconfirmProps,\n hoverTips,\n color,\n tipsType,\n type,\n // 多余字段渲染到react dom上,出现警告\n isFold: _isFold,\n ...otherProps\n } = item;\n const typeFt = type || 'link';\n if (needConfirm && !otherProps.disabled) {\n const danger = color ? false : true;\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrow={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n onCancel={(event) => {\n event?.stopPropagation();\n }}\n >\n <ButtonWrapper\n danger={danger}\n {...otherProps}\n onClick={(event) => {\n event.stopPropagation();\n }}\n type={typeFt}\n >\n <ButtonOperateItemContent\n content={text}\n hoverTips={hoverTips}\n tipsType={tipsType}\n key={index}\n />\n </ButtonWrapper>\n </Popconfirm>\n );\n }\n return (\n <ButtonWrapper\n loadingPosition=\"center\"\n {...otherProps}\n type={typeFt}\n onClick={(event) => {\n event.stopPropagation();\n return onClick?.(event);\n }}\n key={index}\n >\n <ButtonOperateItemContent content={text} hoverTips={hoverTips} tipsType={item.tipsType} />\n </ButtonWrapper>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList} placement=\"bottom\" {...props.dropdownMenuProps}>\n <Button\n type=\"link\"\n className=\"fold-more-button\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nButtonOperate.defaultProps = {\n split: true,\n};\n"],"names":["ButtonOperateItemContent","props","hoverTips","tipsType","_jsx","Popover","content","zIndex","children","Tooltip","title","isValidElement","Fragment","ButtonOperate","_useState","useState","loading","setLoading","onConfirm","_hooks","useCallbackRef","item","event","result","onClick","_isPromise","finally","operateList","filter","_item$props","_item$props2","_item$props3","permission","_isString","fbaUtils","hasPermission","_isPlainObject","Object","prototype","hasOwnProperty","call","viewList","useMemo","foldList","filterList","forEach","target","_extends","isFold","push","gap","undefined","size","split","className","_classNames","style","_jsxs","Space","Divider","type","wrap","_isUndefined","spaceProps","map","index","text","needConfirm","confirmMessage","popconfirmProps","color","otherProps","_objectWithoutPropertiesLoose","_excluded","typeFt","disabled","danger","_createElement","Popconfirm","okText","cancelText","trigger","placement","arrow","destroyTooltipOnHide","bind","key","okButtonProps","onOpenChange","_open","onCancel","stopPropagation","ButtonWrapper","loadingPosition","length","DropdownMenuWrapper","menuList","dropdownMenuProps","Button","foldIcon","_MoreOutlined","defaultProps"],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ import './../types/index.css';
|
|
|
5
5
|
import './../fba-utils/index.css';
|
|
6
6
|
import './index.css';
|
|
7
7
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
8
|
-
import o from"@ant-design/icons/es/icons/LoadingOutlined";import{a as r,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPromise as e}from"@dimjs/lang/cjs/is-promise";import{hooks as l}from"@wove/react/cjs/hooks";import{classNames as a}from"@dimjs/utils/cjs/class-names";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Button as t}from"antd";import{useState as s}from"react";import{C as c}from"../index-83bede1b.js";import{fbaHooks as m}from"../fba-hooks/index.js";import{fbaUtils as d}from"../fba-utils/index.js";import{jsx as p,jsxs as u}from"react/jsx-runtime";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/model";var f=["loadingPosition","color","debounceDuration","permission","hidden","loading","removeGap"];var
|
|
8
|
+
import o from"@ant-design/icons/es/icons/LoadingOutlined";import{a as r,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPromise as e}from"@dimjs/lang/cjs/is-promise";import{hooks as l}from"@wove/react/cjs/hooks";import{classNames as a}from"@dimjs/utils/cjs/class-names";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Button as t}from"antd";import{useState as s}from"react";import{C as c}from"../index-83bede1b.js";import{fbaHooks as m}from"../fba-hooks/index.js";import{fbaUtils as d}from"../fba-utils/index.js";import{jsx as p,jsxs as u}from"react/jsx-runtime";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/model";var f=["loadingPosition","color","debounceDuration","permission","hidden","loading","removeGap"];var j=function o(r){if(r.color&&!r.disabled){var i={};if(r.type==="link"){i={colorLink:r.color,colorLinkActive:r.color,colorLinkHover:r.color}}else if(r.type==="primary"){i={colorPrimary:r.color,colorPrimaryHover:r.color,colorPrimaryActive:r.color}}else{i={colorPrimaryHover:r.color,colorPrimaryActive:r.color,colorText:r.color,colorBorder:r.color}}return p(c,{theme:{components:{Button:i}},children:r.children})}return r.children};var v=function c(v){var y=v.loadingPosition,h=v.color,g=v.debounceDuration,b=v.permission,k=v.hidden,P=v.loading,x=v.removeGap,C=r(v,f);var w=P;var N=s(false),D=N[0],H=N[1];var L=y===undefined?"left":y;var _=L==="left";var z=n(g)?500:g;var A=a(C.className,{"button-remove-gap":x});m.useEffectCustom((function(){if(!n(P)){H(w||false)}}),[P]);var B=l.useDebounceClick((function(o){var r=v.onClick;if(!r){return}var i=r(o);if(i&&e(i)){H(true);i.catch((function(o){console.error(o)})).finally((function(){H(false)}))}}),z);if(!d.hasPermission(b)){return null}if(k){return null}if(_){return p(j,{color:h,disabled:v.disabled,type:v.type,children:p(t,i({},C,{onClick:B,loading:D,className:A,children:v.children}))})}return p(j,{color:h,disabled:v.disabled,type:v.type,children:u(t,i({},C,{onClick:B,className:A,children:[D&&p("div",{className:"bw-center-loading",children:p(o,{})}),D?p("div",{style:{opacity:.5},children:v.children}):v.children]}))})};export{v as ButtonWrapper};
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-wrapper/button-wrapper.tsx"],"sourcesContent":["import { LoadingOutlined } from '@ant-design/icons';\nimport { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { ReactElement, useState } from 'react';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport './style.less';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'color'> & {\n /** 当返回 Promise 时,按钮自动loading */\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n /** 重复点击间隙,单位毫秒 默认值:500 */\n debounceDuration?: number;\n /** 基于GLOBAL中elemAclLimits按钮权限列表,控制按钮显示、隐藏 */\n permission?: string;\n /** 是否隐藏按钮 */\n hidden?: boolean;\n /** loading 显示位置,默认值:left */\n loadingPosition?: 'left' | 'center';\n /** 移除按钮内边距,一般用于 type=link 类型下 */\n removeGap?: boolean;\n color?: string;\n};\n\nconst DefaultButton = (props: {\n children: ReactElement;\n color?: string;\n type?: ButtonProps['type'];\n disabled?: boolean;\n}) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n {props.children}\n </ConfigProviderWrapper>\n );\n }\n return props.children;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自动loading效果\n * 2. 内置 防抖 效果(在第一触发函数后,在指定时间内再次触发无效,即两次触发的时间间隙大于指定时间)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const { loadingPosition, color, debounceDuration, permission, hidden, loading, removeGap, ...otherProps } =\n props;\n const loadingNew = loading as boolean | undefined;\n const [innerLoading, setLoading] = useState(false);\n const loadingPositionNew = loadingPosition === undefined ? 'left' : loadingPosition;\n const isLoadingLeft = loadingPositionNew === 'left';\n const debounceDurationMew = isUndefinedOrNull(debounceDuration) ? 500 : debounceDuration;\n const className = classNames(otherProps.className, { 'button-remove-gap': removeGap });\n\n fbaHooks.useEffectCustom(() => {\n if (!isUndefinedOrNull(loading)) {\n setLoading(loadingNew || false);\n }\n }, [loading]);\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDurationMew);\n\n if (!fbaUtils.hasPermission(permission)) {\n return null;\n }\n\n if (hidden) {\n return null;\n }\n\n if (isLoadingLeft) {\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick} loading={innerLoading} className={className}>\n {props.children}\n </Button>\n </DefaultButton>\n );\n }\n\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick} className={className}>\n {innerLoading && (\n <div className=\"bw-center-loading\">\n <LoadingOutlined />\n </div>\n )}\n {innerLoading ? <div style={{ opacity: 0.5 }}>{props.children}</div> : props.children}\n </Button>\n </DefaultButton>\n );\n};\n"],"names":["DefaultButton","props","color","disabled","buttonTheme","type","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","_jsx","ConfigProviderWrapper","theme","components","Button","children","ButtonWrapper","loadingPosition","debounceDuration","permission","hidden","loading","removeGap","otherProps","_objectWithoutPropertiesLoose","_excluded","loadingNew","_useState","useState","innerLoading","setLoading","loadingPositionNew","undefined","isLoadingLeft","debounceDurationMew","isUndefinedOrNull","className","_classNames","fbaHooks","useEffectCustom","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","fbaUtils","hasPermission","_extends","_jsxs","_LoadingOutlined","style","opacity"],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/button-wrapper/button-wrapper.tsx"],"sourcesContent":["import { LoadingOutlined } from '@ant-design/icons';\nimport { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { ReactElement, useState } from 'react';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport './style.less';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'color'> & {\n /** 当返回 Promise 时,按钮自动loading */\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n /** 重复点击间隙,单位毫秒 默认值:500 */\n debounceDuration?: number;\n /** 基于GLOBAL中elemAclLimits按钮权限列表,控制按钮显示、隐藏 */\n permission?: string;\n /** 是否隐藏按钮 */\n hidden?: boolean;\n /** loading 显示位置,默认值:left */\n loadingPosition?: 'left' | 'center';\n /** 移除按钮内边距,一般用于 type=link 类型下 */\n removeGap?: boolean;\n color?: string;\n};\n\nconst DefaultButton = (props: {\n children: ReactElement;\n color?: string;\n type?: ButtonProps['type'];\n disabled?: boolean;\n}) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n {props.children}\n </ConfigProviderWrapper>\n );\n }\n return props.children;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自动loading效果\n * 2. 内置 防抖 效果(在第一触发函数后,在指定时间内再次触发无效,即两次触发的时间间隙大于指定时间)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const { loadingPosition, color, debounceDuration, permission, hidden, loading, removeGap, ...otherProps } =\n props;\n const loadingNew = loading as boolean | undefined;\n const [innerLoading, setLoading] = useState(false);\n const loadingPositionNew = loadingPosition === undefined ? 'left' : loadingPosition;\n const isLoadingLeft = loadingPositionNew === 'left';\n const debounceDurationMew = isUndefinedOrNull(debounceDuration) ? 500 : debounceDuration;\n const className = classNames(otherProps.className, { 'button-remove-gap': removeGap });\n\n fbaHooks.useEffectCustom(() => {\n if (!isUndefinedOrNull(loading)) {\n setLoading(loadingNew || false);\n }\n }, [loading]);\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDurationMew);\n\n if (!fbaUtils.hasPermission(permission)) {\n return null;\n }\n\n if (hidden) {\n return null;\n }\n\n if (isLoadingLeft) {\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick} loading={innerLoading} className={className}>\n {props.children}\n </Button>\n </DefaultButton>\n );\n }\n\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick} className={className}>\n {innerLoading && (\n <div className=\"bw-center-loading\">\n <LoadingOutlined />\n </div>\n )}\n {innerLoading ? <div style={{ opacity: 0.5 }}>{props.children}</div> : props.children}\n </Button>\n </DefaultButton>\n );\n};\n"],"names":["DefaultButton","props","color","disabled","buttonTheme","type","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","_jsx","ConfigProviderWrapper","theme","components","Button","children","ButtonWrapper","loadingPosition","debounceDuration","permission","hidden","loading","removeGap","otherProps","_objectWithoutPropertiesLoose","_excluded","loadingNew","_useState","useState","innerLoading","setLoading","loadingPositionNew","undefined","isLoadingLeft","debounceDurationMew","isUndefinedOrNull","className","_classNames","fbaHooks","useEffectCustom","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","fbaUtils","hasPermission","_extends","_jsxs","_LoadingOutlined","style","opacity"],"mappings":";uqCA6BA,IAAMA,EAAgB,SAAhBA,EAAiBC,GAMrB,GAAIA,EAAMC,QAAUD,EAAME,SAAU,CAClC,IAAIC,EAAuC,CAAA,EAC3C,GAAIH,EAAMI,OAAS,OAAQ,CACzBD,EAAc,CACZE,UAAWL,EAAMC,MACjBK,gBAAiBN,EAAMC,MACvBM,eAAgBP,EAAMC,MAE1B,MAAO,GAAID,EAAMI,OAAS,UAAW,CACnCD,EAAc,CACZK,aAAcR,EAAMC,MACpBQ,kBAAmBT,EAAMC,MACzBS,mBAAoBV,EAAMC,MAE9B,KAAO,CACLE,EAAc,CACZM,kBAAmBT,EAAMC,MACzBS,mBAAoBV,EAAMC,MAC1BU,UAAWX,EAAMC,MACjBW,YAAaZ,EAAMC,MAEvB,CAEA,OACEY,EAACC,EAAqB,CACpBC,MAAO,CACLC,WAAY,CACVC,OAAQd,IAEVe,SAEDlB,EAAMkB,UAGb,CACA,OAAOlB,EAAMkB,QACf,MASaC,EAAgB,SAAhBA,EAAiBnB,GAC5B,IAAQoB,EACNpB,EADMoB,gBAAiBnB,EACvBD,EADuBC,MAAOoB,EAC9BrB,EAD8BqB,iBAAkBC,EAChDtB,EADgDsB,WAAYC,EAC5DvB,EAD4DuB,OAAQC,EACpExB,EADoEwB,QAASC,EAC7EzB,EAD6EyB,UAAcC,EAAUC,EACrG3B,EAAK4B,GACP,IAAMC,EAAaL,EACnB,IAAAM,EAAmCC,EAAS,OAArCC,EAAYF,EAAA,GAAEG,EAAUH,EAAA,GAC/B,IAAMI,EAAqBd,IAAoBe,UAAY,OAASf,EACpE,IAAMgB,EAAgBF,IAAuB,OAC7C,IAAMG,EAAsBC,EAAkBjB,GAAoB,IAAMA,EACxE,IAAMkB,EAAYC,EAAWd,EAAWa,UAAW,CAAE,oBAAqBd,IAE1EgB,EAASC,iBAAgB,WACvB,IAAKJ,EAAkBd,GAAU,CAC/BS,EAAWJ,GAAc,MAC3B,CACF,GAAG,CAACL,IAEJ,IAAMmB,EAAUC,EAAMC,kBAAiB,SAACC,GACtC,IAAMH,EAAU3C,EAAM2C,QACtB,IAAKA,EAAS,CACZ,MACF,CACA,IAAMI,EAASJ,EAAQG,GACvB,GAAIC,GAAUC,EAAUD,GAAS,CAC/Bd,EAAW,MACXc,EACGE,OAAM,SAACC,GACNC,QAAQD,MAAMA,EAChB,IACCE,SAAQ,WACPnB,EAAW,MACb,GACJ,CACD,GAAEI,GAEH,IAAKgB,EAASC,cAAchC,GAAa,CACvC,OAAO,IACT,CAEA,GAAIC,EAAQ,CACV,OAAO,IACT,CAEA,GAAIa,EAAe,CACjB,OACEvB,EAACd,EAAa,CAACE,MAAOA,EAAOC,SAAUF,EAAME,SAAUE,KAAMJ,EAAMI,KAAKc,SACtEL,EAACI,EAAMsC,KAAK7B,EAAU,CAAEiB,QAASA,EAASnB,QAASQ,EAAcO,UAAWA,EAAUrB,SACnFlB,EAAMkB,aAIf,CAEA,OACEL,EAACd,EAAa,CAACE,MAAOA,EAAOC,SAAUF,EAAME,SAAUE,KAAMJ,EAAMI,KAAKc,SACtEsC,EAACvC,EAAMsC,KAAK7B,EAAU,CAAEiB,QAASA,EAASJ,UAAWA,EAAUrB,SAAA,CAC5Dc,GACCnB,EAAA,MAAA,CAAK0B,UAAU,oBAAmBrB,SAChCL,EAAA4C,EAAkB,MAGrBzB,EAAenB,EAAA,MAAA,CAAK6C,MAAO,CAAEC,QAAS,IAAMzC,SAAElB,EAAMkB,WAAkBlB,EAAMkB,cAIrF"}
|
|
@@ -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 e from"@ant-design/icons/es/icons/CloseCircleFilled";import n from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as t,_ as a}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as i}from"@wove/react/cjs/hooks";import{isArray as o}from"@dimjs/lang/cjs/is-array";import{get as l}from"@dimjs/utils/cjs/get";import{extend as s}from"@dimjs/utils/cjs/extend";import{toArray as u,isUndefinedOrNull as f,treeNodeParentsList as c}from"@flatbiz/utils";import{Cascader as m,Button as d,Flex as v}from"antd";import{forwardRef as p,useState as g,useRef as h,useMemo as C,useEffect as
|
|
5
|
+
import e from"@ant-design/icons/es/icons/CloseCircleFilled";import n from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as t,_ as a}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as i}from"@wove/react/cjs/hooks";import{isArray as o}from"@dimjs/lang/cjs/is-array";import{get as l}from"@dimjs/utils/cjs/get";import{extend as s}from"@dimjs/utils/cjs/extend";import{toArray as u,isUndefinedOrNull as f,treeNodeParentsList as c}from"@flatbiz/utils";import{Cascader as m,Button as d,Flex as v}from"antd";import{forwardRef as p,useState as g,useRef as h,useMemo as C,useEffect as j,useImperativeHandle as q}from"react";import{fbaHooks as y}from"../fba-hooks/index.js";import{RequestStatus as R}from"../request-status/index.js";import{isPlainObject as b}from"@dimjs/lang/cjs/is-plain-object";import{jsx as L,jsxs as k}from"react/jsx-runtime";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";var w=function e(n){var r=u(n);return r.map((function(e){return b(e)?e==null?void 0:e["value"]:e}))};var P=["serviceConfig","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","responseType","labelInValue"];var x=p((function(u,p){var b=u.serviceConfig,x=u.fieldNames,N=u.isDynamicLoad,S=u.requestMessageConfig,E=u.onSelectorListChange,D=u.responseType,I=u.labelInValue,O=t(u,P);var A=g([]),B=A[0],F=A[1];var J=g("request-init"),K=J[0],M=J[1];var T=h(S);var V=y.useSafeState(false),_=V[0],z=V[1];var H=s(true,{label:"label",value:"value",children:"children"},x);var G=g(),Q=G[0],U=G[1];var W=y.usePrevious(JSON.stringify((b==null?void 0:b.params)||{}));var X=C((function(){return JSON.stringify((b==null?void 0:b.params)||{})}),[b==null?void 0:b.params]);j((function(){T.current=S}),[S]);var Y=function e(n){if(b!=null&&b.onRequestResultAdapter){return b.onRequestResultAdapter(n)}if(x!=null&&x.list){n=l(n,x==null?void 0:x.list)}if(!o(n)){console.warn("接口返回数据不是数组类型,已被忽略",n);return[]}return n};var Z=i.useCallbackRef((function(){return new Promise((function(e,n){var r,t,i,o;if(!(b!=null&&b.onRequest)){return n(new Error("onRequest 调用接口服务不能为空"))}var l=function(){try{return e()}catch(e){return n(e)}};var s=function(e){try{z(false);T.current=a({},T.current,{"request-error":e.message||"获取数据异常"});M("request-error");return l()}catch(e){return n(e)}};try{r=b.params||{};if(b!=null&&b.requiredParamsKeys){t=b==null?void 0:b.requiredParamsKeys.find((function(e){return f(r[e])}));if(t){F([]);M("no-dependencies-params");if(u.value){u.onChange==null||u.onChange(undefined)}return e()}}z(true);M("request-progress");return Promise.resolve(b.onRequest==null?void 0:b.onRequest(r)).then((function(e){try{i=e;o=Y(i);if(N){o.map((function(e){e.isLeaf=e.isLeaf||false}))}z(false);F(o||[]);E==null||E(o||[]);M("request-success");return l()}catch(e){return s(e)}}),s)}catch(e){s(e)}}))}));y.useEffectCustom((function(){var e=w(u.value);if(e.length>0){if(D==="all"){U(e)}else{var n=c(e[0],B,true,H).reverse();if(n.length===0){U([u.value])}else{U(n)}}}else{U(undefined)}}),[B,u.value]);q(p,(function(){return{getCascaderList:function e(){return B}}}));y.useEffectCustom((function(){if(W){if(X!==W){void Z()}}}),[W,X]);var $=i.useCallbackRef((function(){void Z()}));y.useEffectCustom((function(){void Z()}),[]);var ee=function e(n){return new Promise((function(e,r){var t,i,o,l;i=n[n.length-1];i.loading=true;return Promise.resolve(b==null||b.onRequest==null?void 0:b.onRequest(a({},b.params,(t={},t[H.value]=i[H.value],t)))).then((function(n){try{o=n;l=Y(o);if(!l||l.length===0){i.isLeaf=true}else{l.map((function(e){e.isLeaf=e.isLeaf||false}));i.children=l}i.loading=false;E==null||E(B||[]);F([].concat(B));return e()}catch(e){return r(e)}}),r)}))};var ne=i.useCallbackRef((function(e,n){if(I!==true){if(D==="all"){u.onChange==null||u.onChange(e,n)}else{u.onChange==null||u.onChange(e==null?void 0:e[e.length-1],n)}}else{var r=n==null?void 0:n.map((function(e){return{label:e[H.label],value:e[H.value]}}));if(D==="all"){u.onChange==null||u.onChange(r,n)}else{u.onChange==null||u.onChange(r==null?void 0:r[r.length-1],n)}}}));var re=i.useCallbackRef((function(){void(u.onChange==null?void 0:u.onChange(undefined))}));return L(m,a({showSearch:true,allowClear:true},O,{popupClassName:r("cascader-wrapper-popup",O.popupClassName),notFoundContent:L(R,{status:K,loading:_,messageConfig:T.current,errorButton:L(d,{type:"primary",onClick:$,ghost:true,children:"重新获取数据"})}),loading:_,loadData:N?ee:undefined,fieldNames:H,suffixIcon:K==="request-error"?k(v,{style:{display:"inline-flex",gap:10},children:[L(n,{spin:_,onClick:$}),L(e,{style:{color:"#ff4d4f"}})]}):undefined,options:B,value:Q,multiple:false,onChange:ne,onClear:re}))}));export{x as CascaderWrapper};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|