@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/package.json +1 -1
- package/src/index.ts +2 -1
- package/src/modules/card/composables/useCardComponent.ts +9 -0
- package/src/modules/card/composables/useCardStoreProvider.ts +26 -0
- package/src/modules/card/index.ts +1 -0
- package/src/modules/card/stores/__tests__/createCardStore.spec.ts +73 -0
- package/src/modules/card/stores/createCardStore.ts +22 -1
- package/src/modules/card/types/CardStore.types.ts +8 -0
- package/src/modules/table/__tests__/createTableStore.spec.ts +76 -0
- package/src/modules/table/__tests__/useNestedTableList.spec.ts +218 -0
- package/src/modules/table/composables/useNestedTableList.ts +57 -0
- package/src/modules/table/createTableStore.store.ts +37 -0
- package/types/.tsbuildinfo +1 -1
- package/types/index.d.ts +2 -1
- package/types/modules/card/composables/useCardStoreProvider.d.ts +18 -0
- package/types/modules/card/index.d.ts +1 -0
- package/types/modules/card/stores/createCardStore.d.ts +10 -1
- package/types/modules/card/types/CardStore.types.d.ts +7 -0
- package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +2 -0
- package/types/modules/permissions-page/stores/createPermissionsStore.d.ts +2 -0
- package/types/modules/table/composables/useNestedTableList.d.ts +27 -0
- package/types/modules/table/createTableStore.store.d.ts +4 -0
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>;
|