@cloud-ru/uikit-product-calculator 0.34.0 → 0.35.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 (39) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/components/Catalog/Catalog.js +2 -0
  3. package/dist/cjs/components/Controls/SelectControl/SelectControl.d.ts +1 -0
  4. package/dist/cjs/components/Controls/SelectControl/SelectControl.js +1 -0
  5. package/dist/cjs/config/platforms/advanced/product-config/AdvancedMySqlDataBase.js +1 -1
  6. package/dist/cjs/config/platforms/advanced/product-config/AdvancedPostgreSqlDatabase.js +1 -1
  7. package/dist/cjs/config/utils/{diskPostgreSqlMySQL.d.ts → diskPostgreSqlMySQL/diskPostgreSqlMySQL.d.ts} +3 -1
  8. package/dist/cjs/config/utils/{diskPostgreSqlMySQL.js → diskPostgreSqlMySQL/diskPostgreSqlMySQL.js} +10 -1
  9. package/dist/cjs/config/utils/diskPostgreSqlMySQL/index.d.ts +1 -0
  10. package/dist/cjs/config/utils/diskPostgreSqlMySQL/index.js +5 -0
  11. package/dist/cjs/config/utils/diskPostgreSqlMySQL/styles.module.css +6 -0
  12. package/dist/cjs/hooks/index.d.ts +1 -0
  13. package/dist/cjs/hooks/index.js +1 -0
  14. package/dist/cjs/hooks/useCatalogLockBodyScroll.d.ts +5 -0
  15. package/dist/cjs/hooks/useCatalogLockBodyScroll.js +19 -0
  16. package/dist/esm/components/Catalog/Catalog.js +3 -1
  17. package/dist/esm/components/Controls/SelectControl/SelectControl.d.ts +1 -0
  18. package/dist/esm/components/Controls/SelectControl/SelectControl.js +1 -0
  19. package/dist/esm/config/platforms/advanced/product-config/AdvancedMySqlDataBase.js +1 -1
  20. package/dist/esm/config/platforms/advanced/product-config/AdvancedPostgreSqlDatabase.js +1 -1
  21. package/dist/esm/config/utils/{diskPostgreSqlMySQL.d.ts → diskPostgreSqlMySQL/diskPostgreSqlMySQL.d.ts} +3 -1
  22. package/dist/esm/config/utils/{diskPostgreSqlMySQL.js → diskPostgreSqlMySQL/diskPostgreSqlMySQL.js} +7 -1
  23. package/dist/esm/config/utils/diskPostgreSqlMySQL/index.d.ts +1 -0
  24. package/dist/esm/config/utils/diskPostgreSqlMySQL/index.js +1 -0
  25. package/dist/esm/config/utils/diskPostgreSqlMySQL/styles.module.css +6 -0
  26. package/dist/esm/hooks/index.d.ts +1 -0
  27. package/dist/esm/hooks/index.js +1 -0
  28. package/dist/esm/hooks/useCatalogLockBodyScroll.d.ts +5 -0
  29. package/dist/esm/hooks/useCatalogLockBodyScroll.js +15 -0
  30. package/package.json +2 -2
  31. package/src/components/Catalog/Catalog.tsx +4 -1
  32. package/src/components/Controls/SelectControl/SelectControl.tsx +2 -0
  33. package/src/config/platforms/advanced/product-config/AdvancedMySqlDataBase.ts +1 -1
  34. package/src/config/platforms/advanced/product-config/AdvancedPostgreSqlDatabase.ts +1 -1
  35. package/src/config/utils/{diskPostgreSqlMySQL.ts → diskPostgreSqlMySQL/diskPostgreSqlMySQL.tsx} +14 -1
  36. package/src/config/utils/diskPostgreSqlMySQL/index.ts +1 -0
  37. package/src/config/utils/diskPostgreSqlMySQL/styles.module.scss +8 -0
  38. package/src/hooks/index.ts +1 -0
  39. package/src/hooks/useCatalogLockBodyScroll.ts +19 -0
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
+ # 0.35.0 (2025-11-19)
7
+
8
+
9
+ ### Features
10
+
11
+ * **SITE-10199:** update calculator info and fox scroll calculator ([396c783](https://gitverse.ru/cloud-ru-tech/uikit-product/commits/396c78336370e1c87d565e8b16bc5445d636cb28))
12
+
13
+
14
+
15
+
16
+
6
17
  # 0.34.0 (2025-11-14)
7
18
 
8
19
 
@@ -45,6 +45,8 @@ function Catalog() {
45
45
  },
46
46
  'data-test-id': dataTestId,
47
47
  }));
