@rentman/rm-core 66.1.10 → 66.2.0-RM4-48655

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.
@@ -1,22 +1,34 @@
1
1
  import { ApiItemType, ItemId } from '@rentman/backend-types';
2
2
  import { GraphQueryParserFactory } from '../../factories/GraphQueryParserFactory';
3
- import { AbstractCache, ApiQuery, ApiRequestColumns, ApiRequestService, CachedQueryItem, CachedQueryOptions, CachedQueryOptionsWithColumns, ChangesDeltaBase, CollectionOptions, CollectionQuery, CollectionResourceOrder, ErrorHandlerInterface, ItemEntry, LinkTreeServiceInterface, MatchesAccumulatorMap, MatchingResultsAccumulatorMapType, MatchingResultsAccumulatorTuple, ParentChangesDelta, QueryService, RequestColumnExpansionFactory, RequestColumnsOperationsCache, RequestColumnsOperationsCacheFactory, RequestColumnsTuple } from '../../internal';
3
+ import { AbstractCache, ApiQuery, ApiRequestColumns, ApiRequestService, CachedQueryItem, ChangesDeltaBase, ChildCollectionsOption, ChildrenQueryFunction, CollectionQuery, CollectionResourceOrder, EntryParent, ErrorHandlerInterface, ItemEntry, LinkTreeServiceInterface, MatchesAccumulatorMap, MatchingResultsAccumulatorMapType, MatchingResultsAccumulatorTuple, ParentChangesDelta, PreventCachingCollectionOption, ProcessedChildCollectionOptions, QueryService, RequestColumnExpansionFactory, RequestColumnsOperationsCache, RequestColumnsOperationsCacheFactory, RequestColumnsTuple, RootCollectionOptions } from '../../internal';
4
4
  import { RootQueryNode } from '../matcher/RootQueryNode';
5
+ /**
6
+ * We're not including columns here, because whenever we access the columns, we'd want to do it through the columns
7
+ * operations cache. Similarly, the query should be accessed through a separate `CollectionQuery` parameter.
8
+ */
9
+ export interface CachedQueryOptions<ItemType extends ApiItemType> extends PreventCachingCollectionOption {
10
+ parent?: EntryParent;
11
+ order?: CollectionResourceOrder<ItemType>;
12
+ }
13
+ export interface CachedQueryOptionsWithChildren<ItemType extends ApiItemType> extends CachedQueryOptions<ItemType> {
14
+ children?: ChildCollectionsOption;
15
+ }
5
16
  export interface LinkCollectionBatchQueryTuple<ItemTypeType extends ApiItemType> {
6
- batchQuery: CollectionQuery<ItemTypeType>;
7
- batchQueryGraph?: RootQueryNode<ItemTypeType>;
17
+ readonly batchQuery: CollectionQuery<ItemTypeType>;
18
+ readonly batchQueryGraph?: RootQueryNode<ItemTypeType>;
8
19
  }
