@gravity-ui/dashkit 9.1.4 → 9.2.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.
Files changed (61) hide show
  1. package/build/cjs/components/GridLayout/GridLayout.js +3 -3
  2. package/build/cjs/components/GridLayout/GridLayout.js.map +1 -1
  3. package/build/cjs/components/MobileLayout/MobileLayout.js +4 -4
  4. package/build/cjs/components/MobileLayout/MobileLayout.js.map +1 -1
  5. package/build/cjs/components/MobileLayout/helpers.d.ts +1 -1
  6. package/build/cjs/components/MobileLayout/helpers.js +2 -2
  7. package/build/cjs/components/MobileLayout/helpers.js.map +1 -1
  8. package/build/cjs/context/DashKitContext.d.ts +1 -0
  9. package/build/cjs/context/DashKitContext.js.map +1 -1
  10. package/build/cjs/hocs/withContext.js +7 -3
  11. package/build/cjs/hocs/withContext.js.map +1 -1
  12. package/build/cjs/hooks/useCalcLayout.d.ts +2 -13
  13. package/build/cjs/hooks/useCalcLayout.js +12 -4
  14. package/build/cjs/hooks/useCalcLayout.js.map +1 -1
  15. package/build/cjs/shared/modules/__tests__/global-items.test.d.ts +1 -0
  16. package/build/cjs/shared/modules/__tests__/global-items.test.js +372 -0
  17. package/build/cjs/shared/modules/__tests__/global-items.test.js.map +1 -0
  18. package/build/cjs/shared/modules/helpers.d.ts +1 -0
  19. package/build/cjs/shared/modules/helpers.js +10 -2
  20. package/build/cjs/shared/modules/helpers.js.map +1 -1
  21. package/build/cjs/shared/modules/state-and-params.js +7 -2
  22. package/build/cjs/shared/modules/state-and-params.js.map +1 -1
  23. package/build/cjs/shared/modules/uniq-id.js +1 -1
  24. package/build/cjs/shared/modules/uniq-id.js.map +1 -1
  25. package/build/cjs/shared/types/config.d.ts +1 -0
  26. package/build/cjs/shared/types/config.js.map +1 -1
  27. package/build/cjs/typings/config.d.ts +1 -0
  28. package/build/cjs/typings/config.js.map +1 -1
  29. package/build/cjs/utils/update-manager.js +66 -36
  30. package/build/cjs/utils/update-manager.js.map +1 -1
  31. package/build/esm/components/GridLayout/GridLayout.js +3 -3
  32. package/build/esm/components/GridLayout/GridLayout.js.map +1 -1
  33. package/build/esm/components/MobileLayout/MobileLayout.js +4 -4
  34. package/build/esm/components/MobileLayout/MobileLayout.js.map +1 -1
  35. package/build/esm/components/MobileLayout/helpers.d.ts +1 -1
  36. package/build/esm/components/MobileLayout/helpers.js +2 -2
  37. package/build/esm/components/MobileLayout/helpers.js.map +1 -1
  38. package/build/esm/context/DashKitContext.d.ts +1 -0
  39. package/build/esm/context/DashKitContext.js.map +1 -1
  40. package/build/esm/hocs/withContext.js +8 -4
  41. package/build/esm/hocs/withContext.js.map +1 -1
  42. package/build/esm/hooks/useCalcLayout.d.ts +2 -13
  43. package/build/esm/hooks/useCalcLayout.js +12 -4
  44. package/build/esm/hooks/useCalcLayout.js.map +1 -1
  45. package/build/esm/shared/modules/__tests__/global-items.test.d.ts +1 -0
  46. package/build/esm/shared/modules/__tests__/global-items.test.js +370 -0
  47. package/build/esm/shared/modules/__tests__/global-items.test.js.map +1 -0
  48. package/build/esm/shared/modules/helpers.d.ts +1 -0
  49. package/build/esm/shared/modules/helpers.js +9 -2
  50. package/build/esm/shared/modules/helpers.js.map +1 -1
  51. package/build/esm/shared/modules/state-and-params.js +8 -3
  52. package/build/esm/shared/modules/state-and-params.js.map +1 -1
  53. package/build/esm/shared/modules/uniq-id.js +2 -2
  54. package/build/esm/shared/modules/uniq-id.js.map +1 -1
  55. package/build/esm/shared/types/config.d.ts +1 -0
  56. package/build/esm/shared/types/config.js.map +1 -1
  57. package/build/esm/typings/config.d.ts +1 -0
  58. package/build/esm/typings/config.js.map +1 -1
  59. package/build/esm/utils/update-manager.js +67 -37
  60. package/build/esm/utils/update-manager.js.map +1 -1
  61. package/package.json +1 -1
@@ -1,14 +1,3 @@
1
- import type { Config } from "../shared/index.js";
1
+ import { type Config, type ConfigLayout } from "../shared/index.js";
2
2
  import { RegisterManager } from "../utils/index.js";
