@next-core/react-runtime 1.5.4 → 1.6.1
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/dist/cjs/ReactUseBrick.js +1 -1
- package/dist/cjs/ReactUseBrick.js.map +1 -1
- package/dist/cjs/asyncWrapBrick.js +14 -0
- package/dist/cjs/asyncWrapBrick.js.map +1 -1
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/useLazyWrapBrick.js +71 -0
- package/dist/cjs/useLazyWrapBrick.js.map +1 -0
- package/dist/esm/ReactUseBrick.js +1 -1
- package/dist/esm/ReactUseBrick.js.map +1 -1
- package/dist/esm/asyncWrapBrick.js +15 -0
- package/dist/esm/asyncWrapBrick.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/useLazyWrapBrick.js +66 -0
- package/dist/esm/useLazyWrapBrick.js.map +1 -0
- package/dist/types/asyncWrapBrick.d.ts +12 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/useLazyWrapBrick.d.ts +56 -0
- package/package.json +9 -8
|
@@ -35,7 +35,7 @@ let ReactUseBrick = exports.ReactUseBrick = function ReactUseBrick({
|
|
|
35
35
|
setRenderResult(newRender);
|
|
36
36
|
setRenderKey(getUniqueId(IdCounterRef));
|
|
37
37
|
} catch (error) {
|
|
38
|
-
if (isTheSameRender(initialRenderId)) {
|
|
38
|
+
if (!ignore && isTheSameRender(initialRenderId)) {
|
|
39
39
|
// eslint-disable-next-line no-console
|
|
40
40
|
console.error("Render useBrick failed:", useBrick, "with data:", data);
|
|
41
41
|
(0, _runtime.handleHttpError)(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactUseBrick.js","names":["_react","_interopRequireWildcard","require","_runtime","ReactUseBrick","exports","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","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","Array","isArray","Fragment","map","item","index","v2Kit","getV2RuntimeFromDll","SingleBrickAsComponentFactory","BrickAsComponentFactory","React"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\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\nexport interface ReactUseBrickProps {\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 ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): 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 (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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 any;\n return <WebComponent key={renderKey} ref={_refCallback} />;\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 {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\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":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AASA,IAAAC,QAAA,GAAAD,OAAA;AAgBA;AACA;AACA,IAAIE,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,SAASA,aAAaA,CAAC;EACzCE,QAAQ;EACRC,IAAI;EACJC,aAAa;EACbC,WAAW;EACXC;AACkB,CAAC,EAA6B;EAChD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GACnC,IAAAC,eAAQ,EAAiD,IAAI,CAAC;EAChE,MAAMC,WAAW,GAAG,IAAAC,aAAM,EAAyC,CAAC;EACpE,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAJ,eAAQ,EAAS,CAAC;EACpD,MAAMK,YAAY,GAAG,IAAAH,aAAM,EAAC,CAAC,CAAC;EAC9B,MAAMI,eAAe,GAAG,IAAAC,cAAO,EAAC;IAAA,IAAAC,oBAAA;IAAA,QAAAA,oBAAA,GAAMC,2BAAkB,CAACC,WAAW,cAAAF,oBAAA,uBAA9BA,oBAAA,CAAAG,IAAA,CAAAF,2BAAiC,CAAC;EAAA,GAAE,EAAE,CAAC;EAE7E,IAAAG,gBAAS,EAAC,MAAM;IACd,IAAIC,MAAM,GAAG,KAAK;IAClB,eAAeC,IAAIA,CAAA,EAAG;MACpB,IAAI;QACF,MAAMC,SAAS,GAAG,MAAMN,2BAAkB,CAACO,cAAc,CACvDvB,QAAQ,EACRC,IAAI,EACJC,aACF,CAAC;QACD,IAAIkB,MAAM,EAAE;UACV;QACF;QACAd,eAAe,CAACgB,SAAS,CAAC;QAC1BX,YAAY,CAACa,WAAW,CAACZ,YAAY,CAAC,CAAC;MACzC,CAAC,CAAC,OAAOa,KAAK,EAAE;QACd,
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["_react","_interopRequireWildcard","require","_runtime","ReactUseBrick","exports","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","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","Array","isArray","Fragment","map","item","index","v2Kit","getV2RuntimeFromDll","SingleBrickAsComponentFactory","BrickAsComponentFactory","React"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\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\nexport interface ReactUseBrickProps {\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 ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): 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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 any;\n return <WebComponent key={renderKey} ref={_refCallback} />;\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 {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\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":[]}
|
|
@@ -6,6 +6,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.asyncWrapBrick = asyncWrapBrick;
|
|
7
7
|
var _runtime = require("@next-core/runtime");
|
|
8
8
|
var _reactElement = require("@next-core/react-element");
|
|
9
|
+
/**
|
|
10
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
11
|
+
*
|
|
12
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
13
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
18
|
+
*
|
|
19
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
20
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
21
|
+
*/
|
|
22
|
+
|
|
9
23
|
async function asyncWrapBrick(brickName, eventsMapping) {
|
|
10
24
|
await _runtime.__secret_internals.loadBricks([brickName]);
|
|
11
25
|
return (0, _reactElement.wrapBrick)(brickName, eventsMapping);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncWrapBrick.js","names":["_runtime","require","_reactElement","asyncWrapBrick","brickName","eventsMapping","__secret_internals","loadBricks","wrapBrick"],"sources":["../../src/asyncWrapBrick.ts"],"sourcesContent":["import { __secret_internals } from \"@next-core/runtime\";\nimport {\n wrapBrick,\n type WrappedBrick,\n type WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(\n BrickName: string,\n eventsMapping: M\n): Promise<WrappedBrickWithEventsMap<T, P, E, M>>;\n\nexport async function asyncWrapBrick<T extends HTMLElement, P>(\n BrickName: string\n): Promise<WrappedBrick<T, P>>;\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(brickName: string, eventsMapping?: M) {\n await __secret_internals.loadBricks([brickName]);\n return wrapBrick<T, P, E, M>(brickName, eventsMapping as M);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"file":"asyncWrapBrick.js","names":["_runtime","require","_reactElement","asyncWrapBrick","brickName","eventsMapping","__secret_internals","loadBricks","wrapBrick"],"sources":["../../src/asyncWrapBrick.ts"],"sourcesContent":["import { __secret_internals } from \"@next-core/runtime\";\nimport {\n wrapBrick,\n type WrappedBrick,\n type WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\n\n/**\n * 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。\n *\n * 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,\n * 这样只有在需要时才会加载这些依赖的构件。\n */\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(\n BrickName: string,\n eventsMapping: M\n): Promise<WrappedBrickWithEventsMap<T, P, E, M>>;\n\n/**\n * 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。\n *\n * 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,\n * 这样只有在需要时才会加载这些依赖的构件。\n */\nexport async function asyncWrapBrick<T extends HTMLElement, P>(\n BrickName: string\n): Promise<WrappedBrick<T, P>>;\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(brickName: string, eventsMapping?: M) {\n await __secret_internals.loadBricks([brickName]);\n return wrapBrick<T, P, E, M>(brickName, eventsMapping as M);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;;AAKO,eAAeE,cAAcA,CAKlCC,SAAiB,EAAEC,aAAiB,EAAE;EACtC,MAAMC,2BAAkB,CAACC,UAAU,CAAC,CAACH,SAAS,CAAC,CAAC;EAChD,OAAO,IAAAI,uBAAS,EAAaJ,SAAS,EAAEC,aAAkB,CAAC;AAC7D","ignoreList":[]}
|
package/dist/cjs/index.js
CHANGED
|
@@ -91,4 +91,15 @@ Object.keys(_useNavConfig).forEach(function (key) {
|
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
93
|
});
|
|
94
|
+
var _useLazyWrapBrick = require("./useLazyWrapBrick.js");
|
|
95
|
+
Object.keys(_useLazyWrapBrick).forEach(function (key) {
|
|
96
|
+
if (key === "default" || key === "__esModule") return;
|
|
97
|
+
if (key in exports && exports[key] === _useLazyWrapBrick[key]) return;
|
|
98
|
+
Object.defineProperty(exports, key, {
|
|
99
|
+
enumerable: true,
|
|
100
|
+
get: function () {
|
|
101
|
+
return _useLazyWrapBrick[key];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
94
105
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_ReactUseBrick","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_useCurrentTheme","_useCurrentApp","_useRecentApps","_useRouteRender","_useProvider","_asyncWrapBrick","_useNavConfig"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\nexport * from \"./useRouteRender.js\";\nexport * from \"./useProvider/useProvider.js\";\nexport * from \"./asyncWrapBrick.js\";\nexport * from \"./useNavConfig.js\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ReactUseBrick","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_useCurrentTheme","_useCurrentApp","_useRecentApps","_useRouteRender","_useProvider","_asyncWrapBrick","_useNavConfig","_useLazyWrapBrick"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\nexport * from \"./useRouteRender.js\";\nexport * from \"./useProvider/useProvider.js\";\nexport * from \"./asyncWrapBrick.js\";\nexport * from \"./useNavConfig.js\";\nexport * from \"./useLazyWrapBrick.js\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useLazyWrapBrick = useLazyWrapBrick;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _asyncWrapBrick = require("./asyncWrapBrick.js");
|
|
9
|
+
/**
|
|
10
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
11
|
+
*
|
|
12
|
+
* ```jsx
|
|
13
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
14
|
+
* return (
|
|
15
|
+
* <Suspense fallback="Loading...">
|
|
16
|
+
* <DepComponent {...props} />
|
|
17
|
+
* </Suspense>
|
|
18
|
+
* );
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
24
|
+
*
|
|
25
|
+
* ```jsx
|
|
26
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
27
|
+
* return (
|
|
28
|
+
* <Suspense fallback="Loading...">
|
|
29
|
+
* <DepComponent {...props} />
|
|
30
|
+
* </Suspense>
|
|
31
|
+
* );
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
37
|
+
*
|
|
38
|
+
* ```jsx
|
|
39
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
40
|
+
* return (
|
|
41
|
+
* <Suspense fallback="Loading...">
|
|
42
|
+
* <DepComponent {...props} />
|
|
43
|
+
* </Suspense>
|
|
44
|
+
* );
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
50
|
+
*
|
|
51
|
+
* ```jsx
|
|
52
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
53
|
+
* return (
|
|
54
|
+
* <Suspense fallback="Loading...">
|
|
55
|
+
* <DepComponent {...props} />
|
|
56
|
+
* </Suspense>
|
|
57
|
+
* );
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
function useLazyWrapBrick(brickName, eventsMapping) {
|
|
62
|
+
return (0, _react.useMemo)(() => {
|
|
63
|
+
if (brickName != null) {
|
|
64
|
+
return /*#__PURE__*/(0, _react.lazy)(async () => ({
|
|
65
|
+
default: await (0, _asyncWrapBrick.asyncWrapBrick)(brickName, eventsMapping)
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}, [brickName, eventsMapping]);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=useLazyWrapBrick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyWrapBrick.js","names":["_react","require","_asyncWrapBrick","useLazyWrapBrick","brickName","eventsMapping","useMemo","lazy","default","asyncWrapBrick"],"sources":["../../src/useLazyWrapBrick.ts"],"sourcesContent":["import { lazy, useMemo, type LazyExoticComponent } from \"react\";\nimport type {\n WrappedBrick,\n WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\nimport { asyncWrapBrick } from \"./asyncWrapBrick.js\";\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string,\n eventsMapping?: M\n): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>>;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P>(\n brickName: string\n): LazyExoticComponent<WrappedBrick<T, P>>;\n\nexport function useLazyWrapBrick<\n _T extends HTMLElement,\n _P,\n _E,\n M extends object,\n>(brickName: undefined | null, eventsMapping?: M): null;\n\nexport function useLazyWrapBrick<_T extends HTMLElement, _P>(\n brickName: undefined | null\n): null;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string | undefined | null,\n eventsMapping?: M\n): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>> | null;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P>(\n brickName: string | undefined | null\n): LazyExoticComponent<WrappedBrick<T, P>> | null;\n\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string | undefined | null,\n eventsMapping?: M\n) {\n return useMemo(() => {\n if (brickName != null) {\n return lazy(async () => ({\n default: await asyncWrapBrick<T, P, E, M>(\n brickName,\n eventsMapping as M\n ),\n }));\n }\n return null;\n }, [brickName, eventsMapping]);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,IAAAC,eAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKO,SAASE,gBAAgBA,CAC9BC,SAAoC,EACpCC,aAAiB,EACjB;EACA,OAAO,IAAAC,cAAO,EAAC,MAAM;IACnB,IAAIF,SAAS,IAAI,IAAI,EAAE;MACrB,oBAAO,IAAAG,WAAI,EAAC,aAAa;QACvBC,OAAO,EAAE,MAAM,IAAAC,8BAAc,EAC3BL,SAAS,EACTC,aACF;MACF,CAAC,CAAC,CAAC;IACL;IACA,OAAO,IAAI;EACb,CAAC,EAAE,CAACD,SAAS,EAAEC,aAAa,CAAC,CAAC;AAChC","ignoreList":[]}
|
|
@@ -29,7 +29,7 @@ let ReactUseBrick = function ReactUseBrick(_ref) {
|
|
|
29
29
|
setRenderResult(newRender);
|
|
30
30
|
setRenderKey(getUniqueId(IdCounterRef));
|
|
31
31
|
} catch (error) {
|
|
32
|
-
if (isTheSameRender(initialRenderId)) {
|
|
32
|
+
if (!ignore && isTheSameRender(initialRenderId)) {
|
|
33
33
|
// eslint-disable-next-line no-console
|
|
34
34
|
console.error("Render useBrick failed:", useBrick, "with data:", data);
|
|
35
35
|
handleHttpError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactUseBrick.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","__secret_internals","handleHttpError","getV2RuntimeFromDll","ReactUseBrick","_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","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","_ref2","Array","isArray","Fragment","map","item","index","v2Kit","SingleBrickAsComponentFactory","BrickAsComponentFactory"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\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\nexport interface ReactUseBrickProps {\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 ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): 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 (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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 any;\n return <WebComponent key={renderKey} ref={_refCallback} />;\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 {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\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":"AAAA,OAAOA,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AAEd,SACEC,kBAAkB,EAClBC,eAAe,EACfC,mBAAmB,QACd,oBAAoB;AAY3B;AACA;AACA,IAAIC,aAAa,GAAG,SAASA,aAAaA,CAAAC,IAAA,EAMQ;EAAA,IANP;IACzCC,QAAQ;IACRC,IAAI;IACJC,aAAa;IACbC,WAAW;IACXC;EACkB,CAAC,GAAAL,IAAA;EACnB,MAAM,CAACM,YAAY,EAAEC,eAAe,CAAC,GACnCZ,QAAQ,CAAiD,IAAI,CAAC;EAChE,MAAMa,WAAW,GAAGd,MAAM,CAAyC,CAAC;EACpE,MAAM,CAACe,SAAS,EAAEC,YAAY,CAAC,GAAGf,QAAQ,CAAS,CAAC;EACpD,MAAMgB,YAAY,GAAGjB,MAAM,CAAC,CAAC,CAAC;EAC9B,MAAMkB,eAAe,GAAGnB,OAAO,CAAC;IAAA,IAAAoB,oBAAA;IAAA,QAAAA,oBAAA,GAAMjB,kBAAkB,CAACkB,WAAW,cAAAD,oBAAA,uBAA9BA,oBAAA,CAAAE,IAAA,CAAAnB,kBAAiC,CAAC;EAAA,GAAE,EAAE,CAAC;EAE7EJ,SAAS,CAAC,MAAM;IACd,IAAIwB,MAAM,GAAG,KAAK;IAClB,eAAeC,IAAIA,CAAA,EAAG;MACpB,IAAI;QACF,MAAMC,SAAS,GAAG,MAAMtB,kBAAkB,CAACuB,cAAc,CACvDlB,QAAQ,EACRC,IAAI,EACJC,aACF,CAAC;QACD,IAAIa,MAAM,EAAE;UACV;QACF;QACAT,eAAe,CAACW,SAAS,CAAC;QAC1BR,YAAY,CAACU,WAAW,CAACT,YAAY,CAAC,CAAC;MACzC,CAAC,CAAC,OAAOU,KAAK,EAAE;QACd,
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","__secret_internals","handleHttpError","getV2RuntimeFromDll","ReactUseBrick","_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","_secret_internals$ge2","newRenderId","ReactUseMultipleBricks","_ref2","Array","isArray","Fragment","map","item","index","v2Kit","SingleBrickAsComponentFactory","BrickAsComponentFactory"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\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\nexport interface ReactUseBrickProps {\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 ReactUseBrick = function ReactUseBrick({\n useBrick,\n data,\n errorBoundary,\n refCallback,\n ignoredCallback,\n}: ReactUseBrickProps): 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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 any;\n return <WebComponent key={renderKey} ref={_refCallback} />;\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 {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n errorBoundary?: boolean;\n}\n\nlet ReactUseMultipleBricks = function ReactUseMultipleBricks({\n useBrick,\n data,\n errorBoundary,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\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,20 @@
|
|
|
1
1
|
import { __secret_internals } from "@next-core/runtime";
|
|
2
2
|
import { wrapBrick } from "@next-core/react-element";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
6
|
+
*
|
|
7
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
8
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
13
|
+
*
|
|
14
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
15
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
16
|
+
*/
|
|
17
|
+
|
|
3
18
|
export async function asyncWrapBrick(brickName, eventsMapping) {
|
|
4
19
|
await __secret_internals.loadBricks([brickName]);
|
|
5
20
|
return wrapBrick(brickName, eventsMapping);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asyncWrapBrick.js","names":["__secret_internals","wrapBrick","asyncWrapBrick","brickName","eventsMapping","loadBricks"],"sources":["../../src/asyncWrapBrick.ts"],"sourcesContent":["import { __secret_internals } from \"@next-core/runtime\";\nimport {\n wrapBrick,\n type WrappedBrick,\n type WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(\n BrickName: string,\n eventsMapping: M\n): Promise<WrappedBrickWithEventsMap<T, P, E, M>>;\n\nexport async function asyncWrapBrick<T extends HTMLElement, P>(\n BrickName: string\n): Promise<WrappedBrick<T, P>>;\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(brickName: string, eventsMapping?: M) {\n await __secret_internals.loadBricks([brickName]);\n return wrapBrick<T, P, E, M>(brickName, eventsMapping as M);\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oBAAoB;AACvD,SACEC,SAAS,QAGJ,0BAA0B;
|
|
1
|
+
{"version":3,"file":"asyncWrapBrick.js","names":["__secret_internals","wrapBrick","asyncWrapBrick","brickName","eventsMapping","loadBricks"],"sources":["../../src/asyncWrapBrick.ts"],"sourcesContent":["import { __secret_internals } from \"@next-core/runtime\";\nimport {\n wrapBrick,\n type WrappedBrick,\n type WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\n\n/**\n * 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。\n *\n * 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,\n * 这样只有在需要时才会加载这些依赖的构件。\n */\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(\n BrickName: string,\n eventsMapping: M\n): Promise<WrappedBrickWithEventsMap<T, P, E, M>>;\n\n/**\n * 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。\n *\n * 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,\n * 这样只有在需要时才会加载这些依赖的构件。\n */\nexport async function asyncWrapBrick<T extends HTMLElement, P>(\n BrickName: string\n): Promise<WrappedBrick<T, P>>;\n\nexport async function asyncWrapBrick<\n T extends HTMLElement,\n P,\n E,\n M extends object,\n>(brickName: string, eventsMapping?: M) {\n await __secret_internals.loadBricks([brickName]);\n return wrapBrick<T, P, E, M>(brickName, eventsMapping as M);\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oBAAoB;AACvD,SACEC,SAAS,QAGJ,0BAA0B;;AAEjC;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACA;;AAKA,OAAO,eAAeC,cAAcA,CAKlCC,SAAiB,EAAEC,aAAiB,EAAE;EACtC,MAAMJ,kBAAkB,CAACK,UAAU,CAAC,CAACF,SAAS,CAAC,CAAC;EAChD,OAAOF,SAAS,CAAaE,SAAS,EAAEC,aAAkB,CAAC;AAC7D","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\nexport * from \"./useRouteRender.js\";\nexport * from \"./useProvider/useProvider.js\";\nexport * from \"./asyncWrapBrick.js\";\nexport * from \"./useNavConfig.js\";\n"],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,qBAAqB;AACnC,cAAc,8BAA8B;AAC5C,cAAc,qBAAqB;AACnC,cAAc,mBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\nexport * from \"./useRouteRender.js\";\nexport * from \"./useProvider/useProvider.js\";\nexport * from \"./asyncWrapBrick.js\";\nexport * from \"./useNavConfig.js\";\nexport * from \"./useLazyWrapBrick.js\";\n"],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,qBAAqB;AACnC,cAAc,8BAA8B;AAC5C,cAAc,qBAAqB;AACnC,cAAc,mBAAmB;AACjC,cAAc,uBAAuB","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { lazy, useMemo } from "react";
|
|
2
|
+
import { asyncWrapBrick } from "./asyncWrapBrick.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
6
|
+
*
|
|
7
|
+
* ```jsx
|
|
8
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
9
|
+
* return (
|
|
10
|
+
* <Suspense fallback="Loading...">
|
|
11
|
+
* <DepComponent {...props} />
|
|
12
|
+
* </Suspense>
|
|
13
|
+
* );
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
19
|
+
*
|
|
20
|
+
* ```jsx
|
|
21
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
22
|
+
* return (
|
|
23
|
+
* <Suspense fallback="Loading...">
|
|
24
|
+
* <DepComponent {...props} />
|
|
25
|
+
* </Suspense>
|
|
26
|
+
* );
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
32
|
+
*
|
|
33
|
+
* ```jsx
|
|
34
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
35
|
+
* return (
|
|
36
|
+
* <Suspense fallback="Loading...">
|
|
37
|
+
* <DepComponent {...props} />
|
|
38
|
+
* </Suspense>
|
|
39
|
+
* );
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
45
|
+
*
|
|
46
|
+
* ```jsx
|
|
47
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
48
|
+
* return (
|
|
49
|
+
* <Suspense fallback="Loading...">
|
|
50
|
+
* <DepComponent {...props} />
|
|
51
|
+
* </Suspense>
|
|
52
|
+
* );
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
export function useLazyWrapBrick(brickName, eventsMapping) {
|
|
57
|
+
return useMemo(() => {
|
|
58
|
+
if (brickName != null) {
|
|
59
|
+
return /*#__PURE__*/lazy(async () => ({
|
|
60
|
+
default: await asyncWrapBrick(brickName, eventsMapping)
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}, [brickName, eventsMapping]);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=useLazyWrapBrick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyWrapBrick.js","names":["lazy","useMemo","asyncWrapBrick","useLazyWrapBrick","brickName","eventsMapping","default"],"sources":["../../src/useLazyWrapBrick.ts"],"sourcesContent":["import { lazy, useMemo, type LazyExoticComponent } from \"react\";\nimport type {\n WrappedBrick,\n WrappedBrickWithEventsMap,\n} from \"@next-core/react-element\";\nimport { asyncWrapBrick } from \"./asyncWrapBrick.js\";\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string,\n eventsMapping?: M\n): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>>;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P>(\n brickName: string\n): LazyExoticComponent<WrappedBrick<T, P>>;\n\nexport function useLazyWrapBrick<\n _T extends HTMLElement,\n _P,\n _E,\n M extends object,\n>(brickName: undefined | null, eventsMapping?: M): null;\n\nexport function useLazyWrapBrick<_T extends HTMLElement, _P>(\n brickName: undefined | null\n): null;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string | undefined | null,\n eventsMapping?: M\n): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>> | null;\n\n/**\n * 使用 `React.lazy` 包装一个异步加载的构件。\n *\n * ```jsx\n * const DepComponent = useLazyWrapBrick(\"async-dep\");\n * return (\n * <Suspense fallback=\"Loading...\">\n * <DepComponent {...props} />\n * </Suspense>\n * );\n * ```\n */\nexport function useLazyWrapBrick<T extends HTMLElement, P>(\n brickName: string | undefined | null\n): LazyExoticComponent<WrappedBrick<T, P>> | null;\n\nexport function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(\n brickName: string | undefined | null,\n eventsMapping?: M\n) {\n return useMemo(() => {\n if (brickName != null) {\n return lazy(async () => ({\n default: await asyncWrapBrick<T, P, E, M>(\n brickName,\n eventsMapping as M\n ),\n }));\n }\n return null;\n }, [brickName, eventsMapping]);\n}\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,OAAO,QAAkC,OAAO;AAK/D,SAASC,cAAc,QAAQ,qBAAqB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,OAAO,SAASC,gBAAgBA,CAC9BC,SAAoC,EACpCC,aAAiB,EACjB;EACA,OAAOJ,OAAO,CAAC,MAAM;IACnB,IAAIG,SAAS,IAAI,IAAI,EAAE;MACrB,oBAAOJ,IAAI,CAAC,aAAa;QACvBM,OAAO,EAAE,MAAMJ,cAAc,CAC3BE,SAAS,EACTC,aACF;MACF,CAAC,CAAC,CAAC;IACL;IACA,OAAO,IAAI;EACb,CAAC,EAAE,CAACD,SAAS,EAAEC,aAAa,CAAC,CAAC;AAChC","ignoreList":[]}
|
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
import { type WrappedBrick, type WrappedBrickWithEventsMap } from "@next-core/react-element";
|
|
2
|
+
/**
|
|
3
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
4
|
+
*
|
|
5
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
6
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
7
|
+
*/
|
|
2
8
|
export declare function asyncWrapBrick<T extends HTMLElement, P, E, M extends object>(BrickName: string, eventsMapping: M): Promise<WrappedBrickWithEventsMap<T, P, E, M>>;
|
|
9
|
+
/**
|
|
10
|
+
* 使用异步加载的方式包装一个构件,可用于按条件渲染的构件依赖。
|
|
11
|
+
*
|
|
12
|
+
* 例如提供复杂弹层内容的按钮构件,其内容需要使用到一些大型构件,那么这些依赖可以使用 asyncWrapBrick,
|
|
13
|
+
* 这样只有在需要时才会加载这些依赖的构件。
|
|
14
|
+
*/
|
|
3
15
|
export declare function asyncWrapBrick<T extends HTMLElement, P>(BrickName: string): Promise<WrappedBrick<T, P>>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type LazyExoticComponent } from "react";
|
|
2
|
+
import type { WrappedBrick, WrappedBrickWithEventsMap } from "@next-core/react-element";
|
|
3
|
+
/**
|
|
4
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
5
|
+
*
|
|
6
|
+
* ```jsx
|
|
7
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
8
|
+
* return (
|
|
9
|
+
* <Suspense fallback="Loading...">
|
|
10
|
+
* <DepComponent {...props} />
|
|
11
|
+
* </Suspense>
|
|
12
|
+
* );
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(brickName: string, eventsMapping?: M): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>>;
|
|
16
|
+
/**
|
|
17
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
18
|
+
*
|
|
19
|
+
* ```jsx
|
|
20
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
21
|
+
* return (
|
|
22
|
+
* <Suspense fallback="Loading...">
|
|
23
|
+
* <DepComponent {...props} />
|
|
24
|
+
* </Suspense>
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function useLazyWrapBrick<T extends HTMLElement, P>(brickName: string): LazyExoticComponent<WrappedBrick<T, P>>;
|
|
29
|
+
export declare function useLazyWrapBrick<_T extends HTMLElement, _P, _E, M extends object>(brickName: undefined | null, eventsMapping?: M): null;
|
|
30
|
+
export declare function useLazyWrapBrick<_T extends HTMLElement, _P>(brickName: undefined | null): null;
|
|
31
|
+
/**
|
|
32
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
33
|
+
*
|
|
34
|
+
* ```jsx
|
|
35
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
36
|
+
* return (
|
|
37
|
+
* <Suspense fallback="Loading...">
|
|
38
|
+
* <DepComponent {...props} />
|
|
39
|
+
* </Suspense>
|
|
40
|
+
* );
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function useLazyWrapBrick<T extends HTMLElement, P, E, M extends object>(brickName: string | undefined | null, eventsMapping?: M): LazyExoticComponent<WrappedBrickWithEventsMap<T, P, E, M>> | null;
|
|
44
|
+
/**
|
|
45
|
+
* 使用 `React.lazy` 包装一个异步加载的构件。
|
|
46
|
+
*
|
|
47
|
+
* ```jsx
|
|
48
|
+
* const DepComponent = useLazyWrapBrick("async-dep");
|
|
49
|
+
* return (
|
|
50
|
+
* <Suspense fallback="Loading...">
|
|
51
|
+
* <DepComponent {...props} />
|
|
52
|
+
* </Suspense>
|
|
53
|
+
* );
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function useLazyWrapBrick<T extends HTMLElement, P>(brickName: string | undefined | null): LazyExoticComponent<WrappedBrick<T, P>> | null;
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/react-runtime",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/react-runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git@github.com:easyops-cn/next-core.git"
|
|
8
|
+
"url": "git@github.com:easyops-cn/next-core.git",
|
|
9
|
+
"directory": "packages/react-runtime"
|
|
9
10
|
},
|
|
10
11
|
"sideEffects": false,
|
|
11
12
|
"type": "module",
|
|
@@ -37,18 +38,18 @@
|
|
|
37
38
|
"test:ci": "cross-env NODE_ENV='test' CI=true test-next"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
|
-
"@next-core/react-element": "^1.0.
|
|
41
|
-
"@next-core/runtime": "^1.
|
|
42
|
-
"@next-core/types": "^1.11.
|
|
41
|
+
"@next-core/react-element": "^1.0.28",
|
|
42
|
+
"@next-core/runtime": "^1.46.0",
|
|
43
|
+
"@next-core/types": "^1.11.1",
|
|
43
44
|
"react": "0.0.0-experimental-ee8509801-20230117",
|
|
44
45
|
"react-dom": "0.0.0-experimental-ee8509801-20230117"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
|
-
"@next-core/build-next-libs": "^1.0.
|
|
48
|
-
"@next-core/test-next": "^1.1.
|
|
48
|
+
"@next-core/build-next-libs": "^1.0.17",
|
|
49
|
+
"@next-core/test-next": "^1.1.3",
|
|
49
50
|
"@testing-library/react": "^15.0.7",
|
|
50
51
|
"@testing-library/react-hooks": "^8.0.1",
|
|
51
52
|
"jest-fetch-mock": "^3.0.3"
|
|
52
53
|
},
|
|
53
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "619848934f0acd05e52e9890efedcf3eb454a5eb"
|
|
54
55
|
}
|