@ytsaurus/ui 1.62.0 → 1.63.1

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 (113) hide show
  1. package/dist/public/build/assets-manifest.json +69 -69
  2. package/dist/public/build/css/7540.b48a154e.chunk.css +2 -0
  3. package/dist/public/build/css/7540.b48a154e.chunk.css.map +1 -0
  4. package/dist/public/build/css/{cluster-page-wrapper.0b62c90f.chunk.css → cluster-page-wrapper.0b6a786f.chunk.css} +2 -2
  5. package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +1 -0
  6. package/dist/public/build/css/{main.a99b07c5.css → main.070fd473.css} +2 -2
  7. package/dist/public/build/css/main.070fd473.css.map +1 -0
  8. package/dist/public/build/css/navigation.0a141599.chunk.css +2 -0
  9. package/dist/public/build/css/navigation.0a141599.chunk.css.map +1 -0
  10. package/dist/public/build/css/{system.17b114fc.chunk.css → system.221e5d53.chunk.css} +2 -2
  11. package/dist/public/build/css/{system.17b114fc.chunk.css.map → system.221e5d53.chunk.css.map} +1 -1
  12. package/dist/public/build/js/1110.a7382226.chunk.js +2 -0
  13. package/dist/public/build/js/1110.a7382226.chunk.js.map +1 -0
  14. package/dist/public/build/js/1394.011da2d1.chunk.js +2 -0
  15. package/dist/public/build/js/1394.011da2d1.chunk.js.map +1 -0
  16. package/dist/public/build/js/2447.35b478a9.chunk.js +2 -0
  17. package/dist/public/build/js/2447.35b478a9.chunk.js.map +1 -0
  18. package/dist/public/build/js/4364.aa1ab5fb.chunk.js +2 -0
  19. package/dist/public/build/js/4364.aa1ab5fb.chunk.js.map +1 -0
  20. package/dist/public/build/js/5451.50d8f2b2.chunk.js +3 -0
  21. package/dist/public/build/js/5451.50d8f2b2.chunk.js.LICENSE.txt +5 -0
  22. package/dist/public/build/js/5451.50d8f2b2.chunk.js.map +1 -0
  23. package/dist/public/build/js/5770.0d8fda01.chunk.js +2 -0
  24. package/dist/public/build/js/5770.0d8fda01.chunk.js.map +1 -0
  25. package/dist/public/build/js/{7077.b11a392b.chunk.js → 7077.7dab612c.chunk.js} +2 -2
  26. package/dist/public/build/js/{7077.b11a392b.chunk.js.map → 7077.7dab612c.chunk.js.map} +1 -1
  27. package/dist/public/build/js/7959.e0d47dec.chunk.js +2 -0
  28. package/dist/public/build/js/7959.e0d47dec.chunk.js.map +1 -0
  29. package/dist/public/build/js/{8460.b18e700b.chunk.js → 8460.2b27e2b7.chunk.js} +2 -2
  30. package/dist/public/build/js/{8460.b18e700b.chunk.js.map → 8460.2b27e2b7.chunk.js.map} +1 -1
  31. package/dist/public/build/js/{8778.8d098a1f.chunk.js → 8778.d97acdd6.chunk.js} +2 -2
  32. package/dist/public/build/js/8778.d97acdd6.chunk.js.map +1 -0
  33. package/dist/public/build/js/accounts.badfc837.chunk.js +2 -0
  34. package/dist/public/build/js/{accounts.63268a11.chunk.js.map → accounts.badfc837.chunk.js.map} +1 -1
  35. package/dist/public/build/js/{acl.aa7a9df7.chunk.js → acl.cd1fe761.chunk.js} +2 -2
  36. package/dist/public/build/js/acl.cd1fe761.chunk.js.map +1 -0
  37. package/dist/public/build/js/cluster-menu.bf57160d.chunk.js +2 -0
  38. package/dist/public/build/js/cluster-menu.bf57160d.chunk.js.map +1 -0
  39. package/dist/public/build/js/cluster-page-wrapper.c9e6c27c.chunk.js +2 -0
  40. package/dist/public/build/js/cluster-page-wrapper.c9e6c27c.chunk.js.map +1 -0
  41. package/dist/public/build/js/job.31c91355.chunk.js +2 -0
  42. package/dist/public/build/js/job.31c91355.chunk.js.map +1 -0
  43. package/dist/public/build/js/main.61fc9935.js +3 -0
  44. package/dist/public/build/js/main.61fc9935.js.map +1 -0
  45. package/dist/public/build/js/{manage-tokens.c996037c.chunk.js → manage-tokens.e9106aad.chunk.js} +2 -2
  46. package/dist/public/build/js/{manage-tokens.c996037c.chunk.js.map → manage-tokens.e9106aad.chunk.js.map} +1 -1
  47. package/dist/public/build/js/navigation.22bd542f.chunk.js +2 -0
  48. package/dist/public/build/js/navigation.22bd542f.chunk.js.map +1 -0
  49. package/dist/public/build/js/{odin.ddcd41de.chunk.js → odin.7eefabce.chunk.js} +2 -2
  50. package/dist/public/build/js/{odin.ddcd41de.chunk.js.map → odin.7eefabce.chunk.js.map} +1 -1
  51. package/dist/public/build/js/operations.3feb2deb.chunk.js +2 -0
  52. package/dist/public/build/js/operations.3feb2deb.chunk.js.map +1 -0
  53. package/dist/public/build/js/{query-results.99804b61.chunk.js → query-results.4c207fef.chunk.js} +2 -2
  54. package/dist/public/build/js/{query-results.99804b61.chunk.js.map → query-results.4c207fef.chunk.js.map} +1 -1
  55. package/dist/public/build/js/query-tracker.badbc586.chunk.js +2 -0
  56. package/dist/public/build/js/query-tracker.badbc586.chunk.js.map +1 -0
  57. package/dist/public/build/js/{runtime.8be0e5c6.js → runtime.f98c3e55.js} +2 -2
  58. package/dist/public/build/js/{runtime.8be0e5c6.js.map → runtime.f98c3e55.js.map} +1 -1
  59. package/dist/public/build/js/scheduling.73b1257c.chunk.js +2 -0
  60. package/dist/public/build/js/scheduling.73b1257c.chunk.js.map +1 -0
  61. package/dist/public/build/js/{system.6843a1a3.chunk.js → system.25e9136a.chunk.js} +2 -2
  62. package/dist/public/build/js/system.25e9136a.chunk.js.map +1 -0
  63. package/dist/public/build/js/tablet.7401a5ec.chunk.js +2 -0
  64. package/dist/public/build/js/tablet.7401a5ec.chunk.js.map +1 -0
  65. package/dist/public/build/js/{yt-df-dialog.6b4604c0.chunk.js → yt-df-dialog.69fc013a.chunk.js} +2 -2
  66. package/dist/public/build/js/{yt-df-dialog.6b4604c0.chunk.js.map → yt-df-dialog.69fc013a.chunk.js.map} +1 -1
  67. package/dist/public/build/manifest.json +64 -64
  68. package/dist/shared/ui-settings.d.ts +0 -1
  69. package/package.json +3 -3
  70. package/dist/public/build/css/7540.56f97199.chunk.css +0 -2
  71. package/dist/public/build/css/7540.56f97199.chunk.css.map +0 -1
  72. package/dist/public/build/css/cluster-page-wrapper.0b62c90f.chunk.css.map +0 -1
  73. package/dist/public/build/css/main.a99b07c5.css.map +0 -1
  74. package/dist/public/build/css/navigation.adb62abd.chunk.css +0 -2
  75. package/dist/public/build/css/navigation.adb62abd.chunk.css.map +0 -1
  76. package/dist/public/build/js/1110.d02f593c.chunk.js +0 -2
  77. package/dist/public/build/js/1110.d02f593c.chunk.js.map +0 -1
  78. package/dist/public/build/js/1394.f5423b9c.chunk.js +0 -2
  79. package/dist/public/build/js/1394.f5423b9c.chunk.js.map +0 -1
  80. package/dist/public/build/js/2447.d0a0e8ad.chunk.js +0 -2
  81. package/dist/public/build/js/2447.d0a0e8ad.chunk.js.map +0 -1
  82. package/dist/public/build/js/4364.277e1cfa.chunk.js +0 -2
  83. package/dist/public/build/js/4364.277e1cfa.chunk.js.map +0 -1
  84. package/dist/public/build/js/5770.c5499ce7.chunk.js +0 -2
  85. package/dist/public/build/js/5770.c5499ce7.chunk.js.map +0 -1
  86. package/dist/public/build/js/7891.2ce56be7.chunk.js +0 -3
  87. package/dist/public/build/js/7891.2ce56be7.chunk.js.LICENSE.txt +0 -14
  88. package/dist/public/build/js/7891.2ce56be7.chunk.js.map +0 -1
  89. package/dist/public/build/js/7959.eb292cbd.chunk.js +0 -2
  90. package/dist/public/build/js/7959.eb292cbd.chunk.js.map +0 -1
  91. package/dist/public/build/js/8778.8d098a1f.chunk.js.map +0 -1
  92. package/dist/public/build/js/accounts.63268a11.chunk.js +0 -2
  93. package/dist/public/build/js/acl.aa7a9df7.chunk.js.map +0 -1
  94. package/dist/public/build/js/cluster-menu.e484a2ca.chunk.js +0 -2
  95. package/dist/public/build/js/cluster-menu.e484a2ca.chunk.js.map +0 -1
  96. package/dist/public/build/js/cluster-page-wrapper.8c8aa8a1.chunk.js +0 -2
  97. package/dist/public/build/js/cluster-page-wrapper.8c8aa8a1.chunk.js.map +0 -1
  98. package/dist/public/build/js/job.5ed7166b.chunk.js +0 -2
  99. package/dist/public/build/js/job.5ed7166b.chunk.js.map +0 -1
  100. package/dist/public/build/js/main.00809a7d.js +0 -3
  101. package/dist/public/build/js/main.00809a7d.js.map +0 -1
  102. package/dist/public/build/js/navigation.c3108a21.chunk.js +0 -2
  103. package/dist/public/build/js/navigation.c3108a21.chunk.js.map +0 -1
  104. package/dist/public/build/js/operations.b353981f.chunk.js +0 -2
  105. package/dist/public/build/js/operations.b353981f.chunk.js.map +0 -1
  106. package/dist/public/build/js/query-tracker.fba0ec95.chunk.js +0 -2
  107. package/dist/public/build/js/query-tracker.fba0ec95.chunk.js.map +0 -1
  108. package/dist/public/build/js/scheduling.115669fe.chunk.js +0 -2
  109. package/dist/public/build/js/scheduling.115669fe.chunk.js.map +0 -1
  110. package/dist/public/build/js/system.6843a1a3.chunk.js.map +0 -1
  111. package/dist/public/build/js/tablet.40ad9054.chunk.js +0 -2
  112. package/dist/public/build/js/tablet.40ad9054.chunk.js.map +0 -1
  113. /package/dist/public/build/js/{main.00809a7d.js.LICENSE.txt → main.61fc9935.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/scheduling.73b1257c.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/Alerts/Alerts.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedTextOrLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedId/FormattedId.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/index.js","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/utils/batch.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/expanded-pools.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/PoolMetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/SchedulingOperationsError/SchedulingOperationsError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableSticky.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/details.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingResources.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/PoolEditorDialog/PoolEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/Scheduling.tsx","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/create-pool-dialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Instruments/CreatePoolDialog/CreatePoolDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/SchedulingTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/BreadcrumbsButton.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/BreadcrumbsItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/BreadcrumbsMore.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/BreadcrumbsSeparator.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Breadcrumbs/Breadcrumbs.js"],"sourcesContent":["import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\n\nimport React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport CollapsibleSection, {\n CollapsibleSectionProps,\n} from '../../components/CollapsibleSection/CollapsibleSection';\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport Alert from '../../components/Alert/Alert';\nimport {UI_COLLAPSIBLE_SIZE} from '../../constants/global/index';\nimport {YTError} from '../../types/index';\n\nconst block = cn('yt-alerts');\n\nexport type AlertsProps = {\n className?: string;\n items?: Array<YTError> | Record<string, YTError>;\n marginDirection?: CollapsibleSectionProps['marginDirection'];\n};\n\nexport function Alerts({className, items, marginDirection = 'bottom'}: AlertsProps) {\n if (isEmpty_(items)) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <CollapsibleSection\n name=\"Alerts\"\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection={marginDirection}\n >\n {map_(items, (alert, index) => {\n return <Alert key={index} error={alert} />;\n })}\n </CollapsibleSection>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'})}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import React, {useCallback, useEffect} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../Icon/Icon';\n\nimport './EditableAsText.scss';\nimport Button, {ButtonProps} from '../Button/Button';\nconst block = cn('editable-as-text');\n\ninterface Props {\n className?: string;\n editorClassName?: string;\n\n text?: string;\n children: React.ReactNode;\n onChange: (v?: string) => void;\n disableEdit?: boolean;\n withControls?: boolean;\n cancelOnClose?: boolean;\n openOnClick?: boolean;\n size?: 's' | 'm' | 'l' | 'xl';\n saveButtonView?: ButtonProps['view'];\n cancelButtonView?: ButtonProps['view'];\n\n renderEditor?: (props: {\n value?: string;\n onBlur: () => void;\n onChange: (value?: string) => void;\n className?: string;\n onApply: (value?: string) => void;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\n onModeChange,\n saveButtonView = 'normal',\n cancelButtonView = 'normal',\n } = props;\n const [editMode, setEditMode] = React.useState(false);\n const [input, setInput] = React.useState(text || '');\n\n useEffect(() => {\n setInput(text || '');\n }, [text]);\n\n const handleChangeMode = useCallback(\n (isEdit: boolean) => {\n if (onModeChange) onModeChange(isEdit);\n setEditMode(isEdit);\n },\n [onModeChange],\n );\n\n const closeEditMode = React.useCallback(() => {\n handleChangeMode(false);\n if (cancelOnClose) setInput(text || '');\n }, [cancelOnClose, handleChangeMode, text]);\n\n const startTextEdit = useCallback(() => {\n handleChangeMode(true);\n }, [handleChangeMode]);\n\n const handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\n\n const handleChange = React.useCallback((val?: string) => setInput(val ?? ''), [setInput]);\n\n const applyValue = useCallback(() => {\n handleChangeMode(false);\n onChange(input);\n }, [onChange, handleChangeMode, input]);\n\n const closeAndResetValue = useCallback(() => {\n handleChangeMode(false);\n setInput(text || '');\n }, [handleChangeMode, text]);\n\n const onApply = useCallback(\n (value?: string) => {\n handleChangeMode(false);\n onChange(value);\n },\n [handleChangeMode, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if (evt.key === 'Enter') {\n applyValue();\n }\n if (evt.key === 'Escape') {\n closeAndResetValue();\n }\n },\n [applyValue, closeAndResetValue],\n );\n\n const controlSize = size ? size : 'm';\n\n return (\n <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\n <>\n {renderEditor ? (\n renderEditor({\n value: input,\n onChange: handleChange,\n className: block('control'),\n onBlur: closeEditMode,\n onApply,\n })\n ) : (\n <TextInput\n className={block('control')}\n autoFocus\n size={controlSize}\n value={input}\n onUpdate={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={closeEditMode}\n />\n )}\n {withControls && (\n <>\n <Button\n className={block('control')}\n view={saveButtonView}\n extraProps={{onMouseDown: applyValue}}\n size={controlSize}\n >\n <Icon awesome={'check'} size={controlSize} />\n </Button>\n <Button\n className={block('control')}\n view={cancelButtonView}\n extraProps={{onMouseDown: closeAndResetValue}}\n size={controlSize}\n >\n <Icon awesome={'times'} size={controlSize} />\n </Button>\n </>\n )}\n </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text}: {text: string}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return <span className={block('escaped')} dangerouslySetInnerHTML={{__html: textNode}} />;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withRouter} from 'react-router';\n\nimport {computeStateQuery} from '../../utils/index';\nimport Link from '../../components/Link/Link';\nimport FormattedText from './FormattedText';\n\nfunction FormattedLink(props) {\n const {state, theme = 'ghost', className, text, match, onClick, ...rest} = props;\n const url = computeStateQuery({cluster: match.params.cluster, ...state});\n return (\n <Link routed url={url} theme={theme} onClick={onClick} className={className}>\n {React.isValidElement(text) ? text : <FormattedText text={text} {...rest} />}\n </Link>\n );\n}\nFormattedLink.propTypes = {\n state: PropTypes.shape({\n page: PropTypes.string.isRequired,\n cluster: PropTypes.string,\n tab: PropTypes.string,\n }).isRequired,\n text: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).isRequired,\n className: PropTypes.string,\n theme: PropTypes.string,\n onClick: PropTypes.func,\n // from react-router\n match: PropTypes.shape({\n params: PropTypes.shape({\n cluster: PropTypes.string,\n }),\n }),\n};\nexport default withRouter(FormattedLink);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FormattedText from './FormattedText';\nimport FormattedLink from './FormattedLink';\n\nexport default function FormattedTextOrLink({asLink = false, ...props}) {\n return asLink ? <FormattedLink {...props} /> : <FormattedText {...props} />;\n}\nFormattedTextOrLink.propTypes = {\n asLink: PropTypes.bool,\n};\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\n\nimport './FormattedId.scss';\n\nconst block = cn('table-formatters-id');\n\nFormattedId.propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default function FormattedId({id}) {\n const [hovered, setHovered] = useState(false);\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <div\n className={block({hovered: hovered ? 'yes' : 'no'})}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"elements-ellipsis\">{id}</span>\n {hovered && (\n <div className={block('clipboard-button-wrapper')}>\n <ClipboardButton view=\"flat-secondary\" size=\"m\" text={id} />\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../common/hammer';\n\n// TODO: here are defiend reworked components from /templates/utils, drop original functions once we switch to\n// new components everywhere\nexport {default as FormattedText} from './FormattedText';\nexport {default as FormattedLink} from './FormattedLink';\nexport {default as FormattedTextOrLink} from './FormattedTextOrLink';\nexport {default as FormattedId} from './FormattedId/FormattedId';\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsFloatNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item), {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n}\n\nexport function printColumnAsProgress(item, columnName) {\n const column = this.props.columns[columnName];\n return <Progress {...column.get(item)} />;\n}\n\nexport function printColumnAsTimeDuration(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.props.columns[columnName];\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","import {USE_CACHE, USE_MAX_SIZE} from '../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../shared/yt-types';\n\nexport function makeGet(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'get'})['parameters'], 'path'>,\n) {\n return {\n command: 'get' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n },\n };\n}\n\nexport function makeList(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'list'})['parameters'], 'path'>,\n) {\n return {\n command: 'list' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {\n ExpandedPoolInfo,\n ExpandedPoolsAction,\n PoolCypressData,\n} from '../../reducers/scheduling/expanded-pools';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_IGNORE_NODE_DOES_NOT_EXIST, splitBatchResults} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {\n CHANGE_POOL,\n ROOT_POOL_NAME,\n SCHEDULING_EXPANDED_POOLS_FAILURE,\n SCHEDULING_EXPANDED_POOLS_PARTITION,\n SCHEDULING_EXPANDED_POOLS_REQUEST,\n SCHEDULING_EXPANDED_POOLS_SUCCESS,\n} from '../../../constants/scheduling';\nimport {calculatePoolPath, getPool, getPools, getTree} from '../../selectors/scheduling/scheduling';\nimport {\n getExpandedPoolsLoadAll,\n getSchedulingOperationsExpandedPools,\n} from '../../selectors/scheduling/expanded-pools';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\nimport {PoolInfo, getSchedulingPoolsMapByName} from '../../selectors/scheduling/scheduling-pools';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport {isSupportedSchedulingChildrenByPool} from '../../../store/selectors/thor/support';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\n\ntype ExpandedPoolsThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ExpandedPoolsAction | SchedulingAction\n>;\n\nconst cancelHelper = new CancelHelper();\n\nconst POOL_FIELDS_TO_LOAD = [\n 'accumulated_resource_ratio_volume',\n 'accumulated_resource_volume',\n 'demand_ratio',\n 'detailed_fair_share',\n 'dominant_resource',\n 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_running_operation_count',\n 'max_share_ratio',\n 'min_share_ratio',\n 'mode',\n 'operation_count',\n 'parent',\n 'pool_operation_count',\n 'child_pool_count',\n 'resource_demand',\n 'resource_limits',\n 'resource_usage',\n 'promised_fair_share_resources',\n 'running_operation_count',\n 'specified_burst_guarantee_resources',\n 'specified_resource_flow',\n 'starvation_status',\n 'starving',\n 'strong_guarantee_resources',\n 'usage_ratio',\n 'weight',\n 'abc',\n];\n\nconst POOL_TREE_GET_ATTRS = [\n 'integral_guarantees',\n 'weight',\n 'max_operation_count',\n 'max_running_operation_count',\n 'strong_guarantee_resources',\n 'resource_limits',\n 'forbid_immediate_operations',\n 'create_ephemeral_subpools',\n 'fifo_sort_parameters',\n 'config',\n 'folder_id',\n];\n\nclass EmptyFullPath extends Error {}\n\nexport function loadExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const pool = getPool(getState());\n\n if (!tree) {\n return undefined;\n }\n\n if (pool === ROOT_POOL_NAME) {\n return dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n return ytApiV3Id\n .executeBatch<{full_path: string; is_ephemeral?: boolean}>(\n YTApiId.schedulingPoolFullPath,\n {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`,\n fields: ['is_ephemeral', 'full_path'],\n },\n },\n ],\n },\n )\n .then(([{output}]) => {\n const {full_path, is_ephemeral} = output ?? {};\n if (!full_path) {\n throw new EmptyFullPath();\n } else {\n dispatch(addFullPathToExpandedPoolsNoLoad(tree, full_path, is_ephemeral));\n dispatch(loadExpandedOperationsAndPools(tree));\n }\n })\n .catch((e) => {\n if (e instanceof EmptyFullPath) {\n dispatch({type: CHANGE_POOL, data: {pool: ROOT_POOL_NAME}});\n /**\n * We don't need to call `dispatch(loadExpandedOperationsAndPools(tree))` after `CHANGE_POOL`.\n * The call will be triggered by SchedulingExpandedPoolsUpdater.\n */\n // dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n new Toaster().add({\n name: 'schedulingPoolFullPath',\n theme: 'danger',\n title: '',\n });\n }\n });\n }\n };\n}\n\nfunction loadExpandedOperationsAndPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const loadAll = getExpandedPoolsLoadAll(state);\n const expandedPools: Map<string, ExpandedPoolInfo> = loadAll\n ? new Map()\n : getSchedulingOperationsExpandedPools(state)[tree] ?? new Map();\n const expandedPoolNames: Array<string> = [...expandedPools.keys()];\n\n const operationsExpandedPools: Array<string> = [...expandedPoolNames];\n\n const operationsRequests: Array<BatchSubRequest> = [];\n if (loadAll) {\n operationsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations`),\n );\n } else {\n const prefix = `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations_by_pool`;\n operationsExpandedPools.forEach((item) => {\n operationsRequests.push(makeGet(`${prefix}/${item}`));\n });\n }\n\n const loadAllPools = loadAll || !isSupportedSchedulingChildrenByPool(state);\n const poolsRequests: Array<BatchSubRequest> = [];\n const poolsChildrenRequests: Array<BatchSubRequest> = [];\n const poolsCypressDataRequests: Array<BatchSubRequest> = [];\n\n const poolsExpandedPools: Array<string> = [ROOT_POOL_NAME, ...expandedPoolNames];\n\n if (loadAllPools) {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsCypressDataRequests.push(\n makeGet(`//sys/pool_trees/${tree}`, {attributes: POOL_TREE_GET_ATTRS}),\n );\n } else {\n poolsExpandedPools.forEach((pool) => {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsChildrenRequests.push(\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/child_pools_by_pool/${pool}`,\n {\n fields: POOL_FIELDS_TO_LOAD,\n },\n ),\n );\n const {parentPoolPath, isEphemeral} = expandedPools.get(pool) ?? {};\n const cypressDataPath = parentPoolPath\n ? `//sys/pool_trees/${tree}/${parentPoolPath}/${pool}`\n : `//sys/pool_trees/${tree}/${pool}`;\n if (pool === ROOT_POOL_NAME || !isEphemeral) {\n poolsCypressDataRequests.push(\n makeList(\n pool === ROOT_POOL_NAME ? `//sys/pool_trees/${tree}` : cypressDataPath,\n {\n attributes: POOL_TREE_GET_ATTRS,\n },\n ),\n );\n }\n });\n }\n\n cancelHelper.removeAllRequests();\n\n dispatch({type: SCHEDULING_EXPANDED_POOLS_REQUEST});\n return Promise.all([\n operationsRequests.length\n ? ytApiV3Id.executeBatch(YTApiId.schedulingLoadOperationsPerPool, {\n parameters: {requests: operationsRequests},\n cancellation: cancelHelper.saveCancelToken,\n })\n : Promise.resolve([]),\n\n ytApiV3Id.executeBatch(\n loadAllPools ? YTApiId.schedulingLoadPoolsAll : YTApiId.schedulingLoadPoolsPerPool,\n {\n parameters: {requests: poolsRequests},\n cancellation: cancelHelper.saveCancelToken,\n },\n ),\n loadAllPools\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadChildrenPerPool, {\n parameters: {requests: poolsChildrenRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n !poolsCypressDataRequests.length\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadCypressDataPerPool, {\n parameters: {requests: poolsCypressDataRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n ])\n .then(([operationsResults, poolsResults, poolsChildrenResults, poolsCypressData]) => {\n const error = new UIBatchError('Failed to load expanded pools');\n const {results: operations, errorIgnoredIndices} = splitBatchResults(\n operationsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n const rawOperations = reduce_(\n operations,\n (acc, data) => {\n return Object.assign(acc, data);\n },\n {},\n );\n\n const poolsToCollapse: Record<string, false> = {};\n forEach_(errorIgnoredIndices, (pos) => {\n poolsToCollapse[operationsExpandedPools[pos]] = false;\n });\n\n const rawPools: Record<string, PoolInfo> = {};\n const cypressData: Record<string, PoolCypressData> = {};\n\n if (loadAllPools) {\n const {results: pools} = splitBatchResults<Record<string, PoolInfo>>(\n poolsResults,\n error,\n );\n const [value = {}] = pools ?? [];\n Object.assign(rawPools, value);\n\n const {\n results: [data],\n } = splitBatchResults(poolsCypressData, error);\n Object.assign(cypressData, flattenAttributes(data));\n } else {\n const {\n results: pools,\n resultIndices,\n errorIgnoredIndices: poolsReqeustsIgnored,\n } = splitBatchResults<PoolInfo>(\n poolsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n pools.forEach((poolInfo, index) => {\n const name = poolsExpandedPools[resultIndices[index]];\n rawPools[name] = poolInfo;\n });\n\n const {\n results: poolChildren,\n errorIgnoredIndices: poolsChildrenRequestsIgnored,\n } = splitBatchResults<Record<string, PoolInfo>>(\n poolsChildrenResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n poolChildren.forEach((children) => {\n Object.assign(rawPools, children);\n });\n\n const {\n results: cypressDataChildrenPerPool,\n errorIgnoredIndices: poolsCypressDataRequestsIgnored,\n } = splitBatchResults<Array<PoolCypressData>>(\n poolsCypressData,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n cypressDataChildrenPerPool.forEach((poolChildrenCypressData) => {\n poolChildrenCypressData.forEach((item) => {\n cypressData[item.$value] = item;\n });\n });\n\n forEach_(\n [\n ...poolsReqeustsIgnored,\n ...poolsChildrenRequestsIgnored,\n ...poolsCypressDataRequestsIgnored,\n ],\n (position) => {\n const poolName = poolsExpandedPools[position];\n poolsToCollapse[poolName] = false;\n },\n );\n setExpandedPools(poolsToCollapse);\n }\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_SUCCESS,\n data: {\n expandedPoolsTree: tree,\n rawOperations: Object.keys(rawOperations).length\n ? rawOperations\n : EMPTY_OBJECT,\n rawPools: Object.keys(rawPools).length ? rawPools : EMPTY_OBJECT,\n flattenCypressData: Object.keys(cypressData).length\n ? cypressData\n : EMPTY_OBJECT,\n },\n });\n\n if (error.inner_errors?.length) {\n throw error;\n }\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setExpandedPools(changes: Record<string, boolean>): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const tree = getTree(getState());\n const expandedPools = getSchedulingOperationsExpandedPools(state);\n\n const poolsByName = getSchedulingPoolsMapByName(state);\n\n const treeExpandedPools = new Map(expandedPools[tree]);\n forEach_(changes, (expanded, poolName) => {\n if (expanded) {\n const expandedPoolInfo = calcExpandedPoolInfo(poolName, poolsByName);\n treeExpandedPools.set(poolName, expandedPoolInfo);\n } else {\n treeExpandedPools.delete(poolName);\n }\n });\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction addFullPathToExpandedPoolsNoLoad(\n tree: string,\n /**\n * elements of the array should have the same format as `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}/full_path`\n */\n fullPath: string,\n isEphemeral?: boolean,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const oldExpandedPools = getSchedulingOperationsExpandedPools(state);\n const treeExpandedPools = new Map(oldExpandedPools[tree]);\n\n /**\n * `fullPath` value starts from `/`, example: `/mypool/child/subchild`\n * so we have to use `.slice(1)` to remove first empty string\n */\n const parts = fullPath.split('/').slice(1);\n\n for (let i = 0; i < parts.length; ++i) {\n const poolName = parts[i];\n const parentPoolPath = parts.slice(0, i).join('/');\n treeExpandedPools.set(poolName, {parentPoolPath, isEphemeral});\n }\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n };\n}\n\nfunction updateExpandedPoolNoLoad(\n tree: string,\n treeExpandedPools: Map<string, ExpandedPoolInfo>,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const oldExpandedPools = getSchedulingOperationsExpandedPools(getState());\n\n const expandedPools = {\n ...oldExpandedPools,\n [tree]: treeExpandedPools,\n };\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {expandedPools},\n });\n };\n}\n\nexport function resetExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n if (!tree) {\n return;\n }\n\n const state = getState();\n const {[tree]: old, ...rest} = getSchedulingOperationsExpandedPools(state);\n\n if (old?.size) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {\n expandedPools: {\n ...rest,\n [tree]: new Map<string, ExpandedPoolInfo>(),\n },\n },\n });\n }\n };\n}\n\nexport function getSchedulingOperationsCount(): ThunkAction<number, RootState, any, any> {\n return (_dispatch, getState) => {\n const state = getState();\n\n const tree = getSchedulingPoolsMapByName(state);\n const root = tree[ROOT_POOL_NAME];\n return root?.operationCount || 0;\n };\n}\n\nexport function getPoolPathsByName(\n poolName: string,\n): ThunkAction<{fullPath: string; orchidPath: string}, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const state = getState();\n const pools = getPools(state);\n const tree = getTree(state);\n\n return {\n fullPath: calculatePoolPath(poolName, pools, tree),\n orchidPath: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${poolName}`,\n };\n };\n}\n\nexport function setLoadAllOperations(loadAll: boolean): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {loadAll},\n });\n\n const tree = getTree(state);\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction calcExpandedPoolInfo(\n poolName: string,\n poolsByName: Record<string, PoolInfo>,\n): ExpandedPoolInfo {\n let data = poolsByName[poolName];\n const isEphemeral = data?.isEphemeral;\n let res = '';\n while (data?.parent && data.parent !== ROOT_POOL_NAME) {\n res = res ? `${data.parent}/${res}` : data.parent;\n data = poolsByName[data.parent];\n }\n return {parentPoolPath: res, isEphemeral};\n}\n","import forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport update_ from 'lodash/update';\n\nimport {\n INTEGRAL_GUARANTEES_PREFIX,\n InitialPoolResourceInfo,\n POOL_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolResourceType,\n computePoolPath,\n prepareCurrentTree,\n prepareTrees,\n} from '../../../utils/scheduling/scheduling';\nimport {\n extractBatchV4Values,\n getBatchError,\n splitBatchResults,\n wrapApiPromiseByToaster,\n} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n getPools,\n getSchedulingIsInitialLoading,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\n\nimport {\n POOL_TOGGLE_DELETE_VISIBILITY,\n SCHEDULING_DATA_FAILURE,\n SCHEDULING_DATA_PARTITION,\n SCHEDULING_DATA_REQUEST,\n SCHEDULING_DATA_SUCCESS,\n SCHEDULING_DELETE_POOL_FAILURE,\n SCHEDULING_DELETE_POOL_REQUEST,\n SCHEDULING_DELETE_POOL_SUCCESS,\n} from '../../../constants/scheduling';\nimport {loadExpandedPools} from './expanded-pools';\nimport {RumWrapper, YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport type {RootState} from '../../../store/reducers';\nimport type {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport type {PoolInfo} from '../../../store/selectors/scheduling/scheduling-pools';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nconst toaster = new Toaster();\n\ntype SchedulingThunkAction<T = unknown> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function loadSchedulingData(): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch({type: SCHEDULING_DATA_REQUEST});\n\n const state = getState();\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n const cluster = getCluster(state);\n const rumId = new RumWrapper(cluster, RumMeasureTypes.SCHEDULING);\n return rumId\n .fetch(\n YTApiId.schedulingData,\n ytApiV3Id.executeBatch(YTApiId.schedulingData, {\n requests: [\n makeGet('//sys/scheduler/@alerts'),\n makeList('//sys/scheduler/orchid/scheduler/pool_trees'),\n makeGet('//sys/scheduler/orchid/scheduler/default_fair_share_tree'),\n ],\n ...USE_CACHE,\n }),\n )\n .then((data) => {\n const {\n error,\n results: [schedulerAlerts, rawTrees, defaultTree],\n } = splitBatchResults(data, 'Failed to fetch scheduling data');\n\n if (error) {\n return Promise.reject(error);\n }\n\n const state = getState();\n\n const trees = prepareTrees(rawTrees);\n const tree = prepareCurrentTree(\n defaultTree,\n trees,\n state.scheduling.scheduling.tree,\n );\n\n if (isInitialLoading) {\n dispatch(schedulingLoadFilterAttributes(tree, {checkFilters: true}));\n }\n\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {schedulerAlerts, trees, tree},\n });\n\n const treeRequests = [\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_usage`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_limits`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/config`),\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_distribution_info`,\n ),\n ];\n\n if (isInitialLoading) {\n /**\n * We don't need to call `dispatch(loadExpandedPools(tree))` for this branch of code,\n * the call should be triggered by SchedulingExpandedPoolsUpdater\n */\n //dispatch(loadExpandedPools(tree));\n } else {\n dispatch(loadExpandedPools(tree));\n }\n\n return rumId\n .fetch(\n YTApiId.schedulingLoadTree,\n ytApiV4Id.executeBatch(YTApiId.schedulingLoadTree, {\n requests: treeRequests,\n ...USE_CACHE,\n }),\n )\n .then((treeData) => {\n const extracted = extractBatchV4Values(treeData, treeRequests);\n const {error, results} = splitBatchResults(\n extracted.results,\n 'Failed to fetch tree details',\n );\n if (error) {\n throw error;\n }\n return results;\n });\n })\n .then(([resource_usage, resource_limits, config, resource_distribution_info]) => {\n const treeResources = {\n resource_usage,\n resource_limits,\n config,\n resource_distribution_info,\n };\n\n dispatch({\n type: SCHEDULING_DATA_SUCCESS,\n data: {\n treeResources,\n },\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function deletePool(item?: PoolInfo): SchedulingThunkAction {\n return (dispatch, getState) => {\n if (!item) {\n return;\n }\n\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const path = computePoolPath(item, pools);\n\n dispatch({type: SCHEDULING_DELETE_POOL_REQUEST});\n\n return yt.v3\n .remove({\n path: `//sys/pool_trees/${tree}/${path}`,\n })\n .then(() => {\n toaster.add({\n name: 'delete pool',\n autoHiding: 10000,\n theme: 'success',\n title: `Successfully deleted ${item.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_DELETE_POOL_SUCCESS});\n dispatch(closePoolDeleteModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error: any) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DELETE_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return null;\n });\n };\n}\n\nexport function openPoolDeleteModal(item: PoolInfo): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closePoolDeleteModal(): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n };\n}\n\ntype PoolResources = Partial<\n Record<Exclude<PoolResourceType, 'guaranteeType'>, InitialPoolResourceInfo>\n>;\n\ninterface SetResourceGuaranteeParams {\n poolPath: string;\n values: PoolResources & {guaranteeType: string};\n initials: PoolResources;\n tree: string;\n}\n\nexport function setPoolAttributes(params: SetResourceGuaranteeParams) {\n const {poolPath, values, initials, tree} = params;\n if (isEmpty_(values)) {\n return Promise.resolve();\n }\n\n const transferData: Array<{diff: number; source: string; path: string}> = [];\n const toModify: Array<{attr: string; value: any}> = [];\n\n const {guaranteeType, ...restValues} = values;\n\n forEach_(restValues, (v, k) => {\n const {limit, source} = v || {};\n const key = k as keyof typeof restValues;\n\n const attr = POOL_RESOURCE_TYPE_TO_ATTRIBUTE[key];\n if (!source || limit === undefined) {\n toModify.push({attr, value: limit});\n } else {\n const prevLimit = initials[key]?.limit || 0;\n const diff = (limit || 0) - prevLimit;\n if (diff) {\n transferData.push({diff, source, path: attr});\n }\n }\n });\n\n if (Object.hasOwnProperty.call(values, 'guaranteeType')) {\n toModify.push({\n attr: POOL_RESOURCE_TYPE_TO_ATTRIBUTE['guaranteeType'],\n value: guaranteeType,\n });\n }\n\n return updateNodeAttributes(poolPath, toModify).then(() => {\n return transferPoolQuota({poolPath, transferData, tree});\n });\n}\n\ninterface TransferPoolQuotaParams {\n poolPath: string;\n transferData: Array<{diff: number; source: string; path: string}>;\n tree: string;\n}\n\nfunction transferPoolQuota({poolPath, transferData, tree}: TransferPoolQuotaParams) {\n if (isEmpty_(transferData)) {\n return Promise.resolve();\n }\n const tmp = poolPath.split('/');\n const dstPool = tmp[tmp.length - 1];\n\n const requests = map_(transferData, (v) => {\n const {diff, source, path} = v;\n const transferPath = path.startsWith(INTEGRAL_GUARANTEES_PREFIX)\n ? path.substr(INTEGRAL_GUARANTEES_PREFIX.length)\n : path;\n const dotPath = transferPath.replace(/\\//g, '.');\n\n const delta = update_({}, dotPath, () => Math.abs(diff));\n\n return {\n command: 'transfer_pool_resources' as const,\n parameters: {\n source_pool: diff > 0 ? source : dstPool,\n destination_pool: diff > 0 ? dstPool : source,\n pool_tree: tree,\n resource_delta: delta,\n },\n };\n });\n\n return ytApiV4Id\n .executeBatch(YTApiId.schedulingTransferPoolQuota, {requests})\n .then((res: any) => {\n const err = getBatchError(res.results, 'Failed to transfer pool quota');\n if (err) {\n return Promise.reject(err);\n }\n return res;\n });\n}\n\nexport function schedulingLoadFilterAttributes(\n tree: string,\n {checkFilters}: {checkFilters?: boolean} = {},\n): SchedulingThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n if (checkFilters && !schedulingOverviewHasFilter(state)) {\n return undefined;\n }\n\n const {lastTime, lastTree} = getSchedulingAttributesToFilterParams(state);\n if (tree === lastTree && Date.now() - lastTime < 120000) {\n return undefined;\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.schedulingFilterAttributes, {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`,\n fields: ['parent', 'abc'],\n ...USE_CACHE,\n }),\n {\n skipSuccessToast: true,\n toasterName: 'schedulingLoadFilterAttributes',\n errorContent: 'Failed to load attributes required for filtering',\n },\n ).then((attributesToFilter) => {\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {\n attributesToFilter,\n attributesToFilterParams: {lastTime: Date.now(), lastTree: tree},\n },\n });\n });\n };\n}\n\nexport function schedulingSetAbcFilter(abcServiceFilter: {\n id: number;\n slug: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter},\n });\n };\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport mapKeys_ from 'lodash/mapKeys';\nimport mapValues_ from 'lodash/mapValues';\nimport omit_ from 'lodash/omit';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {getPools, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n computePoolPath,\n} from '../../../utils/scheduling/scheduling';\n\nimport {\n CHANGE_CONTENT_MODE,\n CHANGE_POOL,\n CHANGE_POOL_CHILDREN_FILTER,\n CHANGE_TABLE_TREE_STATE,\n CHANGE_TREE,\n SCHEDULING_EDIT_POOL_CANCELLED,\n SCHEDULING_EDIT_POOL_FAILURE,\n SCHEDULING_EDIT_POOL_REQUEST,\n SCHEDULING_EDIT_POOL_SUCCESS,\n TOGGLE_EDIT_VISIBILITY,\n} from '../../../constants/scheduling';\nimport {loadSchedulingData, setPoolAttributes} from './scheduling-ts';\nimport {splitBatchResults} from '../../../utils/utils';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst toaster = new Toaster();\n\nconst setName = (path, newName, prevName) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return yt.v3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (path, values, initialValues) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands = [];\n\n if (initialValues.forbidImmediateOperations !== values.forbidImmediateOperations) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@forbid_immediate_operations`,\n },\n input: values.forbidImmediateOperations,\n });\n }\n\n if (initialValues.createEphemeralSubpools !== values.createEphemeralSubpools) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@create_ephemeral_subpools`,\n },\n input: values.createEphemeralSubpools,\n });\n }\n\n if (initialSortParamsString !== newSortParamsString) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@fifo_sort_parameters`,\n },\n input: values.fifoSortParams,\n });\n }\n\n return commands;\n};\n\nconst setResourceAttributes = (path, values, omittedValues, attribute) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper = {userSlots: 'user_slots'};\n const omittedValuesList = map_(omittedValues, (value, key) => keyMapper[key] || key);\n const preparedValues = mapKeys_(values, (value, key) => keyMapper[key] || key);\n\n return ytApiV3Id\n .get(YTApiId.schedulingGetAttrsBeforeEdit, {path: `${path}/@${attribute}`})\n .then((resources) => {\n const result = {...resources, ...preparedValues};\n const input = omit_(result, omittedValuesList);\n\n return yt.v3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return yt.v3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\nconst makeGeneralCommands = (path, values, initialValues) => {\n const isInitial = (value, initialValue) => value === initialValue;\n const isOmitted = (value, omittedValues) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n //const {name: abcServiceName, slug: abcServiceSlug, id} = prepareAbcService(values.abcService);\n const omittedValues = pickBy_(\n values,\n (value) => value === '' || value === undefined || value === null,\n );\n\n const commands = [];\n\n // if (!isInitial(abcServiceSlug, initialValues.abcService?.value)) {\n // commands.push({\n // command: abcServiceSlug ? 'set' : 'remove',\n // parameters: {\n // path: `${path}/@abc`,\n // },\n // input: !abcServiceSlug ? undefined : {\n // slug: abcServiceSlug,\n // name: abcServiceName,\n // id,\n // },\n // });\n // }\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight, initialValues.weight)) {\n if (isOmitted('weight', omittedValues)) {\n commands.push({\n command: 'remove',\n parameters: {\n path: `${path}/@weight`,\n },\n });\n } else if (!isInitial(values.weight, initialValues.weight)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@weight`,\n },\n input: Number(values.weight),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value) {\n return !isInvalidNumber(value);\n}\n\nexport function editPool(pool, values, initialValues) {\n return (dispatch, getState) => {\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const poolPath = computePoolPath(pool, pools);\n const path = `//sys/pool_trees/${tree}/${poolPath}`;\n\n const filteredResourceLimitsValues = pickBy_(values.resourceLimits, isValidNumber);\n const omittedResourceLimitsValues = pickBy_(values.resourceLimits, isInvalidNumber);\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n delete resourceLimitsValues['error-block'];\n delete omittedResourceLimitsValues['error-block'];\n\n dispatch({type: SCHEDULING_EDIT_POOL_REQUEST});\n\n const requests = [\n ...makeGeneralCommands(path, values.general, initialValues.general),\n ...makeOtherAttributesCommands(path, values.otherSettings, initialValues.otherSettings),\n ];\n\n return Promise.all([\n ytApiV3Id.executeBatch(YTApiId.schedulingEditPool, {requests}).then((data) => {\n const {error} = splitBatchResults(data, 'Failed to fetch pool details');\n if (error) {\n return Promise.reject(error);\n }\n }),\n setPoolAttributes({\n poolPath: path,\n values: {\n ...values.resourceGuarantee,\n ...values.integralGuarantee,\n ...pick_(values.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n initials: {\n ...initialValues.resourceGuarantee,\n ...initialValues.integralGuarantee,\n ...pick_(initialValues.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n tree,\n }),\n setResourceAttributes(\n path,\n resourceLimitsValues,\n omittedResourceLimitsValues,\n 'resource_limits',\n ),\n ])\n .then(setName(path, values.general.name, initialValues.general.name))\n .then(() => {\n toaster.add({\n name: 'edit pool',\n timeout: 10000,\n theme: 'success',\n title: `Successfully edited ${pool.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_EDIT_POOL_SUCCESS});\n dispatch(closeEditModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n });\n };\n}\n\nexport function openEditModal(item) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled} = {}) {\n return (dispatch) => {\n dispatch({\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n });\n\n if (cancelled) {\n dispatch({type: SCHEDULING_EDIT_POOL_CANCELLED});\n }\n };\n}\n\nexport function changeTree(tree) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState) {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool) {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function changeContentMode(evt) {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {\n contentMode: evt.target.value,\n },\n };\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool, tree) {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\n","import {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {createSelector} from 'reselect';\n\nexport const getSchedulingIsFinalLoadingState = createSelector(\n [\n (store: RootState) => store.scheduling.scheduling.loading,\n (store: RootState) => store.scheduling.scheduling.loaded,\n (store: RootState) => store.scheduling.scheduling.error,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\nimport {calcProgressProps} from '../../../../utils/utils';\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport './ShareUsageBar.scss';\n\nconst block = cn('share-usage-bar');\n\ninterface Props {\n className?: string;\n shareValue?: number;\n shareTitle?: string;\n usageValue?: number;\n usageTitle?: string;\n forceTheme?: ProgressProps['theme'];\n title?: React.ReactNode;\n}\n\nfunction ShareUsageBar(props: Props) {\n const {className, shareValue, usageValue, shareTitle, usageTitle, forceTheme, title} = props;\n\n const x = Number(usageValue) / Number(shareValue);\n\n if (isNaN(shareValue!) || isNaN(usageValue!) || isNaN(x)) {\n return (\n <Tooltip\n content={\n <React.Fragment>\n <div>\n {shareTitle}: {shareValue}\n </div>\n <div>\n {usageTitle}: {usageValue}\n </div>\n </React.Fragment>\n }\n >\n {format.NO_VALUE}\n </Tooltip>\n );\n }\n\n const {value, theme} = calcProgressProps(usageValue, Number(shareValue) * 2);\n\n return (\n <Tooltip\n className={block(null, className)}\n content={\n <React.Fragment>\n {title}\n <div>\n {usageTitle} / {shareTitle} = {format.Number(x, {digits: 3})}\n </div>\n </React.Fragment>\n }\n >\n <Progress\n className={block('progress')}\n size={'s'}\n value={Number(value)}\n theme={forceTheme || theme}\n />\n <div className={block('tick')} />\n </Tooltip>\n );\n}\n\nexport default React.memo(ShareUsageBar);\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\nimport {getCurrentPool, getIsRoot, getPool, getTree, getTreeResources} from './scheduling';\n\nimport ypath from '../../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport {getCluster} from '../global';\nimport {PoolInfo, getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools: Array<PoolInfo>) => {\n let current: string | undefined = pool;\n const path = [];\n while (current) {\n path.push(current);\n const tmp: string = current;\n const {parent} = find_(pools, ({name}) => name === tmp) || {};\n current = parent;\n }\n return path.reverse();\n },\n);\n\ninterface PoolStaticConfigurationItem {\n name: string;\n cpu?: number;\n cpuLabel?: string;\n gpu?: number;\n memory?: number;\n user_slots?: number;\n network?: number;\n}\n\nfunction makeStaticConfigurationItem(name: string, attrs: object): PoolStaticConfigurationItem {\n return {\n name,\n cpu: ypath.getValue(attrs, '/cpu'),\n gpu: ypath.getValue(attrs, '/gpu'),\n memory: ypath.getValue(attrs, '/user_memory'),\n user_slots: ypath.getValue(attrs, '/user_slots'),\n network: ypath.getValue(attrs, '/network'),\n };\n}\n\nexport const getCurrentPoolStaticConfiguration = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data): Array<PoolStaticConfigurationItem> => {\n if (isRoot || !data?.attributes) {\n return [];\n }\n\n const burst_guarantee_resources = ypath.getValue(\n data.attributes,\n '/specified_burst_guarantee_resources',\n );\n const resource_flow = ypath.getValue(data.attributes, '/specified_resource_flow');\n\n return [\n makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst_guarantee_resources &&\n makeStaticConfigurationItem('Burst', burst_guarantee_resources),\n resource_flow && makeStaticConfigurationItem('Flow', resource_flow),\n ].filter(Boolean);\n },\n);\n\ninterface PoolTreeStaticConfigurationItem {\n name: string;\n total?: number;\n\n used?: number;\n usedTitle?: string;\n\n free?: number;\n format: 'Bytes' | 'Number';\n level?: number;\n\n lastDayMaxValueSensor?: 'max_operation_count' | 'max_running_operation_count';\n lastDayMaxValueTitle?: string;\n}\n\nfunction calcTreeStaticConfiguration(totals: any, undistributed: any, resourceType: any) {\n const total = ypath.getNumber(totals, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total,\n used: total - free,\n free,\n };\n}\n\nfunction calcTreeStaticConfigurationByDistributed(\n distributed: any,\n undistributed: any,\n resourceType: any,\n) {\n const used = ypath.getNumber(distributed, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total: used + free,\n used,\n free,\n };\n}\n\nexport const getPoolsTopLevel = createSelector([getPools], (pools) => {\n return filter_(pools, ({parent}) => parent === ROOT_POOL_NAME);\n});\n\nconst getPoolsAllocatedOperationsCount = createSelector([getPoolsTopLevel], (topPools) => {\n return reduce_(\n topPools,\n (acc, item) => {\n acc.maxOperationCount += item.maxOperationCount || 0;\n acc.maxRunningOperationCount += item.maxRunningOperationCount || 0;\n return acc;\n },\n {maxOperationCount: 0, maxRunningOperationCount: 0},\n );\n});\n\nexport const getCurrentTreeGpuLimit = createSelector([getTreeResources], (resources): number => {\n return ypath.getNumber(resources, '/resource_limits/gpu', 0);\n});\n\nexport const getOperationsStaticConfiguration = createSelector(\n [getTreeResources, getPoolsAllocatedOperationsCount, getCluster, getTree],\n ({config}, allocated): Array<PoolTreeStaticConfigurationItem> => {\n const operationCount = ypath.getNumber(config, '/max_operation_count', 0);\n const runningOperationCount = ypath.getNumber(config, '/max_running_operation_count', 0);\n\n return [\n {\n name: 'Operations',\n format: 'Number',\n },\n {\n level: 1,\n name: 'Total',\n format: 'Number',\n total: operationCount,\n used: allocated.maxOperationCount,\n usedTitle: 'Max operation count',\n free: operationCount - allocated.maxOperationCount,\n\n lastDayMaxValueSensor: 'max_operation_count',\n lastDayMaxValueTitle: 'Last day max operations',\n },\n {\n level: 1,\n name: 'Running',\n format: 'Number',\n total: runningOperationCount,\n used: allocated.maxRunningOperationCount,\n usedTitle: 'Max running operation count',\n\n free: runningOperationCount - allocated.maxRunningOperationCount,\n\n lastDayMaxValueSensor: 'max_running_operation_count',\n lastDayMaxValueTitle: 'Last day max running operations',\n },\n ];\n },\n);\n\nexport const getCurrentPoolTreeStaticConfiguration = createSelector(\n [getTreeResources, getOperationsStaticConfiguration],\n (treeResources = {}, operationRows): Array<PoolTreeStaticConfigurationItem> => {\n const {resource_distribution_info, resource_limits} = treeResources;\n\n if (!resource_distribution_info) {\n return [];\n }\n\n const {\n undistributed_resources,\n distributed_burst_guarantee_resources: burst,\n undistributed_burst_guarantee_resources: unburst,\n distributed_resource_flow: flow,\n undistributed_resource_flow: unflow,\n } = resource_distribution_info;\n\n const cpuRow: PoolTreeStaticConfigurationItem = {\n level: 0,\n name: 'CPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'cpu'),\n };\n\n const burstRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Burst',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(burst, unburst, 'cpu'),\n total: undefined,\n free: undefined,\n };\n\n const flowRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Flow',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(flow, unflow, 'cpu'),\n total: undefined,\n };\n\n flowRow.free = burstRow.used! - flowRow.used!;\n\n const strong: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Strong',\n format: 'Number',\n used:\n cpuRow.used! -\n Math.max(...[0, burstRow.used!, flowRow.used!].filter((v) => !isNaN(v))),\n };\n\n return [\n cpuRow,\n strong,\n burstRow,\n flowRow,\n {\n name: 'Memory',\n format: 'Bytes',\n ...calcTreeStaticConfiguration(\n resource_limits,\n undistributed_resources,\n 'user_memory',\n ),\n },\n {\n name: 'GPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'gpu'),\n },\n ...operationRows,\n ];\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport format from '../../../common/hammer/format';\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {useSelector} from 'react-redux';\nimport {getCurrentPool, getIsRoot} from '../../../store/selectors/scheduling/scheduling';\nimport UIFactory from '../../../UIFactory';\nimport {getClusterUiConfig} from '../../../store/selectors/global';\n\nconst block = cn('pool-meta-table');\n\ninterface Props {\n className?: string;\n}\n\nexport default function PoolMetaData({className}: Props) {\n const pool = useSelector(getCurrentPool);\n const isRoot = useSelector(getIsRoot);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n if (!pool || isRoot) {\n return null;\n }\n\n const cpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/cpu', 0);\n const gpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/gpu', 0);\n const memory = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/memory', 0);\n const hasStrong = cpu > 0 || gpu > 0 || memory > 0;\n\n const {integralType, mode} = pool;\n const hasIntegralType = integralType && integralType !== 'none';\n\n const guaranteeType = [hasStrong && 'Strong', hasIntegralType && capitalize_(integralType)]\n .filter(Boolean)\n .join(' + ');\n return (\n <div className={block(null, className)}>\n <MetaTable\n items={[\n {\n key: 'Guarantee type',\n value: guaranteeType || 'Strong',\n },\n {\n key: 'Mode',\n value: format.Readable(mode) || format.NO_VALUE,\n },\n ...(UIFactory.getExtraMetaTableItemsForPool({pool, clusterUiConfig}) || []),\n ]}\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Column} from '@gravity-ui/react-data-table';\n\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {getIsRoot, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n getCurrentPoolStaticConfiguration,\n getCurrentPoolTreeStaticConfiguration,\n} from '../../../store/selectors/scheduling/scheduling-ts';\n\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport format from '../../../common/hammer/format';\n\nimport './SchedulingStaticConfiguration.scss';\nimport {getSettingsSchedulingExpandStaticConfiguration} from '../../../store/selectors/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport Label from '../../../components/Label/Label';\nimport UIFactory from '../../../UIFactory';\nimport PoolMetaData from '../Content/PoolMetaData';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\ninterface Props {\n onToggleCollapsedState: (value: boolean) => void;\n}\n\nfunction SchedulingStaticConfiguration(props: Props) {\n const {onToggleCollapsedState} = props;\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n onToggleCollapsedState(value);\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [onToggleCollapsedState, dispatch],\n );\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolMetaData className={block('pool-meta')} />\n {isRoot ? <PoolTreeStaticConfiguration /> : <PoolStaticConfiguration />}\n </div>\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\n\nfunction PoolStaticConfiguration() {\n const staticConfigurationItems = useSelector(getCurrentPoolStaticConfiguration);\n\n const columns: Array<Column<ArrayElement<typeof staticConfigurationItems>>> = [\n {\n name: 'name',\n header: 'Guarantees',\n sortable: false,\n width: 200,\n },\n {\n name: 'cpu',\n header: 'CPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const {cpu, cpuLabel} = row;\n if (cpuLabel) {\n return <Label capitalize text={cpuLabel} />;\n }\n return format['Number'](cpu);\n },\n align: 'right',\n },\n {\n name: 'gpu',\n header: 'GPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.gpu);\n },\n align: 'right',\n },\n {\n name: 'memory',\n header: 'Memory',\n sortable: false,\n width: 120,\n render: ({row}) => {\n return format['Bytes'](row.memory);\n },\n align: 'right',\n },\n {\n name: 'user_slots',\n header: 'User slots',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.user_slots);\n },\n align: 'right',\n },\n {\n name: 'network',\n header: 'Network',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const res = format['Number'](row.network);\n return res === format.NO_VALUE ? res : res + ' %';\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={staticConfigurationItems}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n />\n );\n}\n\nfunction PoolTreeStaticConfiguration() {\n const items = useSelector(getCurrentPoolTreeStaticConfiguration);\n const poolTree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n\n const columns: Array<Column<ArrayElement<typeof items>>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'total',\n header: 'Total',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format[row.format](row.total);\n },\n align: 'right',\n },\n {\n name: 'used',\n header: 'Distributed',\n sortable: false,\n width: 150,\n render({row}) {\n const {used, usedTitle, lastDayMaxValueSensor, lastDayMaxValueTitle} = row;\n const formatValue = format[row.format];\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: lastDayMaxValueTitle,\n sensor: lastDayMaxValueSensor,\n format: formatValue,\n current: {\n value: formatValue(used),\n title: usedTitle!,\n },\n showHint: true,\n showAsLink: true,\n });\n\n return !content ? (\n formatValue(used)\n ) : (\n <span className={block('used-cell')}>\n {formatValue(used)} / {content}\n </span>\n );\n },\n align: 'right',\n },\n {\n name: 'free',\n header: 'Delta',\n sortable: false,\n width: 150,\n render({row}) {\n const formatFn = format[row.format];\n const {free, total, lastDayMaxValueSensor} = row;\n const freeValue = formatFn(free);\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: 'Last day max operations',\n sensor: lastDayMaxValueSensor,\n format: (lastDayMaxValue?: number) => {\n const v =\n isNaN(total!) || isNaN(lastDayMaxValue!)\n ? undefined\n : total! - lastDayMaxValue!;\n return formatFn(v);\n },\n });\n\n return !content ? (\n freeValue\n ) : (\n <span>\n {freeValue} / {content}\n </span>\n );\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={items}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n rowClassName={(row) => {\n return !row?.level ? '' : block('row', {level: row.level as any});\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {getSchedulingOperationsError} from '../../../../../store/selectors/scheduling/expanded-pools';\n\nfunction SchedulingOperationsError() {\n const error = useSelector(getSchedulingOperationsError);\n return !error ? null : <ErrorBlock error={error} topMargin={'none'} />;\n}\n\nexport default React.memo(SchedulingOperationsError);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\n\nimport {getPoolsNames, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {changePool} from '../../../store/actions/scheduling/scheduling';\nimport {schedulingLoadFilterAttributes} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport Suggest from '../../../components/Suggest/Suggest';\n\nimport './PoolsSuggest.scss';\n\nconst block = cn('yt-pools-suggest');\n\nexport function PoolsSuggest({\n onCancelEdit = () => {},\n className,\n autoFocus,\n}: {\n onCancelEdit?: () => void;\n className?: string;\n autoFocus?: boolean;\n}) {\n const poolNames = useSelector(getPoolsNames);\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n\n const getSuggestItems = React.useCallback(\n (_items: any, filter?: string) => {\n if (!filter) {\n return poolNames;\n }\n\n const match: Array<string> = [];\n const startsWith: Array<string> = [];\n const filtered: Array<string> = [];\n\n const lcFilter = filter?.toLowerCase();\n\n forEach_(poolNames, (poolName) => {\n const lcPoolName = poolName.toLowerCase();\n if (lcFilter === lcPoolName) {\n match.push(poolName);\n } else if (lcPoolName.startsWith(lcFilter)) {\n startsWith.push(poolName);\n } else if (poolName !== ROOT_POOL_NAME && -1 !== lcPoolName.indexOf(lcFilter)) {\n filtered.push(poolName);\n }\n });\n return match.concat(startsWith, filtered);\n },\n [poolNames],\n );\n\n const handleCancelEdit = React.useCallback(() => {\n setTimeout(onCancelEdit, 500);\n }, [onCancelEdit]);\n\n const onItemClick = React.useCallback(\n (pool: string) => {\n dispatch(changePool(pool));\n onCancelEdit();\n },\n [dispatch, onCancelEdit],\n );\n\n const onFocus = React.useCallback(() => {\n dispatch(schedulingLoadFilterAttributes(tree));\n }, [dispatch, tree]);\n\n return (\n <Suggest\n className={block(null, className)}\n popupClassName={block('popup')}\n autoFocus={autoFocus}\n filter={getSuggestItems}\n onBlur={handleCancelEdit}\n onFocus={onFocus}\n placeholder=\"Select pool...\"\n onItemClick={(item) => onItemClick('string' === typeof item ? item : item.value)}\n items={poolNames}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../components/Label/Label';\nimport UIFactory from '../../../../../UIFactory';\nimport {PoolInfo} from '../../../../../store/selectors/scheduling/scheduling-pools';\nimport {getCluster, getClusterUiConfig} from '../../../../../store/selectors/global';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolInfo}) {\n const cluster = useSelector(getCluster);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {integralType} = pool;\n const showGuaranteeType = integralType === 'burst' || integralType === 'relaxed';\n const hasFlow = Number(pool.flowCPU) > 0 || Number(pool.flowGPU) > 0;\n return (\n <span className={block()}>\n {showGuaranteeType && (\n <Label\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n )}\n {!showGuaranteeType && hasFlow && (\n <Label className={block('tag')} text={'Integral'} theme={'complementary'} />\n )}\n {pool.mode === 'fifo' && (\n <Label className={block('tag')} text={'FIFO'} theme={'misc'} />\n )}\n {UIFactory.renderSchedulingTableItemExtraControls({\n cluster,\n pool,\n clusterUiConfig,\n })}\n </span>\n );\n}\n\nexport default React.memo(PoolTags);\n","import {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport qs from 'qs';\n\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../../components/formatters';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Button from '../../../../../components/Button/Button';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n changePool,\n changeTableTreeState,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {\n openPoolDeleteModal,\n schedulingSetAbcFilter,\n} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n getCurrentPool,\n getIsRoot,\n getSchedulingIsInitialLoading,\n getSchedulingOverviewMaxDepth,\n getSchedulingTreeState,\n getTableItems,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {SCHEDULING_POOL_TREE_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {poolsTableItems} from '../../../../../utils/scheduling/overviewTable';\nimport {HEADER_HEIGHT, Page} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport ShareUsageBar from '../../controls/ShareUsageBar';\nimport SchedulingStaticConfiguration from '../../../PoolStaticConfiguration/SchedulingStaticConfiguration';\n\nimport './Overview.scss';\nimport {Dialog} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {\n getPoolPathsByName,\n getSchedulingOperationsCount,\n resetExpandedPools,\n setExpandedPools,\n setLoadAllOperations,\n} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport PoolTags from './PoolTags';\nimport UIFactory from '../../../../../UIFactory';\n\nconst block = cn('scheduling-overview');\n\nconst STARVATION_STATUS_TO_THEME = {\n starving: 'warning',\n aggressively_starving: 'danger',\n};\n\nclass Overview extends Component {\n static resourcePropTypes = PropTypes.shape({\n type: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n });\n\n static tableItemPropTypes = PropTypes.shape({\n abc: PropTypes.object,\n name: PropTypes.string.isRequired,\n fairShareRatio: PropTypes.number,\n usageRatio: PropTypes.number,\n weight: PropTypes.number,\n demandRatio: PropTypes.number,\n\n runningOperationCount: PropTypes.number,\n operationCount: PropTypes.number,\n children: PropTypes.array,\n level: PropTypes.number,\n type: PropTypes.string,\n mode: PropTypes.string,\n });\n\n static propTypes = {\n // from connect\n treeState: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n\n changePool: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n schedulingSetFilter: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n changeTableTreeState: PropTypes.func.isRequired,\n schedulingSetAbcFilter: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n static poolModeTheme = {\n fair_share: 'default',\n fifo: 'info',\n };\n\n static renderBars([share, usage] = [], {forceTheme = undefined, title = undefined}) {\n return (\n <ShareUsageBar\n className={block('bars')}\n shareValue={share?.value}\n shareTitle={share?.title}\n usageValue={usage?.value}\n usageTitle={usage?.title}\n forceTheme={forceTheme}\n title={title}\n />\n );\n }\n\n static renderRatio(data) {\n const EPSILON = 1e-6;\n\n if (data < EPSILON) {\n return 0;\n } else if (data === 1) {\n return 1;\n }\n\n return hammer.format['Number'](data, {digits: 6});\n }\n\n static renderMode(item) {\n if (item.mode) {\n const text = hammer.format['ReadableField'](item.mode);\n const theme = Overview.poolModeTheme[item.mode];\n\n return <Label text={text} theme={theme} />;\n }\n\n return hammer.format.NO_VALUE;\n }\n\n static renderWeight(item) {\n const {weightEdited} = item;\n const edited = !isNaN(weightEdited);\n return (\n <span className={block('weight-content', {edited})}>\n <Tooltip content={edited ? 'Explicitly defined' : 'Automatically calculated'}>\n {hammer.format['Number'](item.weight, {\n digits: 6,\n digitsOnlyForFloat: true,\n })}\n </Tooltip>\n </span>\n );\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = poolsTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderFairShareUsage(item) {\n const barsData = [\n {\n value: item.fairShareRatio,\n title: 'Fair share',\n theme: 'success',\n },\n {\n value: item.usageRatio,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n const {starvation_status} = item;\n const forceTheme = STARVATION_STATUS_TO_THEME[starvation_status];\n\n return Overview.renderBars(barsData, {\n forceTheme,\n title: !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={hammer.format.Readable(starvation_status)} />\n </div>\n ),\n });\n }\n\n static renderOperationOverview(item) {\n const formatter = hammer.format['Number'];\n\n return formatter(item.runningOperationCount) + ' / ' + formatter(item.operationCount);\n }\n\n static renderAttributesButton(item, getPoolPaths) {\n const buttonProps = getPoolPaths\n ? {\n getPathProps: () => {\n return {\n exactPath: getPoolPaths(item.name).orchidPath,\n };\n },\n }\n : {\n attributes: item.attributes,\n };\n return <ClickableAttributesButton title={item.name} {...buttonProps} />;\n }\n\n static renderEditButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n const title = `edit pool ${item?.name || ''}`;\n return (\n <Button title={title} size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n );\n }\n\n static renderFifoIndex(item) {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n }\n\n static renderDeleteButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n return (\n <Button size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n }\n\n static renderType(item, columnName, toggleItemState, itemState, allowExpand = true) {\n const icon = {\n pool: 'tasks',\n operation: 'code',\n };\n\n const empty = allowExpand && itemState ? itemState.empty : true;\n const expanderClass = block('table-row-expander', {empty});\n const expanderClassIcon = block('table-row-expander-icon', {empty});\n\n const expanderIcon = itemState && (\n <Icon\n className={expanderClassIcon}\n awesome={itemState.collapsed ? 'angle-down' : 'angle-up'}\n />\n );\n\n return (\n <span onClick={empty ? undefined : toggleItemState} className={expanderClass}>\n {item.type !== 'operation' && expanderIcon}\n <span\n className={block('operation-icon', {\n type: item.type,\n })}\n title={item.type}\n >\n {icon[item.type] ? <Icon awesome={icon[item.type]} /> : null}\n </span>\n </span>\n );\n }\n\n static renderName(item, tab, cluster, currentPool) {\n const isCurrentPool = item.name === currentPool.name;\n const linkText = {\n pool: item.incomplete ? '' : item.name,\n operation: item.id,\n };\n\n if (item.type === 'pool') {\n if (isCurrentPool) {\n return <FormattedText text={linkText[item.type]} />;\n } else {\n const params = qs.parse(window.location.search.slice(1));\n const text = linkText[item.type];\n const state = {\n ...params,\n tab,\n cluster,\n pool: item.name,\n page: Page.SCHEDULING,\n };\n return <FormattedLink text={text} state={state} theme=\"primary\" routed />;\n }\n } else if (item.type === 'operation') {\n const url = `/${cluster}/operations/${item.id}`;\n return <Link url={url}>{linkText[item.type]}</Link>;\n } else {\n return <FormattedText text={item.name} />;\n }\n }\n\n static renderEphemeralIcon(item) {\n return (\n item.isEphemeral && (\n <Tooltip content=\"Ephemeral pool\" className={block('ephemeral-icon')}>\n <Icon awesome=\"ghost\" />\n </Tooltip>\n )\n );\n }\n\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool, itemsMaxDepth} = this.props;\n const allowExpand = item.name !== currentPool.name;\n\n return (\n <span\n className={block('name-content', {\n level: item.level,\n 'max-depth': itemsMaxDepth,\n })}\n >\n {Overview.renderType(item, ...rest, allowExpand)}\n <span className={block('name-content-name')}>\n {Overview.renderName(item, Tab.OVERVIEW, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n &nbsp;\n {Overview.renderEditButton(item, handleEditClick)}\n &nbsp;\n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n get tableSettings() {\n const {treeState} = this.props;\n\n return {\n treeState,\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_TREE_TABLE_ID,\n tree: true,\n columns: {\n items: poolsTableItems,\n sets: {\n default: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'fair_share_usage',\n 'fair_share',\n 'usage',\n 'demand',\n 'min_share',\n 'operation_overview',\n 'dominant_resource',\n 'actions',\n ],\n },\n },\n mode: 'default',\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n fair_share: Overview.renderColumnAsRatio,\n usage: Overview.renderColumnAsRatio,\n demand: Overview.renderColumnAsRatio,\n min_share: Overview.renderMinShare,\n fair_share_usage: Overview.renderFairShareUsage,\n dominant_resource: Overview.renderDominantResource,\n operation_overview: Overview.renderOperationOverview,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.key;\n },\n };\n }\n\n renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <SchedulingOverviewToolbar {...this.props} />\n </div>\n )}\n </Sticky>\n );\n }\n\n rowClassName = (item) => {\n const {currentPool} = this.props;\n return item.name !== currentPool?.name ? undefined : block('current-row');\n };\n\n render() {\n const {items, treeStateExpanded, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <SchedulingStaticConfiguration onToggleCollapsedState={fireResizeEvent} />\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ResetExpandedPoolsOnTreeChange>\n <ElementsTable\n {...this.tableSettings}\n treeStateExpanded={treeStateExpanded}\n items={items}\n rowClassName={this.rowClassName}\n onItemToggleState={this.onItemToggleState}\n isLoading={isInitialLoading}\n />\n </ResetExpandedPoolsOnTreeChange>\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n\n onItemToggleState = (poolPath, collapsed) => {\n const {setExpandedPools} = this.props;\n const parts = poolPath.split('/');\n const poolName = parts[parts.length - 1];\n\n setExpandedPools({[poolName]: !collapsed});\n };\n}\n\nconst mapStateToProps = (state) => {\n const items = getTableItems(state);\n const itemsMaxDepth = getSchedulingOverviewMaxDepth(state);\n const cluster = getCluster(state);\n const currentPool = getCurrentPool(state);\n const treeState = getSchedulingTreeState(state);\n const isRoot = getIsRoot(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {\n cluster,\n items,\n itemsMaxDepth,\n currentPool,\n treeState,\n treeStateExpanded: isRoot || !items[0] ? undefined : [items[0].key],\n abcServiceFilter: getSchedulingAbcFilter(state),\n isInitialLoading,\n };\n};\n\nconst mapDispatchToProps = {\n changePool,\n openPoolDeleteModal,\n openEditModal,\n changeTableTreeState,\n schedulingSetAbcFilter,\n setExpandedPools,\n getSchedulingOperationsCount,\n setLoadAllOperations,\n getPoolPathsByName,\n};\n\nfunction fireResizeEvent() {\n setTimeout(() => window.dispatchEvent(new Event('resize')), 500);\n}\n\nconst OverviewConnected = connect(mapStateToProps, mapDispatchToProps)(Overview);\n\nexport default OverviewConnected;\n\nexport function OverviewWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OverviewConnected />;\n}\n\nfunction ResetExpandedPoolsOnTreeChange({children}) {\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n /**\n * The component is required to reset inner state of ElementsTable by recreate it when tree is changed.\n * Also it resets state when the tab is changed back from 'Details'\n * These resets are required to sync store.getState().schedulingOperations.expandedPools and state of ElementsTable\n * to correctly calculate current max depth of items (see getSchedulingOverviewMaxDepth)\n */\n React.useEffect(() => {\n dispatch(resetExpandedPools(tree));\n }, [tree]);\n\n return <React.Fragment key={tree}>{children}</React.Fragment>;\n}\n\nclass SchedulingOverviewToolbar extends React.PureComponent {\n state = {\n confirmExpandDialogVisible: false,\n };\n\n handleExpand = () => {\n const opCount = this.props.getSchedulingOperationsCount();\n if (opCount <= 2000) {\n this.onConfirmExpand();\n } else {\n this.setConfirmDialogVisibility(true);\n }\n };\n onConfirmExpand = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('expanded');\n };\n handleCollapse = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('collapsed');\n };\n\n onAbcServiceFilter = (abcService) => {\n const {slug, id} = abcService || {};\n this.props.schedulingSetAbcFilter({id, slug});\n };\n\n setConfirmDialogVisibility = (confirmExpandDialogVisible) => {\n this.setState({confirmExpandDialogVisible});\n };\n\n renderConfirmExpandDialog() {\n const {confirmExpandDialogVisible} = this.state;\n return !confirmExpandDialogVisible ? null : (\n <Dialog open={true}>\n <Dialog.Header caption={'Confirmation of \"Expand all\"'} />\n <Dialog.Body>\n To display the expanded tree it is required to load all running operations, it\n might be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonApply={() => {\n this.setConfirmDialogVisibility(false);\n this.onConfirmExpand();\n }}\n onClickButtonCancel={() => this.setConfirmDialogVisibility(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </Dialog>\n );\n }\n\n render() {\n const {\n abcServiceFilter: {slug},\n } = this.props;\n\n return (\n <React.Fragment>\n {this.renderConfirmExpandDialog()}\n <PoolsSuggest className={block('filter')} />\n\n {UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: {slug},\n onChange: this.onAbcServiceFilter,\n })}\n\n <Button\n size=\"m\"\n className={block('toolbar-button')}\n theme=\"normal\"\n title=\"Expand All\"\n onClick={this.handleExpand}\n >\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n\n <Button size=\"m\" theme=\"normal\" title=\"Collapse All\" onClick={this.handleCollapse}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n","import React from 'react';\nimport {compose} from 'redux';\n\nimport withStickyHead from '../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../components/ElementsTable/hocs/withStickyFooter';\nimport ElementsTableBase from '../../components/ElementsTable/ElementsTable';\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction ElementsTableSticky(props) {\n return <ElementsTable {...props} />;\n}\n\nexport default ElementsTableSticky;\n","import React, {Component, Fragment} from 'react';\nimport {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport ElementsTableSticky from '../../../../../components/ElementsTable/ElementsTableSticky';\nimport Overview from '../../../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Filter from '../../../../../components/Filter/Filter';\n\nimport {\n changeContentMode,\n changePool,\n changePoolChildrenFilter,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {SCHEDULING_POOL_CHILDREN_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {calculateTotalOverPools} from '../../../../../utils/scheduling/details';\nimport {childTableItems} from '../../../../../utils/scheduling/detailsTable';\nimport {HEADER_HEIGHT} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getContentMode,\n getCurrentPool,\n getPollChildrenTableItems,\n getPoolChildrenFilter,\n getSchedulingIsInitialLoading,\n getSortedPoolChildren,\n} from '../../../../../store/selectors/scheduling/scheduling';\n\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getProgressTheme} from '../../../../../utils/progress';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {Bold, Secondary} from '../../../../../components/Text/Text';\n\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\n\nimport PoolTags from '../Overview/PoolTags';\n\nimport './Details.scss';\n\nconst block = cn('scheduling-details');\n\nclass Details extends Component {\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n static renderMaxShare(item) {\n return Overview.renderRatio(item.maxShareRatio);\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderColumnAsNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data);\n }\n\n static renderMaxOperationCount(item) {\n const {maxOperationCount, maxOperationCountEdited} = item;\n return Details.renderNumberWithEdited(maxOperationCount, maxOperationCountEdited);\n }\n\n static renderMaxRunningOperationCount(item) {\n const {maxRunningOperationCount, maxRunningOperationCountEdited} = item;\n return Details.renderNumberWithEdited(\n maxRunningOperationCount,\n maxRunningOperationCountEdited,\n );\n }\n\n static renderNumberWithEdited(value, editedValue) {\n const content = hammer.format.Number(value);\n\n const autoCalculated = isNaN(editedValue);\n return (\n <Tooltip content={autoCalculated ? 'Automatically calculated' : 'Explicitly defined'}>\n {autoCalculated ? <Secondary>{content}</Secondary> : <Bold>{content}</Bold>}\n </Tooltip>\n );\n }\n\n static renderColumnAsBytes(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Bytes'](data);\n }\n\n static renderColumnAsFloatNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static renderIntegralGuarantee(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n const {integralType} = item;\n const hasActiveGuarantee = integralType && integralType !== 'none';\n\n const value = hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n\n return hasActiveGuarantee ? (\n value\n ) : (\n <Tooltip\n className={block('integral-guarantee', {\n inactive: !hasActiveGuarantee,\n })}\n content={'It is impossible to use the guarantee until \"Guarantee type\" is defined'}\n >\n {value}\n </Tooltip>\n );\n }\n\n static renderColumnAsReadable(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](data);\n }\n\n static renderIntegralType(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return data === undefined\n ? hammer.format.NO_VALUE\n : Details.renderColumnAsReadable(item, columnName);\n }\n\n static renderAsProgress(item, columnName) {\n const value = childTableItems[columnName].get(item);\n const theme = getProgressTheme(value);\n const text = childTableItems[columnName].text(item);\n return isNaN(value) ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n }\n\n static childrenIntegrals(item, columnName) {\n const value = childTableItems[columnName].get(item);\n return !value\n ? hammer.format.NO_VALUE\n : hammer.format.Number(value, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static propTypes = {\n // from connect\n mode: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n children: PropTypes.arrayOf(Overview.tableItemPropTypes),\n\n changePoolChildrenFilter: PropTypes.func.isRequired,\n changeContentMode: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n changePool: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n get columnsSets() {\n return {\n cpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n //'rel_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n //'rel_usage_cpu',\n 'resource_limit_cpu',\n //'guaranteed_usage_cpu',\n 'actions',\n ],\n },\n memory: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n //'rel_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n //'rel_usage_memory',\n 'resource_limit_memory',\n //'guaranteed_usage_memory',\n 'actions',\n ],\n },\n gpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n //'rel_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n //'rel_usage_gpu',\n 'resource_limit_gpu',\n //'guaranteed_usage_gpu',\n 'actions',\n ],\n },\n user_slots: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n //'rel_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n //'rel_usage_user_slots',\n 'resource_limit_user_slots',\n //'guaranteed_usage_user_slots',\n 'actions',\n ],\n },\n operations: {\n items: [\n 'name',\n 'FI',\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n 'actions',\n ],\n },\n integral: {\n items: [\n 'name',\n 'FI',\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n //'accumulated_cpu',\n 'burst_duration',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {mode, children} = this.props;\n const isCurrentPool = this.isCurrentPool;\n const totalRow = children?.length ? calculateTotalOverPools(children) : undefined;\n\n return {\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_CHILDREN_TABLE_ID,\n footer: totalRow,\n header: false,\n top: 99,\n columns: {\n items: childTableItems,\n sets: this.columnsSets,\n mode,\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n dominant_resource: Details.renderDominantResource,\n min_share: Details.renderMinShare,\n max_share: Details.renderMaxShare,\n operation_overview: Overview.renderOperationOverview,\n demand: Details.renderColumnAsRatio,\n fair_share: Details.renderColumnAsRatio,\n usage: Details.renderColumnAsRatio,\n fair_share_usage: Overview.renderFairShareUsage,\n\n resource_detailed_cpu: Details.renderColumnAsFloatNumber,\n resource_detailed_memory: Details.renderColumnAsBytes,\n resource_detailed_gpu: Details.renderColumnAsNumber,\n resource_detailed_user_slots: Details.renderColumnAsNumber,\n\n resource_limit_cpu: Details.renderColumnAsFloatNumber,\n resource_limit_memory: Details.renderColumnAsBytes,\n resource_limit_gpu: Details.renderColumnAsNumber,\n resource_limit_user_slots: Details.renderColumnAsNumber,\n\n min_resources_cpu: Details.renderColumnAsFloatNumber,\n min_resources_memory: Details.renderColumnAsBytes,\n min_resources_gpu: Details.renderColumnAsNumber,\n min_resources_user_slots: Details.renderColumnAsNumber,\n\n abs_guaranteed_cpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_memory: Details.renderColumnAsBytes,\n abs_guaranteed_gpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_user_slots: Details.renderColumnAsFloatNumber,\n\n abs_demand_cpu: Details.renderColumnAsNumber,\n abs_demand_memory: Details.renderColumnAsBytes,\n abs_demand_gpu: Details.renderColumnAsNumber,\n abs_demand_user_slots: Details.renderColumnAsNumber,\n\n abs_usage_cpu: Details.renderColumnAsNumber,\n abs_usage_memory: Details.renderColumnAsBytes,\n abs_usage_gpu: Details.renderColumnAsNumber,\n abs_usage_user_slots: Details.renderColumnAsNumber,\n\n rel_guaranteed_cpu: this.renderRelResource,\n rel_guaranteed_memory: this.renderRelResource,\n rel_guaranteed_gpu: this.renderRelResource,\n rel_guaranteed_user_slots: this.renderRelResource,\n\n rel_usage_cpu: this.renderRelResource,\n rel_usage_memory: this.renderRelResource,\n rel_usage_gpu: this.renderRelResource,\n rel_usage_user_slots: this.renderRelResource,\n\n guaranteed_usage_cpu: this.renderResourceBars,\n guaranteed_usage_memory: this.renderResourceBars,\n guaranteed_usage_gpu: this.renderResourceBars,\n guaranteed_usage_user_slots: this.renderResourceBars,\n\n running_operation_progress: Details.renderAsProgress,\n running_operation_count: Details.renderColumnAsNumber,\n operation_count: Details.renderColumnAsNumber,\n operation_progress: Details.renderAsProgress,\n max_running_operation_count: Details.renderMaxRunningOperationCount,\n max_operation_count: Details.renderMaxOperationCount,\n\n integral_type: Details.renderIntegralType,\n burst_cpu: Details.renderIntegralGuarantee,\n flow_cpu: Details.renderIntegralGuarantee,\n children_burst_cpu: Details.childrenIntegrals,\n children_flow_cpu: Details.childrenIntegrals,\n accumulated: Details.renderColumnAsRatio,\n accumulated_cpu: Details.renderColumnAsNumber,\n burst_duration: Details.renderColumnAsNumber,\n\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.name;\n },\n itemMods(item) {\n return {\n current: isCurrentPool(item) ? 'yes' : '',\n aggregation: item.aggregation ? 'yes' : '',\n };\n },\n };\n }\n\n renderResourceBars = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const resourceData = childTableItems[columnName].get(item, currentPool);\n const barsData = [\n {\n value: resourceData.guaranteed,\n title: 'Guaranteed share',\n theme: 'success',\n },\n {\n value: resourceData.usage,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n return Overview.renderBars(barsData);\n };\n\n renderRelResource = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const data = childTableItems[columnName].get(item, currentPool);\n\n return Overview.renderRatio(data);\n };\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool} = this.props;\n\n return (\n <span className={block('name-cell', {child: item.isChildPool})}>\n {Overview.renderType(item, ...rest)}\n <span className={block('name-cell-text')}>\n {Overview.renderName(item, Tab.DETAILS, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n &nbsp;\n {Overview.renderEditButton(item, handleEditClick)}\n &nbsp;\n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n isCurrentPool = (item) => item.name === this.props.currentPool.name;\n\n renderToolbar() {\n const {filter, mode, changePoolChildrenFilter, changeContentMode, currentPool} = this.props;\n\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <Filter\n key={currentPool?.name}\n size=\"m\"\n value={filter}\n placeholder=\"Filter...\"\n className={block('filter')}\n onChange={changePoolChildrenFilter}\n />\n\n <RadioButton\n size=\"m\"\n value={mode}\n onChange={changeContentMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'cpu',\n text: 'CPU',\n },\n {\n value: 'memory',\n text: 'Memory',\n },\n {\n value: 'gpu',\n text: 'GPU',\n },\n {\n value: 'user_slots',\n text: 'User slots',\n },\n {\n value: 'operations',\n text: 'Operations',\n },\n {\n value: 'integral',\n text: 'Integral guarantees',\n },\n ]}\n />\n </div>\n )}\n </Sticky>\n );\n }\n\n render() {\n const {items, mode, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ElementsTableSticky\n cssTableMods={{mode}}\n {...this.tableSettings}\n items={items}\n isLoading={isInitialLoading}\n />\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const currentPool = getCurrentPool(state);\n const items = getPollChildrenTableItems(state);\n const mode = getContentMode(state);\n const filter = getPoolChildrenFilter(state);\n const cluster = getCluster(state);\n const children = getSortedPoolChildren(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {currentPool, mode, filter, items, children, cluster, isInitialLoading};\n};\n\nconst mapDispatchToProps = {\n changePoolChildrenFilter,\n changeContentMode,\n openEditModal,\n openPoolDeleteModal,\n changePool,\n getPoolPathsByName,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <DetailsConnected />;\n}\n","import hammer from '../../common/hammer';\n\nexport function calculateTotalOverPools(pools) {\n const summedProperties = [\n 'weight',\n 'minShareRatio',\n 'demandRatio',\n 'fairShareRatio',\n 'usageRatio',\n 'maxOperationCount',\n 'maxRunningOperationCount',\n 'runningOperationCount',\n 'operationCount',\n ].map((name) => ({name, type: 'sum'}));\n\n ['cpu', 'user_memory', 'gpu', 'user_slots'].forEach((resource) => {\n ['min', 'guaranteed', 'usage', 'demand'].forEach((metric) => {\n const name = ['resources', resource, metric].join('.');\n summedProperties.push({name, type: 'nested/sum'});\n });\n });\n\n // We can aggregate only pools with resources\n const items = pools.filter((pool) => Boolean(pool.resources));\n\n return Object.assign(hammer.aggregation.prepare(items, summedProperties)[0], {\n key: 'aggregation',\n name: 'Aggregation',\n type: 'aggregation',\n aggregation: true,\n });\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getIsRoot,\n getPool,\n getPools,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {PoolAclPanel} from '../../../../../containers/ACL';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {getAclLoadState} from '../../../../../store/selectors/acl';\nimport {IdmObjectType} from '../../../../../constants/acl';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nfunction PoolAcl() {\n const isRoot = useSelector(getIsRoot);\n\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const pools = useSelector(getPools);\n\n if (isRoot) {\n return (\n <NoContent\n warning=\"Visualization is not supported for <Root>.\"\n hint=\" Please select a specific pool.\"\n />\n );\n }\n\n return isEmpty_(pools) ? null : (\n <ErrorBoundary>\n <PoolAclPanel key={`${tree}_${pool}`} path={pool} poolTree={tree} />\n </ErrorBoundary>\n );\n}\n\nfunction PoolAclWithRum({loadState}) {\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_ACL,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_ACL,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PoolAcl />;\n}\n\nconst mapStateToProps = (state) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {loadExpandedPools} from '../../../store/actions/scheduling/expanded-pools';\n\nfunction SchedulingExpandedPoolsUpdater() {\n const tree = useSelector(getTree);\n const name = useSelector(getPool);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadExpandedPools(tree));\n }, [dispatch, tree, name]);\n\n return null;\n}\n\nexport default React.memo(SchedulingExpandedPoolsUpdater);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport {OverviewWithRum} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport Details from '../../../pages/scheduling/Content/tabs/Details/Details';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {DEFAULT_TAB, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport PoolAcl from '../../../pages/scheduling/Content/tabs/PoolAcl/PoolAcl';\nimport {\n getIsRoot,\n getPool,\n getPoolIsEphemeral,\n getTree,\n isPoolAclAllowed,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport './Content.scss';\nimport {getCluster} from '../../../store/selectors/global';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport UIFactory from '../../../UIFactory';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst block = cn('scheduling-content');\n\nContent.propTypes = {\n // from parent\n className: PropTypes.string,\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nfunction Content({className, match, location}) {\n const cluster = useSelector(getCluster);\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const isEphemeral = useSelector(getPoolIsEphemeral);\n const isRoot = useSelector(getIsRoot);\n const allowAcl = useSelector(isPoolAclAllowed);\n\n const localTab = {...Tab};\n\n const showSettings = reduce_(\n Tab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {},\n );\n\n const titleDict = {};\n\n const aclTab = showSettings[Tab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n });\n\n const extraRoutes = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate} = tab;\n const tabSettings = {show: true};\n showSettings[name] = tabSettings;\n\n if (urlTemplate) {\n tabSettings.routed = false;\n tabSettings.external = true;\n tabSettings.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytPool: pool,\n ytPoolTree: tree,\n });\n }\n\n localTab[name] = name;\n if (title) {\n titleDict[name] = title;\n }\n if (component) {\n const route = <Route key={name} path={`${match.path}/${name}`} component={component} />;\n extraRoutes.push(route);\n }\n });\n\n delete localTab.ACL;\n localTab[Tab.ACL] = Tab.ACL;\n\n const props = makeTabProps(match.url, localTab, showSettings, {pool, tree}, titleDict);\n\n return (\n <ErrorBoundary>\n <SchedulingExpandedPoolsUpdater />\n <div className={block(null, className)}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={OverviewWithRum} />\n <Route path={`${match.path}/${Tab.DETAILS}`} component={Details} />\n {extraRoutes}\n {aclTab.show && <Route path={`${match.path}/${Tab.ACL}`} component={PoolAcl} />}\n <Route path={`${match.path}/:tab`} component={Placeholder} />\n <Redirect\n from={match.url}\n to={{pathname: `${match.url}/${DEFAULT_TAB}`, search: location.search}}\n />\n </Switch>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport hammer from '../../../common/hammer';\nimport {getIsRoot, getResources} from '../../../store/selectors/scheduling/scheduling';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport './SchedulingResources.scss';\n\nconst block = cn('scheduling-resources');\nconst headingBlock = cn('elements-heading');\n\nfunction SchedulingResources() {\n const isRoot = useSelector(getIsRoot);\n const resources = useSelector(getResources) as any;\n\n return !isRoot || isEmpty_(resources) ? null : (\n <div className={block()}>\n {map_(resources, (resource) => (\n <div className={block('resources-item')} key={resource.type}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](resource.type)}\n </div>\n <Progress {...resource.progress} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default React.memo(SchedulingResources);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {DialogField, FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Error from '../../../../components/Error/Error';\n\nimport {\n calculatePoolPath,\n getPools,\n getPoolsSelectItems,\n getSchedulingEditItem,\n getSchedulingSourcesOfEditItem,\n getTree,\n} from '../../../../store/selectors/scheduling/scheduling';\nimport {\n InitialPoolResourceInfo,\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolGeneralResourceType,\n PoolIntegralResourceType,\n PoolStrongResourceType,\n getInitialValues,\n} from '../../../../utils/scheduling/scheduling';\nimport {isAbcPoolName, isTopLevelPool} from '../../../../utils/scheduling/pool';\nimport {closeEditModal, editPool} from '../../../../store/actions/scheduling/scheduling';\n\nimport {checkUserPermissionsUI} from '../../../../utils/acl/acl-api';\nimport {getCluster, getCurrentUserName} from '../../../../store/selectors/global';\nimport {getCurrentTreeGpuLimit} from '../../../../store/selectors/scheduling/scheduling-ts';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n PoolInfo,\n getSchedulingPoolsMapByName,\n} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\n\nconst block = cn('pool-editor-dialog');\n\nfunction makePermissionWarning(visible: boolean) {\n return !visible ? null : (\n <div className={block('permissions-warning')}>\n You do not have sufficient permissions to modify pool settings. In order to be able to\n modify pool settings <span className={block('flag')}>inherit_acl</span> flag should be\n enabled for current pool and you should be responsible for the parent pool.\n </div>\n );\n}\n\nfunction makeError(error: any) {\n return isEmpty_(error) ? null : <Error className={block('error')} error={error} />;\n}\n\nexport interface PoolEditorFormValues {\n general: Record<PoolGeneralResourceType, InitialPoolResourceInfo> & {\n weight: {value?: number; error?: string};\n }; // TODO add description for another fields\n resourceGuarantee: Record<PoolStrongResourceType, InitialPoolResourceInfo>;\n integralGuarantee: Record<\n Exclude<PoolIntegralResourceType, 'guaranteeType'>,\n InitialPoolResourceInfo\n > & {guaranteeType?: 'none' | 'burst' | 'relaxed'};\n resourceLimits: {\n cpu: number | string;\n gpu: number | string;\n memory: number | string;\n userSlots: number | string;\n };\n otherSettings: {\n forbidImmediateOperations: boolean;\n fifoSortParams: Array<string>;\n createEphemeralSubpools: boolean;\n };\n}\n\nexport function PoolEditorDialog() {\n const dispatch = useDispatch();\n\n const editItem = useSelector(getSchedulingEditItem);\n const {poolErrorData, editVisibility} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const treGpuLimit = useSelector(getCurrentTreeGpuLimit);\n\n const allowedSources = useSelector(getSchedulingSourcesOfEditItem);\n\n const poolsItems = useSelector(getPoolsSelectItems);\n const pools = useSelector(getPools);\n const tree = useSelector(getTree);\n const modeItems = [\n {key: 'fair_share', value: 'fair_share', title: 'fair_share'},\n {key: 'fifo', value: 'fifo', title: 'fifo'},\n ];\n const [initialValues, initialFormValues] = useMemo(() => {\n const data = getInitialValues(editItem, allowedSources);\n const formData: PoolEditorFormValues = {\n ...data,\n general: {\n ...data.general,\n weight: {\n value: data.general.weight,\n },\n },\n };\n return [data, formData];\n }, [editItem, allowedSources]); // don't pass pools into memo's array\n\n const editCloseHandler = useCallback(() => {\n dispatch(closeEditModal({cancelled: true}));\n }, [dispatch]);\n const editConfirmHandler = useCallback(\n async (form: FormApi<PoolEditorFormValues>) => {\n const {values} = form.getState();\n const {general, resourceGuarantee, integralGuarantee, resourceLimits, otherSettings} =\n values;\n const data = {\n general: {\n ...pick_(general, ['name', 'mode']),\n weight: general.weight.value,\n ...pickBy_(\n pick_(general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof POOL_GENERAL_TYPE_TO_ATTRIBUTE;\n const initialValue = initialValues.general[key].limit;\n return item.limit !== initialValue;\n },\n ),\n },\n resourceGuarantee: pickBy_(\n pick_(resourceGuarantee, Object.keys(POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof resourceGuarantee;\n const initialValue = initialValues.resourceGuarantee[key].limit;\n return item.limit !== initialValue;\n },\n ),\n integralGuarantee: pickBy_(\n pick_(integralGuarantee, Object.keys(POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR)),\n (item, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof integralGuarantee;\n const initialValue = initialValues.integralGuarantee[key];\n if (typeof item === 'object' && typeof initialValue === 'object') {\n return item.limit !== initialValue.limit;\n } else {\n return item !== initialValue;\n }\n },\n ),\n resourceLimits: pick_(resourceLimits, ['cpu', 'gpu', 'memory', 'userSlots']),\n otherSettings: pick_(otherSettings, [\n 'forbidImmediateOperations',\n 'fifoSortParams',\n 'createEphemeralSubpools',\n ]),\n };\n await dispatch(editPool(editItem, data, initialValues));\n },\n [editItem, initialValues, dispatch],\n );\n\n const user = useSelector(getCurrentUserName);\n const [hasWarning, setHasWarning] = React.useState(false);\n const [checkPermError, setCheckPermError] = React.useState(null);\n\n React.useEffect(() => {\n setCheckPermError(null);\n if (!editItem?.name) {\n return;\n }\n const pathToCheck = calculatePoolPath(editItem.name, pools, tree);\n checkUserPermissionsUI(pathToCheck, user, ['write'])\n .then(([{action}]) => {\n const newHasWarning = action !== 'allow';\n if (newHasWarning !== hasWarning) {\n setHasWarning(newHasWarning);\n }\n })\n .catch((error) => {\n setCheckPermError(error);\n });\n }, [pools, tree, editItem?.name, hasWarning, setHasWarning, setCheckPermError]);\n\n const warningField: DialogField = {\n type: 'block',\n name: 'perm-warning',\n extras: {\n children: makePermissionWarning(hasWarning),\n },\n };\n\n const checkPermErrorField: DialogField = {\n type: 'block',\n name: 'check-perm-error',\n extras: {\n children: makeError(checkPermError),\n },\n };\n\n const poolErrorDataField: DialogField = {\n type: 'block',\n name: 'pool-error-data',\n extras: {\n children: makeError(poolErrorData),\n },\n };\n\n const transferNotice = useTransferNotice(editItem);\n\n const integralTypeNotice = useChangeIntegralTypeNotice(editItem, pools, tree);\n\n return (\n <YTDFDialog<PoolEditorFormValues>\n size=\"l\"\n key={editItem?.name + '/' + editVisibility}\n className={block()}\n visible={editVisibility}\n onClose={editCloseHandler}\n headerProps={{\n title: editItem?.name,\n }}\n onAdd={editConfirmHandler}\n initialValues={initialFormValues}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...transferNotice,\n {\n name: 'name',\n type: 'text',\n caption: 'Pool name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n },\n {\n name: 'parent',\n type: 'yt-select-single',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: true,\n extras: {\n disabled: true,\n items: poolsItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n },\n {\n name: 'separator',\n type: 'block',\n extras: {\n children: <div className={block('separator')} />,\n },\n },\n {\n name: 'mode',\n type: 'yt-select-single',\n caption: 'Mode',\n required: true,\n extras: {\n items: modeItems,\n placeholder: 'Select mode...',\n width: 'max',\n hideFilter: true,\n },\n },\n {\n name: 'weight',\n type: 'number',\n caption: 'Weight',\n extras: {\n min: Number.MIN_VALUE,\n hidePrettyValue: true,\n formatFn: (value) => (value === undefined ? '' : String(value)),\n },\n },\n {\n name: 'maxOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxOperationCount',\n initialLimit: initialValues.general.maxOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n {\n name: 'maxRunningOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max running operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxRunningOperationCount',\n initialLimit: initialValues.general.maxRunningOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceGuarantee',\n title: 'Strong Guarantee',\n fields: [\n ...transferNotice,\n {\n name: 'cpuStrong',\n type: 'pool-quota-editor',\n caption: 'CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'cpuStrong',\n initialLimit: initialValues.resourceGuarantee.cpuStrong.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'gpuStrong',\n type: 'pool-quota-editor' as const,\n caption: 'GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'gpuStrong' as const,\n initialLimit:\n initialValues.resourceGuarantee.gpuStrong.limit,\n },\n },\n ]\n : []),\n {\n name: 'memoryStrong',\n type: 'pool-quota-editor' as const,\n caption: 'Memory',\n extras: {\n format: 'Bytes',\n pool: editItem?.name || '',\n resourceType: 'memoryStrong' as const,\n initialLimit: initialValues.resourceGuarantee.memoryStrong.limit,\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'integralGuarantee',\n title: 'Integral Guarantee',\n fields: [\n ...transferNotice,\n ...integralTypeNotice,\n {\n name: 'guaranteeType',\n type: 'yt-select-single',\n caption: 'Guarantee',\n extras: {\n placeholder: 'Integral guarantee type...',\n items: [\n {\n value: 'none',\n text: 'Descendants only',\n },\n {value: 'burst', text: 'Burst'},\n {value: 'relaxed', text: 'Relaxed'},\n ],\n width: 'max',\n },\n },\n {\n name: 'burstCpu',\n type: 'pool-quota-editor',\n caption: 'Burst CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstCpu',\n initialLimit: initialValues.integralGuarantee.burstCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'burstGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Burst GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.burstGpu.limit,\n },\n },\n ]\n : []),\n {\n name: 'flowCpu',\n type: 'pool-quota-editor',\n caption: 'Flow CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowCpu',\n initialLimit: initialValues.integralGuarantee.flowCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'flowGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Flow GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.flowGpu.limit,\n },\n },\n ]\n : []),\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceLimits',\n title: 'Resource Limits',\n fields: [\n {\n name: 'cpu',\n type: 'text',\n caption: 'CPU',\n },\n {\n name: 'gpu',\n type: 'text',\n caption: 'GPU',\n },\n {\n name: 'memory',\n type: 'bytes',\n caption: 'Memory',\n validator(value?: number) {\n if (typeof value !== 'undefined' && isNaN(value)) {\n return 'Incorrect value';\n }\n return undefined;\n },\n },\n {\n name: 'userSlots',\n type: 'text',\n caption: 'User slots',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'otherSettings',\n title: 'Other settings',\n fields: [\n {\n name: 'forbidImmediateOperations',\n type: 'tumbler',\n caption: 'Forbid immediate operations',\n },\n {\n name: 'fifoSortParams',\n type: 'sortable-list',\n caption: 'Fifo sort parameters',\n extras: {\n axis: 'x',\n },\n },\n {\n name: 'createEphemeralSubpools',\n type: 'tumbler',\n caption: 'Create ephemeral subpools',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n ]}\n />\n );\n}\n\nfunction useTransferNotice(editItem?: PoolInfo): [DialogField<PoolEditorFormValues>] | [] {\n const {parent} = editItem || {};\n // const abcInfo = abcInfoFromAttributes(cypressAttributes);\n const poolsByName = useSelector(getSchedulingPoolsMapByName);\n const parentPool = poolsByName[parent!];\n\n const children = UIFactory.renderTransferQuotaNoticeForPool({\n pool: editItem,\n parentPool,\n isTopLevel: isTopLevelPool(editItem),\n });\n\n return !children\n ? []\n : [\n {\n type: 'block' as const,\n name: 'transferQuotaNotice',\n extras: {\n children,\n },\n },\n ];\n}\n\nfunction useChangeIntegralTypeNotice(\n editItem: PoolInfo | undefined,\n pools: Array<PoolInfo>,\n tree: string,\n): [DialogField<PoolEditorFormValues>] | [] {\n const {name, parent} = editItem || {};\n\n const cluster = useSelector(getCluster);\n\n if (isAbcPoolName(name) || (!isAbcPoolName(parent) && !isTopLevelPool(editItem))) {\n return [];\n }\n\n const poolPath = name ? calculatePoolPath(name, pools, tree) : undefined;\n const path = `${poolPath}/@integral_guarantees/guarantee_type`;\n const summary = `[${cluster}]: Change-request of ${path}`;\n\n const {url, queue} = createQuotaReqTicketUrl({summary});\n\n return [\n {\n type: 'block' as const,\n name: 'integralTypeNotice',\n extras: {\n children: (\n <div className={block('changeTypeNotice')}>\n To change the guarantee type of the pool you have to create a request to{' '}\n {url ? <Link url={url}>{queue}</Link> : \"the cluster's support team\"}\n </div>\n ),\n },\n },\n ];\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {Dialog as DeleteDialog} from '@gravity-ui/uikit';\n\nimport {Alerts} from '../../../components/Alerts/Alerts';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Error from '../../../components/Error/Error';\n\nimport Content from '../Content/Content';\n\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../constants/scheduling';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport {\n closePoolDeleteModal as closeDeleteModal,\n deletePool,\n loadSchedulingData,\n} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport './Scheduling.scss';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../store/selectors/scheduling';\nimport SchedulingResources from '../Content/SchedulingResources';\nimport {PoolEditorDialog} from './PoolEditorDialog/PoolEditorDialog';\nimport {RootState} from '../../../store/reducers';\n\nconst block = cn('scheduling');\n\nconst SchedulingDialogsMemo = React.memo(SchedulingDialogs);\n\nfunction Scheduling() {\n const error = useSelector((state: RootState) => {\n const {error: hasError, errorData} = state.scheduling.scheduling;\n return hasError ? errorData : undefined;\n });\n const {schedulerAlerts} = useSelector((state: RootState) => state.scheduling.scheduling);\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(loadSchedulingData());\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return (\n <div className={block(null, 'elements-main-section')}>\n <ErrorBoundary>\n {error && <Error error={error} />}\n <div className={block('wrapper')}>\n <Alerts\n className={block('alerts')}\n items={schedulerAlerts}\n marginDirection=\"top\"\n />\n <SchedulingResources />\n <Content {...{className: block('content')}} />\n </div>\n <SchedulingDialogsMemo />\n </ErrorBoundary>\n </div>\n );\n}\n\nconst SchedulingMemo = React.memo(Scheduling);\n\nexport default function SchedulingWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n return <SchedulingMemo />;\n}\n\nfunction SchedulingDialogs() {\n const dispatch = useDispatch();\n\n const {deleteVisibility, deleteItem, poolErrorData} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const deleteConfirmHandler = React.useCallback(\n () => dispatch(deletePool(deleteItem)),\n [deleteItem, dispatch],\n );\n const deleteCloseHandler = React.useCallback(() => {\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n dispatch(closeDeleteModal());\n }, [dispatch]);\n\n return (\n <React.Fragment>\n {deleteVisibility && (\n <DeleteDialog\n size=\"m\"\n className={block('delete-dialog')}\n open={deleteVisibility}\n onClose={deleteCloseHandler}\n hasCloseButton\n >\n <DeleteDialog.Header caption=\"Delete\" />\n <DeleteDialog.Body>\n Are you sure you want to delete the <b>{deleteItem?.name}</b> pool?\n {keys_(poolErrorData).length > 0 ? (\n <Error message=\"Delete pool failure\" error={poolErrorData} />\n ) : null}\n </DeleteDialog.Body>\n <DeleteDialog.Footer\n onClickButtonApply={deleteConfirmHandler}\n onClickButtonCancel={deleteCloseHandler}\n propsButtonApply={{view: 'flat-danger'}}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Delete\"\n />\n </DeleteDialog>\n )}\n <PoolEditorDialog />\n </React.Fragment>\n );\n}\n","export function prepareAbcService(abcService?: {\n value?: string;\n title: string;\n id: string | number;\n}) {\n if (!abcService || !abcService.value) {\n return {};\n }\n const slug = abcService.value.startsWith('svc_')\n ? abcService.value.slice(4) // remove 'svc_' prefix;\n : abcService.value;\n const name = abcService.title;\n\n return {slug, name, id: Number(abcService.id)};\n}\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {\n CreatePoolDialogAction,\n CreatePoolDialogState,\n} from '../../reducers/scheduling/create-pool-dialog';\nimport {\n CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n} from '../../../constants/scheduling';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {prepareAbcService} from '../../../utils/scheduling';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {loadSchedulingData} from './scheduling-ts';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {getCluster} from '../../selectors/global';\nimport {updateAcl} from '../../../utils/acl/acl-api';\nimport {IdmObjectType} from '../../../constants/acl';\nimport Link from '../../../components/Link/Link';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {createAdminReqTicketUrl} from '../../../config';\n\ntype CreatePoolDialogThunkAction<R = any> = ThunkAction<\n R,\n RootState,\n unknown,\n CreatePoolDialogAction\n>;\n\nexport function fetchCreatePoolDialogTreeItems(currentTree: string): CreatePoolDialogThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.getPoolTrees, {path: `//sys/pool_trees/${currentTree}`})\n .then((treeItems: CreatePoolDialogState['treeItems']) => {\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n data: {currentTree, treeItems},\n });\n });\n };\n}\n\nexport function createPool(values: FIX_MY_TYPE): CreatePoolDialogThunkAction {\n return (dispatch, getState) => {\n const {abcService} = values;\n const cluster = getCluster(getState()) as string;\n\n return wrapApiPromiseByToaster(\n yt.v3.create({\n type: 'scheduler_pool',\n attributes: Object.assign(\n {\n name: values.name,\n parent_name: values.parent || undefined,\n pool_tree: values.tree,\n },\n !abcService || !abcService.value\n ? {}\n : {\n abc: prepareAbcService(abcService),\n },\n ),\n }),\n {\n toasterName: `create_${values.name}`,\n successContent: `Successfully created ${values.name}. Please wait.`,\n errorContent: `'${values.name}' pool creation failed`,\n timeout: 10000,\n },\n )\n .then(() => {\n updateAcl(cluster, values.name, {\n idmKind: IdmObjectType.POOL,\n poolTree: values.tree,\n responsible: values.responsible,\n });\n\n return waitWhilePoolIsReady(values).then(() => {\n dispatch(loadSchedulingData());\n });\n })\n .catch((error) => {\n if (error?.code === yt.codes.CANCELLED) {\n return;\n }\n\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n data: error,\n });\n\n return Promise.reject(error);\n });\n };\n}\n\nconst {url: createUrl, queue} = createAdminReqTicketUrl();\n\nconst CHECK_REDINESS_TIMEOUT = 1500;\nconst MAX_POOL_REDINESS_TIMEOUT = 10 * 1000; // the value is provided by @renadeen\nconst TIMEOUT_ERROR = {\n message: (\n <div>\n The pool was not appeared in orchidea in 10 seconds.\n {createUrl ? (\n <>\n Please fill a ticket for <Link url={createUrl}>{queue}</Link>\n </>\n ) : (\n \"Please report it to the cluster's support team.\"\n )}\n .\n </div>\n ),\n};\n\nfunction waitWhilePoolIsReady({name, tree}: {name: string; tree: string}, startedAt = 0) {\n const startedTime = startedAt || Date.now();\n const diff = Date.now() - startedTime;\n if (diff > MAX_POOL_REDINESS_TIMEOUT) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n yt.v3\n .exists({\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${name}`,\n })\n .then((res: boolean) => {\n if (res) {\n return resolve(true);\n } else {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n })\n .catch((error: unknown) => {\n if (error !== TIMEOUT_ERROR) {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n\n return reject(error);\n });\n }, CHECK_REDINESS_TIMEOUT);\n });\n}\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport Error from '../../../../components/Error/Error';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Button from '../../../../components/Button/Button';\n\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {\n getIsRoot,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../../store/selectors/scheduling/scheduling';\n\nimport {\n createPool,\n fetchCreatePoolDialogTreeItems,\n} from '../../../../store/actions/scheduling/create-pool-dialog';\nimport {\n getCreatePoolDialogError,\n getCreatePoolDialogFlatTreeItems,\n} from '../../../../store/selectors/scheduling/create-pool-dialog';\nimport {FIX_MY_TYPE} from '../../../../types';\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../../constants/scheduling';\nimport {docsUrl, isIdmAclAvailable} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {uiSettings} from '../../../../config/ui-settings';\n\nconst allowRoot = !uiSettings.schedulingDenyRootAsParent;\n\nexport default function CreatePoolButton() {\n const dispatch = useDispatch();\n\n const isRoot = useSelector(getIsRoot);\n\n const [visible, changeVisibility] = useState(false);\n const handleShow = useCallback(() => changeVisibility(true), [changeVisibility]);\n const handleClose = useCallback(() => {\n changeVisibility(false);\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n }, [dispatch, changeVisibility]);\n\n return (\n <React.Fragment>\n <Button view=\"action\" disabled={!allowRoot && isRoot} onClick={handleShow}>\n Create pool\n </Button>\n {visible && <CreatePoolDialog onClose={handleClose} />}\n </React.Fragment>\n );\n}\n\ninterface FormValues {\n name: string;\n tree: string;\n parent: string;\n responsible: {value: string; id: string | number; title: string};\n}\n\nfunction CreatePoolDialog(props: {onClose: () => void}) {\n const dispatch = useDispatch();\n const treeStored: string = useSelector(getTree);\n const [tree, setTree] = React.useState(treeStored);\n const handleTreeChange = React.useCallback(\n (newTree: string | undefined) => {\n setTree(newTree!);\n dispatch(fetchCreatePoolDialogTreeItems(newTree!));\n },\n [dispatch],\n );\n React.useEffect(() => {\n dispatch(fetchCreatePoolDialogTreeItems(tree));\n }, [dispatch]);\n\n const error = useSelector(getCreatePoolDialogError);\n\n const login = useSelector(getCurrentUserName);\n const treeItems = useSelector(getTreesSelectItems);\n const pool = useSelector(getPool);\n\n const handleCreateConfirm = useCallback(\n (form: FormApi) => {\n const {values} = form.getState();\n return dispatch(createPool(values));\n },\n [dispatch],\n );\n const initialValues = useMemo(() => {\n // const slug = ypath.getValue(poolData, '/abc/slug');\n return {\n // abcService: slug ? {\n // key: slug,\n // value: slug,\n // id: ypath.getValue(poolData, '/abc/id'),\n // title: ypath.getValue(poolData, '/abc/name'),\n // } : undefined,\n tree,\n parent: pool,\n responsible: [\n {\n value: login,\n type: 'users',\n },\n ],\n };\n }, [tree, pool, login]);\n\n const [name, setName] = React.useState('');\n const handleNameChange = React.useCallback(\n (newName: string) => {\n setName(newName);\n },\n [setName],\n );\n\n const {sortedFlatTree} = useSelector(getCreatePoolDialogFlatTreeItems);\n\n const validateForm = React.useCallback(\n (values: FormValues): null | {name?: string} => {\n const {name} = values;\n const res: Partial<Record<keyof FormValues, string>> = {};\n if (-1 !== sortedIndexOf_(sortedFlatTree, name)) {\n res.name = 'the value must be unique';\n }\n return isEmpty_(res) ? null : res;\n },\n [sortedFlatTree],\n );\n\n const isApplyDisabled = React.useMemo(\n () => (form: {values: FormValues}) => {\n const errors = validateForm(form.values);\n return Boolean(errors);\n },\n [validateForm],\n );\n\n return (\n <YTDFDialog\n visible={true}\n onClose={props.onClose}\n headerProps={{\n title: 'Create pool',\n }}\n onAdd={handleCreateConfirm as FIX_MY_TYPE}\n initialValues={{\n ...initialValues,\n name,\n }}\n validate={validateForm as FIX_MY_TYPE}\n isApplyDisabled={isApplyDisabled}\n pristineSubmittable={true}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'Name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n onChange: handleNameChange,\n touched: Boolean(name),\n },\n {\n name: 'tree',\n type: 'yt-select-single',\n caption: 'Pool tree',\n tooltip: (\n <span>\n Select pool tree where to create new pool.{' '}\n {docsUrl(\n <>\n See{' '}\n <Link url={UIFactory.docsUrls['scheduler:scheduler_and_pools']}>\n Documentations\n </Link>{' '}\n for more details.\n </>,\n )}\n </span>\n ),\n required: true,\n extras: {\n hideFilter: true,\n items: treeItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n onChange: (value: string | Array<string> | undefined) => {\n handleTreeChange(value as string);\n },\n },\n {\n name: 'parent',\n type: 'create-pool-parent',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: !allowRoot,\n extras: {\n placeholder: 'Select parent...',\n },\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n name: 'responsible',\n type: 'acl-subjects' as const,\n caption: 'Responsible users',\n tooltip:\n 'Choose responsible users who will manage permissions and pool settings.',\n required: true,\n extras: {\n placeholder: 'Select responsible users...',\n },\n },\n ]),\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: error && <Error error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\nimport some_ from 'lodash/some';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '@gravity-ui/uikit';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport Favourites from '../../../components/Favourites/Favourites';\nimport {PoolsSuggest} from '../PoolsSuggest/PoolsSuggest';\nimport {\n getCurrentPool,\n getCurrentPoolPath,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {getFavouritePools, isActivePoolInFavourites} from '../../../store/selectors/favourites';\nimport {\n changePool,\n changeTree,\n togglePoolFavourites,\n} from '../../../store/actions/scheduling/scheduling';\n\nimport {ROOT_POOL_NAME, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport Link from '../../../components/Link/Link';\nimport {EditButton} from '../../../components/EditableAsText/EditableAsText';\nimport Select from '../../../components/Select/Select';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {makeRoutedURL} from '../../../store/location';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\n\nimport './SchedulingTopRowContent.scss';\n\nconst block = cn('scheduling-top-row-content');\n\nfunction SchedulingTopRowContent() {\n const pool = useSelector(getCurrentPool);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={Page.SCHEDULING} className={block()} urlParams={{pool: ''}}>\n <SchedulingFavourites />\n <SchedulingPhysicalTree />\n <EditableSchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\n </RowWithName>\n );\n}\n\nfunction SchedulingFavourites() {\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n const pool = useSelector(getPool);\n const favouritesPools = useSelector(getFavouritePools);\n const isActivePool = useSelector(isActivePoolInFavourites);\n\n const onFavouriteClick = React.useCallback(\n ({path}: {path: string}) => {\n const [, pool, tree] = path.match(/(.+)\\[(.+)]/)!;\n dispatch(changePool(pool));\n dispatch(changeTree(tree));\n },\n [dispatch],\n );\n const onFavouriteToggle = React.useCallback(\n () => dispatch(togglePoolFavourites(pool, tree)),\n [dispatch, pool, tree],\n );\n\n const currentPool = useSelector(getPool);\n\n return (\n <Favourites\n className={block('favourites')}\n theme={'clear'}\n items={favouritesPools || []}\n isActive={isActivePool}\n onToggle={onFavouriteToggle}\n onItemClick={onFavouriteClick}\n toggleDisabled={ROOT_POOL_NAME === currentPool}\n />\n );\n}\n\nfunction CurrentPoolToClipboardButton() {\n const currentPool = useSelector(getPool);\n const currentPoolPath = useSelector(getCurrentPoolPath);\n\n return (\n <ClipboardButton\n className={block('clipboard')}\n text={currentPool}\n shiftText={currentPoolPath}\n hoverContent={'Hold SHIFT-key to copy full path'}\n />\n );\n}\n\nfunction SchedulingBreadcrumbs() {\n const bcItems = useSelector(getSchedulingBreadcrumbItems);\n const dispatch = useDispatch();\n\n const items = React.useMemo(() => {\n // @ts-ignore\n const restItems = map_(bcItems.slice(1), (name) => {\n return {\n text: name,\n action: () => {\n dispatch(changePool(name));\n },\n };\n });\n return [\n {\n text: '<Scheduler>',\n action: () => {\n dispatch(changePool('<Root>'));\n },\n },\n ...restItems,\n ];\n }, [bcItems]);\n\n const renderItem = React.useCallback((item: BreadcrumbsItem, isCurrent: boolean) => {\n return <BreadcrumbLink isCurrent={isCurrent} title={item.text} pool={item.text} />;\n }, []);\n\n return (\n <Breadcrumbs\n className={block('breadcrumbs')}\n items={items}\n lastDisplayedItemsCount={2}\n firstDisplayedItemsCount={1}\n renderItemContent={renderItem}\n renderRootContent={renderEmpty}\n />\n );\n}\n\nfunction renderEmpty(_: unknown, isCurrent: boolean) {\n return <BreadcrumbLink isCurrent={isCurrent} title={'<Root>'} pool={''} />;\n}\n\ninterface LinkProps {\n isCurrent: boolean;\n title: string;\n pool: string;\n}\n\nfunction BreadcrumbLink(props: LinkProps) {\n const tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const {isCurrent, title, pool} = props;\n\n const pathname = pool\n ? window.location.pathname\n : calcRootPathname(window.location.pathname, cluster);\n const url = makeRoutedURL(pathname, {tree, pool, filter: ''});\n return (\n <Link\n className={block('breadcrumbs-link', {current: isCurrent})}\n theme={'ghost'}\n routed\n url={url}\n >\n {title}\n </Link>\n );\n}\n\nfunction calcRootPathname(pathname: string, cluster: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\n const isAllowedTab = some_(SCHEDULING_ALLOWED_ROOT_TABS, (_v, tab) =>\n pathname.endsWith('/' + tab),\n );\n return isAllowedTab ? pathname : `/${cluster}/${Page.SCHEDULING}/${Tab.OVERVIEW}`;\n}\n\nfunction EditableSchedulingBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n const toggleEdit = React.useCallback(() => {\n setEditMode(!editMode);\n }, [editMode, setEditMode]);\n\n return (\n <div className={block('editable-breadcrumbs', {edit: editMode})}>\n {editMode ? (\n <PoolsSuggest autoFocus onCancelEdit={toggleEdit} />\n ) : (\n <React.Fragment>\n <SchedulingBreadcrumbs />\n <EditButton onClick={toggleEdit} />\n <div className={block('btn-spacer')} />\n <CurrentPoolToClipboardButton />\n </React.Fragment>\n )}\n </div>\n );\n}\n\nfunction SchedulingPhysicalTree() {\n const tree = useSelector(getTree);\n const treeItems = useSelector(getTreesSelectItems);\n const dispatch = useDispatch();\n\n const onChange = React.useCallback((tree: unknown) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n hideFilter={treeItems?.length <= 5}\n items={treeItems}\n onUpdate={(vals) => onChange(vals[0])}\n className={block('path-tree')}\n placeholder=\"Select tree...\"\n width=\"max\"\n />\n </div>\n );\n}\n\nconst SchedulingTopRowContentMemo = React.memo(SchedulingTopRowContent);\n\nexport default function SchedulingTopRowContentWithError() {\n return (\n <ErrorBoundary compact>\n <SchedulingTopRowContentMemo />\n </ErrorBoundary>\n );\n}\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","import React from 'react';\nimport { block } from '../utils/cn';\nconst b = block('breadcrumbs');\nexport function BreadcrumbsButton(props) {\n return React.createElement(\"button\", Object.assign({}, props, { type: \"button\", className: b('switcher', { more: true }) }));\n}\n","'use client';\nimport React from 'react';\nimport { Link } from '../Link';\nimport { block } from '../utils/cn';\nimport { BreadcrumbsButton } from './BreadcrumbsButton';\nconst b = block('breadcrumbs');\nfunction Item({ item, isCurrent, isPrevCurrent, renderItemContent, renderItem, }) {\n const children = renderItemContent\n ? renderItemContent(item, isCurrent, isPrevCurrent)\n : item.text;\n if (renderItem) {\n return renderItem({ item, children, isCurrent, isPrevCurrent });\n }\n const itemTitle = item.title || item.text;\n if (isPrevCurrent || !isCurrent) {\n if (item.href !== undefined) {\n return (React.createElement(Link, { key: item.text, view: \"secondary\", href: item.href, title: itemTitle, onClick: item.action, className: b('item', { 'prev-current': isPrevCurrent }) }, children));\n }\n return (React.createElement(BreadcrumbsButton, { key: item.text, title: itemTitle, onClick: item.action }, children));\n }\n return (React.createElement(\"div\", { title: itemTitle, className: b('item', { current: true }) }, children));\n}\nexport const BreadcrumbsItem = React.memo(Item);\nBreadcrumbsItem.displayName = 'Breadcrumbs.Item';\n","import { addComponentKeysets } from '../../utils/addComponentKeysets';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Breadcrumbs';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport React from 'react';\nimport { DropdownMenu } from '../DropdownMenu';\nimport { block } from '../utils/cn';\nimport { BreadcrumbsButton } from './BreadcrumbsButton';\nimport i18n from './i18n';\nconst b = block('breadcrumbs');\nexport function BreadcrumbsMore({ popupStyle, popupPlacement, items }) {\n return (React.createElement(DropdownMenu, { items: items, popupProps: {\n className: b('popup', {\n staircase: popupStyle === 'staircase',\n }),\n placement: popupPlacement,\n }, renderSwitcher: ({ onClick }) => (React.createElement(BreadcrumbsButton, { title: i18n('label_more'), onClick: onClick }, \"...\")) }));\n}\nBreadcrumbsMore.displayName = 'Breadcrumbs.More';\n","import React from 'react';\nimport { block } from '../utils/cn';\nconst b = block('breadcrumbs');\nexport function BreadcrumbsSeparator({ renderItemDivider }) {\n return (React.createElement(\"div\", { \"aria-hidden\": true, className: b('divider') }, renderItemDivider ? renderItemDivider() : '/'));\n}\nBreadcrumbsSeparator.displayName = 'Breadcrumbs.Separator';\n","'use client';\nimport React from 'react';\nimport _throttle from 'lodash/throttle';\nimport { block } from '../utils/cn';\nimport { BreadcrumbsItem as Item } from './BreadcrumbsItem';\nimport { BreadcrumbsMore } from './BreadcrumbsMore';\nimport { BreadcrumbsSeparator } from './BreadcrumbsSeparator';\nimport './Breadcrumbs.css';\nconst RESIZE_THROTTLE = 200;\nconst MORE_ITEM_WIDTH = 34;\nconst DEFAULT_POPUP_PLACEMENT = ['bottom', 'top'];\nconst GAP_WIDTH = 4;\nconst b = block('breadcrumbs');\nexport var LastDisplayedItemsCount;\n(function (LastDisplayedItemsCount) {\n LastDisplayedItemsCount[LastDisplayedItemsCount[\"One\"] = 1] = \"One\";\n LastDisplayedItemsCount[LastDisplayedItemsCount[\"Two\"] = 2] = \"Two\";\n})(LastDisplayedItemsCount || (LastDisplayedItemsCount = {}));\nexport var FirstDisplayedItemsCount;\n(function (FirstDisplayedItemsCount) {\n FirstDisplayedItemsCount[FirstDisplayedItemsCount[\"Zero\"] = 0] = \"Zero\";\n FirstDisplayedItemsCount[FirstDisplayedItemsCount[\"One\"] = 1] = \"One\";\n})(FirstDisplayedItemsCount || (FirstDisplayedItemsCount = {}));\nexport class Breadcrumbs extends React.Component {\n static prepareInitialState(props) {\n const { firstDisplayedItemsCount } = props;\n return {\n calculated: false,\n rootItem: firstDisplayedItemsCount ? props.items[0] : undefined,\n visibleItems: props.items.slice(firstDisplayedItemsCount),\n hiddenItems: [],\n allItems: props.items,\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.allItems !== props.items) {\n return Breadcrumbs.prepareInitialState(props);\n }\n return null;\n }\n constructor(props) {\n super(props);\n this.handleResize = () => {\n const state = Breadcrumbs.prepareInitialState(this.props);\n this.setState(state, this.recalculate);\n };\n this.handleResize = _throttle(this.handleResize, RESIZE_THROTTLE);\n if (typeof window !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.handleResize);\n }\n this.container = React.createRef();\n this.state = Breadcrumbs.prepareInitialState(props);\n }\n componentDidMount() {\n var _a;\n this.recalculate();\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.observe(this.container.current);\n }\n componentDidUpdate(prevProps) {\n if (prevProps.items !== this.state.allItems) {\n this.recalculate();\n }\n }\n componentWillUnmount() {\n var _a;\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n }\n render() {\n const { className, qa } = this.props;\n const { calculated } = this.state;\n return (React.createElement(\"div\", { className: b({ calculated: calculated ? 'yes' : 'no' }, className), \"data-qa\": qa },\n React.createElement(\"div\", { className: b('inner'), ref: this.container },\n this.renderRootItem(),\n this.renderMoreItem(),\n this.renderVisibleItems())));\n }\n renderItem(item, isCurrent, isPrevCurrent, renderItemContent) {\n return (React.createElement(Item, { item: item, isCurrent: isCurrent, isPrevCurrent: isPrevCurrent, renderItemContent: renderItemContent || this.props.renderItemContent, renderItem: this.props.renderItem }));\n }\n renderItemDivider() {\n const { renderItemDivider } = this.props;\n return React.createElement(BreadcrumbsSeparator, { renderItemDivider: renderItemDivider });\n }\n renderRootItem() {\n const { renderRootContent } = this.props;\n const { rootItem, visibleItems } = this.state;\n const isCurrent = visibleItems.length === 0;\n if (!rootItem) {\n return null;\n }\n return this.renderItem(rootItem, isCurrent, false, renderRootContent);\n }\n renderVisibleItems() {\n const { visibleItems } = this.state;\n return visibleItems.map((item, index, items) => {\n const isCurrent = index === items.length - 1;\n const isPrevCurrent = index === items.length - 2;\n return (React.createElement(React.Fragment, { key: index },\n this.renderItemDivider(),\n this.renderItem(item, isCurrent, isPrevCurrent)));\n });\n }\n renderMoreItem() {\n const { hiddenItems } = this.state;\n if (hiddenItems.length === 0) {\n return null;\n }\n const { popupStyle, popupPlacement, renderItemDivider } = this.props;\n return (React.createElement(React.Fragment, null,\n React.createElement(BreadcrumbsSeparator, { renderItemDivider: renderItemDivider }),\n React.createElement(BreadcrumbsMore, { items: hiddenItems, popupPlacement: popupPlacement, popupStyle: popupStyle })));\n }\n recalculate() {\n var _a;\n const { items: allItems, lastDisplayedItemsCount, firstDisplayedItemsCount } = this.props;\n let availableWidth = ((_a = this.container.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 0;\n if (this.container.current && availableWidth > 0) {\n availableWidth += GAP_WIDTH;\n const dividers = Array.from(this.container.current.querySelectorAll(`.${b('divider')}`));\n const items = [\n ...Array.from(this.container.current.querySelectorAll(`.${b('switcher')}`)),\n ...Array.from(this.container.current.querySelectorAll(`.${b('item')}`)),\n ];\n const itemsWidths = items.map((elem, i) => elem.scrollWidth + (i === items.length - 1 ? GAP_WIDTH : GAP_WIDTH * 2));\n const dividersWidths = dividers.map((elem) => elem.offsetWidth);\n const buttonsWidth = itemsWidths.reduce((total, width, index, widths) => {\n const isLastItem = widths.length - 1 === index;\n const isItemBeforeLast = lastDisplayedItemsCount === LastDisplayedItemsCount.Two &&\n widths.length - 2 === index;\n if (isLastItem || isItemBeforeLast) {\n return total + Math.min(width, 200);\n }\n return total + width;\n }, 0);\n const dividersWidth = dividersWidths.reduce((total, width) => total + width, 0);\n let totalWidth = buttonsWidth + dividersWidth;\n let visibleItemsStartIndex = 1;\n while (totalWidth > availableWidth &&\n visibleItemsStartIndex < items.length - lastDisplayedItemsCount) {\n if (visibleItemsStartIndex === 1) {\n totalWidth += MORE_ITEM_WIDTH + dividersWidths[visibleItemsStartIndex];\n }\n totalWidth -=\n itemsWidths[visibleItemsStartIndex] + dividersWidths[visibleItemsStartIndex];\n visibleItemsStartIndex++;\n }\n this.setState({\n calculated: true,\n visibleItems: allItems.slice(visibleItemsStartIndex - (1 - firstDisplayedItemsCount)),\n hiddenItems: allItems.slice(firstDisplayedItemsCount, visibleItemsStartIndex - (1 - firstDisplayedItemsCount)),\n });\n }\n }\n}\nBreadcrumbs.defaultProps = {\n popupPlacement: DEFAULT_POPUP_PLACEMENT,\n};\n"],"names":["block","cn","Alerts","_ref","className","items","_ref$marginDirection","marginDirection","isEmpty_","_jsx","ErrorBoundary","children","CollapsibleSection","name","size","UI_COLLAPSIBLE_SIZE","map_","alert","index","Alert","error","AttributesButton","_ref$view","view","_ref$size","rest","_objectWithoutProperties","_excluded","Button","_objectSpread","Icon","awesome","connect","openAttributesModal","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","onClick","pathProps","b","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","props","collapsed","_createClass","key","value","_this$props","this","overview","togglerRightPadding","_jsxs","margin","clickable","Component","_React$useState","React","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","EditableAsText","text","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","extraProps","onMouseDown","type","EditButton","ElementsTableFooter","state","item","undefined","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","Favourites","isActive","toggleActive","setState","prevState","onItemClick","_this2","dropItems","action","push","switcher","renderButton","pin","DropdownMenu","popupProps","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","toggleDisabled","clear","disabled","renderDropDownMenu","renderHotkey","itemType","PropTypes","ICON_BY_TYPE","_ICON_BY_TYPE","_defineProperty","SortIcon","order","allowUnordered","withUndefined","nextSortOrderValue","_this$props2","label","hidden","icon","Tooltip","format","ReadableField","face","Secondary","Bold","_ref2","SecondaryBold","_ref3","Warning","_ref4","NoWrap","_ref5","Escaped","_ref6","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","withRouter","_props$theme","match","url","computeStateQuery","cluster","params","Link","routed","FormattedText","FormattedTextOrLink","_ref$asLink","asLink","FormattedLink","FormattedId","id","_useState","useState","_useState2","hovered","setHovered","onMouseEnter","onMouseLeave","ClipboardButton","printColumnAsBytes","columnName","column","hammer","get","printColumnAsNumber","Placeholder","tab","useRouteMatch","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","tree","dispatch","getState","pool","getPool","ROOT_POOL_NAME","loadExpandedOperationsAndPools","ytApiV3Id","executeBatch","YTApiId","schedulingPoolFullPath","requests","fields","then","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","parts","split","slice","i","poolName","parentPoolPath","join","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","data","Toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","_toConsumableArray","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","isSupportedSchedulingChildrenByPool","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","all","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","resolve","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","reduce_","acc","Object","assign","poolsToCollapse","forEach_","pos","rawPools","cypressData","pools","_ref7","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","getTree","poolsByName","getSchedulingPoolsMapByName","expanded","expandedPoolInfo","_data","res","_data2","parent","calcExpandedPoolInfo","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","getPools","calculatePoolPath","orchidPath","toaster","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","getCluster","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","scheduling","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","treeResources","resource_usage","resource_limits","config","resource_distribution_info","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","openPoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","closePoolDeleteModal","setPoolAttributes","poolPath","values","initials","transferData","toModify","guaranteeType","restValues","v","k","limit","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","updateNodeAttributes","tmp","dstPool","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","Math","abs","source_pool","destination_pool","pool_tree","resource_delta","schedulingTransferPoolQuota","err","getBatchError","transferPoolQuota","schedulingOverviewHasFilter","_getSchedulingAttribu","getSchedulingAttributesToFilterParams","lastTime","lastTree","Date","now","wrapApiPromiseByToaster","schedulingFilterAttributes","skipSuccessToast","toasterName","errorContent","attributesToFilter","attributesToFilterParams","setName","newName","prevName","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","keyMapper","userSlots","omittedValuesList","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","resources","result","omit_","makeGeneralCommands","isInitial","initialValue","pickBy_","mode","weight","prototype","isOmitted","Number","isInvalidNumber","isNaN","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","timeout","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","SCHEDULING_EDIT_POOL_FAILURE","openEditModal","TOGGLE_EDIT_VISIBILITY","cancelled","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","getSchedulingIsFinalLoadingState","createSelector","store","loading","loaded","status","calculateLoadingStatus","isFinalLoadingStatus","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","NO_VALUE","_calcProgressProps","calcProgressProps","digits","Progress","getSchedulingBreadcrumbItems","current","_loop","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolStaticConfiguration","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","filter","Boolean","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","getNumber","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","filter_","getPoolsAllocatedOperationsCount","topPools","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","getOperationsStaticConfiguration","allocated","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","operationRows","undistributed_resources","burst","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","flow","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","max","PoolMetaData","useSelector","clusterUiConfig","getClusterUiConfig","hasStrong","integralType","capitalize_","MetaTable","Readable","UIFactory","getExtraMetaTableItemsForPool","SchedulingStaticConfiguration","onToggleCollapsedState","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","PoolStaticConfiguration","staticConfigurationItems","header","sortable","width","render","row","cpuLabel","Label","capitalize","align","DataTableYT","useThemeYT","displayIndices","poolTree","_ref8","formatValue","renderSchedulingLastDayMaximum","sensor","showHint","showAsLink","_ref9","formatFn","freeValue","lastDayMaxValue","rowClassName","SchedulingOperationsError","getSchedulingOperationsError","ErrorBlock","topMargin","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","poolNames","getPoolsNames","getSuggestItems","_items","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onFocus","Suggest","popupClassName","placeholder","PoolTags","showGuaranteeType","hasFlow","flowCPU","flowGPU","renderSchedulingTableItemExtraControls","STARVATION_STATUS_TO_THEME","starving","aggressively_starving","Overview","renderNameCell","currentPool","itemsMaxDepth","allowExpand","_len2","_key2","renderType","renderName","Tab","OVERVIEW","renderEphemeralIcon","renderActions","aggregation","renderAttributesButton","Fragment","renderEditButton","renderDeleteButton","onItemToggleState","treeState","tableId","SCHEDULING_POOL_TREE_TABLE_ID","poolsTableItems","sets","default","renderMode","FI","renderFifoIndex","renderWeight","fair_share","renderColumnAsRatio","usage","demand","min_share","renderMinShare","fair_share_usage","renderFairShareUsage","dominant_resource","renderDominantResource","operation_overview","renderOperationOverview","actions","Sticky","topOffset","isSticky","SchedulingOverviewToolbar","_this$props3","treeStateExpanded","fireResizeEvent","StickyContainer","renderToolbar","ResetExpandedPoolsOnTreeChange","ElementsTable","tableSettings","isLoading","share","_ref4$forceTheme","_ref4$title","poolModeTheme","weightEdited","edited","digitsOnlyForFloat","renderRatio","barsData","fairShareRatio","usageRatio","starvation_status","renderBars","formatter","getPoolPaths","ClickableAttributesButton","fifoIndex","toggleItemState","itemState","operation","expanderClass","expanderClassIcon","expanderIcon","isCurrentPool","linkText","incomplete","qs","window","location","search","page","Page","dominantResource","minShareRatio","resourcePropTypes","isRequired","progress","tableItemPropTypes","abc","demandRatio","fifo","changeTableTreeState","CHANGE_TABLE_TREE_STATE","schedulingSetAbcFilter","abcServiceFilter","getSchedulingOperationsCount","root","setLoadAllOperations","dispatchEvent","Event","OverviewConnected","getTableItems","getSchedulingOverviewMaxDepth","getSchedulingTreeState","getSchedulingAbcFilter","OverviewWithRum","isFinalState","useAppRumMeasureStart","SCHEDULING_OVERVIEW","additionalStartType","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_getSchedulingOperati2","old","map","_toPropertyKey","resetExpandedPools","_React$PureComponent","_super2","_this3","_len3","_key3","confirmExpandDialogVisible","handleExpand","onConfirmExpand","setConfirmDialogVisibility","handleCollapse","onAbcServiceFilter","abcService","_ref10","slug","_this4","Dialog","open","Header","caption","Body","Footer","onClickButtonApply","onClickButtonCancel","textButtonCancel","textButtonApply","renderConfirmExpandDialog","renderControlAbcService","withStickyHead","withStickyFooter","ElementsTableBase","Details","renderResourceBars","resourceData","childTableItems","guaranteed","renderRelResource","child","isChildPool","DETAILS","integral","totalRow","summedProperties","resource","metric","prepare","calculateTotalOverPools","SCHEDULING_POOL_CHILDREN_TABLE_ID","columnsSets","max_share","renderMaxShare","resource_detailed_cpu","renderColumnAsFloatNumber","resource_detailed_memory","renderColumnAsBytes","resource_detailed_gpu","renderColumnAsNumber","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","running_operation_progress","renderAsProgress","running_operation_count","operation_count","operation_progress","max_running_operation_count","renderMaxRunningOperationCount","max_operation_count","renderMaxOperationCount","integral_type","renderIntegralType","burst_cpu","renderIntegralGuarantee","flow_cpu","children_burst_cpu","childrenIntegrals","children_flow_cpu","accumulated","accumulated_cpu","burst_duration","_this$props4","changePoolChildrenFilter","changeContentMode","Filter","RadioButton","_this$props5","ElementsTableSticky","cssTableMods","maxShareRatio","maxOperationCountEdited","renderNumberWithEdited","maxRunningOperationCountEdited","editedValue","autoCalculated","hasActiveGuarantee","inactive","renderColumnAsReadable","getProgressTheme","poolChildrenFilter","CHANGE_POOL_CHILDREN_FILTER","CHANGE_CONTENT_MODE","contentMode","target","DetailsConnected","getPollChildrenTableItems","getContentMode","getPoolChildrenFilter","getSortedPoolChildren","DetailsWithRum","SCHEDULING_DETAILS","PoolAcl","NoContent","warning","hint","PoolAclPanel","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","SchedulingExpandedPoolsUpdater","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","showSettings","show","SCHEDULING_ALLOWED_ROOT_TABS","titleDict","aclTab","ACL","extraTabs","getSchedulingExtraTabs","extraOptions","extraRoutes","component","urlTemplate","tabSettings","external","formatByParams","ytCluster","ytPool","ytPoolTree","route","Route","makeTabProps","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","Switch","Redirect","from","to","pathname","headingBlock","SchedulingResources","getResources","makeError","PoolEditorDialog","editItem","getSchedulingEditItem","_useSelector","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","_useMemo","useMemo","getInitialValues","_useMemo2","initialFormValues","editCloseHandler","editConfirmHandler","_asyncToGenerator","_regeneratorRuntime","_callee","form","_form$getState","_context","prev","next","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","stop","_x","user","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","visible","warningField","extras","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","summary","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","YTDFDialog","onClose","headerProps","onAdd","required","tooltip","hideFilter","min","MIN_VALUE","hidePrettyValue","String","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","updateFn","useUpdater","Content","SchedulingMemo","SchedulingWithRum","_useSelector2","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","autoHiding","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","hasCloseButton","keys_","message","propsButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","currentTree","getPoolTrees","treeItems","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","successContent","updateAcl","idmKind","responsible","waitWhilePoolIsReady","CREATE_POOL_DIALOG_TREE_CREATE_FAILURE","_createAdminReqTicket","createAdminReqTicketUrl","createUrl","CHECK_REDINESS_TIMEOUT","MAX_POOL_REDINESS_TIMEOUT","TIMEOUT_ERROR","startedTime","exists","allowRoot","uiSettings","schedulingDenyRootAsParent","CreatePoolButton","changeVisibility","handleShow","handleClose","CreatePoolDialog","treeStored","setTree","handleTreeChange","newTree","getCreatePoolDialogError","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","sortedFlatTree","getCreatePoolDialogFlatTreeItems","validateForm","sortedIndexOf_","isApplyDisabled","errors","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","urlParams","SchedulingFavourites","SchedulingPhysicalTree","EditableSchedulingBreadcrumbs","renderTopRowExtraControlsForPool","itemClassName","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","shiftText","hoverContent","SchedulingBreadcrumbs","bcItems","restItems","renderItem","isCurrent","BreadcrumbLink","Breadcrumbs","lastDisplayedItemsCount","firstDisplayedItemsCount","renderItemContent","renderRootContent","renderEmpty","_","some_","_v","endsWith","calcRootPathname","makeRoutedURL","toggleEdit","edit","Select","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","useRumMeasureStart","subPage","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","Set","getChaosBundlesFiltered","nameFilter","accountFilter","tagNodeFilter","predicates","lowerNameFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","concatByAnd","getChaosBundlesSorted","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","uniq_","sort","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","href","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","list","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","compact_","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","creation_time","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","getSettingsData","userColumns","has","getChytListColumns","checked","getChytListTableSortState","getChytListTableSortStateByName","reduce","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","makeGetSetting","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getFavouritePaths","getClusterNS","getLastVisitedPaths","getPopularPaths","isCurrentPathInFavourites","getPath","favourites","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","getSetting","SettingName","LOCAL","FAVOURITES","sortBy_","settingGetter","LAST_VISITED","lastVisited","entry","count","tabletCellBundleDashboardUrl","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes","BreadcrumbsButton","more","BreadcrumbsItem","isPrevCurrent","itemTitle","addComponentKeysets","en","BreadcrumbsMore","popupStyle","popupPlacement","staircase","renderSwitcher","i18n","BreadcrumbsSeparator","renderItemDivider","LastDisplayedItemsCount","FirstDisplayedItemsCount","prepareInitialState","calculated","rootItem","visibleItems","hiddenItems","allItems","getDerivedStateFromProps","constructor","super","handleResize","recalculate","resizeObserver","ResizeObserver","container","componentDidMount","_a","observe","componentDidUpdate","prevProps","componentWillUnmount","disconnect","qa","ref","renderRootItem","renderMoreItem","renderVisibleItems","availableWidth","offsetWidth","dividers","querySelectorAll","itemsWidths","elem","scrollWidth","GAP_WIDTH","dividersWidths","totalWidth","widths","isLastItem","isItemBeforeLast","Two","visibleItemsStartIndex"],"sourceRoot":""}