@flatbiz/antd 4.5.54 → 4.5.56
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.js +1 -1
- package/esm/card-layout/index.js.map +1 -1
- package/esm/cascader-wrapper/index.css +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-636a568e.js +8 -0
- package/esm/index-636a568e.js.map +1 -0
- 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 -2
- 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.css +1 -1
- package/esm/request-status/index.js +2 -1
- package/esm/request-status/index.js.map +1 -1
- package/esm/resizable-drawer/index.js +1 -6
- 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.css +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 +2 -2
- 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 +51 -28
- package/package.json +4 -5
- package/esm/ai-search/index.css +0 -0
- package/esm/ai-search/index.js +0 -11
- package/esm/ai-search/index.js.map +0 -1
- 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/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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/number-range-form-item/number-range.tsx"],"sourcesContent":["import { isEmptyArray, isNotEmptyArray, isUndefinedOrNull } from '@flatbiz/utils';\nimport { InputNumber, InputNumberProps } from 'antd';\nimport { useMemo } from 'react';\nimport { FlexLayout } from '../flex-layout/flex-layout';\nimport { FormItemWrapper, type FormItemWrapperProps } from '../form-item-wrapper';\nimport type { FormItemNamePath } from '../types';\n\n// type InputNumberProps = GetProps<typeof InputNumber>;\n\nexport type NumberRangeFormItemProps = Omit<FormItemWrapperProps, 'name' | 'rules'> & {\n minFormItemName: FormItemNamePath;\n maxFormItemName: FormItemNamePath;\n /** 是否必填 */\n required?: boolean;\n /** 必填验证异常文案 */\n requiredRuleMessage?: string | [string, string];\n /** 范围验证异常文案 */\n rangeRuleMessage?: string | [string, string];\n minInputNumberProps?: Omit<InputNumberProps, 'value'>;\n maxInputNumberProps?: Omit<InputNumberProps, 'value'>;\n /** 最小值与最大值输入是否可以相同 */\n isInputEqual?: boolean;\n};\n/**\n * 数字输入范围组件\n */\nexport const NumberRangeFormItem = (props: NumberRangeFormItemProps) => {\n const {\n minFormItemName,\n maxFormItemName,\n required,\n requiredRuleMessage,\n rangeRuleMessage,\n minInputNumberProps,\n maxInputNumberProps,\n isInputEqual,\n ...otherProps\n } = props;\n\n const rangeRuleMessageList = useMemo(() => {\n if (!rangeRuleMessage) return ['最小值输入不能超过最大值', '最大值输入不能低于最小值'];\n if (isNotEmptyArray(rangeRuleMessage)) {\n return [rangeRuleMessage[0], rangeRuleMessage[1] || rangeRuleMessage[0]];\n }\n return [rangeRuleMessage, rangeRuleMessage] as string[];\n }, [rangeRuleMessage]);\n\n const requiredRuleMessageList = useMemo(() => {\n if (!requiredRuleMessage || isEmptyArray(requiredRuleMessage)) return [];\n if (isNotEmptyArray(requiredRuleMessage)) {\n return [requiredRuleMessage[0], requiredRuleMessage[1] || requiredRuleMessage[0]];\n }\n return [requiredRuleMessage, requiredRuleMessage] as string[];\n }, [requiredRuleMessage]);\n\n const minRules = [\n { required: required, message: requiredRuleMessageList[0] || '' },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (isUndefinedOrNull(value)) {\n return Promise.resolve();\n }\n const maxValue = getFieldValue(maxFormItemName);\n if (isUndefinedOrNull(maxValue)) {\n return Promise.resolve();\n }\n if (isInputEqual) {\n if (value <= maxValue) {\n return Promise.resolve();\n }\n } else {\n if (value < maxValue) {\n return Promise.resolve();\n }\n }\n return Promise.reject(new Error(rangeRuleMessageList[0]));\n },\n }),\n ];\n\n const maxRules = [\n { required: required, message: requiredRuleMessageList[1] || '' },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (isUndefinedOrNull(value)) {\n return Promise.resolve();\n }\n const minValue = getFieldValue(minFormItemName);\n if (isUndefinedOrNull(minValue)) {\n return Promise.resolve();\n }\n\n if (isInputEqual) {\n if (value >= minValue) {\n return Promise.resolve();\n }\n } else {\n if (value > minValue) {\n return Promise.resolve();\n }\n }\n return Promise.reject(new Error(rangeRuleMessageList[1]));\n },\n }),\n ];\n\n return (\n <FormItemWrapper {...otherProps} required={required}>\n <FlexLayout fullIndex={[0, 1]} direction=\"horizontal\" gap={10}>\n <FormItemWrapper\n name={minFormItemName}\n dependencies={[maxFormItemName]}\n rules={minRules}\n style={{ margin: 0 }}\n >\n <InputNumber\n placeholder=\"请输入\"\n {...minInputNumberProps}\n style={{ width: '100%', ...minInputNumberProps?.style }}\n />\n </FormItemWrapper>\n <FormItemWrapper\n name={maxFormItemName}\n dependencies={[minFormItemName]}\n rules={maxRules}\n style={{ margin: 0 }}\n >\n <InputNumber\n placeholder=\"请输入\"\n {...maxInputNumberProps}\n style={{ width: '100%', ...maxInputNumberProps?.style }}\n />\n </FormItemWrapper>\n </FlexLayout>\n </FormItemWrapper>\n );\n};\n"],"names":["NumberRangeFormItem","props","minFormItemName","maxFormItemName","required","requiredRuleMessage","rangeRuleMessage","minInputNumberProps","maxInputNumberProps","isInputEqual","otherProps","_objectWithoutPropertiesLoose","_excluded","rangeRuleMessageList","useMemo","isNotEmptyArray","requiredRuleMessageList","isEmptyArray","minRules","message","_ref","getFieldValue","validator","_","value","isUndefinedOrNull","Promise","resolve","maxValue","reject","Error","maxRules","_ref2","minValue","_jsx","FormItemWrapper","_extends","children","_jsxs","FlexLayout","fullIndex","direction","gap","name","dependencies","rules","style","margin","InputNumber","placeholder","width"],"mappings":";8xBA0BaA,EAAsB,SAAtBA,EAAuBC,GAClC,IACEC,EASED,EATFC,gBACAC,EAQEF,EARFE,gBACAC,EAOEH,EAPFG,SACAC,EAMEJ,EANFI,oBACAC,EAKEL,EALFK,iBACAC,EAIEN,EAJFM,oBACAC,EAGEP,EAHFO,oBACAC,EAEER,EAFFQ,aACGC,EAAUC,EACXV,EAAKW,GAET,IAAMC,EAAuBC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/number-range-form-item/number-range.tsx"],"sourcesContent":["import { isEmptyArray, isNotEmptyArray, isUndefinedOrNull } from '@flatbiz/utils';\nimport { InputNumber, InputNumberProps } from 'antd';\nimport { useMemo } from 'react';\nimport { FlexLayout } from '../flex-layout/flex-layout';\nimport { FormItemWrapper, type FormItemWrapperProps } from '../form-item-wrapper';\nimport type { FormItemNamePath } from '../types';\n\n// type InputNumberProps = GetProps<typeof InputNumber>;\n\nexport type NumberRangeFormItemProps = Omit<FormItemWrapperProps, 'name' | 'rules'> & {\n minFormItemName: FormItemNamePath;\n maxFormItemName: FormItemNamePath;\n /** 是否必填 */\n required?: boolean;\n /** 必填验证异常文案 */\n requiredRuleMessage?: string | [string, string];\n /** 范围验证异常文案 */\n rangeRuleMessage?: string | [string, string];\n minInputNumberProps?: Omit<InputNumberProps, 'value'>;\n maxInputNumberProps?: Omit<InputNumberProps, 'value'>;\n /** 最小值与最大值输入是否可以相同 */\n isInputEqual?: boolean;\n};\n/**\n * 数字输入范围组件\n */\nexport const NumberRangeFormItem = (props: NumberRangeFormItemProps) => {\n const {\n minFormItemName,\n maxFormItemName,\n required,\n requiredRuleMessage,\n rangeRuleMessage,\n minInputNumberProps,\n maxInputNumberProps,\n isInputEqual,\n ...otherProps\n } = props;\n\n const rangeRuleMessageList = useMemo(() => {\n if (!rangeRuleMessage) return ['最小值输入不能超过最大值', '最大值输入不能低于最小值'];\n if (isNotEmptyArray(rangeRuleMessage)) {\n return [rangeRuleMessage[0], rangeRuleMessage[1] || rangeRuleMessage[0]];\n }\n return [rangeRuleMessage, rangeRuleMessage] as string[];\n }, [rangeRuleMessage]);\n\n const requiredRuleMessageList = useMemo(() => {\n if (!requiredRuleMessage || isEmptyArray(requiredRuleMessage)) return [];\n if (isNotEmptyArray(requiredRuleMessage)) {\n return [requiredRuleMessage[0], requiredRuleMessage[1] || requiredRuleMessage[0]];\n }\n return [requiredRuleMessage, requiredRuleMessage] as string[];\n }, [requiredRuleMessage]);\n\n const minRules = [\n { required: required, message: requiredRuleMessageList[0] || '' },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (isUndefinedOrNull(value)) {\n return Promise.resolve();\n }\n const maxValue = getFieldValue(maxFormItemName);\n if (isUndefinedOrNull(maxValue)) {\n return Promise.resolve();\n }\n if (isInputEqual) {\n if (value <= maxValue) {\n return Promise.resolve();\n }\n } else {\n if (value < maxValue) {\n return Promise.resolve();\n }\n }\n return Promise.reject(new Error(rangeRuleMessageList[0]));\n },\n }),\n ];\n\n const maxRules = [\n { required: required, message: requiredRuleMessageList[1] || '' },\n ({ getFieldValue }) => ({\n validator(_, value) {\n if (isUndefinedOrNull(value)) {\n return Promise.resolve();\n }\n const minValue = getFieldValue(minFormItemName);\n if (isUndefinedOrNull(minValue)) {\n return Promise.resolve();\n }\n\n if (isInputEqual) {\n if (value >= minValue) {\n return Promise.resolve();\n }\n } else {\n if (value > minValue) {\n return Promise.resolve();\n }\n }\n return Promise.reject(new Error(rangeRuleMessageList[1]));\n },\n }),\n ];\n\n return (\n <FormItemWrapper {...otherProps} required={required}>\n <FlexLayout fullIndex={[0, 1]} direction=\"horizontal\" gap={10}>\n <FormItemWrapper\n name={minFormItemName}\n dependencies={[maxFormItemName]}\n rules={minRules}\n style={{ margin: 0 }}\n >\n <InputNumber\n placeholder=\"请输入\"\n {...minInputNumberProps}\n style={{ width: '100%', ...minInputNumberProps?.style }}\n />\n </FormItemWrapper>\n <FormItemWrapper\n name={maxFormItemName}\n dependencies={[minFormItemName]}\n rules={maxRules}\n style={{ margin: 0 }}\n >\n <InputNumber\n placeholder=\"请输入\"\n {...maxInputNumberProps}\n style={{ width: '100%', ...maxInputNumberProps?.style }}\n />\n </FormItemWrapper>\n </FlexLayout>\n </FormItemWrapper>\n );\n};\n"],"names":["NumberRangeFormItem","props","minFormItemName","maxFormItemName","required","requiredRuleMessage","rangeRuleMessage","minInputNumberProps","maxInputNumberProps","isInputEqual","otherProps","_objectWithoutPropertiesLoose","_excluded","rangeRuleMessageList","useMemo","isNotEmptyArray","requiredRuleMessageList","isEmptyArray","minRules","message","_ref","getFieldValue","validator","_","value","isUndefinedOrNull","Promise","resolve","maxValue","reject","Error","maxRules","_ref2","minValue","_jsx","FormItemWrapper","_extends","children","_jsxs","FlexLayout","fullIndex","direction","gap","name","dependencies","rules","style","margin","InputNumber","placeholder","width"],"mappings":";8xBA0BaA,EAAsB,SAAtBA,EAAuBC,GAClC,IACEC,EASED,EATFC,gBACAC,EAQEF,EARFE,gBACAC,EAOEH,EAPFG,SACAC,EAMEJ,EANFI,oBACAC,EAKEL,EALFK,iBACAC,EAIEN,EAJFM,oBACAC,EAGEP,EAHFO,oBACAC,EAEER,EAFFQ,aACGC,EAAUC,EACXV,EAAKW,GAET,IAAMC,EAAuBC,EAAQ,WACnC,IAAKR,EAAkB,MAAO,CAAC,eAAgB,gBAC/C,GAAIS,EAAgBT,GAAmB,CACrC,MAAO,CAACA,EAAiB,GAAIA,EAAiB,IAAMA,EAAiB,GACvE,CACA,MAAO,CAACA,EAAkBA,EAC5B,EAAG,CAACA,IAEJ,IAAMU,EAA0BF,EAAQ,WACtC,IAAKT,GAAuBY,EAAaZ,GAAsB,MAAO,GACtE,GAAIU,EAAgBV,GAAsB,CACxC,MAAO,CAACA,EAAoB,GAAIA,EAAoB,IAAMA,EAAoB,GAChF,CACA,MAAO,CAACA,EAAqBA,EAC/B,EAAG,CAACA,IAEJ,IAAMa,EAAW,CACf,CAAEd,SAAUA,EAAUe,QAASH,EAAwB,IAAM,IAC7D,SAAAI,GAAA,IAAGC,EAAaD,EAAbC,cAAa,MAAQ,CACtBC,mBAAAA,EAAUC,EAAGC,GACX,GAAIC,EAAkBD,GAAQ,CAC5B,OAAOE,QAAQC,SACjB,CACA,IAAMC,EAAWP,EAAclB,GAC/B,GAAIsB,EAAkBG,GAAW,CAC/B,OAAOF,QAAQC,SACjB,CACA,GAAIlB,EAAc,CAChB,GAAIe,GAASI,EAAU,CACrB,OAAOF,QAAQC,SACjB,CACF,KAAO,CACL,GAAIH,EAAQI,EAAU,CACpB,OAAOF,QAAQC,SACjB,CACF,CACA,OAAOD,QAAQG,OAAO,IAAIC,MAAMjB,EAAqB,IACvD,EACD,GAGH,IAAMkB,EAAW,CACf,CAAE3B,SAAUA,EAAUe,QAASH,EAAwB,IAAM,IAC7D,SAAAgB,GAAA,IAAGX,EAAaW,EAAbX,cAAa,MAAQ,CACtBC,mBAAAA,EAAUC,EAAGC,GACX,GAAIC,EAAkBD,GAAQ,CAC5B,OAAOE,QAAQC,SACjB,CACA,IAAMM,EAAWZ,EAAcnB,GAC/B,GAAIuB,EAAkBQ,GAAW,CAC/B,OAAOP,QAAQC,SACjB,CAEA,GAAIlB,EAAc,CAChB,GAAIe,GAASS,EAAU,CACrB,OAAOP,QAAQC,SACjB,CACF,KAAO,CACL,GAAIH,EAAQS,EAAU,CACpB,OAAOP,QAAQC,SACjB,CACF,CACA,OAAOD,QAAQG,OAAO,IAAIC,MAAMjB,EAAqB,IACvD,EACD,GAGH,OACEqB,EAACC,EAAeC,KAAK1B,EAAU,CAAEN,SAAUA,EAASiC,SAClDC,EAACC,EAAU,CAACC,UAAW,CAAC,EAAG,GAAIC,UAAU,aAAaC,IAAK,GAAGL,SAAA,CAC5DH,EAACC,EAAe,CACdQ,KAAMzC,EACN0C,aAAc,CAACzC,GACf0C,MAAO3B,EACP4B,MAAO,CAAEC,OAAQ,GAAIV,SAErBH,EAACc,EAAWZ,EAAA,CACVa,YAAY,OACR1C,EAAmB,CACvBuC,MAAKV,EAAA,CAAIc,MAAO,QAAW3C,GAAmB,UAAA,EAAnBA,EAAqBuC,YAGpDZ,EAACC,EAAe,CACdQ,KAAMxC,EACNyC,aAAc,CAAC1C,GACf2C,MAAOd,EACPe,MAAO,CAAEC,OAAQ,GAAIV,SAErBH,EAACc,EAAWZ,EAAA,CACVa,YAAY,OACRzC,EAAmB,CACvBsC,MAAKV,EAAA,CAAIc,MAAO,QAAW1C,GAAmB,UAAA,EAAnBA,EAAqBsC,iBAM5D"}
|
package/esm/pdf/index.js
CHANGED
|
@@ -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{Result as e,Spin as t}from"antd";import{useState as n}from"react";import{fbaHooks as o}from"../fba-hooks/index.js";import{createCtx as a}from"@wove/react/cjs/create-ctx";import{jsx as i,jsxs as s}from"react/jsx-runtime";import{_ as c}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as u}from"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-array";import"@flatbiz/utils";import"../use-responsive-point-
|
|
5
|
+
import{classNames as r}from"@dimjs/utils/cjs/class-names";import{Result as e,Spin as t}from"antd";import{useState as n}from"react";import{fbaHooks as o}from"../fba-hooks/index.js";import{createCtx as a}from"@wove/react/cjs/create-ctx";import{jsx as i,jsxs as s}from"react/jsx-runtime";import{_ as c}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as u}from"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-array";import"@flatbiz/utils";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var l=a(),d=l[0],m=l[1];var f=function a(s){var c=n(),u=c[0],l=c[1];var d=n(),f=d[0],p=d[1];o.useEffectCustomAsync(function(){return new Promise(function(r,e){var t,n,o,a;t=globalThis,n=t.pdfjsLib;n.GlobalWorkerOptions.workerSrc="//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.worker.min.js";var i=function(){try{return r()}catch(r){return e(r)}};var c=function(r){try{console.error(r);s.onLoadError==null||s.onLoadError(r);p(r);return i()}catch(r){return e(r)}};try{o=n.getDocument({url:s.pdfUrl,cMapUrl:"https://file.40017.cn/tcsk/react/pdf@3.2.146/bcmaps/",cMapPacked:true});return Promise.resolve(o.promise).then(function(r){try{a=r;l(a);s.onLoadSuccess==null||s.onLoadSuccess(a);return i()}catch(r){return c(r)}},c)}catch(r){c(r)}})},[s.pdfUrl]);var v=function r(){return u};if(f){if(s.error){return typeof s.error==="function"?s.error(f):s.error}return i(e,{status:"error",title:"PDF加载异常",subTitle:f==null?void 0:f.message})}if(u){return i(m,{value:{getPdfInstance:v},children:i("div",{className:r("v-pdf-document",s.className),children:s.children})})}return i("div",{className:"v-pdf-document-init-loading",children:i(t,{})})};var p=function e(a){var l=d();var m=l.getPdfInstance();var f=u.useId(undefined,"v-pdf-page-"+a.pageNumber);var p=n(true),v=p[0],h=p[1];var g=m.numPages;o.useEffectCustom(function(){m.getPage(a.pageNumber).then(function(r){var e=a.scale||1;var t=r.getViewport({scale:e});var n=a.width;var o=document.getElementById(f);var i=o.getContext("2d");if(n&&!a.scale){var s=n/t.width;t=r.getViewport({scale:s})}var c=window.devicePixelRatio;c=c<=1?96/72:c;o.width=Math.floor(t.width*c);o.height=Math.floor(t.height*c);o.style.width=t.width+"px";o.style.height=t.height+"px";var u={transform:[c,0,0,c,0,0],canvasContext:i,viewport:t};var l=r.render(u);l.promise.then(function(){a.onRenderSuccess==null||a.onRenderSuccess({width:t.width,height:t.height,scale:e,pageNumber:a.pageNumber,page:r},m);h(false)}).catch(function(r){console.error(r==null?void 0:r.message);a.onRenderError==null||a.onRenderError(r,m);h(false)})})},[m,a.scale,a.pageNumber]);var w=typeof a.gap==="undefined"?10:a.gap;var b=g!==a.pageNumber?{marginBottom:w}:{};return s("div",{className:r("v-pdf-page",a.className),style:c({},b,a.style),onClick:a.onClick,children:[i(t,{spinning:v,children:i("canvas",{id:f})}),a.children]})};var v={Document:f,Page:p};export{v as Pdf};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/esm/pdf/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/pdf/context.ts","@flatbiz/antd/src/pdf/document.tsx","@flatbiz/antd/src/pdf/page.tsx","@flatbiz/antd/src/pdf/index.ts"],"sourcesContent":["import { createCtx } from '@wove/react';\n\ntype CtxProps = {\n getPdfInstance: () => any;\n};\n\nexport const [getCtx, CtxProvider] = createCtx<CtxProps>();\n","import { classNames } from '@dimjs/utils';\nimport { Result, Spin } from 'antd';\nimport { ReactElement, ReactNode, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { CtxProvider } from './context';\nimport './style.less';\n\ntype PdfProps = {\n pdfUrl: string;\n onLoadError?: (error: any) => void;\n onLoadSuccess?: (pdfInstance: any) => void;\n children: ReactNode;\n error?: ReactElement | ((error) => ReactElement);\n className?: string;\n};\n\nexport const PdfDocument = (props: PdfProps) => {\n const [pdfInstance, setPdfInstance] = useState<any>();\n const [errorInst, setErrorInst] = useState<any>();\n\n fbaHooks.useEffectCustomAsync(async () => {\n const { pdfjsLib } = globalThis as any;\n pdfjsLib.GlobalWorkerOptions.workerSrc = '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.worker.min.js';\n try {\n const loadingTask = pdfjsLib.getDocument({\n url: props.pdfUrl,\n // 避免服务端动态填充的字体不展示\n cMapUrl: 'https://file.40017.cn/tcsk/react/pdf@3.2.146/bcmaps/',\n cMapPacked: true,\n });\n const pdfInstance = await loadingTask.promise;\n setPdfInstance(pdfInstance);\n props.onLoadSuccess?.(pdfInstance);\n } catch (error: any) {\n console.error(error);\n props.onLoadError?.(error);\n setErrorInst(error);\n }\n }, [props.pdfUrl]);\n\n const getPdfInstance = () => {\n return pdfInstance;\n };\n\n if (errorInst) {\n if (props.error) {\n return typeof props.error === 'function' ? props.error(errorInst) : props.error;\n }\n return <Result status=\"error\" title=\"PDF加载异常\" subTitle={errorInst?.message}></Result>;\n }\n\n if (pdfInstance) {\n return (\n <CtxProvider value={{ getPdfInstance }}>\n <div className={classNames('v-pdf-document', props.className)}>{props.children}</div>\n </CtxProvider>\n );\n }\n\n return (\n <div className=\"v-pdf-document-init-loading\">\n <Spin />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Spin } from 'antd';\nimport { CSSProperties, ReactNode, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { getCtx } from './context';\nimport './style.less';\n\ntype PdfProps = {\n onRenderSuccess?: (pageInstance: any, pdfInstance: any) => void;\n onRenderError?: (error: any, pdfInstance: any) => void;\n /** pdf page宽度,高度根据比例适配 */\n width?: number;\n /** 缩放比例,默认值:1,配置此参数后 width 属性失效,例如:1、0.6、0.8 */\n scale?: number;\n /** pdf页面上下之间的间隙,默认值10 */\n gap?: number;\n /** 页码 */\n pageNumber: number;\n children?: ReactNode;\n onClick?: (e) => void;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PdfPage = (props: PdfProps) => {\n const ctx = getCtx();\n const pdfInstance = ctx.getPdfInstance();\n const id = hooks.useId(undefined, `v-pdf-page-${props.pageNumber}`);\n const [spinning, setSpinning] = useState(true);\n\n const numPages = pdfInstance.numPages as number;\n\n fbaHooks.useEffectCustom(() => {\n pdfInstance.getPage(props.pageNumber).then(function (page) {\n const scale = props.scale || 1;\n let viewport = page.getViewport({ scale: scale });\n const customWidth = props.width;\n\n const canvas = document.getElementById(id) as any;\n const context = canvas.getContext('2d');\n\n if (customWidth && !props.scale) {\n const ratio = customWidth / viewport.width;\n viewport = page.getViewport({ scale: ratio });\n }\n let cssUnits = window.devicePixelRatio;\n cssUnits = cssUnits <= 1 ? 96 / 72 : cssUnits;\n canvas.width = Math.floor(viewport.width * cssUnits);\n canvas.height = Math.floor(viewport.height * cssUnits);\n\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n const renderContext = {\n transform: [cssUnits, 0, 0, cssUnits, 0, 0],\n canvasContext: context,\n viewport: viewport,\n };\n const renderTask = page.render(renderContext);\n renderTask.promise\n .then(function () {\n props.onRenderSuccess?.(\n {\n width: viewport.width,\n height: viewport.height,\n scale: scale,\n pageNumber: props.pageNumber,\n page,\n },\n pdfInstance,\n );\n setSpinning(false);\n })\n .catch((error: any) => {\n console.error(error?.message);\n props.onRenderError?.(error, pdfInstance);\n setSpinning(false);\n });\n });\n }, [pdfInstance, props.scale, props.pageNumber]);\n\n const gap = typeof props.gap === 'undefined' ? 10 : props.gap;\n\n const style = numPages !== props.pageNumber ? { marginBottom: gap } : {};\n\n return (\n <div\n className={classNames('v-pdf-page', props.className)}\n style={{\n ...style,\n ...props.style,\n }}\n onClick={props.onClick}\n >\n <Spin spinning={spinning}>\n <canvas id={id}></canvas>\n </Spin>\n {props.children}\n </div>\n );\n};\n","import { PdfDocument } from './document';\nimport { PdfPage } from './page';\n\n/**\n * pdf预览\n * ```\n * 使用方式:在cdn.ts中引入 '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.min.js'\n * Git: https://github.com/mozilla/pdfjs-dist/tree/master\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf-seal\n * ```\n */\nexport const Pdf = {\n Document: PdfDocument,\n Page: PdfPage,\n};\n"],"names":["_createCtx","_createCtx2","getCtx","CtxProvider","PdfDocument","props","_useState","useState","pdfInstance","setPdfInstance","_useState2","errorInst","setErrorInst","fbaHooks","useEffectCustomAsync","Promise","$return","$error","_ref","pdfjsLib","loadingTask","_pdfInstance","globalThis","GlobalWorkerOptions","workerSrc","$Try_1_Post","$boundEx","$Try_1_Catch","error","console","onLoadError","getDocument","url","pdfUrl","cMapUrl","cMapPacked","resolve","promise","then","$await_2","onLoadSuccess","getPdfInstance","_jsx","Result","status","title","subTitle","message","value","children","className","_classNames","Spin","PdfPage","ctx","id","_hooks","useId","undefined","pageNumber","spinning","setSpinning","numPages","useEffectCustom","getPage","page","scale","viewport","getViewport","customWidth","width","canvas","document","getElementById","context","getContext","ratio","cssUnits","window","devicePixelRatio","Math","floor","height","style","renderContext","transform","canvasContext","renderTask","render","onRenderSuccess","catch","onRenderError","gap","marginBottom","_jsxs","_extends","onClick","Pdf","Document","Page"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/pdf/context.ts","@flatbiz/antd/src/pdf/document.tsx","@flatbiz/antd/src/pdf/page.tsx","@flatbiz/antd/src/pdf/index.ts"],"sourcesContent":["import { createCtx } from '@wove/react';\n\ntype CtxProps = {\n getPdfInstance: () => any;\n};\n\nexport const [getCtx, CtxProvider] = createCtx<CtxProps>();\n","import { classNames } from '@dimjs/utils';\nimport { Result, Spin } from 'antd';\nimport { ReactElement, ReactNode, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { CtxProvider } from './context';\nimport './style.less';\n\ntype PdfProps = {\n pdfUrl: string;\n onLoadError?: (error: any) => void;\n onLoadSuccess?: (pdfInstance: any) => void;\n children: ReactNode;\n error?: ReactElement | ((error) => ReactElement);\n className?: string;\n};\n\nexport const PdfDocument = (props: PdfProps) => {\n const [pdfInstance, setPdfInstance] = useState<any>();\n const [errorInst, setErrorInst] = useState<any>();\n\n fbaHooks.useEffectCustomAsync(async () => {\n const { pdfjsLib } = globalThis as any;\n pdfjsLib.GlobalWorkerOptions.workerSrc = '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.worker.min.js';\n try {\n const loadingTask = pdfjsLib.getDocument({\n url: props.pdfUrl,\n // 避免服务端动态填充的字体不展示\n cMapUrl: 'https://file.40017.cn/tcsk/react/pdf@3.2.146/bcmaps/',\n cMapPacked: true,\n });\n const pdfInstance = await loadingTask.promise;\n setPdfInstance(pdfInstance);\n props.onLoadSuccess?.(pdfInstance);\n } catch (error: any) {\n console.error(error);\n props.onLoadError?.(error);\n setErrorInst(error);\n }\n }, [props.pdfUrl]);\n\n const getPdfInstance = () => {\n return pdfInstance;\n };\n\n if (errorInst) {\n if (props.error) {\n return typeof props.error === 'function' ? props.error(errorInst) : props.error;\n }\n return <Result status=\"error\" title=\"PDF加载异常\" subTitle={errorInst?.message}></Result>;\n }\n\n if (pdfInstance) {\n return (\n <CtxProvider value={{ getPdfInstance }}>\n <div className={classNames('v-pdf-document', props.className)}>{props.children}</div>\n </CtxProvider>\n );\n }\n\n return (\n <div className=\"v-pdf-document-init-loading\">\n <Spin />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Spin } from 'antd';\nimport { CSSProperties, ReactNode, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { getCtx } from './context';\nimport './style.less';\n\ntype PdfProps = {\n onRenderSuccess?: (pageInstance: any, pdfInstance: any) => void;\n onRenderError?: (error: any, pdfInstance: any) => void;\n /** pdf page宽度,高度根据比例适配 */\n width?: number;\n /** 缩放比例,默认值:1,配置此参数后 width 属性失效,例如:1、0.6、0.8 */\n scale?: number;\n /** pdf页面上下之间的间隙,默认值10 */\n gap?: number;\n /** 页码 */\n pageNumber: number;\n children?: ReactNode;\n onClick?: (e) => void;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const PdfPage = (props: PdfProps) => {\n const ctx = getCtx();\n const pdfInstance = ctx.getPdfInstance();\n const id = hooks.useId(undefined, `v-pdf-page-${props.pageNumber}`);\n const [spinning, setSpinning] = useState(true);\n\n const numPages = pdfInstance.numPages as number;\n\n fbaHooks.useEffectCustom(() => {\n pdfInstance.getPage(props.pageNumber).then(function (page) {\n const scale = props.scale || 1;\n let viewport = page.getViewport({ scale: scale });\n const customWidth = props.width;\n\n const canvas = document.getElementById(id) as any;\n const context = canvas.getContext('2d');\n\n if (customWidth && !props.scale) {\n const ratio = customWidth / viewport.width;\n viewport = page.getViewport({ scale: ratio });\n }\n let cssUnits = window.devicePixelRatio;\n cssUnits = cssUnits <= 1 ? 96 / 72 : cssUnits;\n canvas.width = Math.floor(viewport.width * cssUnits);\n canvas.height = Math.floor(viewport.height * cssUnits);\n\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n const renderContext = {\n transform: [cssUnits, 0, 0, cssUnits, 0, 0],\n canvasContext: context,\n viewport: viewport,\n };\n const renderTask = page.render(renderContext);\n renderTask.promise\n .then(function () {\n props.onRenderSuccess?.(\n {\n width: viewport.width,\n height: viewport.height,\n scale: scale,\n pageNumber: props.pageNumber,\n page,\n },\n pdfInstance,\n );\n setSpinning(false);\n })\n .catch((error: any) => {\n console.error(error?.message);\n props.onRenderError?.(error, pdfInstance);\n setSpinning(false);\n });\n });\n }, [pdfInstance, props.scale, props.pageNumber]);\n\n const gap = typeof props.gap === 'undefined' ? 10 : props.gap;\n\n const style = numPages !== props.pageNumber ? { marginBottom: gap } : {};\n\n return (\n <div\n className={classNames('v-pdf-page', props.className)}\n style={{\n ...style,\n ...props.style,\n }}\n onClick={props.onClick}\n >\n <Spin spinning={spinning}>\n <canvas id={id}></canvas>\n </Spin>\n {props.children}\n </div>\n );\n};\n","import { PdfDocument } from './document';\nimport { PdfPage } from './page';\n\n/**\n * pdf预览\n * ```\n * 使用方式:在cdn.ts中引入 '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.min.js'\n * Git: https://github.com/mozilla/pdfjs-dist/tree/master\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf-seal\n * ```\n */\nexport const Pdf = {\n Document: PdfDocument,\n Page: PdfPage,\n};\n"],"names":["_createCtx","_createCtx2","getCtx","CtxProvider","PdfDocument","props","_useState","useState","pdfInstance","setPdfInstance","_useState2","errorInst","setErrorInst","fbaHooks","useEffectCustomAsync","Promise","$return","$error","_ref","pdfjsLib","loadingTask","_pdfInstance","globalThis","GlobalWorkerOptions","workerSrc","$Try_1_Post","$boundEx","$Try_1_Catch","error","console","onLoadError","getDocument","url","pdfUrl","cMapUrl","cMapPacked","resolve","promise","then","$await_2","onLoadSuccess","getPdfInstance","_jsx","Result","status","title","subTitle","message","value","children","className","_classNames","Spin","PdfPage","ctx","id","_hooks","useId","undefined","pageNumber","spinning","setSpinning","numPages","useEffectCustom","getPage","page","scale","viewport","getViewport","customWidth","width","canvas","document","getElementById","context","getContext","ratio","cssUnits","window","devicePixelRatio","Math","floor","height","style","renderContext","transform","canvasContext","renderTask","render","onRenderSuccess","catch","onRenderError","gap","marginBottom","_jsxs","_extends","onClick","Pdf","Document","Page"],"mappings":"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"}
|
package/esm/pdf-preview/index.js
CHANGED
|
@@ -4,5 +4,5 @@ import './../fba-hooks/index.css';
|
|
|
4
4
|
import './../roll-location-in-view/index.css';
|
|
5
5
|
import './index.css';
|
|
6
6
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
7
|
-
import{classNames as e}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{generateIntArray as r}from"@flatbiz/utils";import{Result as a}from"antd";import{useState as t,useRef as n,useMemo as o}from"react";import{Pdf as s}from"../pdf/index.js";import{RollLocationInView as c}from"../roll-location-in-view/index.js";import{jsx as l,jsxs as v}from"react/jsx-runtime";import"../fba-hooks/index.js";import"../_rollupPluginBabelHelpers-c0dbec57.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-
|
|
7
|
+
import{classNames as e}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{generateIntArray as r}from"@flatbiz/utils";import{Result as a}from"antd";import{useState as t,useRef as n,useMemo as o}from"react";import{Pdf as s}from"../pdf/index.js";import{RollLocationInView as c}from"../roll-location-in-view/index.js";import{jsx as l,jsxs as v}from"react/jsx-runtime";import"../fba-hooks/index.js";import"../_rollupPluginBabelHelpers-c0dbec57.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";import"@wove/react/cjs/create-ctx";import"ahooks";var d=function i(a){var t=typeof a.navigationWidth==="undefined"?200:a.navigationWidth;return l(c,{activeKey:""+a.activeNumber,behavior:"auto",style:{width:t},renderList:r(1,a.numPages+1).map(function(i){return{activeKey:""+i,render:v("div",{className:e("v-pdf-preview-navigation-content",{"v-pdf-preview-navigation-active":i===a.activeNumber}),children:[l(s.Page,{pageNumber:i,gap:0,scale:a.scale||.2,className:e("v-pdf-preview-navigation-page"),onClick:function e(){a.onChangeActiveNumber(i);var r=document.querySelector("#"+a.pdfContentNodeId);if(r){if(i===1){r.scrollTo(0,0)}else{var t=a.pdfPageListHeightScope[i-1][0];r.scrollTo(0,t)}}}}),v("div",{className:"v-pdf-preview-navigation-pagination",children:["- ",i," -"]})]},i)}})})};var p=function c(p){var u=t(0),f=u[0],m=u[1];var g=n(null);var h=t(1),N=h[0],j=h[1];var b=t(0),w=b[0],P=b[1];var y=10;var x=i.useCallbackRef(function(e){m(e.numPages)});var C=o(function(){if(!f)return[];var e=[];r(0,f).forEach(function(i){if(i===0){e.push([0,w])}else{var r=w*i+i*y;e.push([r,r+w])}});return e},[f,w]);var S=function e(i){var r;var a=i.target.scrollTop;var t=(r=g.current)==null?void 0:r.clientHeight;for(var n=0;n<C.length;n++){var o=C[n];if(o[1]-a>=t/2){j(n+1);break}}};var k=i.useId(undefined,"pdf-content-node");return v(s.Document,{pdfUrl:p.pdfUrl,onLoadSuccess:x,error:l(a,{status:"500",title:"PDF加载异常",subTitle:"PDF地址:"+p.pdfUrl}),className:e("v-pdf-preview-document",p.className),children:[!p.hiddenNavigation?l("div",{className:"v-pdf-preview-navigation",children:l(d,{numPages:f,activeNumber:N,onChangeActiveNumber:j,scale:p.navigationScale,navigationWidth:p.navigationWidth,pdfPageListHeightScope:C,pdfContentNodeId:k})}):null,l("div",{className:"v-pdf-preview-content",onScroll:S,ref:g,id:k,children:f>0?r(1,f+1).map(function(e){return l(s.Page,{pageNumber:e,scale:p.scale,gap:y,onRenderSuccess:function e(i){var r=Math.floor(i.height);P(r)},style:{display:"flex",justifyContent:"center"}},e)}):null})]})};export{p as PdfPreview};
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/pdf-preview/navigation.tsx","@flatbiz/antd/src/pdf-preview/preview.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { generateIntArray } from '@flatbiz/utils';\nimport { Pdf } from '../pdf';\nimport { RollLocationInView } from '../roll-location-in-view';\n\ntype NavigationProps = {\n numPages: number;\n activeNumber: number;\n onChangeActiveNumber: (active: number) => void;\n scale?: number;\n navigationWidth?: number;\n pdfPageListHeightScope: number[][];\n pdfContentNodeId: string;\n};\nexport const Navigation = (props: NavigationProps) => {\n const navigationWidth = typeof props.navigationWidth === 'undefined' ? 200 : props.navigationWidth;\n return (\n <RollLocationInView\n activeKey={`${props.activeNumber}`}\n behavior=\"auto\"\n style={{ width: navigationWidth }}\n renderList={generateIntArray(1, props.numPages + 1).map((pageNumer) => {\n return {\n activeKey: `${pageNumer}`,\n render: (\n <div\n key={pageNumer}\n className={classNames('v-pdf-preview-navigation-content', {\n 'v-pdf-preview-navigation-active': pageNumer === props.activeNumber,\n })}\n >\n <Pdf.Page\n pageNumber={pageNumer}\n gap={0}\n scale={props.scale || 0.2}\n className={classNames('v-pdf-preview-navigation-page')}\n onClick={() => {\n props.onChangeActiveNumber(pageNumer);\n const scroll = document.querySelector(`#${props.pdfContentNodeId}`) as HTMLDivElement;\n if (scroll) {\n if (pageNumer === 1) {\n scroll.scrollTo(0, 0);\n } else {\n const top = props.pdfPageListHeightScope[pageNumer - 1][0];\n scroll.scrollTo(0, top);\n }\n }\n }}\n ></Pdf.Page>\n\n <div className=\"v-pdf-preview-navigation-pagination\">- {pageNumer} -</div>\n </div>\n ),\n };\n })}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { generateIntArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Result } from 'antd';\nimport { useMemo, useRef, useState } from 'react';\nimport { Pdf } from '../pdf';\nimport { Navigation } from './navigation';\nimport './style.less';\n\nexport type PdfPreviewProps = {\n pdfUrl: string;\n /** 缩放比例,默认值:1 */\n scale?: number;\n className?: string;\n /** 导航pdf,缩放比例,默认值:0.2 */\n navigationScale?: number;\n /** 隐藏导航栏 */\n hiddenNavigation?: boolean;\n /** 导航栏宽度,默认值:200 */\n navigationWidth?: number;\n};\n\n/**\n * pdf预览方式1\n * ```\n * 使用方式:在cdn.ts中引入 '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.min.js'\n * Git: https://github.com/mozilla/pdfjs-dist/tree/master\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf-seal\n * ```\n */\nexport const PdfPreview = (props: PdfPreviewProps) => {\n const [numPages, setNumPages] = useState(0);\n const dpfDoucmentRef = useRef<HTMLDivElement>(null);\n const [activePagination, setActivePagination] = useState(1);\n const [pdfPageHeight, setPdfPageHeight] = useState(0);\n\n const pageGap = 10;\n\n const onDocumentLoadSuccess = hooks.useCallbackRef((inst) => {\n setNumPages(inst.numPages);\n });\n\n /** 计算 page 在文档流中的高度范围,包含竖直方向间距 */\n const pdfPageListHeightScope = useMemo(() => {\n if (!numPages) return [];\n const pageHeightScopeList: number[][] = [];\n generateIntArray(0, numPages).forEach((item) => {\n if (item === 0) {\n pageHeightScopeList.push([0, pdfPageHeight]);\n } else {\n const x = pdfPageHeight * item + item * pageGap;\n pageHeightScopeList.push([x, x + pdfPageHeight]);\n }\n });\n return pageHeightScopeList;\n }, [numPages, pdfPageHeight]);\n\n const onDocumentCenterScroll = (event) => {\n const scrollTop = event.target.scrollTop;\n const scrollHeight = dpfDoucmentRef.current?.clientHeight as number;\n for (let index = 0; index < pdfPageListHeightScope.length; index++) {\n const element = pdfPageListHeightScope[index];\n if (element[1] - scrollTop >= scrollHeight / 2) {\n setActivePagination(index + 1);\n break;\n }\n }\n };\n\n const pdfContentNodeId = hooks.useId(undefined, 'pdf-content-node');\n\n return (\n <Pdf.Document\n pdfUrl={props.pdfUrl}\n onLoadSuccess={onDocumentLoadSuccess}\n error={<Result status=\"500\" title=\"PDF加载异常\" subTitle={`PDF地址:${props.pdfUrl}`} />}\n className={classNames('v-pdf-preview-document', props.className)}\n >\n {!props.hiddenNavigation ? (\n <div className=\"v-pdf-preview-navigation\">\n <Navigation\n numPages={numPages}\n activeNumber={activePagination}\n onChangeActiveNumber={setActivePagination}\n scale={props.navigationScale}\n navigationWidth={props.navigationWidth}\n pdfPageListHeightScope={pdfPageListHeightScope}\n pdfContentNodeId={pdfContentNodeId}\n />\n </div>\n ) : null}\n\n <div\n className=\"v-pdf-preview-content\"\n onScroll={onDocumentCenterScroll}\n ref={dpfDoucmentRef}\n id={pdfContentNodeId}\n >\n {numPages > 0\n ? generateIntArray(1, numPages + 1).map((item) => {\n return (\n <Pdf.Page\n key={item}\n pageNumber={item}\n scale={props.scale}\n gap={pageGap}\n onRenderSuccess={(node) => {\n const h = Math.floor(node.height);\n setPdfPageHeight(h);\n }}\n style={{ display: 'flex', justifyContent: 'center' }}\n ></Pdf.Page>\n );\n })\n : null}\n </div>\n </Pdf.Document>\n );\n};\n"],"names":["Navigation","props","navigationWidth","_jsx","RollLocationInView","activeKey","activeNumber","behavior","style","width","renderList","generateIntArray","numPages","map","pageNumer","render","_jsxs","className","_classNames","children","Pdf","Page","pageNumber","gap","scale","onClick","onChangeActiveNumber","scroll","document","querySelector","pdfContentNodeId","scrollTo","top","pdfPageListHeightScope","PdfPreview","_useState","useState","setNumPages","dpfDoucmentRef","useRef","_useState2","activePagination","setActivePagination","_useState3","pdfPageHeight","setPdfPageHeight","pageGap","onDocumentLoadSuccess","_hooks","useCallbackRef","inst","useMemo","pageHeightScopeList","forEach","item","push","x","onDocumentCenterScroll","event","_dpfDoucmentRef$curre","scrollTop","target","scrollHeight","current","clientHeight","index","length","element","useId","undefined","Document","pdfUrl","onLoadSuccess","error","Result","status","title","subTitle","hiddenNavigation","navigationScale","onScroll","ref","id","onRenderSuccess","node","h","Math","floor","height","display","justifyContent"],"mappings":";6nBAcO,IAAMA,EAAa,SAAbA,EAAcC,GACzB,IAAMC,SAAyBD,EAAMC,kBAAoB,YAAc,IAAMD,EAAMC,gBACnF,OACEC,EAACC,EAAkB,CACjBC,UAAS,GAAKJ,EAAMK,aACpBC,SAAS,OACTC,MAAO,CAAEC,MAAOP,GAChBQ,WAAYC,EAAiB,EAAGV,EAAMW,SAAW,GAAGC,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/pdf-preview/navigation.tsx","@flatbiz/antd/src/pdf-preview/preview.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { generateIntArray } from '@flatbiz/utils';\nimport { Pdf } from '../pdf';\nimport { RollLocationInView } from '../roll-location-in-view';\n\ntype NavigationProps = {\n numPages: number;\n activeNumber: number;\n onChangeActiveNumber: (active: number) => void;\n scale?: number;\n navigationWidth?: number;\n pdfPageListHeightScope: number[][];\n pdfContentNodeId: string;\n};\nexport const Navigation = (props: NavigationProps) => {\n const navigationWidth = typeof props.navigationWidth === 'undefined' ? 200 : props.navigationWidth;\n return (\n <RollLocationInView\n activeKey={`${props.activeNumber}`}\n behavior=\"auto\"\n style={{ width: navigationWidth }}\n renderList={generateIntArray(1, props.numPages + 1).map((pageNumer) => {\n return {\n activeKey: `${pageNumer}`,\n render: (\n <div\n key={pageNumer}\n className={classNames('v-pdf-preview-navigation-content', {\n 'v-pdf-preview-navigation-active': pageNumer === props.activeNumber,\n })}\n >\n <Pdf.Page\n pageNumber={pageNumer}\n gap={0}\n scale={props.scale || 0.2}\n className={classNames('v-pdf-preview-navigation-page')}\n onClick={() => {\n props.onChangeActiveNumber(pageNumer);\n const scroll = document.querySelector(`#${props.pdfContentNodeId}`) as HTMLDivElement;\n if (scroll) {\n if (pageNumer === 1) {\n scroll.scrollTo(0, 0);\n } else {\n const top = props.pdfPageListHeightScope[pageNumer - 1][0];\n scroll.scrollTo(0, top);\n }\n }\n }}\n ></Pdf.Page>\n\n <div className=\"v-pdf-preview-navigation-pagination\">- {pageNumer} -</div>\n </div>\n ),\n };\n })}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { generateIntArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Result } from 'antd';\nimport { useMemo, useRef, useState } from 'react';\nimport { Pdf } from '../pdf';\nimport { Navigation } from './navigation';\nimport './style.less';\n\nexport type PdfPreviewProps = {\n pdfUrl: string;\n /** 缩放比例,默认值:1 */\n scale?: number;\n className?: string;\n /** 导航pdf,缩放比例,默认值:0.2 */\n navigationScale?: number;\n /** 隐藏导航栏 */\n hiddenNavigation?: boolean;\n /** 导航栏宽度,默认值:200 */\n navigationWidth?: number;\n};\n\n/**\n * pdf预览方式1\n * ```\n * 使用方式:在cdn.ts中引入 '//file.40017.cn/tcsk/react/pdf@3.2.146/pdf.min.js'\n * Git: https://github.com/mozilla/pdfjs-dist/tree/master\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf\n * Demo: https://fex.qa.tcshuke.com/docs/admin/main/file/pdf-seal\n * ```\n */\nexport const PdfPreview = (props: PdfPreviewProps) => {\n const [numPages, setNumPages] = useState(0);\n const dpfDoucmentRef = useRef<HTMLDivElement>(null);\n const [activePagination, setActivePagination] = useState(1);\n const [pdfPageHeight, setPdfPageHeight] = useState(0);\n\n const pageGap = 10;\n\n const onDocumentLoadSuccess = hooks.useCallbackRef((inst) => {\n setNumPages(inst.numPages);\n });\n\n /** 计算 page 在文档流中的高度范围,包含竖直方向间距 */\n const pdfPageListHeightScope = useMemo(() => {\n if (!numPages) return [];\n const pageHeightScopeList: number[][] = [];\n generateIntArray(0, numPages).forEach((item) => {\n if (item === 0) {\n pageHeightScopeList.push([0, pdfPageHeight]);\n } else {\n const x = pdfPageHeight * item + item * pageGap;\n pageHeightScopeList.push([x, x + pdfPageHeight]);\n }\n });\n return pageHeightScopeList;\n }, [numPages, pdfPageHeight]);\n\n const onDocumentCenterScroll = (event) => {\n const scrollTop = event.target.scrollTop;\n const scrollHeight = dpfDoucmentRef.current?.clientHeight as number;\n for (let index = 0; index < pdfPageListHeightScope.length; index++) {\n const element = pdfPageListHeightScope[index];\n if (element[1] - scrollTop >= scrollHeight / 2) {\n setActivePagination(index + 1);\n break;\n }\n }\n };\n\n const pdfContentNodeId = hooks.useId(undefined, 'pdf-content-node');\n\n return (\n <Pdf.Document\n pdfUrl={props.pdfUrl}\n onLoadSuccess={onDocumentLoadSuccess}\n error={<Result status=\"500\" title=\"PDF加载异常\" subTitle={`PDF地址:${props.pdfUrl}`} />}\n className={classNames('v-pdf-preview-document', props.className)}\n >\n {!props.hiddenNavigation ? (\n <div className=\"v-pdf-preview-navigation\">\n <Navigation\n numPages={numPages}\n activeNumber={activePagination}\n onChangeActiveNumber={setActivePagination}\n scale={props.navigationScale}\n navigationWidth={props.navigationWidth}\n pdfPageListHeightScope={pdfPageListHeightScope}\n pdfContentNodeId={pdfContentNodeId}\n />\n </div>\n ) : null}\n\n <div\n className=\"v-pdf-preview-content\"\n onScroll={onDocumentCenterScroll}\n ref={dpfDoucmentRef}\n id={pdfContentNodeId}\n >\n {numPages > 0\n ? generateIntArray(1, numPages + 1).map((item) => {\n return (\n <Pdf.Page\n key={item}\n pageNumber={item}\n scale={props.scale}\n gap={pageGap}\n onRenderSuccess={(node) => {\n const h = Math.floor(node.height);\n setPdfPageHeight(h);\n }}\n style={{ display: 'flex', justifyContent: 'center' }}\n ></Pdf.Page>\n );\n })\n : null}\n </div>\n </Pdf.Document>\n );\n};\n"],"names":["Navigation","props","navigationWidth","_jsx","RollLocationInView","activeKey","activeNumber","behavior","style","width","renderList","generateIntArray","numPages","map","pageNumer","render","_jsxs","className","_classNames","children","Pdf","Page","pageNumber","gap","scale","onClick","onChangeActiveNumber","scroll","document","querySelector","pdfContentNodeId","scrollTo","top","pdfPageListHeightScope","PdfPreview","_useState","useState","setNumPages","dpfDoucmentRef","useRef","_useState2","activePagination","setActivePagination","_useState3","pdfPageHeight","setPdfPageHeight","pageGap","onDocumentLoadSuccess","_hooks","useCallbackRef","inst","useMemo","pageHeightScopeList","forEach","item","push","x","onDocumentCenterScroll","event","_dpfDoucmentRef$curre","scrollTop","target","scrollHeight","current","clientHeight","index","length","element","useId","undefined","Document","pdfUrl","onLoadSuccess","error","Result","status","title","subTitle","hiddenNavigation","navigationScale","onScroll","ref","id","onRenderSuccess","node","h","Math","floor","height","display","justifyContent"],"mappings":"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"}
|