@cloud-ru/uikit-product-calculator 2.1.3-preview-ce2b12b4.0 → 2.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.
- package/CHANGELOG.md +11 -0
- package/dist/cjs/config/platforms/evolution/catalog.js +6 -0
- package/dist/cjs/config/platforms/evolution/constants.d.ts +1 -0
- package/dist/cjs/config/platforms/evolution/constants.js +1 -0
- package/dist/cjs/config/platforms/evolution/product-config/EvolutionWorkflowStudio.d.ts +2 -0
- package/dist/cjs/config/platforms/evolution/product-config/EvolutionWorkflowStudio.js +24 -0
- package/dist/cjs/config/platforms/evolution/product-config/index.d.ts +1 -0
- package/dist/cjs/config/platforms/evolution/product-config/index.js +1 -0
- package/dist/cjs/config/platforms/evolution/products.js +11 -0
- package/dist/cjs/hooks/useProductDelete.js +12 -13
- package/dist/esm/config/platforms/evolution/catalog.js +6 -0
- package/dist/esm/config/platforms/evolution/constants.d.ts +1 -0
- package/dist/esm/config/platforms/evolution/constants.js +1 -0
- package/dist/esm/config/platforms/evolution/product-config/EvolutionWorkflowStudio.d.ts +2 -0
- package/dist/esm/config/platforms/evolution/product-config/EvolutionWorkflowStudio.js +21 -0
- package/dist/esm/config/platforms/evolution/product-config/index.d.ts +1 -0
- package/dist/esm/config/platforms/evolution/product-config/index.js +1 -0
- package/dist/esm/config/platforms/evolution/products.js +13 -2
- package/dist/esm/hooks/useProductDelete.js +12 -13
- package/package.json +7 -7
- package/src/config/platforms/evolution/catalog.tsx +6 -0
- package/src/config/platforms/evolution/constants.ts +1 -0
- package/src/config/platforms/evolution/product-config/EvolutionWorkflowStudio.ts +22 -0
- package/src/config/platforms/evolution/product-config/index.ts +1 -0
- package/src/config/platforms/evolution/products.ts +13 -0
- package/src/hooks/useProductDelete.ts +22 -26
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# 2.2.0 (2026-10-19)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **SITE-12146:** add EvolutionWorkflowStudio product to calculator ([73f4987](https://github.com/cloud-ru-tech/uikit-product/commit/73f4987e88f056e37cd27d0e672b9a9ebb4f28d8))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## 2.1.2 (2026-10-09)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @cloud-ru/uikit-product-calculator
|
|
@@ -50,6 +50,12 @@ exports.EVOLUTION_CATALOG = {
|
|
|
50
50
|
constants_2.EVOLUTION_PRODUCT.EvolutionArtifactRegistry,
|
|
51
51
|
],
|
|
52
52
|
},
|
|
53
|
+
{
|
|
54
|
+
id: constants_1.CATEGORY.Development,
|
|
55
|
+
label: 'Разработка',
|
|
56
|
+
dataTestId: 'development',
|
|
57
|
+
visibleProducts: [constants_2.EVOLUTION_PRODUCT.EvolutionWorkflowStudio],
|
|
58
|
+
},
|
|
53
59
|
{
|
|
54
60
|
id: constants_1.CATEGORY.Database,
|
|
55
61
|
label: 'Платформы данных',
|
|
@@ -24,6 +24,7 @@ export declare const EVOLUTION_PRODUCT: {
|
|
|
24
24
|
readonly EvolutionManagedKafka: "evolutionManagedKafka";
|
|
25
25
|
readonly EvolutionLoadBalancer: "evolutionLoadBalancer";
|
|
26
26
|
readonly EvolutionNotebooks: "evolutionNotebooks";
|
|
27
|
+
readonly EvolutionWorkflowStudio: "evolutionWorkflowStudio";
|
|
27
28
|
};
|
|
28
29
|
export declare const guaranteedPartToVCpuMap: {
|
|
29
30
|
[x: string]: number[];
|
|
@@ -27,6 +27,7 @@ exports.EVOLUTION_PRODUCT = {
|
|
|
27
27
|
EvolutionManagedKafka: 'evolutionManagedKafka',
|
|
28
28
|
EvolutionLoadBalancer: 'evolutionLoadBalancer',
|
|
29
29
|
EvolutionNotebooks: 'evolutionNotebooks',
|
|
30
|
+
EvolutionWorkflowStudio: 'evolutionWorkflowStudio',
|
|
30
31
|
};
|
|
31
32
|
const GuaranteedPartItem = {
|
|
32
33
|
'10': '10',
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG = void 0;
|
|
4
|
+
const components_1 = require("../../../../components");
|
|
5
|
+
exports.EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG = {
|
|
6
|
+
ui: [['runsPerMonth']],
|
|
7
|
+
controls: {
|
|
8
|
+
runsPerMonth: {
|
|
9
|
+
type: components_1.CONTROL.Stepper,
|
|
10
|
+
defaultValue: 50,
|
|
11
|
+
accessorKey: 'runsPerMonth',
|
|
12
|
+
decoratorProps: {
|
|
13
|
+
label: 'Количество запусков шагов в месяц (50 бесплатно)',
|
|
14
|
+
labelTooltip: '1 деплой в Services = состоит минимум из 3 шагов',
|
|
15
|
+
},
|
|
16
|
+
uiProps: {
|
|
17
|
+
min: 0,
|
|
18
|
+
step: 10,
|
|
19
|
+
max: 30000,
|
|
20
|
+
postfix: 'шт',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -39,3 +39,4 @@ __exportStar(require("./EvolutionManagedClickHouse"), exports);
|
|
|
39
39
|
__exportStar(require("./EvolutionManagedSpark"), exports);
|
|
40
40
|
__exportStar(require("./EvolutionManagedKafka"), exports);
|
|
41
41
|
__exportStar(require("./EvolutionManagedAirflow"), exports);
|
|
42
|
+
__exportStar(require("./EvolutionWorkflowStudio"), exports);
|
|
@@ -279,4 +279,15 @@ exports.EVOLUTION_PRODUCTS = {
|
|
|
279
279
|
enableChangeProductQuantity: true,
|
|
280
280
|
enableConnectToConsole: true,
|
|
281
281
|
},
|
|
282
|
+
[constants_2.EVOLUTION_PRODUCT.EvolutionWorkflowStudio]: {
|
|
283
|
+
id: constants_2.EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
284
|
+
platform: constants_1.PLATFORM.Evolution,
|
|
285
|
+
label: 'Evolution Workflow Studio',
|
|
286
|
+
caption: 'Платформа для создания инженерных сценариев в облаке',
|
|
287
|
+
icon: uikit_product_icons_1.EvolutionPipelineSVG,
|
|
288
|
+
formConfig: product_config_1.EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG,
|
|
289
|
+
dataTestId: constants_2.EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
290
|
+
enableChangeProductQuantity: false,
|
|
291
|
+
enableConnectToConsole: true,
|
|
292
|
+
},
|
|
282
293
|
};
|
|
@@ -4,28 +4,27 @@ exports.useProductDelete = useProductDelete;
|
|
|
4
4
|
const contexts_1 = require("../contexts");
|
|
5
5
|
const filterNonEmptyArrays_1 = require("../utils/filterNonEmptyArrays");
|
|
6
6
|
const deleteItem = (productId, idx) => (oldValue) => {
|
|
7
|
-
const oldArrayValue = oldValue[productId];
|
|
7
|
+
const oldArrayValue = oldValue[productId !== null && productId !== void 0 ? productId : 0];
|
|
8
8
|
if (!oldArrayValue) {
|
|
9
9
|
return oldValue;
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
oldArrayValue.splice(idx !== null && idx !== void 0 ? idx : 0, 1);
|
|
12
|
+
const newValue = Object.assign(Object.assign({}, oldValue), { [productId]: oldArrayValue });
|
|
13
|
+
return Object.assign({}, (0, filterNonEmptyArrays_1.filterNonEmptyArrays)(newValue));
|
|
12
14
|
};
|
|
13
15
|
function useProductDelete() {
|
|
14
16
|
const { setSelectedProduct, selectedProduct, products, setProducts, actions: { onProductDelete }, } = (0, contexts_1.useCalculatorContext)();
|
|
15
17
|
return (productId, idx) => {
|
|
16
|
-
const nextProducts = deleteItem(productId, idx)(products);
|
|
17
18
|
setProducts(deleteItem(productId, idx));
|
|
18
19
|
onProductDelete === null || onProductDelete === void 0 ? void 0 : onProductDelete(productId);
|
|
19
|
-
if ((selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const newProductId = Object.keys(nextProducts).find(id => nextProducts[id].length > 0);
|
|
28
|
-
setSelectedProduct(newProductId ? { id: newProductId, idx: 0 } : null);
|
|
20
|
+
if ((selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id) === productId && (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.idx) === idx) {
|
|
21
|
+
const newProductId = Object.keys(products).find(productId => products[productId].length > 0);
|
|
22
|
+
if (newProductId) {
|
|
23
|
+
setSelectedProduct({ id: newProductId, idx: 0 });
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
setSelectedProduct(null);
|
|
27
|
+
}
|
|
29
28
|
}
|
|
30
29
|
};
|
|
31
30
|
}
|
|
@@ -47,6 +47,12 @@ export const EVOLUTION_CATALOG = {
|
|
|
47
47
|
EVOLUTION_PRODUCT.EvolutionArtifactRegistry,
|
|
48
48
|
],
|
|
49
49
|
},
|
|
50
|
+
{
|
|
51
|
+
id: CATEGORY.Development,
|
|
52
|
+
label: 'Разработка',
|
|
53
|
+
dataTestId: 'development',
|
|
54
|
+
visibleProducts: [EVOLUTION_PRODUCT.EvolutionWorkflowStudio],
|
|
55
|
+
},
|
|
50
56
|
{
|
|
51
57
|
id: CATEGORY.Database,
|
|
52
58
|
label: 'Платформы данных',
|
|
@@ -24,6 +24,7 @@ export declare const EVOLUTION_PRODUCT: {
|
|
|
24
24
|
readonly EvolutionManagedKafka: "evolutionManagedKafka";
|
|
25
25
|
readonly EvolutionLoadBalancer: "evolutionLoadBalancer";
|
|
26
26
|
readonly EvolutionNotebooks: "evolutionNotebooks";
|
|
27
|
+
readonly EvolutionWorkflowStudio: "evolutionWorkflowStudio";
|
|
27
28
|
};
|
|
28
29
|
export declare const guaranteedPartToVCpuMap: {
|
|
29
30
|
[x: string]: number[];
|
|
@@ -24,6 +24,7 @@ export const EVOLUTION_PRODUCT = {
|
|
|
24
24
|
EvolutionManagedKafka: 'evolutionManagedKafka',
|
|
25
25
|
EvolutionLoadBalancer: 'evolutionLoadBalancer',
|
|
26
26
|
EvolutionNotebooks: 'evolutionNotebooks',
|
|
27
|
+
EvolutionWorkflowStudio: 'evolutionWorkflowStudio',
|
|
27
28
|
};
|
|
28
29
|
const GuaranteedPartItem = {
|
|
29
30
|
'10': '10',
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CONTROL } from '../../../../components';
|
|
2
|
+
export const EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG = {
|
|
3
|
+
ui: [['runsPerMonth']],
|
|
4
|
+
controls: {
|
|
5
|
+
runsPerMonth: {
|
|
6
|
+
type: CONTROL.Stepper,
|
|
7
|
+
defaultValue: 50,
|
|
8
|
+
accessorKey: 'runsPerMonth',
|
|
9
|
+
decoratorProps: {
|
|
10
|
+
label: 'Количество запусков шагов в месяц (50 бесплатно)',
|
|
11
|
+
labelTooltip: '1 деплой в Services = состоит минимум из 3 шагов',
|
|
12
|
+
},
|
|
13
|
+
uiProps: {
|
|
14
|
+
min: 0,
|
|
15
|
+
step: 10,
|
|
16
|
+
max: 30000,
|
|
17
|
+
postfix: 'шт',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AirflowSVG, ArenadataDbSVG, ArtifactRegistrySVG, BareMetalSVG, ContainerAppsSVG, EvoDnsSVG, EvolutionBiSVG, EvolutionComputeSVG, JupyterServersSVG, LoadBalancerSVG, ManagedClickHouseSVG, ManagedKafkaSVG, ManagedKubernetesSVG, ManagedPostgreSqlSVG, MetastoreSVG, MlInferenceSVG, PublicIpSVG, RedisSVG, S3StorageSVG, SnatSVG, SparkSVG, TrinoSVG, } from '@cloud-ru/uikit-product-icons';
|
|
1
|
+
import { AirflowSVG, ArenadataDbSVG, ArtifactRegistrySVG, BareMetalSVG, ContainerAppsSVG, EvoDnsSVG, EvolutionBiSVG, EvolutionComputeSVG, EvolutionPipelineSVG, JupyterServersSVG, LoadBalancerSVG, ManagedClickHouseSVG, ManagedKafkaSVG, ManagedKubernetesSVG, ManagedPostgreSqlSVG, MetastoreSVG, MlInferenceSVG, PublicIpSVG, RedisSVG, S3StorageSVG, SnatSVG, SparkSVG, TrinoSVG, } from '@cloud-ru/uikit-product-icons';
|
|
2
2
|
import { PLATFORM } from '../../../constants';
|
|
3
3
|
import { EVOLUTION_PRODUCT } from './constants';
|
|
4
|
-
import { EVOLUTION_ARENADATA_DB_FORM_CONFIG, EVOLUTION_ARTIFACT_REGISTRY, EVOLUTION_BARE_METAL_FORM_CONFIG, EVOLUTION_CLOUD_SERVER_FORM_CONFIG, EVOLUTION_CLOUD_SERVER_FREE_TIER_FORM_CONFIG, EVOLUTION_CONTAINER_APPS_CONFIG, EVOLUTION_CONTAINER_APPS_FREE_TIER_CONFIG, EVOLUTION_DNS_CONFIG, EVOLUTION_KUBERNETES_FORM_CONFIG, EVOLUTION_LOAD_BALANCER_CONFIG, EVOLUTION_MANAGED_AIRFLOW_CONFIG, EVOLUTION_MANAGED_BI, EVOLUTION_MANAGED_CLICKHOUSE_CONFIG, EVOLUTION_MANAGED_KAFKA_CONFIG, EVOLUTION_MANAGED_METASTORE_CONFIG, EVOLUTION_MANAGED_REDIS_CONFIG, EVOLUTION_MANAGED_SPARK_CONFIG, EVOLUTION_MANAGED_TRINO_CONFIG, EVOLUTION_ML_INFERENCE_FORM_CONFIG, EVOLUTION_NOTEBOOKS_CONFIG, EVOLUTION_POSTGRE_SQL_FORM_CONFIG, EVOLUTION_PUBLIC_IP_FORM_CONFIG, EVOLUTION_SNAT_GATEWAY_FORM_CONFIG, EVOLUTION_STORAGE_S3_FORM_CONFIG, EVOLUTION_STORAGE_S3_FREE_TIER_FORM_CONFIG, } from './product-config';
|
|
4
|
+
import { EVOLUTION_ARENADATA_DB_FORM_CONFIG, EVOLUTION_ARTIFACT_REGISTRY, EVOLUTION_BARE_METAL_FORM_CONFIG, EVOLUTION_CLOUD_SERVER_FORM_CONFIG, EVOLUTION_CLOUD_SERVER_FREE_TIER_FORM_CONFIG, EVOLUTION_CONTAINER_APPS_CONFIG, EVOLUTION_CONTAINER_APPS_FREE_TIER_CONFIG, EVOLUTION_DNS_CONFIG, EVOLUTION_KUBERNETES_FORM_CONFIG, EVOLUTION_LOAD_BALANCER_CONFIG, EVOLUTION_MANAGED_AIRFLOW_CONFIG, EVOLUTION_MANAGED_BI, EVOLUTION_MANAGED_CLICKHOUSE_CONFIG, EVOLUTION_MANAGED_KAFKA_CONFIG, EVOLUTION_MANAGED_METASTORE_CONFIG, EVOLUTION_MANAGED_REDIS_CONFIG, EVOLUTION_MANAGED_SPARK_CONFIG, EVOLUTION_MANAGED_TRINO_CONFIG, EVOLUTION_ML_INFERENCE_FORM_CONFIG, EVOLUTION_NOTEBOOKS_CONFIG, EVOLUTION_POSTGRE_SQL_FORM_CONFIG, EVOLUTION_PUBLIC_IP_FORM_CONFIG, EVOLUTION_SNAT_GATEWAY_FORM_CONFIG, EVOLUTION_STORAGE_S3_FORM_CONFIG, EVOLUTION_STORAGE_S3_FREE_TIER_FORM_CONFIG, EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG, } from './product-config';
|
|
5
5
|
export const EVOLUTION_PRODUCTS = {
|
|
6
6
|
[EVOLUTION_PRODUCT.EvolutionCloudServer]: {
|
|
7
7
|
id: EVOLUTION_PRODUCT.EvolutionCloudServer,
|
|
@@ -276,4 +276,15 @@ export const EVOLUTION_PRODUCTS = {
|
|
|
276
276
|
enableChangeProductQuantity: true,
|
|
277
277
|
enableConnectToConsole: true,
|
|
278
278
|
},
|
|
279
|
+
[EVOLUTION_PRODUCT.EvolutionWorkflowStudio]: {
|
|
280
|
+
id: EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
281
|
+
platform: PLATFORM.Evolution,
|
|
282
|
+
label: 'Evolution Workflow Studio',
|
|
283
|
+
caption: 'Платформа для создания инженерных сценариев в облаке',
|
|
284
|
+
icon: EvolutionPipelineSVG,
|
|
285
|
+
formConfig: EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG,
|
|
286
|
+
dataTestId: EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
287
|
+
enableChangeProductQuantity: false,
|
|
288
|
+
enableConnectToConsole: true,
|
|
289
|
+
},
|
|
279
290
|
};
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
import { useCalculatorContext } from '../contexts';
|
|
2
2
|
import { filterNonEmptyArrays } from '../utils/filterNonEmptyArrays';
|
|
3
3
|
const deleteItem = (productId, idx) => (oldValue) => {
|
|
4
|
-
const oldArrayValue = oldValue[productId];
|
|
4
|
+
const oldArrayValue = oldValue[productId !== null && productId !== void 0 ? productId : 0];
|
|
5
5
|
if (!oldArrayValue) {
|
|
6
6
|
return oldValue;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
oldArrayValue.splice(idx !== null && idx !== void 0 ? idx : 0, 1);
|
|
9
|
+
const newValue = Object.assign(Object.assign({}, oldValue), { [productId]: oldArrayValue });
|
|
10
|
+
return Object.assign({}, filterNonEmptyArrays(newValue));
|
|
9
11
|
};
|
|
10
12
|
export function useProductDelete() {
|
|
11
13
|
const { setSelectedProduct, selectedProduct, products, setProducts, actions: { onProductDelete }, } = useCalculatorContext();
|
|
12
14
|
return (productId, idx) => {
|
|
13
|
-
const nextProducts = deleteItem(productId, idx)(products);
|
|
14
15
|
setProducts(deleteItem(productId, idx));
|
|
15
16
|
onProductDelete === null || onProductDelete === void 0 ? void 0 : onProductDelete(productId);
|
|
16
|
-
if ((selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const newProductId = Object.keys(nextProducts).find(id => nextProducts[id].length > 0);
|
|
25
|
-
setSelectedProduct(newProductId ? { id: newProductId, idx: 0 } : null);
|
|
17
|
+
if ((selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.id) === productId && (selectedProduct === null || selectedProduct === void 0 ? void 0 : selectedProduct.idx) === idx) {
|
|
18
|
+
const newProductId = Object.keys(products).find(productId => products[productId].length > 0);
|
|
19
|
+
if (newProductId) {
|
|
20
|
+
setSelectedProduct({ id: newProductId, idx: 0 });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
setSelectedProduct(null);
|
|
24
|
+
}
|
|
26
25
|
}
|
|
27
26
|
};
|
|
28
27
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-ru/uikit-product-calculator",
|
|
3
3
|
"title": "Calculator",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.css",
|
|
7
7
|
"*.woff",
|
|
@@ -60,12 +60,12 @@
|
|
|
60
60
|
"deepmerge": "^4.3.1",
|
|
61
61
|
"lodash": "^4.18.1",
|
|
62
62
|
"swr": "^2.2.5",
|
|
63
|
-
"@cloud-ru/uikit-product-icons": "19.2.0",
|
|
64
|
-
"@cloud-ru/uikit-product-mobile-
|
|
65
|
-
"@cloud-ru/uikit-product-
|
|
66
|
-
"@cloud-ru/uikit-product-mobile-fields": "3.0.2",
|
|
67
|
-
"@cloud-ru/uikit-product-mobile-
|
|
68
|
-
"@cloud-ru/uikit-product-
|
|
63
|
+
"@cloud-ru/uikit-product-icons": "^19.2.0",
|
|
64
|
+
"@cloud-ru/uikit-product-mobile-modal": "^3.0.2",
|
|
65
|
+
"@cloud-ru/uikit-product-utils": "^10.0.0",
|
|
66
|
+
"@cloud-ru/uikit-product-mobile-fields": "^3.0.2",
|
|
67
|
+
"@cloud-ru/uikit-product-mobile-dropdown": "^3.0.2",
|
|
68
|
+
"@cloud-ru/uikit-product-mobile-accordion": "^2.0.2"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@types/lodash": "4.17.24"
|
|
@@ -49,6 +49,12 @@ export const EVOLUTION_CATALOG: CatalogConfig['catalog'] = {
|
|
|
49
49
|
EVOLUTION_PRODUCT.EvolutionArtifactRegistry,
|
|
50
50
|
],
|
|
51
51
|
},
|
|
52
|
+
{
|
|
53
|
+
id: CATEGORY.Development,
|
|
54
|
+
label: 'Разработка',
|
|
55
|
+
dataTestId: 'development',
|
|
56
|
+
visibleProducts: [EVOLUTION_PRODUCT.EvolutionWorkflowStudio],
|
|
57
|
+
},
|
|
52
58
|
{
|
|
53
59
|
id: CATEGORY.Database,
|
|
54
60
|
label: 'Платформы данных',
|
|
@@ -24,6 +24,7 @@ export const EVOLUTION_PRODUCT = {
|
|
|
24
24
|
EvolutionManagedKafka: 'evolutionManagedKafka',
|
|
25
25
|
EvolutionLoadBalancer: 'evolutionLoadBalancer',
|
|
26
26
|
EvolutionNotebooks: 'evolutionNotebooks',
|
|
27
|
+
EvolutionWorkflowStudio: 'evolutionWorkflowStudio',
|
|
27
28
|
} as const;
|
|
28
29
|
|
|
29
30
|
const GuaranteedPartItem = {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CONTROL, FormConfig } from '../../../../components';
|
|
2
|
+
|
|
3
|
+
export const EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG: FormConfig = {
|
|
4
|
+
ui: [['runsPerMonth']],
|
|
5
|
+
controls: {
|
|
6
|
+
runsPerMonth: {
|
|
7
|
+
type: CONTROL.Stepper,
|
|
8
|
+
defaultValue: 50,
|
|
9
|
+
accessorKey: 'runsPerMonth',
|
|
10
|
+
decoratorProps: {
|
|
11
|
+
label: 'Количество запусков шагов в месяц (50 бесплатно)',
|
|
12
|
+
labelTooltip: '1 деплой в Services = состоит минимум из 3 шагов',
|
|
13
|
+
},
|
|
14
|
+
uiProps: {
|
|
15
|
+
min: 0,
|
|
16
|
+
step: 10,
|
|
17
|
+
max: 30000,
|
|
18
|
+
postfix: 'шт',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
EvoDnsSVG,
|
|
8
8
|
EvolutionBiSVG,
|
|
9
9
|
EvolutionComputeSVG,
|
|
10
|
+
EvolutionPipelineSVG,
|
|
10
11
|
JupyterServersSVG,
|
|
11
12
|
LoadBalancerSVG,
|
|
12
13
|
ManagedClickHouseSVG,
|
|
@@ -52,6 +53,7 @@ import {
|
|
|
52
53
|
EVOLUTION_SNAT_GATEWAY_FORM_CONFIG,
|
|
53
54
|
EVOLUTION_STORAGE_S3_FORM_CONFIG,
|
|
54
55
|
EVOLUTION_STORAGE_S3_FREE_TIER_FORM_CONFIG,
|
|
56
|
+
EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG,
|
|
55
57
|
} from './product-config';
|
|
56
58
|
|
|
57
59
|
export const EVOLUTION_PRODUCTS: CatalogConfig['products'] = {
|
|
@@ -329,4 +331,15 @@ export const EVOLUTION_PRODUCTS: CatalogConfig['products'] = {
|
|
|
329
331
|
enableChangeProductQuantity: true,
|
|
330
332
|
enableConnectToConsole: true,
|
|
331
333
|
},
|
|
334
|
+
[EVOLUTION_PRODUCT.EvolutionWorkflowStudio]: {
|
|
335
|
+
id: EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
336
|
+
platform: PLATFORM.Evolution,
|
|
337
|
+
label: 'Evolution Workflow Studio',
|
|
338
|
+
caption: 'Платформа для создания инженерных сценариев в облаке',
|
|
339
|
+
icon: EvolutionPipelineSVG,
|
|
340
|
+
formConfig: EVOLUTION_WORKFLOW_STUDIO_FORM_CONFIG,
|
|
341
|
+
dataTestId: EVOLUTION_PRODUCT.EvolutionWorkflowStudio,
|
|
342
|
+
enableChangeProductQuantity: false,
|
|
343
|
+
enableConnectToConsole: true,
|
|
344
|
+
},
|
|
332
345
|
};
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCalculatorContext } from '../contexts';
|
|
2
|
+
import { FormValues } from '../types';
|
|
2
3
|
import { filterNonEmptyArrays } from '../utils/filterNonEmptyArrays';
|
|
3
4
|
|
|
4
|
-
const deleteItem =
|
|
5
|
-
|
|
6
|
-
(oldValue: ProductsState): ProductsState => {
|
|
7
|
-
const oldArrayValue = oldValue[productId];
|
|
5
|
+
const deleteItem = (productId: string, idx: number) => (oldValue: FormValues) => {
|
|
6
|
+
const oldArrayValue = oldValue[productId ?? 0];
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
if (!oldArrayValue) {
|
|
9
|
+
return oldValue;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
oldArrayValue.splice(idx ?? 0, 1);
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
14
|
+
const newValue = {
|
|
15
|
+
...oldValue,
|
|
16
|
+
[productId]: oldArrayValue,
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
+
return { ...filterNonEmptyArrays(newValue) };
|
|
20
|
+
};
|
|
21
|
+
|
|
19
22
|
export function useProductDelete() {
|
|
20
23
|
const {
|
|
21
24
|
setSelectedProduct,
|
|
@@ -26,25 +29,18 @@ export function useProductDelete() {
|
|
|
26
29
|
} = useCalculatorContext();
|
|
27
30
|
|
|
28
31
|
return (productId: string, idx: number) => {
|
|
29
|
-
const nextProducts = deleteItem(productId, idx)(products);
|
|
30
|
-
|
|
31
32
|
setProducts(deleteItem(productId, idx));
|
|
32
33
|
|
|
33
34
|
onProductDelete?.(productId);
|
|
34
35
|
|
|
35
|
-
if (selectedProduct?.id
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (selectedProduct.idx > idx) {
|
|
40
|
-
setSelectedProduct({ id: productId, idx: selectedProduct.idx - 1 });
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (selectedProduct.idx === idx) {
|
|
45
|
-
const newProductId = Object.keys(nextProducts).find(id => nextProducts[id].length > 0);
|
|
36
|
+
if (selectedProduct?.id === productId && selectedProduct?.idx === idx) {
|
|
37
|
+
const newProductId = Object.keys(products).find(productId => products[productId].length > 0);
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
if (newProductId) {
|
|
40
|
+
setSelectedProduct({ id: newProductId, idx: 0 });
|
|
41
|
+
} else {
|
|
42
|
+
setSelectedProduct(null);
|
|
43
|
+
}
|
|
48
44
|
}
|
|
49
45
|
};
|
|
50
46
|
}
|