@webitel/ui-datalist 26.8.4 → 26.8.5

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/types/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
+ import { useNestedTableList } from './modules/table/composables/useNestedTableList';
1
2
  import { createTableStore } from './modules/table/createTableStore.store';
2
3
  import type { DatalistTableHeader } from './modules/types/tableStore.types';
3
4
  export type { DatalistTableHeader };
4
- export { createTableStore };
5
+ export { createTableStore, useNestedTableList };
@@ -0,0 +1,18 @@
1
+ import { type InjectionKey } from 'vue';
2
+ import type { CardItemId, NestedList } from '../types/CardStore.types';
3
+ /**
4
+ * What a nested tab needs from the card page it lives in: the record it is a
5
+ * tab of, and somewhere to register its list so the card can empty it.
6
+ */
7
+ export interface NestedListsOwner {
8
+ itemId: CardItemId;
9
+ registerNestedList: (list: NestedList) => void;
10
+ }
11
+ export declare const CardStoreKey: InjectionKey<NestedListsOwner>;
12
+ /**
13
+ * `useCardComponent` provides the card's own store, so the tabs below it need
14
+ * no wiring of their own — see `useNestedTableList`.
15
+ */
16
+ export declare const provideCardStore: (store: NestedListsOwner) => void;
17
+ /** `null` outside a card page, where a list has no owner to reset it */
18
+ export declare const useInjectedCardStore: () => NestedListsOwner | null;
@@ -1,6 +1,7 @@
1
1
  export * from './composables/useCardAnyFieldEditedWatcher';
2
2
  export * from './composables/useCardComponent';
3
3
  export * from './composables/useCardListNavigation';
4
+ export * from './composables/useCardStoreProvider';
4
5
  export * from './composables/useCardTabs';
5
6
  export * from './composables/useNestedCardComponent';
6
7
  export * from './stores/createCardStore';
@@ -2,7 +2,7 @@ import { type RegleSchemaBehaviourOptions } from '@regle/schemas';
2
2
  import type { ApiModule } from '@webitel/ui-sdk/src/api/types/ApiModule';
3
3
  import type { MaybeRef } from 'vue';
4
4
  import type { z } from 'zod/v4';
5
- import type { CardItemId, CardParentId } from '../types/CardStore.types';
5
+ import type { CardItemId, CardParentId, NestedList } from '../types/CardStore.types';
6
6
  export declare const createCardStore: <Entity extends {
7
7
  id?: string | number;
8
8
  } = {
@@ -31,6 +31,7 @@ export declare const createCardStore: <Entity extends {
31
31
  }) => Promise<void>;
32
32
  saveItem: (draft: Entity) => Promise<void>;
33
33
  $reset: () => void;
34
+ registerNestedList: (list: NestedList) => void;
34
35
  }, keyof ({
35
36
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
36
37
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -46,6 +47,7 @@ export declare const createCardStore: <Entity extends {
46
47
  }) => Promise<void>;
47
48
  saveItem: (draft: Entity) => Promise<void>;
48
49
  $reset: () => void;
50
+ registerNestedList: (list: NestedList) => void;
49
51
  } extends infer T ? { [K in keyof T as {
50
52
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
51
53
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -61,6 +63,7 @@ export declare const createCardStore: <Entity extends {
61
63
  }) => Promise<void>;
62
64
  saveItem: (draft: Entity) => Promise<void>;
63
65
  $reset: () => void;
66
+ registerNestedList: (list: NestedList) => void;
64
67
  }[K] extends import("pinia")._Method | import("vue").ComputedRef<any> ? never : K]: any; } : never)>, Pick<{
65
68
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
66
69
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -76,6 +79,7 @@ export declare const createCardStore: <Entity extends {
76
79
  }) => Promise<void>;
77
80
  saveItem: (draft: Entity) => Promise<void>;
78
81
  $reset: () => void;
