@pisell/lowcode-renderer 1.0.48 → 1.0.50

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.
@@ -17,10 +17,18 @@ import { injectComponents } from "@alilc/lowcode-plugin-inject";
17
17
  import { AssetLoader, buildComponents } from "@alilc/lowcode-utils";
18
18
  import { Skeleton } from "antd";
19
19
  import { isArray, mergeWith, cloneDeep } from "lodash-es";
20
- import React, { useEffect, useState } from "react";
20
+ import React, { useEffect, useState, useMemo } from "react";
21
21
  import ReactRenderer from "../ReactRenderer";
22
22
  import appHelper from "../appHelper";
23
+ import { generateUniqueIdByObj } from "@pisell/utils";
23
24
  import { jsx as _jsx } from "react/jsx-runtime";
25
+ var isLoadAssets = false;
26
+
27
+ /**
28
+ * 缓存处理后的data信息 二次访问时
29
+ * 直接从缓存中获取
30
+ */
31
+ var cacheDataMap = new Map();
24
32
  var Render = function Render(props) {
25
33
  var packages = props.packages,
26
34
  projectSchema = props.projectSchema,
@@ -29,7 +37,13 @@ var Render = function Render(props) {
29
37
  locale = props.locale,
30
38
  _props$isShowSkeleton = props.isShowSkeleton,
31
39
  isShowSkeleton = _props$isShowSkeleton === void 0 ? true : _props$isShowSkeleton;
32
- var _useState = useState({}),
40
+ var schemaHash = useMemo(function () {
41
+ if (projectSchema) {
42
+ return generateUniqueIdByObj(projectSchema);
43
+ }
44
+ return null;
45
+ }, [projectSchema]);
46
+ var _useState = useState(schemaHash ? cacheDataMap.get(schemaHash) || {} : {}),
33
47
  _useState2 = _slicedToArray(_useState, 2),
34
48
  data = _useState2[0],
35
49
  setData = _useState2[1];
@@ -51,7 +65,7 @@ var Render = function Render(props) {
51
65
  }
52
66
  function _init() {
53
67
  _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
54
- var componentsMapArray, componentsTree, i18n, projectDataSource, componentsMap, packagesMap, pageSchema, libraryMap, libraryAsset, assetLoader, components;
68
+ var componentsMapArray, componentsTree, i18n, projectDataSource, componentsMap, packagesMap, pageSchema, libraryMap, libraryAsset, assetLoader, components, _data;
55
69
  return _regeneratorRuntime().wrap(function _callee$(_context) {
56
70
  while (1) switch (_context.prev = _context.next) {
57
71
  case 0:
@@ -88,24 +102,31 @@ var Render = function Render(props) {
88
102
  // console.log(libraryMap,'libraryMap',libraryAsset);
89
103
  // const vendors = [assetBundle(libraryAsset, AssetLevel.Library)];
90
104
 
105
+ // 静态资源load后不再二次加载
106
+ if (isLoadAssets) {
107
+ _context.next = 15;
108
+ break;
109
+ }
91
110
  // TODO asset may cause pollution
92
111
  assetLoader = new AssetLoader();
93
- _context.next = 13;
112
+ _context.next = 14;
94
113
  return assetLoader.load(libraryAsset);
95
- case 13:
96
- _context.next = 15;
97
- return injectComponents(buildComponents(libraryMap, componentsMap));
114
+ case 14:
115
+ isLoadAssets = true;
98
116
  case 15:
117
+ _context.next = 17;
118
+ return injectComponents(buildComponents(libraryMap, componentsMap));
119
+ case 17:
99
120
  components = _context.sent;
100
- // console.log(components,'components');
101
-
102
- setData({
121
+ _data = {
103
122
  schema: pageSchema,
104
123
  components: components,
105
124
  i18n: i18n,
106
125
  projectDataSource: projectDataSource
107
- });
108
- case 17:
126
+ };
127
+ cacheDataMap.set(schemaHash, _data);
128
+ setData(_data);
129
+ case 21:
109
130
  case "end":
110
131
  return _context.stop();
111
132
  }
@@ -123,7 +144,7 @@ var Render = function Render(props) {
123
144
  if (!schema || !components) {
124
145
  init();
125
146
  }
126
- }, [data, projectSchema]);
147
+ }, [data, projectSchema, schemaHash]);
127
148
  if (!schema || !components) {
128
149
  if (!isShowSkeleton) {
129
150
  return null;
@@ -39,6 +39,9 @@ var import_lodash_es = require("lodash-es");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_ReactRenderer = __toESM(require("../ReactRenderer"));
41
41
  var import_appHelper = __toESM(require("../appHelper"));
42
+ var import_utils = require("@pisell/utils");
43
+ var isLoadAssets = false;
44
+ var cacheDataMap = /* @__PURE__ */ new Map();
42
45
  var Render = (props) => {
43
46
  const {
44
47
  packages,
@@ -48,7 +51,15 @@ var Render = (props) => {
48
51
  locale,
49
52
  isShowSkeleton = true
50
53
  } = props;
51
- const [data, setData] = (0, import_react.useState)({});
54
+ const schemaHash = (0, import_react.useMemo)(() => {
55
+ if (projectSchema) {
56
+ return (0, import_utils.generateUniqueIdByObj)(projectSchema);
57
+ }
58
+ return null;
59
+ }, [projectSchema]);
60
+ const [data, setData] = (0, import_react.useState)(
61
+ schemaHash ? cacheDataMap.get(schemaHash) || {} : {}
62
+ );
52
63
  const { schema, components, i18n = {}, projectDataSource = {} } = data;
53
64
  (0, import_react.useEffect)(() => {
54
65
  document.body.id = "body";
@@ -80,17 +91,22 @@ var Render = (props) => {
80
91
  libraryAsset.push(urls);
81
92
  }
82
93
  });
83
- const assetLoader = new import_lowcode_utils.AssetLoader();
84
- await assetLoader.load(libraryAsset);
94
+ if (!isLoadAssets) {
95
+ const assetLoader = new import_lowcode_utils.AssetLoader();
96
+ await assetLoader.load(libraryAsset);
97
+ isLoadAssets = true;
98
+ }
85
99
  const components3 = await (0, import_lowcode_plugin_inject.injectComponents)(
86
100
  (0, import_lowcode_utils.buildComponents)(libraryMap, componentsMap)
87
101
  );
88
- setData({
102
+ const _data = {
89
103
  schema: pageSchema,
90
104
  components: components3,
91
105
  i18n: i18n3,
92
106
  projectDataSource: projectDataSource3
93
- });
107
+ };
108
+ cacheDataMap.set(schemaHash, _data);
109
+ setData(_data);
94
110
  }
95
111
  const {
96
112
  schema: schema2,
@@ -101,7 +117,7 @@ var Render = (props) => {
101
117
  if (!schema2 || !components2) {
102
118
  init();
103
119
  }
104
- }, [data, projectSchema]);
120
+ }, [data, projectSchema, schemaHash]);
105
121
  if (!schema || !components) {
106
122
  if (!isShowSkeleton) {
107
123
  return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/lowcode-renderer",
3
- "version": "1.0.48",
3
+ "version": "1.0.50",
4
4
  "sideEffects": false,
5
5
  "main": "./lib/index.js",
6
6
  "module": "./es/index.js",
@@ -18,7 +18,7 @@
18
18
  "@alifd/next": "^1.25.44",
19
19
  "lodash-es": "^4.17.21",
20
20
  "dayjs": "^1.11.9",
21
- "@pisell/utils": "1.0.23"
21
+ "@pisell/utils": "1.0.24"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.9.0",