@vtx/components 3.1.23 → 3.1.25
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.
|
@@ -99,7 +99,9 @@ var Search = (0, _container["default"])({
|
|
|
99
99
|
|
|
100
100
|
var Content = function Content(props) {
|
|
101
101
|
var className = props.className,
|
|
102
|
-
style = props.style
|
|
102
|
+
style = props.style,
|
|
103
|
+
_props$plusTop = props.plusTop,
|
|
104
|
+
plusTop = _props$plusTop === void 0 ? 0 : _props$plusTop;
|
|
103
105
|
|
|
104
106
|
var _useContext = (0, _react.useContext)(StoreCtx),
|
|
105
107
|
searchHeight = _useContext.searchHeight;
|
|
@@ -107,7 +109,7 @@ var Content = function Content(props) {
|
|
|
107
109
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
108
110
|
className: (0, _classnames["default"])('vtx-table-content', className),
|
|
109
111
|
style: _objectSpread({
|
|
110
|
-
top: pagePaddingTop + searchMarginBottom + searchHeight
|
|
112
|
+
top: pagePaddingTop + searchMarginBottom + searchHeight + plusTop
|
|
111
113
|
}, style)
|
|
112
114
|
}, props.children);
|
|
113
115
|
};
|
|
@@ -115,7 +117,8 @@ var Content = function Content(props) {
|
|
|
115
117
|
Content.propTypes = {
|
|
116
118
|
style: _propTypes["default"].object,
|
|
117
119
|
className: _propTypes["default"].string,
|
|
118
|
-
children: _propTypes["default"].node
|
|
120
|
+
children: _propTypes["default"].node,
|
|
121
|
+
plusTop: _propTypes["default"].number
|
|
119
122
|
}; // eslint-disable-next-line valid-jsdoc
|
|
120
123
|
|
|
121
124
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableLayout.js","names":["StoreCtx","createContext","pagePaddingTop","searchMarginBottom","Page","props","useState","searchHeight","setSearchHeight","onSearchCollapse","searchCollapseEvent$","useEventEmitter","store","onCollapse","height","emit","classsnames","className","style","children","propTypes","PropTypes","object","string","node","func","Search","container","componentClass","Basic","Content","useContext","top","Table","React","cloneElement","Card"],"sources":["vtx-page-layout/TableLayout.jsx"],"sourcesContent":["import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport classsnames from 'classnames';\nimport { createContext } from 'react';\nimport useEventEmitter from 'ahooks/es/useEventEmitter';\nimport container from './container';\nimport Basic from './Basic';\nexport const StoreCtx = createContext({});\n\nconst pagePaddingTop = 16;\nconst searchMarginBottom = 16;\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 页面\n * @param {*} props\n */\nconst Page = props => {\n const [searchHeight, setSearchHeight] = useState(64);\n const { onSearchCollapse } = props;\n const searchCollapseEvent$ = useEventEmitter();\n const store = {\n searchHeight,\n searchCollapseEvent$,\n onCollapse(height) {\n setSearchHeight(height);\n onSearchCollapse && onSearchCollapse(height);\n searchCollapseEvent$.emit();\n },\n };\n return (\n <StoreCtx.Provider value={store}>\n <div className={classsnames('vtx-page--table', props.className)} style={props.style}>\n {props.children}\n </div>\n </StoreCtx.Provider>\n );\n};\n\nPage.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n onSearchCollapse: PropTypes.func,\n};\n\n/**\n * 搜索\n */\nconst Search = container({ componentClass: 'vtx-table-search' })(Basic);\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 内容\n * @param {*} props\n */\nconst Content = props => {\n const { className, style } = props;\n const { searchHeight } = useContext(StoreCtx);\n return (\n <div\n className={classsnames('vtx-table-content', className)}\n style={{\n top: pagePaddingTop + searchMarginBottom + searchHeight,\n ...style,\n }}\n >\n {props.children}\n </div>\n );\n};\n\nContent.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 表格布局\n */\nconst Table = props => {\n const { className, style } = props;\n const { searchCollapseEvent$ } = useContext(StoreCtx);\n\n return (\n <div className={classsnames('vtx-table-wrap', className)} style={style}>\n {React.cloneElement(props.children, {\n ...props.children.props,\n searchCollapseEvent$,\n })}\n </div>\n );\n};\n\nTable.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nconst Card = props => {\n const { className, style } = props;\n\n return (\n <div style={style} className={classsnames('vtx-table-card', className)}>\n {props.children}\n </div>\n );\n};\n\nCard.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nexport default { Page, Search, Content, Table: container()(Table), Card };\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMA,QAAQ,gBAAG,IAAAC,oBAAA,EAAc,EAAd,CAAjB;;AAEP,IAAMC,cAAc,GAAG,EAAvB;AACA,IAAMC,kBAAkB,GAAG,EAA3B,C,CAEA;;AACA;AACA;AACA;AACA;;AACA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAAAC,KAAK,EAAI;EAClB,gBAAwC,IAAAC,eAAA,EAAS,EAAT,CAAxC;EAAA;EAAA,IAAOC,YAAP;EAAA,IAAqBC,eAArB;;EACA,IAAQC,gBAAR,GAA6BJ,KAA7B,CAAQI,gBAAR;EACA,IAAMC,oBAAoB,GAAG,IAAAC,2BAAA,GAA7B;EACA,IAAMC,KAAK,GAAG;IACVL,YAAY,EAAZA,YADU;IAEVG,oBAAoB,EAApBA,oBAFU;IAGVG,UAHU,sBAGCC,MAHD,EAGS;MACfN,eAAe,CAACM,MAAD,CAAf;MACAL,gBAAgB,IAAIA,gBAAgB,CAACK,MAAD,CAApC;MACAJ,oBAAoB,CAACK,IAArB;IACH;EAPS,CAAd;EASA,oBACI,gCAAC,QAAD,CAAU,QAAV;IAAmB,KAAK,EAAEH;EAA1B,gBACI;IAAK,SAAS,EAAE,IAAAI,sBAAA,EAAY,iBAAZ,EAA+BX,KAAK,CAACY,SAArC,CAAhB;IAAiE,KAAK,EAAEZ,KAAK,CAACa;EAA9E,GACKb,KAAK,CAACc,QADX,CADJ,CADJ;AAOH,CApBD;;AAsBAf,IAAI,CAACgB,SAAL,GAAiB;EACbF,KAAK,EAAEG,qBAAA,CAAUC,MADJ;EAEbL,SAAS,EAAEI,qBAAA,CAAUE,MAFR;EAGbJ,QAAQ,EAAEE,qBAAA,CAAUG,IAHP;EAIbf,gBAAgB,EAAEY,qBAAA,CAAUI;AAJf,CAAjB;AAOA;AACA;AACA;;AACA,IAAMC,MAAM,GAAG,IAAAC,qBAAA,EAAU;EAAEC,cAAc,EAAE;AAAlB,CAAV,EAAkDC,iBAAlD,CAAf,C,CAEA;;AACA;AACA;AACA;AACA;;AACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAAzB,KAAK,EAAI;EACrB,IAAQY,SAAR,
|
|
1
|
+
{"version":3,"file":"TableLayout.js","names":["StoreCtx","createContext","pagePaddingTop","searchMarginBottom","Page","props","useState","searchHeight","setSearchHeight","onSearchCollapse","searchCollapseEvent$","useEventEmitter","store","onCollapse","height","emit","classsnames","className","style","children","propTypes","PropTypes","object","string","node","func","Search","container","componentClass","Basic","Content","plusTop","useContext","top","number","Table","React","cloneElement","Card"],"sources":["vtx-page-layout/TableLayout.jsx"],"sourcesContent":["import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport classsnames from 'classnames';\nimport { createContext } from 'react';\nimport useEventEmitter from 'ahooks/es/useEventEmitter';\nimport container from './container';\nimport Basic from './Basic';\nexport const StoreCtx = createContext({});\n\nconst pagePaddingTop = 16;\nconst searchMarginBottom = 16;\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 页面\n * @param {*} props\n */\nconst Page = props => {\n const [searchHeight, setSearchHeight] = useState(64);\n const { onSearchCollapse } = props;\n const searchCollapseEvent$ = useEventEmitter();\n const store = {\n searchHeight,\n searchCollapseEvent$,\n onCollapse(height) {\n setSearchHeight(height);\n onSearchCollapse && onSearchCollapse(height);\n searchCollapseEvent$.emit();\n },\n };\n return (\n <StoreCtx.Provider value={store}>\n <div className={classsnames('vtx-page--table', props.className)} style={props.style}>\n {props.children}\n </div>\n </StoreCtx.Provider>\n );\n};\n\nPage.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n onSearchCollapse: PropTypes.func,\n};\n\n/**\n * 搜索\n */\nconst Search = container({ componentClass: 'vtx-table-search' })(Basic);\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 内容\n * @param {*} props\n */\nconst Content = props => {\n const { className, style, plusTop=0 } = props;\n const { searchHeight } = useContext(StoreCtx);\n return (\n <div\n className={classsnames('vtx-table-content', className)}\n style={{\n top: pagePaddingTop + searchMarginBottom + searchHeight + plusTop,\n ...style,\n }}\n >\n {props.children}\n </div>\n );\n};\n\nContent.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n plusTop: PropTypes.number,\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * 表格布局\n */\nconst Table = props => {\n const { className, style } = props;\n const { searchCollapseEvent$ } = useContext(StoreCtx);\n\n return (\n <div className={classsnames('vtx-table-wrap', className)} style={style}>\n {React.cloneElement(props.children, {\n ...props.children.props,\n searchCollapseEvent$,\n })}\n </div>\n );\n};\n\nTable.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nconst Card = props => {\n const { className, style } = props;\n\n return (\n <div style={style} className={classsnames('vtx-table-card', className)}>\n {props.children}\n </div>\n );\n};\n\nCard.propTypes = {\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n};\n\nexport default { Page, Search, Content, Table: container()(Table), Card };\n"],"mappings":"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"}
|
package/lib/vtx-select/index.js
CHANGED
|
@@ -220,7 +220,7 @@ function getChildren() {
|
|
|
220
220
|
var child = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
221
221
|
var value = arguments.length > 1 ? arguments[1] : undefined;
|
|
222
222
|
var key = (0, _isObject["default"])(value) ? value.key : value;
|
|
223
|
-
return child[key];
|
|
223
|
+
return child[key] || '';
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
VtxSelect.Option = _select["default"].Option;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["VtxSelect","forwardRef","props","ref","useState","popWidth","setPopWidth","elRef","useRef","elId","Date","now","value","mode","size","onChange","maxTagCount","maxTagTextLength","maxTagPlaceholder","showAll","selectStyle","selectAll","defaultBindBodyToPopupContainer","useLayoutEffect","current","clientWidth","newChildren","children","Array","isArray","getContent","child","forEach","item","key","length","map","index","name","getChildren","margin","e","preventDefault","valueClone","splice","options","filter","ite","includes","substring","Empty","PRESENTED_IMAGE_SIMPLE","newProps","showSearch","optionFilterProp","placeholder","allowClear","dropdownRender","menu","valueLength","target","checked","keys","classnames","style","paddingRight","triggerNode","document","body","width","isObject","Option","Select","OptGroup","propTypes","PropTypes","oneOfType","string","array","number","object","func","bool","node"],"sources":["vtx-select/index.jsx"],"sourcesContent":["import React, { useState, useLayoutEffect, useRef, forwardRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Select from 'antd/lib/select';\nimport Tag from 'antd/lib/tag';\nimport Button from 'antd/lib/button';\nimport Empty from 'antd/lib/empty';\nimport Popover from 'antd/lib/popover';\nimport Tooltip from 'antd/lib/tooltip';\nimport Checkbox from 'antd/lib/checkbox';\nimport Divider from 'antd/lib/divider';\nimport MoreOutlined from '@ant-design/icons/MoreOutlined';\nimport isObject from '../_util/isObject';\n\nconst VtxSelect = forwardRef((props, ref) => {\n const [popWidth, setPopWidth] = useState(0);\n const elRef = useRef();\n const elId = useRef(`vtx-select-${Date.now()}`);\n\n const {\n value,\n mode,\n size = 'default', //同步button大小\n onChange,\n maxTagCount = 2,\n maxTagTextLength = 5,\n maxTagPlaceholder = '...',\n showAll = true, //是否显示全部选项\n selectStyle,\n selectAll = true,\n defaultBindBodyToPopupContainer = true,\n } = props;\n\n useLayoutEffect(() => {\n mode === 'multiple' && setPopWidth(elRef.current.clientWidth);\n }, [elRef.current?.clientWidth]);\n\n const newChildren = props.children\n ? Array.isArray(props.children)\n ? props.children\n : [props.children]\n : [];\n\n const getContent = () => {\n const child = {};\n newChildren.forEach(item => {\n child[item.key] = item?.props?.children;\n });\n return (\n <div className=\"vtx-all-list\">\n {Array.isArray(value) && value.length ? (\n value.map((item, index) => {\n const name = getChildren(child, item);\n return (\n <Tag\n style={{ margin: '4px' }}\n key={index}\n closable\n onClose={e => {\n e.preventDefault();\n const valueClone = [...value];\n valueClone.splice(index, 1);\n const options = newChildren.filter(ite =>\n valueClone.includes(ite.props.value),\n );\n onChange(valueClone, options);\n }}\n >\n <Tooltip title={name}>\n {name.length > maxTagTextLength\n ? `${name.substring(0, maxTagTextLength)}...`\n : name}\n </Tooltip>\n </Tag>\n );\n })\n ) : (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n );\n };\n\n let newProps = {\n showSearch: true,\n optionFilterProp: 'children',\n placeholder: '请选择',\n allowClear: true,\n ...props,\n };\n\n if (mode === 'multiple') {\n newProps = {\n ...newProps,\n maxTagCount: maxTagCount,\n maxTagTextLength: maxTagTextLength,\n maxTagPlaceholder: maxTagPlaceholder,\n };\n if (selectAll) {\n newProps = {\n ...newProps,\n dropdownRender: menu => {\n const valueLength = Array.isArray(value) && value.length ? value.length : 0;\n return (\n <div>\n <div\n className=\"vtx-multi-select-all\"\n onMouseDown={e => e.preventDefault()}\n >\n <Checkbox\n indeterminate={valueLength && valueLength < newChildren.length}\n checked={valueLength && valueLength === newChildren.length}\n onChange={e => {\n if (e.target.checked) {\n const keys = newChildren.map(item => item.key);\n onChange && onChange(keys, newChildren);\n } else {\n onChange && onChange([], []);\n }\n }}\n >\n 全选\n </Checkbox>\n </div>\n <Divider style={{ margin: '4px 0' }} />\n {menu}\n </div>\n );\n },\n };\n }\n }\n\n return (\n <div\n className={classnames({\n 'vtx-select': mode !== 'multiple',\n 'vtx-multi-select': mode == 'multiple' || mode == 'tags',\n })}\n id={elId.current}\n ref={elRef}\n style={{\n ...props.style,\n paddingRight: (mode == 'multiple' || mode == 'tags') && showAll ? 32 : 0,\n }}\n >\n <Select\n ref={ref}\n getPopupContainer={triggerNode => {\n return defaultBindBodyToPopupContainer ? document.body : triggerNode;\n }}\n {...newProps}\n style={{ width: '100%', ...selectStyle }}\n >\n {props.children}\n </Select>\n {(mode == 'multiple' || mode == 'tags') && showAll ? (\n <Popover\n content={getContent()}\n placement=\"bottomRight\"\n trigger=\"click\"\n overlayStyle={{ width: popWidth }}\n >\n <Button className=\"vtx-select-count\" icon={<MoreOutlined />} size={size} />\n </Popover>\n ) : null}\n </div>\n );\n});\n\nfunction getChildren(child = {}, value) {\n const key = isObject(value) ? value.key : value;\n return child[key];\n}\n\nVtxSelect.Option = Select.Option;\nVtxSelect.OptGroup = Select.OptGroup;\n\nVtxSelect.propTypes = {\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array,\n PropTypes.number,\n PropTypes.object,\n ]),\n mode: PropTypes.string,\n size: PropTypes.string,\n style: PropTypes.object,\n selectStyle: PropTypes.object,\n onChange: PropTypes.func,\n defaultBindBodyToPopupContainer: PropTypes.bool,\n maxTagCount: PropTypes.number,\n maxTagTextLength: PropTypes.number,\n maxTagPlaceholder: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n showAll: PropTypes.bool,\n children: PropTypes.node,\n selectAll: PropTypes.bool,\n};\n\nexport default VtxSelect;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["VtxSelect","forwardRef","props","ref","useState","popWidth","setPopWidth","elRef","useRef","elId","Date","now","value","mode","size","onChange","maxTagCount","maxTagTextLength","maxTagPlaceholder","showAll","selectStyle","selectAll","defaultBindBodyToPopupContainer","useLayoutEffect","current","clientWidth","newChildren","children","Array","isArray","getContent","child","forEach","item","key","length","map","index","name","getChildren","margin","e","preventDefault","valueClone","splice","options","filter","ite","includes","substring","Empty","PRESENTED_IMAGE_SIMPLE","newProps","showSearch","optionFilterProp","placeholder","allowClear","dropdownRender","menu","valueLength","target","checked","keys","classnames","style","paddingRight","triggerNode","document","body","width","isObject","Option","Select","OptGroup","propTypes","PropTypes","oneOfType","string","array","number","object","func","bool","node"],"sources":["vtx-select/index.jsx"],"sourcesContent":["import React, { useState, useLayoutEffect, useRef, forwardRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport Select from 'antd/lib/select';\r\nimport Tag from 'antd/lib/tag';\r\nimport Button from 'antd/lib/button';\r\nimport Empty from 'antd/lib/empty';\r\nimport Popover from 'antd/lib/popover';\r\nimport Tooltip from 'antd/lib/tooltip';\r\nimport Checkbox from 'antd/lib/checkbox';\r\nimport Divider from 'antd/lib/divider';\r\nimport MoreOutlined from '@ant-design/icons/MoreOutlined';\r\nimport isObject from '../_util/isObject';\r\n\r\nconst VtxSelect = forwardRef((props, ref) => {\r\n const [popWidth, setPopWidth] = useState(0);\r\n const elRef = useRef();\r\n const elId = useRef(`vtx-select-${Date.now()}`);\r\n\r\n const {\r\n value,\r\n mode,\r\n size = 'default', //同步button大小\r\n onChange,\r\n maxTagCount = 2,\r\n maxTagTextLength = 5,\r\n maxTagPlaceholder = '...',\r\n showAll = true, //是否显示全部选项\r\n selectStyle,\r\n selectAll = true,\r\n defaultBindBodyToPopupContainer = true,\r\n } = props;\r\n\r\n useLayoutEffect(() => {\r\n mode === 'multiple' && setPopWidth(elRef.current.clientWidth);\r\n }, [elRef.current?.clientWidth]);\r\n\r\n const newChildren = props.children\r\n ? Array.isArray(props.children)\r\n ? props.children\r\n : [props.children]\r\n : [];\r\n\r\n const getContent = () => {\r\n const child = {};\r\n newChildren.forEach(item => {\r\n child[item.key] = item?.props?.children;\r\n });\r\n return (\r\n <div className=\"vtx-all-list\">\r\n {Array.isArray(value) && value.length ? (\r\n value.map((item, index) => {\r\n const name = getChildren(child, item);\r\n return (\r\n <Tag\r\n style={{ margin: '4px' }}\r\n key={index}\r\n closable\r\n onClose={e => {\r\n e.preventDefault();\r\n const valueClone = [...value];\r\n valueClone.splice(index, 1);\r\n const options = newChildren.filter(ite =>\r\n valueClone.includes(ite.props.value),\r\n );\r\n onChange(valueClone, options);\r\n }}\r\n >\r\n <Tooltip title={name}>\r\n {name.length > maxTagTextLength\r\n ? `${name.substring(0, maxTagTextLength)}...`\r\n : name}\r\n </Tooltip>\r\n </Tag>\r\n );\r\n })\r\n ) : (\r\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n let newProps = {\r\n showSearch: true,\r\n optionFilterProp: 'children',\r\n placeholder: '请选择',\r\n allowClear: true,\r\n ...props,\r\n };\r\n\r\n if (mode === 'multiple') {\r\n newProps = {\r\n ...newProps,\r\n maxTagCount: maxTagCount,\r\n maxTagTextLength: maxTagTextLength,\r\n maxTagPlaceholder: maxTagPlaceholder,\r\n };\r\n if (selectAll) {\r\n newProps = {\r\n ...newProps,\r\n dropdownRender: menu => {\r\n const valueLength = Array.isArray(value) && value.length ? value.length : 0;\r\n return (\r\n <div>\r\n <div\r\n className=\"vtx-multi-select-all\"\r\n onMouseDown={e => e.preventDefault()}\r\n >\r\n <Checkbox\r\n indeterminate={valueLength && valueLength < newChildren.length}\r\n checked={valueLength && valueLength === newChildren.length}\r\n onChange={e => {\r\n if (e.target.checked) {\r\n const keys = newChildren.map(item => item.key);\r\n onChange && onChange(keys, newChildren);\r\n } else {\r\n onChange && onChange([], []);\r\n }\r\n }}\r\n >\r\n 全选\r\n </Checkbox>\r\n </div>\r\n <Divider style={{ margin: '4px 0' }} />\r\n {menu}\r\n </div>\r\n );\r\n },\r\n };\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n className={classnames({\r\n 'vtx-select': mode !== 'multiple',\r\n 'vtx-multi-select': mode == 'multiple' || mode == 'tags',\r\n })}\r\n id={elId.current}\r\n ref={elRef}\r\n style={{\r\n ...props.style,\r\n paddingRight: (mode == 'multiple' || mode == 'tags') && showAll ? 32 : 0,\r\n }}\r\n >\r\n <Select\r\n ref={ref}\r\n getPopupContainer={triggerNode => {\r\n return defaultBindBodyToPopupContainer ? document.body : triggerNode;\r\n }}\r\n {...newProps}\r\n style={{ width: '100%', ...selectStyle }}\r\n >\r\n {props.children}\r\n </Select>\r\n {(mode == 'multiple' || mode == 'tags') && showAll ? (\r\n <Popover\r\n content={getContent()}\r\n placement=\"bottomRight\"\r\n trigger=\"click\"\r\n overlayStyle={{ width: popWidth }}\r\n >\r\n <Button className=\"vtx-select-count\" icon={<MoreOutlined />} size={size} />\r\n </Popover>\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\nfunction getChildren(child = {}, value) {\r\n const key = isObject(value) ? value.key : value;\r\n return child[key] || '';\r\n}\r\n\r\nVtxSelect.Option = Select.Option;\r\nVtxSelect.OptGroup = Select.OptGroup;\r\n\r\nVtxSelect.propTypes = {\r\n value: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.array,\r\n PropTypes.number,\r\n PropTypes.object,\r\n ]),\r\n mode: PropTypes.string,\r\n size: PropTypes.string,\r\n style: PropTypes.object,\r\n selectStyle: PropTypes.object,\r\n onChange: PropTypes.func,\r\n defaultBindBodyToPopupContainer: PropTypes.bool,\r\n maxTagCount: PropTypes.number,\r\n maxTagTextLength: PropTypes.number,\r\n maxTagPlaceholder: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\r\n showAll: PropTypes.bool,\r\n children: PropTypes.node,\r\n selectAll: PropTypes.bool,\r\n};\r\n\r\nexport default VtxSelect;\r\n"],"mappings":"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"}
|
|
@@ -157,7 +157,7 @@ var VtxWangeEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props) {
|
|
|
157
157
|
rtf = event.clipboardData.getData('text/rtf'); // 该条件分支即表示要自定义word粘贴
|
|
158
158
|
|
|
159
159
|
if (!(html && rtf)) {
|
|
160
|
-
_context.next =
|
|
160
|
+
_context.next = 17;
|
|
161
161
|
break;
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -191,7 +191,16 @@ var VtxWangeEditor = /*#__PURE__*/(0, _react.forwardRef)(function (props) {
|
|
|
191
191
|
editor.dangerouslyInsertHtml(html);
|
|
192
192
|
return _context.abrupt("return", false);
|
|
193
193
|
|
|
194
|
-
case
|
|
194
|
+
case 17:
|
|
195
|
+
if (!html) {
|
|
196
|
+
_context.next = 20;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
editor.dangerouslyInsertHtml(html);
|
|
201
|
+
return _context.abrupt("return", false);
|
|
202
|
+
|
|
203
|
+
case 20:
|
|
195
204
|
case "end":
|
|
196
205
|
return _context.stop();
|
|
197
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Boot","registerModule","attachmentModule","registerPlugin","withEmptyHtml","VtxWangeEditor","forwardRef","props","value","onChange","downloadUrl","uploadUrl","placeholder","height","rest","useState","editor","setEditor","useEffect","destroy","editorConfig","MENU_CONF","uploadImage","server","customInsert","res","insertFn","result","data","map","item","id","fileName","Error","uploadVideo","uploadAttachment","file","hoverbarKeys","attachment","menuKeys","customPaste","event","preventDefault","html","clipboardData","getData","rtf","replace","imgSrcs","findAllImgSrcsFromHtml","replaceAllSpanFontSize","Array","isArray","length","rtfImageData","extractImageDataFromRtf","replaceImagesFileSourceWithInlineRepresentation","dangerouslyInsertHtml","toolbarConfig","insertKeys","index","keys","getHtml","propTypes","PropTypes","string","func","number"],"sources":["vtx-wang-editor/index.jsx"],"sourcesContent":["/*eslint-disable*/\nimport '@wangeditor/editor/dist/css/style.css';\nimport React, { forwardRef, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Editor, Toolbar } from '@wangeditor/editor-for-react';\nimport attachmentModule from '@wangeditor/plugin-upload-attachment';\nimport { Boot } from '@wangeditor/editor';\nimport {\n withEmptyHtml,\n findAllImgSrcsFromHtml,\n extractImageDataFromRtf,\n replaceImagesFileSourceWithInlineRepresentation,\n replaceAllSpanFontSize,\n} from './wangEditorUtil';\n\n// 注册插件 处理附件\nBoot.registerModule(attachmentModule);\n// 注册插件 处理为空的时候\nBoot.registerPlugin(withEmptyHtml);\n\nconst VtxWangeEditor = forwardRef(props => {\n const {\n value,\n onChange,\n downloadUrl = '/cloudFile/common/downloadFile?id=',\n uploadUrl = '/cloudFile/common/uploadFile',\n // thumbnailUrl = '/vortex/rest/cloud/np/file/downloadFileThumbnail?outputQuality=0.5&scale=0.2&id=',\n placeholder = '',\n height = 350,\n ...rest\n } = props;\n const [editor, setEditor] = useState(null);\n\n // 及时销毁 editor ,重要!\n useEffect(() => {\n return () => {\n if (editor == null) return;\n editor.destroy();\n setEditor(null);\n };\n }, [editor]);\n // 编辑器配置\n const editorConfig = {\n MENU_CONF: {\n // 插入图片\n uploadImage: {\n server: uploadUrl,\n // onSuccess(file, res) {},\n customInsert(res, insertFn) {\n // res 即服务端的返回结果\n // 从 res 中找到 url alt href ,然后插入图片\n if (res.result == 0) {\n res.data.map(item => {\n insertFn(`${downloadUrl}${item.id}`, item.fileName);\n });\n } else {\n throw new Error(`插入图片失败`);\n }\n },\n },\n // 插入视频\n uploadVideo: {\n server: uploadUrl,\n // onSuccess(file, res) {},\n // 上传成功后,用户自定义插入文件\n customInsert(res, insertFn) {\n if (res.result == 0) {\n res.data.map(item => {\n insertFn(`${downloadUrl}${item.id}`, item.fileName);\n });\n } else {\n throw new Error(`插入视频失败`);\n }\n },\n },\n // 插入附件\n uploadAttachment: {\n server: uploadUrl,\n // onSuccess(file, res) {},\n // 上传成功后,用户自定义插入文件\n customInsert(res, file, insertFn) {\n if (res.result == 0) {\n res.data.map(item => {\n insertFn(item.fileName, `${downloadUrl}${item.id}`);\n });\n } else {\n throw new Error(`插入附件失败`);\n }\n },\n },\n },\n placeholder,\n // 在编辑器中,点击选中“附件”节点时,要弹出的菜单\n hoverbarKeys: {\n attachment: {\n menuKeys: ['downloadAttachment'], // “下载附件”菜单\n },\n },\n customPaste: async (editor, event) => {\n event.preventDefault();\n // 获取粘贴的html部分(??没错粘贴word时候,一部分内容就是html),该部分包含了图片img标签\n let html = event.clipboardData.getData('text/html');\n // 获取rtf数据(从word、wps复制粘贴时有),复制粘贴过程中图片的数据就保存在rtf中\n const rtf = event.clipboardData.getData('text/rtf');\n\n // 该条件分支即表示要自定义word粘贴\n if (html && rtf) {\n // 列表缩进会超出边框,直接过滤掉\n html = html.replace(/text\\-indent:\\-(.*?)pt/gi, '');\n\n // 从html内容中查找粘贴内容中是否有图片元素,并返回img标签的属性src值的集合\n const imgSrcs = findAllImgSrcsFromHtml(html);\n\n html = replaceAllSpanFontSize(html);\n\n // 如果有图片\n if (imgSrcs && Array.isArray(imgSrcs) && imgSrcs.length) {\n // 从rtf内容中查找图片数据\n\n // 从rtf内容中查找图片数据\n const rtfImageData = extractImageDataFromRtf(rtf);\n\n if (rtfImageData.length) {\n html = await replaceImagesFileSourceWithInlineRepresentation(\n html,\n imgSrcs,\n rtfImageData,\n true,\n uploadUrl,\n downloadUrl,\n );\n }\n }\n editor.dangerouslyInsertHtml(html);\n return false;\n }\n },\n };\n // 工具栏配置\n const toolbarConfig = {\n insertKeys: {\n // 自定义插入的位置\n index: 24,\n // “上传附件”菜单\n keys: ['uploadAttachment'],\n },\n };\n return (\n <div className=\"vtx-wang-editor\">\n <Toolbar editor={editor} defaultConfig={toolbarConfig} mode=\"default\" />\n <Editor\n defaultConfig={editorConfig}\n value={value}\n onCreated={editor => {\n setEditor(editor);\n }}\n onChange={editor => {\n onChange(editor.getHtml());\n }}\n mode=\"default\"\n className={'vtx-wang-editor-content'}\n style={{ height }}\n {...rest}\n />\n </div>\n );\n});\n\nVtxWangeEditor.propTypes = {\n value: PropTypes.string,\n onChange: PropTypes.func,\n placeholder: PropTypes.string,\n downloadUrl: PropTypes.string,\n uploadUrl: PropTypes.string,\n height: PropTypes.number,\n};\n\nexport default VtxWangeEditor;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Boot","registerModule","attachmentModule","registerPlugin","withEmptyHtml","VtxWangeEditor","forwardRef","props","value","onChange","downloadUrl","uploadUrl","placeholder","height","rest","useState","editor","setEditor","useEffect","destroy","editorConfig","MENU_CONF","uploadImage","server","customInsert","res","insertFn","result","data","map","item","id","fileName","Error","uploadVideo","uploadAttachment","file","hoverbarKeys","attachment","menuKeys","customPaste","event","preventDefault","html","clipboardData","getData","rtf","replace","imgSrcs","findAllImgSrcsFromHtml","replaceAllSpanFontSize","Array","isArray","length","rtfImageData","extractImageDataFromRtf","replaceImagesFileSourceWithInlineRepresentation","dangerouslyInsertHtml","toolbarConfig","insertKeys","index","keys","getHtml","propTypes","PropTypes","string","func","number"],"sources":["vtx-wang-editor/index.jsx"],"sourcesContent":["/*eslint-disable*/\r\nimport '@wangeditor/editor/dist/css/style.css';\r\nimport React, { forwardRef, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Editor, Toolbar } from '@wangeditor/editor-for-react';\r\nimport attachmentModule from '@wangeditor/plugin-upload-attachment';\r\nimport { Boot } from '@wangeditor/editor';\r\nimport {\r\n withEmptyHtml,\r\n findAllImgSrcsFromHtml,\r\n extractImageDataFromRtf,\r\n replaceImagesFileSourceWithInlineRepresentation,\r\n replaceAllSpanFontSize,\r\n} from './wangEditorUtil';\r\n\r\n// 注册插件 处理附件\r\nBoot.registerModule(attachmentModule);\r\n// 注册插件 处理为空的时候\r\nBoot.registerPlugin(withEmptyHtml);\r\n\r\nconst VtxWangeEditor = forwardRef(props => {\r\n const {\r\n value,\r\n onChange,\r\n downloadUrl = '/cloudFile/common/downloadFile?id=',\r\n uploadUrl = '/cloudFile/common/uploadFile',\r\n // thumbnailUrl = '/vortex/rest/cloud/np/file/downloadFileThumbnail?outputQuality=0.5&scale=0.2&id=',\r\n placeholder = '',\r\n height = 350,\r\n ...rest\r\n } = props;\r\n const [editor, setEditor] = useState(null);\r\n\r\n // 及时销毁 editor ,重要!\r\n useEffect(() => {\r\n return () => {\r\n if (editor == null) return;\r\n editor.destroy();\r\n setEditor(null);\r\n };\r\n }, [editor]);\r\n // 编辑器配置\r\n const editorConfig = {\r\n MENU_CONF: {\r\n // 插入图片\r\n uploadImage: {\r\n server: uploadUrl,\r\n // onSuccess(file, res) {},\r\n customInsert(res, insertFn) {\r\n // res 即服务端的返回结果\r\n // 从 res 中找到 url alt href ,然后插入图片\r\n if (res.result == 0) {\r\n res.data.map(item => {\r\n insertFn(`${downloadUrl}${item.id}`, item.fileName);\r\n });\r\n } else {\r\n throw new Error(`插入图片失败`);\r\n }\r\n },\r\n },\r\n // 插入视频\r\n uploadVideo: {\r\n server: uploadUrl,\r\n // onSuccess(file, res) {},\r\n // 上传成功后,用户自定义插入文件\r\n customInsert(res, insertFn) {\r\n if (res.result == 0) {\r\n res.data.map(item => {\r\n insertFn(`${downloadUrl}${item.id}`, item.fileName);\r\n });\r\n } else {\r\n throw new Error(`插入视频失败`);\r\n }\r\n },\r\n },\r\n // 插入附件\r\n uploadAttachment: {\r\n server: uploadUrl,\r\n // onSuccess(file, res) {},\r\n // 上传成功后,用户自定义插入文件\r\n customInsert(res, file, insertFn) {\r\n if (res.result == 0) {\r\n res.data.map(item => {\r\n insertFn(item.fileName, `${downloadUrl}${item.id}`);\r\n });\r\n } else {\r\n throw new Error(`插入附件失败`);\r\n }\r\n },\r\n },\r\n },\r\n placeholder,\r\n // 在编辑器中,点击选中“附件”节点时,要弹出的菜单\r\n hoverbarKeys: {\r\n attachment: {\r\n menuKeys: ['downloadAttachment'], // “下载附件”菜单\r\n },\r\n },\r\n customPaste: async (editor, event) => {\r\n event.preventDefault();\r\n // 获取粘贴的html部分(??没错粘贴word时候,一部分内容就是html),该部分包含了图片img标签\r\n let html = event.clipboardData.getData('text/html');\r\n // 获取rtf数据(从word、wps复制粘贴时有),复制粘贴过程中图片的数据就保存在rtf中\r\n const rtf = event.clipboardData.getData('text/rtf');\r\n // 该条件分支即表示要自定义word粘贴\r\n if (html && rtf) {\r\n // 列表缩进会超出边框,直接过滤掉\r\n html = html.replace(/text\\-indent:\\-(.*?)pt/gi, '');\r\n\r\n // 从html内容中查找粘贴内容中是否有图片元素,并返回img标签的属性src值的集合\r\n const imgSrcs = findAllImgSrcsFromHtml(html);\r\n\r\n html = replaceAllSpanFontSize(html);\r\n\r\n // 如果有图片\r\n if (imgSrcs && Array.isArray(imgSrcs) && imgSrcs.length) {\r\n // 从rtf内容中查找图片数据\r\n\r\n // 从rtf内容中查找图片数据\r\n const rtfImageData = extractImageDataFromRtf(rtf);\r\n\r\n if (rtfImageData.length) {\r\n html = await replaceImagesFileSourceWithInlineRepresentation(\r\n html,\r\n imgSrcs,\r\n rtfImageData,\r\n true,\r\n uploadUrl,\r\n downloadUrl,\r\n );\r\n }\r\n }\r\n editor.dangerouslyInsertHtml(html);\r\n return false;\r\n } else if (html) {\r\n editor.dangerouslyInsertHtml(html);\r\n return false;\r\n }\r\n },\r\n };\r\n // 工具栏配置\r\n const toolbarConfig = {\r\n insertKeys: {\r\n // 自定义插入的位置\r\n index: 24,\r\n // “上传附件”菜单\r\n keys: ['uploadAttachment'],\r\n },\r\n };\r\n return (\r\n <div className=\"vtx-wang-editor\">\r\n <Toolbar editor={editor} defaultConfig={toolbarConfig} mode=\"default\" />\r\n <Editor\r\n defaultConfig={editorConfig}\r\n value={value}\r\n onCreated={editor => {\r\n setEditor(editor);\r\n }}\r\n onChange={editor => {\r\n onChange(editor.getHtml());\r\n }}\r\n mode=\"default\"\r\n className={'vtx-wang-editor-content'}\r\n style={{ height }}\r\n {...rest}\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nVtxWangeEditor.propTypes = {\r\n value: PropTypes.string,\r\n onChange: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n downloadUrl: PropTypes.string,\r\n uploadUrl: PropTypes.string,\r\n height: PropTypes.number,\r\n};\r\n\r\nexport default VtxWangeEditor;\r\n"],"mappings":"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"}
|