@salesforce/lds-runtime-aura 1.273.0 → 1.274.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.
@@ -15,7 +15,7 @@
15
15
  import { HttpStatusCode, InMemoryStore, Environment, Luvio, InMemoryStoreQueryEvaluator } from 'force/luvioEngine';
16
16
  import ldsTrackedFieldsBehaviorGate from '@salesforce/gate/lds.useNewTrackedFieldBehavior';
17
17
  import usePredictiveLoading from '@salesforce/gate/lds.usePredictiveLoading';
18
- import { getRecordAvatarsAdapterFactory, getRecordAdapterFactory, getRecordsAdapterFactory, getRecordActionsAdapterFactory, getObjectInfoAdapterFactory, getObjectInfosAdapterFactory, getRelatedListsActionsAdapterFactory, instrument, configuration, InMemoryRecordRepresentationQueryEvaluator, UiApiNamespace, RecordRepresentationRepresentationType, registerPrefetcher } from 'force/ldsAdaptersUiapi';
18
+ import { getRecordAvatarsAdapterFactory, getRecordAdapterFactory, getRecordsAdapterFactory, getRecordActionsAdapterFactory, getObjectInfoAdapterFactory, getObjectInfosAdapterFactory, getRelatedListsActionsAdapterFactory, getRelatedListInfoBatchAdapterFactory, getRelatedListRecordsAdapterFactory, getRelatedListRecordsBatchAdapterFactory, instrument, configuration, InMemoryRecordRepresentationQueryEvaluator, UiApiNamespace, RecordRepresentationRepresentationType, registerPrefetcher } from 'force/ldsAdaptersUiapi';
19
19
  import { createStorage, clearStorages } from 'force/ldsStorage';
20
20
  import { withRegistration, register, setDefaultLuvio } from 'force/ldsEngine';
21
21
  import { REFRESH_ADAPTER_EVENT, ADAPTER_UNFULFILLED_ERROR, instrument as instrument$2 } from 'force/ldsBindings';
@@ -61,70 +61,25 @@ class RecordHomePage extends PredictivePrefetchPage {
61
61
  const { adapterName } = request;
62
62
  switch (adapterName) {
63
63
  case 'getRecord':
64
- return this.buildGetRecordSaveRequestData(request);
64
+ return this.requestStrategies.getRecord.buildSaveRequestData(this.similarContext, this.context, request);
65
65
  case 'getRecords':
66
- return this.buildGetRecordsSaveRequestData(request);
66
+ return this.requestStrategies.getRecords.buildSaveRequestData(this.similarContext, this.context, request);
67
67
  case 'getRecordActions':
68
- return this.requestStrategies.getRecordActions.buildGetRecordActionsSaveRequestData(this.similarContext, this.context, request);
68
+ return this.requestStrategies.getRecordActions.buildSaveRequestData(this.similarContext, this.context, request);
69
69
  case 'getRecordAvatars':
70
- return this.requestStrategies.getRecordAvatars.buildGetRecordAvatarsSaveRequestData(this.similarContext, this.context, request);
70
+ return this.requestStrategies.getRecordAvatars.buildSaveRequestData(this.similarContext, this.context, request);
71
71
  case 'getObjectInfo':
72
- return this.requestStrategies.getObjectInfo.buildGetObjectInfoSaveRequestData(this.similarContext, this.context, request);
72
+ return this.requestStrategies.getObjectInfo.buildSaveRequestData(this.similarContext, this.context, request);
73
73
  case 'getRelatedListsActions':
74
- return this.requestStrategies.getRelatedListsActions.buildGetRelatedListsActionsSaveRequestData(this.similarContext, this.context, request);
74
+ return this.requestStrategies.getRelatedListsActions.buildSaveRequestData(this.similarContext, this.context, request);
75
+ case 'getRelatedListRecords':
76
+ return this.requestStrategies.getRelatedListRecords.buildSaveRequestData(this.similarContext, this.context, request);
77
+ case 'getRelatedListRecordsBatch':
78
+ return this.requestStrategies.getRelatedListRecordsBatch.buildSaveRequestData(this.similarContext, this.context, request);
75
79
  default:
76
80
  return { request, context: this.context };
77
81
  }
78
82
  }
