@cloud-ru/uikit-product-calculator 1.5.3 → 1.6.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 1.6.0 (2026-04-28)
7
+
8
+
9
+ ### Features
10
+
11
+ * **EVODBAAS-7563:** calculate hostsQuantity for Redis ([fead790](https://github.com/cloud-ru-tech/uikit-product/commit/fead790917457a29ece8158d658a6fe6a53bad7a))
12
+
13
+
14
+
15
+
16
+
17
+ ## 1.5.4 (2026-04-27)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **SITE-11154:** fix 500 error ([b9c69c6](https://github.com/cloud-ru-tech/uikit-product/commit/b9c69c6442ebcb622033e0242677862bc5d1f00f))
23
+
24
+
25
+
26
+
27
+
6
28
  ## 1.5.3 (2026-04-27)
7
29
 
8
30
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -113,7 +113,7 @@ data-test-id
113
113
  ### Props
114
114
  | name | type | default value | description |
115
115
  |------|------|---------------|-------------|
116
- | __@iterator@925* | `() => StringIterator<string>` | - | Iterator |
116
+ | __@iterator@1105* | `() => StringIterator<string>` | - | Iterator |
117
117
  | toWellFormed* | `() => string` | - | Returns a string where all lone or out-of-order surrogates have been replaced by the Unicode replacement character (U+FFFD). |
118
118
  | isWellFormed* | `() => boolean` | - | Returns true if all leading surrogates and trailing surrogates appear paired and in order. |
119
119
  | at* | `(index: number) => string` | - | Returns a new String consisting of the single UTF-16 code unit located at the specified index. @param index The zero-based index of the desired code unit. A negative index will count back from the last item. |
@@ -18,7 +18,7 @@ export declare const EVOLUTION_PRODUCT: {
18
18
  readonly EvolutionManagedTrino: "evolutionManagedTrino";
19
19
  readonly EvolutionManagedBI: "evolutionManagedBI";
20
20
  readonly EvolutionManagedRedis: "evolutionManagedRedis";
21
- readonly EvolutionManagedClickHouse: "evolutionManagedClickhouse";
21
+ readonly EvolutionManagedClickHouse: "evolutionManagedClickHouse";
22
22
  readonly EvolutionManagedSpark: "evolutionManagedSpark";
23
23
  readonly EvolutionManagedKafka: "evolutionManagedKafka";
24
24
  readonly EvolutionLoadBalancer: "evolutionLoadBalancer";
@@ -21,7 +21,7 @@ exports.EVOLUTION_PRODUCT = {
21
21
  EvolutionManagedTrino: 'evolutionManagedTrino',
22
22
  EvolutionManagedBI: 'evolutionManagedBI',
23
23
  EvolutionManagedRedis: 'evolutionManagedRedis',
24
- EvolutionManagedClickHouse: 'evolutionManagedClickhouse',
24
+ EvolutionManagedClickHouse: 'evolutionManagedClickHouse',
25
25
  EvolutionManagedSpark: 'evolutionManagedSpark',
26
26
  EvolutionManagedKafka: 'evolutionManagedKafka',
27
27
  EvolutionLoadBalancer: 'evolutionLoadBalancer',
@@ -10,18 +10,16 @@ const nodeConfigItems = (0, utils_1.generateInstanceConfigItems)([
10
10
  [8, 32],
11
11
  ]);
12
12
  const valueMasterReplica = 'Master/Replica';
13
- const valueCluster = 'Cluster';
14
13
  const valueStandalone = 'Standalone';
15
- const DEFAULT_ITEMS_SLIDER = [1, 2, 3, 4, 5];
14
+ const hostsByStandalone = [1];
15
+ const hostsByMasterReplica = [3];
16
16
  const shardQuantityItemsByInstantType = {
17
17
  [valueStandalone]: [1],
18
18
  [valueMasterReplica]: [1],
19
- [valueCluster]: [3, 4, 5],
20
19
  };
21
- const replicaQuantityItemsByInstantType = {
22
- [valueStandalone]: { values: [0], label: 'Количество реплик', visible: false },
23
- [valueMasterReplica]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик' },
24
- [valueCluster]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик на шард' },
20
+ const hostsByInstantType = {
21
+ [valueStandalone]: hostsByStandalone,
22
+ [valueMasterReplica]: hostsByMasterReplica,
25
23
  };
26
24
  const instanceTypePartCards = [
27
25
  {
@@ -34,14 +32,9 @@ const instanceTypePartCards = [
34
32
  label: valueMasterReplica,
35
33
  description: 'Отказоустойчивый кластер высокой доступности',
36
34
  },
37
- {
38
- value: valueCluster,
39
- label: valueCluster,
40
- description: 'Отказоустойчивый кластер высокой доступности с шардированием',
41
- },
42
35
  ];
43
36
  exports.EVOLUTION_MANAGED_REDIS_CONFIG = {
44
- ui: ['deploymentMode', 'instanceType', ['masterNodeConfig', 'shardQuantity'], ['replicaQuantity'], ['systemDisk']],
37
+ ui: ['deploymentMode', 'instanceType', 'masterNodeConfig', ['hostsQuantity', 'shardQuantity'], ['systemDisk']],
45
38
  controls: {
46
39
  deploymentMode: {
47
40
  type: components_1.CONTROL.Carousel,
@@ -68,13 +61,13 @@ exports.EVOLUTION_MANAGED_REDIS_CONFIG = {
68
61
  if (value === valueStandalone) {
69
62
  setValue([
70
63
  ['instanceType', value],
71
- ['replicaQuantity', '0'],
64
+ ['hostsQuantity', hostsByStandalone[0].toString()],
72
65
  ]);
73
66
  }
74
67
  else {
75
68
  setValue([
76
69
  ['instanceType', value],
77
- ['replicaQuantity', '1'],
70
+ ['hostsQuantity', hostsByMasterReplica[0].toString()],
78
71
  ]);
79
72
  }
80
73
  },
@@ -90,12 +83,12 @@ exports.EVOLUTION_MANAGED_REDIS_CONFIG = {
90
83
  },
91
84
  shardQuantity: {
92
85
  type: components_1.CONTROL.Segmented,
86
+ accessorKey: 'shardQuantity',
87
+ defaultValue: '1',
93
88
  decoratorProps: {
94
89
  label: 'Количество шардов',
95
90
  },
96
- defaultValue: '1',
97
91
  items: (0, utils_1.generateCpuItems)([1]),
98
- accessorKey: 'shardQuantity',
99
92
  watchedControls: { instanceType: 'instanceType' },
100
93
  relateFn: ({ instanceType }) => {
101
94
  const items = shardQuantityItemsByInstantType[instanceType];
@@ -106,26 +99,22 @@ exports.EVOLUTION_MANAGED_REDIS_CONFIG = {
106
99
  }
107
100
  },
108
101
  },
109
- replicaQuantity: {
110
- type: components_1.CONTROL.Slider,
111
- accessorKey: 'replicaQuantity',
112
- defaultValue: '0',
113
- items: DEFAULT_ITEMS_SLIDER,
102
+ hostsQuantity: {
103
+ type: components_1.CONTROL.Segmented,
104
+ accessorKey: 'hostsQuantity',
105
+ defaultValue: '1',
114
106
  decoratorProps: {
115
- label: 'Количество реплик',
107
+ label: 'Количество хостов',
116
108
  },
109
+ items: (0, utils_1.generateCpuItems)([...hostsByStandalone, ...hostsByMasterReplica]),
117
110
  watchedControls: { instanceType: 'instanceType' },
118
111
  relateFn: ({ instanceType }) => {
119
- const item = replicaQuantityItemsByInstantType[instanceType];
120
- return {
121
- items: item.values,
122
- uiProps: {
123
- visible: item.visible,
124
- },
125
- decoratorProps: {
126
- label: item.label,
127
- },
128
- };
112
+ const items = hostsByInstantType[instanceType];
113
+ if ((items === null || items === void 0 ? void 0 : items.length) > 0) {
114
+ return {
115
+ items: (0, utils_1.generateCpuItems)(items),
116
+ };
117
+ }
129
118
  },
130
119
  },
131
120
  systemDisk: (0, utils_1.getDisk)({
@@ -83,7 +83,7 @@ exports.EVOLUTION_PRODUCTS = {
83
83
  [constants_2.EVOLUTION_PRODUCT.EvolutionManagedRedis]: {
84
84
  id: constants_2.EVOLUTION_PRODUCT.EvolutionManagedRedis,
85
85
  platform: constants_1.PLATFORM.Evolution,
86
- label: 'Evolution Managed Redis®',
86
+ label: 'Evolution Managed Redis',
87
87
  caption: 'Управляемая база данных Redis®',
88
88
  formConfig: product_config_1.EVOLUTION_MANAGED_REDIS_CONFIG,
89
89
  icon: uikit_product_icons_1.RedisSVG,
@@ -18,7 +18,7 @@ export declare const EVOLUTION_PRODUCT: {
18
18
  readonly EvolutionManagedTrino: "evolutionManagedTrino";
19
19
  readonly EvolutionManagedBI: "evolutionManagedBI";
20
20
  readonly EvolutionManagedRedis: "evolutionManagedRedis";
21
- readonly EvolutionManagedClickHouse: "evolutionManagedClickhouse";
21
+ readonly EvolutionManagedClickHouse: "evolutionManagedClickHouse";
22
22
  readonly EvolutionManagedSpark: "evolutionManagedSpark";
23
23
  readonly EvolutionManagedKafka: "evolutionManagedKafka";
24
24
  readonly EvolutionLoadBalancer: "evolutionLoadBalancer";
@@ -18,7 +18,7 @@ export const EVOLUTION_PRODUCT = {
18
18
  EvolutionManagedTrino: 'evolutionManagedTrino',
19
19
  EvolutionManagedBI: 'evolutionManagedBI',
20
20
  EvolutionManagedRedis: 'evolutionManagedRedis',
21
- EvolutionManagedClickHouse: 'evolutionManagedClickhouse',
21
+ EvolutionManagedClickHouse: 'evolutionManagedClickHouse',
22
22
  EvolutionManagedSpark: 'evolutionManagedSpark',
23
23
  EvolutionManagedKafka: 'evolutionManagedKafka',
24
24
  EvolutionLoadBalancer: 'evolutionLoadBalancer',
@@ -7,18 +7,16 @@ const nodeConfigItems = generateInstanceConfigItems([
7
7
  [8, 32],
8
8
  ]);
9
9
  const valueMasterReplica = 'Master/Replica';
10
- const valueCluster = 'Cluster';
11
10
  const valueStandalone = 'Standalone';
12
- const DEFAULT_ITEMS_SLIDER = [1, 2, 3, 4, 5];
11
+ const hostsByStandalone = [1];
12
+ const hostsByMasterReplica = [3];
13
13
  const shardQuantityItemsByInstantType = {
14
14
  [valueStandalone]: [1],
15
15
  [valueMasterReplica]: [1],
16
- [valueCluster]: [3, 4, 5],
17
16
  };
18
- const replicaQuantityItemsByInstantType = {
19
- [valueStandalone]: { values: [0], label: 'Количество реплик', visible: false },
20
- [valueMasterReplica]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик' },
21
- [valueCluster]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик на шард' },
17
+ const hostsByInstantType = {
18
+ [valueStandalone]: hostsByStandalone,
19
+ [valueMasterReplica]: hostsByMasterReplica,
22
20
  };
23
21
  const instanceTypePartCards = [
24
22
  {
@@ -31,14 +29,9 @@ const instanceTypePartCards = [
31
29
  label: valueMasterReplica,
32
30
  description: 'Отказоустойчивый кластер высокой доступности',
33
31
  },
34
- {
35
- value: valueCluster,
36
- label: valueCluster,
37
- description: 'Отказоустойчивый кластер высокой доступности с шардированием',
38
- },
39
32
  ];
40
33
  export const EVOLUTION_MANAGED_REDIS_CONFIG = {
41
- ui: ['deploymentMode', 'instanceType', ['masterNodeConfig', 'shardQuantity'], ['replicaQuantity'], ['systemDisk']],
34
+ ui: ['deploymentMode', 'instanceType', 'masterNodeConfig', ['hostsQuantity', 'shardQuantity'], ['systemDisk']],
42
35
  controls: {
43
36
  deploymentMode: {
44
37
  type: CONTROL.Carousel,
@@ -65,13 +58,13 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG = {
65
58
  if (value === valueStandalone) {
66
59
  setValue([
67
60
  ['instanceType', value],
68
- ['replicaQuantity', '0'],
61
+ ['hostsQuantity', hostsByStandalone[0].toString()],
69
62
  ]);
70
63
  }
71
64
  else {
72
65
  setValue([
73
66
  ['instanceType', value],
74
- ['replicaQuantity', '1'],
67
+ ['hostsQuantity', hostsByMasterReplica[0].toString()],
75
68
  ]);
76
69
  }
77
70
  },
@@ -87,12 +80,12 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG = {
87
80
  },
88
81
  shardQuantity: {
89
82
  type: CONTROL.Segmented,
83
+ accessorKey: 'shardQuantity',
84
+ defaultValue: '1',
90
85
  decoratorProps: {
91
86
  label: 'Количество шардов',
92
87
  },
93
- defaultValue: '1',
94
88
  items: generateCpuItems([1]),
95
- accessorKey: 'shardQuantity',
96
89
  watchedControls: { instanceType: 'instanceType' },
97
90
  relateFn: ({ instanceType }) => {
98
91
  const items = shardQuantityItemsByInstantType[instanceType];
@@ -103,26 +96,22 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG = {
103
96
  }
104
97
  },
105
98
  },
106
- replicaQuantity: {
107
- type: CONTROL.Slider,
108
- accessorKey: 'replicaQuantity',
109
- defaultValue: '0',
110
- items: DEFAULT_ITEMS_SLIDER,
99
+ hostsQuantity: {
100
+ type: CONTROL.Segmented,
101
+ accessorKey: 'hostsQuantity',
102
+ defaultValue: '1',
111
103
  decoratorProps: {
112
- label: 'Количество реплик',
104
+ label: 'Количество хостов',
113
105
  },
106
+ items: generateCpuItems([...hostsByStandalone, ...hostsByMasterReplica]),
114
107
  watchedControls: { instanceType: 'instanceType' },
115
108
  relateFn: ({ instanceType }) => {
116
- const item = replicaQuantityItemsByInstantType[instanceType];
117
- return {
118
- items: item.values,
119
- uiProps: {
120
- visible: item.visible,
121
- },
122
- decoratorProps: {
123
- label: item.label,
124
- },
125
- };
109
+ const items = hostsByInstantType[instanceType];
110
+ if ((items === null || items === void 0 ? void 0 : items.length) > 0) {
111
+ return {
112
+ items: generateCpuItems(items),
113
+ };
114
+ }
126
115
  },
127
116
  },
128
117
  systemDisk: getDisk({
@@ -80,7 +80,7 @@ export const EVOLUTION_PRODUCTS = {
80
80
  [EVOLUTION_PRODUCT.EvolutionManagedRedis]: {
81
81
  id: EVOLUTION_PRODUCT.EvolutionManagedRedis,
82
82
  platform: PLATFORM.Evolution,
83
- label: 'Evolution Managed Redis®',
83
+ label: 'Evolution Managed Redis',
84
84
  caption: 'Управляемая база данных Redis®',
85
85
  formConfig: EVOLUTION_MANAGED_REDIS_CONFIG,
86
86
  icon: RedisSVG,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloud-ru/uikit-product-calculator",
3
3
  "title": "Calculator",
4
- "version": "1.5.3",
4
+ "version": "1.6.0",
5
5
  "sideEffects": [
6
6
  "*.css",
7
7
  "*.woff",
@@ -71,5 +71,5 @@
71
71
  "devDependencies": {
72
72
  "@types/lodash": "4.17.13"
73
73
  },
74
- "gitHead": "849cdd305b21bc8fea872e8645014d7fc4d3b2d6"
74
+ "gitHead": "1a91272f99356415fe866746496a5feb51c3e17a"
75
75
  }
@@ -18,7 +18,7 @@ export const EVOLUTION_PRODUCT = {
18
18
  EvolutionManagedTrino: 'evolutionManagedTrino',
19
19
  EvolutionManagedBI: 'evolutionManagedBI',
20
20
  EvolutionManagedRedis: 'evolutionManagedRedis',
21
- EvolutionManagedClickHouse: 'evolutionManagedClickhouse',
21
+ EvolutionManagedClickHouse: 'evolutionManagedClickHouse',
22
22
  EvolutionManagedSpark: 'evolutionManagedSpark',
23
23
  EvolutionManagedKafka: 'evolutionManagedKafka',
24
24
  EvolutionLoadBalancer: 'evolutionLoadBalancer',
@@ -9,27 +9,19 @@ const nodeConfigItems = generateInstanceConfigItems([
9
9
  ]);
10
10
 
11
11
  const valueMasterReplica = 'Master/Replica';
12
- const valueCluster = 'Cluster';
13
12
  const valueStandalone = 'Standalone';
14
13
 
15
- const DEFAULT_ITEMS_SLIDER = [1, 2, 3, 4, 5];
14
+ const hostsByStandalone = [1];
15
+ const hostsByMasterReplica = [3];
16
16
 
17
17
  const shardQuantityItemsByInstantType: { [key: string]: number[] } = {
18
18
  [valueStandalone]: [1],
19
19
  [valueMasterReplica]: [1],
20
- [valueCluster]: [3, 4, 5],
21
20
  };
22
21
 
23
- type ReplicaQuantityItemsByInstant = {
24
- values: number[];
25
- label: string;
26
- visible?: boolean;
27
- };
28
-
29
- const replicaQuantityItemsByInstantType: { [key: string]: ReplicaQuantityItemsByInstant } = {
30
- [valueStandalone]: { values: [0], label: 'Количество реплик', visible: false },
31
- [valueMasterReplica]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик' },
32
- [valueCluster]: { values: DEFAULT_ITEMS_SLIDER, label: 'Количество реплик на шард' },
22
+ const hostsByInstantType: { [key: string]: number[] } = {
23
+ [valueStandalone]: hostsByStandalone,
24
+ [valueMasterReplica]: hostsByMasterReplica,
33
25
  };
34
26
 
35
27
  const instanceTypePartCards = [
@@ -43,15 +35,10 @@ const instanceTypePartCards = [
43
35
  label: valueMasterReplica,
44
36
  description: 'Отказоустойчивый кластер высокой доступности',
45
37
  },
46
- {
47
- value: valueCluster,
48
- label: valueCluster,
49
- description: 'Отказоустойчивый кластер высокой доступности с шардированием',
50
- },
51
38
  ];
52
39
 
53
40
  export const EVOLUTION_MANAGED_REDIS_CONFIG: FormConfig = {
54
- ui: ['deploymentMode', 'instanceType', ['masterNodeConfig', 'shardQuantity'], ['replicaQuantity'], ['systemDisk']],
41
+ ui: ['deploymentMode', 'instanceType', 'masterNodeConfig', ['hostsQuantity', 'shardQuantity'], ['systemDisk']],
55
42
  controls: {
56
43
  deploymentMode: {
57
44
  type: CONTROL.Carousel,
@@ -78,12 +65,12 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG: FormConfig = {
78
65
  if (value === valueStandalone) {
79
66
  setValue([
80
67
  ['instanceType', value],
81
- ['replicaQuantity', '0'],
68
+ ['hostsQuantity', hostsByStandalone[0].toString()],
82
69
  ]);
83
70
  } else {
84
71
  setValue([
85
72
  ['instanceType', value],
86
- ['replicaQuantity', '1'],
73
+ ['hostsQuantity', hostsByMasterReplica[0].toString()],
87
74
  ]);
88
75
  }
89
76
  },
@@ -99,12 +86,12 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG: FormConfig = {
99
86
  },
100
87
  shardQuantity: {
101
88
  type: CONTROL.Segmented,
89
+ accessorKey: 'shardQuantity',
90
+ defaultValue: '1',
102
91
  decoratorProps: {
103
92
  label: 'Количество шардов',
104
93
  },
105
- defaultValue: '1',
106
94
  items: generateCpuItems([1]),
107
- accessorKey: 'shardQuantity',
108
95
  watchedControls: { instanceType: 'instanceType' },
109
96
  relateFn: ({ instanceType }) => {
110
97
  const items = shardQuantityItemsByInstantType[instanceType];
@@ -116,27 +103,23 @@ export const EVOLUTION_MANAGED_REDIS_CONFIG: FormConfig = {
116
103
  }
117
104
  },
118
105
  },
119
- replicaQuantity: {
120
- type: CONTROL.Slider,
121
- accessorKey: 'replicaQuantity',
122
- defaultValue: '0',
123
- items: DEFAULT_ITEMS_SLIDER,
106
+ hostsQuantity: {
107
+ type: CONTROL.Segmented,
108
+ accessorKey: 'hostsQuantity',
109
+ defaultValue: '1',
124
110
  decoratorProps: {
125
- label: 'Количество реплик',
111
+ label: 'Количество хостов',
126
112
  },
113
+ items: generateCpuItems([...hostsByStandalone, ...hostsByMasterReplica]),
127
114
  watchedControls: { instanceType: 'instanceType' },
128
115
  relateFn: ({ instanceType }) => {
129
- const item = replicaQuantityItemsByInstantType[instanceType];
116
+ const items = hostsByInstantType[instanceType];
130
117
 
131
- return {
132
- items: item.values,
133
- uiProps: {
134
- visible: item.visible,
135
- },
136
- decoratorProps: {
137
- label: item.label,
138
- },
139
- };
118
+ if (items?.length > 0) {
119
+ return {
120
+ items: generateCpuItems(items),
121
+ };
122
+ }
140
123
  },
141
124
  },
142
125
  systemDisk: getDisk({
@@ -130,7 +130,7 @@ export const EVOLUTION_PRODUCTS: CatalogConfig['products'] = {
130
130
  [EVOLUTION_PRODUCT.EvolutionManagedRedis]: {
131
131
  id: EVOLUTION_PRODUCT.EvolutionManagedRedis,
132
132
  platform: PLATFORM.Evolution,
133
- label: 'Evolution Managed Redis®',
133
+ label: 'Evolution Managed Redis',
134
134
  caption: 'Управляемая база данных Redis®',
135
135
  formConfig: EVOLUTION_MANAGED_REDIS_CONFIG,
136
136
  icon: RedisSVG,