9
- export interface ParentCachedQueryItemTuple<ItemTypeType extends ApiItemType> {
20
+ /**
21
+ * Represents a cached query item resulting from a `getCollection` / `getItemsByQuery` call.
22
+ */
23
+ export interface CachedQueryItemTypeTuple<ItemTypeType extends ApiItemType, OptionsType> {
10
24
  readonly cachedQueryItem: CachedQueryItem<ItemTypeType>;
11
- readonly options: CollectionOptions<ItemTypeType>;
12
- children: CachedQueryItemsItemTypeTuple<ApiItemType>[] | null;
13
- }
14
- export interface CachedQueryItemTuple<ItemTypeType extends ApiItemType> extends ParentCachedQueryItemTuple<ItemTypeType> {
15
- children: null;
25
+ readonly options: OptionsType;
26
+ children: CachedQueryItemsItemTypeTuple<any>[] | null;
16
27
  }
28
+ export type ChildCachedQueryItemTypeTuple<ItemTypeType extends ApiItemType> = CachedQueryItemTypeTuple<ItemTypeType, ProcessedChildCollectionOptions<ItemTypeType>>;
17
29
  export interface CachedQueryItemsItemTypeTuple<ItemTypeType extends ApiItemType> {
18
30
  itemType: ItemTypeType;
19
- cachedQueryItemTuples: ParentCachedQueryItemTuple<ItemTypeType>[];
31
+ cachedQueryItemTuples: ChildCachedQueryItemTypeTuple<ItemTypeType>[];
20
32
  }
21
33
  export interface CachedQueryHandlerCollectionTuple<ItemTypeType extends ApiItemType> {
22
34
  cachedQueryItem?: CachedQueryItem<ItemTypeType>;
@@ -69,7 +81,7 @@ export declare abstract class CachedQueryHandlerBase {
69
81
  * @description
70
82
  * Fetches a {@link CollectionEntry CollectionEntry} with the given options
71
83
  */
72
- __fetchCachedQueryItem<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CachedQueryOptionsWithColumns<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
84
+ __fetchCachedQueryItem<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: RootCollectionOptions<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
73
85
  getCachedQueryItemsByItemType<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType): CachedQueryItem<ItemTypeType>[];
74
86
  cloneCachedQuery<ItemTypeType extends ApiItemType>(cachedQueryItem: CachedQueryItem<ItemTypeType>, resolve?: boolean): CachedQueryItem<ItemTypeType>;
75
87
  clearCachedQueryItem(itemType: ApiItemType, queryString: string): void;
@@ -99,7 +111,15 @@ export declare abstract class CachedQueryHandlerBase {
99
111
  abstract __fetchItemEntriesByQueryData<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CachedQueryOptions<ItemTypeType>, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, collectionQuery: CollectionQuery<ItemTypeType>, linkCollectionBatchQueryTuple?: LinkCollectionBatchQueryTuple<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
100
112
  abstract __maybeExpandCachedQuery<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, batchedLinkedToQuery?: CollectionQuery<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
101
113
  queryIsCacheable<ItemTypeType extends ApiItemType>(options: CachedQueryOptions<ItemTypeType>, query: CollectionQuery<ItemTypeType>): boolean;
102
- protected createQueryFromOptions<ItemTypeType extends ApiItemType>(options: CachedQueryOptions<ItemTypeType>): CollectionQuery<ItemTypeType>;
114
+ createBatchQuery<ItemTypeType extends ApiItemType>(parentItemType: ApiItemType, parentItemIds: ItemId[], queryOption: ApiQuery<ItemTypeType> | ChildrenQueryFunction<ItemTypeType> | undefined): CollectionQuery<ItemTypeType>;
115
+ protected createQueryFromChildOptions<ItemTypeType extends ApiItemType>(parentItemType: ApiItemType, parentItemIds: ItemId[], queryOption: ApiQuery<ItemTypeType> | ChildrenQueryFunction<ItemTypeType> | undefined): ApiQuery<ItemTypeType>;
116
+ /**
117
+ * Root collection options can contain a `query` and a `parent` property.
118
+ */
119
+ protected createQueryFromRootOptions<ItemTypeType extends ApiItemType>(options: {
120
+ query?: ApiQuery<ItemTypeType>;
121
+ parent?: EntryParent;
122
+ }): CollectionQuery<ItemTypeType>;
103
123
  /**
104
124
  * @description
105
125
  * Expands the option's {@link CollectionOptions.columns columns} with the columns required for the {@link CacheSyncer CacheSyncer} to function.
@@ -140,5 +160,5 @@ export declare abstract class CachedQueryHandlerBase {
140
160
  * Every time a cached query item is created, either 'resolve' or 'reject' has to be called on the cached query item.
141
161
  */
142
162
  protected constructCachedQuery<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery<ItemTypeType>, itemEntries: ItemEntry<ItemTypeType>[], requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, queryGraph?: RootQueryNode<ItemTypeType>): CachedQueryItem<ItemTypeType>;
143
- private createQueryGraph;
163
+ protected createQueryGraph<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery<ItemTypeType>): RootQueryNode<ItemTypeType>;
144
164
  }
