@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.
- package/dist/public/build/assets-manifest.json +69 -69
- package/dist/public/build/css/7540.b48a154e.chunk.css +2 -0
- package/dist/public/build/css/7540.b48a154e.chunk.css.map +1 -0
- package/dist/public/build/css/{cluster-page-wrapper.0b62c90f.chunk.css → cluster-page-wrapper.0b6a786f.chunk.css} +2 -2
- package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +1 -0
- package/dist/public/build/css/{main.a99b07c5.css → main.070fd473.css} +2 -2
- package/dist/public/build/css/main.070fd473.css.map +1 -0
- package/dist/public/build/css/navigation.0a141599.chunk.css +2 -0
- package/dist/public/build/css/navigation.0a141599.chunk.css.map +1 -0
- package/dist/public/build/css/{system.17b114fc.chunk.css → system.221e5d53.chunk.css} +2 -2
- package/dist/public/build/css/{system.17b114fc.chunk.css.map → system.221e5d53.chunk.css.map} +1 -1
- package/dist/public/build/js/1110.a7382226.chunk.js +2 -0
- package/dist/public/build/js/1110.a7382226.chunk.js.map +1 -0
- package/dist/public/build/js/1394.011da2d1.chunk.js +2 -0
- package/dist/public/build/js/1394.011da2d1.chunk.js.map +1 -0
- package/dist/public/build/js/2447.35b478a9.chunk.js +2 -0
- package/dist/public/build/js/2447.35b478a9.chunk.js.map +1 -0
- package/dist/public/build/js/4364.aa1ab5fb.chunk.js +2 -0
- package/dist/public/build/js/4364.aa1ab5fb.chunk.js.map +1 -0
- package/dist/public/build/js/5451.50d8f2b2.chunk.js +3 -0
- package/dist/public/build/js/5451.50d8f2b2.chunk.js.LICENSE.txt +5 -0
- package/dist/public/build/js/5451.50d8f2b2.chunk.js.map +1 -0
- package/dist/public/build/js/5770.0d8fda01.chunk.js +2 -0
- package/dist/public/build/js/5770.0d8fda01.chunk.js.map +1 -0
- package/dist/public/build/js/{7077.b11a392b.chunk.js → 7077.7dab612c.chunk.js} +2 -2
- package/dist/public/build/js/{7077.b11a392b.chunk.js.map → 7077.7dab612c.chunk.js.map} +1 -1
- package/dist/public/build/js/7959.e0d47dec.chunk.js +2 -0
- package/dist/public/build/js/7959.e0d47dec.chunk.js.map +1 -0
- package/dist/public/build/js/{8460.b18e700b.chunk.js → 8460.2b27e2b7.chunk.js} +2 -2
- package/dist/public/build/js/{8460.b18e700b.chunk.js.map → 8460.2b27e2b7.chunk.js.map} +1 -1
- package/dist/public/build/js/{8778.8d098a1f.chunk.js → 8778.d97acdd6.chunk.js} +2 -2
- package/dist/public/build/js/8778.d97acdd6.chunk.js.map +1 -0
- package/dist/public/build/js/accounts.badfc837.chunk.js +2 -0
- package/dist/public/build/js/{accounts.63268a11.chunk.js.map → accounts.badfc837.chunk.js.map} +1 -1
- package/dist/public/build/js/{acl.aa7a9df7.chunk.js → acl.cd1fe761.chunk.js} +2 -2
- package/dist/public/build/js/acl.cd1fe761.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-menu.bf57160d.chunk.js +2 -0
- package/dist/public/build/js/cluster-menu.bf57160d.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-page-wrapper.c9e6c27c.chunk.js +2 -0
- package/dist/public/build/js/cluster-page-wrapper.c9e6c27c.chunk.js.map +1 -0
- package/dist/public/build/js/job.31c91355.chunk.js +2 -0
- package/dist/public/build/js/job.31c91355.chunk.js.map +1 -0
- package/dist/public/build/js/main.61fc9935.js +3 -0
- package/dist/public/build/js/main.61fc9935.js.map +1 -0
- package/dist/public/build/js/{manage-tokens.c996037c.chunk.js → manage-tokens.e9106aad.chunk.js} +2 -2
- package/dist/public/build/js/{manage-tokens.c996037c.chunk.js.map → manage-tokens.e9106aad.chunk.js.map} +1 -1
- package/dist/public/build/js/navigation.22bd542f.chunk.js +2 -0
- package/dist/public/build/js/navigation.22bd542f.chunk.js.map +1 -0
- package/dist/public/build/js/{odin.ddcd41de.chunk.js → odin.7eefabce.chunk.js} +2 -2
- package/dist/public/build/js/{odin.ddcd41de.chunk.js.map → odin.7eefabce.chunk.js.map} +1 -1
- package/dist/public/build/js/operations.3feb2deb.chunk.js +2 -0
- package/dist/public/build/js/operations.3feb2deb.chunk.js.map +1 -0
- package/dist/public/build/js/{query-results.99804b61.chunk.js → query-results.4c207fef.chunk.js} +2 -2
- package/dist/public/build/js/{query-results.99804b61.chunk.js.map → query-results.4c207fef.chunk.js.map} +1 -1
- package/dist/public/build/js/query-tracker.badbc586.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.badbc586.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.8be0e5c6.js → runtime.f98c3e55.js} +2 -2
- package/dist/public/build/js/{runtime.8be0e5c6.js.map → runtime.f98c3e55.js.map} +1 -1
- package/dist/public/build/js/scheduling.73b1257c.chunk.js +2 -0
- package/dist/public/build/js/scheduling.73b1257c.chunk.js.map +1 -0
- package/dist/public/build/js/{system.6843a1a3.chunk.js → system.25e9136a.chunk.js} +2 -2
- package/dist/public/build/js/system.25e9136a.chunk.js.map +1 -0
- package/dist/public/build/js/tablet.7401a5ec.chunk.js +2 -0
- package/dist/public/build/js/tablet.7401a5ec.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.6b4604c0.chunk.js → yt-df-dialog.69fc013a.chunk.js} +2 -2
- package/dist/public/build/js/{yt-df-dialog.6b4604c0.chunk.js.map → yt-df-dialog.69fc013a.chunk.js.map} +1 -1
- package/dist/public/build/manifest.json +64 -64
- package/dist/shared/ui-settings.d.ts +0 -1
- package/package.json +3 -3
- package/dist/public/build/css/7540.56f97199.chunk.css +0 -2
- package/dist/public/build/css/7540.56f97199.chunk.css.map +0 -1
- package/dist/public/build/css/cluster-page-wrapper.0b62c90f.chunk.css.map +0 -1
- package/dist/public/build/css/main.a99b07c5.css.map +0 -1
- package/dist/public/build/css/navigation.adb62abd.chunk.css +0 -2
- package/dist/public/build/css/navigation.adb62abd.chunk.css.map +0 -1
- package/dist/public/build/js/1110.d02f593c.chunk.js +0 -2
- package/dist/public/build/js/1110.d02f593c.chunk.js.map +0 -1
- package/dist/public/build/js/1394.f5423b9c.chunk.js +0 -2
- package/dist/public/build/js/1394.f5423b9c.chunk.js.map +0 -1
- package/dist/public/build/js/2447.d0a0e8ad.chunk.js +0 -2
- package/dist/public/build/js/2447.d0a0e8ad.chunk.js.map +0 -1
- package/dist/public/build/js/4364.277e1cfa.chunk.js +0 -2
- package/dist/public/build/js/4364.277e1cfa.chunk.js.map +0 -1
- package/dist/public/build/js/5770.c5499ce7.chunk.js +0 -2
- package/dist/public/build/js/5770.c5499ce7.chunk.js.map +0 -1
- package/dist/public/build/js/7891.2ce56be7.chunk.js +0 -3
- package/dist/public/build/js/7891.2ce56be7.chunk.js.LICENSE.txt +0 -14
- package/dist/public/build/js/7891.2ce56be7.chunk.js.map +0 -1
- package/dist/public/build/js/7959.eb292cbd.chunk.js +0 -2
- package/dist/public/build/js/7959.eb292cbd.chunk.js.map +0 -1
- package/dist/public/build/js/8778.8d098a1f.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.63268a11.chunk.js +0 -2
- package/dist/public/build/js/acl.aa7a9df7.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-menu.e484a2ca.chunk.js +0 -2
- package/dist/public/build/js/cluster-menu.e484a2ca.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.8c8aa8a1.chunk.js +0 -2
- package/dist/public/build/js/cluster-page-wrapper.8c8aa8a1.chunk.js.map +0 -1
- package/dist/public/build/js/job.5ed7166b.chunk.js +0 -2
- package/dist/public/build/js/job.5ed7166b.chunk.js.map +0 -1
- package/dist/public/build/js/main.00809a7d.js +0 -3
- package/dist/public/build/js/main.00809a7d.js.map +0 -1
- package/dist/public/build/js/navigation.c3108a21.chunk.js +0 -2
- package/dist/public/build/js/navigation.c3108a21.chunk.js.map +0 -1
- package/dist/public/build/js/operations.b353981f.chunk.js +0 -2
- package/dist/public/build/js/operations.b353981f.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.fba0ec95.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.fba0ec95.chunk.js.map +0 -1
- package/dist/public/build/js/scheduling.115669fe.chunk.js +0 -2
- package/dist/public/build/js/scheduling.115669fe.chunk.js.map +0 -1
- package/dist/public/build/js/system.6843a1a3.chunk.js.map +0 -1
- package/dist/public/build/js/tablet.40ad9054.chunk.js +0 -2
- package/dist/public/build/js/tablet.40ad9054.chunk.js.map +0 -1
- /package/dist/public/build/js/{main.00809a7d.js.LICENSE.txt → main.61fc9935.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"js/scheduling.115669fe.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 PropTypes from 'prop-types';\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 propTypes = {\n name: PropTypes.node.isRequired,\n collapsed: PropTypes.bool,\n onToggle: PropTypes.func.isRequired,\n size: PropTypes.oneOf(['s', 'ss', 'xs', 'm', 'l', 'xl', 'ns']),\n children: PropTypes.node,\n overview: PropTypes.node,\n className: PropTypes.string,\n };\n\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 {name, children, size, overview, className, collapsed, marginDirection} = 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')}\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\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 Icon from '../../components/Icon/Icon';\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 <span className={block('icon')}>\n <Icon awesome={icon} face=\"solid\" />\n </span>\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 \n {Overview.renderEditButton(item, handleEditClick)}\n \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 \n {Overview.renderEditButton(item, handleEditClick)}\n \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","_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","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","format","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","Tooltip","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":""}
|