48
+ // FIXME: убрать после задачи PDS-3175
49
+ (0, hooks_1.useCatalogLockBodyScroll)({ catalogOpen: catalogOpen });
48
50
  const [openMobileCategory, setOpenMobileCategory] = (0, react_1.useState)(false);
49
51
  const isMobile = layoutType !== uikit_product_utils_1.LAYOUT_TYPE.Desktop && layoutType !== uikit_product_utils_1.LAYOUT_TYPE.DesktopSmall;
50
52
  const AdaptiveModal = isMobile ? uikit_product_mobile_modal_1.MobileModalCustom : modal_1.ModalCustom;
@@ -10,6 +10,7 @@ export type SelectControlItem = {
10
10
  icon?: ReactNode;
11
11
  disabled?: boolean;
12
12
  disabledReason?: ReactNode;
13
+ afterContent?: ReactNode;
13
14
  dataTestId?: string;
14
15
  onChangePeriod?: (value: PRICE_PERIOD) => void;
15
16
  canChangeWholePricePeriod?: boolean;
@@ -19,6 +19,7 @@ function convertItemsToOptions(items) {
19
19
  disabled: item.disabled,
20
20
  option: (_a = item.label) !== null && _a !== void 0 ? _a : item.value,
21
21
  beforeContent: item.icon,
22
+ afterContent: item.afterContent,
22
23
  });
23
24
  });
24
25
  }
@@ -16,7 +16,7 @@ const bdEngineVersionItems = [
16
16
  },
17
17
  {
18
18
  value: BdEngineVersionItem.General_Purpose,
19
- label: 'General Purpose',
19
+ label: 'General-Purpose',
20
20
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
21
21
  },
22
22
  ];
@@ -33,7 +33,7 @@ const bdEngineVersionItems = [
33
33
  },
34
34
  {
35
35
  value: BdEngineVersionItem.General_Purpose,
36
- label: 'General Purpose',
36
+ label: 'General-Purpose',
37
37
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
38
38
  },
39
39
  ];
@@ -1,5 +1,5 @@
1
1
  import { ValueOf } from '@snack-uikit/utils';
2
- import { ObjectControl, SelectSingleControl, StepperControl } from '../../components';
2
+ import { ObjectControl, SelectSingleControl, StepperControl } from '../../../components';
3
3
  export declare const SpecificationItem: {
4
4
  readonly Extreme_SSD: "Extreme SSD";
5
5
  readonly Cloud_SSD: "Cloud SSD";
@@ -8,9 +8,11 @@ export declare const SpecificationItem: {
8
8
  export declare const specificationItems: ({
9
9
  value: "Extreme SSD";
10
10
  label: string;
11
+ afterContent: import("react/jsx-runtime").JSX.Element;
11
12
  } | {
12
13
  value: "Cloud SSD";
13
14
  label: string;
15
+ afterContent: import("react/jsx-runtime").JSX.Element;
14
16
  })[];
15
17
  type DiskSpecification = ValueOf<typeof SpecificationItem>;
16
18
  type GetDiskProps = {
@@ -10,10 +10,17 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  }
11
11
  return t;
12
12
  };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
13
16
  Object.defineProperty(exports, "__esModule", { value: true });
14
17
  exports.specificationItems = exports.SpecificationItem = void 0;
15
18
  exports.getDisk = getDisk;
16
- const components_1 = require("../../components");
19
+ const jsx_runtime_1 = require("react/jsx-runtime");
20
+ const uikit_product_icons_1 = require("@cloud-ru/uikit-product-icons");
21
+ const tooltip_1 = require("@snack-uikit/tooltip");
22
+ const components_1 = require("../../../components");
23
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
17
24
  exports.SpecificationItem = {
18
25
  Extreme_SSD: 'Extreme SSD',
19
26
  Cloud_SSD: 'Cloud SSD',
@@ -23,10 +30,12 @@ exports.specificationItems = [
23
30
  {
24
31
  value: exports.SpecificationItem.Extreme_SSD,
25
32
  label: 'Extreme SSD',
33
+ afterContent: ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { tip: '\u0414\u0438\u0441\u043A\u0438 Ultra-high I/O \u0441 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u043D\u043E\u0439 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u043D\u043E\u0439 \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u043E\u0441\u0442\u044C\u044E', children: (0, jsx_runtime_1.jsx)(uikit_product_icons_1.QuestionRoundSVG, { size: 20, className: styles_module_scss_1.default.icon, "data-test-id": 'field-decorator__label-tooltip-trigger' }) })),
26
34
  },
27
35
  {
28
36
  value: exports.SpecificationItem.Cloud_SSD,
29
37
  label: 'Cloud SSD',
38
+ afterContent: ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { tip: '\u0414\u0438\u0441\u043A\u0438 Ultra-high I/O', children: (0, jsx_runtime_1.jsx)(uikit_product_icons_1.QuestionRoundSVG, { size: 20, className: styles_module_scss_1.default.icon, "data-test-id": 'field-decorator__label-tooltip-trigger' }) })),
30
39
  },