@@ -84,6 +84,13 @@ export declare class TransactionCache extends AbstractCache {
84
84
  */
85
85
  tabRequestParameters: {};
86
86
  hasChangesSignal: WritableSignal<boolean>;
87
+ aiChanges: WritableSignal<{
88
+ created: Set<ItemEntry['id']>;
89
+ deleted: Set<ItemEntry['id']>;
90
+ fields: {
91
+ [itemEntryId: number]: Set<string>;
92
+ };
93
+ }>;
87
94
  /**
88
95
  * @description
89
96
  * The transaction's parent
@@ -159,7 +166,7 @@ export declare class TransactionCache extends AbstractCache {
159
166
  * Note that the transaction can *not* be mutated while it is pending. If you need to apply changes on the
160
167
  * transaction while it is pending, use the `applyChangesDelta` parameter passed to the promise function.
161
168
  */
162
- setPending<Result>(promise: Promise<Result> | ((applyChangesDelta: (changesDelta: ChangesDelta) => Promise<ChangesDeltaResult>) => Promise<Result>)): Promise<Result>;
169
+ setPending<Result>(promise: Promise<Result> | ((applyChangesDelta: (changesDelta: ChangesDelta) => Promise<ChangesDeltaResult>) => Promise<Result>), isDoneByAi: boolean): Promise<Result>;
163
170
  createChild(id?: string, validatorFactory?: TransactionValidatorFactory, options?: TransactionOptions): TransactionCache;
164
171
  createBusinessLogicChild(): TransactionCache;
165
172
  destroy(): void;
@@ -216,7 +223,7 @@ export declare class TransactionCache extends AbstractCache {
216
223
  *
217
224
  * This method waits for other transaction processes to complete, see {@link enqueueAction}.
218
225
  */
219
- applyChangesDelta(changesDelta: ChangesDelta): Promise<ChangesDeltaResult>;
226
+ applyChangesDelta(changesDelta: ChangesDelta, isDoneByAi?: boolean): Promise<ChangesDeltaResult>;
220
227
  /**
221
228
  * See {@link applyChangesDelta}. We're introducing a separate method here to facilitate handling the resulting
222
229
  * promise.
@@ -1,17 +1,19 @@
1
1
  import { ApiItemType, ItemId } from '@rentman/backend-types';
2
- import { ApiQuery, CachedQueryHandlerBase, CachedQueryHandlerCollectionTuple, CachedQueryItem, CachedQueryItemsItemTypeTuple, CachedQueryItemTuple, CachedQueryOptions, ChangesDeltaBase, ChildCollectionsOption, CollectionItemResourceChanges, CollectionOptions, CollectionQuery, CollectionResource, EntryParent, ItemIdConversionMap, LinkCollectionBatchQueryTuple, MatchesAccumulatorMap, MatchingResultsAccumulatorMapType, MatchingResultsAccumulatorTuple, ParentCachedQueryItemTuple, RequestColumnsOperationsCache, RequireOnly, TransactionCache, TransactionCollectionHandlerDependencyInterface } from '../../../internal';
2
+ import { ApiQuery, ApiRequestColumnArray, CachedQueryHandlerBase, CachedQueryHandlerCollectionTuple, CachedQueryItem, CachedQueryItemsItemTypeTuple, CachedQueryItemTypeTuple, CachedQueryOptions, CachedQueryOptionsWithChildren, ChangesDeltaBase, ChildCachedQueryItemTypeTuple, ChildCollectionOptions, ChildCollectionsOption, CollectionItemResourceChanges, CollectionQuery, CollectionResource, EntryParent, ItemIdConversionMap, LinkCollectionBatchQueryTuple, MatchesAccumulatorMap, MatchingResultsAccumulatorMapType, MatchingResultsAccumulatorTuple, ProcessedChildCollectionOptions, RequestColumnsOperationsCache, RequireOnly, TransactionCache, TransactionCollectionHandlerDependencyInterface } from '../../../internal';
3
3
  import { RootQueryNode } from '../../matcher/RootQueryNode';
4
+ /**
5
+ * The result of {@link processCollectionOptions}, where we create a separate set of options for each child collection.
6
+ */
7
+ interface LinkCollectionOptionsTuple<ItemTypeType extends ApiItemType> extends LinkCollectionBatchQueryTuple<ItemTypeType> {
8
+ collectionQueryTuples: {
9
+ parsedQuery: CollectionQuery<ItemTypeType>;
10
+ options: ProcessedChildCollectionOptions<ItemTypeType>;
11
+ }[];
12
+ }
4
13
  export interface LinkCollectionOptionsItemTypeTuple<ItemTypeType extends ApiItemType> {
5
14
  itemType: ItemTypeType;
6
15
  linkCollectionOptions: LinkCollectionOptionsTuple<ItemTypeType>;
7
16
  }
8
- interface CollectionQueryTuple<ItemTypeType extends ApiItemType> {
9
- parsedQuery: CollectionQuery<ItemTypeType>;
10
- options: CollectionOptions<ItemTypeType>;
11
- }
12
- interface LinkCollectionOptionsTuple<ItemTypeType extends ApiItemType> extends LinkCollectionBatchQueryTuple<ItemTypeType> {
13
- collectionQueryTuples: CollectionQueryTuple<ItemTypeType>[];
14
- }
15
17
  interface TransactionCachedQueryHandlerCollectionTuple<ItemTypeType extends ApiItemType> extends CachedQueryHandlerCollectionTuple<ItemTypeType> {
16
18
  collectionResources?: WeakRef<CollectionResource<ItemTypeType, any, any>>[];
17
19
  }
@@ -61,14 +63,15 @@ export declare class TransactionCachedQueryHandler extends CachedQueryHandlerBas
61
63
  * Fetches collections linked to the passed parents
62
64
  * @returns An array of cached query items. The items are in the same order as the parent IDs.
63
65
  */
64
- __fetchLinkedCachedQueryItems<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, linkCollectionOptionsTuple: LinkCollectionOptionsTuple<ItemTypeType>): Promise<CachedQueryItemTuple<ItemTypeType>[]>;
65
- createBatchLinkedToQuery<ItemTypeType extends ApiItemType>(parentItemType: ApiItemType, parentItemIds: ItemId[], additionalQuery?: ApiQuery<ItemTypeType>): CollectionQuery<ItemTypeType>;
66
+ __fetchChildCachedQueryItemsByItemType<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, linkCollectionOptionsTuple: LinkCollectionOptionsTuple<ItemTypeType>): Promise<ChildCachedQueryItemTypeTuple<ItemTypeType>[]>;
66
67
  /**
67
68
  * The order of the `collectionQueryTuples` property of the result will be the same as the order of
68
69
  * `parentItemIds`.
69
70
  */