82
+ registerNestedList: (list: NestedList) => void;
79
83
  }, keyof ({
80
84
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
81
85
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -91,6 +95,7 @@ export declare const createCardStore: <Entity extends {
91
95
  }) => Promise<void>;
92
96
  saveItem: (draft: Entity) => Promise<void>;
93
97
  $reset: () => void;
98
+ registerNestedList: (list: NestedList) => void;
94
99
  } extends infer T_1 ? { [K_1 in keyof T_1 as {
95
100
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
96
101
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -106,6 +111,7 @@ export declare const createCardStore: <Entity extends {
106
111
  }) => Promise<void>;
107
112
  saveItem: (draft: Entity) => Promise<void>;
108
113
  $reset: () => void;
114
+ registerNestedList: (list: NestedList) => void;
109
115
  }[K_1] extends import("vue").ComputedRef<any> ? K_1 : never]: any; } : never)>, Pick<{
110
116
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
111
117
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -121,6 +127,7 @@ export declare const createCardStore: <Entity extends {
121
127
  }) => Promise<void>;
122
128
  saveItem: (draft: Entity) => Promise<void>;
123
129
  $reset: () => void;
130
+ registerNestedList: (list: NestedList) => void;
124
131
  }, keyof ({
125
132
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
126
133
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -136,6 +143,7 @@ export declare const createCardStore: <Entity extends {
136
143
  }) => Promise<void>;
137
144
  saveItem: (draft: Entity) => Promise<void>;
138
145
  $reset: () => void;
146
+ registerNestedList: (list: NestedList) => void;
139
147
  } extends infer T_2 ? { [K_2 in keyof T_2 as {
140
148
  parentId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
141
149
  itemId: import("vue").Ref<CardItemId | undefined, CardItemId | undefined>;
@@ -151,4 +159,5 @@ export declare const createCardStore: <Entity extends {
151
159
  }) => Promise<void>;
152
160
  saveItem: (draft: Entity) => Promise<void>;
153
161
  $reset: () => void;
162
+ registerNestedList: (list: NestedList) => void;
154
163
  }[K_2] extends import("pinia")._Method ? K_2 : never]: any; } : never)>>;
@@ -1,2 +1,9 @@
1
1
  export type CardItemId = string | number | null;
2
2
  export type CardParentId = CardItemId;
3
+ /**
4
+ * What a card store needs from the list of one of its nested tabs: the ability
5
+ * to empty it when the card page goes away.
6
+ */
7
+ export interface NestedList {
8
+ $reset: () => void;
9
+ }
@@ -4,6 +4,7 @@ export declare const filterPresetsStoreBody: (namespace?: string) => {
4
4
  setupPresetPersistence: () => Promise<void>;
5
5
  resetPreset: () => Promise<void>;
6
6
  isStoreSetUp: import("vue").Ref<boolean, boolean>;
7
+ isNested: import("vue").Ref<boolean, boolean>;
7
8
  dataList: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
8
9
  selected: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
9
10
  error: import("vue").Ref<unknown, unknown>;
@@ -132,6 +133,7 @@ export declare const filterPresetsStoreBody: (namespace?: string) => {
132
133
  initialize: ({ parentId: storeParentId, }?: {
133
134
  parentId?: string | number;
134
135
  }) => Promise<void>;
136
+ $reset: () => void;
135
137
  syncPersistence: () => Promise<void>;
136
138
  loadDataList: ({ withLoading, }?: import("../../types/tableStore.types").LoadDataListOptions) => Promise<void>;
137
139
  appendToDataList: () => Promise<void>;
@@ -13,6 +13,7 @@ export declare const permissionsStoreBody: (namespace: string, config: useTableS
13
13
  }) => Promise<void>;
14
14
  $reset: () => void;
15
15
  isStoreSetUp: import("vue").Ref<boolean, boolean>;
16
+ isNested: import("vue").Ref<boolean, boolean>;
16
17
  dataList: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
17
18
  selected: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
18
19
  error: import("vue").Ref<unknown, unknown>;
@@ -182,6 +183,7 @@ export declare const createPermissionsStore: (namespace: string, config: Omit<us
182
183
  }) => Promise<void>;
183
184
  $reset: () => void;
184
185
  isStoreSetUp: import("vue").Ref<boolean, boolean>;
186
+ isNested: import("vue").Ref<boolean, boolean>;
185
187
  dataList: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
