@webitel/ui-datalist 1.1.52 → 1.1.54

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-datalist",
3
- "version": "1.1.52",
3
+ "version": "1.1.54",
4
4
  "description": "Toolkit for building data lists in webitel ui system",
5
5
  "scripts": {
6
6
  "build:types": "vue-tsc -b tsconfig.build.json",
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  import { createTableStore } from './modules/table/createTableStore.store';
2
+ import type { DatalistTableHeader } from './modules/types/tableStore.types';
2
3
 
4
+ export type { DatalistTableHeader };
3
5
  export { createTableStore };
@@ -61,10 +61,8 @@ export const createDatalistStore = <
61
61
  }
62
62
 
63
63
  if (thisStoreType === DatalistStoreProvider.Pinia) {
64
- // TODO(types): a Pinia StoreDefinition is a valid store factory (callable,
65
- // returns a store exposing `$patch`), but its generic-extracted shape does
66
- // not structurally match PatchableStoreFactory. Reconcile the two factory
67
- // types instead of asserting here.
64
+ // Pinia StoreDefinition is a valid PatchableStoreFactory at runtime;
65
+ // PatchableStore includes StoreGeneric so consumers can use storeToRefs.
68
66
  return definePiniaStore(namespace, () =>
69
67
  storeBody({
70
68
  ...config,
@@ -1,12 +1,26 @@
1
1
  import { ref } from 'vue';
2
2
  import type { EnginePresetQuery } from 'webitel-sdk';
3
3
 
4
+ import { createDatalistStore } from '../../_shared/createDatalistStore';
4
5
  import { PersistedStorageType } from '../../persist/PersistedStorage.types';
5
6
  import { usePersistedStorage } from '../../persist/usePersistedStorage';
6
7
  import { tableStoreBody } from '../../table/createTableStore.store';
8
+ import type { PatchableStoreFactory } from '../../types/createDatalistStore.types';
7
9
  import PresetQueryAPI from '../api/PresetQuery';
8
10
  import { headers } from './headers/headers';
9
11
 
12
+ const presetsTableConfig = {
13
+ /* PresetQueryAPI's add/update take preset-specific params, so only the
14
+ ApiModule-conforming methods the table store actually calls go in */
15
+ apiModule: {
16
+ getList: PresetQueryAPI.getList,
17
+ get: PresetQueryAPI.get,
18
+ delete: PresetQueryAPI.delete,
19
+ },
20
+ headers,
21
+ disablePersistence: true as const,
22
+ };
23
+
10
24
  export const filterPresetsStoreBody = (namespace = 'presets') => {
11
25
  const presetsNamespace = namespace.endsWith('presets')
12
26
  ? namespace
@@ -40,17 +54,10 @@ export const filterPresetsStoreBody = (namespace = 'presets') => {
40
54
  await restorePreset();
41
55
  };
42
56
 
43
- const tableStore = tableStoreBody<EnginePresetQuery>(presetsNamespace, {
44
- /* PresetQueryAPI's add/update take preset-specific params, so only the
45
- ApiModule-conforming methods the table store actually calls go in */
46
- apiModule: {
47
- getList: PresetQueryAPI.getList,
48
- get: PresetQueryAPI.get,
49
- delete: PresetQueryAPI.delete,
50
- },
51
- headers,
52
- disablePersistence: true,
53
- });
57
+ const tableStore = tableStoreBody<EnginePresetQuery>(
58
+ presetsNamespace,
59
+ presetsTableConfig,
60
+ );
54
61
 
55
62
  const resetPreset = () => {
56
63
  presetId.value = null;
@@ -65,6 +72,23 @@ export const filterPresetsStoreBody = (namespace = 'presets') => {
65
72
  };
66
73
  };
67
74
 
68
- export const createFilterPresetsStore = (namespace: string) => {
69
- return () => filterPresetsStoreBody(namespace);
75
+ export type FilterPresetsStore = ReturnType<typeof filterPresetsStoreBody>;
76
+
77
+ /**
78
+ * Pinia store factory (via createDatalistStore), same pattern as createTableStore.
79
+ * Previously returned a plain object factory — that broke storeToRefs / props typed
80
+ * as `() => StoreGeneric` and forced app-level asPiniaStoreFactory casts.
81
+ */
82
+ export const createFilterPresetsStore = (
83
+ namespace: string,
84
+ ): PatchableStoreFactory<FilterPresetsStore> => {
85
+ const presetsNamespace = namespace.endsWith('presets')
86
+ ? namespace
87
+ : `${namespace}/presets`;
88
+
89
+ return createDatalistStore<FilterPresetsStore, EnginePresetQuery>({
90
+ namespace: presetsNamespace,
91
+ config: presetsTableConfig,
92
+ storeBody: () => filterPresetsStoreBody(namespace),
93
+ });
70
94
  };
@@ -1,3 +1,4 @@
1
+ import type { StoreGeneric } from 'pinia';
1
2
  import type { Ref } from 'vue';
2
3
 
3
4
  import type { useTableStoreConfig } from './tableStore.types';
@@ -32,10 +33,15 @@ export interface CreateDatalistStoreParams<
32
33
  }
33
34
 
34
35
  /**
35
- * PatchableStore is needed to indicate that the store we are using also has a storePatch method (previously $patch)
36
- * */
37
- export type PatchableStore<T extends StoreInstance> = T & {
38
- $patch: (val: Patch) => void;
39
- };
36
+ * PatchableStore is needed to indicate that the store we are using also has a storePatch method (previously $patch).
37
+ *
38
+ * Intersects StoreGeneric so pinia helpers (`storeToRefs`) and props typed as
39
+ * `() => StoreGeneric` accept the factory result — runtime pinia stores already
40
+ * satisfy StoreGeneric; the previous plain-record shape forced app-level casts.
41
+ */
42
+ export type PatchableStore<T extends StoreInstance> = T &
43
+ StoreGeneric & {
44
+ $patch: (val: Patch) => void;
45
+ };
40
46
  export type PatchableStoreFactory<T extends StoreInstance> =
41
47
  () => PatchableStore<T>;