70
- processLinkCollectionOptions<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parentItemType: ApiItemType, parentItemIds: ItemId[], options: CollectionOptions<ItemTypeType>): LinkCollectionOptionsTuple<ItemTypeType>;
71
- __fetchParentCachedQueryItem<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CollectionOptions<ItemTypeType>): Promise<ParentCachedQueryItemTuple<ItemTypeType>>;
71
+ processChildCollectionOptions<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parentItemType: ApiItemType, parentItemIds: ItemId[], childOptions: ChildCollectionOptions<ItemTypeType>): LinkCollectionOptionsTuple<ItemTypeType>;
72
+ __fetchParentCachedQueryItem<const ItemTypeType extends ApiItemType, OptionsType extends CachedQueryOptionsWithChildren<ItemTypeType> & {
73
+ columns: ApiRequestColumnArray<ItemTypeType>;
74
+ }>(itemType: ItemTypeType, options: OptionsType): Promise<CachedQueryItemTypeTuple<ItemTypeType, OptionsType>>;
72
75
  __fetchChildCachedQueryItems(parentItemType: ApiItemType, parentItemIds: ItemId[], childCollectionOptions: ChildCollectionsOption): Promise<CachedQueryItemsItemTypeTuple<ApiItemType>[]>;
73
76
  /**
74
77
  * Fetches a cached query, respecting children. Like {@link __fetchItemEntriesByQueryData}, assumes the options are
@@ -76,9 +79,8 @@ export declare class TransactionCachedQueryHandler extends CachedQueryHandlerBas
76
79
  *
77
80
  * todo: Rename this method and {@link __fetchItemEntriesByQueryData} to something that's easier to understand.
78
81
  */
79
- __fetchParentItemEntriesByQueryData<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CollectionOptions<ItemTypeType>, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, collectionQuery: CollectionQuery<ItemTypeType>): Promise<ParentCachedQueryItemTuple<ItemTypeType>>;
80
- private cloneOptions;
81
- fetchChildCachedQueryItems(linkCollectionOptionsItemTypeTuples: LinkCollectionOptionsItemTypeTuple<ApiItemType>[]): Promise<CachedQueryItemsItemTypeTuple<ApiItemType>[]>;
82
+ __fetchParentItemEntriesByQueryData<ItemTypeType extends ApiItemType, OptionsType extends CachedQueryOptionsWithChildren<ItemTypeType>>(itemType: ItemTypeType, options: OptionsType, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, collectionQuery: CollectionQuery<ItemTypeType>): Promise<CachedQueryItemTypeTuple<ItemTypeType, OptionsType>>;
83
+ private fetchChildCachedQueryItems;
82
84
  /**
83
85
  * Updates the items included in cached queries and collection resources based on query matcher results. Note that
84
86
  * method does not clear child collection resources of removed item resources.
@@ -94,7 +96,7 @@ export declare class TransactionCachedQueryHandler extends CachedQueryHandlerBas
94
96
  * Sets the `children` property for each of the cached queries in `cachedQueryItemTuples`. Assumes the `children`
95
97
  * *options* property is the same for all cached query items.
96
98
  *
97
- * The `children` property will remain `null` if the children option is unset.
99
+ * The `children` property will remain `null` if the children option is unset.
98
100
  */
99
101
  private resolveParentCachedQueryItems;
100
102
  private resolveLocalCachedQueryItem;
@@ -56,7 +56,7 @@ export declare class TransactionItemHandler extends ItemHandlerBase {
56
56
  */
57
57
  processUpdatesFromDelta(updated: {
58
58
  [itemEntryId: number]: ChangesDeltaBaseItemUpdateDelta<any>;
59
- }, createItemChangesIfNoneExist: boolean, parentChangesDelta: ParentChangesDelta): void;
59
+ }, createItemChangesIfNoneExist: boolean, parentChangesDelta: ParentChangesDelta): Map<ItemEntry['id'], Set<string>>;
60
60
  updateLocalItemIdReferences(itemType: ApiItemType, oldItemId: ItemId, newItemId: ItemId, changesDelta: ChangesDeltaBase): void;