31
40
  ];
32
41
  function getDisk({ space, specification }) {
@@ -0,0 +1 @@
1
+ export { getDisk } from './diskPostgreSqlMySQL';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDisk = void 0;
4
+ var diskPostgreSqlMySQL_1 = require("./diskPostgreSqlMySQL");
5
+ Object.defineProperty(exports, "getDisk", { enumerable: true, get: function () { return diskPostgreSqlMySQL_1.getDisk; } });
@@ -0,0 +1,6 @@
1
+ .icon{
2
+ flex-shrink:0;
3
+ box-sizing:content-box;
4
+ color:var(--sys-neutral-text-light, #8b8e9b);
5
+ margin:auto 0;
6
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './useAdaptive';
2
2
  export * from './useCatalogCardClick';
3
+ export * from './useCatalogLockBodyScroll';
3
4
  export * from './useProductClick';
4
5
  export * from './useProductDelete';
@@ -16,5 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./useAdaptive"), exports);
18
18
  __exportStar(require("./useCatalogCardClick"), exports);
19
+ __exportStar(require("./useCatalogLockBodyScroll"), exports);
19
20
  __exportStar(require("./useProductClick"), exports);
20
21
  __exportStar(require("./useProductDelete"), exports);
@@ -0,0 +1,5 @@
1
+ type UseLockBodyScrollProps = {
2
+ catalogOpen: boolean;
3
+ };
4
+ export declare const useCatalogLockBodyScroll: ({ catalogOpen }: UseLockBodyScrollProps) => void;
5
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCatalogLockBodyScroll = void 0;
4
+ const react_1 = require("react");
5
+ // FIXME: убрать после задачи PDS-3175
6
+ const useCatalogLockBodyScroll = ({ catalogOpen }) => {
7
+ (0, react_1.useEffect)(() => {
8
+ if (catalogOpen) {
9
+ document.body.style.overflow = 'hidden';
10
+ }
11
+ else {
12
+ document.body.style.overflow = 'auto';
13
+ }
14
+ return () => {
15
+ document.body.style.overflow = 'auto';
16
+ };
17
+ }, [catalogOpen]);
18
+ };
19
+ exports.useCatalogLockBodyScroll = useCatalogLockBodyScroll;
@@ -14,7 +14,7 @@ import { ModalCustom } from '@snack-uikit/modal';
14
14
  import { Tag } from '@snack-uikit/tag';
15
15
  import { Tooltip } from '@snack-uikit/tooltip';
16
16
  import { useCalculatorContext } from '../../contexts';
17
- import { useCatalogCardClick } from '../../hooks';
17
+ import { useCatalogCardClick, useCatalogLockBodyScroll } from '../../hooks';
18
18
  import { parseKeyToDataTest } from '../../utils';
19
19
  import { PrivateCardHeader } from './components';
20
20
  import styles from './styles.module.css';
@@ -39,6 +39,8 @@ export function Catalog() {
39
39
  },
40
40
  'data-test-id': dataTestId,
41
41
  }));
