@next-core/brick-kit 2.158.2 → 2.159.0

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/index.esm.js CHANGED
@@ -3,7 +3,7 @@ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
3
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
4
4
  import _asyncToGenerator$3 from '@babel/runtime/helpers/asyncToGenerator';
5
5
  import _defineProperty$1 from '@babel/runtime/helpers/defineProperty';
6
- import React, { useState, useEffect, useRef, useCallback, useMemo, forwardRef, useImperativeHandle, useContext, createContext, useReducer } from 'react';
6
+ import React, { useState, useEffect, useRef, useMemo, useCallback, forwardRef, useImperativeHandle, useContext, createContext, useReducer } from 'react';
7
7
  import { JsonStorage, toPath, computeRealRoutePath, hasOwnProperty, isObject, isEvaluable, transformAndInject, transform, trackContext, trackState, trackFormState, scanPermissionActionsInStoryboard, precookFunction, cook, resolveContextConcurrently, syncResolveContextConcurrently, trackUsedState, trackUsedContext, shouldAllowRecursiveEvaluations, preevaluate, inject, matchPath, deepFreeze, createProviderClass, removeDeadConditionsInTpl, getTemplateDepsOfStoryboard, getDllAndDepsOfStoryboard, asyncProcessStoryboard, getDllAndDepsByResource, scanRouteAliasInStoryboard, prefetchScript, scanBricksInBrickConf, scanProcessorsInAny, loadScript, scanAppGetMenuInAny, asyncProcessBrick, scanInstalledAppsInStoryboard, removeDeadConditions, restoreDynamicTemplates, scanStoryboard, mapCustomApisToNameAndNamespace } from '@next-core/brick-utils';
8
8
  import _, { set, get, difference, identity, uniqueId, cloneDeep, clamp, isNil, isEmpty, sortBy, orderBy, merge, isObject as isObject$1, uniq, pick, omit, findLastIndex, noop, isString as isString$1 } from 'lodash';
9
9
  import { http, HttpResponseError, HttpAbortError, HttpFetchError } from '@next-core/brick-http';
@@ -9300,9 +9300,9 @@ function getDefaultProperties(_name, fields) {
9300
9300
  return defaultValue;
9301
9301
  } else return {};
9302
9302
  }