61
61
  registerFieldChangeCallback<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, itemId: ItemId, callback: ItemChangesListener<ItemTypeType>): DeregFunction;
62
62
  createItemEntry(createTuple: ChangesDeltaItemCreateDelta): ItemEntry;
@@ -1,5 +1,5 @@
1
1
  import { ApiItemType } from '@rentman/backend-types';
2
- import { CachedQueryItemsItemTypeTuple, ChildCollectionResources, CollectionResource, ColumnCache, ColumnSet, ColumnSetFactory, ErrorHandlerInterface, ItemEntryService, OptionsToCollectionResource, ParentCachedQueryItemTuple, ParentIdMap, QueryService, RequestColumnsOperationsCacheFactory, RootCollectionOptions, TransactionCache } from '../internal';
2
+ import { ApiRequestColumnArray, CachedQueryItemsItemTypeTuple, CachedQueryItemTypeTuple, ChildCollectionResources, CollectionOptionsBase, CollectionResource, ColumnCache, ColumnSet, ColumnSetFactory, ErrorHandlerInterface, ItemEntryService, OptionsToCollectionResource, ParentIdMap, QueryService, RequestColumnsOperationsCacheFactory, TransactionCache } from '../internal';
3
3
  export type ColumnSetMap<ItemTypeType extends ApiItemType> = {
4
4
  [ColumnSetItemType in ItemTypeType]: ColumnSet<ColumnSetItemType>;
5
5
  };
@@ -14,7 +14,9 @@ export declare class CollectionResourceFactory {
14
14
  /**
15
15
  * @internal
16
16
  */
17
- construct<ItemTypeType extends ApiItemType, OptionsType extends RootCollectionOptions<ItemTypeType>>(parentCachedQueryItemTuple: ParentCachedQueryItemTuple<ItemTypeType>, parentCollectionResource: CollectionResource<any, any, any> | null, transaction: TransactionCache, columnSetMap?: ColumnSetMap<ItemTypeType>): OptionsToCollectionResource<ItemTypeType, OptionsType>;
17
+ construct<ItemTypeType extends ApiItemType, OptionsType extends CollectionOptionsBase<ItemTypeType>>(parentCachedQueryItemTuple: CachedQueryItemTypeTuple<ItemTypeType, OptionsType>, parentCollectionResource: CollectionResource<any, any, any> | null, transaction: TransactionCache, columnSetMap?: ColumnSetMap<ItemTypeType>): OptionsToCollectionResource<ItemTypeType, OptionsType>;
18
18
  constructChildCollectionResources<Children extends ChildCollectionResources | undefined>(cachedQueryItemTypeTuples: CachedQueryItemsItemTypeTuple<ApiItemType>[] | null, parentCollectionResource: CollectionResource<any, any, any> | null, transaction: TransactionCache, columnSetMap?: Partial<ColumnSetMap<ApiItemType>>): ParentIdMap<Children>;
19
- constructColumnSet<ItemTypeType extends ApiItemType>(cachedQueryItemTuple: ParentCachedQueryItemTuple<ItemTypeType>): ColumnSet<ItemTypeType>;
19
+ constructColumnSet<ItemTypeType extends ApiItemType>(cachedQueryItemTuple: CachedQueryItemTypeTuple<ItemTypeType, {
20
+ columns: ApiRequestColumnArray<ItemTypeType>;
21
+ }>): ColumnSet<ItemTypeType>;
20
22
  }