42
+ // FIXME: убрать после задачи PDS-3175
43
+ useCatalogLockBodyScroll({ catalogOpen: catalogOpen });
42
44
  const [openMobileCategory, setOpenMobileCategory] = useState(false);
43
45
  const isMobile = layoutType !== LAYOUT_TYPE.Desktop && layoutType !== LAYOUT_TYPE.DesktopSmall;
44
46
  const AdaptiveModal = isMobile ? MobileModalCustom : ModalCustom;
@@ -10,6 +10,7 @@ export type SelectControlItem = {
10
10
  icon?: ReactNode;
11
11
  disabled?: boolean;
12
12
  disabledReason?: ReactNode;
13
+ afterContent?: ReactNode;
13
14
  dataTestId?: string;
14
15
  onChangePeriod?: (value: PRICE_PERIOD) => void;
15
16
  canChangeWholePricePeriod?: boolean;
@@ -12,6 +12,7 @@ function convertItemsToOptions(items) {
12
12
  disabled: item.disabled,
13
13
  option: (_a = item.label) !== null && _a !== void 0 ? _a : item.value,
14
14
  beforeContent: item.icon,
15
+ afterContent: item.afterContent,
15
16
  });
16
17
  });
17
18
  }
@@ -13,7 +13,7 @@ const bdEngineVersionItems = [
13
13
  },
14
14
  {
15
15
  value: BdEngineVersionItem.General_Purpose,
16
- label: 'General Purpose',
16
+ label: 'General-Purpose',
17
17
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
18
18
  },
19
19
  ];
@@ -30,7 +30,7 @@ const bdEngineVersionItems = [
30
30
  },
31
31
  {
32
32
  value: BdEngineVersionItem.General_Purpose,
33
- label: 'General Purpose',
33
+ label: 'General-Purpose',
34
34
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
35
35
  },
36
36
  ];
@@ -1,5 +1,5 @@
1
1
  import { ValueOf } from '@snack-uikit/utils';
