@next-core/brick-kit 2.181.1 → 2.182.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.
@@ -1932,7 +1932,7 @@
1932
1932
  return;
1933
1933
  }
1934
1934
  updateValue(name, value, method, callback) {
1935
- var _item$eventTarget2;
1935
+ var _item$eventTarget;
1936
1936
  if (!this.data.has(name)) {
1937
1937
  if (this.tplContextId) {
1938
1938
  throw new Error("State not found: ".concat(name));
@@ -1953,8 +1953,8 @@
1953
1953
  return;
1954
1954
  }
1955
1955
  if (method === "refresh" || method === "load") {
1956
- if (!item.load) {
1957
- throw new Error("You can not ".concat(method, " the storyboard context \"").concat(name, "\" which has no resolve."));
1956
+ if (!item.useResolve) {
1957
+ throw new Error("You can not ".concat(method, " the storyboard context \"").concat(name, "\" which is not using resolve."));
1958
1958
  }
1959
1959
  var promise;
1960
1960
  if (method === "load") {
@@ -1978,12 +1978,7 @@
1978
1978
  }, value));
1979
1979
  // Do not use the chained promise, since the callbacks need the original promise.
1980
1980
  promise.then(val => {
1981
- var _item$eventTarget;
1982
- item.loaded = true;
1983
- item.value = val;
1984
- (_item$eventTarget = item.eventTarget) === null || _item$eventTarget === void 0 ? void 0 : _item$eventTarget.dispatchEvent(new CustomEvent(this.eventName, {
1985
- detail: item.value
1986
- }));
1981
+ this.finishLoad(item, val);
1987
1982
  }, err => {
1988
1983
  // Let users to override error handling.
1989
1984
  if (!shouldDismiss(err) && !(callback !== null && callback !== void 0 && callback.error)) {
@@ -2019,10 +2014,24 @@
2019
2014
  }
2020
2015
  }
2021
2016
  if (this.batchUpdate) return;
2022
- (_item$eventTarget2 = item.eventTarget) === null || _item$eventTarget2 === void 0 ? void 0 : _item$eventTarget2.dispatchEvent(new CustomEvent(this.eventName, {
2017
+ (_item$eventTarget = item.eventTarget) === null || _item$eventTarget === void 0 ? void 0 : _item$eventTarget.dispatchEvent(new CustomEvent(this.eventName, {
2023
2018
  detail: item.value
2024
2019
  }));
2025
2020
  }
2021
+ finishLoad(item, value) {
2022
+ var _item$eventTarget2;
2023
+ if (!item.useResolve) {
2024
+ // This happens when a tracked conditional resolve switches from
2025
+ // resolve to fallback after an dep update triggered refresh but
2026
+ // before it's been resolved.
2027
+ return;
2028
+ }
2029
+ item.loaded = true;
2030
+ item.value = value;
2031
+ (_item$eventTarget2 = item.eventTarget) === null || _item$eventTarget2 === void 0 ? void 0 : _item$eventTarget2.dispatchEvent(new CustomEvent(this.eventName, {
2032
+ detail: value
2033
+ }));
2034
+ }
2026
2035
  waitForUsedContext(data) {
2027
2036
  var _this = this;
2028
2037
  return _asyncToGenerator__default["default"](function* () {
@@ -2065,11 +2074,7 @@
2065
2074
  // An async data always has `loading`
2066
2075
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2067
2076
  item.loading.then(value => {
2068
- item.loaded = true;
2069
- item.value = value;
2070
- item.eventTarget.dispatchEvent(new CustomEvent(this.eventName, {
2071
- detail: value
2072
- }));
2077
+ this.finishLoad(item, value);
2073
2078
  });
2074
2079
  }
2075
2080
  });
@@ -2158,14 +2163,24 @@
2158
2163
  return false;
2159
2164
  }
2160
2165
  var isTemplateState = !!storyboardContextWrapper.tplContextId;
2166
+ var isFormState = !!storyboardContextWrapper.formContextId;
2161
2167
  var value = getDefinedTemplateState(isTemplateState, contextConf, brick);
2162
2168
  var load = null;
2163
2169
  var loading;
2164
- var resolvePolicy = "eager";
2170
+ var useResolve;
2171
+ var trackConditionalResolve;
2172
+ var resolvePolicy;
2165
2173
  if (value === undefined) {
2166
2174
  if (contextConf.resolve) {
2175
+ var hasFallbackValue = brickUtils.hasOwnProperty(contextConf, "value");
2176
+ // Track conditional resolve only if all matches:
2177
+ // - Track enabled
2178
+ // - Has fallback value
2179
+ // - Referencing other data in `resolve.if`
2180
+ trackConditionalResolve = contextConf.track && hasFallbackValue && brickUtils.hasOwnProperty(contextConf.resolve, "if") && brickUtils.collectContextUsage(contextConf.resolve.if, isTemplateState ? "STATE" : isFormState ? "FORM_STATE" : "CTX").usedContexts.length > 0;
2167
2181
  yield storyboardContextWrapper.waitForUsedContext(contextConf.resolve.if);
2168
- if (looseCheckIf$1(contextConf.resolve, mergedContext)) {
2182
+ useResolve = looseCheckIf$1(contextConf.resolve, mergedContext);
2183
+ if (useResolve || trackConditionalResolve) {
2169
2184
  load = /*#__PURE__*/function () {
2170
2185
  var _ref = _asyncToGenerator__default["default"](function* (options) {
2171
2186
  var valueConf = {};
@@ -2179,6 +2194,8 @@
2179
2194
  return _ref.apply(this, arguments);
2180
2195
  };
2181
2196
  }();
2197
+ }
2198
+ if (useResolve) {
2182
2199
  // `async` take precedence over `lazy`
2183
2200
  resolvePolicy = contextConf.resolve.async && !isTemplateState ? "async" : contextConf.resolve.lazy ? "lazy" : "eager";
2184
2201
  if (resolvePolicy === "eager") {
@@ -2200,18 +2217,18 @@
2200
2217
  console.error("unsupported lifecycle: \"".concat(lifecycleName, "\""));
2201
2218
  }
2202
2219
  }
2203
- } else if (!brickUtils.hasOwnProperty(contextConf, "value")) {
2220
+ } else if (!hasFallbackValue) {
2204
2221
  return false;
2205
2222
  }
2206
2223
  }
2207
- if ((!load || resolvePolicy !== "eager") && contextConf.value !== undefined) {
2224
+ if ((!useResolve || resolvePolicy !== "eager") && contextConf.value !== undefined) {
2208
2225
  yield storyboardContextWrapper.waitForUsedContext(contextConf.value);
2209
2226
  // If the context has no resolve, just use its `value`.
2210
2227
  // Or if the resolve is ignored or lazy, use its `value` as a fallback.
2211
2228
  value = computeRealValue(contextConf.value, mergedContext, true);
2212
2229
  }
2213
2230
  }
2214
- resolveFreeVariableValue(value, contextConf, mergedContext, storyboardContextWrapper, brick, load, resolvePolicy === "eager", loading, resolvePolicy === "async");
2231
+ resolveFreeVariableValue(value, contextConf, mergedContext, storyboardContextWrapper, brick, load, resolvePolicy === "eager", loading, resolvePolicy === "async", useResolve, trackConditionalResolve);
2215
2232
  return true;
2216
2233
  });
2217
2234
  return _resolveNormalStoryboardContext.apply(this, arguments);
@@ -2235,12 +2252,13 @@
2235
2252
  return brick.properties[contextConf.name];
2236
2253
  }
2237
2254
  }
2238
- function resolveFreeVariableValue(value, contextConf, mergedContext, storyboardContextWrapper, brick, load, loaded, loading, async) {
2255
+ function resolveFreeVariableValue(value, contextConf, mergedContext, storyboardContextWrapper, brick, load, loaded, loading, async, useResolve, trackConditionalResolve) {
2239
2256
  var newContext = {
2240
2257
  type: "free-variable",
2241
2258
  value,
2242
2259
  // This is required for tracking context, even if no `onChange` is specified.
2243
2260
  eventTarget: new EventTarget$1(),
2261
+ useResolve,
2244
2262
  load,
2245
2263
  loaded,
2246
2264
  loading,
@@ -2260,13 +2278,14 @@
2260
2278
  var isTemplateState = !!storyboardContextWrapper.tplContextId;
2261
2279
  var isFormState = !!storyboardContextWrapper.formContextId;
2262
2280
  // Track its dependencies and auto update when each of them changed.
2263
- var deps = (isFormState ? brickUtils.trackUsedFormState : isTemplateState ? brickUtils.trackUsedState : brickUtils.trackUsedContext)(load ? contextConf.resolve : contextConf.value);
2281
+ var deps = (isFormState ? brickUtils.trackUsedFormState : isTemplateState ? brickUtils.trackUsedState : brickUtils.trackUsedContext)(trackConditionalResolve ? [contextConf.resolve, contextConf.value] : load ? contextConf.resolve : contextConf.value);
2264
2282
  !load && (newContext.deps = deps);
2265
2283
  for (var dep of deps) {
2266
2284
  var _eventTarget;
2267
2285
  var ctx = storyboardContextWrapper.get().get(dep);
2268
2286
  ctx === null || ctx === void 0 ? void 0 : (_eventTarget = ctx.eventTarget) === null || _eventTarget === void 0 ? void 0 : _eventTarget.addEventListener(eventName, batchAddListener(() => {
2269
- if (load) {
2287
+ newContext.useResolve = trackConditionalResolve ? looseCheckIf$1(contextConf.resolve, mergedContext) : !!load;
2288
+ if (newContext.useResolve) {
2270
2289
  storyboardContextWrapper.updateValue(contextConf.name, {
2271
2290
  cache: "default"
2272
2291
  }, "refresh");
@@ -2593,15 +2612,9 @@
2593
2612
  }
2594
2613
  });
2595
2614
  case "QUERY":
2596
- {
2597
- var params = options.useRealTimeQuery ? new URLSearchParams(getHistory().location.search) : query;
2598
- return Object.fromEntries(Array.from(params.keys()).map(key => [key, params.get(key)]));
2599
- }
2615
+ return Object.fromEntries(Array.from(query.keys()).map(key => [key, query.get(key)]));
2600
2616
  case "QUERY_ARRAY":
2601
- {
2602
- var _params = options.useRealTimeQuery ? new URLSearchParams(getHistory().location.search) : query;
2603
- return Object.fromEntries(Array.from(_params.keys()).map(key => [key, _params.getAll(key)]));
2604
- }
2617
+ return Object.fromEntries(Array.from(query.keys()).map(key => [key, query.getAll(key)]));
2605
2618
  case "SEGUE":
2606
2619
  return {
2607
2620
  getUrl: getUrlBySegueFactory(app, segues)
@@ -14802,12 +14815,14 @@
14802
14815
  var {
14803
14816
  useRealTimeQuery
14804
14817
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14805
- var compute = (data, ctx) => {
14818
+ var ctx = _objectSpread__default["default"]({}, _internalApiGetCurrentContext());
14819
+ if (useRealTimeQuery) {
14820
+ ctx.query = new URLSearchParams(getHistory().location.search);
14821
+ }
14822
+ var compute = data => {
14806
14823
  if (typeof data === "string") {
14807
14824
  if (brickUtils.isEvaluable(data)) {
14808
- var result = evaluate(data, undefined, {
14809
- useRealTimeQuery
14810
- });
14825
+ var result = evaluate(data, ctx);
14811
14826
  recursiveMarkAsInjected(result);
14812
14827
  return result;
14813
14828
  }
@@ -14817,14 +14832,14 @@
14817
14832
  return data;
14818
14833
  }
14819
14834
  if (Array.isArray(data)) {
14820
- return data.map(v => compute(v, ctx));
14835
+ return data.map(v => compute(v));
14821
14836
  }
14822
14837
  return Object.fromEntries(Object.entries(data).map(_ref => {
14823
14838
  var [k, v] = _ref;
14824
- return [compute(k, ctx), compute(v, ctx)];
14839
+ return [compute(k), compute(v)];
14825
14840
  }));
14826
14841
  };
14827
- return compute(value, _internalApiGetCurrentContext());
14842
+ return compute(value);
14828
14843
  }
14829
14844
 
14830
14845
  function constructEventListener(handler) {