@@ -1,5 +1,24 @@
1
- import { ApiItemType } from '@rentman/backend-types';
2
- import { AggregatedChangesListener, ApiQuery, ApiRequestColumnArray, ApiRequestColumns, ChildCollectionResources, CollectionItemChangesListener, CollectionResource, EntryParent, ItemEntry, ItemResource, ItemTypeColumnId } from '../internal';
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { AggregatedChangesListener, ApiQuery, ApiQueryConditionSimple, ApiRequestColumnArray, ChildCollectionResources, CollectionItemChangesListener, CollectionResource, EntryParent, ItemEntry, ItemResource, ItemTypeColumnId } from '../internal';
3
+ export type ChildrenQuery<ItemTypeType extends ApiItemType> = ApiQueryConditionSimple<ItemTypeType> | {
4
+ operator?: 'and' | 'AND';
5
+ conditions: ApiQueryConditionSimple<ItemTypeType>[];
6
+ };
7
+ /**
8
+ * Note that we're using a limited query format here. This has multiple reasons:
9
+ * - the parent item ID should always be expressed in the type (we could further constrain it using an *and* query),
10
+ * as we don't want the child collection to contain items unrelated to the parent;
11
+ * - the query itself should be locally matchable.
12
+ *
13
+ * These constraints could be relaxed in the future, but do so at your own risk.
14
+ *
15
+ * As we haven't implemented query condition ordering yet, the condition containing the parent item ID should preferably
16
+ * come last. This will generate the most efficient query graph.
17
+ *
18
+ * The children query function currently accepts an array only in order facilitate creating a batch query. We can change
19
+ * this to a single value once we've implemented generating an API query from a query graph (RM4-48176).
20
+ */
21
+ export type ChildrenQueryFunction<ItemTypeType extends ApiItemType> = (parentItemIds: ItemId[]) => ChildrenQuery<ItemTypeType>;
3
22
  export interface CollectionResourceOrder<ItemTypeType extends ApiItemType> {
4
23
  field: ItemTypeColumnId<ItemTypeType>;
5
24
  order?: 'desc' | 'asc';
@@ -17,38 +36,25 @@ type OnRemoveCollectionOption<ItemTypeType extends ApiItemType, RequestColumns e
17
36
  * TODO: We can type this property once we utilize the link tree type.
18
37
  */
19
38
  export type ChildCollectionsOption = {
20
- [ChildItemType in ApiItemType]?: CollectionOptions<ChildItemType, ApiRequestColumnArray<ChildItemType>, {
21
- [GrandChildItemType in ApiItemType]?: CollectionOptions<GrandChildItemType, ApiRequestColumnArray<GrandChildItemType>, {
22
- [GrandGrandChildItemType in ApiItemType]?: CollectionOptions<GrandGrandChildItemType, ApiRequestColumnArray<GrandGrandChildItemType>>;
39
+ [ChildItemType in ApiItemType]?: ChildCollectionOptions<ChildItemType, ApiRequestColumnArray<ChildItemType>, {
40
+ [GrandChildItemType in ApiItemType]?: ChildCollectionOptions<GrandChildItemType, ApiRequestColumnArray<GrandChildItemType>, {
41
+ [GrandGrandChildItemType in ApiItemType]?: ChildCollectionOptions<GrandGrandChildItemType, ApiRequestColumnArray<GrandGrandChildItemType>>;
23
42
  }>;
24
43
  }>;
25
44
  };
26
- /**
27
- * We're not including columns here, because whenever we access the columns, we'd want to do it through the columns
28
- * operations cache.
29
- */
30
- export interface CachedQueryOptions<ItemType extends ApiItemType> {
31
- query?: ApiQuery<ItemType>;
32
- parent?: EntryParent;
33
- order?: CollectionResourceOrder<ItemType>;
45
+ export interface PreventCachingCollectionOption {
34
46
  /**
35
47
  * Prevents a CachedQueryItem from being cached (the CollectionResource will still be cached), you can use this when you fetch an Itemtype for which the backend doesn't send socket messages (so it never automatically updates)
36
48
  */
37
49
  preventCaching?: boolean;
38
50
  }
39
- export interface CachedQueryOptionsWithColumns<ItemType extends ApiItemType> extends CachedQueryOptions<ItemType> {
40
- columns: ApiRequestColumns<ItemType>;
41
- }
42
51
  /**
43
- * The main differences between {@link CollectionOptions} and {@link RootCollectionOptions} are:
44
- * - {@link RootCollectionOptions} includes aggregated changes listener options;
45
- * - {@link RootCollectionOptions} requires either `query` or `parent`.
46
- *
47
- * {@link RootCollectionOptions} is used for the `getCollection` method in the transaction cache. Generally, we should
48
- * prefer the use of the less complex {@link CollectionOptions}.
52
+ * Does not include `query` / `parent` properties.
49
53
  */
50
- export interface CollectionOptions<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends CachedQueryOptions<ItemType> {
54
+ export interface CollectionOptionsBase<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends PreventCachingCollectionOption {
51
55
  columns: RequestColumns;
56
+ children?: Children;
57
+ order?: CollectionResourceOrder<ItemType>;
52
58
  /**
53
59
  * @deprecated
54
60
  */
@@ -61,16 +67,21 @@ export interface CollectionOptions<ItemType extends ApiItemType, RequestColumns
61
67
  * @deprecated
62
68
  */
63
69
  onChange?: CollectionItemChangesListener<CollectionResource<ItemType, any, any>>;
64
- /**
65
- * This allows us to add custom data to the options. See: https://rentman.atlassian.net/browse/RM4-19122
66
- * @deprecated
67
- */
68
- custom?: any;
69
70
  callOnAddWithInitialItems?: boolean;
70
- children?: Children;
71
- abortSignal?: AbortSignal;
72
71
  }
73
- export interface RootCollectionOptionsBase<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends CollectionOptions<ItemType, RequestColumns, Children> {
72
+ export interface ChildCollectionOptions<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends CollectionOptionsBase<ItemType, RequestColumns, Children> {
73
+ query?: ApiQuery<ItemType> | ChildrenQueryFunction<ItemType>;
74
+ }
75
+ /**
76
+ * When we process child collections options, we create a separate set of options for each child collection. The
77
+ * `parent` property is determined now.
78
+ */
79
+ export interface ProcessedChildCollectionOptions<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends ChildCollectionOptions<ItemType, RequestColumns, Children> {
80
+ parent: EntryParent;
81
+ }
82
+ export interface RootCollectionOptionsBase<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends CollectionOptionsBase<ItemType, RequestColumns, Children> {
83
+ query?: ApiQuery<ItemType>;
84
+ parent?: EntryParent;
74
85
  /**
75
86
  * Note: When using the `changesListener` option the `context` parameter is untyped. (This would require self
76
87
  * reference.)
@@ -80,6 +91,12 @@ export interface RootCollectionOptionsBase<ItemType extends ApiItemType, Request
80
91
  */
81
92
  changesListener?: AggregatedChangesListener<CollectionResource<ItemType, any, any>, any>;
82
93
  immediatelyCallChangesListener?: boolean;
94
+ abortSignal?: AbortSignal;
95
+ /**
96
+ * This allows us to add custom data to the options. See: https://rentman.atlassian.net/browse/RM4-19122
97
+ * @deprecated
98
+ */
99
+ custom?: any;
83
100
  }
84
101
  /**
85
102
  * Used in {@link OrderedCollectionResource}.
@@ -93,19 +110,11 @@ export interface RootCollectionOptionsWithOrder<ItemTypeType extends ApiItemType
93
110
  export interface RootCollectionOptionsWithLimit<ItemTypeType extends ApiItemType> extends RootCollectionOptionsWithOrder<ItemTypeType> {
94
111
  order: CollectionResourceOrderWithLimit<ItemTypeType>;
95
112
  }
96
- interface RootCollectionOptionsWithQuery<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption> extends RootCollectionOptionsBase<ItemType, RequestColumns, Children> {
113
+ export interface RootCollectionOptionsWithQuery<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption> extends RootCollectionOptionsBase<ItemType, RequestColumns, Children> {
97
114
  query: ApiQuery<ItemType>;
98
115
  }
99
116
  export interface RootCollectionOptionsWithParent<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption> extends RootCollectionOptionsBase<ItemType, RequestColumns, Children> {
100
117
  parent: EntryParent;
101
118
  }
102
- /**
103
- * The main differences between {@link CollectionOptions} and {@link RootCollectionOptions} are:
104
- * - {@link RootCollectionOptions} includes aggregated changes listener options;
105
- * - {@link RootCollectionOptions} requires either `query` or `parent`.
106
- *
107
- * {@link RootCollectionOptions} is used for the `getCollection` method in the transaction cache. Generally, we should
108
- * prefer the use of the less complex {@link CollectionOptions}.
109
- */
110
119
  export type RootCollectionOptions<ItemType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemType> = ApiRequestColumnArray<ItemType>, Children extends ChildCollectionsOption = ChildCollectionsOption> = RootCollectionOptionsWithQuery<ItemType, RequestColumns, Children> | RootCollectionOptionsWithParent<ItemType, RequestColumns, Children>;
111
120
  export {};
@@ -1,7 +1,7 @@
1
1
  import { WritableSignal } from '@angular/core';
2
2
  import { ApiItemType, ItemId } from '@rentman/backend-types';
3
3
  import { RootQueryNode } from '../classes/matcher/RootQueryNode';
4
- import { AbstractCache, AggregatedChangesByListener, AggregatedChangesListener, AggregatedChangesListenerFunction, ApiRequestColumnArray, CachedQueryItem, ChildCollectionResources, CollectionEntry, CollectionItemChangesListenerContext, CollectionOptions, CollectionQuery, CollectionResourceFactory, ColumnSet, DeregFunction, ItemEntry, ItemIdConversionMap, ItemResource, ItemTypeColumnIds, ParentChangesDelta, ParentIdMap, ResponseColumnItemTypeMap, RootCollectionOptionsBase, TransactionCache } from '../internal';
4
+ import { AbstractCache, AggregatedChangesByListener, AggregatedChangesListener, AggregatedChangesListenerFunction, ApiRequestColumnArray, CachedQueryItem, CachedQueryOptionsWithChildren, ChildCollectionResources, CollectionEntry, CollectionItemChangesListenerContext, CollectionQuery, CollectionResourceFactory, ColumnSet, DeregFunction, ItemEntry, ItemIdConversionMap, ItemResource, ItemTypeColumnIds, ParentChangesDelta, ParentIdMap, ResponseColumnItemTypeMap, RootCollectionOptionsBase, TransactionCache } from '../internal';
5
5
  export type CollectionToItemResource<CollectionResourceType extends {
6
6
  items: any[];
7
7
  }> = CollectionResourceType['items'][number];
@@ -168,7 +168,7 @@ export declare class CollectionResource<ItemTypeType extends ApiItemType, Reques
168
168
  * @param itemEntriesToBeAdded - The item entries are assumed not to be in the collection yet.
169
169
  */
170
170
  protected addItemResources(itemEntriesToBeAdded: Iterable<ItemEntry<ItemTypeType>>, childCollections: ParentIdMap<Children>): ItemResource<ItemTypeType, RequestColumns, Children>[];
171
- protected fetchCachedQuery(options?: CollectionOptions<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
171
+ protected fetchCachedQuery(options?: CachedQueryOptionsWithChildren<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
172
172
  private registerOptionsChangesListeners;
173
173
  private __registerCallback;
174
174
  }
@@ -1,5 +1,5 @@
1
1
  import { ApiItemType } from '@rentman/backend-types';
2
- import { ApiRequestColumnArray, ChildCollectionsOption, EntryParent, FieldMap, ItemAggregatedChangesListener, ItemResource, RequestParameters } from '../internal';
2
+ import { ApiRequestColumnArray, ChildCollectionsOption, EntryParent, FieldMap, ItemAggregatedChangesListener, ItemResource, PreventCachingCollectionOption, RequestParameters } from '../internal';
3
3
  export interface ItemOptions<ItemTypeType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemTypeType> = ApiRequestColumnArray<ItemTypeType>, Children extends ChildCollectionsOption = ChildCollectionsOption> {
4
4
  columns: RequestColumns;
5
5
  children?: Children;
@@ -19,7 +19,6 @@ export interface NewItemOptions<ItemTypeType extends ApiItemType, RequestColumns
19
19
  templateOptions?: Partial<RequestParameters<ItemTypeType>>;
20
20
  defaultValues?: Partial<FieldMap<ItemTypeType>>;
21
21
  }
22
- export interface ItemsByQueryOptions<ItemTypeType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemTypeType> = ApiRequestColumnArray<ItemTypeType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends ItemOptions<ItemTypeType, RequestColumns, Children> {
22
+ export interface ItemsByQueryOptions<ItemTypeType extends ApiItemType, RequestColumns extends ApiRequestColumnArray<ItemTypeType> = ApiRequestColumnArray<ItemTypeType>, Children extends ChildCollectionsOption = ChildCollectionsOption> extends ItemOptions<ItemTypeType, RequestColumns, Children>, PreventCachingCollectionOption {
23
23
  parent?: EntryParent;
24
- preventCaching?: boolean;
25
24
  }
@@ -40,7 +40,7 @@ type ApiQueryConditionSubQueryUnion<ItemTypeType extends ApiItemType> = {
40
40
  [ColumnId in keyof ItemApiFields<ItemTypeType>]: ApiQueryConditionSubQuery<ItemTypeType, ColumnId> | ApiQueryConditionExtendedSubQuery<ItemTypeType, ColumnId, ApiItemType, any>;
41
41
  }[keyof ItemApiFields<ItemTypeType>];
42
42
  type ApiFieldToQueryConditionSimple<ColumnId extends string | number | symbol, ApiFieldType> = ApiFieldType extends QueryableApiField ? ApiQueryConditionBaseSimple<ColumnId, ApiFieldToValueComparatorTuple<ApiFieldType>, ApiFieldToNullType<ApiFieldType>> : never;
43
- type ApiQueryConditionSimple<ItemTypeType extends ApiItemType> = {
43
+ export type ApiQueryConditionSimple<ItemTypeType extends ApiItemType> = {
44
44
  [ColumnId in keyof ApiFields[ItemTypeType]]: ApiFieldToQueryConditionSimple<ColumnId, ApiFields[ItemTypeType][ColumnId]>;
45
45
  }[keyof ApiFields[ItemTypeType]];
46
46
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rentman/rm-core",
3
- "version": "66.1.10",
3
+ "version": "66.2.0-RM4-48655",
4
4
  "description": "Rentman core functionalities",
5
5
  "main": "./dist/rm-core.js",
6
6
  "types": "./dist/types/src/index.d.ts",