9303
- function getStoryboard(datasource, result, fields, isPreview, formContextId) {
9303
+ function getStoryboard(dataSource, result, fields, isPreview, formContextId) {
9304
9304
  var _loop = function (i) {
9305
- var dataItem = datasource[i];
9305
+ var dataItem = dataSource[i];
9306
9306
  var resultItem = {};
9307
9307
  //数据初始化:根据id,字段类型获取默认属性
9308
9308
  var defaultProperties = getDefaultProperties(dataItem.id, fields);
@@ -9350,7 +9350,7 @@ function getStoryboard(datasource, result, fields, isPreview, formContextId) {
9350
9350
  });
9351
9351
  result[i] = resultItem;
9352
9352
  };
9353
- for (var i = 0; i < datasource.length; i++) {
9353
+ for (var i = 0; i < dataSource.length; i++) {
9354
9354
  _loop(i);
9355
9355
  }
9356
9356
  return result;
@@ -11515,8 +11515,7 @@ function useLocation() {
11515
11515
  return location;
11516
11516
  }
11517
11517
 
11518
- var expandTemplateInUseBrick = (useBrick, tplTagName, brick) => {
11519
- var template;
11518
+ function expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense) {
11520
11519
  if (tplTagName) {
11521
11520
  // 如果是模板, 需要展开解析模板, 并遍历模板中的slots, 再给slots的brick绑定值给自身
11522
11521
  // 为后续ProxyRefs获取brick做值缓存
@@ -11527,12 +11526,11 @@ var expandTemplateInUseBrick = (useBrick, tplTagName, brick) => {
11527
11526
  lifeCycle: useBrick.lifeCycle,
11528
11527
  slots: useBrick.slots
11529
11528
  };
11530
- template = expandCustomTemplate(tplConf, brick, _internalApiGetCurrentContext());
11529
+ return (requireSuspense ? asyncExpandCustomTemplate : expandCustomTemplate)(tplConf, brick, _internalApiGetCurrentContext());
11531
11530
  } else if (useBrick[symbolForRefForProxy]) {
11532
11531
  useBrick[symbolForRefForProxy].brick = brick;
11533
11532
  }
11534
- return template;
11535
- };
11533
+ }
11536
11534
  var getCurrentRunTimeBrick = (useBrick, tplTagName, data) => {
11537
11535
  var trackingContextList = [];
11538
11536
  var tplContextId = useBrick[symbolForTplContextId];
@@ -11574,7 +11572,7 @@ var getCurrentRunTimeBrick = (useBrick, tplTagName, data) => {
11574
11572
  * @param props - 属性。
11575
11573
  */
11576
11574
  var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsComponent(_ref) {
11577
- var _internalApiGetCurren, _templateRef$current$, _templateRef$current2;
11575
+ var _internalApiGetCurren, _brick, _ref8;
11578
11576
  var {
11579
11577
  useBrick,
11580
11578
  data,
@@ -11584,10 +11582,10 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11584
11582
  var firstRunRef = useRef(true);
11585
11583
  var innerRefCallbackRef = useRef();
11586
11584
  var elementRef = useRef();
11587
- var templateRef = useRef();
11588
- var formRef = useRef();
11585
+ var expandedBrickConfRef = useRef();
11586
+ var [expandedBrickConf, setExpandedBrickConf] = useState(null);
11589
11587
  var tplTagName = getTagNameOfCustomTemplate(useBrick.brick, (_internalApiGetCurren = _internalApiGetCurrentContext().app) === null || _internalApiGetCurren === void 0 ? void 0 : _internalApiGetCurren.id);
11590
- var isBrickAvailable = React.useMemo(() => {
11588
+ var isBrickAvailable = useMemo(() => {
11591
11589
  if (isObject(useBrick.if) && !isPreEvaluated(useBrick.if)) {
11592
11590
  // eslint-disable-next-line
11593
11591
  console.warn("Currently resolvable-if in `useBrick` is not supported.");
@@ -11600,7 +11598,17 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11600
11598
  }
11601
11599
  return true;
11602
11600
  }, [useBrick, data]);
11603
- var runtimeBrick = React.useMemo( /*#__PURE__*/_asyncToGenerator$3(function* () {
11601
+ var requireSuspense = useMemo(() => {
11602
+ var context;
11603
+ if (useBrick.brick === formRenderer) {
11604
+ context = useBrick.properties.formData.context;
11605
+ } else if (tplTagName) {
11606
+ context = customTemplateRegistry.get(tplTagName).state;
11607
+ }
11608
+ return Array.isArray(context) && context.some(ctx => !!ctx.resolve);
11609
+ }, [tplTagName, useBrick]);
11610
+ var [suspenseReady, setSuspenseReady] = useState(false);
11611
+ var runtimeBrick = useMemo( /*#__PURE__*/_asyncToGenerator$3(function* () {
11604
11612
  if (!isBrickAvailable) {
11605
11613
  return null;
11606
11614
  }
@@ -11611,11 +11619,14 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11611
11619
  }
11612
11620
  _internalApiLoadDynamicBricksInBrickConf(useBrick).catch(handleHttpError);
11613
11621
  var brick = getCurrentRunTimeBrick(useBrick, tplTagName, data);
11614
- templateRef.current = expandTemplateInUseBrick(useBrick, tplTagName, brick);
11615
- if (useBrick.brick === formRenderer) {
11616
- var _useBrick$properties;
11617
- formRef.current = ExpandCustomForm((_useBrick$properties = useBrick.properties) === null || _useBrick$properties === void 0 ? void 0 : _useBrick$properties.formData, useBrick, false);
11622
+ var expanded = useBrick.brick === formRenderer ? (requireSuspense ? AsyncExpandCustomForm : ExpandCustomForm)(useBrick.properties.formData, useBrick, false) : expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense);
11623
+ if (requireSuspense) {
11624
+ setExpandedBrickConf(yield expanded);
11625
+ setSuspenseReady(true);
11626
+ } else {
11627
+ expandedBrickConfRef.current = expanded;
11618
11628
  }
11629
+
11619
11630
  // Let `transform` works still.
11620
11631
  transformProperties(brick.properties, data, useBrick.transform, useBrick.transformFrom, undefined, {
11621
11632
  allowInject: true
@@ -11638,7 +11649,7 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11638
11649
  }));
11639
11650
  }
11640
11651
  return brick;
11641
- }), [useBrick, data, isBrickAvailable, tplTagName]);
11652
+ }), [useBrick, data, isBrickAvailable, tplTagName, requireSuspense]);
11642
11653
  var dispatchLifeCycleEvent = /*#__PURE__*/function () {
11643
11654
  var _ref4 = _asyncToGenerator$3(function* (event, handlers, brick) {
11644
11655
  for (var handler of [].concat(handlers)) {
@@ -11735,13 +11746,13 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11735
11746
  innerRefCallbackRef.current(element);
11736
11747
  }, []);
11737
11748
  var childConfs = useMemo(() => {
11738
- var _ref7, _templateRef$current;
11739
- return slotsToChildren(((_ref7 = (_templateRef$current = templateRef.current) !== null && _templateRef$current !== void 0 ? _templateRef$current : formRef.current) !== null && _ref7 !== void 0 ? _ref7 : useBrick).slots);
11740
- }, [templateRef.current, formRef.current, useBrick]);
11741
- if (!isBrickAvailable) {
11749
+ var _ref7;
11750
+ return slotsToChildren(((_ref7 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) !== null && _ref7 !== void 0 ? _ref7 : useBrick).slots);
11751
+ }, [expandedBrickConf, expandedBrickConfRef.current, useBrick, requireSuspense]);
11752
+ if (!isBrickAvailable || requireSuspense && !suspenseReady) {
11742
11753
  return null;
11743
11754
  }
11744
- return /*#__PURE__*/React.createElement((_templateRef$current$ = (_templateRef$current2 = templateRef.current) === null || _templateRef$current2 === void 0 ? void 0 : _templateRef$current2.brick) !== null && _templateRef$current$ !== void 0 ? _templateRef$current$ : tplTagName || useBrick.brick, {
11755
+ return /*#__PURE__*/React.createElement((_brick = (_ref8 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) === null || _ref8 === void 0 ? void 0 : _ref8.brick) !== null && _brick !== void 0 ? _brick : tplTagName || useBrick.brick, {
11745
11756
  ref: innerRefCallback
11746
11757
  }, ...childConfs.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11747
11758
  key: index,
@@ -11768,11 +11779,11 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11768
11779
  *
11769
11780
  * @param props - 属性。
11770
11781
  */
11771
- function BrickAsComponent(_ref8) {
11782
+ function BrickAsComponent(_ref9) {
11772
11783
  var {
11773
11784
  useBrick,
11774
11785
  data
11775
- } = _ref8;
11786
+ } = _ref9;
11776
11787
  if (Array.isArray(useBrick)) {
11777
11788
  return /*#__PURE__*/React.createElement(React.Fragment, null, useBrick.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11778
11789
  key: index,
@@ -11789,8 +11800,8 @@ function slotsToChildren(slots) {
11789
11800
  if (!slots) {
11790
11801
  return [];
11791
11802
  }
11792
- return Object.entries(slots).flatMap(_ref9 => {
11793
- var [slot, slotConf] = _ref9;
11803
+ return Object.entries(slots).flatMap(_ref10 => {
11804
+ var [slot, slotConf] = _ref10;
11794
11805
  return Array.isArray(slotConf.bricks) ? slotConf.bricks.map(child => _objectSpread(_objectSpread({}, child), {}, {
11795
11806
  properties: _objectSpread(_objectSpread({}, child.properties), {}, {
11796
11807
  slot
@@ -11808,19 +11819,19 @@ function transformEvents(data, events) {
11808
11819
 
11809
11820
  /* istanbul ignore next */
11810
11821
  // eslint-disable-next-line react/display-name
11811
- var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/forwardRef(function LegacySingleBrickAsComponent(_ref10, ref) {
11812
- var _internalApiGetCurren2, _templateRef$current$2, _templateRef$current4;
11822
+ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/forwardRef(function LegacySingleBrickAsComponent(_ref11, ref) {
11823
+ var _internalApiGetCurren2, _brick2, _ref18;
11813
11824
  var {
11814
11825
  useBrick,
11815
11826
  data,
11816
11827
  refCallback
11817
- } = _ref10;
11828
+ } = _ref11;
11818
11829
  var firstRunRef = useRef(true);
11819
11830
  var innerRefCallbackRef = useRef();
11820
11831
  var elementRef = useRef();
11821
- var templateRef = useRef();
11832
+ var expandedBrickConfRef = useRef();
11833
+ var [expandedBrickConf, setExpandedBrickConf] = useState(null);
11822
11834
  var tplTagName = getTagNameOfCustomTemplate(useBrick.brick, (_internalApiGetCurren2 = _internalApiGetCurrentContext().app) === null || _internalApiGetCurren2 === void 0 ? void 0 : _internalApiGetCurren2.id);
11823
- var formRef = useRef();
11824
11835
  var isBrickAvailable = React.useMemo(() => {
11825
11836
  if (isObject(useBrick.if) && !isPreEvaluated(useBrick.if)) {
11826
11837
  // eslint-disable-next-line
@@ -11834,6 +11845,16 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11834
11845
  }
11835
11846
  return true;
11836
11847
  }, [useBrick, data]);
11848
+ var requireSuspense = useMemo(() => {
11849
+ var context;
11850
+ if (useBrick.brick === formRenderer) {
11851
+ context = useBrick.properties.formData.context;
11852
+ } else if (tplTagName) {
11853
+ context = customTemplateRegistry.get(tplTagName).state;
11854
+ }
11855
+ return Array.isArray(context) && context.some(ctx => !!ctx.resolve);
11856
+ }, [tplTagName, useBrick]);
11857
+ var [suspenseReady, setSuspenseReady] = useState(false);
11837
11858
 
11838
11859
  /* istanbul ignore next (never reach in test) */
11839
11860
  useImperativeHandle(ref, () => {
@@ -11850,10 +11871,12 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11850
11871
  }
11851
11872
  _internalApiLoadDynamicBricksInBrickConf(useBrick).catch(handleHttpError);
11852
11873
  var brick = getCurrentRunTimeBrick(useBrick, tplTagName, data);
11853
- templateRef.current = expandTemplateInUseBrick(useBrick, tplTagName, brick);
11854
- if (useBrick.brick === formRenderer) {
11855
- var _useBrick$properties2;
11856
- formRef.current = ExpandCustomForm((_useBrick$properties2 = useBrick.properties) === null || _useBrick$properties2 === void 0 ? void 0 : _useBrick$properties2.formData, useBrick, false);
11874
+ var expanded = useBrick.brick === formRenderer ? (requireSuspense ? AsyncExpandCustomForm : ExpandCustomForm)(useBrick.properties.formData, useBrick, false) : expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense);
11875
+ if (requireSuspense) {
11876
+ setExpandedBrickConf(yield expanded);
11877
+ setSuspenseReady(true);
11878
+ } else {
11879
+ expandedBrickConfRef.current = expanded;
11857
11880
  }
11858
11881
 
11859
11882
  // Let `transform` works still.
@@ -11863,8 +11886,8 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11863
11886
 
11864
11887
  // 设置 properties refProperty值
11865
11888
  if (useBrick[symbolForComputedPropsFromProxy]) {
11866
- Object.entries(useBrick[symbolForComputedPropsFromProxy]).forEach(_ref12 => {
11867
- var [propName, propValue] = _ref12;
11889
+ Object.entries(useBrick[symbolForComputedPropsFromProxy]).forEach(_ref13 => {
11890
+ var [propName, propValue] = _ref13;
11868
11891
  set(brick.properties, propName, propValue);
11869
11892
  });
11870
11893
  }
@@ -11878,9 +11901,9 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11878
11901
  }));
11879
11902
  }
11880
11903
  return brick;
11881
- }), [useBrick, data, isBrickAvailable, tplTagName]);
11904
+ }), [useBrick, data, isBrickAvailable, tplTagName, requireSuspense]);
11882
11905
  var dispatchLifeCycleEvent = /*#__PURE__*/function () {
11883
- var _ref13 = _asyncToGenerator$3(function* (event, handlers, brick) {
11906
+ var _ref14 = _asyncToGenerator$3(function* (event, handlers, brick) {
11884
11907
  for (var handler of [].concat(handlers)) {
11885
11908
  listenerFactory(handler, _objectSpread(_objectSpread({}, _internalApiGetCurrentContext()), {}, {
11886
11909
  tplContextId: useBrick[symbolForTplContextId]
@@ -11888,7 +11911,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11888
11911
  }
11889
11912
  });
11890
11913
  return function dispatchLifeCycleEvent(_x5, _x6, _x7) {
11891
- return _ref13.apply(this, arguments);
11914
+ return _ref14.apply(this, arguments);
11892
11915
  };
11893
11916
  }();
11894
11917
  var updateBrick = useCallback((brick, element) => {
@@ -11939,7 +11962,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11939
11962
  })();
11940
11963
  }, [runtimeBrick, updateBrick]);
11941
11964
  innerRefCallbackRef.current = /*#__PURE__*/function () {
11942
- var _ref15 = _asyncToGenerator$3(function* (element) {
11965
+ var _ref16 = _asyncToGenerator$3(function* (element) {
11943
11966
  elementRef.current = element;
11944
11967
  var brick;
11945
11968
  try {
@@ -11965,7 +11988,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11965
11988
  refCallback === null || refCallback === void 0 ? void 0 : refCallback(element);
11966
11989
  });
11967
11990
  return function (_x8) {
11968
- return _ref15.apply(this, arguments);
11991
+ return _ref16.apply(this, arguments);
11969
11992
  };
11970
11993
  }();
11971
11994
 
@@ -11974,13 +11997,13 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11974
11997
  innerRefCallbackRef.current(element);
11975
11998
  }, []);
11976
11999
  var childConfs = useMemo(() => {
11977
- var _ref16, _templateRef$current3;
11978
- return slotsToChildren(((_ref16 = (_templateRef$current3 = templateRef.current) !== null && _templateRef$current3 !== void 0 ? _templateRef$current3 : formRef.current) !== null && _ref16 !== void 0 ? _ref16 : useBrick).slots);
11979
- }, [templateRef.current, formRef.current, useBrick]);
11980
- if (!isBrickAvailable) {
12000
+ var _ref17;
12001
+ return slotsToChildren(((_ref17 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) !== null && _ref17 !== void 0 ? _ref17 : useBrick).slots);
12002
+ }, [expandedBrickConf, expandedBrickConfRef.current, useBrick, requireSuspense]);
12003
+ if (!isBrickAvailable || requireSuspense && !suspenseReady) {
11981
12004
  return null;
11982
12005
  }
11983
- return /*#__PURE__*/React.createElement((_templateRef$current$2 = (_templateRef$current4 = templateRef.current) === null || _templateRef$current4 === void 0 ? void 0 : _templateRef$current4.brick) !== null && _templateRef$current$2 !== void 0 ? _templateRef$current$2 : tplTagName || useBrick.brick, {
12006
+ return /*#__PURE__*/React.createElement((_brick2 = (_ref18 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) === null || _ref18 === void 0 ? void 0 : _ref18.brick) !== null && _brick2 !== void 0 ? _brick2 : tplTagName || useBrick.brick, {
11984
12007
  ref: innerRefCallback
11985
12008
  }, ...childConfs.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11986
12009
  key: index,