79
- buildGetRecordSaveRequestData(request) {
80
- if (this.isGetRecordRequestContextDependent(request)) {
81
- return {
82
- request: this.requestStrategies.getRecord.transformForSave({
83
- ...request,
84
- config: {
85
- ...request.config,
86
- recordId: '*',
87
- },
88
- }),
89
- context: this.similarContext,
90
- };
91
- }
92
- return {
93
- request: this.requestStrategies.getRecord.transformForSave(request),
94
- context: this.context,
95
- };
96
- }
97
- buildGetRecordsSaveRequestData(request) {
98
- if (this.isGetRecordsRequestContextDependent(request)) {
99
- return {
100
- request: this.requestStrategies.getRecords.transformForSave({
101
- ...request,
102
- config: {
103
- ...request.config,
104
- records: [
105
- {
106
- ...request.config.records[0],
107
- recordIds: ['*'],
108
- },
109
- ],
110
- },
111
- }),
112
- context: this.similarContext,
113
- };
114
- }
115
- return {
116
- request: this.requestStrategies.getRecords.transformForSave(request),
117
- context: this.context,
118
- };
119
- }
120
- isGetRecordRequestContextDependent(request) {
121
- return request.config.recordId === this.context.recordId;
122
- }
123
- isGetRecordsRequestContextDependent(request) {
124
- const isSingleRecordRequest = request.config.records.length === 1 && request.config.records[0].recordIds.length === 1;
125
- return (isSingleRecordRequest &&
126
- request.config.records[0].recordIds[0] === this.context.recordId);
127
- }
128
83
  resolveSimilarRequest(similarRequest) {
129
84
  if (similarRequest.adapterName === 'getRecord') {
130
85
  return this.requestStrategies.getRecord.buildConcreteRequest(similarRequest, this.context);
@@ -147,6 +102,12 @@ class RecordHomePage extends PredictivePrefetchPage {
147
102
  if (similarRequest.adapterName === 'getRelatedListsActions') {
148
103
  return this.requestStrategies.getRelatedListsActions.buildConcreteRequest(similarRequest, this.context);
149
104
  }
105
+ if (similarRequest.adapterName === 'getRelatedListRecords') {
106
+ return this.requestStrategies.getRelatedListRecords.buildConcreteRequest(similarRequest, this.context);
107
+ }
108
+ if (similarRequest.adapterName === 'getRelatedListRecordsBatch') {
109
+ return this.requestStrategies.getRelatedListRecordsBatch.buildConcreteRequest(similarRequest, this.context);
110
+ }
150
111
  return similarRequest;
151
112
  }
152
113
  // Record Home performs best when we always do a minimal getRecord alongside the other requests.
@@ -407,12 +368,33 @@ class RequestStrategy {
407
368
  }
408
369
 
409
370
  class LuvioAdapterRequestStrategy extends RequestStrategy {
371
+ /**
372
+ * Perform any transformations required to prepare the request for saving.
373
+ *
374
+ * e.g. If the request is for a record, we move all fields in the fields array
375
+ * into the optionalFields array
376
+ *
377
+ * @param request - The request to transform
378
+ * @returns
379
+ */
410
380
  transformForSave(request) {
411
381
  return request;
412
382
  }
383
+ /**
384
+ * Filter requests to only those that are for this strategy.
385
+ *
386
+ * @param unfilteredRequests array of requests to filter
387
+ * @returns
388
+ */
413
389
  filterRequests(unfilteredRequests) {
414
390
  return unfilteredRequests.filter((request) => request.adapterName === this.adapterName);
415
391
  }
392
+ /**
393
+ * Reduce requests by combining those based on a strategies implementations
394
+ * of canCombine and combineRequests.
395
+ * @param unfilteredRequests array of requests to filter
396
+ * @returns
397
+ */
416
398
  reduce(unfilteredRequests) {
417
399
  const requests = this.filterRequests(unfilteredRequests);
418
400
  const visitedRequests = new Set();
@@ -435,10 +417,24 @@ class LuvioAdapterRequestStrategy extends RequestStrategy {
435
417
  }
436
418
  return reducedRequests;
437
419
  }
420
+ /**
421
+ * Check if two requests can be combined.
422
+ *
423
+ * By default, requests are not combinable.
424
+ * @param reqA config of request A
425
+ * @param reqB config of request B
426
+ * @returns
427
+ */
438
428
  canCombine(_reqA, _reqB) {
439
- // By default, all requests are not comibinable
440
429
  return false;
441
430
  }
431
+ /**
432
+ * Takes two request configs and combines them into a single request config.
433
+ *
434
+ * @param reqA config of request A
435
+ * @param reqB config of request B
436
+ * @returns
437
+ */
442
438
  combineRequests(reqA, _reqB) {
443
439
  // By default, this should never be called since requests aren't combinable
444
440
  if (process.env.NODE_ENV !== 'production') {
@@ -446,6 +442,31 @@ class LuvioAdapterRequestStrategy extends RequestStrategy {
446
442
  }
447
443
  return reqA;
448
444
  }
445
+ /**
446
+ * Checks adapter config against request context to determine if the request is context dependent.
447
+ *
448
+ * By default, requests are not context dependent.
449
+ * @param request
450
+ * @returns
451
+ */
452
+ isContextDependent(_context, _request) {
453
+ return false;
454
+ }
455
+ /**
456
+ * Builds request for saving,
457
+ * - transforming the request
458
+ * - handling the cases where the request is context dependent (this is homework for the subclass)
459
+ * @param _similarContext Context with at least one parameter as a wildcard '*'
460
+ * @param context Exact context for a given page
461
+ * @param request
462
+ * @returns
463
+ */
464
+ buildSaveRequestData(_similarContext, context, request) {
465
+ return {
466
+ request: this.transformForSave(request),
467
+ context,
468
+ };
469
+ }
449
470
  }
450
471
 
451
472
  function normalizeRecordIds$1(recordIds) {
@@ -469,8 +490,8 @@ class GetRecordAvatarsRequestStrategy extends LuvioAdapterRequestStrategy {
469
490
  },
470
491
  };
471
492
  }
472
- buildGetRecordAvatarsSaveRequestData(similarContext, context, request) {
473
- if (this.isGetRecordAvatarsRequestContextDependent(context, request)) {
493
+ buildSaveRequestData(similarContext, context, request) {
494
+ if (this.isContextDependent(context, request)) {
474
495
  return {
475
496
  request: this.transformForSave({
476
497
  ...request,
@@ -487,7 +508,7 @@ class GetRecordAvatarsRequestStrategy extends LuvioAdapterRequestStrategy {
487
508
  context,
488
509
  };
489
510
  }
490
- isGetRecordAvatarsRequestContextDependent(context, request) {
511
+ isContextDependent(context, request) {
491
512
  return (request.config.recordIds &&
492
513
  (context.recordId === request.config.recordIds || // some may set this as string instead of array
493
514
  (request.config.recordIds.length === 1 &&
@@ -563,6 +584,27 @@ class GetRecordRequestStrategy extends LuvioAdapterRequestStrategy {
563
584
  optionalFields: Array.from(optionalFields),
564
585
  };
565
586
  }
587
+ isContextDependent(context, request) {
588
+ return request.config.recordId === context.recordId;
589
+ }
590
+ buildSaveRequestData(similarContext, context, request) {
591
+ if (this.isContextDependent(context, request)) {
592
+ return {
593
+ request: this.transformForSave({
594
+ ...request,
595
+ config: {
596
+ ...request.config,
597
+ recordId: '*',
598
+ },
599
+ }),
600
+ context: similarContext,
601
+ };
602
+ }
603
+ return {
604
+ request: this.transformForSave(request),
605
+ context,
606
+ };
607
+ }
566
608
  }
567
609
 
568
610
  class GetRecordsRequestStrategy extends LuvioAdapterRequestStrategy {
@@ -580,6 +622,33 @@ class GetRecordsRequestStrategy extends LuvioAdapterRequestStrategy {
580
622
  },
581
623
  };
582
624
  }
625
+ isContextDependent(context, request) {
626
+ const isSingleRecordRequest = request.config.records.length === 1 && request.config.records[0].recordIds.length === 1;
627
+ return isSingleRecordRequest && request.config.records[0].recordIds[0] === context.recordId;
628
+ }
629
+ buildSaveRequestData(similarContext, context, request) {
630
+ if (this.isContextDependent(context, request)) {
631
+ return {
632
+ request: this.transformForSave({
633
+ ...request,
634
+ config: {
635
+ ...request.config,
636
+ records: [
637
+ {
638
+ ...request.config.records[0],
639
+ recordIds: ['*'],
640
+ },
641
+ ],
642
+ },
643
+ }),
644
+ context: similarContext,
645
+ };
646
+ }
647
+ return {
648
+ request: this.transformForSave(request),
649
+ context: context,
650
+ };
651
+ }
583
652
  }
584
653
 
585
654
  function normalizeRecordIds(recordIds) {
@@ -603,8 +672,8 @@ class GetRecordActionsRequestStrategy extends LuvioAdapterRequestStrategy {
603
672
  },
604
673
  };
605
674
  }
606
- buildGetRecordActionsSaveRequestData(similarContext, context, request) {
607
- if (this.isGetRecordActionsRequestContextDependent(context, request)) {
675
+ buildSaveRequestData(similarContext, context, request) {
676
+ if (this.isContextDependent(context, request)) {
608
677
  return {
609
678
  request: this.transformForSave({
610
679
  ...request,
@@ -637,7 +706,7 @@ class GetRecordActionsRequestStrategy extends LuvioAdapterRequestStrategy {
637
706
  }
638
707
  return combined;
639
708
  }
640
- isGetRecordActionsRequestContextDependent(context, request) {
709
+ isContextDependent(context, request) {
641
710
  return (request.config.recordIds &&
642
711
  (context.recordId === request.config.recordIds || // some may set this as string instead of array
643
712
  (request.config.recordIds.length === 1 &&
@@ -660,8 +729,8 @@ class GetObjectInfoRequestStrategy extends LuvioAdapterRequestStrategy {
660
729
  },
661
730
  };
662
731
  }
663
- buildGetObjectInfoSaveRequestData(similarContext, context, request) {
664
- if (this.isGetObjectInfoContextDependent(context, request)) {
732
+ buildSaveRequestData(similarContext, context, request) {
733
+ if (this.isContextDependent(context, request)) {
665
734
  return {
666
735
  request: this.transformForSave(request),
667
736
  context: similarContext,
@@ -672,8 +741,9 @@ class GetObjectInfoRequestStrategy extends LuvioAdapterRequestStrategy {
672
741
  context,
673
742
  };
674
743
  }
675
- isGetObjectInfoContextDependent(context, request) {
676
- return (request.config.objectApiName && context.objectApiName === request.config.objectApiName);
744
+ isContextDependent(context, request) {
745
+ return (request.config.objectApiName !== undefined &&
746
+ context.objectApiName === request.config.objectApiName);
677
747
  }
678
748
  }
679
749
 
@@ -710,8 +780,8 @@ class GetRelatedListsActionsRequestStrategy extends LuvioAdapterRequestStrategy
710
780
  },
711
781
  };
712
782
  }
713
- buildGetRelatedListsActionsSaveRequestData(similarContext, context, request) {
714
- if (this.isGetRelatedListsActionsRequestContextDependent(context, request)) {
783
+ buildSaveRequestData(similarContext, context, request) {
784
+ if (this.isContextDependent(context, request)) {
715
785
  return {
716
786
  request: this.transformForSave({
717
787
  ...request,
@@ -728,7 +798,7 @@ class GetRelatedListsActionsRequestStrategy extends LuvioAdapterRequestStrategy
728
798
  context,
729
799
  };
730
800
  }
731
- isGetRelatedListsActionsRequestContextDependent(context, request) {
801
+ isContextDependent(context, request) {
732
802
  const isForContext = request.config.recordIds &&
733
803
  (context.recordId === request.config.recordIds || // some may set this as string instead of array
734
804
  (request.config.recordIds.length === 1 &&
@@ -770,6 +840,129 @@ class GetRelatedListsActionsRequestStrategy extends LuvioAdapterRequestStrategy
770
840
  }
771
841
  }
772
842
 
843
+ class GetRelatedListInfoBatchRequestStrategy extends LuvioAdapterRequestStrategy {
844
+ constructor() {
845
+ super(...arguments);
846
+ this.adapterName = 'getRelatedListInfoBatch';
847
+ this.adapterFactory = getRelatedListInfoBatchAdapterFactory;
848
+ }
849
+ buildConcreteRequest(similarRequest, _context) {
850
+ return similarRequest;
851
+ }
852
+ canCombine(reqA, reqB) {
853
+ return reqA.parentObjectApiName === reqB.parentObjectApiName;
854
+ }
855
+ combineRequests(reqA, reqB) {
856
+ const combined = { ...reqA };
857
+ combined.relatedListNames = Array.from(new Set([...reqA.relatedListNames, ...reqB.relatedListNames]));
858
+ return combined;
859
+ }
860
+ }
861
+
862
+ class GetRelatedListRecordsRequestStrategy extends LuvioAdapterRequestStrategy {
863
+ constructor() {
864
+ super(...arguments);
865
+ this.adapterName = 'getRelatedListRecords';
866
+ this.adapterFactory = getRelatedListRecordsAdapterFactory;
867
+ }
868
+ buildConcreteRequest(similarRequest, context) {
869
+ return {
870
+ ...similarRequest,
871
+ config: {
872
+ ...similarRequest.config,
873
+ parentRecordId: context.recordId,
874
+ },
875
+ };
876
+ }
877
+ buildSaveRequestData(similarContext, context, request) {
878
+ if (this.isContextDependent(context, request)) {
879
+ return {
880
+ request: this.transformForSave({
881
+ ...request,
882
+ config: {
883
+ ...request.config,
884
+ parentRecordId: '*',
885
+ },
886
+ }),
887
+ context: similarContext,
888
+ };
889
+ }
890
+ return {
891
+ request: this.transformForSave(request),
892
+ context,
893
+ };
894
+ }
895
+ // ADG currently handles the batching of GetRelatedListRecords -> GetRelatedListRecordsBatch
896
+ // https://gitcore.soma.salesforce.com/core-2206/core-public/blob/p4/main/core/ui-laf-components/modules/laf/batchingPortable/reducers/RelatedListRecordsBatchReducer.js
897
+ // Adding reducing is outside of the scope of this PR, but this could potentially be added in the future
898
+ isContextDependent(context, request) {
899
+ return context.recordId === request.config.parentRecordId;
900
+ }
901
+ }
902
+
903
+ class GetRelatedListRecordsBatchRequestStrategy extends LuvioAdapterRequestStrategy {
904
+ constructor() {
905
+ super(...arguments);
906
+ this.adapterName = 'getRelatedListRecordsBatch';
907
+ this.adapterFactory = getRelatedListRecordsBatchAdapterFactory;
908
+ }
909
+ buildConcreteRequest(similarRequest, context) {
910
+ return {
911
+ ...similarRequest,
912
+ config: {
913
+ ...similarRequest.config,
914
+ parentRecordId: context.recordId,
915
+ },
916
+ };
917
+ }
918
+ buildSaveRequestData(similarContext, context, request) {
919
+ if (this.isContextDependent(context, request)) {
920
+ return {
921
+ request: this.transformForSave({
922
+ ...request,
923
+ config: {
924
+ ...request.config,
925
+ parentRecordId: '*',
926
+ },
927
+ }),
928
+ context: similarContext,
929
+ };
930
+ }
931
+ return {
932
+ request: this.transformForSave(request),
933
+ context,
934
+ };
935
+ }
936
+ isContextDependent(context, request) {
937
+ return context.recordId === request.config.parentRecordId;
938
+ }
939
+ /**
940
+ * Can combine two seperate batch requests if the parentRecordId is the same.
941
+ * @param reqA The first GetRelatedListRecordsBatchConfig.
942
+ * @param reqB The first GetRelatedListRecordsBatchConfig.
943
+ * @returns true if the requests can be combined, otherwise false.
944
+ */
945
+ canCombine(reqA, reqB) {
946
+ return reqA.parentRecordId === reqB.parentRecordId;
947
+ }
948
+ /**
949
+ * Merge the relatedListParameters together between two combinable batch requests.
950
+ * @param reqA The first GetRelatedListRecordsBatchConfig.
951
+ * @param reqB The first GetRelatedListRecordsBatchConfig.
952
+ * @returns The combined request.
953
+ */
954
+ combineRequests(reqA, reqB) {
955
+ const relatedListParametersMap = new Set(reqA.relatedListParameters.map((relatedListParameter) => {
956
+ return stableJSONStringify$1(relatedListParameter);
957
+ }));
958
+ const reqBRelatedListParametersToAdd = reqB.relatedListParameters.filter((relatedListParameter) => {
959
+ return !relatedListParametersMap.has(stableJSONStringify$1(relatedListParameter));
960
+ });
961
+ reqA.relatedListParameters = reqA.relatedListParameters.concat(reqBRelatedListParametersToAdd);
962
+ return reqA;
963
+ }
964
+ }
965
+
773
966
  class LexRequestRunner {
774
967
  constructor(luvio) {
775
968
  this.luvio = luvio;
@@ -781,6 +974,9 @@ class LexRequestRunner {
781
974
  getObjectInfo: new GetObjectInfoRequestStrategy(),
782
975
  getObjectInfos: new GetObjectInfosRequestStrategy(),
783
976
  getRelatedListsActions: new GetRelatedListsActionsRequestStrategy(),
977
+ getRelatedListInfoBatch: new GetRelatedListInfoBatchRequestStrategy(),
978
+ getRelatedListRecords: new GetRelatedListRecordsRequestStrategy(),
979
+ getRelatedListRecordsBatch: new GetRelatedListRecordsBatchRequestStrategy(),
784
980
  };
785
981
  }
786
982
  reduceRequests(requests) {
@@ -1606,6 +1802,9 @@ function setupPredictivePrefetcher(luvio) {
1606
1802
  getObjectInfo: new GetObjectInfoRequestStrategy(),
1607
1803
  getObjectInfos: new GetObjectInfosRequestStrategy(),
1608
1804
  getRelatedListsActions: new GetRelatedListsActionsRequestStrategy(),
1805
+ getRelatedListRecords: new GetRelatedListRecordsRequestStrategy(),
1806
+ getRelatedListRecordsBatch: new GetRelatedListRecordsBatchRequestStrategy(),
1807
+ getRelatedListInfoBatch: new GetRelatedListInfoBatchRequestStrategy(),
1609
1808
  });
1610
1809
  registerPrefetcher(luvio, prefetcher);
1611
1810
  __lexPrefetcher = prefetcher;
@@ -1709,4 +1908,4 @@ function ldsEngineCreator() {
1709
1908
  }
1710
1909
 
1711
1910
  export { buildPredictorForContext, ldsEngineCreator as default, initializeLDS, predictiveLoadPage };
1712
- // version: 1.273.0-f97941e01
1911
+ // version: 1.274.0-67da496e8
@@ -1,5 +1,5 @@
1
1
  import type { LexContext } from '../prefetcher';
2
- import type { GetRecordRequest, GetRecordsRequest, GetRecordRequestStrategy, GetRecordsRequestStrategy, GetRecordActionsRequestStrategy, GetRecordActionsRequest, GetRecordAvatarsRequest, GetRecordAvatarsRequestStrategy, GetObjectInfoRequest, GetObjectInfosRequest, GetObjectInfoRequestStrategy, GetObjectInfosRequestStrategy, GetRelatedListsActionsRequestStrategy, GetRelatedListsActionsRequest } from '../request-strategy';
2
+ import type { GetRecordRequest, GetRecordsRequest, GetRecordRequestStrategy, GetRecordsRequestStrategy, GetRecordActionsRequestStrategy, GetRecordActionsRequest, GetRecordAvatarsRequest, GetRecordAvatarsRequestStrategy, GetObjectInfoRequest, GetObjectInfosRequest, GetObjectInfoRequestStrategy, GetObjectInfosRequestStrategy, GetRelatedListsActionsRequestStrategy, GetRelatedListsActionsRequest, GetRelatedListInfoBatchRequestStrategy, GetRelatedListInfoBatchRequest, GetRelatedListRecordsRequestStrategy, GetRelatedListRecordsRequest, GetRelatedListRecordsBatchRequestStrategy, GetRelatedListRecordsBatchRequest } from '../request-strategy';
3
3
  import { PredictivePrefetchPage } from './predictive-prefetch-page';
4
4
  export type RecordHomePageContext = {
5
5
  objectApiName: string;
@@ -7,7 +7,7 @@ export type RecordHomePageContext = {
7
7
  actionName: string;
8
8
  type: 'recordPage';
9
9
  };
10
- export type RecordHomePageRequest = GetRecordRequest | GetRecordsRequest | GetRecordActionsRequest | GetRecordAvatarsRequest | GetObjectInfoRequest | GetObjectInfosRequest | GetRelatedListsActionsRequest;
10
+ export type RecordHomePageRequest = GetRecordRequest | GetRecordsRequest | GetRecordActionsRequest | GetRecordAvatarsRequest | GetObjectInfoRequest | GetObjectInfosRequest | GetRelatedListsActionsRequest | GetRelatedListInfoBatchRequest | GetRelatedListRecordsRequest | GetRelatedListRecordsBatchRequest;
11
11
  export declare class RecordHomePage extends PredictivePrefetchPage<RecordHomePageRequest, RecordHomePageContext> {
12
12
  private requestStrategies;
13
13
  similarContext: RecordHomePageContext;
@@ -19,6 +19,9 @@ export declare class RecordHomePage extends PredictivePrefetchPage<RecordHomePag
19
19
  getObjectInfo: GetObjectInfoRequestStrategy;
20
20
  getObjectInfos: GetObjectInfosRequestStrategy;
21
21
  getRelatedListsActions: GetRelatedListsActionsRequestStrategy;
22
+ getRelatedListInfoBatch: GetRelatedListInfoBatchRequestStrategy;
23
+ getRelatedListRecords: GetRelatedListRecordsRequestStrategy;
24
+ getRelatedListRecordsBatch: GetRelatedListRecordsBatchRequestStrategy;
22
25
  });
23
26
  buildSaveRequestData(request: RecordHomePageRequest): {
24
27
  request: GetRecordRequest;
@@ -39,19 +42,15 @@ export declare class RecordHomePage extends PredictivePrefetchPage<RecordHomePag
39
42
  request: GetRelatedListsActionsRequest;
40
43
  context: RecordHomePageContext;
41
44
  } | {
42
- request: GetObjectInfosRequest;
45
+ request: GetRelatedListRecordsRequest;
43
46
  context: RecordHomePageContext;
44
- };
45
- buildGetRecordSaveRequestData(request: GetRecordRequest): {
46
- request: GetRecordRequest;
47
+ } | {
48
+ request: GetRelatedListRecordsBatchRequest;
47
49
  context: RecordHomePageContext;
48
- };
49
- buildGetRecordsSaveRequestData(request: GetRecordsRequest): {
50
- request: GetRecordsRequest;
50
+ } | {
51
+ request: GetObjectInfosRequest | GetRelatedListInfoBatchRequest;
51
52
  context: RecordHomePageContext;
52
53
  };
53
- isGetRecordRequestContextDependent(request: GetRecordRequest): boolean;
54
- isGetRecordsRequestContextDependent(request: GetRecordsRequest): boolean;
55
54
  resolveSimilarRequest(similarRequest: RecordHomePageRequest): RecordHomePageRequest;
56
55
  getAlwaysRunRequests(): RecordHomePageRequest[];
57
56
  static handlesContext(context: LexContext): context is RecordHomePageContext;
@@ -1,6 +1,6 @@
1
1
  import type { DefaultPageContext, PredictivePrefetchPage } from '../pages';
2
2
  import { ApplicationPredictivePrefetcher } from './predictive-prefetcher';
3
- import type { GetRecordActionsRequestStrategy, GetRecordAvatarsRequestStrategy, GetRecordRequestStrategy, GetRecordsRequestStrategy, GetObjectInfoRequestStrategy, GetObjectInfosRequestStrategy, GetRelatedListsActionsRequestStrategy } from '../request-strategy';
3
+ import type { GetRecordActionsRequestStrategy, GetRecordAvatarsRequestStrategy, GetRecordRequestStrategy, GetRecordsRequestStrategy, GetObjectInfoRequestStrategy, GetObjectInfosRequestStrategy, GetRelatedListsActionsRequestStrategy, GetRelatedListInfoBatchRequestStrategy, GetRelatedListRecordsRequestStrategy, GetRelatedListRecordsBatchRequestStrategy } from '../request-strategy';
4
4
  import type { RequestRunner } from '../request-runner';
5
5
  import type { PrefetchRepository } from '../repository/prefetch-repository';
6
6
  import type { RecordHomePageContext, RecordHomePageRequest } from '../pages/record-home-page';
@@ -16,6 +16,9 @@ export declare class LexPredictivePrefetcher extends ApplicationPredictivePrefet
16
16
  getObjectInfo: GetObjectInfoRequestStrategy;
17
17
  getObjectInfos: GetObjectInfosRequestStrategy;
18
18
  getRelatedListsActions: GetRelatedListsActionsRequestStrategy;
19
+ getRelatedListInfoBatch: GetRelatedListInfoBatchRequestStrategy;
20
+ getRelatedListRecords: GetRelatedListRecordsRequestStrategy;
21
+ getRelatedListRecordsBatch: GetRelatedListRecordsBatchRequestStrategy;
19
22
  });
20
23
  getPage(): PredictivePrefetchPage<LexRequest, LexContext>;
21
24
  }
@@ -11,9 +11,9 @@ export declare class GetObjectInfoRequestStrategy extends LuvioAdapterRequestStr
11
11
  adapterName: string;
12
12
  adapterFactory: import("@luvio/engine").AdapterFactory<GetObjectInfoConfig, import("@salesforce/lds-adapters-uiapi").ObjectInfoRepresentation>;
13
13
  buildConcreteRequest(similarRequest: GetObjectInfoRequest, context: GetObjectInfoContext): GetObjectInfoRequest;
14
- buildGetObjectInfoSaveRequestData<C extends GetObjectInfoContext>(similarContext: C, context: C, request: GetObjectInfoRequest): {
14
+ buildSaveRequestData<C extends GetObjectInfoContext>(similarContext: C, context: C, request: GetObjectInfoRequest): {
15
15
  request: GetObjectInfoRequest;
16
16
  context: C;
17
17
  };
18
- private isGetObjectInfoContextDependent;
18
+ isContextDependent(context: GetObjectInfoContext, request: GetObjectInfoRequest): boolean;
19
19
  }
@@ -11,12 +11,12 @@ export declare class GetRecordActionsRequestStrategy extends LuvioAdapterRequest
11
11
  adapterName: string;
12
12
  adapterFactory: import("@luvio/engine").AdapterFactory<GetRecordActionsConfig, import("packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/types/ActionRepresentation").ActionRepresentation>;
13
13
  buildConcreteRequest(similarRequest: GetRecordActionsRequest, context: GetRecordActionsContext): GetRecordActionsRequest;
14
- buildGetRecordActionsSaveRequestData<C extends GetRecordActionsContext>(similarContext: C, context: C, request: GetRecordActionsRequest): {
14
+ buildSaveRequestData<C extends GetRecordActionsContext>(similarContext: C, context: C, request: GetRecordActionsRequest): {
15
15
  request: GetRecordActionsRequest;
16
16
  context: C;
17
17
  };
18
18
  canCombine(reqA: GetRecordActionsConfig, reqB: GetRecordActionsConfig): boolean;
19
19
  combineRequests(reqA: GetRecordActionsConfig, reqB: GetRecordActionsConfig): GetRecordActionsConfig;
20
- private isGetRecordActionsRequestContextDependent;
20
+ isContextDependent(context: GetRecordActionsContext, request: GetRecordActionsRequest): boolean;
21
21
  }
22
22
  export {};
@@ -11,11 +11,11 @@ export declare class GetRecordAvatarsRequestStrategy extends LuvioAdapterRequest
11
11
  adapterName: string;
12
12
  adapterFactory: import("@luvio/engine").AdapterFactory<GetRecordAvatarsConfig, import("packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/types/RecordAvatarBulkMapRepresentation").RecordAvatarBulkMapRepresentation>;
13
13
  buildConcreteRequest(similarRequest: GetRecordAvatarsRequest, context: GetRecordAvatarsContext): GetRecordAvatarsRequest;
14
- buildGetRecordAvatarsSaveRequestData<C extends GetRecordAvatarsContext>(similarContext: C, context: C, request: GetRecordAvatarsRequest): {
14
+ buildSaveRequestData<C extends GetRecordAvatarsContext>(similarContext: C, context: C, request: GetRecordAvatarsRequest): {
15
15
  request: GetRecordAvatarsRequest;
16
16
  context: C;
17
17
  };
18
- private isGetRecordAvatarsRequestContextDependent;
18
+ isContextDependent<C extends GetRecordAvatarsContext>(context: C, request: GetRecordAvatarsRequest): boolean;
19
19
  canCombine(reqA: GetRecordAvatarsConfig, reqB: GetRecordAvatarsConfig): boolean;
20
20
  combineRequests(reqA: GetRecordAvatarsConfig, reqB: GetRecordAvatarsConfig): GetRecordAvatarsConfig;
21
21
  }
@@ -14,5 +14,10 @@ export declare class GetRecordRequestStrategy extends LuvioAdapterRequestStrateg
14
14
  transformForSave(request: GetRecordRequest): GetRecordRequest;
15
15
  canCombine(reqA: GetRecordConfig, reqB: GetRecordConfig): boolean;
16
16
  combineRequests(reqA: GetRecordConfig, reqB: GetRecordConfig): GetRecordConfig;
17
+ isContextDependent(context: GetRecordContext, request: GetRecordRequest): boolean;
18
+ buildSaveRequestData<C extends GetRecordContext>(similarContext: C, context: C, request: GetRecordRequest): {
19
+ request: GetRecordRequest;
20
+ context: C;
21
+ };
17
22
  }
18
23
  export {};
@@ -11,5 +11,10 @@ export declare class GetRecordsRequestStrategy extends LuvioAdapterRequestStrate
11
11
  adapterName: string;
12
12
  adapterFactory: import("@luvio/engine").AdapterFactory<GetRecordsConfig, import("@salesforce/lds-adapters-uiapi").BatchRepresentation>;
13
13
  buildConcreteRequest(similarRequest: GetRecordsRequest, context: GetRecordsContext): GetRecordsRequest;
14
+ isContextDependent(context: GetRecordsContext, request: GetRecordsRequest): boolean;
15
+ buildSaveRequestData<Context extends GetRecordsContext, R extends GetRecordsRequest>(similarContext: Context, context: Context, request: R): {
16
+ request: GetRecordsRequest;
17
+ context: Context;
18
+ };
14
19
  }
15
20
  export {};
@@ -0,0 +1,17 @@
1
+ import type { GetRelatedListInfoBatchConfig } from 'packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/adapters/getRelatedListInfoBatch';
2
+ import { LuvioAdapterRequestStrategy } from './luvio-adapter-request-strategy';
3
+ export type GetRelatedListInfoBatchRequest = {
4
+ adapterName: 'getRelatedListInfoBatch';
5
+ config: GetRelatedListInfoBatchConfig;
6
+ };
7
+ type GetRelatedListInfoBatchContext = {
8
+ objectApiName: string;
9
+ };
10
+ export declare class GetRelatedListInfoBatchRequestStrategy extends LuvioAdapterRequestStrategy<GetRelatedListInfoBatchConfig, GetRelatedListInfoBatchRequest, GetRelatedListInfoBatchContext> {
11
+ adapterName: string;
12
+ adapterFactory: import("@luvio/engine").AdapterFactory<GetRelatedListInfoBatchConfig, import("packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/types/RelatedListInfoBatchRepresentation").RelatedListInfoBatchRepresentation>;
13
+ buildConcreteRequest(similarRequest: GetRelatedListInfoBatchRequest, _context: GetRelatedListInfoBatchContext): GetRelatedListInfoBatchRequest;
14
+ canCombine(reqA: GetRelatedListInfoBatchConfig, reqB: GetRelatedListInfoBatchConfig): boolean;
15
+ combineRequests(reqA: GetRelatedListInfoBatchConfig, reqB: GetRelatedListInfoBatchConfig): GetRelatedListInfoBatchConfig;
16
+ }
17
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { GetRelatedListRecordsBatchConfig } from '@salesforce/lds-adapters-uiapi';
2
+ import { LuvioAdapterRequestStrategy } from './luvio-adapter-request-strategy';
3
+ export type GetRelatedListRecordsBatchRequest = {
4
+ adapterName: 'getRelatedListRecordsBatch';
5
+ config: GetRelatedListRecordsBatchConfig;
6
+ };
7
+ type GetRelatedListRecordsBatchContext = {
8
+ recordId: string;
9
+ };
10
+ export declare class GetRelatedListRecordsBatchRequestStrategy extends LuvioAdapterRequestStrategy<GetRelatedListRecordsBatchConfig, GetRelatedListRecordsBatchRequest, GetRelatedListRecordsBatchContext> {
11
+ adapterName: string;
12
+ adapterFactory: import("@luvio/engine").AdapterFactory<GetRelatedListRecordsBatchConfig, import("@salesforce/lds-adapters-uiapi").RelatedListRecordCollectionBatchRepresentation>;
13
+ buildConcreteRequest(similarRequest: GetRelatedListRecordsBatchRequest, context: GetRelatedListRecordsBatchContext): GetRelatedListRecordsBatchRequest;
14
+ buildSaveRequestData<C extends GetRelatedListRecordsBatchContext>(similarContext: C, context: C, request: GetRelatedListRecordsBatchRequest): {
15
+ request: GetRelatedListRecordsBatchRequest;
16
+ context: C;
17
+ };
18
+ isContextDependent(context: GetRelatedListRecordsBatchContext, request: GetRelatedListRecordsBatchRequest): boolean;
19
+ /**
20
+ * Can combine two seperate batch requests if the parentRecordId is the same.
21
+ * @param reqA The first GetRelatedListRecordsBatchConfig.
22
+ * @param reqB The first GetRelatedListRecordsBatchConfig.
23
+ * @returns true if the requests can be combined, otherwise false.
24
+ */
25
+ canCombine(reqA: GetRelatedListRecordsBatchConfig, reqB: GetRelatedListRecordsBatchConfig): boolean;
26
+ /**
27
+ * Merge the relatedListParameters together between two combinable batch requests.
28
+ * @param reqA The first GetRelatedListRecordsBatchConfig.
29
+ * @param reqB The first GetRelatedListRecordsBatchConfig.
30
+ * @returns The combined request.
31
+ */
32
+ combineRequests(reqA: GetRelatedListRecordsBatchConfig, reqB: GetRelatedListRecordsBatchConfig): GetRelatedListRecordsBatchConfig;
33
+ }
34
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { GetRelatedListRecordsConfig } from '@salesforce/lds-adapters-uiapi';
2
+ import { LuvioAdapterRequestStrategy } from './luvio-adapter-request-strategy';
3
+ export type GetRelatedListRecordsRequest = {
4
+ adapterName: 'getRelatedListRecords';
5
+ config: GetRelatedListRecordsConfig;
6
+ };
7
+ type GetRelatedListRecordsContext = {
8
+ recordId: string;
9
+ };
10
+ export declare class GetRelatedListRecordsRequestStrategy extends LuvioAdapterRequestStrategy<GetRelatedListRecordsConfig, GetRelatedListRecordsRequest, GetRelatedListRecordsContext> {
11
+ adapterName: string;
12
+ adapterFactory: import("@luvio/engine").AdapterFactory<GetRelatedListRecordsConfig, import("@salesforce/lds-adapters-uiapi").RelatedListRecordCollectionRepresentation>;
13
+ buildConcreteRequest(similarRequest: GetRelatedListRecordsRequest, context: GetRelatedListRecordsContext): GetRelatedListRecordsRequest;
14
+ buildSaveRequestData<C extends GetRelatedListRecordsContext>(similarContext: C, context: C, request: GetRelatedListRecordsRequest): {
15
+ request: GetRelatedListRecordsRequest;
16
+ context: C;
17
+ };
18
+ isContextDependent(context: GetRelatedListRecordsContext, request: GetRelatedListRecordsRequest): boolean;
19
+ }
20
+ export {};
@@ -11,11 +11,11 @@ export declare class GetRelatedListsActionsRequestStrategy extends LuvioAdapterR
11
11
  adapterName: string;
12
12
  adapterFactory: import("@luvio/engine").AdapterFactory<GetRelatedListsActionsConfig, import("packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/types/ActionRelatedListsCollectionBatchRepresentation").ActionRelatedListsCollectionBatchRepresentation>;
13
13
  buildConcreteRequest(similarRequest: GetRelatedListsActionsRequest, context: GetRelatedListsActionsContext): GetRelatedListsActionsRequest;
14
- buildGetRelatedListsActionsSaveRequestData<C extends GetRelatedListsActionsContext>(similarContext: C, context: C, request: GetRelatedListsActionsRequest): {
14
+ buildSaveRequestData<C extends GetRelatedListsActionsContext>(similarContext: C, context: C, request: GetRelatedListsActionsRequest): {
15
15
  request: GetRelatedListsActionsRequest;
16
16
  context: C;
17
17
  };
18
- private isGetRelatedListsActionsRequestContextDependent;
18
+ isContextDependent(context: GetRelatedListsActionsContext, request: GetRelatedListsActionsRequest): boolean;
19
19
  /**
20
20
  * Can only reduce two requests when they have the same recordId, and
21
21
  * the individual relatedListAction config only have relatedListId.
@@ -5,6 +5,9 @@ export * from './get-record-actions-request-strategy';
5
5
  export * from './get-object-info-request-strategy';
6
6
  export * from './get-object-infos-request-strategy';
7
7
  export * from './get-related-lists-actions-request-strategy';
8
+ export * from './get-related-list-info-batch-request-strategy';
9
+ export * from './get-related-list-records-request-strategy';
10
+ export * from './get-related-list-records-batch-request-strategy';
8
11
  export * from './luvio-adapter-request-strategy';
9
12
  export * from './luvio-adapter-request';
10
13
  export * from './request-strategy';
@@ -2,11 +2,74 @@ import type { AdapterFactory } from '@luvio/engine';
2
2
  import { RequestStrategy } from './request-strategy';
3
3
  import type { LuvioAdapterRequest } from './luvio-adapter-request';
4
4
  export declare abstract class LuvioAdapterRequestStrategy<AdapterConfig, Request extends LuvioAdapterRequest<AdapterConfig>, Context> extends RequestStrategy<Request, Context> {
5
+ /**
6
+ * Name of the adapter used in this strategy.
7
+ */
5
8
  abstract adapterName: string;
9
+ /**
10
+ * Factory for the adapter used in this strategy.
11
+ */
6
12
  abstract adapterFactory: AdapterFactory<AdapterConfig, any>;
13
+ /**
14
+ * Perform any transformations required to prepare the request for saving.
15
+ *
16
+ * e.g. If the request is for a record, we move all fields in the fields array
17
+ * into the optionalFields array
18
+ *
19
+ * @param request - The request to transform
20
+ * @returns
21
+ */
7
22
  transformForSave(request: Request): Request;
23
+ /**
24
+ * Filter requests to only those that are for this strategy.
25
+ *
26
+ * @param unfilteredRequests array of requests to filter
27
+ * @returns
28
+ */
8
29
  protected filterRequests(unfilteredRequests: LuvioAdapterRequest<unknown>[]): Request[];
30
+ /**
31
+ * Reduce requests by combining those based on a strategies implementations
32
+ * of canCombine and combineRequests.
33
+ * @param unfilteredRequests array of requests to filter
34
+ * @returns
35
+ */
9
36
  reduce(unfilteredRequests: LuvioAdapterRequest<unknown>[]): Request[];
37
+ /**
38
+ * Check if two requests can be combined.
39
+ *
40
+ * By default, requests are not combinable.
41
+ * @param reqA config of request A
42
+ * @param reqB config of request B
43
+ * @returns
44
+ */
10
45
  canCombine(_reqA: AdapterConfig, _reqB: AdapterConfig): boolean;
46
+ /**
47
+ * Takes two request configs and combines them into a single request config.
48
+ *
49
+ * @param reqA config of request A
50
+ * @param reqB config of request B
51
+ * @returns
52
+ */
11
53
  combineRequests(reqA: AdapterConfig, _reqB: AdapterConfig): AdapterConfig;
54
+ /**
55
+ * Checks adapter config against request context to determine if the request is context dependent.
56
+ *
57
+ * By default, requests are not context dependent.
58
+ * @param request
59
+ * @returns
60
+ */
61
+ isContextDependent(_context: Context, _request: Request): boolean;
62
+ /**
63
+ * Builds request for saving,
64
+ * - transforming the request
65
+ * - handling the cases where the request is context dependent (this is homework for the subclass)
66
+ * @param _similarContext Context with at least one parameter as a wildcard '*'
67
+ * @param context Exact context for a given page
68
+ * @param request
69
+ * @returns
70
+ */
71
+ buildSaveRequestData(_similarContext: Context, context: Context, request: Request): {
72
+ request: Request;
73
+ context: Context;
74
+ };
12
75
  }
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Luvio adapter used to make the request
3
+ * @typeParam Config - The config provided for the request
4
+ */
1
5
  export type LuvioAdapterRequest<Config> = {
2
6
  adapterName: string;
3
7
  config: Config;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-aura",
3
- "version": "1.273.0",
3
+ "version": "1.274.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS engine for Aura runtime",
6
6
  "main": "dist/ldsEngineCreator.js",
@@ -34,13 +34,13 @@
34
34
  "release:corejar": "yarn build && ../core-build/scripts/core.js --name=lds-runtime-aura"
35
35
  },
36
36
  "devDependencies": {
37
- "@salesforce/lds-adapters-uiapi": "^1.273.0",
38
- "@salesforce/lds-ads-bridge": "^1.273.0",
39
- "@salesforce/lds-aura-storage": "^1.273.0",
40
- "@salesforce/lds-bindings": "^1.273.0",
41
- "@salesforce/lds-instrumentation": "^1.273.0",
42
- "@salesforce/lds-network-aura": "^1.273.0",
43
- "@salesforce/lds-network-fetch-with-jwt": "^1.273.0"
37
+ "@salesforce/lds-adapters-uiapi": "^1.274.0",
38
+ "@salesforce/lds-ads-bridge": "^1.274.0",
39
+ "@salesforce/lds-aura-storage": "^1.274.0",
40
+ "@salesforce/lds-bindings": "^1.274.0",
41
+ "@salesforce/lds-instrumentation": "^1.274.0",
42
+ "@salesforce/lds-network-aura": "^1.274.0",
43
+ "@salesforce/lds-network-fetch-with-jwt": "^1.274.0"
44
44
  },
45
45
  "dependencies": {
46
46
  "@luvio/network-adapter-composable": "0.154.9"
@@ -49,9 +49,9 @@
49
49
  {
50
50
  "path": "./dist/ldsEngineCreator.js",
51
51
  "maxSize": {
52
- "none": "70 kB",
53
- "min": "30 kB",
54
- "compressed": "13 kB"
52
+ "none": "75 kB",
53
+ "min": "32 kB",
54
+ "compressed": "15 kB"
55
55
  }
56
56
  }
57
57
  ],