@next-core/brick-kit 2.158.2 → 2.159.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/index.esm.js CHANGED
@@ -3,8 +3,8 @@ 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';
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';
6
+ import React, { useState, useEffect, useRef, useMemo, useCallback, forwardRef, useImperativeHandle, useContext, createContext, useReducer } from 'react';
7
+ import { JsonStorage, toPath, computeRealRoutePath, hasOwnProperty, isObject, isEvaluable, transformAndInject, transform, trackContext, trackState, trackFormState, scanPermissionActionsInStoryboard, precookFunction, cook, resolveContextConcurrently, syncResolveContextConcurrently, trackUsedState, trackUsedContext, shouldAllowRecursiveEvaluations, preevaluate, inject, scanPermissionActionsInAny, 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';
10
10
  import moment from 'moment';
@@ -2911,6 +2911,8 @@ function _processMenu() {
2911
2911
  app
2912
2912
  } = _yield$fetchMenuById,
2913
2913
  restMenuData = _objectWithoutProperties(_yield$fetchMenuById, _excluded3);
2914
+ var usedActions = scanPermissionActionsInAny([items, restMenuData]);
2915
+ yield validatePermissions(usedActions);
2914
2916
  var appsRequireI18nFulfilled = new Set();
2915
2917
  var rootAppId = app[0].appId;
2916
2918
  if (rootAppId !== context.app.id && !restMenuData[symbolMenuI18nNamespace]) {
@@ -9300,9 +9302,9 @@ function getDefaultProperties(_name, fields) {
9300
9302
  return defaultValue;
9301
9303
  } else return {};
9302
9304
  }
9303
- function getStoryboard(datasource, result, fields, isPreview, formContextId) {
9305
+ function getStoryboard(dataSource, result, fields, isPreview, formContextId) {
9304
9306
  var _loop = function (i) {
9305
- var dataItem = datasource[i];
9307
+ var dataItem = dataSource[i];
9306
9308
  var resultItem = {};
9307
9309
  //数据初始化:根据id,字段类型获取默认属性
9308
9310
  var defaultProperties = getDefaultProperties(dataItem.id, fields);
@@ -9350,7 +9352,7 @@ function getStoryboard(datasource, result, fields, isPreview, formContextId) {
9350
9352
  });
9351
9353
  result[i] = resultItem;
9352
9354
  };
9353
- for (var i = 0; i < datasource.length; i++) {
9355
+ for (var i = 0; i < dataSource.length; i++) {
9354
9356
  _loop(i);
9355
9357
  }
9356
9358
  return result;
@@ -11515,8 +11517,7 @@ function useLocation() {
11515
11517
  return location;
11516
11518
  }
11517
11519
 
11518
- var expandTemplateInUseBrick = (useBrick, tplTagName, brick) => {
11519
- var template;
11520
+ function expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense) {
11520
11521
  if (tplTagName) {
11521
11522
  // 如果是模板, 需要展开解析模板, 并遍历模板中的slots, 再给slots的brick绑定值给自身
11522
11523
  // 为后续ProxyRefs获取brick做值缓存
@@ -11527,12 +11528,11 @@ var expandTemplateInUseBrick = (useBrick, tplTagName, brick) => {
11527
11528
  lifeCycle: useBrick.lifeCycle,
11528
11529
  slots: useBrick.slots
11529
11530
  };
11530
- template = expandCustomTemplate(tplConf, brick, _internalApiGetCurrentContext());
11531
+ return (requireSuspense ? asyncExpandCustomTemplate : expandCustomTemplate)(tplConf, brick, _internalApiGetCurrentContext());
11531
11532
  } else if (useBrick[symbolForRefForProxy]) {
11532
11533
  useBrick[symbolForRefForProxy].brick = brick;
11533
11534
  }
11534
- return template;
11535
- };
11535
+ }
11536
11536
  var getCurrentRunTimeBrick = (useBrick, tplTagName, data) => {
11537
11537
  var trackingContextList = [];
11538
11538
  var tplContextId = useBrick[symbolForTplContextId];
@@ -11574,7 +11574,7 @@ var getCurrentRunTimeBrick = (useBrick, tplTagName, data) => {
11574
11574
  * @param props - 属性。
11575
11575
  */
11576
11576
  var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsComponent(_ref) {
11577
- var _internalApiGetCurren, _templateRef$current$, _templateRef$current2;
11577
+ var _internalApiGetCurren, _brick, _ref8;
11578
11578
  var {
11579
11579
  useBrick,
11580
11580
  data,
@@ -11584,10 +11584,10 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11584
11584
  var firstRunRef = useRef(true);
11585
11585
  var innerRefCallbackRef = useRef();
11586
11586
  var elementRef = useRef();
11587
- var templateRef = useRef();
11588
- var formRef = useRef();
11587
+ var expandedBrickConfRef = useRef();
11588
+ var [expandedBrickConf, setExpandedBrickConf] = useState(null);
11589
11589
  var tplTagName = getTagNameOfCustomTemplate(useBrick.brick, (_internalApiGetCurren = _internalApiGetCurrentContext().app) === null || _internalApiGetCurren === void 0 ? void 0 : _internalApiGetCurren.id);
11590
- var isBrickAvailable = React.useMemo(() => {
11590
+ var isBrickAvailable = useMemo(() => {
11591
11591
  if (isObject(useBrick.if) && !isPreEvaluated(useBrick.if)) {
11592
11592
  // eslint-disable-next-line
11593
11593
  console.warn("Currently resolvable-if in `useBrick` is not supported.");
@@ -11600,7 +11600,17 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11600
11600
  }
11601
11601
  return true;
11602
11602
  }, [useBrick, data]);
11603
- var runtimeBrick = React.useMemo( /*#__PURE__*/_asyncToGenerator$3(function* () {
11603
+ var requireSuspense = useMemo(() => {
11604
+ var context;
11605
+ if (useBrick.brick === formRenderer) {
11606
+ context = useBrick.properties.formData.context;
11607
+ } else if (tplTagName) {
11608
+ context = customTemplateRegistry.get(tplTagName).state;
11609
+ }
11610
+ return Array.isArray(context) && context.some(ctx => !!ctx.resolve);
11611
+ }, [tplTagName, useBrick]);
11612
+ var [suspenseReady, setSuspenseReady] = useState(false);
11613
+ var runtimeBrick = useMemo( /*#__PURE__*/_asyncToGenerator$3(function* () {
11604
11614
  if (!isBrickAvailable) {
11605
11615
  return null;
11606
11616
  }
@@ -11611,11 +11621,14 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11611
11621
  }
11612
11622
  _internalApiLoadDynamicBricksInBrickConf(useBrick).catch(handleHttpError);
11613
11623
  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);
11624
+ var expanded = useBrick.brick === formRenderer ? (requireSuspense ? AsyncExpandCustomForm : ExpandCustomForm)(useBrick.properties.formData, useBrick, false) : expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense);
11625
+ if (requireSuspense) {
11626
+ setExpandedBrickConf(yield expanded);
11627
+ setSuspenseReady(true);
11628
+ } else {
11629
+ expandedBrickConfRef.current = expanded;
11618
11630
  }
11631
+
11619
11632
  // Let `transform` works still.
11620
11633
  transformProperties(brick.properties, data, useBrick.transform, useBrick.transformFrom, undefined, {
11621
11634
  allowInject: true
@@ -11638,7 +11651,7 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11638
11651
  }));
11639
11652
  }
11640
11653
  return brick;
11641
- }), [useBrick, data, isBrickAvailable, tplTagName]);
11654
+ }), [useBrick, data, isBrickAvailable, tplTagName, requireSuspense]);
11642
11655
  var dispatchLifeCycleEvent = /*#__PURE__*/function () {
11643
11656
  var _ref4 = _asyncToGenerator$3(function* (event, handlers, brick) {
11644
11657
  for (var handler of [].concat(handlers)) {
@@ -11735,13 +11748,13 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11735
11748
  innerRefCallbackRef.current(element);
11736
11749
  }, []);
11737
11750
  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) {
11751
+ var _ref7;
11752
+ return slotsToChildren(((_ref7 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) !== null && _ref7 !== void 0 ? _ref7 : useBrick).slots);
11753
+ }, [expandedBrickConf, expandedBrickConfRef.current, useBrick, requireSuspense]);
11754
+ if (!isBrickAvailable || requireSuspense && !suspenseReady) {
11742
11755
  return null;
11743
11756
  }
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, {
11757
+ 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
11758
  ref: innerRefCallback
11746
11759
  }, ...childConfs.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11747
11760
  key: index,
@@ -11768,11 +11781,11 @@ var SingleBrickAsComponent = /*#__PURE__*/React.memo(function SingleBrickAsCompo
11768
11781
  *
11769
11782
  * @param props - 属性。
11770
11783
  */
11771
- function BrickAsComponent(_ref8) {
11784
+ function BrickAsComponent(_ref9) {
11772
11785
  var {
11773
11786
  useBrick,
11774
11787
  data
11775
- } = _ref8;
11788
+ } = _ref9;
11776
11789
  if (Array.isArray(useBrick)) {
11777
11790
  return /*#__PURE__*/React.createElement(React.Fragment, null, useBrick.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11778
11791
  key: index,
@@ -11789,8 +11802,8 @@ function slotsToChildren(slots) {
11789
11802
  if (!slots) {
11790
11803
  return [];
11791
11804
  }
11792
- return Object.entries(slots).flatMap(_ref9 => {
11793
- var [slot, slotConf] = _ref9;
11805
+ return Object.entries(slots).flatMap(_ref10 => {
11806
+ var [slot, slotConf] = _ref10;
11794
11807
  return Array.isArray(slotConf.bricks) ? slotConf.bricks.map(child => _objectSpread(_objectSpread({}, child), {}, {
11795
11808
  properties: _objectSpread(_objectSpread({}, child.properties), {}, {
11796
11809
  slot
@@ -11808,19 +11821,19 @@ function transformEvents(data, events) {
11808
11821
 
11809
11822
  /* istanbul ignore next */
11810
11823
  // 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;
11824
+ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/forwardRef(function LegacySingleBrickAsComponent(_ref11, ref) {
11825
+ var _internalApiGetCurren2, _brick2, _ref18;
11813
11826
  var {
11814
11827
  useBrick,
11815
11828
  data,
11816
11829
  refCallback
11817
- } = _ref10;
11830
+ } = _ref11;
11818
11831
  var firstRunRef = useRef(true);
11819
11832
  var innerRefCallbackRef = useRef();
11820
11833
  var elementRef = useRef();
11821
- var templateRef = useRef();
11834
+ var expandedBrickConfRef = useRef();
11835
+ var [expandedBrickConf, setExpandedBrickConf] = useState(null);
11822
11836
  var tplTagName = getTagNameOfCustomTemplate(useBrick.brick, (_internalApiGetCurren2 = _internalApiGetCurrentContext().app) === null || _internalApiGetCurren2 === void 0 ? void 0 : _internalApiGetCurren2.id);
11823
- var formRef = useRef();
11824
11837
  var isBrickAvailable = React.useMemo(() => {
11825
11838
  if (isObject(useBrick.if) && !isPreEvaluated(useBrick.if)) {
11826
11839
  // eslint-disable-next-line
@@ -11834,6 +11847,16 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11834
11847
  }
11835
11848
  return true;
11836
11849
  }, [useBrick, data]);
11850
+ var requireSuspense = useMemo(() => {
11851
+ var context;
11852
+ if (useBrick.brick === formRenderer) {
11853
+ context = useBrick.properties.formData.context;
11854
+ } else if (tplTagName) {
11855
+ context = customTemplateRegistry.get(tplTagName).state;
11856
+ }
11857
+ return Array.isArray(context) && context.some(ctx => !!ctx.resolve);
11858
+ }, [tplTagName, useBrick]);
11859
+ var [suspenseReady, setSuspenseReady] = useState(false);
11837
11860
 
11838
11861
  /* istanbul ignore next (never reach in test) */
11839
11862
  useImperativeHandle(ref, () => {
@@ -11850,10 +11873,12 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11850
11873
  }
11851
11874
  _internalApiLoadDynamicBricksInBrickConf(useBrick).catch(handleHttpError);
11852
11875
  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);
11876
+ var expanded = useBrick.brick === formRenderer ? (requireSuspense ? AsyncExpandCustomForm : ExpandCustomForm)(useBrick.properties.formData, useBrick, false) : expandTemplateInUseBrick(useBrick, tplTagName, brick, requireSuspense);
11877
+ if (requireSuspense) {
11878
+ setExpandedBrickConf(yield expanded);
11879
+ setSuspenseReady(true);
11880
+ } else {
11881
+ expandedBrickConfRef.current = expanded;
11857
11882
  }
11858
11883
 
11859
11884
  // Let `transform` works still.
@@ -11863,8 +11888,8 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11863
11888
 
11864
11889
  // 设置 properties refProperty值
11865
11890
  if (useBrick[symbolForComputedPropsFromProxy]) {
11866
- Object.entries(useBrick[symbolForComputedPropsFromProxy]).forEach(_ref12 => {
11867
- var [propName, propValue] = _ref12;
11891
+ Object.entries(useBrick[symbolForComputedPropsFromProxy]).forEach(_ref13 => {
11892
+ var [propName, propValue] = _ref13;
11868
11893
  set(brick.properties, propName, propValue);
11869
11894
  });
11870
11895
  }
@@ -11878,9 +11903,9 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11878
11903
  }));
11879
11904
  }
11880
11905
  return brick;
11881
- }), [useBrick, data, isBrickAvailable, tplTagName]);
11906
+ }), [useBrick, data, isBrickAvailable, tplTagName, requireSuspense]);
11882
11907
  var dispatchLifeCycleEvent = /*#__PURE__*/function () {
11883
- var _ref13 = _asyncToGenerator$3(function* (event, handlers, brick) {
11908
+ var _ref14 = _asyncToGenerator$3(function* (event, handlers, brick) {
11884
11909
  for (var handler of [].concat(handlers)) {
11885
11910
  listenerFactory(handler, _objectSpread(_objectSpread({}, _internalApiGetCurrentContext()), {}, {
11886
11911
  tplContextId: useBrick[symbolForTplContextId]
@@ -11888,7 +11913,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11888
11913
  }
11889
11914
  });
11890
11915
  return function dispatchLifeCycleEvent(_x5, _x6, _x7) {
11891
- return _ref13.apply(this, arguments);
11916
+ return _ref14.apply(this, arguments);
11892
11917
  };
11893
11918
  }();
11894
11919
  var updateBrick = useCallback((brick, element) => {
@@ -11939,7 +11964,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11939
11964
  })();
11940
11965
  }, [runtimeBrick, updateBrick]);
11941
11966
  innerRefCallbackRef.current = /*#__PURE__*/function () {
11942
- var _ref15 = _asyncToGenerator$3(function* (element) {
11967
+ var _ref16 = _asyncToGenerator$3(function* (element) {
11943
11968
  elementRef.current = element;
11944
11969
  var brick;
11945
11970
  try {
@@ -11965,7 +11990,7 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11965
11990
  refCallback === null || refCallback === void 0 ? void 0 : refCallback(element);
11966
11991
  });
11967
11992
  return function (_x8) {
11968
- return _ref15.apply(this, arguments);
11993
+ return _ref16.apply(this, arguments);
11969
11994
  };
11970
11995
  }();
11971
11996
 
@@ -11974,13 +11999,13 @@ var ForwardRefSingleBrickAsComponent = /*#__PURE__*/React.memo( /*#__PURE__*/for
11974
11999
  innerRefCallbackRef.current(element);
11975
12000
  }, []);
11976
12001
  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) {
12002
+ var _ref17;
12003
+ return slotsToChildren(((_ref17 = requireSuspense ? expandedBrickConf : expandedBrickConfRef.current) !== null && _ref17 !== void 0 ? _ref17 : useBrick).slots);
12004
+ }, [expandedBrickConf, expandedBrickConfRef.current, useBrick, requireSuspense]);
12005
+ if (!isBrickAvailable || requireSuspense && !suspenseReady) {
11981
12006
  return null;
11982
12007
  }
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, {
12008
+ 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
12009
  ref: innerRefCallback
11985
12010
  }, ...childConfs.map((item, index) => /*#__PURE__*/React.createElement(SingleBrickAsComponent, {
11986
12011
  key: index,