2
- import { ObjectControl, SelectSingleControl, StepperControl } from '../../components';
2
+ import { ObjectControl, SelectSingleControl, StepperControl } from '../../../components';
3
3
  export declare const SpecificationItem: {
4
4
  readonly Extreme_SSD: "Extreme SSD";
5
5
  readonly Cloud_SSD: "Cloud SSD";
@@ -8,9 +8,11 @@ export declare const SpecificationItem: {
8
8
  export declare const specificationItems: ({
9
9
  value: "Extreme SSD";
10
10
  label: string;
11
+ afterContent: import("react/jsx-runtime").JSX.Element;
11
12
  } | {
12
13
  value: "Cloud SSD";
13
14
  label: string;
15
+ afterContent: import("react/jsx-runtime").JSX.Element;
14
16
  })[];
15
17
  type DiskSpecification = ValueOf<typeof SpecificationItem>;
16
18
  type GetDiskProps = {
@@ -9,7 +9,11 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import { CONTROL } from '../../components';
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { QuestionRoundSVG } from '@cloud-ru/uikit-product-icons';
14
+ import { Tooltip } from '@snack-uikit/tooltip';
15
+ import { CONTROL } from '../../../components';
16
+ import styles from './styles.module.css';
13
17
  export const SpecificationItem = {
14
18
  Extreme_SSD: 'Extreme SSD',
15
19
  Cloud_SSD: 'Cloud SSD',
@@ -19,10 +23,12 @@ export const specificationItems = [
19
23
  {
20
24
  value: SpecificationItem.Extreme_SSD,
21
25
  label: 'Extreme SSD',
26
+ afterContent: (_jsx(Tooltip, { tip: '\u0414\u0438\u0441\u043A\u0438 Ultra-high I/O \u0441 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u043D\u043E\u0439 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u043D\u043E\u0439 \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u043E\u0441\u0442\u044C\u044E', children: _jsx(QuestionRoundSVG, { size: 20, className: styles.icon, "data-test-id": 'field-decorator__label-tooltip-trigger' }) })),
22
27
  },
23
28
  {
24
29
  value: SpecificationItem.Cloud_SSD,
25
30
  label: 'Cloud SSD',
31
+ afterContent: (_jsx(Tooltip, { tip: '\u0414\u0438\u0441\u043A\u0438 Ultra-high I/O', children: _jsx(QuestionRoundSVG, { size: 20, className: styles.icon, "data-test-id": 'field-decorator__label-tooltip-trigger' }) })),
26
32
  },
27
33
  ];
28
34
  export function getDisk({ space, specification }) {
@@ -0,0 +1 @@
1
+ export { getDisk } from './diskPostgreSqlMySQL';
@@ -0,0 +1 @@
1
+ export { getDisk } from './diskPostgreSqlMySQL';
@@ -0,0 +1,6 @@
1
+ .icon{
2
+ flex-shrink:0;
3
+ box-sizing:content-box;
4
+ color:var(--sys-neutral-text-light, #8b8e9b);
5
+ margin:auto 0;
6
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './useAdaptive';
2
2
  export * from './useCatalogCardClick';
3
+ export * from './useCatalogLockBodyScroll';
3
4
  export * from './useProductClick';
4
5
  export * from './useProductDelete';
@@ -1,4 +1,5 @@
1
1
  export * from './useAdaptive';
2
2
  export * from './useCatalogCardClick';
3
+ export * from './useCatalogLockBodyScroll';
3
4
  export * from './useProductClick';
4
5
  export * from './useProductDelete';
@@ -0,0 +1,5 @@
1
+ type UseLockBodyScrollProps = {
2
+ catalogOpen: boolean;
3
+ };
4
+ export declare const useCatalogLockBodyScroll: ({ catalogOpen }: UseLockBodyScrollProps) => void;
5
+ export {};
@@ -0,0 +1,15 @@
1
+ import { useEffect } from 'react';
2
+ // FIXME: убрать после задачи PDS-3175
3
+ export const useCatalogLockBodyScroll = ({ catalogOpen }) => {
4
+ useEffect(() => {
5
+ if (catalogOpen) {
6
+ document.body.style.overflow = 'hidden';
7
+ }
8
+ else {
9
+ document.body.style.overflow = 'auto';
10
+ }
11
+ return () => {
12
+ document.body.style.overflow = 'auto';
13
+ };
14
+ }, [catalogOpen]);
15
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloud-ru/uikit-product-calculator",
3
3
  "title": "Calculator",
4
- "version": "0.34.0",
4
+ "version": "0.35.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": "6380c68516813bbe2c59dbe0b4d7ed89093cc9c7"
74
+ "gitHead": "021abe9a1bb7c6d6bc751ee4e4b6f4bcd3e7b4e7"
75
75
  }
@@ -15,7 +15,7 @@ import { Tag } from '@snack-uikit/tag';
15
15
  import { Tooltip } from '@snack-uikit/tooltip';
16
16
 
17
17
  import { useCalculatorContext } from '../../contexts';
18
- import { useCatalogCardClick } from '../../hooks';
18
+ import { useCatalogCardClick, useCatalogLockBodyScroll } from '../../hooks';
19
19
  import { CatalogConfig, PlatformType } from '../../types';
20
20
  import { parseKeyToDataTest } from '../../utils';
21
21
  import { PrivateCardHeader } from './components';
@@ -67,6 +67,9 @@ export function Catalog() {
67
67
  'data-test-id': dataTestId,
68
68
  }));
69
69
 
70
+ // FIXME: убрать после задачи PDS-3175
71
+ useCatalogLockBodyScroll({ catalogOpen: catalogOpen });
72
+
70
73
  const [openMobileCategory, setOpenMobileCategory] = useState<boolean>(false);
71
74
 
72
75
  const isMobile = layoutType !== LAYOUT_TYPE.Desktop && layoutType !== LAYOUT_TYPE.DesktopSmall;
@@ -17,6 +17,7 @@ export type SelectControlItem = {
17
17
  icon?: ReactNode;
18
18
  disabled?: boolean;
19
19
  disabledReason?: ReactNode;
20
+ afterContent?: ReactNode;
20
21
  dataTestId?: string;
21
22
  onChangePeriod?: (value: PRICE_PERIOD) => void;
22
23
  canChangeWholePricePeriod?: boolean;
@@ -65,6 +66,7 @@ function convertItemsToOptions(items: SelectControlItem[]): BaseOptionProps[] {
65
66
  disabled: item.disabled,
66
67
  option: item.label ?? item.value,
67
68
  beforeContent: item.icon,
69
+ afterContent: item.afterContent,
68
70
  }));
69
71
  }
70
72
 
@@ -15,7 +15,7 @@ const bdEngineVersionItems = [
15
15
  },
16
16
  {
17
17
  value: BdEngineVersionItem.General_Purpose,
18
- label: 'General Purpose',
18
+ label: 'General-Purpose',
19
19
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
20
20
  },
21
21
  ];
@@ -34,7 +34,7 @@ const bdEngineVersionItems = [
34
34
  },
35
35
  {
36
36
  value: BdEngineVersionItem.General_Purpose,
37
- label: 'General Purpose',
37
+ label: 'General-Purpose',
38
38
  description: `Инстансы используют ресурсы процессора совместно с другими инстансами того же класса, размещенными на одном физическом сервере`,
39
39
  },
40
40
  ];
@@ -1,6 +1,9 @@
1
+ import { QuestionRoundSVG } from '@cloud-ru/uikit-product-icons';
2
+ import { Tooltip } from '@snack-uikit/tooltip';
1
3
  import { ValueOf } from '@snack-uikit/utils';
2
4
 
3
- import { CONTROL, ObjectControl, SelectSingleControl, StepperControl } from '../../components';
5
+ import { CONTROL, ObjectControl, SelectSingleControl, StepperControl } from '../../../components';
6
+ import styles from './styles.module.scss';
4
7
 
5
8
  export const SpecificationItem = {
6
9
  Extreme_SSD: 'Extreme SSD',
@@ -12,10 +15,20 @@ export const specificationItems = [
12
15
  {
13
16
  value: SpecificationItem.Extreme_SSD,
14
17
  label: 'Extreme SSD',
18
+ afterContent: (
19
+ <Tooltip tip='Диски Ultra-high I/O с увеличенной пропускной способностью'>
20
+ <QuestionRoundSVG size={20} className={styles.icon} data-test-id='field-decorator__label-tooltip-trigger' />
21
+ </Tooltip>
22
+ ),
15
23
  },
16
24
  {
17
25
  value: SpecificationItem.Cloud_SSD,
18
26
  label: 'Cloud SSD',
27
+ afterContent: (
28
+ <Tooltip tip='Диски Ultra-high I/O'>
29
+ <QuestionRoundSVG size={20} className={styles.icon} data-test-id='field-decorator__label-tooltip-trigger' />
30
+ </Tooltip>
31
+ ),
19
32
  },
20
33
  ];
21
34
 
@@ -0,0 +1 @@
1
+ export { getDisk } from './diskPostgreSqlMySQL';
@@ -0,0 +1,8 @@
1
+ @use '@sbercloud/figma-tokens-cloud-platform/build/scss/components/styles-tokens-fields' as styles-tokens-fields;
2
+
3
+ .icon {
4
+ flex-shrink: 0;
5
+ box-sizing: content-box;
6
+ color: styles-tokens-fields.$sys-neutral-text-light;
7
+ margin: auto 0;
8
+ }
@@ -1,6 +1,7 @@
1
1
  export * from './useAdaptive';
2
2
 
3
3
  export * from './useCatalogCardClick';
4
+ export * from './useCatalogLockBodyScroll';
4
5
 
5
6
  export * from './useProductClick';
6
7
  export * from './useProductDelete';
@@ -0,0 +1,19 @@
1
+ import { useEffect } from 'react';
2
+
3
+ type UseLockBodyScrollProps = {
4
+ catalogOpen: boolean;
5
+ };
6
+
7
+ // FIXME: убрать после задачи PDS-3175
8
+ export const useCatalogLockBodyScroll = ({ catalogOpen }: UseLockBodyScrollProps) => {
9
+ useEffect(() => {
10
+ if (catalogOpen) {
11
+ document.body.style.overflow = 'hidden';
12
+ } else {
13
+ document.body.style.overflow = 'auto';
14
+ }
15
+ return () => {
16
+ document.body.style.overflow = 'auto';
17
+ };
18
+ }, [catalogOpen]);
19
+ };