@next-core/react-runtime 1.11.2 → 1.11.3
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.
|
@@ -23,7 +23,11 @@ var _runtime = require("@next-core/runtime");
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* useBrick 配置,支持配置对象或 render 函数。
|
|
26
|
+
* 单个 useBrick 配置,支持配置对象或 render 函数。
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* useBrick 配置,支持配置对象、配置对象数组或 render 函数。
|
|
27
31
|
*/
|
|
28
32
|
|
|
29
33
|
// Note: always synchronize code in LegacyUseBrick:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactUseBrick.js","names":["_react","_interopRequireWildcard","require","_runtime","ReactUseBrickInternal","useBrick","data","errorBoundary","refCallback","ignoredCallback","renderResult","setRenderResult","useState","mountResult","useRef","renderKey","setRenderKey","IdCounterRef","initialRenderId","useMemo","_secret_internals$ge","__secret_internals","getRenderId","call","useEffect","ignore","init","newRender","renderUseBrick","getUniqueId","error","isTheSameRender","console","handleHttpError","_refCallback","useCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","default","createElement","key","ref","ReactUseBrick","exports","renderFn","Fragment","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","Array","isArray","map","item","index","v2Kit","getV2RuntimeFromDll","SingleBrickAsComponentFactory","BrickAsComponentFactory","React"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { UseSingleBrickConf } from \"@next-core/types\";\nimport {\n __secret_internals,\n handleHttpError,\n getV2RuntimeFromDll,\n} from \"@next-core/runtime\";\n\nexport type { UseSingleBrickConf };\n\n/**\n * useBrick 的 render 函数类型。\n *\n * @example\n *\n * ```tsx\n * const columns = [\n * {\n * key: \"status\",\n * useBrick: (data) => <WrappedEoTag textContent={data.cellData} />\n * }\n * ];\n * ```\n */\nexport type UseBrickRenderFunction<T = unknown> = (data: T) => ReactNode;\n\n/**\n * useBrick 配置,支持配置对象或 render 函数。\n */\nexport type UseBrickConfOrRenderFunction<T = unknown> =\n | UseSingleBrickConf\n | UseBrickRenderFunction<T>;\n\nexport interface ReactUseBrickProps<T = unknown> {\n useBrick: UseBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\ninterface ReactUseBrickInternalProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nlet ReactUseBrickInternal = function ReactUseBrickInternal({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickInternalProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n const initialRenderId = useMemo(() => __secret_internals.getRenderId?.(), []);\n\n useEffect(() => {\n let ignore = false;\n async function init() {\n try {\n const newRender = await __secret_internals.renderUseBrick(\n useBrick,\n data,\n errorBoundary\n );\n if (ignore) {\n return;\n }\n setRenderResult(newRender);\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n if (!ignore && isTheSameRender(initialRenderId)) {\n // eslint-disable-next-line no-console\n console.error(\n \"Render useBrick failed:\",\n useBrick,\n \"with data:\",\n data\n );\n handleHttpError(error);\n }\n }\n }\n init();\n return () => {\n ignore = true;\n };\n }, [data, useBrick, initialRenderId, errorBoundary]);\n\n const _refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n renderResult!,\n element\n );\n } else {\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n refCallback?.(element);\n },\n [refCallback, renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n ignoredCallback?.();\n return null;\n }\n\n const WebComponent = tagName as \"div\";\n return <WebComponent key={renderKey} ref={_refCallback} />;\n};\n\nlet ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n const renderFn = useBrick;\n return <>{renderFn(data)}</>;\n }\n\n // 否则使用原有的配置对象渲染逻辑\n return (\n <ReactUseBrickInternal\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n refCallback={refCallback}\n ignoredCallback={ignoredCallback}\n />\n );\n};\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nfunction isTheSameRender(initialRenderId: string | undefined): boolean {\n const newRenderId = __secret_internals.getRenderId?.();\n return !initialRenderId || !newRenderId || initialRenderId === newRenderId;\n}\n\nexport interface ReactUseMultipleBricksProps<T = unknown> {\n useBrick:\n | UseSingleBrickConf\n | UseSingleBrickConf[]\n | UseBrickRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n return <>{useBrick(data)}</>;\n }\n\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick\n key={index}\n useBrick={item}\n data={data}\n errorBoundary={errorBoundary}\n />\n ))}\n </>\n );\n }\n return (\n <ReactUseBrick\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n />\n );\n};\n\n// Make v3 bricks compatible with Brick Next v2.\n// istanbul ignore next\nconst v2Kit = getV2RuntimeFromDll();\n// istanbul ignore next\nif (v2Kit) {\n const { SingleBrickAsComponentFactory, BrickAsComponentFactory } = v2Kit;\n if (SingleBrickAsComponentFactory && BrickAsComponentFactory) {\n ReactUseBrick = SingleBrickAsComponentFactory(React);\n ReactUseMultipleBricks = BrickAsComponentFactory(React);\n }\n}\n\nexport { ReactUseBrick, ReactUseMultipleBricks };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["_react","_interopRequireWildcard","require","_runtime","ReactUseBrickInternal","useBrick","data","errorBoundary","refCallback","ignoredCallback","renderResult","setRenderResult","useState","mountResult","useRef","renderKey","setRenderKey","IdCounterRef","initialRenderId","useMemo","_secret_internals$ge","__secret_internals","getRenderId","call","useEffect","ignore","init","newRender","renderUseBrick","getUniqueId","error","isTheSameRender","console","handleHttpError","_refCallback","useCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","default","createElement","key","ref","ReactUseBrick","exports","renderFn","Fragment","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","Array","isArray","map","item","index","v2Kit","getV2RuntimeFromDll","SingleBrickAsComponentFactory","BrickAsComponentFactory","React"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { UseBrickConf, UseSingleBrickConf } from \"@next-core/types\";\nimport {\n __secret_internals,\n handleHttpError,\n getV2RuntimeFromDll,\n} from \"@next-core/runtime\";\n\nexport type { UseSingleBrickConf };\n\n/**\n * useBrick 的 render 函数类型。\n *\n * @example\n *\n * ```tsx\n * const columns = [\n * {\n * key: \"status\",\n * useBrick: (data) => <WrappedEoTag textContent={data.cellData} />\n * }\n * ];\n * ```\n */\nexport type UseBrickRenderFunction<T = unknown> = (data: T) => ReactNode;\n\n/**\n * 单个 useBrick 配置,支持配置对象或 render 函数。\n */\nexport type UseSingleBrickConfOrRenderFunction<T = unknown> =\n | UseSingleBrickConf\n | UseBrickRenderFunction<T>;\n\n/**\n * useBrick 配置,支持配置对象、配置对象数组或 render 函数。\n */\nexport type UseBrickConfOrRenderFunction<T = unknown> =\n | UseBrickConf\n | UseBrickRenderFunction<T>;\n\nexport interface ReactUseBrickProps<T = unknown> {\n useBrick: UseSingleBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\ninterface ReactUseBrickInternalProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nlet ReactUseBrickInternal = function ReactUseBrickInternal({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickInternalProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n const initialRenderId = useMemo(() => __secret_internals.getRenderId?.(), []);\n\n useEffect(() => {\n let ignore = false;\n async function init() {\n try {\n const newRender = await __secret_internals.renderUseBrick(\n useBrick,\n data,\n errorBoundary\n );\n if (ignore) {\n return;\n }\n setRenderResult(newRender);\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n if (!ignore && isTheSameRender(initialRenderId)) {\n // eslint-disable-next-line no-console\n console.error(\n \"Render useBrick failed:\",\n useBrick,\n \"with data:\",\n data\n );\n handleHttpError(error);\n }\n }\n }\n init();\n return () => {\n ignore = true;\n };\n }, [data, useBrick, initialRenderId, errorBoundary]);\n\n const _refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n renderResult!,\n element\n );\n } else {\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n refCallback?.(element);\n },\n [refCallback, renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n ignoredCallback?.();\n return null;\n }\n\n const WebComponent = tagName as \"div\";\n return <WebComponent key={renderKey} ref={_refCallback} />;\n};\n\nlet ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n const renderFn = useBrick;\n return <>{renderFn(data)}</>;\n }\n\n // 否则使用原有的配置对象渲染逻辑\n return (\n <ReactUseBrickInternal\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n refCallback={refCallback}\n ignoredCallback={ignoredCallback}\n />\n );\n};\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nfunction isTheSameRender(initialRenderId: string | undefined): boolean {\n const newRenderId = __secret_internals.getRenderId?.();\n return !initialRenderId || !newRenderId || initialRenderId === newRenderId;\n}\n\nexport interface ReactUseMultipleBricksProps<T = unknown> {\n useBrick: UseBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n return <>{useBrick(data)}</>;\n }\n\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick\n key={index}\n useBrick={item}\n data={data}\n errorBoundary={errorBoundary}\n />\n ))}\n </>\n );\n }\n return (\n <ReactUseBrick\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n />\n );\n};\n\n// Make v3 bricks compatible with Brick Next v2.\n// istanbul ignore next\nconst v2Kit = getV2RuntimeFromDll();\n// istanbul ignore next\nif (v2Kit) {\n const { SingleBrickAsComponentFactory, BrickAsComponentFactory } = v2Kit;\n if (SingleBrickAsComponentFactory && BrickAsComponentFactory) {\n ReactUseBrick = SingleBrickAsComponentFactory(React);\n ReactUseMultipleBricks = BrickAsComponentFactory(React);\n }\n}\n\nexport { ReactUseBrick, ReactUseMultipleBricks };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,7 +17,11 @@ import { __secret_internals, handleHttpError, getV2RuntimeFromDll } from "@next-
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* useBrick 配置,支持配置对象或 render 函数。
|
|
20
|
+
* 单个 useBrick 配置,支持配置对象或 render 函数。
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* useBrick 配置,支持配置对象、配置对象数组或 render 函数。
|
|
21
25
|
*/
|
|
22
26
|
|
|
23
27
|
// Note: always synchronize code in LegacyUseBrick:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactUseBrick.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","__secret_internals","handleHttpError","getV2RuntimeFromDll","ReactUseBrickInternal","_ref","useBrick","data","errorBoundary","refCallback","ignoredCallback","renderResult","setRenderResult","mountResult","renderKey","setRenderKey","IdCounterRef","initialRenderId","_secret_internals$ge","getRenderId","call","ignore","init","newRender","renderUseBrick","getUniqueId","error","isTheSameRender","console","_refCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","createElement","key","ref","ReactUseBrick","_ref2","renderFn","Fragment","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","_ref3","Array","isArray","map","item","index","v2Kit","SingleBrickAsComponentFactory","BrickAsComponentFactory"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { UseSingleBrickConf } from \"@next-core/types\";\nimport {\n __secret_internals,\n handleHttpError,\n getV2RuntimeFromDll,\n} from \"@next-core/runtime\";\n\nexport type { UseSingleBrickConf };\n\n/**\n * useBrick 的 render 函数类型。\n *\n * @example\n *\n * ```tsx\n * const columns = [\n * {\n * key: \"status\",\n * useBrick: (data) => <WrappedEoTag textContent={data.cellData} />\n * }\n * ];\n * ```\n */\nexport type UseBrickRenderFunction<T = unknown> = (data: T) => ReactNode;\n\n/**\n * useBrick 配置,支持配置对象或 render 函数。\n */\nexport type UseBrickConfOrRenderFunction<T = unknown> =\n | UseSingleBrickConf\n | UseBrickRenderFunction<T>;\n\nexport interface ReactUseBrickProps<T = unknown> {\n useBrick: UseBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\ninterface ReactUseBrickInternalProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nlet ReactUseBrickInternal = function ReactUseBrickInternal({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickInternalProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n const initialRenderId = useMemo(() => __secret_internals.getRenderId?.(), []);\n\n useEffect(() => {\n let ignore = false;\n async function init() {\n try {\n const newRender = await __secret_internals.renderUseBrick(\n useBrick,\n data,\n errorBoundary\n );\n if (ignore) {\n return;\n }\n setRenderResult(newRender);\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n if (!ignore && isTheSameRender(initialRenderId)) {\n // eslint-disable-next-line no-console\n console.error(\n \"Render useBrick failed:\",\n useBrick,\n \"with data:\",\n data\n );\n handleHttpError(error);\n }\n }\n }\n init();\n return () => {\n ignore = true;\n };\n }, [data, useBrick, initialRenderId, errorBoundary]);\n\n const _refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n renderResult!,\n element\n );\n } else {\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n refCallback?.(element);\n },\n [refCallback, renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n ignoredCallback?.();\n return null;\n }\n\n const WebComponent = tagName as \"div\";\n return <WebComponent key={renderKey} ref={_refCallback} />;\n};\n\nlet ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n const renderFn = useBrick;\n return <>{renderFn(data)}</>;\n }\n\n // 否则使用原有的配置对象渲染逻辑\n return (\n <ReactUseBrickInternal\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n refCallback={refCallback}\n ignoredCallback={ignoredCallback}\n />\n );\n};\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nfunction isTheSameRender(initialRenderId: string | undefined): boolean {\n const newRenderId = __secret_internals.getRenderId?.();\n return !initialRenderId || !newRenderId || initialRenderId === newRenderId;\n}\n\nexport interface ReactUseMultipleBricksProps<T = unknown> {\n useBrick:\n | UseSingleBrickConf\n | UseSingleBrickConf[]\n | UseBrickRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n return <>{useBrick(data)}</>;\n }\n\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick\n key={index}\n useBrick={item}\n data={data}\n errorBoundary={errorBoundary}\n />\n ))}\n </>\n );\n }\n return (\n <ReactUseBrick\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n />\n );\n};\n\n// Make v3 bricks compatible with Brick Next v2.\n// istanbul ignore next\nconst v2Kit = getV2RuntimeFromDll();\n// istanbul ignore next\nif (v2Kit) {\n const { SingleBrickAsComponentFactory, BrickAsComponentFactory } = v2Kit;\n if (SingleBrickAsComponentFactory && BrickAsComponentFactory) {\n ReactUseBrick = SingleBrickAsComponentFactory(React);\n ReactUseMultipleBricks = BrickAsComponentFactory(React);\n }\n}\n\nexport { ReactUseBrick, ReactUseMultipleBricks };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","__secret_internals","handleHttpError","getV2RuntimeFromDll","ReactUseBrickInternal","_ref","useBrick","data","errorBoundary","refCallback","ignoredCallback","renderResult","setRenderResult","mountResult","renderKey","setRenderKey","IdCounterRef","initialRenderId","_secret_internals$ge","getRenderId","call","ignore","init","newRender","renderUseBrick","getUniqueId","error","isTheSameRender","console","_refCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","createElement","key","ref","ReactUseBrick","_ref2","renderFn","Fragment","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","_ref3","Array","isArray","map","item","index","v2Kit","SingleBrickAsComponentFactory","BrickAsComponentFactory"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { UseBrickConf, UseSingleBrickConf } from \"@next-core/types\";\nimport {\n __secret_internals,\n handleHttpError,\n getV2RuntimeFromDll,\n} from \"@next-core/runtime\";\n\nexport type { UseSingleBrickConf };\n\n/**\n * useBrick 的 render 函数类型。\n *\n * @example\n *\n * ```tsx\n * const columns = [\n * {\n * key: \"status\",\n * useBrick: (data) => <WrappedEoTag textContent={data.cellData} />\n * }\n * ];\n * ```\n */\nexport type UseBrickRenderFunction<T = unknown> = (data: T) => ReactNode;\n\n/**\n * 单个 useBrick 配置,支持配置对象或 render 函数。\n */\nexport type UseSingleBrickConfOrRenderFunction<T = unknown> =\n | UseSingleBrickConf\n | UseBrickRenderFunction<T>;\n\n/**\n * useBrick 配置,支持配置对象、配置对象数组或 render 函数。\n */\nexport type UseBrickConfOrRenderFunction<T = unknown> =\n | UseBrickConf\n | UseBrickRenderFunction<T>;\n\nexport interface ReactUseBrickProps<T = unknown> {\n useBrick: UseSingleBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\ninterface ReactUseBrickInternalProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n errorBoundary?: boolean;\n refCallback?: (element: HTMLElement | null) => void;\n ignoredCallback?: () => void;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nlet ReactUseBrickInternal = function ReactUseBrickInternal({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickInternalProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n const initialRenderId = useMemo(() => __secret_internals.getRenderId?.(), []);\n\n useEffect(() => {\n let ignore = false;\n async function init() {\n try {\n const newRender = await __secret_internals.renderUseBrick(\n useBrick,\n data,\n errorBoundary\n );\n if (ignore) {\n return;\n }\n setRenderResult(newRender);\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n if (!ignore && isTheSameRender(initialRenderId)) {\n // eslint-disable-next-line no-console\n console.error(\n \"Render useBrick failed:\",\n useBrick,\n \"with data:\",\n data\n );\n handleHttpError(error);\n }\n }\n }\n init();\n return () => {\n ignore = true;\n };\n }, [data, useBrick, initialRenderId, errorBoundary]);\n\n const _refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n renderResult!,\n element\n );\n } else {\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n refCallback?.(element);\n },\n [refCallback, renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n ignoredCallback?.();\n return null;\n }\n\n const WebComponent = tagName as \"div\";\n return <WebComponent key={renderKey} ref={_refCallback} />;\n};\n\nlet ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n const renderFn = useBrick;\n return <>{renderFn(data)}</>;\n }\n\n // 否则使用原有的配置对象渲染逻辑\n return (\n <ReactUseBrickInternal\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n refCallback={refCallback}\n ignoredCallback={ignoredCallback}\n />\n );\n};\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nfunction isTheSameRender(initialRenderId: string | undefined): boolean {\n const newRenderId = __secret_internals.getRenderId?.();\n return !initialRenderId || !newRenderId || initialRenderId === newRenderId;\n}\n\nexport interface ReactUseMultipleBricksProps<T = unknown> {\n useBrick: UseBrickConfOrRenderFunction<T>;\n data?: T;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n // 如果 useBrick 是 render 函数,直接调用返回\n if (typeof useBrick === \"function\") {\n return <>{useBrick(data)}</>;\n }\n\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick\n key={index}\n useBrick={item}\n data={data}\n errorBoundary={errorBoundary}\n />\n ))}\n </>\n );\n }\n return (\n <ReactUseBrick\n useBrick={useBrick}\n data={data}\n errorBoundary={errorBoundary}\n />\n );\n};\n\n// Make v3 bricks compatible with Brick Next v2.\n// istanbul ignore next\nconst v2Kit = getV2RuntimeFromDll();\n// istanbul ignore next\nif (v2Kit) {\n const { SingleBrickAsComponentFactory, BrickAsComponentFactory } = v2Kit;\n if (SingleBrickAsComponentFactory && BrickAsComponentFactory) {\n ReactUseBrick = SingleBrickAsComponentFactory(React);\n ReactUseMultipleBricks = BrickAsComponentFactory(React);\n }\n}\n\nexport { ReactUseBrick, ReactUseMultipleBricks };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { ReactNode } from "react";
|
|
2
|
-
import type { UseSingleBrickConf } from "@next-core/types";
|
|
2
|
+
import type { UseBrickConf, UseSingleBrickConf } from "@next-core/types";
|
|
3
3
|
export type { UseSingleBrickConf };
|
|
4
4
|
/**
|
|
5
5
|
* useBrick 的 render 函数类型。
|
|
@@ -17,11 +17,15 @@ export type { UseSingleBrickConf };
|
|
|
17
17
|
*/
|
|
18
18
|
export type UseBrickRenderFunction<T = unknown> = (data: T) => ReactNode;
|
|
19
19
|
/**
|
|
20
|
-
* useBrick 配置,支持配置对象或 render 函数。
|
|
20
|
+
* 单个 useBrick 配置,支持配置对象或 render 函数。
|
|
21
21
|
*/
|
|
22
|
-
export type
|
|
22
|
+
export type UseSingleBrickConfOrRenderFunction<T = unknown> = UseSingleBrickConf | UseBrickRenderFunction<T>;
|
|
23
|
+
/**
|
|
24
|
+
* useBrick 配置,支持配置对象、配置对象数组或 render 函数。
|
|
25
|
+
*/
|
|
26
|
+
export type UseBrickConfOrRenderFunction<T = unknown> = UseBrickConf | UseBrickRenderFunction<T>;
|
|
23
27
|
export interface ReactUseBrickProps<T = unknown> {
|
|
24
|
-
useBrick:
|
|
28
|
+
useBrick: UseSingleBrickConfOrRenderFunction<T>;
|
|
25
29
|
data?: T;
|
|
26
30
|
errorBoundary?: boolean;
|
|
27
31
|
refCallback?: (element: HTMLElement | null) => void;
|
|
@@ -29,7 +33,7 @@ export interface ReactUseBrickProps<T = unknown> {
|
|
|
29
33
|
}
|
|
30
34
|
declare let ReactUseBrick: ({ useBrick, data, errorBoundary, refCallback, ignoredCallback, }: ReactUseBrickProps) => React.ReactElement | null;
|
|
31
35
|
export interface ReactUseMultipleBricksProps<T = unknown> {
|
|
32
|
-
useBrick:
|
|
36
|
+
useBrick: UseBrickConfOrRenderFunction<T>;
|
|
33
37
|
data?: T;
|
|
34
38
|
errorBoundary?: boolean;
|
|
35
39
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/react-runtime",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.3",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/react-runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"@next-core/test-next": "^2.0.1",
|
|
51
51
|
"jest-fetch-mock": "^3.0.3"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "b2bae83cf449dc6ca9c85a94fab23fadf91c24ae"
|
|
54
54
|
}
|