@flatbiz/antd 4.5.55 → 4.5.57
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-groovy/index.js +1 -1
- package/esm/ace-editor-groovy/index.js.map +1 -1
- package/esm/ace-editor-java/index.js +1 -1
- package/esm/ace-editor-java/index.js.map +1 -1
- 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/anchor-steps/index.js +1 -1
- package/esm/anchor-steps/index.js.map +1 -1
- package/esm/bootstrap/index.js +1 -1
- package/esm/bootstrap/index.js.map +1 -1
- package/esm/box-grid/index.js +1 -1
- package/esm/box-grid/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/card-layout/index.css +1 -1
- package/esm/card-layout/index.js +1 -1
- package/esm/card-layout/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/checkbox-wrapper/index.js +1 -1
- package/esm/checkbox-wrapper/index.js.map +1 -1
- package/esm/code-render/index.css +1 -0
- package/esm/code-render/index.js +5 -0
- package/esm/code-render/index.js.map +1 -0
- package/esm/color-picker-wrapper/index.css +1 -1
- package/esm/color-picker-wrapper/index.js +1 -1
- package/esm/color-picker-wrapper/index.js.map +1 -1
- package/esm/config-provider-wrapper/index.js +1 -1
- package/esm/copy-wrapper/index.js +1 -1
- package/esm/copy-wrapper/index.js.map +1 -1
- package/esm/date-picker-wrapper/index.js +1 -1
- package/esm/date-picker-wrapper/index.js.map +1 -1
- package/esm/date-range-picker-wrapper/index.js +1 -1
- package/esm/date-range-picker-wrapper/index.js.map +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/delete-node/index.js +1 -1
- package/esm/delete-node/index.js.map +1 -1
- package/esm/dialog-alert/index.js +1 -1
- package/esm/dialog-confirm/index.js +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.js +1 -1
- 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/drag-table/index.js +1 -1
- package/esm/drag-table/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.js +1 -1
- 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/editor-wrapper/index.js +1 -1
- package/esm/editor-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/fba-utils/index.js +1 -1
- package/esm/fba-utils/index.js.map +1 -1
- package/esm/file-export/index.js +1 -1
- package/esm/file-export/index.js.map +1 -1
- package/esm/file-import/index.js +1 -1
- package/esm/file-import/index.js.map +1 -1
- package/esm/file-select/index.js +1 -1
- package/esm/file-select/index.js.map +1 -1
- package/esm/flex-layout/index.js +1 -1
- package/esm/flex-layout/index.js.map +1 -1
- package/esm/form-grid/index.js +1 -1
- package/esm/form-grid/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/form-wrapper/index.js +1 -1
- package/esm/form-wrapper/index.js.map +1 -1
- package/esm/full-screen/index.js +1 -1
- package/esm/full-screen/index.js.map +1 -1
- package/esm/icon-wrapper/index.js +1 -1
- package/esm/icon-wrapper/index.js.map +1 -1
- package/esm/{index-83bede1b.js → index-853b36e6.js} +2 -2
- package/esm/{index-83bede1b.js.map → index-853b36e6.js.map} +1 -1
- package/esm/index.js +2 -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-layout/index.js +1 -1
- package/esm/label-value-layout/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-action/index.js +1 -1
- package/esm/modal-action/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/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/radio-group-wrapper/index.js +1 -1
- package/esm/radio-group-wrapper/index.js.map +1 -1
- package/esm/relation-tree/index.js +1 -1
- package/esm/relation-tree/index.js.map +1 -1
- package/esm/request-status/index.js +1 -1
- package/esm/request-status/index.js.map +1 -1
- package/esm/resizable-drawer/index.js +1 -1
- package/esm/resizable-drawer/index.js.map +1 -1
- 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/sms-count-down/index.js +1 -1
- package/esm/sms-count-down/index.js.map +1 -1
- package/esm/split-wrapper/index.js +1 -1
- package/esm/split-wrapper/index.js.map +1 -1
- package/esm/styles/index.css +1 -1
- package/esm/svg-http-view/index.js +1 -1
- package/esm/svg-http-view/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/switch-wrapper/index.js +1 -1
- package/esm/switch-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/tabs-sticky/index.js +1 -1
- package/esm/tabs-sticky/index.js.map +1 -1
- package/esm/tabs-wrapper/index.js +1 -1
- package/esm/tabs-wrapper/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-list-render/index.js +1 -1
- package/esm/tag-list-render/index.js.map +1 -1
- package/esm/tag-list-select/index.js +1 -1
- package/esm/tag-list-select/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-symbol-wrapper/index.js +1 -1
- package/esm/text-symbol-wrapper/index.js.map +1 -1
- package/esm/time-ea73b2fb.js +3 -0
- package/esm/{time-53b3f55f.js.map → time-ea73b2fb.js.map} +1 -1
- package/esm/time-picker-wrapper/index.js +1 -1
- package/esm/time-picker-wrapper/index.js.map +1 -1
- package/esm/time-range-picker-wrapper/index.js +1 -1
- package/esm/time-range-picker-wrapper/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/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/esm/use-responsive-point-1e6d93d9.js +3 -0
- package/esm/{use-responsive-point-21b8c601.js.map → use-responsive-point-1e6d93d9.js.map} +1 -1
- package/esm/x-mind-preview/index.js +1 -1
- package/esm/x-mind-preview/index.js.map +1 -1
- package/index.d.ts +61 -4
- package/package.json +4 -5
- package/esm/time-53b3f55f.js +0 -3
- package/esm/use-responsive-point-21b8c601.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-layout/label-value-layout.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { getUuid } from '@flatbiz/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: {\n label: string | ReactElement;\n value?: string | number | ReactElement | null;\n span?: number;\n hidden?: boolean;\n }[];\n labelWidth?: number | 'auto';\n // 一行占几组,默认1\n column?: number;\n /** 添加边框 */\n bordered?: boolean;\n className?: string;\n style?: CSSProperties;\n /** 边框 row 内边距 */\n borderedRowPadding?: CSSProperties['padding'];\n};\n\n/**\n * @deprecated 已过期,请使用 LabelValueRender 组件\n * options[].span 是 Description.Item 的数量。 span={2} 会占用两个 DescriptionItem 的宽度\n * options[].hidden 是否隐藏 Description.Item\n */\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const labelWidth = props.labelWidth === 'auto' ? 'auto' : `${props.labelWidth || 120}px`;\n const className = classNames('v-label-value-layout', props.className, {\n 'lvl-bordered-padding': props.borderedRowPadding,\n });\n const style = {\n '--v-label-value-layout-Width': labelWidth,\n '--v-label-value-layout-row-padding': props.borderedRowPadding,\n ...props.style,\n } as CSSProperties;\n\n const options = useMemo(() => {\n const dataList = props.options.filter((item) => !item.hidden);\n return dataList.map((item) => {\n return { key: getUuid(), ...item };\n });\n }, [props.options]);\n\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {options.map((item) => {\n return (\n <Descriptions.Item key={item.key} label={item.label} span={item.span}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n"],"names":["LabelValueLayout","props","labelWidth","className","_classNames","borderedRowPadding","style","_extends","options","useMemo","dataList","filter","item","hidden","map","key","getUuid","_jsx","Descriptions","column","bordered","size","children","Item","label","span","value"],"mappings":";gRA6BaA,EAAmB,SAAnBA,EAAoBC,GAC/B,IAAMC,EAAaD,EAAMC,aAAe,OAAS,QAAYD,EAAMC,YAAc,KAAO,KACxF,IAAMC,EAAYC,EAAW,uBAAwBH,EAAME,UAAW,CACpE,uBAAwBF,EAAMI,qBAEhC,IAAMC,EAAKC,EAAA,CACT,+BAAgCL,EAChC,qCAAsCD,EAAMI,oBACzCJ,EAAMK,OAGX,IAAME,EAAUC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-layout/label-value-layout.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { getUuid } from '@flatbiz/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: {\n label: string | ReactElement;\n value?: string | number | ReactElement | null;\n span?: number;\n hidden?: boolean;\n }[];\n labelWidth?: number | 'auto';\n // 一行占几组,默认1\n column?: number;\n /** 添加边框 */\n bordered?: boolean;\n className?: string;\n style?: CSSProperties;\n /** 边框 row 内边距 */\n borderedRowPadding?: CSSProperties['padding'];\n};\n\n/**\n * @deprecated 已过期,请使用 LabelValueRender 组件\n * options[].span 是 Description.Item 的数量。 span={2} 会占用两个 DescriptionItem 的宽度\n * options[].hidden 是否隐藏 Description.Item\n */\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const labelWidth = props.labelWidth === 'auto' ? 'auto' : `${props.labelWidth || 120}px`;\n const className = classNames('v-label-value-layout', props.className, {\n 'lvl-bordered-padding': props.borderedRowPadding,\n });\n const style = {\n '--v-label-value-layout-Width': labelWidth,\n '--v-label-value-layout-row-padding': props.borderedRowPadding,\n ...props.style,\n } as CSSProperties;\n\n const options = useMemo(() => {\n const dataList = props.options.filter((item) => !item.hidden);\n return dataList.map((item) => {\n return { key: getUuid(), ...item };\n });\n }, [props.options]);\n\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {options.map((item) => {\n return (\n <Descriptions.Item key={item.key} label={item.label} span={item.span}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n"],"names":["LabelValueLayout","props","labelWidth","className","_classNames","borderedRowPadding","style","_extends","options","useMemo","dataList","filter","item","hidden","map","key","getUuid","_jsx","Descriptions","column","bordered","size","children","Item","label","span","value"],"mappings":";gRA6BaA,EAAmB,SAAnBA,EAAoBC,GAC/B,IAAMC,EAAaD,EAAMC,aAAe,OAAS,QAAYD,EAAMC,YAAc,KAAO,KACxF,IAAMC,EAAYC,EAAW,uBAAwBH,EAAME,UAAW,CACpE,uBAAwBF,EAAMI,qBAEhC,IAAMC,EAAKC,EAAA,CACT,+BAAgCL,EAChC,qCAAsCD,EAAMI,oBACzCJ,EAAMK,OAGX,IAAME,EAAUC,EAAQ,WACtB,IAAMC,EAAWT,EAAMO,QAAQG,OAAO,SAACC,GAAI,OAAMA,EAAKC,SACtD,OAAOH,EAASI,IAAI,SAACF,GACnB,OAAAL,EAAA,CAASQ,IAAKC,KAAcJ,EAC9B,EACF,EAAG,CAACX,EAAMO,UAEV,OACES,EAACC,EAAY,CACXC,OAAQlB,EAAMkB,QAAU,EACxBC,SAAUnB,EAAMmB,SAChBC,KAAK,QACLlB,UAAWA,EACXG,MAAOA,EAAMgB,SAEZd,EAAQM,IAAI,SAACF,GACZ,OACEK,EAACC,EAAaK,KAAI,CAAgBC,MAAOZ,EAAKY,MAAOC,KAAMb,EAAKa,KAAKH,SAClEV,EAAKc,OADgBd,EAAKG,QAOvC"}
|
|
@@ -6,5 +6,5 @@ import './../text-symbol-wrapper/index.css';
|
|
|
6
6
|
import './../tips-wrapper/index.css';
|
|
7
7
|
import './index.css';
|
|
8
8
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
9
|
-
import{hooks as e}from"@wove/react/cjs/hooks";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as l,useMemo as t,isValidElement as a}from"react";import{arrayTotal as n,isUndefinedOrNull as s,isNumber as o}from"@flatbiz/utils";import{BoxGrid as u}from"../box-grid/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{TextOverflow as v}from"../text-overflow/index.js";import{TextSymbolWrapper as p}from"../text-symbol-wrapper/index.js";import{TipsWrapper as f}from"../tips-wrapper/index.js";import{jsx as m,jsxs as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-number";import"ahooks";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-
|
|
9
|
+
import{hooks as e}from"@wove/react/cjs/hooks";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as l,useMemo as t,isValidElement as a}from"react";import{arrayTotal as n,isUndefinedOrNull as s,isNumber as o}from"@flatbiz/utils";import{BoxGrid as u}from"../box-grid/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{TextOverflow as v}from"../text-overflow/index.js";import{TextSymbolWrapper as p}from"../text-symbol-wrapper/index.js";import{TipsWrapper as f}from"../tips-wrapper/index.js";import{jsx as m,jsxs as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-number";import"ahooks";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"antd";import"@dimjs/utils/cjs/uuid";import"@dimjs/lang/cjs/is-string";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var h=function e(r){var l=[];var t=0;var a=[];for(var s=0;s<r.length;s++){var o=r[s];var u=o.grid;var d=i({},o,{grid:u});if(t+u<=24&&u>0){t+=u;a.push(d)}else{l.push(a);t=u;a=[d]}}if(a.length>0){l.push(a)}if(l.length>0){l=l.map(function(e,r){if(e.length===1){e[0].grid=24}else{var i=n(e,"grid");var t=e[e.length-1];if(i<24){t.grid=24-i+t.grid}}if(r===l.length-1){return e.map(function(e){e.isLast=true;return e})}return e})}var v=[];l.forEach(function(e){v=v.concat(e)});return v};var x=function n(x){var g=d.useResponsivePoint()||"";var b=l(),j=b[0],y=b[1];var k=x.column,w=x.forceColumn,C=x.labelAlign,T=x.labelWidth,z=x.options,N=x.border,B=x.bordered,S=x.width,P=x.size,L=P===void 0?"default":P,R=x.direction,q=R===void 0?"auto":R,E=x.gutter,H=x.hiddenValueHover;var W=k&&[1,2,3,4,6,12].includes(k)?k:4;var _=!s(B)?B:N;var A=t(function(){if(q==="horizontal"||q==="vertical")return q;if(g==="xs"||j==="xs")return"vertical";return"horizontal"},[j,q,g]);var O=t(function(){if(A==="vertical")return true;return s(x.ellipsis)?true:x.ellipsis},[A,x.ellipsis]);var Q=T?o(T)?T+"px":T:"100px";var V=t(function(){if(w){var e=24/w;return{xs:e,sm:e,md:e,lg:e,xl:e,xxl:e}}var r={1:{xs:24,sm:24,md:24,lg:24,xl:24,xxl:24},2:{xs:24,sm:12,md:12,lg:12,xl:12,xxl:12},3:{xs:24,sm:12,md:12,lg:8,xl:8,xxl:8},4:{xs:24,sm:12,md:12,lg:6,xl:6,xxl:6},6:{xs:24,sm:12,md:8,lg:6,xl:4,xxl:4}};return r[W]},[W,w]);var D=t(function(){if(!j)return undefined;var e=[];z.forEach(function(r){if(!r.hidden){var l=undefined;if(r.span){var t=r.span>W?W:r.span;l=t*(24/W);if(j==="xs"){l=24}else if(j==="sm"){l=l>12?l:12}}e.push(i({},r,{grid:l?l:V[j]}))}});return h(e.filter(Boolean))},[j,W,V,z]);var F=!_&&A!=="vertical";var G=function e(){return D==null?void 0:D.map(function(e,l){var t=A==="vertical"?true:s(e.ellipsis)?O:e.ellipsis;var n=e.label;if(e.tips&&t){n=m(f,{tipType:"tooltip",tooltipProps:{title:e.tips},children:m(v,{text:n,hideTip:e.hideTip})})}else if(e.tips){n=m(f,{tipType:"tooltip",tooltipProps:{title:e.tips},children:n})}else if(t){n=m(v,{text:n,hideTip:e.hideTip})}var o=F?{display:"flex",gap:3}:{};return c(u.Col,i({},V,{span:e.grid,className:r("label-value-tr",{"label-value-last-tr":e.isLast}),children:[c("div",{className:"label-value-label",style:i({},o,x.labelStyle,e.labelStyle),children:[e.required?m("div",{style:{paddingLeft:8,position:"relative",width:"100%"},children:m(p,{text:n,symbolType:"required"})}):n,F?m("div",{children:":"}):null]}),!a(e.value)&&t&&!e.valueNoWrapper?m("div",{className:"label-value-value",style:i({},x.valueStyle,e.valueStyle),children:m(v,{text:e.value,onClick:e.onClick,hideTip:e.hideTip})}):m("div",{className:"label-value-value",style:i({wordBreak:"break-all"},x.valueStyle,e.valueStyle),children:e.onClick?m("a",{onClick:e.onClick,children:e.value}):e.value})]}),l)}).filter(Boolean)};var I=e.useCallbackRef(function(e){y(e)});var J=t(function(){if(["xs","sm"].includes(g)||!S){return{}}return{width:S}},[g,S]);var K=function(){if(C)return C;if(_)return"left";if(A==="horizontal")return"right";return"left"}();return m(u.Row,{style:i({},J,x.style,{"--lvr-label-width":A==="horizontal"?Q:undefined}),className:r("label-value-render","lvr-"+A,"lvr-size-"+L,"lvr-label-"+K,{"lvr-border":_},{"lvr-hidden-hover":H},x.className),gutter:_?[0,0]:E||[10,0],onBoxBreakpointChange:I,children:G()})};export{x as LabelValueRender};
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-render/utils.ts","@flatbiz/antd/src/label-value-render/label-value.tsx"],"sourcesContent":["import { arrayTotal } from '@flatbiz/utils';\nimport { TLabelValueRenderItem } from './types';\n\nexport const getRenderGrid = (dataList: TLabelValueRenderItem[]) => {\n let results: TLabelValueRenderItem[][] = [];\n\n let currentSum = 0;\n let currentArr: TLabelValueRenderItem[] = [];\n for (let i = 0; i < dataList.length; i++) {\n const item = dataList[i];\n const grid = item.grid;\n const temp = {\n ...item,\n grid: grid,\n } as TLabelValueRenderItem;\n if (currentSum + grid <= 24 && grid > 0) {\n currentSum += grid;\n currentArr.push(temp);\n } else {\n results.push(currentArr);\n currentSum = grid;\n currentArr = [temp];\n }\n }\n\n if (currentArr.length > 0) {\n results.push(currentArr);\n }\n if (results.length > 0) {\n results = results.map((item, index) => {\n if (item.length === 1) {\n item[0].grid = 24;\n } else {\n const total = arrayTotal(item, 'grid');\n const lastItem = item[item.length - 1];\n if (total < 24) {\n lastItem.grid = 24 - total + lastItem.grid;\n }\n }\n if (index === results.length - 1) {\n return item.map((temp) => {\n temp.isLast = true;\n return temp;\n });\n }\n return item;\n });\n }\n\n let resultsFt: TLabelValueRenderItem[] = [];\n results.forEach((item) => {\n resultsFt = resultsFt.concat(item);\n });\n return resultsFt;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, isValidElement, ReactElement, useMemo, useState } from 'react';\n\nimport { isNumber, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { BoxGrid } from '../box-grid';\nimport { TBoxBreakpoint } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflow } from '../text-overflow';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport { TLabelValueItem, TLabelValueRenderItem } from './types';\nimport { getRenderGrid } from './utils';\n\nexport type LabelValueRenderProps = {\n className?: string;\n style?: CSSProperties;\n /**\n * 定义一行显示几列, 默认值:4\n * ```\n * 1. label+value 一组为一列\n * 2. 当外层宽度尺寸大于 992px(lg) 时,一行显示几列\n * 3. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响,响应式布局\n * 4. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 5. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4 | 6;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4 | 6;\n /** 数据源配置 */\n options: TLabelValueItem[];\n /**\n * 超过宽度将自动省略,默认值:true\n * ```\n * 1. 当 direction = vertical时,强制为true\n * ```\n */\n ellipsis?: boolean;\n /**\n * 是否添加边框\n * @deprecated 已过期,请使用 bordered\n */\n border?: boolean;\n /** 是否添加边框 */\n bordered?: boolean;\n /** label对齐方式 */\n labelAlign?: 'left' | 'right' | 'center';\n /** label 宽度,默认值:100 */\n labelWidth?: number | 'auto';\n width?: number;\n /** label 样式 */\n labelStyle?: CSSProperties;\n /** value 样式 */\n valueStyle?: CSSProperties;\n\n size?: 'default' | 'small';\n /**\n * label&value 方向布局\n * ```\n * 1. auto表示当响应式为xs(小屏幕)时为vertical,其他情况为horizontal\n * ```\n */\n direction?: 'vertical' | 'horizontal' | 'auto';\n /**\n * 网格布局间距,默认值:[10, 0]\n * ```\n * 1. border = true 无效\n * ```\n */\n gutter?: [number, number];\n\n /** 隐藏 value hover效果 */\n hiddenValueHover?: boolean;\n};\n\n/**\n * label+value 列表布局\n * ```\n * 1. 可设置超出隐藏、必填标识、设置隐藏、添加说明标签等功能\n * 2. 可自定义设置占用网格列数\n * 3. 内置响应式布局\n * ```\n */\nexport const LabelValueRender = (props: LabelValueRenderProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [breakpoint, setBreakpoint] = useState<TBoxBreakpoint>();\n\n const {\n column,\n forceColumn,\n labelAlign,\n labelWidth,\n options,\n border,\n bordered,\n width,\n size = 'default',\n direction = 'auto',\n gutter,\n hiddenValueHover,\n } = props;\n\n const columnNew = column && [1, 2, 3, 4, 6].includes(column) ? column : 4;\n\n const borderedNew = !isUndefinedOrNull(bordered) ? bordered : border;\n\n const directionNew = useMemo(() => {\n if (direction === 'horizontal' || direction === 'vertical') return direction;\n if (screenType === 'xs' || breakpoint === 'xs') return 'vertical';\n return 'horizontal';\n }, [breakpoint, direction, screenType]);\n\n const ellipsis = useMemo(() => {\n if (directionNew === 'vertical') return true;\n return isUndefinedOrNull(props.ellipsis) ? true : props.ellipsis;\n }, [directionNew, props.ellipsis]);\n\n const labelWidthNew = labelWidth ? (isNumber(labelWidth) ? `${labelWidth}px` : labelWidth) : '100px';\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n };\n return columnMap[columnNew];\n }, [columnNew, forceColumn]);\n\n const renderList = useMemo(() => {\n if (!breakpoint) return undefined;\n const dataListNew: TLabelValueRenderItem[] = [];\n options.forEach((item) => {\n if (!item.hidden) {\n let grid: number | undefined = undefined;\n if (item.span) {\n const itemSpan = item.span > columnNew ? columnNew : item.span;\n grid = itemSpan * (24 / columnNew);\n if (breakpoint === 'xs') {\n grid = 24;\n } else if (breakpoint === 'sm') {\n grid = grid > 12 ? grid : 12;\n }\n }\n dataListNew.push({\n ...item,\n grid: grid ? grid : gridSize[breakpoint],\n });\n }\n });\n return getRenderGrid(dataListNew.filter(Boolean));\n }, [breakpoint, columnNew, gridSize, options]);\n\n const showColon = !borderedNew && directionNew !== 'vertical';\n\n const getFormRowChildren = () => {\n return renderList\n ?.map((item, index) => {\n const ellipsisFt =\n directionNew === 'vertical' ? true : isUndefinedOrNull(item.ellipsis) ? ellipsis : item.ellipsis;\n\n let labelContent: ReactElement | string = item.label;\n // let labelContent: ReactElement | string = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // if (colon) {\n // labelContent = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // }\n\n if (item.tips && ellipsisFt) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />\n </TipsWrapper>\n );\n } else if (item.tips) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n {labelContent}\n </TipsWrapper>\n );\n } else if (ellipsisFt) {\n labelContent = <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />;\n }\n\n const innerlabelStyle = showColon ? { display: 'flex', gap: 3 } : {};\n return (\n <BoxGrid.Col\n key={index}\n {...gridSize}\n span={item.grid}\n className={classNames('label-value-tr', {\n 'label-value-last-tr': item.isLast,\n })}\n >\n <div\n className=\"label-value-label\"\n style={{\n ...innerlabelStyle,\n ...props.labelStyle,\n ...item.labelStyle,\n }}\n >\n {item.required ? (\n <div\n style={{\n paddingLeft: 8,\n position: 'relative',\n width: '100%',\n }}\n >\n <TextSymbolWrapper text={labelContent} symbolType=\"required\" />\n </div>\n ) : (\n labelContent\n )}\n {showColon ? <div>:</div> : null}\n </div>\n {!isValidElement(item.value) && ellipsisFt && !item.valueNoWrapper ? (\n <div\n className=\"label-value-value\"\n style={{\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n <TextOverflow text={item.value as string} onClick={item.onClick} hideTip={item.hideTip} />\n </div>\n ) : (\n <div\n className=\"label-value-value\"\n style={{\n wordBreak: 'break-all',\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n {item.onClick ? <a onClick={item.onClick}>{item.value}</a> : item.value}\n </div>\n )}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const onBoxBreakpointChange = hooks.useCallbackRef((breakpoint: TBoxBreakpoint) => {\n setBreakpoint(breakpoint);\n });\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const align = (function () {\n if (labelAlign) return labelAlign;\n if (borderedNew) return 'left';\n if (directionNew === 'horizontal') return 'right';\n return 'left';\n })();\n\n return (\n <BoxGrid.Row\n style={\n {\n ...innerStyle,\n ...props.style,\n '--lvr-label-width': directionNew === 'horizontal' ? labelWidthNew : undefined,\n } as TAny\n }\n className={classNames(\n 'label-value-render',\n `lvr-${directionNew}`,\n `lvr-size-${size}`,\n `lvr-label-${align}`,\n { 'lvr-border': borderedNew },\n { 'lvr-hidden-hover': hiddenValueHover },\n props.className,\n )}\n gutter={borderedNew ? [0, 0] : gutter || [10, 0]}\n onBoxBreakpointChange={onBoxBreakpointChange}\n >\n {getFormRowChildren()}\n </BoxGrid.Row>\n );\n};\n"],"names":["getRenderGrid","dataList","results","currentSum","currentArr","i","length","item","grid","temp","_extends","push","map","index","total","arrayTotal","lastItem","isLast","resultsFt","forEach","concat","LabelValueRender","props","screenType","fbaHooks","useResponsivePoint","_useState","useState","breakpoint","setBreakpoint","column","forceColumn","labelAlign","labelWidth","options","border","bordered","width","_props$size","size","_props$direction","direction","gutter","hiddenValueHover","columnNew","includes","borderedNew","isUndefinedOrNull","directionNew","useMemo","ellipsis","labelWidthNew","isNumber","gridSize","num","xs","sm","md","lg","xl","xxl","columnMap","renderList","undefined","dataListNew","hidden","span","itemSpan","filter","Boolean","showColon","getFormRowChildren","ellipsisFt","labelContent","label","tips","_jsx","TipsWrapper","tipType","tooltipProps","title","children","TextOverflow","text","hideTip","innerlabelStyle","display","gap","_jsxs","BoxGrid","Col","className","_classNames","style","labelStyle","required","paddingLeft","position","TextSymbolWrapper","symbolType","isValidElement","value","valueNoWrapper","valueStyle","onClick","wordBreak","onBoxBreakpointChange","_hooks","useCallbackRef","innerStyle","align","Row"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-render/utils.ts","@flatbiz/antd/src/label-value-render/label-value.tsx"],"sourcesContent":["import { arrayTotal } from '@flatbiz/utils';\nimport { TLabelValueRenderItem } from './types';\n\nexport const getRenderGrid = (dataList: TLabelValueRenderItem[]) => {\n let results: TLabelValueRenderItem[][] = [];\n\n let currentSum = 0;\n let currentArr: TLabelValueRenderItem[] = [];\n for (let i = 0; i < dataList.length; i++) {\n const item = dataList[i];\n const grid = item.grid;\n const temp = {\n ...item,\n grid: grid,\n } as TLabelValueRenderItem;\n if (currentSum + grid <= 24 && grid > 0) {\n currentSum += grid;\n currentArr.push(temp);\n } else {\n results.push(currentArr);\n currentSum = grid;\n currentArr = [temp];\n }\n }\n\n if (currentArr.length > 0) {\n results.push(currentArr);\n }\n if (results.length > 0) {\n results = results.map((item, index) => {\n if (item.length === 1) {\n item[0].grid = 24;\n } else {\n const total = arrayTotal(item, 'grid');\n const lastItem = item[item.length - 1];\n if (total < 24) {\n lastItem.grid = 24 - total + lastItem.grid;\n }\n }\n if (index === results.length - 1) {\n return item.map((temp) => {\n temp.isLast = true;\n return temp;\n });\n }\n return item;\n });\n }\n\n let resultsFt: TLabelValueRenderItem[] = [];\n results.forEach((item) => {\n resultsFt = resultsFt.concat(item);\n });\n return resultsFt;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, isValidElement, ReactElement, useMemo, useState } from 'react';\n\nimport { isNumber, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { BoxGrid } from '../box-grid';\nimport { TBoxBreakpoint } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflow } from '../text-overflow';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport { TLabelValueItem, TLabelValueRenderItem } from './types';\nimport { getRenderGrid } from './utils';\n\nexport type LabelValueRenderProps = {\n className?: string;\n style?: CSSProperties;\n /**\n * 定义一行显示几列, 默认值:4\n * ```\n * 1. label+value 一组为一列\n * 2. 当外层宽度尺寸大于 992px(lg) 时,一行显示几列\n * 3. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响,响应式布局\n * 4. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 5. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n * 12: { xs: 24, sm: 12, md: 12, lg: 4, xl: 2, xxl: 2 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4 | 6 | 12;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4 | 6;\n /** 数据源配置 */\n options: TLabelValueItem[];\n /**\n * 超过宽度将自动省略,默认值:true\n * ```\n * 1. 当 direction = vertical时,强制为true\n * ```\n */\n ellipsis?: boolean;\n /**\n * 是否添加边框\n * @deprecated 已过期,请使用 bordered\n */\n border?: boolean;\n /** 是否添加边框 */\n bordered?: boolean;\n /** label对齐方式 */\n labelAlign?: 'left' | 'right' | 'center';\n /** label 宽度,默认值:100 */\n labelWidth?: number | 'auto';\n width?: number;\n /** label 样式 */\n labelStyle?: CSSProperties;\n /** value 样式 */\n valueStyle?: CSSProperties;\n\n size?: 'default' | 'small';\n /**\n * label&value 方向布局\n * ```\n * 1. auto表示当响应式为xs(小屏幕)时为vertical,其他情况为horizontal\n * ```\n */\n direction?: 'vertical' | 'horizontal' | 'auto';\n /**\n * 网格布局间距,默认值:[10, 0]\n * ```\n * 1. border = true 无效\n * ```\n */\n gutter?: [number, number];\n\n /** 隐藏 value hover效果 */\n hiddenValueHover?: boolean;\n};\n\n/**\n * label+value 列表布局\n * ```\n * 1. 可设置超出隐藏、必填标识、设置隐藏、添加说明标签等功能\n * 2. 可自定义设置占用网格列数\n * 3. 内置响应式布局\n * ```\n */\nexport const LabelValueRender = (props: LabelValueRenderProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [breakpoint, setBreakpoint] = useState<TBoxBreakpoint>();\n\n const {\n column,\n forceColumn,\n labelAlign,\n labelWidth,\n options,\n border,\n bordered,\n width,\n size = 'default',\n direction = 'auto',\n gutter,\n hiddenValueHover,\n } = props;\n\n const columnNew = column && [1, 2, 3, 4, 6, 12].includes(column) ? column : 4;\n\n const borderedNew = !isUndefinedOrNull(bordered) ? bordered : border;\n\n const directionNew = useMemo(() => {\n if (direction === 'horizontal' || direction === 'vertical') return direction;\n if (screenType === 'xs' || breakpoint === 'xs') return 'vertical';\n return 'horizontal';\n }, [breakpoint, direction, screenType]);\n\n const ellipsis = useMemo(() => {\n if (directionNew === 'vertical') return true;\n return isUndefinedOrNull(props.ellipsis) ? true : props.ellipsis;\n }, [directionNew, props.ellipsis]);\n\n const labelWidthNew = labelWidth ? (isNumber(labelWidth) ? `${labelWidth}px` : labelWidth) : '100px';\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n };\n return columnMap[columnNew];\n }, [columnNew, forceColumn]);\n\n const renderList = useMemo(() => {\n if (!breakpoint) return undefined;\n const dataListNew: TLabelValueRenderItem[] = [];\n options.forEach((item) => {\n if (!item.hidden) {\n let grid: number | undefined = undefined;\n if (item.span) {\n const itemSpan = item.span > columnNew ? columnNew : item.span;\n grid = itemSpan * (24 / columnNew);\n if (breakpoint === 'xs') {\n grid = 24;\n } else if (breakpoint === 'sm') {\n grid = grid > 12 ? grid : 12;\n }\n }\n dataListNew.push({\n ...item,\n grid: grid ? grid : gridSize[breakpoint],\n });\n }\n });\n return getRenderGrid(dataListNew.filter(Boolean));\n }, [breakpoint, columnNew, gridSize, options]);\n\n const showColon = !borderedNew && directionNew !== 'vertical';\n\n const getFormRowChildren = () => {\n return renderList\n ?.map((item, index) => {\n const ellipsisFt =\n directionNew === 'vertical' ? true : isUndefinedOrNull(item.ellipsis) ? ellipsis : item.ellipsis;\n\n let labelContent: ReactElement | string = item.label;\n // let labelContent: ReactElement | string = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // if (colon) {\n // labelContent = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // }\n\n if (item.tips && ellipsisFt) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />\n </TipsWrapper>\n );\n } else if (item.tips) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n {labelContent}\n </TipsWrapper>\n );\n } else if (ellipsisFt) {\n labelContent = <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />;\n }\n\n const innerlabelStyle = showColon ? { display: 'flex', gap: 3 } : {};\n return (\n <BoxGrid.Col\n key={index}\n {...gridSize}\n span={item.grid}\n className={classNames('label-value-tr', {\n 'label-value-last-tr': item.isLast,\n })}\n >\n <div\n className=\"label-value-label\"\n style={{\n ...innerlabelStyle,\n ...props.labelStyle,\n ...item.labelStyle,\n }}\n >\n {item.required ? (\n <div\n style={{\n paddingLeft: 8,\n position: 'relative',\n width: '100%',\n }}\n >\n <TextSymbolWrapper text={labelContent} symbolType=\"required\" />\n </div>\n ) : (\n labelContent\n )}\n {showColon ? <div>:</div> : null}\n </div>\n {!isValidElement(item.value) && ellipsisFt && !item.valueNoWrapper ? (\n <div\n className=\"label-value-value\"\n style={{\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n <TextOverflow text={item.value as string} onClick={item.onClick} hideTip={item.hideTip} />\n </div>\n ) : (\n <div\n className=\"label-value-value\"\n style={{\n wordBreak: 'break-all',\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n {item.onClick ? <a onClick={item.onClick}>{item.value}</a> : item.value}\n </div>\n )}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const onBoxBreakpointChange = hooks.useCallbackRef((breakpoint: TBoxBreakpoint) => {\n setBreakpoint(breakpoint);\n });\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const align = (function () {\n if (labelAlign) return labelAlign;\n if (borderedNew) return 'left';\n if (directionNew === 'horizontal') return 'right';\n return 'left';\n })();\n\n return (\n <BoxGrid.Row\n style={\n {\n ...innerStyle,\n ...props.style,\n '--lvr-label-width': directionNew === 'horizontal' ? labelWidthNew : undefined,\n } as TAny\n }\n className={classNames(\n 'label-value-render',\n `lvr-${directionNew}`,\n `lvr-size-${size}`,\n `lvr-label-${align}`,\n { 'lvr-border': borderedNew },\n { 'lvr-hidden-hover': hiddenValueHover },\n props.className,\n )}\n gutter={borderedNew ? [0, 0] : gutter || [10, 0]}\n onBoxBreakpointChange={onBoxBreakpointChange}\n >\n {getFormRowChildren()}\n </BoxGrid.Row>\n );\n};\n"],"names":["getRenderGrid","dataList","results","currentSum","currentArr","i","length","item","grid","temp","_extends","push","map","index","total","arrayTotal","lastItem","isLast","resultsFt","forEach","concat","LabelValueRender","props","screenType","fbaHooks","useResponsivePoint","_useState","useState","breakpoint","setBreakpoint","column","forceColumn","labelAlign","labelWidth","options","border","bordered","width","_props$size","size","_props$direction","direction","gutter","hiddenValueHover","columnNew","includes","borderedNew","isUndefinedOrNull","directionNew","useMemo","ellipsis","labelWidthNew","isNumber","gridSize","num","xs","sm","md","lg","xl","xxl","columnMap","renderList","undefined","dataListNew","hidden","span","itemSpan","filter","Boolean","showColon","getFormRowChildren","ellipsisFt","labelContent","label","tips","_jsx","TipsWrapper","tipType","tooltipProps","title","children","TextOverflow","text","hideTip","innerlabelStyle","display","gap","_jsxs","BoxGrid","Col","className","_classNames","style","labelStyle","required","paddingLeft","position","TextSymbolWrapper","symbolType","isValidElement","value","valueNoWrapper","valueStyle","onClick","wordBreak","onBoxBreakpointChange","_hooks","useCallbackRef","innerStyle","align","Row"],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@ import './../fba-utils/index.css';
|
|
|
3
3
|
import './../fba-hooks/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import{fbaUtils as r}from"../fba-utils/index.js";import{createCtx as e}from"@wove/react/cjs/create-ctx";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{isDeepEqual as a}from"@dimjs/lang/cjs/is-deep-equal";import{hooks as i}from"@wove/react/cjs/hooks";import{_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{getValueOrDefault as o,toArray as l,isUndefinedOrNull as s}from"@flatbiz/utils";import{Result as c,Button as u,Spin as m}from"antd";import{forwardRef as d,useState as f,useRef as p,useMemo as v,useImperativeHandle as g,Fragment as h}from"react";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsx as b,jsxs as j}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-
|
|
6
|
+
import{fbaUtils as r}from"../fba-utils/index.js";import{createCtx as e}from"@wove/react/cjs/create-ctx";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{isDeepEqual as a}from"@dimjs/lang/cjs/is-deep-equal";import{hooks as i}from"@wove/react/cjs/hooks";import{_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{getValueOrDefault as o,toArray as l,isUndefinedOrNull as s}from"@flatbiz/utils";import{Result as c,Button as u,Spin as m}from"antd";import{forwardRef as d,useState as f,useRef as p,useMemo as v,useImperativeHandle as g,Fragment as h}from"react";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsx as b,jsxs as j}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var N=e(),C=N[0],P=N[1];var q=d(function(r,e){var d=r.serviceConfig,N=r.isAsync,C=r.children,q=r.errorRender,R=r.loadingSpinProps,w=r.textConfigs,x=r.showRequiredError,k=r.contentScroll,E=r.contentStyle,L=r.height;var T=f("init"),H=T[0],K=T[1];var S=f(),z=S[0],A=S[1];var _=r.loadingHeight===undefined?100:r.loadingHeight;var B=f(false),D=B[0],F=B[1];var G=p();var I=p(true);var J=y.usePrevious(d.params);var M=o(R==null?void 0:R.content,b("span",{}));var O=o(R==null?void 0:R.bgColor,"rgba(0,0,0,0.01)");var Q=o(R==null?void 0:R.tip,"Loading");var U=w==null?void 0:w.requiredErrorText;var V=v(function(){var r;if(!d.params||l(d.invalidParamKey).length===0){return d.params}var e=t({},d.params);(r=d.invalidParamKey)==null||r.forEach(function(r){e[r]=undefined});return e},[d]);var W=i.useCallbackRef(function(r){var e=d==null?void 0:d.requiredParamsKeys;if(e!=null&&e.length){var n=e.find(function(e){return s(r==null?void 0:r[e])});if(n){return{complete:false,message:U||"LocalLoading渲染缺少必填参数:"+e.join("、")}}}return{complete:true}});var X=v(function(){return W(d.params)},[W,d.params]);var Y=function r(e){return new Promise(function(r,n){var a=function(r){return function(e){try{F(false);return r&&r.call(this,e)}catch(r){return n(r)}}.bind(this)}.bind(this);var i,o;var l=function(){try{return r()}catch(r){return n(r)}};var s=function(r){try{console.error(r);K("error");G.current=r.message;I.current=false;return a(l)()}catch(r){return a(n)(r)}};try{i=t({},V,e);F(true);return Promise.resolve(d.onRequest(i)).then(function(r){try{o=r;K("success");A(o);I.current=false;return a(l)()}catch(r){return s(r)}},s)}catch(r){s(r)}})};y.useEffectCustomAsync(function(){return new Promise(function(r,e){if(X.complete){return Promise.resolve(Y()).then(function(r){try{return n.call(this)}catch(r){return e(r)}}.bind(this),e)}function n(){return r()}return n.call(this)})},[]);y.useEffectCustom(function(){if(X.complete){if(J){if(!a(d.params,J)){if(H==="error"){K("init")}void Y()}}}},[J,d.params]);g(e,function(){return{onRefresh:Y}});if(!X.complete){if(I.current||!x){return b(h,{})}return b(P,{value:{onRequest:Y},children:j("div",{className:n("local-loading-error",r.className),children:[b("div",{className:"local-loading-area"}),b(c,{status:"error",subTitle:X.message})]})})}if(H==="error"){if(q){return q({message:G.current})}return b(P,{value:{onRequest:Y},children:j("div",{className:n("local-loading-error",r.className),children:[b("div",{className:"local-loading-area"}),b(c,{status:"error",subTitle:G.current||"数据处理异常",extra:[b(u,{type:"primary",ghost:true,size:"small",onClick:function r(){K("init");void Y()},children:"重新获取"},"console")]})]})})}if(H!=="success"&&!N){return b("div",{className:n("fba-local-loading-process",r.className),style:{height:_,display:"flex",justifyContent:"center",position:"relative",backgroundColor:"var(--block-bg-color)"},children:b(m,{spinning:D,tip:Q,wrapperClassName:"local-loading-spin-wrapper",className:"local-loading-spin",style:{"--local-loading-spin-bgColor":O},children:M})})}var Z=n("fba-local-loading",{"fll-content-scroll":k},r.className);var $=t({height:L},r.style);return b(P,{value:{onRequest:Y},children:j("div",{className:Z,style:$,children:[D?b(m,{spinning:D,tip:Q,wrapperClassName:"local-loading-spin-wrapper",className:"local-loading-spin",style:{"--local-loading-spin-bgColor":O},children:M}):null,b("div",{className:"local-loading-content",style:E,children:C(z)})]})})});var R=r.attachPropertiesToComponent(q,{useLocalLoading:function r(){var e=C();return{onRequest:function r(n){e.onRequest(n)}}}});export{R as LocalLoading};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/context.ts","@flatbiz/antd/src/local-loading/local-loading.tsx","@flatbiz/antd/src/local-loading/index.ts"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useLocalLoadingCtx, LocalLoadingCtxProvider] = createCtx<{\n onRequest: (params?: TPlainObject) => void;\n}>();\n","import { isDeepEqual } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { getValueOrDefault, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Result, Spin } from 'antd';\nimport type { CSSProperties, ReactElement } from 'react';\nimport { forwardRef, Fragment, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { LocalLoadingCtxProvider } from './context';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TAny>;\n params?: TPlainObject;\n /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */\n invalidParamKey?: string[];\n /** 必填字段设置 */\n requiredParamsKeys?: string[];\n};\n\nexport interface LocalLoadingProps {\n className?: string;\n style?: CSSProperties;\n contentStyle?: CSSProperties;\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number | string;\n /** loading spin 属性设置 */\n loadingSpinProps?: {\n /** loading tip,默认值:Loading */\n tip?: string;\n /** loading 内容 */\n content?: ReactElement;\n /** 背景色,默认值:rgba(0,0,0,0.01) */\n bgColor?: string;\n };\n textConfigs?: {\n /** 必填异常文本 */\n requiredErrorText?: string;\n };\n /** 是否显示必填异常 */\n showRequiredError?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** 设置内部滚动,需要设置 style.height 才能生效,@5.0.16 */\n contentScroll?: boolean;\n /** 设置高度 */\n height?: number | string;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: (params?: TPlainObject) => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果、error显示效果、获取服务数据\n * 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 4. 通过 ref.onRequest 可主动发起服务调用\n * 5. 子组件通过下面方式主动发起服务调用\n * const localLoadingApi = LocalLoading.useLocalLoading();\n * localLoadingApi.onRequest();\n * 6. 如果内部需要滚动条,可设置 contentScroll = true (外部有高度或者设置style.height 才能生效)\n * ```\n */\nexport const LocalLoadingInner = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const {\n serviceConfig,\n isAsync,\n children,\n errorRender,\n loadingSpinProps,\n textConfigs,\n showRequiredError,\n contentScroll,\n contentStyle,\n height,\n } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'required_error' | 'init'>('init');\n const [respData, setRespData] = useState<TAny>();\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n const [loading, setLoading] = useState<boolean>(false);\n const errorRef = useRef<string>();\n const hiddenRequiredErrorRenderRef = useRef(true);\n\n const prevParams = fbaHooks.usePrevious(serviceConfig.params);\n\n const loadingSpinContent = getValueOrDefault(loadingSpinProps?.content, <span />);\n const loadingSpinBgColor = getValueOrDefault(loadingSpinProps?.bgColor, 'rgba(0,0,0,0.01)');\n const loadingSpinTip = getValueOrDefault(loadingSpinProps?.tip, 'Loading');\n\n const requiredErrorText = textConfigs?.requiredErrorText;\n\n // 用于直接发起接口调用,不能用于比较\n const serviceParams = useMemo(() => {\n if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {\n return serviceConfig.params;\n }\n const newParams = { ...serviceConfig.params };\n serviceConfig.invalidParamKey?.forEach((key) => {\n newParams[key] = undefined;\n });\n return newParams;\n }, [serviceConfig]);\n\n // 判断必要参数是否完整\n const validateRequiredParamsComplete = hooks.useCallbackRef((params?: TPlainObject) => {\n const keys = serviceConfig?.requiredParamsKeys;\n if (keys?.length) {\n const target = keys.find((item) => {\n return isUndefinedOrNull(params?.[item]);\n });\n if (target) {\n return {\n complete: false,\n message: requiredErrorText || `LocalLoading渲染缺少必填参数:${keys.join('、')}`,\n };\n }\n }\n return { complete: true };\n });\n\n const completeResult = useMemo(() => {\n return validateRequiredParamsComplete(serviceConfig.params);\n }, [validateRequiredParamsComplete, serviceConfig.params]);\n\n const onInitRequest = async (params?: TPlainObject) => {\n try {\n const mergeProps = { ...serviceParams, ...params };\n setLoading(true);\n const respData = await serviceConfig.onRequest(mergeProps);\n setStatus('success');\n setRespData(respData);\n hiddenRequiredErrorRenderRef.current = false;\n } catch (error: TAny) {\n console.error(error);\n setStatus('error');\n errorRef.current = error.message;\n hiddenRequiredErrorRenderRef.current = false;\n } finally {\n setLoading(false);\n }\n };\n\n fbaHooks.useEffectCustomAsync(async () => {\n if (completeResult.complete) {\n await onInitRequest();\n }\n }, []);\n\n fbaHooks.useEffectCustom(() => {\n if (completeResult.complete) {\n if (prevParams) {\n if (!isDeepEqual(serviceConfig.params, prevParams)) {\n if (status === 'error') {\n setStatus('init');\n }\n void onInitRequest();\n }\n }\n }\n }, [prevParams, serviceConfig.params]);\n\n useImperativeHandle(ref, () => {\n return { onRefresh: onInitRequest };\n });\n\n if (!completeResult.complete) {\n if (hiddenRequiredErrorRenderRef.current || !showRequiredError) {\n return <Fragment />;\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result status=\"error\" subTitle={completeResult.message} />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender({ message: errorRef.current });\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result\n status=\"error\"\n subTitle={errorRef.current || '数据处理异常'}\n extra={[\n <Button\n type=\"primary\"\n ghost\n key=\"console\"\n size=\"small\"\n onClick={() => {\n setStatus('init');\n void onInitRequest();\n }}\n >\n 重新获取\n </Button>,\n ]}\n />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status !== 'success' && !isAsync) {\n return (\n <div\n className={classNames('fba-local-loading-process', props.className)}\n style={{\n height: loadingHeight,\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n backgroundColor: 'var(--block-bg-color)',\n }}\n >\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n </div>\n );\n }\n\n const className = classNames('fba-local-loading', { 'fll-content-scroll': contentScroll }, props.className);\n\n const rootStyle = { height, ...props.style };\n\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={className} style={rootStyle}>\n {loading ? (\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n ) : null}\n <div className=\"local-loading-content\" style={contentStyle}>\n {children(respData)}\n </div>\n </div>\n </LocalLoadingCtxProvider>\n );\n});\n","import { TPlainObject } from '@flatbiz/utils';\nimport { fbaUtils } from '../fba-utils';\nimport { useLocalLoadingCtx } from './context';\nimport { LocalLoadingInner } from './local-loading';\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果、error显示效果、获取服务数据\n * 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 4. 通过 ref.onRequest 可主动发起服务调用\n * 5. 子组件通过下面方式主动发起服务调用\n * const localLoadingApi = LocalLoading.useLocalLoading();\n * localLoadingApi.onRequest();\n * ```\n */\nexport const LocalLoading = fbaUtils.attachPropertiesToComponent(LocalLoadingInner, {\n useLocalLoading: () => {\n const ctx = useLocalLoadingCtx();\n return {\n onRequest: (params?: TPlainObject) => {\n ctx.onRequest(params);\n },\n };\n },\n});\n"],"names":["_createCtx","_createCtx2","useLocalLoadingCtx","LocalLoadingCtxProvider","LocalLoadingInner","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","loadingSpinProps","textConfigs","showRequiredError","contentScroll","contentStyle","height","_useState","useState","status","setStatus","_useState2","respData","setRespData","loadingHeight","undefined","_useState3","loading","setLoading","errorRef","useRef","hiddenRequiredErrorRenderRef","prevParams","fbaHooks","usePrevious","params","loadingSpinContent","getValueOrDefault","content","_jsx","loadingSpinBgColor","bgColor","loadingSpinTip","tip","requiredErrorText","serviceParams","useMemo","_serviceConfig$invali","toArray","invalidParamKey","length","newParams","_extends","forEach","key","validateRequiredParamsComplete","_hooks","useCallbackRef","keys","requiredParamsKeys","target","find","item","isUndefinedOrNull","complete","message","join","completeResult","onInitRequest","Promise","$return","$error","$Try_1_Finally","$Try_1_Exit","$Try_1_Value","call","this","$boundEx","bind","mergeProps","_respData","$Try_1_Post","$Try_1_Catch","error","console","current","resolve","onRequest","then","$await_3","useEffectCustomAsync","$await_4","$If_2","useEffectCustom","_isDeepEqual","useImperativeHandle","onRefresh","Fragment","value","_jsxs","className","_classNames","Result","subTitle","extra","Button","type","ghost","size","onClick","style","display","justifyContent","position","backgroundColor","Spin","spinning","wrapperClassName","rootStyle","LocalLoading","fbaUtils","attachPropertiesToComponent","useLocalLoading","ctx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/context.ts","@flatbiz/antd/src/local-loading/local-loading.tsx","@flatbiz/antd/src/local-loading/index.ts"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useLocalLoadingCtx, LocalLoadingCtxProvider] = createCtx<{\n onRequest: (params?: TPlainObject) => void;\n}>();\n","import { isDeepEqual } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { getValueOrDefault, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Result, Spin } from 'antd';\nimport type { CSSProperties, ReactElement } from 'react';\nimport { forwardRef, Fragment, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { LocalLoadingCtxProvider } from './context';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TAny>;\n params?: TPlainObject;\n /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */\n invalidParamKey?: string[];\n /** 必填字段设置 */\n requiredParamsKeys?: string[];\n};\n\nexport interface LocalLoadingProps {\n className?: string;\n style?: CSSProperties;\n contentStyle?: CSSProperties;\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number | string;\n /** loading spin 属性设置 */\n loadingSpinProps?: {\n /** loading tip,默认值:Loading */\n tip?: string;\n /** loading 内容 */\n content?: ReactElement;\n /** 背景色,默认值:rgba(0,0,0,0.01) */\n bgColor?: string;\n };\n textConfigs?: {\n /** 必填异常文本 */\n requiredErrorText?: string;\n };\n /** 是否显示必填异常 */\n showRequiredError?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** 设置内部滚动,需要设置 style.height 才能生效,@5.0.16 */\n contentScroll?: boolean;\n /** 设置高度 */\n height?: number | string;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: (params?: TPlainObject) => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果、error显示效果、获取服务数据\n * 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 4. 通过 ref.onRequest 可主动发起服务调用\n * 5. 子组件通过下面方式主动发起服务调用\n * const localLoadingApi = LocalLoading.useLocalLoading();\n * localLoadingApi.onRequest();\n * 6. 如果内部需要滚动条,可设置 contentScroll = true (外部有高度或者设置style.height 才能生效)\n * ```\n */\nexport const LocalLoadingInner = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const {\n serviceConfig,\n isAsync,\n children,\n errorRender,\n loadingSpinProps,\n textConfigs,\n showRequiredError,\n contentScroll,\n contentStyle,\n height,\n } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'required_error' | 'init'>('init');\n const [respData, setRespData] = useState<TAny>();\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n const [loading, setLoading] = useState<boolean>(false);\n const errorRef = useRef<string>();\n const hiddenRequiredErrorRenderRef = useRef(true);\n\n const prevParams = fbaHooks.usePrevious(serviceConfig.params);\n\n const loadingSpinContent = getValueOrDefault(loadingSpinProps?.content, <span />);\n const loadingSpinBgColor = getValueOrDefault(loadingSpinProps?.bgColor, 'rgba(0,0,0,0.01)');\n const loadingSpinTip = getValueOrDefault(loadingSpinProps?.tip, 'Loading');\n\n const requiredErrorText = textConfigs?.requiredErrorText;\n\n // 用于直接发起接口调用,不能用于比较\n const serviceParams = useMemo(() => {\n if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {\n return serviceConfig.params;\n }\n const newParams = { ...serviceConfig.params };\n serviceConfig.invalidParamKey?.forEach((key) => {\n newParams[key] = undefined;\n });\n return newParams;\n }, [serviceConfig]);\n\n // 判断必要参数是否完整\n const validateRequiredParamsComplete = hooks.useCallbackRef((params?: TPlainObject) => {\n const keys = serviceConfig?.requiredParamsKeys;\n if (keys?.length) {\n const target = keys.find((item) => {\n return isUndefinedOrNull(params?.[item]);\n });\n if (target) {\n return {\n complete: false,\n message: requiredErrorText || `LocalLoading渲染缺少必填参数:${keys.join('、')}`,\n };\n }\n }\n return { complete: true };\n });\n\n const completeResult = useMemo(() => {\n return validateRequiredParamsComplete(serviceConfig.params);\n }, [validateRequiredParamsComplete, serviceConfig.params]);\n\n const onInitRequest = async (params?: TPlainObject) => {\n try {\n const mergeProps = { ...serviceParams, ...params };\n setLoading(true);\n const respData = await serviceConfig.onRequest(mergeProps);\n setStatus('success');\n setRespData(respData);\n hiddenRequiredErrorRenderRef.current = false;\n } catch (error: TAny) {\n console.error(error);\n setStatus('error');\n errorRef.current = error.message;\n hiddenRequiredErrorRenderRef.current = false;\n } finally {\n setLoading(false);\n }\n };\n\n fbaHooks.useEffectCustomAsync(async () => {\n if (completeResult.complete) {\n await onInitRequest();\n }\n }, []);\n\n fbaHooks.useEffectCustom(() => {\n if (completeResult.complete) {\n if (prevParams) {\n if (!isDeepEqual(serviceConfig.params, prevParams)) {\n if (status === 'error') {\n setStatus('init');\n }\n void onInitRequest();\n }\n }\n }\n }, [prevParams, serviceConfig.params]);\n\n useImperativeHandle(ref, () => {\n return { onRefresh: onInitRequest };\n });\n\n if (!completeResult.complete) {\n if (hiddenRequiredErrorRenderRef.current || !showRequiredError) {\n return <Fragment />;\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result status=\"error\" subTitle={completeResult.message} />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender({ message: errorRef.current });\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result\n status=\"error\"\n subTitle={errorRef.current || '数据处理异常'}\n extra={[\n <Button\n type=\"primary\"\n ghost\n key=\"console\"\n size=\"small\"\n onClick={() => {\n setStatus('init');\n void onInitRequest();\n }}\n >\n 重新获取\n </Button>,\n ]}\n />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status !== 'success' && !isAsync) {\n return (\n <div\n className={classNames('fba-local-loading-process', props.className)}\n style={{\n height: loadingHeight,\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n backgroundColor: 'var(--block-bg-color)',\n }}\n >\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n </div>\n );\n }\n\n const className = classNames('fba-local-loading', { 'fll-content-scroll': contentScroll }, props.className);\n\n const rootStyle = { height, ...props.style };\n\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={className} style={rootStyle}>\n {loading ? (\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n ) : null}\n <div className=\"local-loading-content\" style={contentStyle}>\n {children(respData)}\n </div>\n </div>\n </LocalLoadingCtxProvider>\n );\n});\n","import { TPlainObject } from '@flatbiz/utils';\nimport { fbaUtils } from '../fba-utils';\nimport { useLocalLoadingCtx } from './context';\nimport { LocalLoadingInner } from './local-loading';\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果、error显示效果、获取服务数据\n * 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 4. 通过 ref.onRequest 可主动发起服务调用\n * 5. 子组件通过下面方式主动发起服务调用\n * const localLoadingApi = LocalLoading.useLocalLoading();\n * localLoadingApi.onRequest();\n * ```\n */\nexport const LocalLoading = fbaUtils.attachPropertiesToComponent(LocalLoadingInner, {\n useLocalLoading: () => {\n const ctx = useLocalLoadingCtx();\n return {\n onRequest: (params?: TPlainObject) => {\n ctx.onRequest(params);\n },\n };\n },\n});\n"],"names":["_createCtx","_createCtx2","useLocalLoadingCtx","LocalLoadingCtxProvider","LocalLoadingInner","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","loadingSpinProps","textConfigs","showRequiredError","contentScroll","contentStyle","height","_useState","useState","status","setStatus","_useState2","respData","setRespData","loadingHeight","undefined","_useState3","loading","setLoading","errorRef","useRef","hiddenRequiredErrorRenderRef","prevParams","fbaHooks","usePrevious","params","loadingSpinContent","getValueOrDefault","content","_jsx","loadingSpinBgColor","bgColor","loadingSpinTip","tip","requiredErrorText","serviceParams","useMemo","_serviceConfig$invali","toArray","invalidParamKey","length","newParams","_extends","forEach","key","validateRequiredParamsComplete","_hooks","useCallbackRef","keys","requiredParamsKeys","target","find","item","isUndefinedOrNull","complete","message","join","completeResult","onInitRequest","Promise","$return","$error","$Try_1_Finally","$Try_1_Exit","$Try_1_Value","call","this","$boundEx","bind","mergeProps","_respData","$Try_1_Post","$Try_1_Catch","error","console","current","resolve","onRequest","then","$await_3","useEffectCustomAsync","$await_4","$If_2","useEffectCustom","_isDeepEqual","useImperativeHandle","onRefresh","Fragment","value","_jsxs","className","_classNames","Result","subTitle","extra","Button","type","ghost","size","onClick","style","display","justifyContent","position","backgroundColor","Spin","spinning","wrapperClassName","rootStyle","LocalLoading","fbaUtils","attachPropertiesToComponent","useLocalLoading","ctx"],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
import './../fba-hooks/index.css';
|
|
3
3
|
import './index.css';
|
|
4
4
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
5
|
-
import{a as r,_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as n}from"@wove/react/cjs/hooks";import{Flex as t,Button as o}from"antd";import{useRef as a,useMemo as i}from"react";import{MentionsWrapper as l}from"../mentions-wrapper/index.js";import{jsxs as u,jsx as c}from"react/jsx-runtime";import"@flatbiz/utils";import"ahooks";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-
|
|
5
|
+
import{a as r,_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as n}from"@wove/react/cjs/hooks";import{Flex as t,Button as o}from"antd";import{useRef as a,useMemo as i}from"react";import{MentionsWrapper as l}from"../mentions-wrapper/index.js";import{jsxs as u,jsx as c}from"react/jsx-runtime";import"@flatbiz/utils";import"ahooks";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var s=["prefix","operations"];var p=function p(f){var v=a({});var m=a();var d=a(0);var h=f.prefix,g=f.operations,j=g===void 0?[]:g,x=r(f,s);var C=function r(e){var n=f.value||"";var t=(B==null?void 0:B.selectionStart)||d.current;var o=(e.codeAdapter==null?void 0:e.codeAdapter())||""+e.codePrefix+k(e.codePrefix);var a=o.length+((h==null?void 0:h.length)||0)+2;if(n){n=n.slice(0,t)+y(o)+n.slice(t)}else{n=y(o)}f.onChange==null||f.onChange(n);if(f.onSelectParam){f.onSelectParam({code:o,type:e.type,value:undefined},h)}d.current+=a};var b=function r(e){var n;d.current=((n=f.value)==null?void 0:n.length)||0;if(f.onBlur){f.onBlur(e)}};var y=n.useCallbackRef(function(r){return(h||"")+"{"+r+"}"});var k=n.useCallbackRef(function(r){var e=v.current;if(e[r]>=0){e[r]+=1}else{e[r]=0}return e[r]});var B=i(function(){return m.current?m.current.getInputInstance():null},[m.current]);var P=i(function(){var r=(f.params||[]).map(function(r){return y(r.code)});var e=new Set(r);return Array.from(e)},[f.params]);return u("div",{children:[j&&j.length>0&&c(t,{gap:4,style:{marginBottom:8},children:j.map(function(r){return c(o,{type:"text",icon:r.icon,onClick:function e(){return C(r)},children:r.label&&c("span",{children:r.label})},r.type)})}),c(l,e({},x,{ref:m,prefix:h,options:P,value:f.value,onBlur:b,onChange:f.onChange,onCursorChange:function r(e){d.current=e}}))]})};export{p as MentionEditor};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mention-editor/mention-editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Flex } from 'antd';\nimport { useMemo, useRef, type ReactElement } from 'react';\nimport { MentionsWrapper, type MentionsWrapperProps } from '../mentions-wrapper/mentions';\nimport { type ParamItem } from './types';\n\nexport type OperationPresetProps = {\n /** icon */\n icon: ReactElement;\n /** 模版参数文案 */\n label?: string;\n /** 模版参数类型 */\n type: string;\n /** 自增code前缀 */\n codePrefix: string;\n /** 自定义生成模版参数code */\n codeAdapter?: () => string | undefined;\n};\n\nexport type MentionEditorProps = Omit<MentionsWrapperProps, 'prefix'> & {\n /**\n * onChange\n * @item 点击的预设模版参数\n */\n onSelectParam?: (item: ParamItem, prefix?: string) => void;\n /** 模版参数前缀 & | $ */\n prefix?: string;\n /** editor 支持添加的模版参数类型 */\n operations?: OperationPresetProps[];\n /** 模版参数列表 */\n params?: ParamItem[] | undefined;\n};\n\n/**\n * 基于MentionWrapper封装的模版字符串配置组件\n * 1. 提供变量,数字,链接等可选的模版参数\n * 2. 不同类型模版参数可配置多个\n * 3. mention 会根据 传入的params自动推断出关键字\n * 4. 模版参数建议都以${_xxx}为格式\n * 5. Demo: https://fex.qa.tcshuke.com/docs/admin/main/widget?key=mention-editor\n */\nexport const MentionEditor = (props: MentionEditorProps) => {\n const iMap = useRef<Record<string, number>>({});\n const mentionRef = useRef<TAny>();\n const curPosition = useRef<number>(0);\n\n const { prefix, operations = [], ...otherProps } = props;\n\n const onAddParam = (opt: OperationPresetProps) => {\n let content = props.value || '';\n const position = inputInstance?.selectionStart || curPosition.current;\n const param = opt.codeAdapter?.() || `${opt.codePrefix}${getIndex(opt.codePrefix)}`;\n const addPos = param.length + (prefix?.length || 0) + 2;\n if (content) {\n content = content.slice(0, position) + getOptionCode(param) + content.slice(position);\n } else {\n content = getOptionCode(param);\n }\n props.onChange?.(content);\n if (props.onSelectParam) {\n props.onSelectParam(\n {\n code: param,\n type: opt.type as any,\n value: undefined,\n },\n prefix,\n );\n }\n curPosition.current += addPos;\n };\n\n const onInputBlur = (e) => {\n curPosition.current = props.value?.length || 0;\n if (props.onBlur) {\n props.onBlur(e);\n }\n };\n\n const getOptionCode = hooks.useCallbackRef((code: string) => {\n return (prefix || '') + '{' + code + '}';\n });\n\n const getIndex = hooks.useCallbackRef((code) => {\n const indexMap = iMap.current;\n if (indexMap[code] >= 0) {\n indexMap[code] += 1;\n } else {\n indexMap[code] = 0;\n }\n return indexMap[code];\n });\n\n const inputInstance = useMemo(() => {\n return mentionRef.current ? mentionRef.current.getInputInstance() : null;\n }, [mentionRef.current]);\n\n const options = useMemo(() => {\n const options = (props.params || []).map((item) => getOptionCode(item.code));\n const optionSet = new Set(options);\n return Array.from(optionSet);\n }, [props.params]);\n\n return (\n <div>\n {operations && operations.length > 0 && (\n <Flex gap={4} style={{ marginBottom: 8 }}>\n {operations.map((operation) => {\n return (\n <Button\n key={operation.type}\n type=\"text\"\n icon={operation.icon}\n onClick={() => onAddParam(operation)}\n >\n {operation.label && <span>{operation.label}</span>}\n </Button>\n );\n })}\n </Flex>\n )}\n <MentionsWrapper\n {...otherProps}\n ref={mentionRef}\n prefix={prefix}\n options={options}\n value={props.value}\n onBlur={onInputBlur}\n onChange={props.onChange}\n onCursorChange={(position) => {\n curPosition.current = position;\n }}\n />\n </div>\n );\n};\n"],"names":["MentionEditor","props","iMap","useRef","mentionRef","curPosition","prefix","_props$operations","operations","otherProps","_objectWithoutPropertiesLoose","_excluded","onAddParam","opt","content","value","position","inputInstance","selectionStart","current","param","codeAdapter","codePrefix","getIndex","addPos","length","slice","getOptionCode","onChange","onSelectParam","code","type","undefined","onInputBlur","e","_props$value","onBlur","_hooks","useCallbackRef","indexMap","useMemo","getInputInstance","options","params","map","item","optionSet","Set","Array","from","_jsxs","children","_jsx","Flex","gap","style","marginBottom","operation","Button","icon","onClick","label","MentionsWrapper","_extends","ref","onCursorChange"],"mappings":";wgBA0CaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAMC,EAAOC,EAA+B,CAAA,GAC5C,IAAMC,EAAaD,IACnB,IAAME,EAAcF,EAAe,GAEnC,IAAQG,EAA2CL,EAA3CK,OAAMC,EAAqCN,EAAnCO,WAAAA,EAAUD,SAAG,EAAA,GAAEA,EAAKE,EAAUC,EAAKT,EAAKU,GAExD,IAAMC,EAAa,SAAbA,EAAcC,GAClB,IAAIC,EAAUb,EAAMc,OAAS,GAC7B,IAAMC,GAAWC,GAAa,UAAA,EAAbA,EAAeC,iBAAkBb,EAAYc,QAC9D,IAAMC,GAAQP,EAAIQ,aAAW,UAAA,EAAfR,EAAIQ,gBAAsBR,GAAAA,EAAIS,WAAaC,EAASV,EAAIS,YACtE,IAAME,EAASJ,EAAMK,SAAUnB,GAAAA,UAAAA,EAAAA,EAAQmB,SAAU,GAAK,EACtD,GAAIX,EAAS,CACXA,EAAUA,EAAQY,MAAM,EAAGV,GAAYW,EAAcP,GAASN,EAAQY,MAAMV,EAC9E,KAAO,CACLF,EAAUa,EAAcP,EAC1B,CACAnB,EAAM2B,UAAN3B,MAAAA,EAAM2B,SAAWd,GACjB,GAAIb,EAAM4B,cAAe,CACvB5B,EAAM4B,cACJ,CACEC,KAAMV,EACNW,KAAMlB,EAAIkB,KACVhB,MAAOiB,WAET1B,EAEJ,CACAD,EAAYc,SAAWK,GAGzB,IAAMS,EAAc,SAAdA,EAAeC,GAAM,IAAAC,EACzB9B,EAAYc,UAAUgB,EAAAlC,EAAMc,QAANoB,UAAAA,EAAAA,EAAaV,SAAU,EAC7C,GAAIxB,EAAMmC,OAAQ,CAChBnC,EAAMmC,OAAOF,EACf,GAGF,IAAMP,EAAgBU,EAAMC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mention-editor/mention-editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Flex } from 'antd';\nimport { useMemo, useRef, type ReactElement } from 'react';\nimport { MentionsWrapper, type MentionsWrapperProps } from '../mentions-wrapper/mentions';\nimport { type ParamItem } from './types';\n\nexport type OperationPresetProps = {\n /** icon */\n icon: ReactElement;\n /** 模版参数文案 */\n label?: string;\n /** 模版参数类型 */\n type: string;\n /** 自增code前缀 */\n codePrefix: string;\n /** 自定义生成模版参数code */\n codeAdapter?: () => string | undefined;\n};\n\nexport type MentionEditorProps = Omit<MentionsWrapperProps, 'prefix'> & {\n /**\n * onChange\n * @item 点击的预设模版参数\n */\n onSelectParam?: (item: ParamItem, prefix?: string) => void;\n /** 模版参数前缀 & | $ */\n prefix?: string;\n /** editor 支持添加的模版参数类型 */\n operations?: OperationPresetProps[];\n /** 模版参数列表 */\n params?: ParamItem[] | undefined;\n};\n\n/**\n * 基于MentionWrapper封装的模版字符串配置组件\n * 1. 提供变量,数字,链接等可选的模版参数\n * 2. 不同类型模版参数可配置多个\n * 3. mention 会根据 传入的params自动推断出关键字\n * 4. 模版参数建议都以${_xxx}为格式\n * 5. Demo: https://fex.qa.tcshuke.com/docs/admin/main/widget?key=mention-editor\n */\nexport const MentionEditor = (props: MentionEditorProps) => {\n const iMap = useRef<Record<string, number>>({});\n const mentionRef = useRef<TAny>();\n const curPosition = useRef<number>(0);\n\n const { prefix, operations = [], ...otherProps } = props;\n\n const onAddParam = (opt: OperationPresetProps) => {\n let content = props.value || '';\n const position = inputInstance?.selectionStart || curPosition.current;\n const param = opt.codeAdapter?.() || `${opt.codePrefix}${getIndex(opt.codePrefix)}`;\n const addPos = param.length + (prefix?.length || 0) + 2;\n if (content) {\n content = content.slice(0, position) + getOptionCode(param) + content.slice(position);\n } else {\n content = getOptionCode(param);\n }\n props.onChange?.(content);\n if (props.onSelectParam) {\n props.onSelectParam(\n {\n code: param,\n type: opt.type as any,\n value: undefined,\n },\n prefix,\n );\n }\n curPosition.current += addPos;\n };\n\n const onInputBlur = (e) => {\n curPosition.current = props.value?.length || 0;\n if (props.onBlur) {\n props.onBlur(e);\n }\n };\n\n const getOptionCode = hooks.useCallbackRef((code: string) => {\n return (prefix || '') + '{' + code + '}';\n });\n\n const getIndex = hooks.useCallbackRef((code) => {\n const indexMap = iMap.current;\n if (indexMap[code] >= 0) {\n indexMap[code] += 1;\n } else {\n indexMap[code] = 0;\n }\n return indexMap[code];\n });\n\n const inputInstance = useMemo(() => {\n return mentionRef.current ? mentionRef.current.getInputInstance() : null;\n }, [mentionRef.current]);\n\n const options = useMemo(() => {\n const options = (props.params || []).map((item) => getOptionCode(item.code));\n const optionSet = new Set(options);\n return Array.from(optionSet);\n }, [props.params]);\n\n return (\n <div>\n {operations && operations.length > 0 && (\n <Flex gap={4} style={{ marginBottom: 8 }}>\n {operations.map((operation) => {\n return (\n <Button\n key={operation.type}\n type=\"text\"\n icon={operation.icon}\n onClick={() => onAddParam(operation)}\n >\n {operation.label && <span>{operation.label}</span>}\n </Button>\n );\n })}\n </Flex>\n )}\n <MentionsWrapper\n {...otherProps}\n ref={mentionRef}\n prefix={prefix}\n options={options}\n value={props.value}\n onBlur={onInputBlur}\n onChange={props.onChange}\n onCursorChange={(position) => {\n curPosition.current = position;\n }}\n />\n </div>\n );\n};\n"],"names":["MentionEditor","props","iMap","useRef","mentionRef","curPosition","prefix","_props$operations","operations","otherProps","_objectWithoutPropertiesLoose","_excluded","onAddParam","opt","content","value","position","inputInstance","selectionStart","current","param","codeAdapter","codePrefix","getIndex","addPos","length","slice","getOptionCode","onChange","onSelectParam","code","type","undefined","onInputBlur","e","_props$value","onBlur","_hooks","useCallbackRef","indexMap","useMemo","getInputInstance","options","params","map","item","optionSet","Set","Array","from","_jsxs","children","_jsx","Flex","gap","style","marginBottom","operation","Button","icon","onClick","label","MentionsWrapper","_extends","ref","onCursorChange"],"mappings":";wgBA0CaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAMC,EAAOC,EAA+B,CAAA,GAC5C,IAAMC,EAAaD,IACnB,IAAME,EAAcF,EAAe,GAEnC,IAAQG,EAA2CL,EAA3CK,OAAMC,EAAqCN,EAAnCO,WAAAA,EAAUD,SAAG,EAAA,GAAEA,EAAKE,EAAUC,EAAKT,EAAKU,GAExD,IAAMC,EAAa,SAAbA,EAAcC,GAClB,IAAIC,EAAUb,EAAMc,OAAS,GAC7B,IAAMC,GAAWC,GAAa,UAAA,EAAbA,EAAeC,iBAAkBb,EAAYc,QAC9D,IAAMC,GAAQP,EAAIQ,aAAW,UAAA,EAAfR,EAAIQ,gBAAsBR,GAAAA,EAAIS,WAAaC,EAASV,EAAIS,YACtE,IAAME,EAASJ,EAAMK,SAAUnB,GAAAA,UAAAA,EAAAA,EAAQmB,SAAU,GAAK,EACtD,GAAIX,EAAS,CACXA,EAAUA,EAAQY,MAAM,EAAGV,GAAYW,EAAcP,GAASN,EAAQY,MAAMV,EAC9E,KAAO,CACLF,EAAUa,EAAcP,EAC1B,CACAnB,EAAM2B,UAAN3B,MAAAA,EAAM2B,SAAWd,GACjB,GAAIb,EAAM4B,cAAe,CACvB5B,EAAM4B,cACJ,CACEC,KAAMV,EACNW,KAAMlB,EAAIkB,KACVhB,MAAOiB,WAET1B,EAEJ,CACAD,EAAYc,SAAWK,GAGzB,IAAMS,EAAc,SAAdA,EAAeC,GAAM,IAAAC,EACzB9B,EAAYc,UAAUgB,EAAAlC,EAAMc,QAANoB,UAAAA,EAAAA,EAAaV,SAAU,EAC7C,GAAIxB,EAAMmC,OAAQ,CAChBnC,EAAMmC,OAAOF,EACf,GAGF,IAAMP,EAAgBU,EAAMC,eAAe,SAACR,GAC1C,OAAQxB,GAAU,IAAM,IAAMwB,EAAO,GACvC,GAEA,IAAMP,EAAWc,EAAMC,eAAe,SAACR,GACrC,IAAMS,EAAWrC,EAAKiB,QACtB,GAAIoB,EAAST,IAAS,EAAG,CACvBS,EAAST,IAAS,CACpB,KAAO,CACLS,EAAST,GAAQ,CACnB,CACA,OAAOS,EAAST,EAClB,GAEA,IAAMb,EAAgBuB,EAAQ,WAC5B,OAAOpC,EAAWe,QAAUf,EAAWe,QAAQsB,mBAAqB,IACtE,EAAG,CAACrC,EAAWe,UAEf,IAAMuB,EAAUF,EAAQ,WACtB,IAAME,GAAWzC,EAAM0C,QAAU,IAAIC,IAAI,SAACC,GAAI,OAAKlB,EAAckB,EAAKf,QACtE,IAAMgB,EAAY,IAAIC,IAAIL,GAC1B,OAAOM,MAAMC,KAAKH,EACpB,EAAG,CAAC7C,EAAM0C,SAEV,OACEO,EAAA,MAAA,CAAAC,SAAA,CACG3C,GAAcA,EAAWiB,OAAS,GACjC2B,EAACC,EAAI,CAACC,IAAK,EAAGC,MAAO,CAAEC,aAAc,GAAIL,SACtC3C,EAAWoC,IAAI,SAACa,GACf,OACEL,EAACM,EAAM,CAEL3B,KAAK,OACL4B,KAAMF,EAAUE,KAChBC,QAAS,SAATA,IAAO,OAAQhD,EAAW6C,EAAW,EAAAN,SAEpCM,EAAUI,OAAST,EAAA,OAAA,CAAAD,SAAOM,EAAUI,SALhCJ,EAAU1B,UAWzBqB,EAACU,EAAeC,KACVtD,EAAU,CACduD,IAAK5D,EACLE,OAAQA,EACRoC,QAASA,EACT3B,MAAOd,EAAMc,MACbqB,OAAQH,EACRL,SAAU3B,EAAM2B,SAChBqC,eAAgB,SAAhBA,EAAiBjD,GACfX,EAAYc,QAAUH,CACxB,OAIR"}
|
|
@@ -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{a as r,_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as n}from"@wove/react/cjs/hooks";import{toArray as t}from"@flatbiz/utils";import{useEventListener as o}from"ahooks";import{Mentions as i}from"antd";import{forwardRef as a,useRef as l,useState as u,useMemo as s,useImperativeHandle as c}from"react";import{fbaHooks as v}from"../fba-hooks/index.js";import{jsx as f}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-
|
|
5
|
+
import{a as r,_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as n}from"@wove/react/cjs/hooks";import{toArray as t}from"@flatbiz/utils";import{useEventListener as o}from"ahooks";import{Mentions as i}from"antd";import{forwardRef as a,useRef as l,useState as u,useMemo as s,useImperativeHandle as c}from"react";import{fbaHooks as v}from"../fba-hooks/index.js";import{jsx as f}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var d=function r(e){if(!e.value||!e.overallKeyWords.length)return[];var n=Array.from(new Set(e.overallKeyWords||[]));var t=[];n.forEach(function(r){var n;if(!((n=e.value)!=null&&n.includes(r)))return;var o=r.replace(/\$/g,"\\$").replace(/\{/g,"\\{").replace(/\}/g,"\\}").replace(/\]/g,"\\]").replace(/\[/g,"\\[");var i=new RegExp(o,"g");var a=[];var l;while((l=i.exec(e.value))!==null){a.push(l.index)}var u=[];a.forEach(function(e){u.push({start:e+1,end:e+r.length})});t.push(u)});return t};var p=function r(e){for(var n=0;n<e.keyWordsPosition.length;n++){var t=e.keyWordsPosition[n].find(function(r){return e.cursorPosition>=r.start&&e.cursorPosition<r.end});if(t)return t}return undefined};var g=["value","onChange","onClick","onCursorChange","onSelect","options","prefix"];var h=a(function(a,h){var m=a.value,k=a.onChange,y=a.onClick,S=a.onCursorChange,P=a.onSelect,w=a.options,C=a.prefix,R=r(a,g);var x=n.useId(undefined,"overall-input");var W=l();var b=u(0),j=b[0],A=b[1];var E=l(false);var I=m||"";var K=s(function(){if(w){return d({overallKeyWords:w||[],value:I})}return[]},[w,I]);var q=function r(){var e;return(e=W.current)==null?void 0:e.textarea};v.useEffectCustom(function(){S==null||S(j||0)},[j]);o("keydown",function(r){var e,n;var t=(e=q())==null?void 0:e.selectionStart;var o=(n=q())==null?void 0:n.selectionEnd;if(["ArrowLeft","ArrowRight"].includes(r.code)){var i=0;if(r.code==="ArrowLeft"){if(t-1<0)return;i=t-1;A(i);var a=p({keyWordsPosition:K,cursorPosition:i});if(a){var l;(l=q())==null||l.setSelectionRange(a.start,a.start)}}else if(r.code==="ArrowRight"){if(t+1>I.length)return;i=t+1;A(i);var u=p({keyWordsPosition:K,cursorPosition:i});if(u){var s;(s=q())==null||s.setSelectionRange(u.end-1,u.end-1)}}}else if(r.code==="Backspace"){if(t!==o){return}var c=p({keyWordsPosition:K,cursorPosition:t-1});if(c){E.current=true;var v=I.substring(0,c.start-1)+I.substring(c.end);setTimeout(function(){var r;(r=q())==null||r.setSelectionRange(c.start-1,c.start-1)},50);if(!v){E.current=false}k==null||k(v)}}},{target:function r(){return document.querySelector("#"+x)}});o("keyup",function(r){var e;var n=((e=q())==null?void 0:e.selectionStart)||0;if(["ArrowUp","ArrowDown"].includes(r.code)){A(n);var t=p({keyWordsPosition:K,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=q())==null||o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=q())==null||i.setSelectionRange(t.end,t.end)}}}},{target:function r(){return document.querySelector("#"+x)}});var B=n.useCallbackRef(function(r){var e;if(R.disabled)return;if(E.current){E.current=false;return}var n=((e=q())==null?void 0:e.selectionStart)||0;A(n);k==null||k(r)});var L=n.useCallbackRef(function(r){var e;var n=((e=q())==null?void 0:e.selectionStart)||0;A(n);y==null||y(r.target.value);var t=p({keyWordsPosition:K,cursorPosition:n});if(t){if(n-t.start<t.end-n){var o;(o=q())==null||o.setSelectionRange(t.start-1,t.start-1)}else{var i;(i=q())==null||i.setSelectionRange(t.end,t.end)}}});var $=function r(e,n){var t;var o=((t=e.value)==null?void 0:t.length)||0;A(function(r){return r+o});if(P){P(e,n)}};var _=s(function(){var r=t(C);return(w==null?void 0:w.map(function(e){var n=e;for(var t=0;t<r.length;t++){var o=r[t];if(n.startsWith(o)){n=n.replace(o,"");break}}return{label:n,value:n}}))||[]},[w,C]);c(h,function(){return{getInputInstance:q}});return f(i,e({notFoundContent:f("div",{children:"暂无数据"}),rows:3},R,{prefix:C,style:e({width:"100%"},R.style),id:x,value:I,ref:W,onSelect:$,onChange:B,onClick:L,split:"",validateSearch:function r(e){if(!_.length)return false;var n=_.find(function(r){return e.indexOf(r.value)>=0});return n&&e.length>n.value.length?false:true},options:_}))});export{h as MentionsWrapper};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mentions-wrapper/utils.ts","@flatbiz/antd/src/mentions-wrapper/mentions.tsx"],"sourcesContent":["import { type OverallKeyWordsPosition } from './types';\n\nexport const getOverallKeyWordsPosition = (params: { overallKeyWords: string[]; value?: string }) => {\n if (!params.value || !params.overallKeyWords.length) return [];\n const overallKeyWordsNew = Array.from(new Set(params.overallKeyWords || []));\n const positionItem: OverallKeyWordsPosition[][] = [];\n overallKeyWordsNew.forEach((item) => {\n if (!params.value?.includes(item)) return;\n const newItem = item\n .replace(/\\$/g, '\\\\$')\n .replace(/\\{/g, '\\\\{')\n .replace(/\\}/g, '\\\\}')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\[/g, '\\\\[');\n const regex = new RegExp(newItem, 'g');\n const positions: number[] = [];\n let match;\n while ((match = regex.exec(params.value)) !== null) {\n positions.push(match.index as number);\n }\n const innerList: OverallKeyWordsPosition[] = [];\n positions.forEach((temp) => {\n innerList.push({ start: temp + 1, end: temp + item.length });\n });\n positionItem.push(innerList);\n });\n return positionItem;\n};\n\n/**\n * 判断光标是否处在关键词位置内\n */\nexport const judgmentCursorInKeyWordsPosition = (params: {\n keyWordsPosition: OverallKeyWordsPosition[][];\n cursorPosition: number;\n}) => {\n for (let index = 0; index < params.keyWordsPosition.length; index++) {\n const element = params.keyWordsPosition[index].find((temp) => {\n return params.cursorPosition >= temp.start && params.cursorPosition < temp.end;\n });\n if (element) return element;\n }\n return undefined;\n};\n","import { toArray, type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useEventListener } from 'ahooks';\nimport { Mentions, type MentionProps } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { getOverallKeyWordsPosition, judgmentCursorInKeyWordsPosition } from './utils';\n\nexport type MentionsWrapperRef = {\n getInputInstance: () => any;\n};\nexport type MentionsWrapperProps = Omit<\n MentionProps,\n | 'value'\n | 'onChange'\n | 'onClick'\n | 'onCursorChange'\n | 'options'\n | 'id'\n | 'split'\n | 'validateSearch'\n | 'ref'\n | 'prefix'\n> & {\n value?: string;\n onChange?: (value?: string) => void;\n /** 设置列表提示关键字,例如:@、$等 */\n prefix?: string | string[];\n onClick?: (value?: string) => void;\n /** 光标移动回调 */\n onCursorChange?: (position: number) => void;\n /**\n * 输入框内整体关键词列表\n * ```\n * 整体关键词交互\n * 1. 光标可整体移动\n * 2. 光标不会存在关键词内部\n * 3. 删除时,整体删除\n * ```\n */\n options?: string[];\n};\n\n/**\n * 基于Antd Mentions进行二次封装,可实现输入内关键字整体控制,包括光标移动、关键词删除等\n * ```\n * 可实现\n * 1. 控制光标输入\n * 2. 可设置关键词,光标不会出现在关键词内部\n * 3. 可整体删除关键词\n *\n * 应用场景例如:\n * 1. 公式输入\n * (【xx金额1】+【xx金额2】)*2\n * <MentionsWrapper prefix=\"$\" options={['【xx金额1】', '【xx金额2】']}/>\n *\n * 2. 短信模板设置\n * 您的订单号为${订单号},订单交易时间为${订单时间}\n * <MentionsWrapper prefix=\"$\" options={['${订单号}', '${订单时间}']}/>\n *\n * demo:https://fex.qa.tcshuke.com/docs/admin/main/other/widget\n * ```\n *\n */\nexport const MentionsWrapper = forwardRef<MentionsWrapperRef, MentionsWrapperProps>(\n (props: MentionsWrapperProps, ref) => {\n const { value, onChange, onClick, onCursorChange, onSelect, options, prefix, ...otherProps } = props;\n const id = hooks.useId(undefined, 'overall-input');\n const inputInnerRef = useRef<TAny>();\n const [cursorPosition, setCursorPosition] = useState(0);\n const invalidOnChangeRef = useRef(false);\n const valueNew = value || '';\n /** 关键词位置 */\n const overallKeyWordsPosition = useMemo(() => {\n if (options) {\n return getOverallKeyWordsPosition({\n overallKeyWords: options || [],\n value: valueNew,\n });\n }\n return [];\n }, [options, valueNew]);\n\n const getInputInstance = () => {\n return inputInnerRef.current?.textarea;\n };\n\n fbaHooks.useEffectCustom(() => {\n onCursorChange?.(cursorPosition || 0);\n }, [cursorPosition]);\n\n useEventListener(\n 'keydown',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart as number;\n const selectionEnd = getInputInstance()?.selectionEnd as number;\n if (['ArrowLeft', 'ArrowRight'].includes(ev.code)) {\n let positionValue = 0;\n if (ev.code === 'ArrowLeft') {\n if (selectionStart - 1 < 0) return;\n positionValue = selectionStart - 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.start, targret.start);\n }\n } else if (ev.code === 'ArrowRight') {\n if (selectionStart + 1 > valueNew.length) return;\n positionValue = selectionStart + 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.end - 1, targret.end - 1);\n }\n }\n } else if (ev.code === 'Backspace') {\n /** 选中关键字/关键字+文字 的情况,直接删除 */\n if (selectionStart !== selectionEnd) {\n return;\n }\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart - 1,\n });\n if (targret) {\n invalidOnChangeRef.current = true;\n const result = valueNew.substring(0, targret.start - 1) + valueNew.substring(targret.end);\n setTimeout(() => {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n }, 50);\n if (!result) {\n invalidOnChangeRef.current = false;\n }\n onChange?.(result);\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n useEventListener(\n 'keyup',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n if (['ArrowUp', 'ArrowDown'].includes(ev.code)) {\n setCursorPosition(selectionStart);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n const onInputChange = hooks.useCallbackRef((value) => {\n if (otherProps.disabled) return;\n if (invalidOnChangeRef.current) {\n invalidOnChangeRef.current = false;\n return;\n }\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onChange?.(value);\n });\n\n const onInputClick = hooks.useCallbackRef((event) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onClick?.(event.target.value);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n });\n\n const onHandleSelect = (options, prefix) => {\n const addPos: number = options.value?.length || 0;\n setCursorPosition((prePos) => prePos + addPos);\n if (onSelect) {\n onSelect(options, prefix);\n }\n };\n\n const mentionOptions = useMemo(() => {\n const prefixList = toArray<string>(prefix);\n return (\n options?.map((item) => {\n let opValue = item;\n for (let index = 0; index < prefixList.length; index++) {\n const element = prefixList[index];\n if (opValue.startsWith(element)) {\n opValue = opValue.replace(element, '');\n break;\n }\n }\n return { label: opValue, value: opValue };\n }) || []\n );\n }, [options, prefix]);\n\n useImperativeHandle(ref, () => {\n return {\n getInputInstance,\n };\n });\n\n return (\n <Mentions\n notFoundContent={<div>暂无数据</div>}\n rows={3}\n {...otherProps}\n prefix={prefix}\n style={{ width: '100%', ...otherProps.style }}\n id={id}\n value={valueNew}\n ref={inputInnerRef}\n onSelect={onHandleSelect}\n onChange={onInputChange}\n onClick={onInputClick}\n split=\"\"\n validateSearch={(text: string) => {\n if (!mentionOptions.length) return false;\n const target = mentionOptions.find((item) => text.indexOf(item.value) >= 0);\n return target && text.length > target.value.length ? false : true;\n }}\n options={mentionOptions}\n />\n );\n },\n);\n"],"names":["getOverallKeyWordsPosition","params","value","overallKeyWords","length","overallKeyWordsNew","Array","from","Set","positionItem","forEach","item","_params$value","includes","newItem","replace","regex","RegExp","positions","match","exec","push","index","innerList","temp","start","end","judgmentCursorInKeyWordsPosition","keyWordsPosition","element","find","cursorPosition","undefined","MentionsWrapper","forwardRef","props","ref","onChange","onClick","onCursorChange","onSelect","options","prefix","otherProps","_objectWithoutPropertiesLoose","_excluded","id","_hooks","useId","inputInnerRef","useRef","_useState","useState","setCursorPosition","invalidOnChangeRef","valueNew","overallKeyWordsPosition","useMemo","getInputInstance","_inputInnerRef$curren","current","textarea","fbaHooks","useEffectCustom","useEventListener","ev","_getInputInstance","_getInputInstance2","selectionStart","selectionEnd","code","positionValue","targret","_getInputInstance3","setSelectionRange","_getInputInstance4","result","substring","setTimeout","_getInputInstance5","target","document","querySelector","_getInputInstance6","_getInputInstance7","_getInputInstance8","onInputChange","useCallbackRef","_getInputInstance9","disabled","onInputClick","event","_getInputInstance10","_getInputInstance11","_getInputInstance12","onHandleSelect","_options$value","addPos","prePos","mentionOptions","prefixList","toArray","map","opValue","startsWith","label","useImperativeHandle","_jsx","Mentions","_extends","notFoundContent","children","rows","style","width","split","validateSearch","text","indexOf"],"mappings":";4gBAEO,IAAMA,EAA6B,SAA7BA,EAA8BC,GACzC,IAAKA,EAAOC,QAAUD,EAAOE,gBAAgBC,OAAQ,MAAO,GAC5D,IAAMC,EAAqBC,MAAMC,KAAK,IAAIC,IAAIP,EAAOE,iBAAmB,KACxE,IAAMM,EAA4C,GAClDJ,EAAmBK,SAAQ,SAACC,GAAS,IAAAC,EACnC,MAAIA,EAACX,EAAOC,QAAPU,MAAAA,EAAcC,SAASF,IAAO,OACnC,IAAMG,EAAUH,EACbI,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OAClB,IAAMC,EAAQ,IAAIC,OAAOH,EAAS,KAClC,IAAMI,EAAsB,GAC5B,IAAIC,EACJ,OAAQA,EAAQH,EAAMI,KAAKnB,EAAOC,UAAY,KAAM,CAClDgB,EAAUG,KAAKF,EAAMG,MACvB,CACA,IAAMC,EAAuC,GAC7CL,EAAUR,SAAQ,SAACc,GACjBD,EAAUF,KAAK,CAAEI,MAAOD,EAAO,EAAGE,IAAKF,EAAOb,EAAKP,QACrD,IACAK,EAAaY,KAAKE,EACpB,IACA,OAAOd,CACT,EAKO,IAAMkB,EAAmC,SAAnCA,EAAoC1B,GAI/C,IAAK,IAAIqB,EAAQ,EAAGA,EAAQrB,EAAO2B,iBAAiBxB,OAAQkB,IAAS,CACnE,IAAMO,EAAU5B,EAAO2B,iBAAiBN,GAAOQ,MAAK,SAACN,GACnD,OAAOvB,EAAO8B,gBAAkBP,EAAKC,OAASxB,EAAO8B,eAAiBP,EAAKE,GAC7E,IACA,GAAIG,EAAS,OAAOA,CACtB,CACA,OAAOG,SACT,sFCqBO,IAAMC,EAAkBC,GAC7B,SAACC,EAA6BC,GAC5B,IAAQlC,EAAuFiC,EAAvFjC,MAAOmC,EAAgFF,EAAhFE,SAAUC,EAAsEH,EAAtEG,QAASC,EAA6DJ,EAA7DI,eAAgBC,EAA6CL,EAA7CK,SAAUC,EAAmCN,EAAnCM,QAASC,EAA0BP,EAA1BO,OAAWC,EAAUC,EAAKT,EAAKU,GACpG,IAAMC,EAAKC,EAAMC,MAAMhB,UAAW,iBAClC,IAAMiB,EAAgBC,IACtB,IAAAC,EAA4CC,EAAS,GAA9CrB,EAAcoB,EAAA,GAAEE,EAAiBF,EAAA,GACxC,IAAMG,EAAqBJ,EAAO,OAClC,IAAMK,EAAWrD,GAAS,GAE1B,IAAMsD,EAA0BC,GAAQ,WACtC,GAAIhB,EAAS,CACX,OAAOzC,EAA2B,CAChCG,gBAAiBsC,GAAW,GAC5BvC,MAAOqD,GAEX,CACA,MAAO,EACT,GAAG,CAACd,EAASc,IAEb,IAAMG,EAAmB,SAAnBA,IAAyB,IAAAC,EAC7B,OAAAA,EAAOV,EAAcW,UAAdD,UAAAA,EAAAA,EAAuBE,UAGhCC,EAASC,iBAAgB,WACvBxB,SAAAA,EAAiBR,GAAkB,EACrC,GAAG,CAACA,IAEJiC,EACE,WACA,SAACC,GAAO,IAAAC,EAAAC,EACN,IAAMC,GAAcF,EAAGR,MAAkB,UAAA,EAAlBQ,EAAoBE,eAC3C,IAAMC,GAAYF,EAAGT,MAAkB,UAAA,EAAlBS,EAAoBE,aACzC,GAAI,CAAC,YAAa,cAAcxD,SAASoD,EAAGK,MAAO,CACjD,IAAIC,EAAgB,EACpB,GAAIN,EAAGK,OAAS,YAAa,CAC3B,GAAIF,EAAiB,EAAI,EAAG,OAC5BG,EAAgBH,EAAiB,EACjCf,EAAkBkB,GAClB,IAAMC,EAAU7C,EAAiC,CAC/CC,iBAAkB4B,EAClBzB,eAAgBwC,IAElB,GAAIC,EAAS,CAAA,IAAAC,GACXA,EAAAf,YAAAe,EAAoBC,kBAAkBF,EAAQ/C,MAAO+C,EAAQ/C,MAC/D,CACF,MAAO,GAAIwC,EAAGK,OAAS,aAAc,CACnC,GAAIF,EAAiB,EAAIb,EAASnD,OAAQ,OAC1CmE,EAAgBH,EAAiB,EACjCf,EAAkBkB,GAClB,IAAMC,EAAU7C,EAAiC,CAC/CC,iBAAkB4B,EAClBzB,eAAgBwC,IAElB,GAAIC,EAAS,CAAA,IAAAG,GACXA,EAAAjB,MAAAiB,MAAAA,EAAoBD,kBAAkBF,EAAQ9C,IAAM,EAAG8C,EAAQ9C,IAAM,EACvE,CACF,CACF,MAAO,GAAIuC,EAAGK,OAAS,YAAa,CAElC,GAAIF,IAAmBC,EAAc,CACnC,MACF,CACA,IAAMG,EAAU7C,EAAiC,CAC/CC,iBAAkB4B,EAClBzB,eAAgBqC,EAAiB,IAEnC,GAAII,EAAS,CACXlB,EAAmBM,QAAU,KAC7B,IAAMgB,EAASrB,EAASsB,UAAU,EAAGL,EAAQ/C,MAAQ,GAAK8B,EAASsB,UAAUL,EAAQ9C,KACrFoD,YAAW,WAAM,IAAAC,GACfA,EAAArB,MAAAqB,MAAAA,EAAoBL,kBAAkBF,EAAQ/C,MAAQ,EAAG+C,EAAQ/C,MAAQ,EAC1E,GAAE,IACH,IAAKmD,EAAQ,CACXtB,EAAmBM,QAAU,KAC/B,CACAvB,GAAAA,MAAAA,EAAWuC,EACb,CACF,CACF,GACA,CACEI,OAAQ,SAARA,IACE,OAAOC,SAASC,cAAa,IAAKpC,EACpC,IAIJkB,EACE,SACA,SAACC,GAAO,IAAAkB,EACN,IAAMf,IAAiBe,EAAAzB,MAAAyB,UAAAA,EAAAA,EAAoBf,iBAAkB,EAC7D,GAAI,CAAC,UAAW,aAAavD,SAASoD,EAAGK,MAAO,CAC9CjB,EAAkBe,GAClB,IAAMI,EAAU7C,EAAiC,CAC/CC,iBAAkB4B,EAClBzB,eAAgBqC,IAElB,GAAII,EAAS,CACX,GAAIJ,EAAiBI,EAAQ/C,MAAQ+C,EAAQ9C,IAAM0C,EAAgB,CAAA,IAAAgB,GACjEA,EAAA1B,MAAA0B,MAAAA,EAAoBV,kBAAkBF,EAAQ/C,MAAQ,EAAG+C,EAAQ/C,MAAQ,EAC3E,KAAO,CAAA,IAAA4D,GACLA,EAAA3B,YAAA2B,EAAoBX,kBAAkBF,EAAQ9C,IAAK8C,EAAQ9C,IAC7D,CACF,CACF,CACF,GACA,CACEsD,OAAQ,SAARA,IACE,OAAOC,SAASC,cAAa,IAAKpC,EACpC,IAIJ,IAAMwC,EAAgBvC,EAAMwC,gBAAe,SAACrF,GAAU,IAAAsF,EACpD,GAAI7C,EAAW8C,SAAU,OACzB,GAAInC,EAAmBM,QAAS,CAC9BN,EAAmBM,QAAU,MAC7B,MACF,CACA,IAAMQ,IAAiBoB,EAAA9B,MAAA8B,UAAAA,EAAAA,EAAoBpB,iBAAkB,EAC7Df,EAAkBe,GAClB/B,GAAAA,MAAAA,EAAWnC,EACb,IAEA,IAAMwF,EAAe3C,EAAMwC,gBAAe,SAACI,GAAU,IAAAC,EACnD,IAAMxB,IAAiBwB,EAAAlC,MAAAkC,UAAAA,EAAAA,EAAoBxB,iBAAkB,EAC7Df,EAAkBe,GAClB9B,GAAO,MAAPA,EAAUqD,EAAMX,OAAO9E,OACvB,IAAMsE,EAAU7C,EAAiC,CAC/CC,iBAAkB4B,EAClBzB,eAAgBqC,IAElB,GAAII,EAAS,CACX,GAAIJ,EAAiBI,EAAQ/C,MAAQ+C,EAAQ9C,IAAM0C,EAAgB,CAAA,IAAAyB,GACjEA,EAAAnC,MAAAmC,MAAAA,EAAoBnB,kBAAkBF,EAAQ/C,MAAQ,EAAG+C,EAAQ/C,MAAQ,EAC3E,KAAO,CAAA,IAAAqE,GACLA,EAAApC,YAAAoC,EAAoBpB,kBAAkBF,EAAQ9C,IAAK8C,EAAQ9C,IAC7D,CACF,CACF,IAEA,IAAMqE,EAAiB,SAAjBA,EAAkBtD,EAASC,GAAW,IAAAsD,EAC1C,IAAMC,IAAiBD,EAAAvD,EAAQvC,QAAR8F,UAAAA,EAAAA,EAAe5F,SAAU,EAChDiD,GAAkB,SAAC6C,GAAM,OAAKA,EAASD,KACvC,GAAIzD,EAAU,CACZA,EAASC,EAASC,EACpB,GAGF,IAAMyD,EAAiB1C,GAAQ,WAC7B,IAAM2C,EAAaC,EAAgB3D,GACnC,OACED,GAAAA,UAAAA,EAAAA,EAAS6D,KAAI,SAAC3F,GACZ,IAAI4F,EAAU5F,EACd,IAAK,IAAIW,EAAQ,EAAGA,EAAQ8E,EAAWhG,OAAQkB,IAAS,CACtD,IAAMO,EAAUuE,EAAW9E,GAC3B,GAAIiF,EAAQC,WAAW3E,GAAU,CAC/B0E,EAAUA,EAAQxF,QAAQc,EAAS,IACnC,KACF,CACF,CACA,MAAO,CAAE4E,MAAOF,EAASrG,MAAOqG,EACjC,MAAK,EAEV,GAAG,CAAC9D,EAASC,IAEbgE,EAAoBtE,GAAK,WACvB,MAAO,CACLsB,iBAAAA,EAEJ,IAEA,OACEiD,EAACC,EAAQC,EAAA,CACPC,gBAAiBH,EAAA,MAAA,CAAAI,SAAK,SACtBC,KAAM,GACFrE,EAAU,CACdD,OAAQA,EACRuE,MAAKJ,EAAA,CAAIK,MAAO,QAAWvE,EAAWsE,OACtCnE,GAAIA,EACJ5C,MAAOqD,EACPnB,IAAKa,EACLT,SAAUuD,EACV1D,SAAUiD,EACVhD,QAASoD,EACTyB,MAAM,GACNC,eAAgB,SAAhBA,EAAiBC,GACf,IAAKlB,EAAe/F,OAAQ,OAAO,MACnC,IAAM4E,EAASmB,EAAerE,MAAK,SAACnB,GAAI,OAAK0G,EAAKC,QAAQ3G,EAAKT,QAAU,KACzE,OAAO8E,GAAUqC,EAAKjH,OAAS4E,EAAO9E,MAAME,OAAS,MAAQ,IAC7D,EACFqC,QAAS0D,IAGf"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/mentions-wrapper/utils.ts","@flatbiz/antd/src/mentions-wrapper/mentions.tsx"],"sourcesContent":["import { type OverallKeyWordsPosition } from './types';\n\nexport const getOverallKeyWordsPosition = (params: { overallKeyWords: string[]; value?: string }) => {\n if (!params.value || !params.overallKeyWords.length) return [];\n const overallKeyWordsNew = Array.from(new Set(params.overallKeyWords || []));\n const positionItem: OverallKeyWordsPosition[][] = [];\n overallKeyWordsNew.forEach((item) => {\n if (!params.value?.includes(item)) return;\n const newItem = item\n .replace(/\\$/g, '\\\\$')\n .replace(/\\{/g, '\\\\{')\n .replace(/\\}/g, '\\\\}')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\[/g, '\\\\[');\n const regex = new RegExp(newItem, 'g');\n const positions: number[] = [];\n let match;\n while ((match = regex.exec(params.value)) !== null) {\n positions.push(match.index as number);\n }\n const innerList: OverallKeyWordsPosition[] = [];\n positions.forEach((temp) => {\n innerList.push({ start: temp + 1, end: temp + item.length });\n });\n positionItem.push(innerList);\n });\n return positionItem;\n};\n\n/**\n * 判断光标是否处在关键词位置内\n */\nexport const judgmentCursorInKeyWordsPosition = (params: {\n keyWordsPosition: OverallKeyWordsPosition[][];\n cursorPosition: number;\n}) => {\n for (let index = 0; index < params.keyWordsPosition.length; index++) {\n const element = params.keyWordsPosition[index].find((temp) => {\n return params.cursorPosition >= temp.start && params.cursorPosition < temp.end;\n });\n if (element) return element;\n }\n return undefined;\n};\n","import { toArray, type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useEventListener } from 'ahooks';\nimport { Mentions, type MentionProps } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { getOverallKeyWordsPosition, judgmentCursorInKeyWordsPosition } from './utils';\n\nexport type MentionsWrapperRef = {\n getInputInstance: () => any;\n};\nexport type MentionsWrapperProps = Omit<\n MentionProps,\n | 'value'\n | 'onChange'\n | 'onClick'\n | 'onCursorChange'\n | 'options'\n | 'id'\n | 'split'\n | 'validateSearch'\n | 'ref'\n | 'prefix'\n> & {\n value?: string;\n onChange?: (value?: string) => void;\n /** 设置列表提示关键字,例如:@、$等 */\n prefix?: string | string[];\n onClick?: (value?: string) => void;\n /** 光标移动回调 */\n onCursorChange?: (position: number) => void;\n /**\n * 输入框内整体关键词列表\n * ```\n * 整体关键词交互\n * 1. 光标可整体移动\n * 2. 光标不会存在关键词内部\n * 3. 删除时,整体删除\n * ```\n */\n options?: string[];\n};\n\n/**\n * 基于Antd Mentions进行二次封装,可实现输入内关键字整体控制,包括光标移动、关键词删除等\n * ```\n * 可实现\n * 1. 控制光标输入\n * 2. 可设置关键词,光标不会出现在关键词内部\n * 3. 可整体删除关键词\n *\n * 应用场景例如:\n * 1. 公式输入\n * (【xx金额1】+【xx金额2】)*2\n * <MentionsWrapper prefix=\"$\" options={['【xx金额1】', '【xx金额2】']}/>\n *\n * 2. 短信模板设置\n * 您的订单号为${订单号},订单交易时间为${订单时间}\n * <MentionsWrapper prefix=\"$\" options={['${订单号}', '${订单时间}']}/>\n *\n * demo:https://fex.qa.tcshuke.com/docs/admin/main/other/widget\n * ```\n *\n */\nexport const MentionsWrapper = forwardRef<MentionsWrapperRef, MentionsWrapperProps>(\n (props: MentionsWrapperProps, ref) => {\n const { value, onChange, onClick, onCursorChange, onSelect, options, prefix, ...otherProps } = props;\n const id = hooks.useId(undefined, 'overall-input');\n const inputInnerRef = useRef<TAny>();\n const [cursorPosition, setCursorPosition] = useState(0);\n const invalidOnChangeRef = useRef(false);\n const valueNew = value || '';\n /** 关键词位置 */\n const overallKeyWordsPosition = useMemo(() => {\n if (options) {\n return getOverallKeyWordsPosition({\n overallKeyWords: options || [],\n value: valueNew,\n });\n }\n return [];\n }, [options, valueNew]);\n\n const getInputInstance = () => {\n return inputInnerRef.current?.textarea;\n };\n\n fbaHooks.useEffectCustom(() => {\n onCursorChange?.(cursorPosition || 0);\n }, [cursorPosition]);\n\n useEventListener(\n 'keydown',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart as number;\n const selectionEnd = getInputInstance()?.selectionEnd as number;\n if (['ArrowLeft', 'ArrowRight'].includes(ev.code)) {\n let positionValue = 0;\n if (ev.code === 'ArrowLeft') {\n if (selectionStart - 1 < 0) return;\n positionValue = selectionStart - 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.start, targret.start);\n }\n } else if (ev.code === 'ArrowRight') {\n if (selectionStart + 1 > valueNew.length) return;\n positionValue = selectionStart + 1;\n setCursorPosition(positionValue);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: positionValue,\n });\n if (targret) {\n getInputInstance()?.setSelectionRange(targret.end - 1, targret.end - 1);\n }\n }\n } else if (ev.code === 'Backspace') {\n /** 选中关键字/关键字+文字 的情况,直接删除 */\n if (selectionStart !== selectionEnd) {\n return;\n }\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart - 1,\n });\n if (targret) {\n invalidOnChangeRef.current = true;\n const result = valueNew.substring(0, targret.start - 1) + valueNew.substring(targret.end);\n setTimeout(() => {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n }, 50);\n if (!result) {\n invalidOnChangeRef.current = false;\n }\n onChange?.(result);\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n useEventListener(\n 'keyup',\n (ev) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n if (['ArrowUp', 'ArrowDown'].includes(ev.code)) {\n setCursorPosition(selectionStart);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n }\n },\n {\n target: () => {\n return document.querySelector(`#${id}`);\n },\n },\n );\n\n const onInputChange = hooks.useCallbackRef((value) => {\n if (otherProps.disabled) return;\n if (invalidOnChangeRef.current) {\n invalidOnChangeRef.current = false;\n return;\n }\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onChange?.(value);\n });\n\n const onInputClick = hooks.useCallbackRef((event) => {\n const selectionStart = getInputInstance()?.selectionStart || 0;\n setCursorPosition(selectionStart);\n onClick?.(event.target.value);\n const targret = judgmentCursorInKeyWordsPosition({\n keyWordsPosition: overallKeyWordsPosition,\n cursorPosition: selectionStart,\n });\n if (targret) {\n if (selectionStart - targret.start < targret.end - selectionStart) {\n getInputInstance()?.setSelectionRange(targret.start - 1, targret.start - 1);\n } else {\n getInputInstance()?.setSelectionRange(targret.end, targret.end);\n }\n }\n });\n\n const onHandleSelect = (options, prefix) => {\n const addPos: number = options.value?.length || 0;\n setCursorPosition((prePos) => prePos + addPos);\n if (onSelect) {\n onSelect(options, prefix);\n }\n };\n\n const mentionOptions = useMemo(() => {\n const prefixList = toArray<string>(prefix);\n return (\n options?.map((item) => {\n let opValue = item;\n for (let index = 0; index < prefixList.length; index++) {\n const element = prefixList[index];\n if (opValue.startsWith(element)) {\n opValue = opValue.replace(element, '');\n break;\n }\n }\n return { label: opValue, value: opValue };\n }) || []\n );\n }, [options, prefix]);\n\n useImperativeHandle(ref, () => {\n return {\n getInputInstance,\n };\n });\n\n return (\n <Mentions\n notFoundContent={<div>暂无数据</div>}\n rows={3}\n {...otherProps}\n prefix={prefix}\n style={{ width: '100%', ...otherProps.style }}\n id={id}\n value={valueNew}\n ref={inputInnerRef}\n onSelect={onHandleSelect}\n onChange={onInputChange}\n onClick={onInputClick}\n split=\"\"\n validateSearch={(text: string) => {\n if (!mentionOptions.length) return false;\n const target = mentionOptions.find((item) => text.indexOf(item.value) >= 0);\n return target && text.length > target.value.length ? false : true;\n }}\n options={mentionOptions}\n />\n );\n },\n);\n"],"names":["getOverallKeyWordsPosition","params","value","overallKeyWords","length","overallKeyWordsNew","Array","from","Set","positionItem","forEach","item","_params$value","includes","newItem","replace","regex","RegExp","positions","match","exec","push","index","innerList","temp","start","end","judgmentCursorInKeyWordsPosition","keyWordsPosition","element","find","cursorPosition","undefined","MentionsWrapper","forwardRef","props","ref","onChange","onClick","onCursorChange","onSelect","options","prefix","otherProps","_objectWithoutPropertiesLoose","_excluded","id","_hooks","useId","inputInnerRef","useRef","_useState","useState","setCursorPosition","invalidOnChangeRef","valueNew","overallKeyWordsPosition","useMemo","getInputInstance","_inputInnerRef$curren","current","textarea","fbaHooks","useEffectCustom","useEventListener","ev","_getInputInstance","_getInputInstance2","selectionStart","selectionEnd","code","positionValue","targret","_getInputInstance3","setSelectionRange","_getInputInstance4","result","substring","setTimeout","_getInputInstance5","target","document","querySelector","_getInputInstance6","_getInputInstance7","_getInputInstance8","onInputChange","useCallbackRef","_getInputInstance9","disabled","onInputClick","event","_getInputInstance0","_getInputInstance1","_getInputInstance10","onHandleSelect","_options$value","addPos","prePos","mentionOptions","prefixList","toArray","map","opValue","startsWith","label","useImperativeHandle","_jsx","Mentions","_extends","notFoundContent","children","rows","style","width","split","validateSearch","text","indexOf"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
import './index.css';
|
|
3
3
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
4
|
-
import{_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as n,isValidElement as o,Fragment as e}from"react";import{jsxs as t,jsx as i}from"react/jsx-runtime";var l=function l(c){var u=c.action,a=c.children;var s=n(false),p=s[0],f=s[1];var v=function r(n){return new Promise(
|
|
4
|
+
import{_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as n,isValidElement as o,Fragment as e}from"react";import{jsxs as t,jsx as i}from"react/jsx-runtime";var l=function l(c){var u=c.action,a=c.children;var s=n(false),p=s[0],f=s[1];var v=function r(n){return new Promise(function(r,e){var t;if(o(u)){t=u.props.onClick;if(typeof t==="function"){return Promise.resolve(t==null?void 0:t(n)).then(function(r){try{return l.call(this)}catch(r){return e(r)}}.bind(this),e)}function l(){return i.call(this)}return l.call(this)}function i(){f(true);return r()}return i.call(this)})};var h=function r(){f(false)};var m=o(a)?a:a({onClose:h,open:p});return t(e,{children:[o(u)?i(u.type,r({},u.props,{onClick:v})):u==null?void 0:u({onClick:v,onClose:h,open:p}),i(m.type,r({open:p,onClose:h,onCancel:h},m.props))]})};export{l as ModalAction};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/modal-action/modal-action.tsx"],"sourcesContent":["import { TAny } from '@flatbiz/utils';\nimport { Fragment, isValidElement, ReactElement, useState } from 'react';\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: (e) => void })\n | ((data: { onClick: (e) => void; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n const childrenReactElement = isValidElement(children) ? children : (children as TAny)({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n"],"names":["ModalAction","props","action","children","_useState","useState","open","setOpen","handleOnClick","e","Promise","$return","$error","onClick","isValidElement","resolve","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","onClose","childrenReactElement","_jsxs","Fragment","_jsx","type","_extends","onCancel"],"mappings":";sLAoBaA,EAAc,SAAdA,EAAeC,GAC1B,IAAQC,EAAqBD,EAArBC,OAAQC,EAAaF,EAAbE,SAEhB,IAAAC,EAAwBC,EAAkB,OAAnCC,EAAIF,EAAA,GAAEG,EAAOH,EAAA,GAEpB,IAAMI,EAAgB,SAAhBA,EAAuBC,GAAP,OAAA,IAAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/modal-action/modal-action.tsx"],"sourcesContent":["import { TAny } from '@flatbiz/utils';\nimport { Fragment, isValidElement, ReactElement, useState } from 'react';\n\nexport interface ModalActionProps {\n children: ReactElement | ((data: { onClose: () => void; open: boolean }) => ReactElement);\n action?:\n | (ReactElement & { onClick?: (e) => void })\n | ((data: { onClick: (e) => void; onClose: () => void; open: boolean }) => ReactElement);\n}\n\n/**\n * 弹框 触发器\n * ```\n * <ModalAction action={<Button type=\"primary\">打开</Button>}>\n * {({ onClose }) => (\n * <Modal onOk={onClose}>xxx</Modal>\n * )}\n * </ModalAction>\n * ```\n */\nexport const ModalAction = (props: ModalActionProps) => {\n const { action, children } = props;\n\n const [open, setOpen] = useState<boolean>(false);\n\n const handleOnClick = async (e: unknown) => {\n if (isValidElement(action)) {\n const { onClick } = action.props;\n if (typeof onClick === 'function') {\n await onClick?.(e);\n }\n }\n setOpen(true);\n };\n\n const onClose = () => {\n setOpen(false);\n };\n const childrenReactElement = isValidElement(children) ? children : (children as TAny)({ onClose, open });\n\n return (\n <Fragment>\n {isValidElement(action) ? (\n <action.type {...action.props} onClick={handleOnClick} />\n ) : (\n action?.({ onClick: handleOnClick, onClose, open })\n )}\n <childrenReactElement.type\n open={open}\n onClose={onClose}\n onCancel={onClose}\n {...childrenReactElement.props}\n />\n </Fragment>\n );\n};\n"],"names":["ModalAction","props","action","children","_useState","useState","open","setOpen","handleOnClick","e","Promise","$return","$error","onClick","isValidElement","resolve","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","onClose","childrenReactElement","_jsxs","Fragment","_jsx","type","_extends","onCancel"],"mappings":";sLAoBaA,EAAc,SAAdA,EAAeC,GAC1B,IAAQC,EAAqBD,EAArBC,OAAQC,EAAaF,EAAbE,SAEhB,IAAAC,EAAwBC,EAAkB,OAAnCC,EAAIF,EAAA,GAAEG,EAAOH,EAAA,GAEpB,IAAMI,EAAgB,SAAhBA,EAAuBC,GAAP,OAAA,IAAAC,QAAA,SAAAC,EAAAC,GAAA,IAAAC,EACpB,GAAIC,EAAeZ,GAAS,CAClBW,EAAYX,EAAOD,MAAnBY,QACR,UAAWA,IAAY,WAAY,CACjC,OAAAH,QAAAK,QAAMF,GAAAA,UAAAA,EAAAA,EAAUJ,IAAhBO,KA7BR,SAAAC,GAAA,IAAI,OAAJC,EAAGC,KAAIC,KAAE,CAAC,MAAAC,GAAW,OAAOT,EAAAS,EAAM,CAAC,EAAhCC,KAAKF,MAAKR,EA8BP,CAAC,SAAAM,IAAA,OA9BPK,EAAGJ,KAAIC,KAAI,CAAA,OAAXF,EAAGC,KAAIC,KA+BH,CAAC,SAAAG,IACDhB,EAAQ,MAAM,OAAAI,GAAA,CAAA,OAhClBY,EAAGJ,KAAIC,KAAI,EAiCR,EAED,IAAMI,EAAU,SAAVA,IACJjB,EAAQ,QAEV,IAAMkB,EAAuBX,EAAeX,GAAYA,EAAYA,EAAkB,CAAEqB,QAAAA,EAASlB,KAAAA,IAEjG,OACEoB,EAACC,EAAQ,CAAAxB,UACNW,EAAeZ,GACd0B,EAAC1B,EAAO2B,KAAIC,EAAK5B,GAAAA,EAAOD,MAAK,CAAEY,QAASL,KAExCN,GAAM,UAAA,EAANA,EAAS,CAAEW,QAASL,EAAegB,QAAAA,EAASlB,KAAAA,IAE9CsB,EAACH,EAAqBI,KAAIC,EAAA,CACxBxB,KAAMA,EACNkB,QAASA,EACTO,SAAUP,GACNC,EAAqBxB,UAIjC"}
|
|
@@ -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{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{Space as a,Button as n,Modal as i}from"antd";import{Fragment as t}from"react";import{fbaHooks as l}from"../fba-hooks/index.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"@flatbiz/utils";import"../use-responsive-point-
|
|
5
|
+
import{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{Space as a,Button as n,Modal as i}from"antd";import{Fragment as t}from"react";import{fbaHooks as l}from"../fba-hooks/index.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"@flatbiz/utils";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var d=["loading","okText","cancelText","onCancel","onOk","hideOkBtn"];var p=function r(i){var l=i.loading,p=i.okText,m=p===void 0?"保存":p,u=i.cancelText,h=u===void 0?"取消":u,f=i.onCancel,v=i.onOk,k=i.hideOkBtn,N=e(i,d);return s(t,{children:c(a,{size:"middle",children:[s(n,o({},N.cancelButtonProps,{className:"cancel-btn",onClick:f,children:h})),k!=true&&s(n,o({type:"primary"},N.okButtonProps,{className:"ok-btn",onClick:v,loading:l,children:m}))]})})};var m=["pageLoading","className","width","children"];var u=function r(){return s("div",{className:"modal-wrapper-loader",children:c("div",{className:"loader-wrapper",children:[s("div",{className:"loader-inner"}),s("div",{className:"loader-text",children:"LOADING"})]})})};var h=function r(e){return c(t,{children:[s("div",{className:"modal-wrapper-content",children:e.children}),e.operationProps?s(f,{children:s(p,o({},e.operationProps))}):null]})};var f=function r(e){return s("div",{className:"modal-wrapper-footer",children:e.children})};var v=function a(n){var d=n.pageLoading,p=n.className,h=n.width,f=n.children,v=e(n,m);l.useEffectCustom(function(){if(n["operationProps"]){throw new Error("ModalWrapper组件升级,参数operationProps用法变更,请及时更新")}},[]);return s(i,o({className:r("modal-wrapper",p),keyboard:false,destroyOnClose:true,forceRender:false},v,{width:h||600,footer:null,children:c(t,{children:[f,d&&s(u,{})]})}))};v.Content=h;v.Footer=f;export{v as ModalWrapper};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx"],"sourcesContent":["import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * @deprecated 已过时 4.3.0版本移除,后面版本会移除;请使用 dialogModal.open\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n"],"names":["ModalOperation","_ref","loading","_ref$okText","okText","_ref$cancelText","cancelText","onCancel","onOk","hideOkBtn","otherProps","_objectWithoutPropertiesLoose","_excluded","_jsx","Fragment","children","_jsxs","Space","size","Button","_extends","cancelButtonProps","className","onClick","type","okButtonProps","PageLoader","ModalWrapperContent","props","operationProps","ModalWrapperFooter","ModalWrapper","pageLoading","width","fbaHooks","useEffectCustom","Error","Modal","_classNames","keyboard","destroyOnClose","forceRender","footer","Content","Footer"],"mappings":";4hBAcO,IAAMA,EAAiB,SAAjBA,EAAcC,GAQG,IAP5BC,EAAOD,EAAPC,QAAOC,EAAAF,EACPG,OAAAA,EAAMD,SAAG,EAAA,KAAIA,EAAAE,EAAAJ,EACbK,WAAAA,EAAUD,SAAG,EAAA,KAAIA,EACjBE,EAAQN,EAARM,SACAC,EAAIP,EAAJO,KACAC,EAASR,EAATQ,UACGC,EAAUC,EAAAV,EAAAW,GAEb,OACEC,EAACC,EAAQ,CAAAC,SACPC,EAACC,EAAK,CAACC,KAAK,SAAQH,SAAA,CAClBF,EAACM,EAAMC,EAAA,CAAA,EAAKV,EAAWW,kBAAiB,CAAEC,UAAU,aAAaC,QAAShB,EAASQ,SAChFT,KAEFG,GAAa,MACZI,EAACM,EAAMC,EAAA,CACLI,KAAK,WACDd,EAAWe,cAAa,CAC5BH,UAAU,SACVC,QAASf,EACTN,QAASA,EAAQa,SAEhBX,SAMb,uDCfA,IAAMsB,EAAa,SAAbA,IACJ,OACEb,EAAA,MAAA,CAAKS,UAAU,uBAAsBP,SACnCC,EAAA,MAAA,CAAKM,UAAU,iBAAgBP,UAC7BF,EAAA,MAAA,CAAKS,UAAU,iBACfT,EAAA,MAAA,CAAKS,UAAU,cAAaP,SAAC,gBAIrC,EAEA,IAAMY,EAAsB,SAAtBA,EAAuBC,GAC3B,OACEZ,EAACF,EAAQ,CAAAC,UACPF,EAAA,MAAA,CAAKS,UAAU,wBAAuBP,SAAEa,EAAMb,WAC7Ca,EAAMC,eACLhB,EAACiB,EAAkB,CAAAf,SACjBF,EAACb,EAAcoB,EAAKQ,CAAAA,EAAAA,EAAMC,mBAE1B,OAGV,EAEA,IAAMC,EAAqB,SAArBA,EAAsBF,GAC1B,OAAOf,EAAA,MAAA,CAAKS,UAAU,uBAAsBP,SAAEa,EAAMb,UACtD,MAgBagB,EAAkE,SAAlEA,EAAmEH,GAC9E,IAAQI,EAA2DJ,EAA3DI,YAAaV,EAA8CM,EAA9CN,UAAWW,EAAmCL,EAAnCK,MAAOlB,EAA4Ba,EAA5Bb,SAAaL,EAAUC,EAAKiB,EAAKhB,GAExEsB,EAASC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx"],"sourcesContent":["import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * @deprecated 已过时 4.3.0版本移除,后面版本会移除;请使用 dialogModal.open\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n"],"names":["ModalOperation","_ref","loading","_ref$okText","okText","_ref$cancelText","cancelText","onCancel","onOk","hideOkBtn","otherProps","_objectWithoutPropertiesLoose","_excluded","_jsx","Fragment","children","_jsxs","Space","size","Button","_extends","cancelButtonProps","className","onClick","type","okButtonProps","PageLoader","ModalWrapperContent","props","operationProps","ModalWrapperFooter","ModalWrapper","pageLoading","width","fbaHooks","useEffectCustom","Error","Modal","_classNames","keyboard","destroyOnClose","forceRender","footer","Content","Footer"],"mappings":";4hBAcO,IAAMA,EAAiB,SAAjBA,EAAcC,GAQG,IAP5BC,EAAOD,EAAPC,QAAOC,EAAAF,EACPG,OAAAA,EAAMD,SAAG,EAAA,KAAIA,EAAAE,EAAAJ,EACbK,WAAAA,EAAUD,SAAG,EAAA,KAAIA,EACjBE,EAAQN,EAARM,SACAC,EAAIP,EAAJO,KACAC,EAASR,EAATQ,UACGC,EAAUC,EAAAV,EAAAW,GAEb,OACEC,EAACC,EAAQ,CAAAC,SACPC,EAACC,EAAK,CAACC,KAAK,SAAQH,SAAA,CAClBF,EAACM,EAAMC,EAAA,CAAA,EAAKV,EAAWW,kBAAiB,CAAEC,UAAU,aAAaC,QAAShB,EAASQ,SAChFT,KAEFG,GAAa,MACZI,EAACM,EAAMC,EAAA,CACLI,KAAK,WACDd,EAAWe,cAAa,CAC5BH,UAAU,SACVC,QAASf,EACTN,QAASA,EAAQa,SAEhBX,SAMb,uDCfA,IAAMsB,EAAa,SAAbA,IACJ,OACEb,EAAA,MAAA,CAAKS,UAAU,uBAAsBP,SACnCC,EAAA,MAAA,CAAKM,UAAU,iBAAgBP,UAC7BF,EAAA,MAAA,CAAKS,UAAU,iBACfT,EAAA,MAAA,CAAKS,UAAU,cAAaP,SAAC,gBAIrC,EAEA,IAAMY,EAAsB,SAAtBA,EAAuBC,GAC3B,OACEZ,EAACF,EAAQ,CAAAC,UACPF,EAAA,MAAA,CAAKS,UAAU,wBAAuBP,SAAEa,EAAMb,WAC7Ca,EAAMC,eACLhB,EAACiB,EAAkB,CAAAf,SACjBF,EAACb,EAAcoB,EAAKQ,CAAAA,EAAAA,EAAMC,mBAE1B,OAGV,EAEA,IAAMC,EAAqB,SAArBA,EAAsBF,GAC1B,OAAOf,EAAA,MAAA,CAAKS,UAAU,uBAAsBP,SAAEa,EAAMb,UACtD,MAgBagB,EAAkE,SAAlEA,EAAmEH,GAC9E,IAAQI,EAA2DJ,EAA3DI,YAAaV,EAA8CM,EAA9CN,UAAWW,EAAmCL,EAAnCK,MAAOlB,EAA4Ba,EAA5Bb,SAAaL,EAAUC,EAAKiB,EAAKhB,GAExEsB,EAASC,gBAAgB,WACvB,GAAIP,EAAM,kBAAmB,CAC3B,MAAM,IAAIQ,MAAM,8CAClB,CACD,EAAE,IAEH,OACEvB,EAACwB,EAAKjB,EAAA,CACJE,UAAWgB,EAAW,gBAAiBhB,GACvCiB,SAAU,MACVC,eAAgB,KAChBC,YAAa,OACT/B,EAAU,CACduB,MAAOA,GAAS,IAChBS,OAAQ,KAAK3B,SAEbC,EAACF,EAAQ,CAAAC,SAAA,CACNA,EACAiB,GAAenB,EAACa,EAAU,CAAA,QAInC,EAEAK,EAAaY,QAAUhB,EACvBI,EAAaa,OAASd"}
|
|
@@ -5,5 +5,5 @@ import './../pre-defined-class-name/index.css';
|
|
|
5
5
|
import './../types/index.css';
|
|
6
6
|
import './index.css';
|
|
7
7
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
8
|
-
import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isNotEmptyArray as i,isEmptyArray as s,isUndefinedOrNull as t}from"@flatbiz/utils";import{InputNumber as n}from"antd";import{useMemo as o}from"react";import{FlexLayout as m}from"../flex-layout/index.js";import{FormItemWrapper as u}from"../form-item-wrapper/index.js";import{jsx as a,jsxs as l}from"react/jsx-runtime";import"@dimjs/utils/cjs/class-names";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-
|
|
8
|
+
import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isNotEmptyArray as i,isEmptyArray as s,isUndefinedOrNull as t}from"@flatbiz/utils";import{InputNumber as n}from"antd";import{useMemo as o}from"react";import{FlexLayout as m}from"../flex-layout/index.js";import{FormItemWrapper as u}from"../form-item-wrapper/index.js";import{jsx as a,jsxs as l}from"react/jsx-runtime";import"@dimjs/utils/cjs/class-names";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";import"../pre-defined-class-name/index.js";var d=["minFormItemName","maxFormItemName","required","requiredRuleMessage","rangeRuleMessage","minInputNumberProps","maxInputNumberProps","isInputEqual"];var p=function p(f){var c=f.minFormItemName,v=f.maxFormItemName,j=f.required,g=f.requiredRuleMessage,P=f.rangeRuleMessage,x=f.minInputNumberProps,h=f.maxInputNumberProps,I=f.isInputEqual,q=e(f,d);var y=o(function(){if(!P)return["最小值输入不能超过最大值","最大值输入不能低于最小值"];if(i(P)){return[P[0],P[1]||P[0]]}return[P,P]},[P]);var N=o(function(){if(!g||s(g))return[];if(i(g)){return[g[0],g[1]||g[0]]}return[g,g]},[g]);var b=[{required:j,message:N[0]||""},function(e){var r=e.getFieldValue;return{validator:function e(i,s){if(t(s)){return Promise.resolve()}var n=r(v);if(t(n)){return Promise.resolve()}if(I){if(s<=n){return Promise.resolve()}}else{if(s<n){return Promise.resolve()}}return Promise.reject(new Error(y[0]))}}}];var w=[{required:j,message:N[1]||""},function(e){var r=e.getFieldValue;return{validator:function e(i,s){if(t(s)){return Promise.resolve()}var n=r(c);if(t(n)){return Promise.resolve()}if(I){if(s>=n){return Promise.resolve()}}else{if(s>n){return Promise.resolve()}}return Promise.reject(new Error(y[1]))}}}];return a(u,r({},q,{required:j,children:l(m,{fullIndex:[0,1],direction:"horizontal",gap:10,children:[a(u,{name:c,dependencies:[v],rules:b,style:{margin:0},children:a(n,r({placeholder:"请输入"},x,{style:r({width:"100%"},x==null?void 0:x.style)}))}),a(u,{name:v,dependencies:[c],rules:w,style:{margin:0},children:a(n,r({placeholder:"请输入"},h,{style:r({width:"100%"},h==null?void 0:h.style)}))})]})}))};export{p as NumberRangeFormItem};
|
|
9
9
|
//# sourceMappingURL=index.js.map
|