3
- export declare const useCalcPropsLayout: (config: Config, registerManager: RegisterManager) => {
4
- i: string;
5
- h: number;
6
- w: number;
7
- x: number;
8
- y: number;
9
- parent?: string;
10
- minW?: number;
11
- minH?: number;
12
- maxW?: number | undefined;
13
- maxH?: number | undefined;
14
- }[];
3
+ export declare const useCalcPropsLayout: (config: Config, registerManager: RegisterManager) => ConfigLayout[];
@@ -4,11 +4,19 @@ exports.useCalcPropsLayout = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
6
  const isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual.js"));
7
+ const shared_1 = require("../shared/index.js");
7
8
  function onUpdatePropsConfig(config, registerManager) {
8
- return config.layout.map((itemLayout, i) => {
9
- const { type } = config.items[i];
10
- return Object.assign(Object.assign({}, registerManager.getItem(type).defaultLayout), itemLayout);
11
- });
9
+ const configItems = (0, shared_1.getAllConfigItems)(config);
10
+ return config.layout.reduce((acc, itemLayout, i) => {
11
+ const item = configItems[i];
12
+ const foundItem = item && item.id === itemLayout.i
13
+ ? item
14
+ : configItems.find((configItem) => configItem.id === itemLayout.i);
15
+ if (foundItem) {
16
+ acc.push(Object.assign(Object.assign({}, registerManager.getItem(foundItem.type).defaultLayout), itemLayout));
17
+ }
18
+ return acc;
19
+ }, []);
12
20
  }