186
188
  selected: import("vue").Ref<PermissionEntity[], PermissionEntity[]>;
187
189
  error: import("vue").Ref<unknown, unknown>;
@@ -0,0 +1,27 @@
1
+ import type { StoreDefinition } from 'pinia';
2
+ import { type MaybeRefOrGetter } from 'vue';
3
+ import type { CardItemId } from '../../card/types/CardStore.types';
4
+ /**
5
+ * The list of a card page's nested tab.
6
+ *
7
+ * The store is shared by every card of its kind and outlives all of them, so a
8
+ * tab that read it directly showed the rows of whichever record was opened
9
+ * before — and a card for an unsaved record, having no id to initialize with,
10
+ * showed them until it was saved.
11
+ *
12
+ * Registering the list with the card store makes the card responsible for
13
+ * emptying it, and the parent to load comes from the card's own `itemId`: it
14
+ * arrives late for a record created from a nested tab, and the list follows.
15
+ *
16
+ * ```ts
17
+ * const tableStore = useNestedTableList({ useTableStore: useQueueBucketsStore });
18
+ * const { dataList, isLoading } = storeToRefs(tableStore);
19
+ * ```
20
+ *
21
+ * [WTEL-10350](https://webitel.atlassian.net/browse/WTEL-10350)
22
+ */
23
+ export declare const useNestedTableList: ({ useTableStore, parentId, }: {
24
+ useTableStore: StoreDefinition;
25
+ /** only where the parent is not the card's own record */
26
+ parentId?: MaybeRefOrGetter<CardItemId>;
27
+ }) => import("pinia").Store<string, import("pinia").StateTree, import("pinia")._GettersTree<import("pinia").StateTree>, import("pinia")._ActionsTree>;
@@ -3,6 +3,7 @@ import type { Identifiable } from '../types/createDatalistStore.types';
3
3
  import type { LoadDataListOptions, PatchItemPropertyParams, useTableStoreConfig } from '../types/tableStore.types';
4
4
  export declare const tableStoreBody: <Entity extends Identifiable>(namespace: string, config: useTableStoreConfig<Entity>) => {
5
5
  isStoreSetUp: Ref<boolean, boolean>;
6
+ isNested: Ref<boolean, boolean>;
6
7
  dataList: Ref<Entity[], Entity[]>;
7
8
  selected: Ref<Entity[], Entity[]>;
8
9
  error: Ref<unknown, unknown>;
@@ -131,6 +132,7 @@ export declare const tableStoreBody: <Entity extends Identifiable>(namespace: st
131
132
  initialize: ({ parentId: storeParentId, }?: {
132
133
  parentId?: string | number;
133
134
  }) => Promise<void>;
135
+ $reset: () => void;
134
136
  syncPersistence: () => Promise<void>;
135
137
  loadDataList: ({ withLoading, }?: LoadDataListOptions) => Promise<void>;
136
138
  appendToDataList: () => Promise<void>;
@@ -163,6 +165,7 @@ export declare const tableStoreBody: <Entity extends Identifiable>(namespace: st
163
165
  };
164
166
  export declare const createTableStore: <Entity extends Identifiable>(namespace: string, config: useTableStoreConfig<Entity>) => import("../types/createDatalistStore.types").PatchableStoreFactory<{
165
167
  isStoreSetUp: Ref<boolean, boolean>;
168
+ isNested: Ref<boolean, boolean>;
166
169
  dataList: Ref<Entity[], Entity[]>;
167
170
  selected: Ref<Entity[], Entity[]>;
168
171
  error: Ref<unknown, unknown>;
@@ -291,6 +294,7 @@ export declare const createTableStore: <Entity extends Identifiable>(namespace:
291
294
  initialize: ({ parentId: storeParentId, }?: {
292
295
  parentId?: string | number;
293
296
  }) => Promise<void>;
297
+ $reset: () => void;
294
298
  syncPersistence: () => Promise<void>;
295
299
  loadDataList: ({ withLoading, }?: LoadDataListOptions) => Promise<void>;
296
300
  appendToDataList: () => Promise<void>;