13
21
  const useCalcPropsLayout = (config, registerManager) => {
14
22
  const [prevConfig, setPrevConfig] = react_1.default.useState(config);
@@ -1 +1 @@
1
- {"version":3,"file":"useCalcLayout.js","sourceRoot":"../../../src","sources":["hooks/useCalcLayout.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAE1B,wEAAqC;AAKrC,SAAS,mBAAmB,CAAC,MAAc,EAAE,eAAgC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,uCACO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,GAC3C,UAAU,EACf;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,eAAgC,EAAE,EAAE;IACnF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAE5F,IAAI,CAAC,IAAA,iBAAO,EAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEF,yFAAyF;AACzF,uEAAuE;AAEvE,qHAAqH;AACrH,0GAA0G;AAC1G,iHAAiH;AACjH,gHAAgH;AAChH,2GAA2G;AAC3G,6EAA6E;AAE7E,KAAK","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\n\nimport type {Config} from '../shared';\nimport {RegisterManager} from '../utils';\n\nfunction onUpdatePropsConfig(config: Config, registerManager: RegisterManager) {\n return config.layout.map((itemLayout, i) => {\n const {type} = config.items[i];\n return {\n ...registerManager.getItem(type).defaultLayout,\n ...itemLayout,\n };\n });\n}\n\nexport const useCalcPropsLayout = (config: Config, registerManager: RegisterManager) => {\n const [prevConfig, setPrevConfig] = React.useState(config);\n const [layout, updateLayout] = React.useState(onUpdatePropsConfig(config, registerManager));\n\n if (!isEqual(prevConfig.layout, config.layout)) {\n setPrevConfig(config);\n updateLayout(onUpdatePropsConfig(config, registerManager));\n }\n\n return layout;\n};\n\n// export const useManageLayout = (config: Config, registerManager: RegisterManager) => {\n// const propsLayout = useCalcPropsLayout(config, registerManager);\n\n// // так как мы не хотим хранить параметры виджета с активированной автовысотой в сторе и на сервере, актуальный\n// // (видимый юзером в конкретный момент времени) лэйаут (массив объектов с данными о ширине, высоте,\n// // расположении конкретного виджета на сетке) будет храниться в стейте, но, для того, чтобы в стор попадал\n// // лэйаут без учета вижетов с активированной автовысотой, в момент \"подстройки\" высоты виджета значение h\n// // (высота) из конфига будет запоминаться в originalLayouts, новое значение высоты в adjustedLayouts\n// const [currentLayout, setCurrentLayout] = React.useState(propsLayout);\n\n// };\n"]}
1
+ {"version":3,"file":"useCalcLayout.js","sourceRoot":"../../../src","sources":["hooks/useCalcLayout.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAE1B,wEAAqC;AAErC,+CAA6F;AAG7F,SAAS,mBAAmB,CAAC,MAAc,EAAE,eAAgC;IACzE,MAAM,WAAW,GAAG,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,IAAI,GAA2B,WAAW,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,SAAS,GACX,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;YAC5B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAI,SAAS,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,iCACD,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,GACrD,UAAU,EACf,CAAC;QACP,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,eAAgC,EAAE,EAAE;IACnF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAE5F,IAAI,CAAC,IAAA,iBAAO,EAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAXW,QAAA,kBAAkB,sBAW7B;AAEF,yFAAyF;AACzF,uEAAuE;AAEvE,qHAAqH;AACrH,0GAA0G;AAC1G,iHAAiH;AACjH,gHAAgH;AAChH,2GAA2G;AAC3G,6EAA6E;AAE7E,KAAK","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\n\nimport {type Config, type ConfigItem, type ConfigLayout, getAllConfigItems} from '../shared';\nimport {RegisterManager} from '../utils';\n\nfunction onUpdatePropsConfig(config: Config, registerManager: RegisterManager) {\n const configItems = getAllConfigItems(config);\n\n return config.layout.reduce<ConfigLayout[]>((acc, itemLayout, i) => {\n const item: ConfigItem | undefined = configItems[i];\n const foundItem =\n item && item.id === itemLayout.i\n ? item\n : configItems.find((configItem) => configItem.id === itemLayout.i);\n\n if (foundItem) {\n acc.push({\n ...registerManager.getItem(foundItem.type).defaultLayout,\n ...itemLayout,\n });\n }\n\n return acc;\n }, []);\n}\n\nexport const useCalcPropsLayout = (config: Config, registerManager: RegisterManager) => {\n const [prevConfig, setPrevConfig] = React.useState(config);\n\n const [layout, updateLayout] = React.useState(onUpdatePropsConfig(config, registerManager));\n\n if (!isEqual(prevConfig.layout, config.layout)) {\n setPrevConfig(config);\n updateLayout(onUpdatePropsConfig(config, registerManager));\n }\n\n return layout;\n};\n\n// export const useManageLayout = (config: Config, registerManager: RegisterManager) => {\n// const propsLayout = useCalcPropsLayout(config, registerManager);\n\n// // так как мы не хотим хранить параметры виджета с активированной автовысотой в сторе и на сервере, актуальный\n// // (видимый юзером в конкретный момент времени) лэйаут (массив объектов с данными о ширине, высоте,\n// // расположении конкретного виджета на сетке) будет храниться в стейте, но, для того, чтобы в стор попадал\n// // лэйаут без учета вижетов с активированной автовысотой, в момент \"подстройки\" высоты виджета значение h\n// // (высота) из конфига будет запоминаться в originalLayouts, новое значение высоты в adjustedLayouts\n// const [currentLayout, setCurrentLayout] = React.useState(propsLayout);\n\n// };\n"]}
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../../constants/index.js");
4
+ const helpers_1 = require("../helpers.js");
5
+ const state_and_params_1 = require("../state-and-params.js");
6
+ const NAMESPACE = 'default';
7
+ const GROUP_CONTROL_TYPE = 'group-control';
8
+ const GLOBAL_ITEM_ID = 'globalItem1';
9
+ const REGULAR_ITEM_ID = 'regularItem1';
10
+ const GROUP_ITEM_ID = 'groupItem1';
11
+ const GROUP_ITEM_ID_2 = 'groupItem2';
12
+ const getMockedControlItem = (props) => {
13
+ const { id = REGULAR_ITEM_ID, groupItemIds = [GROUP_ITEM_ID], defaults } = props || {};
14
+ return {
15
+ id,
16
+ defaults,
17
+ data: {
18
+ group: groupItemIds.map((groupItemId) => ({
19
+ id: groupItemId,
20
+ namespace: NAMESPACE,
21
+ defaults,
22
+ })),
23
+ },
24
+ type: GROUP_CONTROL_TYPE,
25
+ namespace: NAMESPACE,
26
+ };
27
+ };
28
+ const getMockedConfig = ({ items = [], globalItems = [], }) => ({
29
+ items,
30
+ globalItems,
31
+ salt: '0.9021043992843898',
32
+ counter: 124,
33
+ layout: [],
34
+ aliases: {},
35
+ connections: [],
36
+ });
37
+ describe('globalItems functionality in config', () => {
38
+ describe('addToQueue with globalItems', () => {
39
+ it('should include globalItems when filtering actual IDs', () => {
40
+ const globalItem = getMockedControlItem({ id: GLOBAL_ITEM_ID });
41
+ const regularItem = getMockedControlItem();
42
+ const config = getMockedConfig({
43
+ items: [regularItem],
44
+ globalItems: [globalItem],
45
+ });
46
+ const itemsStateAndParams = {
47
+ [constants_1.META_KEY]: {
48
+ queue: [{ id: 'nonExistentItem' }, { id: GLOBAL_ITEM_ID }],
49
+ version: 2,
50
+ },
51
+ };
52
+ const result = (0, helpers_1.addToQueue)({
53
+ id: REGULAR_ITEM_ID,
54
+ config,
55
+ itemsStateAndParams,
56
+ });
57
+ // Should filter out non-existent items and add the new item
58
+ expect(result.queue).toEqual([{ id: GLOBAL_ITEM_ID }, { id: REGULAR_ITEM_ID }]);
59
+ });
60
+ it('should handle empty globalItems array', () => {
61
+ const regularItem = getMockedControlItem();
62
+ const config = getMockedConfig({
63
+ items: [regularItem],
64
+ globalItems: [],
65
+ });
66
+ const itemsStateAndParams = {
67
+ [constants_1.META_KEY]: {
68
+ queue: [],
69
+ version: 2,
70
+ },
71
+ };
72
+ const result = (0, helpers_1.addToQueue)({
73
+ id: REGULAR_ITEM_ID,
74
+ config,
75
+ itemsStateAndParams,
76
+ });
77
+ expect(result.queue).toEqual([{ id: REGULAR_ITEM_ID }]);
78
+ });
79
+ });
80
+ describe('addGroupToQueue with globalItems', () => {
81
+ it('should include globalItems when filtering actual IDs for group items', () => {
82
+ const globalGroupItemId = 'globalGroupItem';
83
+ const globalGroupSubItemId = 'globalGroupSubItem';
84
+ const globalGroupSubItemId2 = 'globalGroupSubItem2';
85
+ const globalGroupItem = getMockedControlItem({
86
+ id: globalGroupItemId,
87
+ groupItemIds: [globalGroupSubItemId, globalGroupSubItemId2],
88
+ });
89
+ const regularItem = getMockedControlItem();
90
+ const config = getMockedConfig({
91
+ items: [regularItem],
92
+ globalItems: [globalGroupItem],
93
+ });
94
+ const itemsStateAndParams = {
95
+ [constants_1.META_KEY]: {
96
+ queue: [
97
+ { id: globalGroupItemId, groupItemId: globalGroupSubItemId },
98
+ { id: 'nonExistentGroup', groupItemId: 'nonExistentSubItem' },
99
+ ],
100
+ version: 2,
101
+ },
102
+ };
103
+ const result = (0, helpers_1.addGroupToQueue)({
104
+ id: globalGroupItemId,
105
+ groupItemIds: [globalGroupSubItemId2],
106
+ config,
107
+ itemsStateAndParams,
108
+ });
109
+ // Should preserve existing global group item and add new one
110
+ expect(result.queue).toEqual([
111
+ { id: globalGroupItemId, groupItemId: globalGroupSubItemId },
112
+ { id: globalGroupItemId, groupItemId: globalGroupSubItemId2 },
113
+ ]);
114
+ });
115
+ });
116
+ describe('formQueueData with globalItems', () => {
117
+ it('should process globalItems in queue data formation', () => {
118
+ const globalItem = getMockedControlItem({
119
+ id: GLOBAL_ITEM_ID,
120
+ groupItemIds: [GROUP_ITEM_ID],
121
+ defaults: {
122
+ size: 'l',
123
+ },
124
+ });
125
+ const regularItem = getMockedControlItem({
126
+ id: REGULAR_ITEM_ID,
127
+ groupItemIds: [GROUP_ITEM_ID_2],
128
+ defaults: { view: 'normal' },
129
+ });
130
+ const itemsStateAndParams = {
131
+ [GLOBAL_ITEM_ID]: {
132
+ params: {
133
+ [GROUP_ITEM_ID]: {
134
+ size: 'xl',
135
+ color: 'red',
136
+ },
137
+ },
138
+ },
139
+ [REGULAR_ITEM_ID]: {
140
+ params: {
141
+ [GROUP_ITEM_ID_2]: {
142
+ view: 'contrast',
143
+ },
144
+ },
145
+ },
146
+ [constants_1.META_KEY]: {
147
+ queue: [
148
+ { id: GLOBAL_ITEM_ID, groupItemId: GROUP_ITEM_ID },
149
+ { id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID_2 },
150
+ ],
151
+ version: 2,
152
+ },
153
+ };
154
+ const result = (0, helpers_1.formQueueData)({
155
+ items: [regularItem, globalItem],
156
+ itemsStateAndParams,
157
+ });
158
+ expect(result).toEqual([
159
+ {
160
+ id: GROUP_ITEM_ID,
161
+ namespace: NAMESPACE,
162
+ params: { size: 'xl' },
163
+ },
164
+ {
165
+ id: GROUP_ITEM_ID_2,
166
+ namespace: NAMESPACE,
167
+ params: { view: 'contrast' },
168
+ },
169
+ ]);
170
+ });
171
+ });
172
+ describe('getItemsParams with globalItems', () => {
173
+ it('should process globalItems when getting items parameters', () => {
174
+ const globalParam = 'globalParam';
175
+ const overriddenParam = 'overriddenValue';
176
+ const regularParam = 'regularValue';
177
+ const globalItem = getMockedControlItem({ id: GLOBAL_ITEM_ID, defaults: { globalParam } });
178
+ const regularItem = getMockedControlItem({
179
+ id: REGULAR_ITEM_ID,
180
+ groupItemIds: [GROUP_ITEM_ID_2],
181
+ defaults: {
182
+ regularParam,
183
+ },
184
+ });
185
+ const config = getMockedConfig({
186
+ items: [regularItem],
187
+ globalItems: [globalItem],
188
+ });
189
+ const itemsStateAndParams = {
190
+ [GLOBAL_ITEM_ID]: {
191
+ params: {
192
+ [GROUP_ITEM_ID]: {
193
+ globalParam: overriddenParam,
194
+ },
195
+ },
196
+ },
197
+ [constants_1.META_KEY]: {
198
+ queue: [{ id: GLOBAL_ITEM_ID, groupItemId: GROUP_ITEM_ID }],
199
+ version: 2,
200
+ },
201
+ };
202
+ const result = (0, state_and_params_1.getItemsParams)({
203
+ defaultGlobalParams: {},
204
+ globalParams: {},
205
+ config,
206
+ itemsStateAndParams,
207
+ plugins: [
208
+ {
209
+ type: GROUP_CONTROL_TYPE,
210
+ },
211
+ ],
212
+ });
213
+ expect(result[GLOBAL_ITEM_ID]).toEqual({
214
+ [GROUP_ITEM_ID]: {
215
+ globalParam: overriddenParam,
216
+ regularParam,
217
+ },
218
+ });
219
+ expect(result[REGULAR_ITEM_ID]).toEqual({
220
+ [GROUP_ITEM_ID_2]: {
221
+ globalParam: overriddenParam,
222
+ regularParam,
223
+ },
224
+ });
225
+ });
226
+ });
227
+ describe('getItemsStateAndParams with globalItems', () => {
228
+ it('should handle globalItems in state and params processing', () => {
229
+ const initialValue = 'value';
230
+ const globalParam = 'globalValue';
231
+ const regularParam = 'regularValue';
232
+ const globalState = 'globalStateValue';
233
+ const regularState = 'regularStateValue';
234
+ const globalItem = getMockedControlItem({
235
+ id: GLOBAL_ITEM_ID,
236
+ defaults: { globalDefault: initialValue },
237
+ });
238
+ const regularItem = getMockedControlItem({
239
+ id: REGULAR_ITEM_ID,
240
+ groupItemIds: [GROUP_ITEM_ID_2],
241
+ defaults: {
242
+ regularDefault: initialValue,
243
+ },
244
+ });
245
+ const config = getMockedConfig({
246
+ items: [regularItem],
247
+ globalItems: [globalItem],
248
+ });
249
+ // globalParam and regularParam are not included in conrols defaults so they must be ignored
250
+ const itemsStateAndParams = {
251
+ [GLOBAL_ITEM_ID]: {
252
+ params: { globalParam },
253
+ state: { globalState },
254
+ },
255
+ [REGULAR_ITEM_ID]: {
256
+ params: { regularParam },
257
+ state: { regularState },
258
+ },
259
+ [constants_1.META_KEY]: {
260
+ queue: [{ id: GLOBAL_ITEM_ID }, { id: REGULAR_ITEM_ID }],
261
+ version: 2,
262
+ },
263
+ };
264
+ const result = (0, state_and_params_1.getItemsStateAndParams)({
265
+ defaultGlobalParams: {},
266
+ globalParams: {},
267
+ config,
268
+ itemsStateAndParams,
269
+ plugins: [
270
+ {
271
+ type: GROUP_CONTROL_TYPE,
272
+ },
273
+ ],
274
+ });
275
+ expect(result[GLOBAL_ITEM_ID]).toEqual({
276
+ params: {
277
+ [GROUP_ITEM_ID]: {
278
+ globalDefault: initialValue,
279
+ regularDefault: initialValue,
280
+ },
281
+ },
282
+ state: { globalState },
283
+ });
284
+ expect(result[REGULAR_ITEM_ID]).toEqual({
285
+ params: {
286
+ [GROUP_ITEM_ID_2]: {
287
+ globalDefault: initialValue,
288
+ regularDefault: initialValue,
289
+ },
290
+ },
291
+ state: { regularState },
292
+ });
293
+ expect(result[constants_1.META_KEY]).toEqual({
294
+ queue: [{ id: GLOBAL_ITEM_ID }, { id: REGULAR_ITEM_ID }],
295
+ version: 2,
296
+ });
297
+ });
298
+ it('should correctly handle config without globalItems', () => {
299
+ const initialValue = 'value';
300
+ const regularParam = 'regularValue';
301
+ const regularState = 'regularStateValue';
302
+ const regularItem = getMockedControlItem({
303
+ id: REGULAR_ITEM_ID,
304
+ defaults: {
305
+ regularParam: initialValue,
306
+ },
307
+ });
308
+ const config = getMockedConfig({
309
+ items: [regularItem],
310
+ globalItems: undefined,
311
+ });
312
+ const itemsStateAndParams = {
313
+ [REGULAR_ITEM_ID]: {
314
+ params: { regularParam: initialValue },
315
+ state: { regularState },
316
+ },
317
+ [constants_1.META_KEY]: {
318
+ queue: [{ id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID }],
319
+ version: 2,
320
+ },
321
+ };
322
+ const result = (0, state_and_params_1.getItemsStateAndParams)({
323
+ defaultGlobalParams: {},
324
+ globalParams: { regularParam },
325
+ config,
326
+ itemsStateAndParams,
327
+ plugins: [
328
+ {
329
+ type: GROUP_CONTROL_TYPE,
330
+ },
331
+ ],
332
+ });
333
+ expect(result[REGULAR_ITEM_ID]).toEqual({
334
+ params: {
335
+ [GROUP_ITEM_ID]: {
336
+ regularParam,
337
+ },
338
+ },
339
+ state: { regularState },
340
+ });
341
+ expect(result[constants_1.META_KEY]).toEqual({
342
+ queue: [{ id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID }],
343
+ version: 2,
344
+ });
345
+ });
346
+ });
347
+ describe('edge cases with globalItems', () => {
348
+ it('should handle config with only globalItems and no regular items', () => {
349
+ const globalItemId1 = 'global1';
350
+ const globalItemId2 = 'global2';
351
+ const globalItem1 = getMockedControlItem({ id: globalItemId1 });
352
+ const globalItem2 = getMockedControlItem({ id: globalItemId2 });
353
+ const config = getMockedConfig({
354
+ items: [],
355
+ globalItems: [globalItem1, globalItem2],
356
+ });
357
+ const itemsStateAndParams = {
358
+ [constants_1.META_KEY]: {
359
+ queue: [{ id: globalItemId1 }],
360
+ version: 2,
361
+ },
362
+ };
363
+ const result = (0, helpers_1.addToQueue)({
364
+ id: globalItemId2,
365
+ config,
366
+ itemsStateAndParams,
367
+ });
368
+ expect(result.queue).toEqual([{ id: globalItemId1 }, { id: globalItemId2 }]);
369
+ });
370
+ });
371
+ });
372
+ //# sourceMappingURL=global-items.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-items.test.js","sourceRoot":"../../../../../src","sources":["shared/modules/__tests__/global-items.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {META_KEY} from '../../constants';\nimport {\n Config,\n ConfigItem,\n ItemsStateAndParams,\n ItemsStateAndParamsBase,\n StringParams,\n} from '../../types';\nimport {addGroupToQueue, addToQueue, formQueueData} from '../helpers';\nimport {getItemsParams, getItemsStateAndParams} from '../state-and-params';\n\nconst NAMESPACE = 'default';\nconst GROUP_CONTROL_TYPE = 'group-control';\n\nconst GLOBAL_ITEM_ID = 'globalItem1';\nconst REGULAR_ITEM_ID = 'regularItem1';\nconst GROUP_ITEM_ID = 'groupItem1';\nconst GROUP_ITEM_ID_2 = 'groupItem2';\n\nconst getMockedControlItem = (props?: {\n id: string;\n groupItemIds?: string[];\n defaults?: StringParams;\n}): ConfigItem => {\n const {id = REGULAR_ITEM_ID, groupItemIds = [GROUP_ITEM_ID], defaults} = props || {};\n return {\n id,\n defaults,\n data: {\n group: groupItemIds.map((groupItemId) => ({\n id: groupItemId,\n namespace: NAMESPACE,\n defaults,\n })),\n },\n type: GROUP_CONTROL_TYPE,\n namespace: NAMESPACE,\n };\n};\n\nconst getMockedConfig = ({\n items = [],\n globalItems = [],\n}: {\n items?: ConfigItem[];\n globalItems?: ConfigItem[];\n}): Config => ({\n items,\n globalItems,\n salt: '0.9021043992843898',\n counter: 124,\n layout: [],\n aliases: {},\n connections: [],\n});\n\ndescribe('globalItems functionality in config', () => {\n describe('addToQueue with globalItems', () => {\n it('should include globalItems when filtering actual IDs', () => {\n const globalItem = getMockedControlItem({id: GLOBAL_ITEM_ID});\n const regularItem = getMockedControlItem();\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: [globalItem],\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [META_KEY]: {\n queue: [{id: 'nonExistentItem'}, {id: GLOBAL_ITEM_ID}],\n version: 2,\n },\n };\n\n const result = addToQueue({\n id: REGULAR_ITEM_ID,\n config,\n itemsStateAndParams,\n });\n\n // Should filter out non-existent items and add the new item\n expect(result.queue).toEqual([{id: GLOBAL_ITEM_ID}, {id: REGULAR_ITEM_ID}]);\n });\n\n it('should handle empty globalItems array', () => {\n const regularItem = getMockedControlItem();\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: [],\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [META_KEY]: {\n queue: [],\n version: 2,\n },\n };\n\n const result = addToQueue({\n id: REGULAR_ITEM_ID,\n config,\n itemsStateAndParams,\n });\n\n expect(result.queue).toEqual([{id: REGULAR_ITEM_ID}]);\n });\n });\n\n describe('addGroupToQueue with globalItems', () => {\n it('should include globalItems when filtering actual IDs for group items', () => {\n const globalGroupItemId = 'globalGroupItem';\n const globalGroupSubItemId = 'globalGroupSubItem';\n const globalGroupSubItemId2 = 'globalGroupSubItem2';\n const globalGroupItem = getMockedControlItem({\n id: globalGroupItemId,\n groupItemIds: [globalGroupSubItemId, globalGroupSubItemId2],\n });\n const regularItem = getMockedControlItem();\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: [globalGroupItem],\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [META_KEY]: {\n queue: [\n {id: globalGroupItemId, groupItemId: globalGroupSubItemId},\n {id: 'nonExistentGroup', groupItemId: 'nonExistentSubItem'},\n ],\n version: 2,\n },\n };\n\n const result = addGroupToQueue({\n id: globalGroupItemId,\n groupItemIds: [globalGroupSubItemId2],\n config,\n itemsStateAndParams,\n });\n\n // Should preserve existing global group item and add new one\n expect(result.queue).toEqual([\n {id: globalGroupItemId, groupItemId: globalGroupSubItemId},\n {id: globalGroupItemId, groupItemId: globalGroupSubItemId2},\n ]);\n });\n });\n\n describe('formQueueData with globalItems', () => {\n it('should process globalItems in queue data formation', () => {\n const globalItem = getMockedControlItem({\n id: GLOBAL_ITEM_ID,\n groupItemIds: [GROUP_ITEM_ID],\n defaults: {\n size: 'l',\n },\n });\n const regularItem = getMockedControlItem({\n id: REGULAR_ITEM_ID,\n groupItemIds: [GROUP_ITEM_ID_2],\n defaults: {view: 'normal'},\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [GLOBAL_ITEM_ID]: {\n params: {\n [GROUP_ITEM_ID]: {\n size: 'xl',\n color: 'red',\n },\n },\n },\n [REGULAR_ITEM_ID]: {\n params: {\n [GROUP_ITEM_ID_2]: {\n view: 'contrast',\n },\n },\n },\n [META_KEY]: {\n queue: [\n {id: GLOBAL_ITEM_ID, groupItemId: GROUP_ITEM_ID},\n {id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID_2},\n ],\n version: 2,\n },\n };\n\n const result = formQueueData({\n items: [regularItem, globalItem],\n itemsStateAndParams,\n });\n\n expect(result).toEqual([\n {\n id: GROUP_ITEM_ID,\n namespace: NAMESPACE,\n params: {size: 'xl'},\n },\n {\n id: GROUP_ITEM_ID_2,\n namespace: NAMESPACE,\n params: {view: 'contrast'},\n },\n ]);\n });\n });\n\n describe('getItemsParams with globalItems', () => {\n it('should process globalItems when getting items parameters', () => {\n const globalParam = 'globalParam';\n const overriddenParam = 'overriddenValue';\n const regularParam = 'regularValue';\n const globalItem = getMockedControlItem({id: GLOBAL_ITEM_ID, defaults: {globalParam}});\n const regularItem = getMockedControlItem({\n id: REGULAR_ITEM_ID,\n groupItemIds: [GROUP_ITEM_ID_2],\n defaults: {\n regularParam,\n },\n });\n\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: [globalItem],\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [GLOBAL_ITEM_ID]: {\n params: {\n [GROUP_ITEM_ID]: {\n globalParam: overriddenParam,\n },\n },\n },\n [META_KEY]: {\n queue: [{id: GLOBAL_ITEM_ID, groupItemId: GROUP_ITEM_ID}],\n version: 2,\n },\n };\n\n const result = getItemsParams({\n defaultGlobalParams: {},\n globalParams: {},\n config,\n itemsStateAndParams,\n plugins: [\n {\n type: GROUP_CONTROL_TYPE,\n },\n ],\n });\n\n expect(result[GLOBAL_ITEM_ID]).toEqual({\n [GROUP_ITEM_ID]: {\n globalParam: overriddenParam,\n regularParam,\n },\n });\n expect(result[REGULAR_ITEM_ID]).toEqual({\n [GROUP_ITEM_ID_2]: {\n globalParam: overriddenParam,\n regularParam,\n },\n });\n });\n });\n\n describe('getItemsStateAndParams with globalItems', () => {\n it('should handle globalItems in state and params processing', () => {\n const initialValue = 'value';\n const globalParam = 'globalValue';\n const regularParam = 'regularValue';\n const globalState = 'globalStateValue';\n const regularState = 'regularStateValue';\n const globalItem = getMockedControlItem({\n id: GLOBAL_ITEM_ID,\n defaults: {globalDefault: initialValue},\n });\n const regularItem = getMockedControlItem({\n id: REGULAR_ITEM_ID,\n groupItemIds: [GROUP_ITEM_ID_2],\n defaults: {\n regularDefault: initialValue,\n },\n });\n\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: [globalItem],\n });\n\n // globalParam and regularParam are not included in conrols defaults so they must be ignored\n const itemsStateAndParams: ItemsStateAndParams = {\n [GLOBAL_ITEM_ID]: {\n params: {globalParam},\n state: {globalState},\n },\n [REGULAR_ITEM_ID]: {\n params: {regularParam},\n state: {regularState},\n },\n [META_KEY]: {\n queue: [{id: GLOBAL_ITEM_ID}, {id: REGULAR_ITEM_ID}],\n version: 2,\n },\n };\n\n const result = getItemsStateAndParams({\n defaultGlobalParams: {},\n globalParams: {},\n config,\n itemsStateAndParams,\n plugins: [\n {\n type: GROUP_CONTROL_TYPE,\n },\n ],\n }) as ItemsStateAndParamsBase;\n\n expect(result[GLOBAL_ITEM_ID]).toEqual({\n params: {\n [GROUP_ITEM_ID]: {\n globalDefault: initialValue,\n regularDefault: initialValue,\n },\n },\n state: {globalState},\n });\n\n expect(result[REGULAR_ITEM_ID]).toEqual({\n params: {\n [GROUP_ITEM_ID_2]: {\n globalDefault: initialValue,\n regularDefault: initialValue,\n },\n },\n state: {regularState},\n });\n\n expect(result[META_KEY]).toEqual({\n queue: [{id: GLOBAL_ITEM_ID}, {id: REGULAR_ITEM_ID}],\n version: 2,\n });\n });\n\n it('should correctly handle config without globalItems', () => {\n const initialValue = 'value';\n const regularParam = 'regularValue';\n const regularState = 'regularStateValue';\n\n const regularItem = getMockedControlItem({\n id: REGULAR_ITEM_ID,\n defaults: {\n regularParam: initialValue,\n },\n });\n\n const config = getMockedConfig({\n items: [regularItem],\n globalItems: undefined,\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [REGULAR_ITEM_ID]: {\n params: {regularParam: initialValue},\n state: {regularState},\n },\n [META_KEY]: {\n queue: [{id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID}],\n version: 2,\n },\n };\n\n const result = getItemsStateAndParams({\n defaultGlobalParams: {},\n globalParams: {regularParam},\n config,\n itemsStateAndParams,\n plugins: [\n {\n type: GROUP_CONTROL_TYPE,\n },\n ],\n }) as ItemsStateAndParamsBase;\n\n expect(result[REGULAR_ITEM_ID]).toEqual({\n params: {\n [GROUP_ITEM_ID]: {\n regularParam,\n },\n },\n state: {regularState},\n });\n\n expect(result[META_KEY]).toEqual({\n queue: [{id: REGULAR_ITEM_ID, groupItemId: GROUP_ITEM_ID}],\n version: 2,\n });\n });\n });\n\n describe('edge cases with globalItems', () => {\n it('should handle config with only globalItems and no regular items', () => {\n const globalItemId1 = 'global1';\n const globalItemId2 = 'global2';\n const globalItem1 = getMockedControlItem({id: globalItemId1});\n const globalItem2 = getMockedControlItem({id: globalItemId2});\n\n const config = getMockedConfig({\n items: [],\n globalItems: [globalItem1, globalItem2],\n });\n\n const itemsStateAndParams: ItemsStateAndParams = {\n [META_KEY]: {\n queue: [{id: globalItemId1}],\n version: 2,\n },\n };\n\n const result = addToQueue({\n id: globalItemId2,\n config,\n itemsStateAndParams,\n });\n\n expect(result.queue).toEqual([{id: globalItemId1}, {id: globalItemId2}]);\n });\n });\n});\n"]}
@@ -78,4 +78,5 @@ export declare function hasActionParam(conf?: StringParams | Record<string, Stri
78
78
  * @param stateAndParams
79
79
  */
80
80
  export declare function hasActionParams(stateAndParams: ItemStateAndParams): boolean;
81
+ export declare function getAllConfigItems(config: Config): ConfigItem[];
81
82
  export {};
@@ -18,6 +18,7 @@ exports.pickExceptActionParamsFromParams = pickExceptActionParamsFromParams;
18
18
  exports.transformParamsToActionParams = transformParamsToActionParams;
19
19
  exports.hasActionParam = hasActionParam;
20
20
  exports.hasActionParams = hasActionParams;
21
+ exports.getAllConfigItems = getAllConfigItems;
21
22
  const tslib_1 = require("tslib");
22
23
  const get_1 = tslib_1.__importDefault(require("lodash/get.js"));
23
24
  const invert_1 = tslib_1.__importDefault(require("lodash/invert.js"));
@@ -202,7 +203,8 @@ function addToQueue({ id, tabId, config, itemsStateAndParams, }) {
202
203
  if (!meta) {
203
204
  return { queue: [queueItem], version: constants_1.CURRENT_VERSION };
204
205
  }
205
- const actualIds = getActualItemsIds(config.items);
206
+ const configItems = getAllConfigItems(config);
207
+ const actualIds = getActualItemsIds(configItems);
206
208
  const metaQueue = meta.queue || [];
207
209
  const notCurrent = (item) => {
208
210
  if (item.groupItemId) {
@@ -226,7 +228,8 @@ function addGroupToQueue({ id, groupItemIds, config, itemsStateAndParams, }) {
226
228
  if (!meta) {
227
229
  return { queue: queueItems, version: constants_1.CURRENT_VERSION };
228
230
  }
229
- const actualIds = getActualItemsIds(config.items);
231
+ const configItems = getAllConfigItems(config);
232
+ const actualIds = getActualItemsIds(configItems);
230
233
  const metaQueue = meta.queue || [];
231
234
  const notCurrent = (item) => {
232
235
  if (item.groupItemId) {
@@ -319,4 +322,9 @@ function hasActionParams(stateAndParams) {
319
322
  }
320
323
  return hasActionParam(stateAndParams.params);
321
324
  }
325
+ // Combines regular items and global items from config into a single array
326
+ // For global usage across the project
327
+ function getAllConfigItems(config) {
328
+ return [...config.items, ...(config.globalItems || [])];
329
+ }
322
330
  //# sourceMappingURL=helpers.js.map