@ytsaurus/ui 3.6.0 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/public/build/assets-manifest.json +37 -37
  2. package/dist/public/build/css/{main.89a1698b.css → main.eac511a5.css} +2 -2
  3. package/dist/public/build/css/main.eac511a5.css.map +1 -0
  4. package/dist/public/build/js/{1394.45bb669a.chunk.js → 1394.9f9c9f9a.chunk.js} +2 -2
  5. package/dist/public/build/js/{1394.45bb669a.chunk.js.map → 1394.9f9c9f9a.chunk.js.map} +1 -1
  6. package/dist/public/build/js/4804.2d9406dc.chunk.js +3 -0
  7. package/dist/public/build/js/4804.2d9406dc.chunk.js.map +1 -0
  8. package/dist/public/build/js/{accounts-monitoring-prometheus.262cacd8.chunk.js → accounts-monitoring-prometheus.38e8206a.chunk.js} +2 -2
  9. package/dist/public/build/js/accounts-monitoring-prometheus.38e8206a.chunk.js.map +1 -0
  10. package/dist/public/build/js/acl.00a69fe0.chunk.js +2 -0
  11. package/dist/public/build/js/acl.00a69fe0.chunk.js.map +1 -0
  12. package/dist/public/build/js/{bundle-monitoring-prometheus.d49a9a1a.chunk.js → bundle-monitoring-prometheus.dc8084bb.chunk.js} +2 -2
  13. package/dist/public/build/js/bundle-monitoring-prometheus.dc8084bb.chunk.js.map +1 -0
  14. package/dist/public/build/js/components.c4fc1d81.chunk.js +2 -0
  15. package/dist/public/build/js/components.c4fc1d81.chunk.js.map +1 -0
  16. package/dist/public/build/js/main.a04f2740.js +3 -0
  17. package/dist/public/build/js/{main.3e360b19.js.map → main.a04f2740.js.map} +1 -1
  18. package/dist/public/build/js/navigation.cd66d63f.chunk.js +2 -0
  19. package/dist/public/build/js/{navigation.8d91701a.chunk.js.map → navigation.cd66d63f.chunk.js.map} +1 -1
  20. package/dist/public/build/js/{prometheus-dashboard.3c9f3a99.chunk.js → prometheus-dashboard.d3814a09.chunk.js} +2 -2
  21. package/dist/public/build/js/prometheus-dashboard.d3814a09.chunk.js.map +1 -0
  22. package/dist/public/build/js/query-navigation.f7f5a1b5.chunk.js +2 -0
  23. package/dist/public/build/js/{query-navigation.f52623cc.chunk.js.map → query-navigation.f7f5a1b5.chunk.js.map} +1 -1
  24. package/dist/public/build/js/{runtime.2344fc6d.js → runtime.3af0a91e.js} +2 -2
  25. package/dist/public/build/js/{runtime.2344fc6d.js.map → runtime.3af0a91e.js.map} +1 -1
  26. package/dist/public/build/js/scheduling.4f518a8a.chunk.js +2 -0
  27. package/dist/public/build/js/scheduling.4f518a8a.chunk.js.map +1 -0
  28. package/dist/public/build/js/{system-monitoring-prometheus.b6ce8ed8.chunk.js → system-monitoring-prometheus.4004494c.chunk.js} +2 -2
  29. package/dist/public/build/js/system-monitoring-prometheus.4004494c.chunk.js.map +1 -0
  30. package/dist/public/build/js/{system.08fe4f55.chunk.js → system.2e84d486.chunk.js} +2 -2
  31. package/dist/public/build/js/{system.08fe4f55.chunk.js.map → system.2e84d486.chunk.js.map} +1 -1
  32. package/dist/public/build/js/yt-monaco-editor.4ad443b3.chunk.js +2 -0
  33. package/dist/public/build/js/{yt-monaco-editor.ba9a69f6.chunk.js.map → yt-monaco-editor.4ad443b3.chunk.js.map} +1 -1
  34. package/dist/public/build/manifest.json +32 -32
  35. package/package.json +2 -2
  36. package/dist/public/build/css/main.89a1698b.css.map +0 -1
  37. package/dist/public/build/js/4804.05d44971.chunk.js +0 -3
  38. package/dist/public/build/js/4804.05d44971.chunk.js.map +0 -1
  39. package/dist/public/build/js/accounts-monitoring-prometheus.262cacd8.chunk.js.map +0 -1
  40. package/dist/public/build/js/acl.91a762f3.chunk.js +0 -2
  41. package/dist/public/build/js/acl.91a762f3.chunk.js.map +0 -1
  42. package/dist/public/build/js/bundle-monitoring-prometheus.d49a9a1a.chunk.js.map +0 -1
  43. package/dist/public/build/js/components.aa32cd54.chunk.js +0 -2
  44. package/dist/public/build/js/components.aa32cd54.chunk.js.map +0 -1
  45. package/dist/public/build/js/main.3e360b19.js +0 -3
  46. package/dist/public/build/js/navigation.8d91701a.chunk.js +0 -2
  47. package/dist/public/build/js/prometheus-dashboard.3c9f3a99.chunk.js.map +0 -1
  48. package/dist/public/build/js/query-navigation.f52623cc.chunk.js +0 -2
  49. package/dist/public/build/js/scheduling.6f68a262.chunk.js +0 -2
  50. package/dist/public/build/js/scheduling.6f68a262.chunk.js.map +0 -1
  51. package/dist/public/build/js/system-monitoring-prometheus.b6ce8ed8.chunk.js.map +0 -1
  52. package/dist/public/build/js/yt-monaco-editor.ba9a69f6.chunk.js +0 -2
  53. /package/dist/public/build/js/{4804.05d44971.chunk.js.LICENSE.txt → 4804.2d9406dc.chunk.js.LICENSE.txt} +0 -0
  54. /package/dist/public/build/js/{main.3e360b19.js.LICENSE.txt → main.a04f2740.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/scheduling.6f68a262.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Gear.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/create-pool-dialog.ts","webpack://@ytsaurus/ui/./src/ui/components/NumberInput/NumberInput.tsx","webpack://@ytsaurus/ui/./src/ui/components/FormatNumber/FormatNumber.tsx","webpack://@ytsaurus/ui/./src/ui/utils/parse/parse-bytes.ts","webpack://@ytsaurus/ui/./src/ui/utils/cypress-attributes.ts","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/components/EditableBreadcrumbs/EditableBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/DataTableGravity/ExpandableCell.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChargeLevel/ChargeLevel.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.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.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/overview-columns.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/NameCell.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/PoolAbc.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/SchedulingTable.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/settings/use-settings-column-visibility.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingToolbar.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAttributes/PoolAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","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/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Switch/Switch.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CaretUp.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CaretDown.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CaretsExpandVertical.js","webpack://@ytsaurus/ui/./src/ui/components/DataTableGravity/YTSortIndicator.tsx","webpack://@ytsaurus/ui/./src/ui/components/DataTableGravity/DataTableGravity.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-scroll-margin.ts","webpack://@ytsaurus/ui/./src/ui/components/TimeDuration/TimeDuration.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/constants.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressInnerText.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressStackItem.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/utils.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressWithStack.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressWithValue.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/types.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/Progress.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/settings/use-settings-column-sizes.ts","webpack://@ytsaurus/ui/./src/ui/components/Suggest/Suggest.tsx","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx"],"sourcesContent":["const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n size?: ButtonProps['size'];\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n size,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n size={size}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import {RootState} from '../reducers';\n\nexport function getExecuteBatchState(state: RootState) {\n return state.executeBatch;\n}\n\nexport const getApproversSubjectFilter = (state: RootState) => state.aclFilters.approversSubject;\nexport const getObjectSubjectFilter = (state: RootState) => state.aclFilters.objectSubject;\nexport const getObjectPermissionsFilter = (state: RootState) => state.aclFilters.objectPermissions;\nexport const getAclFilterColumns = (state: RootState) => state.aclFilters.columnsFilter;\nexport const getAclFilterColumnGroupName = (state: RootState) =>\n state.aclFilters.columnGroupNameFilter;\nexport const getAclFilterExpandedSubjects = (state: RootState) => state.aclFilters.expandedSubjects;\nexport const getAclCurrentTab = (state: RootState) => state.aclFilters.aclCurrentTab;\n","import * as React from 'react';\nconst Gear = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M7.199 2H8.8a.2.2 0 0 1 .2.2c0 1.808 1.958 2.939 3.524 2.034a.2.2 0 0 1 .271.073l.802 1.388a.2.2 0 0 1-.073.272c-1.566.904-1.566 3.164 0 4.069a.2.2 0 0 1 .073.271l-.802 1.388a.2.2 0 0 1-.271.073C10.958 10.863 9 11.993 9 13.8a.2.2 0 0 1-.199.2H7.2a.2.2 0 0 1-.2-.2c0-1.808-1.958-2.938-3.524-2.034a.2.2 0 0 1-.272-.073l-.8-1.388a.2.2 0 0 1 .072-.271c1.566-.905 1.566-3.165 0-4.07a.2.2 0 0 1-.073-.27l.801-1.389a.2.2 0 0 1 .272-.072C5.042 5.138 7 4.007 7 2.199c0-.11.089-.199.199-.199M5.5 2.2c0-.94.76-1.7 1.699-1.7H8.8c.94 0 1.7.76 1.7 1.7a.85.85 0 0 0 1.274.735 1.7 1.7 0 0 1 2.32.622l.802 1.388c.469.813.19 1.851-.622 2.32a.85.85 0 0 0 0 1.472 1.7 1.7 0 0 1 .622 2.32l-.802 1.388a1.7 1.7 0 0 1-2.32.622.85.85 0 0 0-1.274.735c0 .939-.76 1.7-1.699 1.7H7.2a1.7 1.7 0 0 1-1.699-1.7.85.85 0 0 0-1.274-.735 1.7 1.7 0 0 1-2.32-.622l-.802-1.388a1.7 1.7 0 0 1 .622-2.32.85.85 0 0 0 0-1.471 1.7 1.7 0 0 1-.622-2.32l.801-1.389a1.7 1.7 0 0 1 2.32-.622A.85.85 0 0 0 5.5 2.2m4 5.8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0\", clipRule: \"evenodd\" })));\nexport default Gear;\n","import forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../reducers';\nimport {createSelector} from 'reselect';\n\nexport const getCreatePoolDialogCurrentTree = (state: RootState) =>\n state.scheduling.createPoolDialog.currentTree;\nexport const getCreatePoolDialogTreeItems = (state: RootState) =>\n state.scheduling.createPoolDialog.treeItems;\nexport const getCreatePoolDialogError = (state: RootState) =>\n state.scheduling.createPoolDialog.error;\n\nexport const getCreatePoolDialogFlatTreeItems = createSelector(\n [getCreatePoolDialogTreeItems, getCreatePoolDialogCurrentTree],\n (tree, treeName) => {\n return {\n sortedFlatTree: collectTreeKeys([], tree).sort(),\n treeName,\n };\n },\n);\n\nfunction collectTreeKeys(\n dst: Array<string>,\n tree: ReturnType<typeof getCreatePoolDialogTreeItems>,\n): Array<string> {\n forEach_(tree, (value: typeof tree, key: string) => {\n dst.push(key);\n collectTreeKeys(dst, value);\n });\n return dst;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput, TextInputProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\n\nimport hammer from '../../common/hammer';\n\nimport {parseBytes} from '../../utils/parse/parse-bytes';\nimport {KeyCode} from '../../constants';\nimport './NumberInput.scss';\n\nconst block = cn('yt-number-input');\n\nexport function parseValue(rawValue: string, format: NumberInputProps['format']) {\n if (rawValue === '') {\n return undefined;\n }\n const skipSpaces = rawValue.replace(/\\s/g, '');\n return format === 'Bytes' ? parseBytes(skipSpaces) : Number(skipSpaces);\n}\n\nexport function formatValue(\n value: NumberInputProps['value'],\n format?: NumberInputProps['format'],\n settings?: object,\n) {\n if (value === undefined) {\n return '';\n }\n\n const res =\n format === 'Bytes'\n ? hammer.format['Bytes'](value, settings)\n : hammer.format['Number'](value, settings);\n return res === hammer.format.NO_VALUE ? '' : res;\n}\n\nfunction toRawValue(value: NumberInputProps['value']) {\n return value === undefined ? '' : value;\n}\n\nexport interface NumberInputWithErrorProps\n extends Omit<TextInputProps, 'value' | 'onChange' | 'theme' | 'error' | 'defaultValue'> {\n className?: string;\n\n format?: 'Number' | 'Bytes'; // 'Number' by default\n\n formatFn?: (v: NumberInputProps['value']) => string;\n parseFn?: (v: string) => NumberInputWithErrorProps['value'];\n\n decimalPlaces?: number;\n value?: {\n value: number | undefined;\n error?: string;\n };\n\n showDefaultValue?: boolean;\n defaultValue?: number;\n defaultValueClassName?: string;\n\n onChange: (v: NumberInputWithErrorProps['value']) => void;\n onEnterKeyDown?: () => void;\n\n validator?: (v?: number) => string | undefined;\n min?: number;\n max?: number;\n integerOnly?: boolean;\n\n showHint?: boolean;\n\n hidePrettyValue?: boolean;\n preciseInitialRawValue?: boolean;\n\n bottomLineVisibility?: 'visible' | 'hidden' | 'focused';\n\n disabled?: boolean;\n}\n\ninterface State {\n parsedValue?: number;\n parsedError?: string;\n rawValue?: string;\n formattedValue?: string;\n focused?: boolean;\n}\n\nexport class NumberInputWithError extends React.Component<NumberInputWithErrorProps, State> {\n static defaultProps = {\n size: 'm',\n view: 'normal',\n hasClear: true,\n bottomLineVisibility: 'visible',\n };\n\n static getDerivedStateFromProps(\n props: NumberInputWithErrorProps,\n state: State,\n ): Partial<State> | null {\n const {value, format, preciseInitialRawValue, decimalPlaces, formatFn} = props;\n if (state.rawValue === undefined) {\n const formatted = formatFn\n ? formatFn(value?.value)\n : formatValue(value?.value, format, {\n digits: decimalPlaces,\n });\n return {\n parsedValue: value?.value,\n parsedError: NumberInputWithError.errorFromValue(value, props),\n rawValue: preciseInitialRawValue ? toRawValue(value?.value) : formatted,\n formattedValue: formatted,\n };\n }\n\n return null;\n }\n\n static errorFromValue(v: NumberInputWithErrorProps['value'], props: NumberInputWithErrorProps) {\n const {validator = () => undefined, min, max, integerOnly} = props;\n const {value, error} = v || {};\n\n if (error) {\n return error;\n }\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n try {\n if (isNaN(value)) {\n return 'wrong format';\n }\n\n const error = validator(value);\n if (error) {\n return error;\n }\n } catch (error) {\n return String(error);\n }\n\n if (integerOnly && value % 1 !== 0) {\n return `The value must be an integer`;\n }\n\n if (min !== undefined && value < min) {\n return `The value must be \\u2265 ${min}`;\n }\n\n if (max !== undefined && value > max) {\n return `The value must be \\u2264 ${max}`;\n }\n\n return undefined;\n }\n\n state: State = {parsedValue: NaN};\n\n // eslint-disable-next-line react/sort-comp\n parseValue(rawValue: string): NumberInputWithErrorProps['value'] {\n if (this.props.parseFn) {\n return this.props.parseFn(rawValue);\n }\n return {value: parseValue(rawValue, this.props.format)};\n }\n\n format(value: NumberInputProps['value']) {\n const {format, decimalPlaces, formatFn} = this.props;\n if (formatFn) {\n return formatFn(value);\n }\n return formatValue(value, format, {digits: decimalPlaces});\n }\n\n onChange = (rawValue: string) => {\n const parsedValue = this.parseValue(rawValue);\n const error = NumberInputWithError.errorFromValue(parsedValue, this.props);\n const formattedValue = this.format(parsedValue?.value);\n this.setState({\n parsedValue: parsedValue?.value,\n parsedError: error,\n rawValue,\n formattedValue,\n });\n\n const {onChange} = this.props;\n onChange({value: parsedValue?.value, error});\n };\n\n onBlur = () => {\n this.setState({focused: false});\n };\n\n onFocus = () => {\n this.setState({focused: true});\n };\n\n getRestProps() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {value, onChange, min, max, validator, format, defaultValue, ...rest} = this.props;\n return rest;\n }\n\n onKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === KeyCode.ENTER && this.props.onEnterKeyDown) {\n this.props.onEnterKeyDown();\n }\n };\n\n renderMinMaxHint() {\n const {min, max, showHint, size} = this.props;\n const showMin = !isNaN(min!);\n const showMax = !isNaN(max!);\n if (!showHint || (!showMin && !showMax)) {\n return null;\n }\n return (\n <div className={block('hint', {size})}>\n {showMin && (\n <Tooltip content={String(min)} placement={'bottom'}>\n min: <b>{this.format(min)}</b>\n </Tooltip>\n )}\n {showMin && <> &nbsp; </>}\n {showMax && (\n <Tooltip content={String(max)} placement={'bottom'}>\n max: <b>{this.format(max)}</b>\n </Tooltip>\n )}\n </div>\n );\n }\n\n renderPrettyValue() {\n const {size, hidePrettyValue} = this.props;\n const {formattedValue} = this.state;\n\n if (hidePrettyValue) {\n return null;\n }\n\n return <div className={block('pretty-value', {size})}>{formattedValue}&nbsp;</div>;\n }\n\n renderDefaultValue() {\n const {defaultValue, defaultValueClassName} = this.props;\n\n return (\n <TextInput\n disabled\n className={defaultValueClassName}\n value={this.format(defaultValue)}\n pin={'clear-round'}\n />\n );\n }\n\n isBottomLineVisible() {\n const {bottomLineVisibility} = this.props;\n const {focused} = this.state;\n\n return (\n bottomLineVisibility === 'visible' || (focused && bottomLineVisibility === 'focused')\n );\n }\n\n render() {\n const {\n value: propsValue,\n className,\n showHint,\n hidePrettyValue,\n showDefaultValue,\n } = this.props;\n const {parsedError, rawValue, formattedValue, focused} = this.state;\n const rest = this.getRestProps();\n const {size, view, hasClear} = rest;\n\n const {error} = propsValue ?? {};\n\n const err = error || parsedError;\n\n const text = focused ? rawValue : formattedValue;\n\n return (\n <div className={block(null, className)}>\n <div className={block('top')}>\n <TextInput\n {...rest}\n error={err as any}\n autoComplete={false}\n onUpdate={this.onChange}\n onKeyDown={this.onKeyDown}\n hasClear={hasClear}\n value={text}\n size={size}\n view={view}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n pin={showDefaultValue ? 'round-brick' : undefined}\n />\n {showDefaultValue && this.renderDefaultValue()}\n </div>\n {!err && this.isBottomLineVisible() && (\n <React.Fragment>\n {showHint && (!focused || hidePrettyValue)\n ? this.renderMinMaxHint()\n : this.renderPrettyValue()}\n </React.Fragment>\n )}\n </div>\n );\n }\n}\n\nexport interface NumberInputProps extends Omit<NumberInputWithErrorProps, 'value' | 'onChange'> {\n value: number | undefined;\n onChange: (value: NumberInputProps['value']) => void;\n\n error?: string;\n}\n\nexport default class NumberInput extends React.Component<NumberInputProps> {\n static format(\n value: NumberInputProps['value'],\n format?: NumberInputWithErrorProps['format'],\n settings?: object,\n ) {\n return formatValue(value, format, settings);\n }\n\n render() {\n const {\n value,\n error,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange,\n ...rest\n } = this.props;\n\n return <NumberInputWithError {...rest} onChange={this.onChange} value={{value, error}} />;\n }\n\n onChange: NumberInputWithErrorProps['onChange'] = (v) => {\n this.props.onChange(v?.value);\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport format from '../../common/hammer/format';\n\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport {YTText} from '../../components/Text/Text';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {parseBytes} from '../../utils/parse/parse-bytes';\n\nconst block = cn('yt-format-number');\n\nexport type FormatNumberProps = FormatSettings & {\n className?: string;\n\n value?: number;\n tooltip?: string;\n\n hideApproximateChar?: boolean;\n\n ellipsis?: boolean;\n};\n\nexport type FormatSettings =\n | {\n type: 'Number';\n settings?: {digits?: number; digitsOnlyForFloat?: boolean};\n }\n | {type: 'NumberWithSuffix'; settings?: {digits?: number}}\n | {\n type: 'NumberSmart';\n settings?: {significantDigits?: number};\n }\n | {\n type: 'Bytes' | 'BytesPerSecond';\n settings?: {digits?: number};\n };\n\nexport function FormatNumber({className, ellipsis, tooltip, ...rest}: FormatNumberProps) {\n const {content, title, prefix} = getFormattedValue(rest);\n\n const tooltipContent = tooltip ? <YTText color=\"secondary\">{tooltip}</YTText> : null;\n\n return (\n <Tooltip\n className={block(null, className)}\n ellipsis={ellipsis}\n content={\n <div onClick={(e) => e.stopPropagation()}>\n {tooltipContent} <span>{title} </span>\n <ClipboardButton view=\"clear\" text={title} inlineMargins />\n </div>\n }\n >\n {prefix}\n {content}\n </Tooltip>\n );\n}\n\nexport const APROXIMATEDLY_EQUAL_TO = '\\u2248';\n\nfunction getFormattedValue({value, hideApproximateChar, ...params}: FormatNumberProps): {\n content: string;\n title?: string;\n prefix?: string;\n} {\n if (isNaN(value!)) {\n return {content: format.NO_VALUE};\n }\n\n const content: string = format[params.type](value, params.settings);\n const fullValue = String(value);\n\n const parsed =\n params.type === 'Bytes' ? parseBytes(content) : Number(content.replaceAll(' ', ''));\n\n return {\n content,\n title: fullValue,\n prefix: !hideApproximateChar && value !== parsed ? APROXIMATEDLY_EQUAL_TO : undefined,\n };\n}\n","import findIndex_ from 'lodash/findIndex';\n\nexport function parseBytes(input: string): number {\n const names = ['B', 'K', 'M', 'G', 'T', 'P', 'E'];\n const formatRegex = new RegExp('^((\\\\d*[.])?\\\\d+)( *[' + names.join('') + '])(iB)?(/s)?$', 'i');\n\n if (formatRegex.test(input)) {\n const match = input.match(formatRegex)!;\n const value = match[1];\n const dimension = match[3].trim();\n const dimensionIndex = findIndex_(\n names,\n (name) => name.toUpperCase() === dimension.toUpperCase(),\n );\n\n return Math.floor(Number(value) * Math.pow(2, 10 * dimensionIndex));\n } else {\n return Math.floor(Number(input));\n }\n}\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport forEach_ from 'lodash/forEach';\nimport isEqual_ from 'lodash/isEqual';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {SELECT_EMPTY_VALUE} from '../constants/navigation/modals/create-table';\nimport {SelectWithSubItemsProps} from '../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {wrapBatchPromise} from './utils';\nimport {YTApiId, ytApiV3Id} from '../rum/rum-wrap-api';\nimport {BatchSubRequest, GetParams} from '../../shared/yt-types';\nimport {ValueOf} from '../../@types/types';\n\nexport interface WithAttrs<T> {\n $attributes: T;\n}\n\nexport const compressionExtras: Pick<SelectWithSubItemsProps, 'labels' | 'items' | 'subItemsMap'> =\n {\n labels: ['codec:', 'level:'],\n items: [\n ...[\n 'none',\n 'snappy',\n 'zlib_',\n 'lz4',\n 'lz4_high_compression',\n 'quick_lz',\n 'zstd_',\n 'brotli_',\n 'lzma_',\n 'bzip2_',\n ].map((value) => ({value, content: value})),\n ],\n subItemsMap: {\n zlib_: genComperessionLevelItems(1, 9),\n zstd_: genComperessionLevelItems(1, 21),\n brotli_: genComperessionLevelItems(1, 11),\n lzma_: genComperessionLevelItems(0, 9),\n bzip2_: genComperessionLevelItems(1, 9),\n },\n };\n\nfunction genComperessionLevelItems(from: number, to: number) {\n const res = [];\n for (let i = from; i <= to; ++i) {\n res.push({value: String(i), content: String(i)});\n }\n return res;\n}\n\nexport function compressionCodecValueFromString(value: string) {\n if (!value) {\n return [SELECT_EMPTY_VALUE];\n }\n\n for (const k in compressionExtras.subItemsMap) {\n if (value.startsWith(k)) {\n return [k, value.substr(k.length)];\n }\n }\n return [value];\n}\n\nexport function compressionCodecValueToString(value: Array<string>) {\n if (isEqual_(value, [SELECT_EMPTY_VALUE])) {\n return '';\n }\n return value?.join('');\n}\n\ntype StorageOptionsType = 'replication' | 'erasure';\n\nexport const StorageOptions = {\n REPLICATION: 'replication' as StorageOptionsType,\n ERASURE: 'erasure' as StorageOptionsType,\n};\n\nexport const ERASURE_CODECS = [\n {value: 'lrc_12_2_2', title: 'lrc_12_2_2 (recommended)'},\n {value: 'reed_solomon_6_3', title: 'reed_solomon_6_3'},\n];\n\nexport function storageOptionFromErasureCodec(codec: string) {\n return !codec || codec === 'none' ? StorageOptions.REPLICATION : StorageOptions.ERASURE;\n}\n\nexport function normalizeErasureCodec(erasureCodec: string) {\n return !erasureCodec || erasureCodec === 'none' ? ERASURE_CODECS[0].value : erasureCodec;\n}\n\nexport function erasureCodecFromStorageOption(type?: StorageOptionsType, erasureCodec?: string) {\n if (type === StorageOptions.REPLICATION) {\n return 'none';\n }\n return erasureCodec || ERASURE_CODECS[0].value;\n}\n\nexport type InMemoryModeType = ValueOf<typeof InMemoryMode>;\n\nexport const InMemoryMode = {\n NONE: 'none',\n COMPRESSED: 'compressed',\n UNCOMPRESSED: 'uncompressed',\n} as const;\n\nexport function makeUiMarker(ui_marker: string) {\n return {ui_marker};\n}\n\nexport function prepareSetCommandForBatch(path: string, value: any, additionalParameters?: object) {\n if (value === undefined || value === null) {\n return {\n command: 'remove' as const,\n parameters: {\n path,\n ...additionalParameters,\n },\n };\n }\n\n return {\n command: 'set' as const,\n parameters: {\n path,\n ...additionalParameters,\n force: true,\n },\n input: value,\n };\n}\n\nexport const CypressNodeTypes = {\n REPLICATED_TABLE: 'replicated_table',\n REPLICATION_LOG_TABLE: 'replication_log_table',\n CHAOS_REPLICATED_TABLE: 'chaos_replicated_table',\n MAP_NODE: 'map_node',\n TABLE: 'table',\n // TODO: add more types\n};\n\nexport async function createParentsBeforeSet(nodePath: string, attributesToSet: Array<string>) {\n if (!attributesToSet.length) {\n return Promise.resolve();\n }\n\n const parentPaths: Record<string, boolean> = {};\n forEach_(attributesToSet, (attr) => {\n const parents = attr.split('/');\n for (let i = 1; i < parents.length; ++i) {\n const key = parents.slice(0, i).join('/');\n if (key) {\n parentPaths[key] = true;\n }\n }\n });\n const toCreate = Object.keys(parentPaths).sort();\n\n for (const attr of toCreate) {\n const path = nodePath + '/@' + attr;\n await yt.v3.exists({path}).then((isCreated: boolean) => {\n if (!isCreated) {\n return yt.v3.set({path}, {});\n }\n });\n }\n}\n\nexport function updateNodeAttributes(\n nodePath: string,\n changes: Array<{attr: string; value: any}>,\n): Promise<unknown> {\n if (isEmpty_(changes)) {\n return Promise.resolve();\n }\n\n const requests: Array<BatchSubRequest> = [];\n\n const oneLevelDiffsParents: Array<string> = [];\n const oneLevelDiffs: Record<string, Record<string, unknown>> = {};\n forEach_(changes, ({attr, value}) => {\n const attrPath = attr.split('/');\n if (attrPath.length === 1) {\n const path = nodePath + '/@' + attrPath.join('/');\n requests.push(prepareSetCommandForBatch(path, value));\n } else {\n const [last] = attrPath.splice(attrPath.length - 1, 1);\n const parentPath = attrPath.join('/');\n oneLevelDiffsParents.push(parentPath);\n const path = nodePath + '/@' + parentPath;\n const diff = (oneLevelDiffs[path] = oneLevelDiffs[path] || {});\n diff[last] = value;\n }\n });\n\n return Promise.all([\n ...(requests.length\n ? [\n wrapBatchPromise(\n ytApiV3Id.executeBatch(YTApiId.updateNodeAttributes, {requests}),\n 'Failed to update node attributes',\n ),\n ]\n : []),\n createParentsBeforeSet(nodePath, oneLevelDiffsParents).then(() => {\n if (isEmpty_(oneLevelDiffs)) {\n return Promise.resolve([]);\n }\n\n const promises: Array<Promise<unknown>> = map_(oneLevelDiffs, async (diff, path) => {\n const p = updateAttributes(path, diff);\n await p;\n return p;\n });\n\n return Promise.all(promises);\n }),\n ]);\n}\n\nfunction updateAttributes(path: string, oneLevelDiff: Record<'string', unknown>) {\n if (isEmpty_(oneLevelDiff)) {\n return Promise.resolve();\n }\n\n const modifyGuarantee = (data: any = {}) => {\n const res = cloneDeep_(data);\n forEach_(oneLevelDiff, (value, key) => {\n if (value === undefined) {\n delete res[key];\n } else {\n res[key] = value;\n }\n });\n if (isEqual_(data, res)) {\n return Promise.resolve();\n }\n return yt.v3.set({path}, res);\n };\n\n return yt.v3.exists({path}).then((isExists: boolean) => {\n if (isExists) {\n return ytApiV3Id.get(YTApiId.updateAttributes, {path}).then(modifyGuarantee);\n }\n return modifyGuarantee({});\n });\n}\n\nexport function makeBatchSubRequest<T extends BatchSubRequest>(\n command: T['command'],\n parameters: T['parameters'],\n setup?: T['setup'],\n) {\n return {\n command,\n parameters,\n setup,\n } as BatchSubRequest;\n}\n\nexport function prepareAttributes(attributes: readonly string[]): GetParams['attributes'] {\n const [keys, paths] = partition_(attributes, (k) => -1 === k.indexOf('/'));\n\n if (!paths.length) {\n return keys;\n }\n\n return {keys, paths};\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","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;","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 React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Box, Breadcrumbs, BreadcrumbsProps} from '@gravity-ui/uikit';\n\nimport {EditableAsText, EditableAsTextProps} from '../EditableAsText/EditableAsText';\n\nimport './EditableBreadcrumbs.scss';\n\nconst block = cn('yt-editable-breadcrumbs');\n\ninterface Props extends BreadcrumbsProps, Omit<EditableAsTextProps, 'onChange'> {\n view?: 'top-row';\n onChange?: (value?: string) => void;\n children: React.ReactNode;\n beforeEditorContent?: React.ReactNode;\n afterEditorContent?: React.ReactNode;\n}\n\nexport function EditableBreadcrumbs(props: Props) {\n const {\n className,\n text,\n disableEdit,\n withControls,\n cancelOnClose,\n openOnClick,\n size,\n saveButtonView,\n cancelButtonView,\n renderEditor,\n onModeChange,\n children,\n beforeEditorContent,\n afterEditorContent,\n view,\n ...breadcrumbsProps\n } = props;\n\n return (\n <EditableAsText\n className={block(null, className)}\n text={text}\n onChange={() => {}}\n disableEdit={disableEdit}\n withControls={withControls}\n cancelOnClose={cancelOnClose}\n openOnClick={openOnClick}\n size={size}\n saveButtonView={saveButtonView}\n cancelButtonView={cancelButtonView}\n renderEditor={renderEditor}\n onModeChange={onModeChange}\n renderContent={(contentProps) => (\n <Box\n className={block(\n {view: view},\n `${block('breadcrumbs-container')} ${contentProps.className}`,\n )}\n >\n <Breadcrumbs\n {...breadcrumbsProps}\n showRoot\n endContent={\n <>\n {beforeEditorContent ? (\n <div style={{marginLeft: '8px'}}>{beforeEditorContent}</div>\n ) : null}\n {contentProps.renderEditButton()}\n {afterEditorContent ? (\n <div style={{marginRight: '8px'}}>{afterEditorContent}</div>\n ) : null}\n </>\n }\n >\n {children}\n </Breadcrumbs>\n </Box>\n )}\n >\n <></>\n </EditableAsText>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Flex} from '@gravity-ui/uikit';\n\nimport {ExpandButton} from '../../components/ExpandButton';\n\nimport './ExpandableCell.scss';\n\nconst block = cn('yt-expandable-cell');\n\ntype ExpandedCellProps = {\n level?: number;\n expanded?: boolean;\n onExpand?: (v: boolean) => void;\n\n children: React.ReactNode;\n};\n\nexport function ExpandableCell({level = 0, expanded, onExpand, children}: ExpandedCellProps) {\n return (\n <Flex\n alignItems=\"center\"\n className={block({child: level > 0})}\n overflow=\"hidden\"\n shrink={1}\n grow={1}\n >\n <LeftPadding level={level} />\n <ExpandButton\n className={block('expand', {hidden: !onExpand})}\n expanded={Boolean(expanded)}\n toggleExpanded={() => onExpand?.(!expanded)}\n />\n {children}\n </Flex>\n );\n}\n\nfunction LeftPadding({level}: {level: number}) {\n return level > 0 ? (\n <Flex>\n {[...Array(level).keys()].map((key) => {\n return <div key={key} className={block('splitter')} />;\n })}\n </Flex>\n ) : null;\n}\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 {getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools) => {\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\nexport interface 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 getCurrentPoolGuarantees = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data) => {\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 strong: makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst: burst_guarantee_resources\n ? makeStaticConfigurationItem('Burst', burst_guarantee_resources)\n : undefined,\n flow: resource_flow ? makeStaticConfigurationItem('Flow', resource_flow) : undefined,\n };\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 {useDispatch, useSelector} from '../../../store/redux-hooks';\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 {getCurrentPoolTreeStaticConfiguration} 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/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport UIFactory from '../../../UIFactory';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\nfunction SchedulingStaticConfiguration() {\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [dispatch],\n );\n\n return isRoot ? (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolTreeStaticConfiguration />\n </div>\n </CollapsibleSection>\n ) : null;\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\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 cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport format from '../../common/hammer/format';\nimport {addProgressStackSpacers} from '../../utils/progress';\n\nimport './ChargeLevel.scss';\n\nconst block = cn('yt-charge-level');\n\nexport function ChargeLevel({className, value = 0}: {value?: number; className?: string}) {\n const {stack, effectiveValue} = React.useMemo(() => {\n const v = Math.max(0, Math.min(100, value));\n\n const res: Array<{value: number; theme: 'misc'}> = [];\n for (let sum = v; sum > 0; sum -= 10) {\n res.push({value: sum >= 10 ? 10 : sum, theme: 'misc'});\n }\n\n return {stack: res, effectiveValue: v};\n }, [value]);\n\n return (\n <Progress\n className={block(null, className)}\n stack={addProgressStackSpacers(stack, {\n spaceSize: 490 / 242,\n startSpace: true,\n endSpace: true,\n })}\n text={`${format.NumberSmart(effectiveValue)}%`}\n />\n );\n}\n","import {addI18Keysets} from '../../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:scheduling', {en, ru});\n","import cn from 'bem-cn-lite';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport format from '../../../../../common/hammer/format';\n\nimport {ChargeLevel} from '../../../../../components/ChargeLevel/ChargeLevel';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport {ColorCircle} from '../../../../../components/ColorCircle/ColorCircle';\nimport MetaTable, {MetaTableItem} from '../../../../../components/MetaTable/MetaTable';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {ROOT_POOL_NAME} from '../../../../../constants/scheduling';\nimport {\n getCurrentPool,\n getSchedulingTreeMainResource,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {\n PoolStaticConfigurationItem,\n getCurrentPoolGuarantees,\n} from '../../../../../store/selectors/scheduling/scheduling-ts';\nimport {addProgressStackSpacers} from '../../../../../utils/progress';\nimport {PoolData} from '../../../../../utils/scheduling/pool-child';\nimport {calcProgressProps} from '../../../../../utils/utils';\n\nimport i18n from './i18n';\nimport './SchedulingMeta.scss';\n\nconst block = cn('yt-scheduling-meta');\n\nexport function SchedulingMeta() {\n const pool = useSelector(getCurrentPool);\n\n const guarantees = useSelector(getCurrentPoolGuarantees);\n const mainResource = useSelector(getSchedulingTreeMainResource);\n\n // eslint-disable-next-line complexity\n const {items, subTitles} = React.useMemo(() => {\n const {mode, resources, integralType, flowCPU = 0, flowGPU = 0, weight} = pool ?? {};\n const {cpu, gpu, user_memory} = resources ?? {};\n\n const hasIntegralType =\n (integralType && integralType !== 'none') || flowCPU > 0 || flowGPU > 0;\n\n const guaranteeType = hasIntegralType ? format.ReadableField(integralType) : '';\n\n const burstUnit = formatUnits(guarantees.burst);\n const flowUnit = formatUnits(guarantees.flow);\n\n const res = {\n items: [\n [\n {key: i18n('mode'), value: format.ReadableField(mode)},\n {key: i18n('weight'), value: format.Number(weight)},\n {\n key: i18n('operations-running'),\n value: renderOperationsProgress(pool, 'running'),\n },\n {\n key: i18n('operations'),\n value: renderOperationsProgress(pool, 'total'),\n },\n ],\n [\n {\n key: 'GPU',\n value: renderProgress(gpu?.usage, gpu?.min),\n visible: Boolean(gpu?.usage || gpu?.min),\n },\n {key: 'CPU', value: renderProgress(cpu?.usage, cpu?.min)},\n {\n key: 'RAM',\n value: renderProgress(user_memory?.usage, user_memory?.min, 'Bytes'),\n },\n ],\n ] as Array<Array<MetaTableItem>>,\n subTitles: [i18n('general'), i18n('strong-guarantees')],\n };\n\n const type = mainResource === 'memory' ? 'user_memory' : (mainResource ?? 'cpu');\n const {accumulated_resource_volume, integral_pool_capacity} = pool?.attributes ?? {};\n const {[type]: capacity = NaN} = integral_pool_capacity ?? {};\n\n if (capacity >= 0 || burstUnit.length || flowUnit.length) {\n const {[type]: accumulated = NaN} = accumulated_resource_volume ?? {};\n\n const formatFn = (v: number) => {\n switch (type) {\n case 'user_memory':\n return format.Bytes(v) + '*hours';\n case 'cpu':\n case 'gpu':\n return format.NumberSmart(v) + ' CPU*hours';\n case 'user_slots':\n return format.NumberSmart(v) + ' Slot*hours';\n }\n };\n\n res.items.push([\n {key: i18n('guarantee-type'), value: guaranteeType},\n {\n key: i18n('capacity'),\n value: (\n <Tooltip\n content={\n <MetaTable\n items={[\n {\n key: 'accumulated_resource_volume',\n value: formatFn(accumulated / 3600),\n },\n {\n key: 'integral_pool_capacity',\n value: formatFn(capacity / 3600),\n },\n ]}\n />\n }\n >\n <ChargeLevel value={(accumulated / capacity) * 100} />\n </Tooltip>\n ),\n visible: capacity >= 0,\n },\n {key: i18n('burst'), value: burstUnit, visible: burstUnit.length > 0},\n {key: i18n('flow'), value: flowUnit, visible: flowUnit.length > 0},\n ]);\n res.subTitles.push(i18n('integral-guarantees'));\n }\n return res;\n }, [pool, guarantees, mainResource]);\n\n if (!pool?.name || pool?.name === ROOT_POOL_NAME) {\n return null;\n }\n\n return (\n <CollapsibleSection className={block()} name={pool.name}>\n <MetaTable items={items} subTitles={subTitles} />\n </CollapsibleSection>\n );\n}\n\nfunction renderProgress(usage?: number, limit?: number, format?: 'Bytes') {\n return (\n <Progress\n className={block('progress')}\n {...Object.assign(calcProgressProps(usage, limit, format))}\n theme=\"success\"\n />\n );\n}\n\nfunction renderOperationsProgress(\n pool: PoolData<'pool'> | undefined,\n progressType: 'running' | 'total',\n) {\n if (!pool) {\n return null;\n }\n\n const {\n operationCount: count = NaN,\n maxOperationCount: maxCount = NaN,\n runningOperationCount: running = NaN,\n maxRunningOperationCount: maxRunning = NaN,\n lightweightRunningOperationCount: lightweightRunning = NaN,\n } = pool;\n\n const pending = count - running - lightweightRunning;\n\n const runningStr = format.Number(running);\n const pendingStr = format.Number(pending);\n const maxRunningStr = format.Number(maxRunning);\n const maxCountStr = format.Number(maxCount);\n const lightweightStr = format.Number(lightweightRunning);\n\n const runningText = `${runningStr} / ${maxRunningStr}`;\n const totalText = `${runningStr} + ${lightweightStr} + ${pendingStr} / ${maxCountStr}`;\n\n return (\n <Tooltip\n className={block('progress', {operation: true})}\n content={\n <MetaTable\n items={\n progressType === 'running'\n ? [\n {\n key: i18n('operations-running-max'),\n value: maxRunningStr,\n },\n {\n key: 'operations-running',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--success-color)\"\n />\n {i18n('operations-running')}\n </span>\n ),\n value: runningStr,\n },\n ]\n : [\n {\n key: i18n('operation-count-max'),\n value: maxCountStr,\n },\n {\n key: 'operations-running',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--success-color)\"\n />\n {i18n('operations-running')}\n </span>\n ),\n value: runningStr,\n },\n {\n key: 'lightweigh',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--default-color)\"\n />\n {i18n('operations-running-lightweigh')}\n </span>\n ),\n value: lightweightStr,\n },\n {\n key: 'pending',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle marginRight color=\"var(--info-color)\" />\n {i18n('operations-pending')}\n </span>\n ),\n value: pendingStr,\n },\n ]\n }\n />\n }\n >\n {progressType === 'running' ? (\n <Progress\n className={block('progress-control', {left: true})}\n stack={addProgressStackSpacers([\n {\n value: (running / maxRunning) * 100,\n theme: 'success',\n },\n ])}\n text={runningText}\n />\n ) : (\n <Progress\n className={block('progress-control', {right: true})}\n stack={addProgressStackSpacers([\n {\n value: (running / maxCount) * 100,\n theme: 'success',\n },\n {\n value: (lightweightRunning / maxCount) * 100,\n theme: 'default',\n },\n {\n value: (pending / maxCount) * 100,\n theme: 'info',\n },\n ])}\n text={totalText}\n />\n )}\n </Tooltip>\n );\n}\n\nfunction formatUnits(item?: PoolStaticConfigurationItem) {\n const {gpu, cpu, memory} = item ?? {};\n return [\n gpu! > 0 && `${format.Number(gpu)} GPU`,\n cpu! > 0 && `${format.Number(cpu)} CPU`,\n memory! > 0 && `${format.Bytes(memory)} RAM`,\n ]\n .filter(Boolean)\n .join(', ');\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 {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 {UIBatchError, splitBatchResults} from '../../../../shared/utils/error';\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} 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 CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\n\nimport {toaster} from '../../../utils/toaster';\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 'effective_lightweight_operations_enabled',\n 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'integral_pool_capacity',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_running_operation_count',\n 'lightweight_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 'specified_resource_limits',\n 'resource_usage',\n 'estimated_guarantee_resources',\n 'effective_strong_guarantee_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 'specified_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 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;\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 const poolNames = Object.keys(rawPools).sort();\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: poolNames.length\n ? poolNames.reduce(\n (acc, key) => {\n acc[key] = rawPools[key];\n return acc;\n },\n {} as typeof rawPools,\n )\n : 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, PoolTreeNode>,\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 {getBatchError, splitBatchResults} from '../../../../shared/utils/error';\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 {extractBatchV4Values, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\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 {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\nimport {toaster} from '../../../utils/toaster';\n\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\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_pool_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?: {name: string; parent?: string}): 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: PoolTreeNode): 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(abcService?: {\n id?: number;\n slug?: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n const {id, slug} = abcService ?? {};\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter: {id, slug}},\n });\n };\n}\n","import {ThunkAction} from 'redux-thunk';\n\nimport 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 {BatchSubRequest} from '../../../../shared/yt-types';\n\nimport {RootState} from '../../../store/reducers';\nimport {splitBatchResults} from '../../../../shared/utils/error';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {\n SchedulingContentMode,\n getPools,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {SchedulingAction, SchedulingState} from '../../../store/reducers/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n PoolEditorFormValues,\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_DATA_PARTITION,\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';\n\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {YTErrors} from '../../../rum/constants';\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\nimport {SortState} from '../../../types';\nimport {toaster} from '../../../utils/toaster';\n\nconst setName = (path: string, newName?: string, prevName?: string) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return ytApiV3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (\n path: string,\n values: PoolEditorFormValues['otherSettings'],\n initialValues: PoolEditorFormValues['otherSettings'],\n) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands: Array<BatchSubRequest> = [];\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\ntype ResourceLimits = PoolEditorFormValues['resourceLimits'];\n\nconst setResourceAttributes = (\n path: string,\n values: Partial<Record<keyof ResourceLimits, number>>,\n omittedValues: Partial<ResourceLimits>,\n attribute: 'resource_limits',\n) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper: Record<string, string> = {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 ytApiV3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return ytApiV3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\ntype GeneralValues = PoolEditorFormValues['general'];\n\nconst makeGeneralCommands = (\n path: string,\n values: Partial<GeneralValues>,\n initialValues: GeneralValues,\n) => {\n const isInitial = (value: unknown, initialValue: unknown) => value === initialValue;\n const isOmitted = (value: string, omittedValues: unknown) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n const omittedValues = pickBy_(\n values,\n (value: string) => value === '' || value === undefined || value === null,\n );\n\n const commands: Array<BatchSubRequest> = [];\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set' as const,\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight?.value, initialValues.weight?.value)) {\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?.value),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value: number | string) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value: number | string) {\n return !isInvalidNumber(value);\n}\n\ntype SchedulingThunk<T> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function editPool(\n pool: PoolTreeNode,\n values: PoolEditorFormValues,\n initialValues: PoolEditorFormValues,\n): SchedulingThunk<Promise<void>> {\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: Partial<(typeof values)['resourceLimits']> = pickBy_(\n values.resourceLimits,\n isValidNumber,\n );\n const omittedResourceLimitsValues: Partial<(typeof values)['resourceLimits']> = pickBy_(\n values.resourceLimits,\n isInvalidNumber,\n );\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\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 return undefined;\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 setName(path, values.general.name, initialValues.general.name),\n ])\n .then(() => {\n toaster.add({\n name: 'edit pool',\n autoHiding: 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 !== YTErrors.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return undefined;\n });\n };\n}\n\nexport function openEditModal(item: PoolTreeNode) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled}: {cancelled?: boolean} = {}): SchedulingThunk<void> {\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: string): SchedulingThunk<void> {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState: SchedulingState['treeState']): SchedulingAction {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool: string): SchedulingAction {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function schedulingChangeContentMode(contentMode: SchedulingContentMode): SchedulingAction {\n return {type: CHANGE_CONTENT_MODE, data: {contentMode}};\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter: string) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool: string, tree: string): SchedulingThunk<void> {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\n\nexport function schedulingSetSortState(sortState: Array<SortState>): SchedulingAction {\n return {\n type: SCHEDULING_DATA_PARTITION,\n data: {sortState},\n };\n}\n\nexport function schedulingSetShowAbsResources(showAbsResources: boolean): SchedulingAction {\n return {\n type: SCHEDULING_DATA_PARTITION,\n data: {showAbsResources},\n };\n}\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {getSettingsData} from '../../../store/selectors/settings/settings-base';\nimport {SchedulingColumn, isSchedulingColumnName} from '../../../utils/scheduling/detailsTable';\n\nconst DEFAULT_COLUMNS: Array<SchedulingColumn> = [\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\nexport const getSchedulingOverivewColumns = createSelector([getSettingsData], (data) => {\n const columns = data['global::scheduling::overviewColumns'];\n if (!columns) {\n return [...DEFAULT_COLUMNS];\n }\n\n const resColumns: Array<SchedulingColumn> = compact_([\n 'name' as const,\n ...columns.map((item) => {\n return isSchedulingColumnName(item) ? item : undefined;\n }),\n 'actions' as const,\n ]);\n return uniq_(resColumns);\n});\n","import {addI18Keysets} from '../../../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:scheduling-table', {en, ru});\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../../components/Label/Label';\nimport type {PoolLeafNode, PoolTreeNode} from '../../../../../../utils/scheduling/pool-child';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolTreeNode | PoolLeafNode}) {\n const {integralType} = pool;\n\n if (integralType === 'burst' || integralType === 'relaxed') {\n return (\n <Label\n key={'guarantee-type'}\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n );\n }\n\n return null;\n}\n\nexport default React.memo(PoolTags);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Flex, Text} from '@gravity-ui/uikit';\n\nimport {setExpandedPools} from '../../../../../../store/actions/scheduling/expanded-pools';\nimport {\n getCurrentPool,\n getCurrentTreeExpandedPools,\n} from '../../../../../../store/selectors/scheduling/scheduling';\n\nimport {ExpandableCell} from '../../../../../../components/DataTableGravity/ExpandableCell';\nimport Link from '../../../../../../components/Link/Link';\nimport {OperationPool} from '../../../../../../components/OperationPool/OperationPool';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {getCluster} from '../../../../../../store/selectors/global/cluster';\nimport {getTree} from '../../../../../../store/selectors/scheduling/scheduling-pools';\n\nimport {PoolLeafNode} from '../../../../../../utils/scheduling/pool-child';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\n\nimport type {RowData} from './SchedulingTable';\nimport './NameCell.scss';\nimport PoolTags from './PoolTags';\n\nconst block = cn('yt-scheduling-name-cell');\n\nexport function NameCell({row}: {row: RowData}) {\n const cluster = useSelector(getCluster);\n const tree = useSelector(getTree);\n const currentPool = useSelector(getCurrentPool);\n\n const dispatch = useDispatch();\n const expandedPools = useSelector(getCurrentTreeExpandedPools);\n\n const handlePoolExpand = React.useCallback(\n (poolName: string, value: boolean) => {\n dispatch(setExpandedPools({[poolName]: value}));\n },\n [dispatch],\n );\n\n const {name, type, level = 0, incomplete} = row;\n const isCurrentPool = currentPool?.name === name;\n const {child_pool_count = 0, pool_operation_count = 0} = row.attributes;\n const allowExpand = child_pool_count > 0 || pool_operation_count > 0;\n\n const expanded = type === 'pool' ? Boolean(expandedPools?.get(name)) : undefined;\n\n return (\n <ExpandableCell\n level={level}\n expanded={expanded}\n onExpand={\n !isCurrentPool && allowExpand ? () => handlePoolExpand(name, !expanded) : undefined\n }\n >\n {row.type === 'pool' ? (\n <>\n <OperationPool\n hideTree\n routed\n className={block('pool')}\n cluster={cluster}\n pool={{\n pool: incomplete ? '' : row.name,\n tree,\n isLightweight: row.isEffectiveLightweight,\n isEphemeral: row.isEphemeral,\n }}\n theme=\"primary\"\n />\n <span style={{flex: '1 1 0px'}} />\n <PoolTags pool={row} />\n </>\n ) : (\n renderOperationName({cluster, row})\n )}\n </ExpandableCell>\n );\n}\n\nfunction renderOperationName({cluster, row}: {cluster: string; row: PoolLeafNode}) {\n const {\n id,\n attributes: {title},\n fifoIndex,\n } = row;\n const url = `/${cluster}/operations/${id}`;\n\n const fifoIndexNode =\n fifoIndex !== undefined ? (\n <Tooltip content={`Fifo index: ${fifoIndex}`}>#{fifoIndex}&nbsp;</Tooltip>\n ) : null;\n\n const hasTitle = 0 > title?.length!;\n\n return (\n <Flex direction=\"column\" style={{margin: '-4px 0'}} overflow=\"hidden\">\n <Text variant=\"inherit\" ellipsis>\n {fifoIndexNode}\n <Link url={url}>{title ?? id}</Link>\n </Text>\n {!hasTitle && (\n <Text variant=\"code-inline-1\" color=\"secondary\" ellipsis>\n {id}\n </Text>\n )}\n </Flex>\n );\n}\n","import {useSelector} from 'react-redux';\n\nimport UIFactory from '../../../../../../UIFactory';\nimport {getClusterUiConfig} from '../../../../../../store/selectors/global/cluster';\nimport type {PoolTreeNode} from '../../../../../../utils/scheduling/pool-child';\n\nexport function PoolAbc({pool}: {pool: PoolTreeNode}) {\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return UIFactory.renderSchedulingTableItemExtraControls({\n pool,\n clusterUiConfig,\n });\n}\n","import cn from 'bem-cn-lite';\nimport moment from 'moment';\nimport React from 'react';\n\nimport {DropdownMenu, Flex, Progress, Text} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ColumnHeader, {\n ColumnHeaderProps,\n} from '../../../../../../components/ColumnHeader/ColumnHeader';\nimport {\n DataTableGravity,\n TableCell,\n TableSettings,\n tanstack,\n useTable,\n} from '../../../../../../components/DataTableGravity';\nimport {\n FormatNumber,\n FormatNumberProps,\n} from '../../../../../../components/FormatNumber/FormatNumber';\nimport Label from '../../../../../../components/Label/Label';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport {OperationType} from '../../../../../../components/OperationType/OperationType';\nimport {SubjectCard} from '../../../../../../components/SubjectLink/SubjectLink';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {getSchedulingOperationsLoading} from '../../../../../../store/selectors/scheduling/expanded-pools';\nimport {\n getSchedulingContentMode,\n getSchedulingLoading,\n getSchedulingOverviewTableItems,\n getSchedulingShowAbsResources,\n getSchedulingSortState,\n getSchedulingTreeMainResource,\n} from '../../../../../../store/selectors/scheduling/scheduling';\n\nimport {KeysByType} from '../../../../../../../@types/types';\nimport {formatTimeDuration} from '../../../../../../components/TimeDuration/TimeDuration';\nimport {useSettingsColumnSizes} from '../../../../../../hooks/settings/use-settings-column-sizes';\nimport {useSettingsVisibleColumns} from '../../../../../../hooks/settings/use-settings-column-visibility';\nimport ShareUsageBar from '../../../../../../pages/scheduling/Content/controls/ShareUsageBar';\nimport {openAttributesModal} from '../../../../../../store/actions/modals/attributes-modal';\nimport {getPoolPathsByName} from '../../../../../../store/actions/scheduling/expanded-pools';\nimport {\n openEditModal,\n schedulingSetSortState,\n} from '../../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../../store/actions/scheduling/scheduling-ts';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\nimport {getSchedulingOperationRefId} from '../../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {getSchedulingOverivewColumns} from '../../../../../../store/selectors/scheduling/overview-columns';\nimport {getProgressTheme} from '../../../../../../utils/progress';\nimport {SchedulingColumn, childTableItems} from '../../../../../../utils/scheduling/detailsTable';\nimport i18n from './i18n';\nimport {NameCell} from './NameCell';\nimport {PoolAbc} from './PoolAbc';\nimport './SchedulingTable.scss';\n\nconst block = cn('yt-scheduling-table');\n\nexport type RowData = ReturnType<typeof getSchedulingOverviewTableItems>[number];\n\nexport function SchedulingTable() {\n const {columnSizes, setColumnSizes} = useSettingsColumnSizes(\n 'global::scheduling::overviewColumnSizes',\n {minWidth: 80},\n );\n\n const {onColumnVisibilityChange, onColumnOrderChange} = useSettingsVisibleColumns(\n 'global::scheduling::overviewColumns',\n );\n\n const {columns, columnVisibility, columnOrder} = useSchedulingTableColumns();\n const items = useSelector(getSchedulingOverviewTableItems);\n\n const operationRefId = useSelector(getSchedulingOperationRefId);\n\n const table = useTable({\n columns,\n data: items,\n enableColumnPinning: true,\n enableColumnResizing: true,\n state: {\n columnPinning: {\n left: ['name'],\n right: ['actions'],\n },\n columnSizing: columnSizes,\n columnVisibility,\n columnOrder,\n },\n onColumnSizingChange: setColumnSizes,\n onColumnVisibilityChange,\n onColumnOrderChange,\n });\n\n const {scrollToIndex, isHighlightedRow} = React.useMemo(() => {\n if (!operationRefId) {\n return {};\n }\n\n return {\n scrollToIndex: items.findIndex(({id}) => operationRefId === id),\n isHighlightedRow: (item?: (typeof items)[number]) => {\n return item?.id === operationRefId;\n },\n };\n }, [operationRefId, items]);\n\n return (\n <DataTableGravity\n className={block()}\n table={table}\n virtualized\n rowHeight={49}\n scrollToIndex={scrollToIndex}\n isHighlightedRow={isHighlightedRow}\n />\n );\n}\n\ntype SchedulintTableMode = ReturnType<typeof getSchedulingContentMode>;\n\nconst COLUMNS_BY_MODE: Record<SchedulintTableMode, Array<SchedulingColumn>> = {\n summary: [\n 'weight',\n 'view_mode',\n 'owner',\n 'dominant_resource',\n 'fair_share_usage',\n 'usage',\n 'demand',\n 'guaranteed',\n 'operation_overview',\n 'duration',\n ],\n cpu: [\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n 'resource_limit_cpu',\n ],\n memory: [\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n 'resource_limit_memory',\n ],\n\n gpu: [\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n 'resource_limit_gpu',\n ],\n\n user_slots: [\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n 'resource_limit_user_slots',\n ],\n\n operations: [\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n ],\n\n integral_guarantees: [\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n 'burst_duration',\n ],\n custom: [],\n};\n\nfunction useSchedulingVisibleColumns() {\n const mode = useSelector(getSchedulingContentMode);\n const customColumns = useSelector(getSchedulingOverivewColumns);\n\n return mode === 'custom' ? customColumns : (COLUMNS_BY_MODE[mode] ?? []);\n}\n\ntype KeyByGetterReturnType<T> =\n | KeysByType<typeof childTableItems, {sort: (...args: any) => T}>\n | KeysByType<typeof childTableItems, {get: (...args: any) => T}>;\n\nfunction makeNumberColumn(\n id: KeyByGetterReturnType<number | undefined>,\n {\n type = 'NumberSmart',\n ...rest\n }: Partial<Pick<FormatNumberProps, 'type' | 'hideApproximateChar'>> = {},\n) {\n const info = childTableItems[id];\n const {caption} = {caption: undefined, ...info};\n return {\n id,\n header: () => <SchedulingColumnHeader column={id} title={caption} />,\n cell: ({row: {original: item}}: tanstack.CellContext<RowData, unknown>) => {\n let value: number | undefined;\n if ('sort' in info && 'function' === typeof info.sort) {\n value = info.sort(item);\n } else if ('get' in info && 'function' === typeof info.get) {\n value = info.get(item);\n }\n\n return (\n <TableCell>\n <FormatNumber value={value} type={type} {...rest} />\n </TableCell>\n );\n },\n };\n}\n\nfunction makeReadableFieldColumn(\n id: KeyByGetterReturnType<string | undefined>,\n options?: {size?: number},\n) {\n const info = childTableItems[id];\n const {caption} = {caption: undefined, ...info};\n return {\n id,\n header: () => <SchedulingColumnHeader column={id} title={caption} />,\n cell: ({row: {original: item}}: tanstack.CellContext<RowData, unknown>) => {\n let value: string | undefined;\n if ('sort' in info && 'function' === typeof info.sort) {\n value = info.sort(item);\n } else if ('get' in info && 'function' === typeof info.get) {\n value = info.get(item);\n }\n\n return (\n <TableCell>\n {value === undefined ? format.NO_VALUE : format.ReadableField(value)}\n </TableCell>\n );\n },\n ...options,\n };\n}\n\ntype SchedulingColumnDef = Omit<tanstack.ColumnDef<RowData>, 'id'> & {id: SchedulingColumn};\n\nconst DurationMemo = React.memo(Duration);\n\nfunction useSchedulingTableColumns() {\n const visibleColumns = useSchedulingVisibleColumns();\n\n const columns = React.useMemo(() => {\n const availableColumns: Array<SchedulingColumnDef> = [\n {\n id: 'name',\n header: () => <NameHeader />,\n size: 400,\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <NameCell row={item} />\n </TableCell>\n );\n },\n enableColumnFilter: false,\n enableHiding: false,\n },\n {\n id: 'weight',\n header: () => <SchedulingColumnHeader column={'weight'} allowUnordered />,\n cell: ({row: {original: item}}) => {\n const {weightEdited = NaN, type, weight} = item;\n return (\n <TableCell>\n {type === 'pool' ? (\n <EditedNumber\n value={weight}\n edited={weightEdited}\n type=\"NumberSmart\"\n />\n ) : (\n <FormatNumber value={weight} type=\"NumberSmart\" />\n )}\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'view_mode',\n header: () => (\n <SchedulingColumnHeader column={'view_mode'} title=\"Mode\" allowUnordered />\n ),\n cell: ({row: {original: item}}) => {\n const {type, mode} = item;\n return (\n <TableCell>\n {type === 'pool' ? (\n <Text variant=\"inherit\" color=\"secondary\">\n {format.ReadableField(mode)}\n </Text>\n ) : (\n <OperationType value={item.operationType} />\n )}\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'owner',\n header: () => (\n <SchedulingColumnHeader column=\"owner\" title=\"Owner\" allowUnordered />\n ),\n cell: ({row: {original: item}}) => {\n const {user} = item;\n\n const content =\n item.type === 'operation' ? (\n user ? (\n <SubjectCard name={user} type=\"user\" />\n ) : (\n format.NO_VALUE\n )\n ) : (\n <PoolAbc pool={item} />\n );\n\n return <TableCell>{content}</TableCell>;\n },\n },\n makeReadableFieldColumn('dominant_resource', {size: 100}),\n {\n id: 'fair_share_usage',\n header: () => (\n <SchedulingColumnHeader\n column=\"fair_share_usage\"\n title=\"Usage / Fair share\"\n allowUnordered\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell justifyContent=\"center\">\n <FairShareUsage item={item} />\n </TableCell>\n );\n },\n },\n {\n id: 'usage',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_usage_cpu\"\n title=\"Usage\"\n options={[\n {column: 'abs_usage_cpu' as const, title: 'CPU', allowUnordered: true},\n {column: 'abs_usage_gpu' as const, title: 'GPU', allowUnordered: true},\n {\n column: 'abs_usage_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {column: 'fair_share' as const, title: 'Ratio', allowUnordered: true},\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"usage\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'demand',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_demand_cpu\"\n title=\"Demand\"\n options={[\n {column: 'abs_demand_cpu' as const, title: 'CPU', allowUnordered: true},\n {column: 'abs_demand_gpu' as const, title: 'GPU', allowUnordered: true},\n {\n column: 'abs_demand_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {column: 'fair_share' as const, title: 'Ratio', allowUnordered: true},\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"demand\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'guaranteed',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_effective_guaranteed_cpu\"\n title=\"Guarantee\"\n options={[\n {\n column: 'abs_effective_guaranteed_cpu' as const,\n title: 'CPU',\n allowUnordered: true,\n },\n {\n column: 'abs_effective_guaranteed_gpu' as const,\n title: 'GPU',\n allowUnordered: true,\n },\n {\n column: 'abs_effective_guaranteed_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {\n column: 'fair_share' as const,\n title: 'Ratio',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"effectiveGuaranteed\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'operation_overview',\n header: () => (\n <SchedulingColumnHeader\n column=\"running_operation_count\"\n title=\"Operations\"\n options={[\n {\n column: 'running_operation_count' as const,\n title: 'Running',\n allowUnordered: true,\n },\n {\n column: 'max_operation_count' as const,\n title: 'Max count',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const {\n maxOperationCount,\n maxOperationCountEdited,\n runningOperationCount,\n type,\n } = item;\n\n if (type === 'operation') {\n return <TableCell>{format.NO_VALUE}</TableCell>;\n }\n\n return (\n <TableCell>\n <Text variant=\"inherit\" ellipsis>\n <FormatNumber value={runningOperationCount} type=\"NumberSmart\" />\n &nbsp;/&nbsp;\n <EditedNumber\n value={maxOperationCount}\n edited={maxOperationCountEdited}\n type=\"NumberSmart\"\n />\n </Text>\n </TableCell>\n );\n },\n size: 120,\n },\n {\n id: 'duration',\n header: () => <SchedulingColumnHeader column=\"duration\" />,\n cell: ({row: {original: item}}) => {\n const {startTime} = item;\n return (\n <TableCell>\n <DurationMemo start={startTime} />\n </TableCell>\n );\n },\n },\n {\n id: 'FI',\n header: () => <SchedulingColumnHeader column=\"FI\" />,\n cell: ({row: {original: item}}) => {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n },\n size: 50,\n },\n {\n id: 'operation_progress',\n header: () => (\n <SchedulingColumnHeader\n column=\"operation_count\"\n title={childTableItems.operation_progress.caption}\n options={[\n {column: 'operation_progress', title: 'Progress', allowUnordered: true},\n {column: 'operation_count', title: 'Count', allowUnordered: true},\n {\n column: 'max_operation_count',\n title: 'Max count',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const info = childTableItems.operation_progress;\n const value = info.get(item);\n const theme = getProgressTheme(value);\n const text = info.text(item);\n return isNaN(value) ? (\n format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n },\n },\n {\n id: 'running_operation_progress',\n header: () => (\n <SchedulingColumnHeader\n column=\"running_operation_progress\"\n title={childTableItems.running_operation_progress.caption}\n options={[\n {\n column: 'running_operation_progress',\n title: 'Progress',\n allowUnordered: true,\n },\n {\n column: 'running_operation_count',\n title: 'Count',\n allowUnordered: true,\n },\n {\n column: 'max_running_operation_count',\n title: 'Max running',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const info = childTableItems.running_operation_progress;\n const value = info.get(item);\n const theme = getProgressTheme(value);\n const text = info.text(item);\n return isNaN(value) ? (\n format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n },\n },\n makeNumberColumn('abs_demand_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_demand_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_demand_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_demand_user_slots'),\n makeNumberColumn('abs_guaranteed_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_user_slots'),\n makeNumberColumn('abs_usage_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_usage_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_usage_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_usage_user_slots'),\n makeNumberColumn('accumulated'),\n makeNumberColumn('burst_cpu'),\n makeNumberColumn('burst_duration'),\n makeNumberColumn('children_burst_cpu'),\n makeNumberColumn('children_flow_cpu'),\n makeNumberColumn('flow_cpu'),\n makeReadableFieldColumn('integral_type'),\n makeNumberColumn('max_operation_count'),\n makeNumberColumn('max_running_operation_count'),\n makeNumberColumn('min_resources_cpu', {hideApproximateChar: true}),\n makeNumberColumn('min_resources_gpu', {hideApproximateChar: true}),\n makeNumberColumn('min_resources_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('min_resources_user_slots'),\n makeNumberColumn('operation_count'),\n makeNumberColumn('resource_detailed_cpu', {hideApproximateChar: true}),\n makeNumberColumn('resource_detailed_gpu', {hideApproximateChar: true}),\n makeNumberColumn('resource_detailed_memory', {\n type: 'Bytes',\n hideApproximateChar: true,\n }),\n makeNumberColumn('resource_detailed_user_slots'),\n makeNumberColumn('resource_limit_cpu'),\n makeNumberColumn('resource_limit_gpu'),\n makeNumberColumn('resource_limit_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('resource_limit_user_slots'),\n makeNumberColumn('running_operation_count'),\n {\n id: 'actions',\n header: (ctx) => {\n return <SchedulingTableSettings table={ctx.table} />;\n },\n size: 50,\n cell: ({row: {original: item}}) => {\n return <RowActions item={item} />;\n },\n enableColumnFilter: false,\n enableHiding: false,\n enableResizing: false,\n },\n ];\n\n return availableColumns;\n }, []);\n\n const {columnVisibility, columnOrder} = React.useMemo(() => {\n const visible = new Set(visibleColumns);\n const columnVisibility = columns.reduce(\n (acc, {id}) => {\n acc[id] = id === 'name' || id === 'actions' || visible.has(id);\n return acc;\n },\n {} as Record<SchedulingColumn, boolean>,\n );\n const columnOrder = [\n ...visibleColumns.filter((col) => columnVisibility[col]),\n ...Object.keys(columnVisibility).filter(\n (col) => !columnVisibility[col as SchedulingColumn],\n ),\n ];\n return {columnVisibility, columnOrder};\n }, [visibleColumns, columns]);\n\n return {columns, columnVisibility, columnOrder};\n}\n\nfunction NameHeader() {\n const expandedeLoading = useSelector(getSchedulingOperationsLoading);\n const loading = useSelector(getSchedulingLoading);\n return (\n <SchedulingColumnHeader\n title={i18n('pool-operation')}\n column=\"name\"\n loading={loading || expandedeLoading}\n allowUnordered\n />\n );\n}\n\ntype ResourceSummaryProps = {\n item: RowData;\n type: 'usage' | 'demand' | 'effectiveGuaranteed';\n};\n\nfunction ResourceSummary({item, type}: ResourceSummaryProps) {\n const showAbsResources = useSelector(getSchedulingShowAbsResources);\n const dominantResource = useSelector(getSchedulingTreeMainResource) ?? 'CPU';\n\n const {fairShareRatio} = item;\n\n if (!showAbsResources && !fairShareRatio) {\n return <TableCell>{format.Number(undefined)}</TableCell>;\n }\n\n if (!showAbsResources) {\n return (\n <TableCell>\n <FormatNumber value={fairShareRatio} type=\"NumberSmart\" />\n </TableCell>\n );\n }\n\n const {resources} = item ?? {};\n const cpu = resources?.cpu?.[type];\n const gpu = resources?.gpu?.[type];\n const user_memory = resources?.user_memory?.[type];\n\n if (showAbsResources && !cpu && !gpu && !user_memory) {\n return <TableCell>{format.Number(undefined)}</TableCell>;\n }\n\n const cpuContent = format.NumberSmart(cpu) + ' CPU';\n const gpuContent = format.NumberSmart(gpu) + ' GPU';\n const memContent = format.Bytes(user_memory) + ' RAM';\n\n const l1 = dominantResource === 'cpu' ? cpuContent : gpuContent;\n const l2 =\n dominantResource === 'cpu'\n ? [gpu && gpuContent, memContent].filter(Boolean).join(', ')\n : [cpu && cpuContent, memContent].filter(Boolean).join(', ');\n\n return (\n <Flex direction=\"column\" style={{margin: '-8px 0'}} overflow=\"hidden\">\n <Text variant=\"subheader-1\" style={{fontWeight: 'var(--yt-font-weight-bold)'}} ellipsis>\n {l1}\n </Text>\n <Text variant=\"caption-2\" color=\"secondary\" ellipsis>\n {l2}\n </Text>\n </Flex>\n );\n}\n\ntype EditedNumberProps = {\n value?: number;\n edited?: number;\n\n type: FormatNumberProps['type'];\n};\n\nfunction EditedNumber({value, edited, type}: EditedNumberProps) {\n const autocalculated = isNaN(edited!);\n const content = autocalculated ? 'Automatically calculated' : 'Explicitly defined';\n\n return (\n <FormatNumber\n className={block('edited-number', {autocalculated})}\n tooltip={content}\n value={value}\n type={type}\n />\n );\n}\n\nfunction Duration({start}: {start?: string}) {\n const [now, setNow] = React.useState(Date.now());\n\n React.useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, []);\n\n if (!start) {\n return null;\n }\n\n const from = moment(start).valueOf();\n if (!from) {\n return null;\n }\n\n return (\n <Tooltip\n className={block('duration')}\n ellipsis\n content={\n <MetaTable\n items={[\n {\n key: 'start time',\n value: format.DateTime(from / 1000),\n },\n ]}\n />\n }\n >\n {formatTimeDuration(Math.round((now - from) / 1000) * 1000)}\n </Tooltip>\n );\n}\n\nfunction RowActions({item}: {item: RowData}) {\n const dispatch = useDispatch();\n\n const {type, isEphemeral} = item;\n const editable = !isEphemeral && type === 'pool';\n\n return (\n editable && (\n <DropdownMenu\n switcherWrapperClassName={block('actions')}\n items={[\n {\n text: 'Attributes',\n action: () => {\n const exactPath = dispatch(getPoolPathsByName(item.name))?.orchidPath;\n if (type === 'pool') {\n dispatch(openAttributesModal({title: item.name, exactPath}));\n }\n },\n },\n {\n action: () => dispatch(openEditModal(item)),\n text: 'Edit',\n },\n {\n action: () => dispatch(openPoolDeleteModal(item)),\n text: 'Delete',\n theme: 'danger' as const,\n },\n ]}\n />\n )\n );\n}\n\nfunction FairShareUsage({item}: {item: RowData}) {\n const {starvation_status, fairShareRatio, usageRatio} = item;\n\n const forceTheme = (\n {\n starving: 'warning',\n aggressively_starving: 'danger',\n } as Record<string, 'warning' | 'danger' | undefined>\n )[starvation_status!];\n\n const title = !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={format.Readable(starvation_status)} />\n </div>\n );\n\n return (\n <ShareUsageBar\n className={block('share-usage')}\n shareValue={fairShareRatio}\n shareTitle={'Fair share'}\n usageValue={usageRatio}\n usageTitle={'Usage'}\n forceTheme={forceTheme}\n title={title}\n />\n );\n}\n\nfunction SchedulingColumnHeader(props: ColumnHeaderProps<SchedulingColumn>) {\n const dispatch = useDispatch();\n\n const [sortState] = useSelector(getSchedulingSortState);\n\n const order = props.column === sortState?.column ? sortState.order : undefined;\n\n const lastColumnRef = React.useRef(props.column);\n\n const byOptions: Pick<typeof props, 'column' | 'order'> = {column: lastColumnRef.current};\n\n if (sortState?.column && props.options) {\n const item = props.options.find((x) => x.column === sortState.column);\n if (item) {\n Object.assign(byOptions, {column: item.column, order: sortState.order});\n }\n }\n\n return (\n <ColumnHeader\n {...props}\n order={order}\n {...byOptions}\n onSort={(column, order, {currentOrder}) => {\n dispatch(\n schedulingSetSortState(\n column && order\n ? [\n {\n column: currentOrder\n ? column\n : (lastColumnRef.current ?? column),\n order,\n },\n ]\n : [],\n ),\n );\n if (column) {\n lastColumnRef.current = column;\n }\n }}\n sortIconSize={14}\n />\n );\n}\n\nfunction SchedulingTableSettings<T extends tanstack.Table<any>>({table}: {table: T}) {\n const mode = useSelector(getSchedulingContentMode);\n\n return mode === 'custom' ? <TableSettings table={table} /> : null;\n}\n","import isEqual_ from 'lodash/isEqual';\n\nimport {KeysByType} from '../../../@types/types';\nimport {DescribedSettings} from '../../../shared/constants/settings-types';\n\nimport {getSettingsData} from '../../store/selectors/settings/settings-base';\nimport {setSettingByKey} from '../../store/actions/settings';\nimport {RootState} from '../../store/reducers';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\n\ntype ColumnVisibility = Record<string, boolean>;\n\ntype ColumnOrder = Array<string>;\n\nexport function useSettingsVisibleColumns<K extends KeysByType<DescribedSettings, Array<string>>>(\n key: K,\n) {\n const dispatch = useDispatch();\n const visibleColumns = useSelector(getSettingsData)[key] ?? [];\n\n return {\n visibleColumns,\n onColumnVisibilityChange: (\n updateFn: ColumnVisibility | ((oldState: ColumnVisibility) => ColumnVisibility),\n ) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevVisibleColumns = getSettingsData(getState())[key] ?? [];\n const newVisibility = 'function' === typeof updateFn ? updateFn({}) : updateFn;\n\n const newVisibleColumns: DescribedSettings[K] = [\n ...prevVisibleColumns,\n ] as typeof prevVisibleColumns;\n Object.keys(newVisibility).forEach((k) => {\n const kIndex = newVisibleColumns.indexOf(k as any);\n const visible = newVisibility[k];\n if (visible) {\n if (-1 === kIndex) {\n newVisibleColumns.push(k as any);\n }\n } else {\n if (-1 !== kIndex) {\n newVisibleColumns.splice(kIndex, 1);\n }\n }\n });\n\n if (!isEqual_(prevVisibleColumns, newVisibleColumns)) {\n dispatch(setSettingByKey(key, newVisibleColumns));\n }\n });\n },\n onColumnOrderChange: (\n updateFn: ColumnOrder | ((prevOrder: ColumnOrder) => ColumnOrder),\n ) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevVisibleColumns = getSettingsData(getState())[key] ?? [];\n const visible = new Set<string>(prevVisibleColumns);\n\n const newOrder = 'function' === typeof updateFn ? updateFn([]) : updateFn;\n\n const newValue = newOrder.filter((item) => {\n return visible.has(item);\n }) as typeof prevVisibleColumns;\n\n if (!isEqual_(prevVisibleColumns, newValue)) {\n dispatch(setSettingByKey(key, newValue));\n }\n });\n },\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\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 cn from 'bem-cn-lite';\n\nimport {SegmentedRadioGroup, Switch} from '@gravity-ui/uikit';\n\nimport format from '../../../../../common/hammer/format';\n\nimport {DialogWrapper} from '../../../../../components/DialogWrapper/DialogWrapper';\nimport {ExpandButton} from '../../../../../components/ExpandButton';\nimport {Toolbar} from '../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {setLoadAllOperations} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {\n schedulingChangeContentMode,\n schedulingSetShowAbsResources,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {schedulingSetAbcFilter} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n SCHEDULING_CONTENT_MODES,\n getSchedulingContentMode,\n getSchedulingShowAbsResources,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {getExpandedPoolsLoadAll} from '../../../../../store/selectors/scheduling/expanded-pools';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\n\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport UIFactory from '../../../../../UIFactory';\n\nimport './SchedulingToolbar.scss';\n\nconst block = cn('yt-scheduling-toolbar');\n\nexport function SchedulingToolbar() {\n const mode = useSelector(getSchedulingContentMode);\n\n return (\n <Toolbar\n className={block()}\n itemsToWrap={[\n {node: <SchedulingContentMode />},\n {\n node: <PoolsSuggest className={block('filter')} />,\n width: 200,\n },\n {node: <SchedulingAbc />},\n ...(mode === 'summary' || mode === 'custom'\n ? [{node: <SchedulingShowAbsResources />}]\n : []),\n ]}\n />\n );\n}\n\nfunction SchedulingContentMode() {\n const dispatch = useDispatch();\n const mode = useSelector(getSchedulingContentMode);\n\n return (\n <SegmentedRadioGroup\n size=\"m\"\n qa=\"scheduling:conftent:mode\"\n value={mode}\n onUpdate={(v) => dispatch(schedulingChangeContentMode(v))}\n name=\"navigation-tablets-mode\"\n options={SCHEDULING_CONTENT_MODES.map((value) => {\n return {value, content: format.ReadableField(value)};\n })}\n />\n );\n}\n\nfunction SchedulingAbc() {\n const dispatch = useDispatch();\n const {slug} = useSelector(getSchedulingAbcFilter) ?? {};\n\n return UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: slug ? {slug} : undefined,\n onChange: (abcService) => {\n dispatch(schedulingSetAbcFilter(abcService));\n },\n });\n}\n\nexport function SchedulingExpandAll() {\n const [showConfirmation, setShowConfirmation] = React.useState(false);\n\n const dispatch = useDispatch();\n const loadAll = useSelector(getExpandedPoolsLoadAll);\n\n const confirmation = showConfirmation ? (\n <DialogWrapper open={true} onClose={() => {}}>\n <DialogWrapper.Header caption={'Confirmation of \"Expand all\"'} />\n <DialogWrapper.Body>\n To display the expanded tree it is required to load all running operations, it might\n be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </DialogWrapper.Body>\n <DialogWrapper.Footer\n onClickButtonApply={() => {\n setShowConfirmation(false);\n dispatch(setLoadAllOperations(!loadAll));\n }}\n onClickButtonCancel={() => setShowConfirmation(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </DialogWrapper>\n ) : null;\n\n return (\n <>\n <ExpandButton\n all\n expanded={loadAll}\n toggleExpanded={() => {\n const newValue = !loadAll;\n if (newValue) {\n setShowConfirmation(true);\n } else {\n dispatch(setLoadAllOperations(newValue));\n }\n }}\n />\n {confirmation}\n </>\n );\n}\n\nfunction SchedulingShowAbsResources() {\n const dispatch = useDispatch();\n const value = useSelector(getSchedulingShowAbsResources);\n\n return (\n <Switch\n checked={value}\n onUpdate={(v) => {\n dispatch(schedulingSetShowAbsResources(v));\n }}\n >\n Show abs. resources\n </Switch>\n );\n}\n","import React from 'react';\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport SchedulingStaticConfiguration from '../../../../../pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration';\nimport {SchedulingMeta} from './SchedulingMeta';\nimport {SchedulingTable} from './SchedulingTable/SchedulingTable';\nimport {SchedulingToolbar} from './SchedulingToolbar';\n\nexport function Overview() {\n return (\n <div>\n <SchedulingMeta />\n <SchedulingStaticConfiguration />\n <WithStickyToolbar\n toolbar={<SchedulingToolbar />}\n content={<SchedulingTable />}\n topMargin=\"none\"\n />\n </div>\n );\n}\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {RootState} from '../../../../../store/reducers';\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 {LoadingStatus} from '../../../../../constants';\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}: {loadState: LoadingStatus}) {\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: RootState) => {\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 '../../../store/redux-hooks';\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';\n\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport Loader from '../../../../../components/Loader/Loader';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {YTApiId} from '../../../../../rum/rum-wrap-api';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {useFetchBatchQuery} from '../../../../../store/api/yt';\nimport {getCurrentPool} from '../../../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport {PoolTreeNode} from '../../../../../utils/scheduling/pool-child';\n\nexport function PoolAttributes({className}: {className: string}) {\n const pool = useSelector(getCurrentPool);\n\n if (!pool) {\n return null;\n }\n\n return <PoolAttributesFetched className={className} pool={pool} />;\n}\n\nfunction PoolAttributesFetched({className, pool}: {className?: string; pool: PoolTreeNode}) {\n const dispatch = useDispatch();\n const res = React.useMemo(() => {\n return dispatch(getPoolPathsByName(pool.name));\n }, [dispatch, pool.name]);\n\n const {data, error, isLoading} = useFetchBatchQuery<unknown>({\n id: YTApiId.schedulingPoolAttributes,\n errorTitle: 'Failed to load pool attributes',\n parameters: {\n requests: [{command: 'get', parameters: {path: res.orchidPath}}],\n },\n });\n\n return (\n <div className={className}>\n {isLoading && <Loader />}\n {Boolean(error) && <YTErrorBlock error={error} />}\n <Yson folding virtualized value={data?.[0]?.output ?? null} />\n </div>\n );\n}\n","import cn from 'bem-cn-lite';\nimport reduce_ from 'lodash/reduce';\n\nimport React from 'react';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\n\nimport {formatByParams} from '../../../../shared/utils/format';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {\n DEFAULT_TAB,\n SCHEDULING_ALLOWED_ROOT_TABS,\n SchedulingTab,\n} from '../../../constants/scheduling';\nimport {Overview} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport PoolAcl from '../../../pages/scheduling/Content/tabs/PoolAcl/PoolAcl';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getIsRoot,\n getPool,\n getPoolIsEphemeral,\n getTree,\n isPoolAclAllowed,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {makeSchedulingUrl} from '../../../utils/app-url';\nimport './Content.scss';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport {PoolAttributes} from './tabs/PoolAttributes/PoolAttributes';\nimport UIFactory from '../../../UIFactory';\n\nconst block = cn('scheduling-content');\n\ntype ContentProps = {\n className?: string;\n match: {path: string; url: string};\n location: {search: string};\n};\n\nfunction Content({match, location}: ContentProps) {\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: Record<string, string> = {...SchedulingTab};\n\n const showSettings = reduce_(\n SchedulingTab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {} as Record<string, TabSettings>,\n );\n\n const titleDict: Record<string, string> = {};\n\n const aclTab = showSettings[SchedulingTab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = [\n ...UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n }),\n ];\n\n const extraRoutes: Array<React.ReactElement> = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate, hidden} = tab;\n\n const tabSettings: TabSettings = {show: !hidden};\n\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[SchedulingTab.ACL] = SchedulingTab.ACL;\n\n const props = makeTabProps(match.url, localTab, showSettings, {pool, tree}, titleDict);\n\n return (\n <ErrorBoundary>\n <SchedulingExpandedPoolsUpdater />\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n <Switch>\n <Route path={`${match.path}/${SchedulingTab.OVERVIEW}`} component={Overview} />\n <Route\n path={`${match.path}/${SchedulingTab.ATTRIBUTES}`}\n render={() => <PoolAttributes className={block('attributes')} />}\n />\n {extraRoutes}\n {aclTab.show && (\n <Route path={`${match.path}/${SchedulingTab.ACL}`} component={PoolAcl} />\n )}\n <Route\n path={`${match.path}/details`}\n render={() => {\n return <Redirect to={makeSchedulingUrl({pool, poolTree: tree})} />;\n }}\n />\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 </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\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 {useSelector} from '../../../store/redux-hooks';\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 '../../../../store/redux-hooks';\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 {YTErrorBlock} 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 POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolEditorFormValues,\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 {getSchedulingPoolsMapByName} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\nimport {PoolTreeNode} from '../../../../utils/scheduling/pool-child';\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 : <YTErrorBlock className={block('error')} error={error} />;\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 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 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,\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 = initialFormValues.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 = initialFormValues.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 = initialFormValues.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, initialFormValues));\n },\n [editItem, initialFormValues, 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: initialFormValues.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:\n initialFormValues.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: initialFormValues.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 initialFormValues.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:\n initialFormValues.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: initialFormValues.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 initialFormValues.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: initialFormValues.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 initialFormValues.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?: PoolTreeNode): [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: {name: string; parent?: string} | undefined,\n pools: Array<{name: string; parent?: string}>,\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 '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {DialogWrapper as DeleteDialog} from '../../../components/DialogWrapper/DialogWrapper';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {YTErrorBlock} 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 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 && <YTErrorBlock error={error} />}\n <div className={block('wrapper')}>\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 <YTErrorBlock 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 '../../../../store/redux-hooks';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport {YTErrorBlock} 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 && <YTErrorBlock error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useHistory} from 'react-router';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport {Breadcrumbs, Flex, Key, Select} from '@gravity-ui/uikit';\nimport some_ from 'lodash/some';\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 {\n ROOT_POOL_NAME,\n SCHEDULING_ALLOWED_ROOT_TABS,\n SchedulingTab,\n} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport {EditableBreadcrumbs} from '../../../components/EditableBreadcrumbs/EditableBreadcrumbs';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport {makeRoutedURL} from '../../../store/location';\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 <Flex\n grow={1}\n shrink={1}\n justifyContent={'space-between'}\n alignItems={'center'}\n overflow=\"hidden\"\n >\n <SchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\n </Flex>\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 const history = useHistory();\n const tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n const pathname = calcPathname(window.location.pathname, cluster, name.toString());\n history.push(makeRoutedURL(pathname, {tree, filter: ''}));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text, index) => {\n const pathname = calcPathname(window.location.pathname, cluster, text);\n return (\n <Breadcrumbs.Item\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n key={`${JSON.stringify({text, index})}`}\n onClick={(e) => e.preventDefault()}\n >\n {text}\n </Breadcrumbs.Item>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <EditableBreadcrumbs\n view={'top-row'}\n onAction={(key: Key) => {\n const {text: keyText} = JSON.parse(key as string);\n handleChangePool(keyText);\n }}\n className={block('breadcrumbs')}\n showRoot\n afterEditorContent={<CurrentPoolToClipboardButton />}\n renderEditor={(props) => (\n <PoolsSuggest\n autoFocus\n onCancelEdit={props.onBlur}\n className={block('pool-suggest')}\n />\n )}\n >\n {items}\n </EditableBreadcrumbs>\n );\n}\n\nfunction calcPathname(pathname: string, cluster: string, pool?: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\n if (pool === '<Root>') {\n const isAllowedTab = some_(SCHEDULING_ALLOWED_ROOT_TABS, (_v, tab) =>\n pathname.endsWith('/' + tab),\n );\n return isAllowedTab ? pathname : `/${cluster}/${Page.SCHEDULING}/${SchedulingTab.OVERVIEW}`;\n }\n\n return pathname;\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: string) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n filterable={treeItems?.length >= 5}\n options={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 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\nexport interface EditableAsTextProps {\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 renderContent?: (props: {\n renderEditButton: () => React.ReactNode;\n className?: string;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: EditableAsTextProps) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n renderEditor,\n renderContent,\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 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 <>\n {editMode ? (\n <div\n className={block(\n {edit: !disableEdit, controls: Boolean(withControls)},\n className,\n )}\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 </div>\n ) : renderContent ? (\n renderContent({\n renderEditButton: () => (\n <>\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n qa=\"edit-text-button\"\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </>\n ),\n className: block(null, className),\n })\n ) : (\n <div className={block(null, className)}>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n qa=\"edit-text-button\"\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </div>\n )}\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport {useCheckbox} from '../../hooks/private';\nimport {ControlLabel} from '../ControlLabel';\nimport type {ControlLabelSize} from '../ControlLabel';\nimport type {ControlProps, DOMProps, QAProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport './Switch.scss';\n\nconst b = block('switch');\n\nexport type SwitchSize = ControlLabelSize;\n\nexport interface SwitchProps extends ControlProps, DOMProps, QAProps {\n size?: SwitchSize;\n content?: React.ReactNode;\n children?: React.ReactNode;\n title?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLLabelElement, SwitchProps>(function Switch(props, ref) {\n const {size = 'm', disabled = false, content, children, title, style, className, qa} = props;\n const {checked, inputProps} = useCheckbox({\n ...props,\n controlProps: {...props.controlProps, role: 'switch'},\n });\n const text = content || children;\n\n const control = (\n <span className={b('indicator')}>\n <input {...inputProps} className={b('control')} />\n <span className={b('outline')} />\n <span className={b('slider')} />\n </span>\n );\n\n return (\n <ControlLabel\n ref={ref}\n title={title}\n style={style}\n size={size}\n disabled={disabled}\n className={b(\n {\n size,\n disabled,\n checked,\n },\n className,\n )}\n labelClassName={b('text')}\n qa={qa}\n control={control}\n >\n {text}\n </ControlLabel>\n );\n});\n","import * as React from 'react';\nconst CaretUp = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347z\", clipRule: \"evenodd\" })));\nexport default CaretUp;\n","import * as React from 'react';\nconst CaretDown = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347z\", clipRule: \"evenodd\" })));\nexport default CaretDown;\n","import * as React from 'react';\nconst CaretsExpandVertical = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M12 6.273a.73.73 0 0 0-.18-.479L8.8 2.342A1 1 0 0 0 8.046 2h-.092a1 1 0 0 0-.753.341L4.18 5.794A.727.727 0 0 0 4.727 7h6.546A.727.727 0 0 0 12 6.273M4 9.727c0 .176.064.346.18.479l3.02 3.453a1 1 0 0 0 .753.341h.092a1 1 0 0 0 .753-.341l3.021-3.453A.727.727 0 0 0 11.273 9H4.727A.727.727 0 0 0 4 9.727\", clipRule: \"evenodd\" })));\nexport default CaretsExpandVertical;\n","import {CaretDown, CaretUp, CaretsExpandVertical} from '@gravity-ui/icons';\nimport {SortIndicatorProps} from '@gravity-ui/table';\nimport {Icon} from '@gravity-ui/uikit';\nimport React from 'react';\nimport format from '../../common/hammer/format';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\n\nfunction getIcon(order?: 'asc' | 'desc' | boolean) {\n switch (order) {\n case 'asc':\n return CaretUp;\n case 'desc':\n return CaretDown;\n default:\n return CaretsExpandVertical;\n }\n}\n\nexport function YTSortIndicator<TData, TValue>({header}: SortIndicatorProps<TData, TValue>) {\n const order = header.column.getIsSorted();\n\n const allowSort = header.column.getCanSort();\n const sortIcon = allowSort ? getIcon(order) : null;\n\n return sortIcon ? (\n <Tooltip content={order ? format.ReadableField(order) : null}>\n <Icon data={sortIcon} size={16} />\n </Tooltip>\n ) : null;\n}\n","import {Table, TableProps, useWindowRowVirtualizer} from '@gravity-ui/table';\nimport {Cell, Header} from '@gravity-ui/table/tanstack';\nimport {Flex, FlexProps} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport React from 'react';\nimport {useScrollMargin} from '../../hooks/use-scroll-margin';\nimport './DataTableGravity.scss';\nimport {YTSortIndicator} from './YTSortIndicator';\n\nconst block = cn('yt-gravity-table');\n\nexport type VirtuallizerProps =\n | {virtualized: never; rowHeight: never}\n | {virtualized: true; rowHeight: number};\n\nexport const getCellStyles = <TData, TValue = unknown>(\n cell?: Cell<TData, TValue> | Header<TData, TValue>,\n style?: React.CSSProperties,\n): React.CSSProperties | undefined => {\n if (!cell) {\n return style;\n }\n\n const isPinned = cell.column.getIsPinned();\n\n return {\n width: cell.column.getSize(),\n minWidth: cell.column.columnDef.minSize,\n maxWidth: cell.column.columnDef.maxSize,\n left: isPinned === 'left' ? `${cell.column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${cell.column.getAfter('right')}px` : undefined,\n ...style,\n };\n};\n\nexport function DataTableGravity<TData, TScrollElement extends Element | Window>({\n className,\n virtualized,\n rowHeight,\n scrollToIndex,\n rowClassName,\n isHighlightedRow,\n renderSortIndicator,\n ...props\n}: TableProps<TData, TScrollElement> & {\n style?: React.CSSProperties;\n scrollToIndex?: number;\n isHighlightedRow?: (row?: TData) => boolean;\n} & VirtuallizerProps) {\n const [element, setElement] = React.useState<HTMLDivElement | null>(null);\n const scrollMargin = useScrollMargin({element});\n\n const rowVirtualizer = useWindowRowVirtualizer({\n count: props.table.getRowModel().rows.length,\n estimateSize: () => rowHeight,\n overscan: 5,\n scrollMargin,\n });\n\n const virtualizerProps = virtualized ? {rowVirtualizer} : ({} as {});\n\n React.useEffect(() => {\n let timerId: ReturnType<typeof setTimeout>;\n if (scrollToIndex !== undefined && scrollToIndex >= 0) {\n timerId = setTimeout(\n () => rowVirtualizer.scrollToIndex(scrollToIndex, {align: 'center'}),\n 500,\n );\n }\n return () => clearTimeout(timerId);\n }, [rowVirtualizer, scrollToIndex]);\n\n const rowClassNameFn = React.useCallback<Exclude<typeof rowClassName, undefined | string>>(\n (row) => {\n const highlighted = isHighlightedRow ? isHighlightedRow(row?.original) : undefined;\n return block(\n 'row',\n {highlighted},\n typeof rowClassName === 'string' ? rowClassName : rowClassName?.(row),\n );\n },\n [rowClassName, isHighlightedRow],\n );\n\n const {cellAttributes: cellAttrs, headerCellAttributes: headerCellAttrs} = props;\n\n const cellAttributes = React.useCallback<\n Exclude<typeof props.cellAttributes & Function, undefined>\n >(\n (cell) => {\n const res = typeof cellAttrs === 'function' ? cellAttrs(cell) : cellAttrs;\n\n const style = {...getCellStyles(cell)};\n if (style.left !== undefined) {\n Object.assign(style, {\n left: `calc(${style.left} + var(--gn-aside-header-size))`,\n });\n }\n\n return {\n ...res,\n style: {\n ...res?.style,\n ...style,\n },\n };\n },\n [cellAttrs],\n );\n\n const headerCellAttributes = React.useCallback<\n Exclude<typeof props.headerCellAttributes & Function, undefined>\n >(\n (header) => {\n const res =\n typeof headerCellAttrs === 'function' ? headerCellAttrs(header) : headerCellAttrs;\n\n const style = {...getCellStyles(header)};\n if (style.left !== undefined) {\n Object.assign(style, {left: `calc(${style.left} + var(--gn-aside-header-size))`});\n }\n\n return {\n ...res,\n style: {\n ...res?.style,\n ...style,\n },\n };\n },\n [headerCellAttrs],\n );\n\n return (\n <div className={block({virtualized}, className)} ref={setElement}>\n <Table\n className={block('table')}\n stickyHeader\n rowClassName={rowClassNameFn}\n {...virtualizerProps}\n {...props}\n cellAttributes={cellAttributes}\n headerCellAttributes={headerCellAttributes}\n renderSortIndicator={(sortProps) => {\n if (renderSortIndicator) {\n return renderSortIndicator(sortProps);\n }\n return <YTSortIndicator {...sortProps} />;\n }}\n />\n </div>\n );\n}\n\nexport function TableCell({\n children,\n ...rest\n}: {children: React.ReactNode} & Partial<Pick<Omit<FlexProps, 'style'>, 'justifyContent'>>) {\n return (\n <Flex\n {...rest}\n style={{height: '100%', width: '100%', overflow: 'hidden'}}\n alignItems=\"center\"\n wrap=\"nowrap\"\n >\n {children}\n </Flex>\n );\n}\n","import React from 'react';\n\nexport function useScrollMargin({\n element,\n timeout = 1000,\n}: {\n element: Element | undefined | null;\n timeout?: number;\n}) {\n const [scrollMargin, setScrollMargin] = React.useState<number>();\n\n React.useEffect(() => {\n if (!element) {\n return undefined;\n }\n\n const id = setInterval(() => {\n const {y: bodyY} = document.body.getBoundingClientRect();\n const {y} = element.getBoundingClientRect();\n\n const diff = Math.round(y - bodyY);\n\n if (scrollMargin !== diff) {\n setScrollMargin(diff);\n }\n }, timeout);\n\n return () => clearInterval(id);\n }, [scrollMargin, element, timeout]);\n\n return scrollMargin;\n}\n","import React from 'react';\nimport moment from 'moment';\nimport cn from 'bem-cn-lite';\n\nimport {\n NumberInputWithError,\n NumberInputWithErrorProps,\n} from '../../components/NumberInput/NumberInput';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport Icon from '../../components/Icon/Icon';\n\nimport './TimeDuration.scss';\n\nconst block = cn('yt-time-duration');\n\nexport type TimeDurationProps = {\n className?: string;\n\n value: NumberInputWithErrorProps['value'];\n error?: string;\n onChange: (value: TimeDurationProps['value']) => void;\n};\n\nexport function TimeDuration({value, onChange, error}: TimeDurationProps) {\n return (\n <div className={block()}>\n <NumberInputWithError\n className={block('input')}\n value={{...value, value: value?.value, error: value?.error ?? error}}\n onChange={onChange}\n formatFn={formatTimeDuration}\n parseFn={parseTimeDuration}\n />\n <Tooltip\n content={\n <div>\n <MetaTable\n items={[\n makeItems({\n y: 'years',\n w: 'weeks',\n M: 'months',\n d: 'days',\n }),\n makeItems({\n h: 'hours',\n m: 'minutes',\n s: 'seconds',\n ms: 'milliseconds',\n }),\n ]}\n />\n 1M=30d\n <br />\n <br />\n Examles: 1M2d3h, 4h15m\n </div>\n }\n >\n <Icon className={block('info')} awesome={'question-circle'} />\n </Tooltip>\n </div>\n );\n}\n\nTimeDuration.hasErrorRenderer = true;\n\nTimeDuration.getDefaultValue = (): TimeDurationProps['value'] => {\n return {value: undefined};\n};\n\nTimeDuration.isEmpty = (v: TimeDurationProps['value']) => {\n return !v;\n};\n\nTimeDuration.validator = (v: TimeDurationProps['value']) => {\n return v?.error;\n};\n\nexport function formatTimeDuration(value?: number) {\n if (!value && value !== 0) {\n return '';\n }\n\n let rest = value;\n let res = '';\n\n const h = 3600 * 1000;\n const d = 24 * h;\n const M = 30 * d;\n const y = 365 * d;\n\n const parts = {\n y,\n M,\n d,\n h,\n m: 60 * 1000,\n s: 1000,\n ms: 1,\n };\n\n Object.keys(parts).forEach((k) => {\n const p: number = parts[k as keyof typeof parts];\n const count = Math.floor(rest / p);\n if (count > 0) {\n res += `${count}${k} `;\n rest -= count * p;\n }\n });\n\n return res;\n}\n\nexport function parseTimeDuration(rawValue: string) {\n if (!rawValue) {\n return {value: undefined};\n }\n\n if (!/^[\\d\\sa-zA-Z]*$/.test(rawValue)) {\n return {value: undefined, error: 'only digits and latin characters are allowed'};\n }\n\n const skipSpaces = rawValue.replace(/\\s+/g, '');\n const res = [...skipSpaces.matchAll(/\\d+[a-zA-Z]*/g)];\n if (!res.length || res[0].index !== 0) {\n return {value: undefined, error: 'wrong format'};\n }\n\n let value = 0;\n for (const match of res) {\n const {[0]: digits, input} = match[0].match(/\\d+/) || {};\n if (!digits) {\n return {value: undefined, error: 'wring fromat 1'};\n }\n\n const type = input?.substring(digits.length) ?? '';\n const d = Number(digits);\n const toAdd = moment.duration(d, type as any).valueOf() as number;\n if (toAdd === 0 && d !== 0) {\n return {value: undefined, error: `wrong format of ${input}`};\n }\n\n value += toAdd;\n }\n return {value};\n}\n\nfunction makeItems(data: Record<string, string>) {\n return Object.keys(data).map((key) => ({key: key, label: key, value: data[key]}));\n}\n","import {createSelector} from 'reselect';\n\nimport compact_ from 'lodash/compact';\nimport filter_ from 'lodash/filter';\nimport flatten_ from 'lodash/flatten';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\nimport uniq_ from 'lodash/uniq';\nimport partition_ from 'lodash/partition';\nimport isEqual_ from 'lodash/isEqual';\nimport some_ from 'lodash/some';\n\nimport {calculateLoadingStatus} from '../../utils/utils';\nimport {concatByAnd} from '../../common/hammer/predicate';\nimport {\n getAclFilterColumnGroupName,\n getAclFilterColumns,\n getAclFilterExpandedSubjects,\n getApproversSubjectFilter,\n getObjectPermissionsFilter,\n getObjectSubjectFilter,\n} from './acl-filters';\nimport UIFactory from '../../UIFactory';\nimport {RootState} from '../../store/reducers';\nimport {IdmKindType, PreparedAclSubject} from '../../utils/acl/acl-types';\nimport {YTPermissionTypeUI} from '../../utils/acl/acl-api';\nimport {PreparedRole} from '../../utils/acl';\n\nexport type PreparedAclSubjectColumn = Omit<PreparedAclSubject, 'type'> & {type: 'columns'};\n\nfunction prepareColumnsNames(columnsPermissions: Array<{columns?: Array<string>}>) {\n const columns = map_(columnsPermissions, (permission) => permission.columns);\n\n return compact_(uniq_(flatten_(columns))).sort();\n}\n\nfunction prepareApprovers(\n approvers: Array<PreparedRole> | undefined,\n type: 'read_approver' | 'responsible' | 'auditor',\n) {\n return map_(approvers, (subject) => {\n const extra = {\n type,\n subjects: [subject.value],\n subjectType: subject.type === 'users' ? ('user' as const) : ('group' as const),\n groupInfo:\n subject.type === 'groups'\n ? {name: subject.group_name, url: subject.url, group: undefined}\n : undefined,\n action: undefined,\n };\n return {\n ...subject,\n ...extra,\n };\n });\n}\n\nexport type PreparedApprover = ReturnType<typeof prepareApprovers>[number];\n\nexport const getAllUserPermissions = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].userPermissions;\nconst getAllObjectPermissions = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].objectPermissions;\n\nconst getAllObjectPermissionsWithSplittedSubjects = createSelector(\n [getAllObjectPermissions],\n splitSubjects,\n);\n\nexport const getObjectPermissionsTypesList = (idmKind: IdmKindType) => {\n return createSelector(\n [\n getObjectPermissionsFilter,\n (state) => getAllObjectPermissionsWithSplittedSubjects(state, idmKind),\n ],\n (permissionsFilter, items) => {\n const uniquePermisions = new Set<YTPermissionTypeUI>();\n const {permissionTypes} = UIFactory.getAclPermissionsSettings()[idmKind] || {};\n [...permissionTypes, ...permissionsFilter].forEach((permission) =>\n uniquePermisions.add(permission),\n );\n items.forEach((item) => {\n const {permissions} = item;\n permissions?.forEach((permission) => uniquePermisions.add(permission));\n });\n return sortBy_([...uniquePermisions], (permission) => permission);\n },\n );\n};\n\ntype HasSplitted = {\n isSplitted?: boolean;\n subjectIndex?: number;\n};\n\nfunction splitSubjects<T extends {subjects: Array<unknown>}>(items: Array<T>) {\n const res: Array<T & HasSplitted> = [];\n forEach_(items, (item) => {\n const {subjects} = item;\n if (subjects && subjects.length > 1) {\n forEach_(subjects, (subject, index) => {\n res.push({...item, subjects: [subject], isSplitted: true, subjectIndex: index});\n });\n } else {\n res.push(item);\n }\n });\n return res;\n}\n\nfunction subjectFilterPredicate<\n T extends {subjectType?: unknown; groupInfo?: unknown; subjects: Array<unknown>},\n>(item: T, filter: string) {\n const {subjectType, groupInfo} = item;\n if (subjectType === 'group') {\n return some_(Object.entries(groupInfo ?? {}), ([key, value]) => {\n let str: string | undefined = String(value);\n if (key === 'url') {\n if (str[str.length - 1] === '/') str = str.slice(0, -1);\n str = str.split('/').pop();\n }\n return -1 !== str?.toLowerCase().indexOf(filter);\n });\n }\n const value = String(item.subjects[0] ?? '');\n return -1 !== value.toLowerCase().indexOf(filter);\n}\n\nfunction FilterBySubject<\n T extends {subjectType?: unknown; groupInfo?: unknown; subjects: Array<unknown>},\n>(items: Array<T>, subjectFilter?: string) {\n if (!subjectFilter) return items;\n const lowerNameFilter = subjectFilter.toLowerCase();\n return filter_(items, (item) => subjectFilterPredicate(item, lowerNameFilter));\n}\n\nconst permissionsFilterPredicate = (item: PreparedAclSubject, filter: Set<YTPermissionTypeUI>) => {\n const {permissions} = item;\n let foundCount = 0;\n return permissions?.some((p) => {\n if (filter.has(p)) {\n foundCount++;\n }\n return foundCount >= filter.size;\n });\n};\n\ntype ObjectPermissionsRow = PreparedAclSubject & HasSplitted;\n\nexport const getAllObjectPermissionsFiltered = createSelector(\n [\n getAllObjectPermissionsWithSplittedSubjects,\n getObjectSubjectFilter,\n getObjectPermissionsFilter,\n getAclFilterColumns,\n ],\n (items, subjectFilter, permissionsFilter, columns) => {\n const [mainPermissions, columnPermissions] = partition_(\n items,\n (item) => !item.columns?.length,\n );\n\n const withColumns = columnPermissions.map((item) => {\n return {...item, columns: sortBy_(item.columns)};\n });\n\n const lowerNameFilter = subjectFilter?.toLocaleLowerCase();\n const filterBySubject = lowerNameFilter\n ? (item: ObjectPermissionsRow) => subjectFilterPredicate(item, lowerNameFilter)\n : undefined;\n\n const permissionsFilterSet = new Set<YTPermissionTypeUI>(permissionsFilter);\n const filterByPermissions = permissionsFilterSet.size\n ? (item: ObjectPermissionsRow) =>\n permissionsFilterPredicate(item, permissionsFilterSet) ?? false\n : undefined;\n\n const visibleColumns = new Set(columns);\n const filterByColumns = visibleColumns.size\n ? ({columns}: ObjectPermissionsRow) => {\n return columns?.some((colName) => visibleColumns.has(colName)) ?? false;\n }\n : undefined;\n\n const mainPredicates = compact_([filterBySubject, filterByPermissions]);\n const columnsPredicates = compact_([filterBySubject, filterByColumns]);\n return {\n mainPermissions: mainPredicates.length\n ? mainPermissions.filter(concatByAnd(...mainPredicates))\n : mainPermissions,\n columnsPermissions: columnsPredicates.length\n ? withColumns.filter(concatByAnd(...columnsPredicates))\n : withColumns,\n };\n },\n);\n\nexport const getObjectPermissionsAggregated = createSelector(\n [getAllObjectPermissionsFiltered, getAclFilterExpandedSubjects],\n ({mainPermissions, columnsPermissions}, expandedSubjects) => {\n return {\n mainPermissions: {\n ...aggregateBySubject(mainPermissions, expandedSubjects),\n count: mainPermissions.length,\n },\n columnsPermissions: {\n ...aggregateBySubject(columnsPermissions, expandedSubjects),\n count: columnsPermissions.length,\n },\n };\n },\n);\n\nclass AggregateBySubject {\n aggrKey: string;\n subject: ObjectPermissionsRow['subjects'][number];\n inherited: boolean;\n\n allPermissions = new Set<YTPermissionTypeUI>();\n columns = new Set<string>();\n first: ObjectPermissionsRow;\n children = new Array<ObjectPermissionsRow & {expanded?: boolean; level?: number}>();\n\n constructor(first: AggregateBySubject['first']) {\n if (first.subjects.length > 1) {\n throw new Error(\n `Unexpected behavior: more than one subject occured: ${first.subjects.join(',')}`,\n );\n }\n\n this.aggrKey = aggregationKey(first);\n this.inherited = Boolean(first.inherited);\n this.subject = first.subjects[0];\n this.first = {...first};\n this.add(first);\n }\n\n add(item: ObjectPermissionsRow) {\n const aggrKey = aggregationKey(item);\n if (this.aggrKey !== aggrKey) {\n throw new Error(\n `Unexpected behavior: aggregation keys are not queal: ${this.aggrKey} !== ${aggrKey}`,\n );\n }\n\n if (item.subjects.length !== 1) {\n throw new Error(\n `Unexpected behavior: item.subjects.length !== 1: ${JSON.stringify(item)}`,\n );\n }\n\n const child = {...item, permissions: [...(item.permissions ?? [])]};\n this.children.push(child);\n\n child.permissions?.sort();\n child.permissions?.forEach((p) => {\n this.allPermissions.add(p);\n });\n item.columns?.forEach((column) => this.columns.add(column));\n\n this.first.isMissing ||= Boolean(item.isMissing);\n this.first.isUnrecognized ||= Boolean(item.isUnrecognized);\n this.first.isApproved ||= Boolean(item.isApproved);\n this.first.isRequested ||= Boolean(item.isRequested);\n }\n\n getItems(expanded: boolean): {\n items: AggregateBySubject['children'];\n hasExpandable?: boolean;\n hasDenyAction?: boolean;\n hasInherited?: boolean;\n } {\n const hasInherited = this.inherited;\n if (this.children.length === 1) {\n return {items: this.children, hasInherited};\n }\n\n const first: typeof this.first & {level?: number; expanded?: boolean} = {\n ...this.first,\n level: 0,\n expanded,\n };\n first.permissions = [...this.allPermissions].sort();\n first.columns = [...this.columns].sort();\n\n let hasDenyAction = false;\n const items = !expanded\n ? [first]\n : [\n first,\n ...sortBy_(this.children, ['inheritance_mode', 'permissions']).map((i) => {\n hasDenyAction ||= i.action === 'deny';\n return {...i, level: 1};\n }),\n ];\n\n this.children.forEach((i) => {\n if (i.inheritance_mode !== first.inheritance_mode) {\n first.inheritance_mode = undefined;\n }\n if (!isEqual_(this.first.inheritedFrom, i.inheritedFrom)) {\n first.inheritedFrom = undefined;\n }\n });\n\n return {items, hasExpandable: true, hasDenyAction, hasInherited};\n }\n}\n\nexport type ObjectPermissionRowWithExpand = AggregateBySubject['children'][number];\n\nfunction aggregationKey(item: ObjectPermissionsRow) {\n const {\n inherited,\n subjects: [subject],\n } = item;\n return `subject:${subject}_inherited:${Boolean(inherited)}`;\n}\n\nfunction aggregateBySubject(\n objPermissions: Array<ObjectPermissionsRow>,\n expandedSubjects: Set<string | number>,\n) {\n const aggregated: Record<string, AggregateBySubject> = {};\n\n objPermissions.forEach((item) => {\n const aggKey = aggregationKey(item);\n const dst = aggregated[aggKey];\n if (!dst) {\n aggregated[aggKey] = new AggregateBySubject(item);\n } else {\n dst.add(item);\n }\n });\n\n const res = Object.values(aggregated).reduce(\n (acc, item) => {\n const {items, hasExpandable, hasInherited} = item.getItems(\n expandedSubjects.has(item.subject),\n );\n acc.items = acc.items.concat(items);\n acc.hasExpandable ||= hasExpandable;\n acc.hasInherited ||= hasInherited;\n return acc;\n },\n {items: []} as ReturnType<AggregateBySubject['getItems']>,\n );\n\n const [inherited, other] = partition_(res.items, (item) => item.inherited);\n\n return {\n ...res,\n items: [...inherited, ...other],\n };\n}\n\nexport const getAllObjectPermissionsOrderedByStatus = createSelector(\n [getAllObjectPermissions],\n OrderByRoleStatus,\n);\nexport const getAllColumnGroups = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].columnGroups;\nexport const getAllColumnGroupsActual = createSelector(\n [getAllColumnGroups, getAclFilterColumns, getAclFilterColumnGroupName],\n (items, columnsFilter, nameFilter) => {\n const visibleColumns = new Set(columnsFilter);\n type ItemType = (typeof items)[number];\n const nameFilterLower = nameFilter?.toLowerCase();\n const predicates = compact_([\n (item: ItemType) => {\n return !item.removed;\n },\n visibleColumns.size > 0\n ? (item: ItemType) => {\n return item.columns?.some((name) => visibleColumns.has(name)) ?? false;\n }\n : undefined,\n nameFilterLower?.length\n ? (item: ItemType) =>\n -1 !== (item.name?.toLowerCase()?.indexOf(nameFilterLower) ?? -1)\n : undefined,\n ]);\n const filtered = filter_(items, concatByAnd(...predicates)).map((item) => {\n return {...item, columns: sortBy_(item.columns)};\n });\n return sortBy_(filtered, ['name']);\n },\n);\n\nfunction OrderByRoleStatus<\n T extends {\n isDepriving?: boolean;\n isRequested?: boolean;\n isUnrecognized?: boolean;\n isApproved?: boolean;\n },\n>(items: Array<T>) {\n const unrecognized: typeof items = [];\n const requested: typeof items = [];\n const depriving: typeof items = [];\n const rest: typeof items = [];\n forEach_(items, (item) => {\n const {isDepriving, isRequested, isUnrecognized, isApproved} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n depriving.push(item);\n } else if (isRequested || isApproved) {\n requested.push(item);\n } else {\n rest.push(item);\n }\n });\n return [...requested, ...depriving, ...unrecognized, ...rest];\n}\n\nfunction OrderByInheritanceAndSubject<T extends {inherited?: boolean; subjects: Array<unknown>}>(\n items: Array<T>,\n) {\n const res = sortBy_(items, [\n (item) => !item.inherited,\n (item) => (item.subjects && item.subjects[0]) || true,\n ]);\n return res;\n}\n\nconst getReadApprovers = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].readApprovers;\nconst getResponsibles = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].responsible;\nconst getAuditors = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].auditors;\n\nexport const getNotInheritedReadApprovers = createSelector([getReadApprovers], (readApprovers) =>\n filter_(readApprovers, (readApprover) => !readApprover.inherited),\n);\nexport const getNotInheritedResponsibles = createSelector([getResponsibles], (responsibles) =>\n filter_(responsibles, (responsible) => !responsible.inherited),\n);\nexport const getNotInheritedAuditors = createSelector([getAuditors], (auditros) =>\n filter_(auditros, (auditro) => !auditro.inherited),\n);\n\nconst getAllApprovers = createSelector(\n [getReadApprovers, getResponsibles, getAuditors],\n (readApprovers, responsibles, auditros) => {\n return [\n ...prepareApprovers(readApprovers, 'read_approver'),\n ...prepareApprovers(responsibles, 'responsible'),\n ...prepareApprovers(auditros, 'auditor'),\n ];\n },\n);\n\nexport const getHasApprovers = createSelector([getAllApprovers], (items) => items.length > 0);\n\nexport const getApproversFiltered = createSelector(\n [getAllApprovers, getApproversSubjectFilter],\n FilterBySubject,\n);\n\nexport const getApproversFilteredAndOrdered = createSelector(\n [getApproversFiltered],\n OrderByInheritanceAndSubject,\n);\n\nexport const getApprovers = createSelector([getAllApprovers], OrderByRoleStatus);\n\nexport const getAllAccessColumnsPermissions = createSelector(\n [getAllObjectPermissions],\n (objectPermissions) => {\n const filteredPermissions = filter_(\n objectPermissions,\n (permission) => permission.action === 'allow' && permission.columns?.length! > 0,\n );\n\n return map_(filteredPermissions, (item) => {\n const tmp: typeof item = {...item};\n tmp.type = 'columns';\n return tmp;\n });\n },\n);\n\nconst getAllDenyColumnsPermissions = createSelector(\n [getAllObjectPermissions],\n (objectPermissions) => {\n const filteredPermissions = filter_(\n objectPermissions,\n (permission) => permission.action === 'deny' && permission.columns?.length! > 0,\n );\n\n return map_(\n filteredPermissions,\n (permission) =>\n ({\n ...permission,\n type: 'columns',\n }) as PreparedAclSubjectColumn,\n );\n },\n);\n\nexport const getAllAccessColumnsNames = createSelector(\n [getAllAccessColumnsPermissions],\n prepareColumnsNames,\n);\n\nexport const getAllDenyColumnsNames = createSelector(\n [getAllDenyColumnsPermissions],\n prepareColumnsNames,\n);\n\nexport const getDenyColumnsItems = createSelector([getAllDenyColumnsNames], (names) =>\n map_(names, (name) => ({key: name, value: name, title: name})),\n);\n\nexport const isPermissionDeleted = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].isPermissionDeleted;\nexport const permissionDeletionError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].deletionError;\nexport const getLastDeletedPermissionKey = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].deletedItemKey;\nexport const getIdmPermissionsRequestError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].idmPermissionsRequestError;\nexport const getIdmManageAclRequestError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].idmManageAclRequestError;\nexport const getIdmPathVersion = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].version;\n\nconst getAclLoading = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].loading;\nconst getAclLoaded = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].loaded;\nconst getAclError = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].error;\n\nexport const getAclLoadState = createSelector(\n [getAclLoading, getAclLoaded, getAclError],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n","import {block} from '../utils/cn';\n\nexport const progressBlock = block('progress');\n","import type * as React from 'react';\n\nimport {progressBlock} from './constants';\n\nexport interface ProgressInnerTextProps {\n text?: React.ReactNode;\n offset?: number;\n}\n\nexport function ProgressInnerText(props: ProgressInnerTextProps) {\n const {text, offset = 0} = props;\n\n if (!text) {\n return null;\n }\n\n return (\n <div\n className={progressBlock('text-inner')}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))`}}\n >\n {text}\n </div>\n );\n}\n","import type {CnMods} from '../utils/cn';\n\nimport {progressBlock} from './constants';\nimport type {Stack} from './types';\n\nexport interface ProgressStackItemProps {\n item: Stack;\n}\n\nexport function ProgressStackItem({item}: ProgressStackItemProps) {\n const {value, color, className, theme, title, content, loading} = item;\n const modifiers: CnMods = {\n loading,\n };\n\n if (typeof color === 'undefined') {\n modifiers.theme = theme || 'default';\n }\n\n if (Number.isFinite(value)) {\n return (\n <div\n className={progressBlock('item', modifiers, className)}\n style={{width: `${value}%`, backgroundColor: color}}\n title={title}\n >\n {content}\n </div>\n );\n }\n\n return null;\n}\n","import type {ProgressTheme, ProgressWithValueProps, Stack} from './types';\n\nexport function getOffset(value: number): number {\n return value < 100 ? value - 100 : 0;\n}\n\nexport function getValueFromStack(stack: Stack[]): number {\n return stack.reduce((sum, {value}) => sum + value, 0);\n}\n\nexport function getTheme(props: ProgressWithValueProps): ProgressTheme {\n const {theme, colorStops, colorStopsValue, value} = props;\n\n if (colorStops) {\n const matchingColorStopItem = colorStops.find((item, index) => {\n const currentValue = typeof colorStopsValue === 'number' ? colorStopsValue : value;\n const minValue = index > 1 ? colorStops[index - 1].stop : 0;\n const maxValue = index < colorStops.length - 1 ? item.stop : 100;\n\n return currentValue >= minValue && currentValue <= maxValue;\n });\n\n return matchingColorStopItem ? matchingColorStopItem.theme : (theme as ProgressTheme);\n }\n\n return theme as ProgressTheme;\n}\n","import {ProgressInnerText} from './ProgressInnerText';\nimport {ProgressStackItem} from './ProgressStackItem';\nimport {progressBlock} from './constants';\nimport type {ProgressWithStackProps} from './types';\nimport {getOffset, getValueFromStack} from './utils';\n\nexport function ProgressWithStack(props: ProgressWithStackProps) {\n const {stack, stackClassName, value, text} = props;\n const offset = getOffset(value || getValueFromStack(stack));\n\n return (\n <div\n className={progressBlock('stack', stackClassName)}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))`}}\n >\n <div className={progressBlock('item')} style={{width: `${-offset}%`}} />\n {stack.map((item, index) => (\n <ProgressStackItem key={index} item={item} />\n ))}\n <ProgressInnerText offset={offset} text={text} />\n </div>\n );\n}\n","import {ProgressInnerText} from './ProgressInnerText';\nimport {progressBlock} from './constants';\nimport type {ProgressWithValueProps} from './types';\nimport {getOffset, getTheme} from './utils';\n\nexport function ProgressWithValue(props: ProgressWithValueProps) {\n const {value, loading, text} = props;\n const offset = getOffset(value);\n\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return (\n <div\n className={progressBlock('item', {theme: getTheme(props), loading})}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))`}}\n >\n <ProgressInnerText offset={offset} text={text} />\n </div>\n );\n}\n","import type * as React from 'react';\n\nimport type {QAProps} from '../types';\n\nexport type ProgressTheme = 'default' | 'success' | 'warning' | 'danger' | 'info' | 'misc';\nexport type ProgressSize = 'xs' | 's' | 'm';\nexport type ProgressValue = number;\n\nexport interface Stack {\n value: ProgressValue;\n color?: string;\n title?: string;\n theme?: ProgressTheme;\n loading?: boolean;\n className?: string;\n content?: React.ReactNode;\n}\n\nexport interface ProgressColorStops {\n theme: ProgressTheme;\n stop: number;\n}\n\ninterface ProgressGeneralProps extends QAProps {\n /** ClassName of element */\n className?: string;\n}\n\nexport interface ProgressDefaultProps {\n /** Text inside progress bar */\n text: React.ReactNode;\n /** Theme */\n theme: ProgressTheme;\n /** Size. Text of progress bar is displayed in `m` size only. */\n size: ProgressSize;\n /** Loading. Аdds loading animation */\n loading?: boolean;\n}\n\nexport interface ProgressWithValueProps\n extends ProgressGeneralProps,\n Partial<ProgressDefaultProps> {\n /** Current progress value. Available range is from 0 to 100. If `stack` property is passed `value` is not required and behaves as maxValue. */\n value: ProgressValue;\n /** ProgressTheme breakpoints. [Details](#colorstops) */\n colorStops?: ProgressColorStops[];\n /** Alternative value of `colorStops`. Available range is from 0 to 100. */\n colorStopsValue?: ProgressValue;\n}\n\nexport interface ProgressWithStackProps\n extends ProgressGeneralProps,\n Partial<ProgressDefaultProps> {\n /** Configuration of composite progress bar. Not required if a `value` property is passed. [Details](#stack) */\n stack: Stack[];\n value?: ProgressValue;\n /** ClassName of stack element */\n stackClassName?: string;\n}\n\nexport type ProgressProps = ProgressWithStackProps | ProgressWithValueProps;\n\nexport function isProgressWithStack(props: ProgressProps): props is ProgressWithStackProps {\n return (props as ProgressWithStackProps).stack !== undefined;\n}\n","import * as React from 'react';\n\nimport {ProgressWithStack} from './ProgressWithStack';\nimport {ProgressWithValue} from './ProgressWithValue';\nimport {progressBlock} from './constants';\nimport type {ProgressProps} from './types';\nimport {isProgressWithStack} from './types';\n\nimport './Progress.scss';\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(props, ref) {\n const {text = '', theme = 'default', size = 'm', loading = false, className, qa} = props;\n const resolvedProps: ProgressProps = {...props, text, theme, size, loading};\n\n return (\n <div ref={ref} className={progressBlock({size}, className)} data-qa={qa}>\n <div className={progressBlock('text')}>{text}</div>\n {isProgressWithStack(resolvedProps) ? (\n <ProgressWithStack {...resolvedProps} />\n ) : (\n <ProgressWithValue {...resolvedProps} />\n )}\n </div>\n );\n },\n);\n","import React from 'react';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {KeysByType} from '../../../@types/types';\nimport {DescribedSettings} from '../../../shared/constants/settings-types';\n\nimport {getSettingsData} from '../../store/selectors/settings/settings-base';\nimport {setSettingByKey} from '../../store/actions/settings';\nimport {RootState} from '../../store/reducers';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\n\nconst DOUBLE_CLICK_TIMEOUT = 500;\n\ntype ColumnSizes = Record<string, number>;\n\nexport function useSettingsColumnSizes<\n K extends KeysByType<DescribedSettings, Record<string, number>>,\n>(key: K, {minWidth = 50, maxWidth = 800}: {minWidth?: number; maxWidth?: number} = {}) {\n const dispatch = useDispatch();\n const columnSizes = useSelector(getSettingsData)[key] ?? {};\n\n type UpdateFn = ColumnSizes | ((oldState: ColumnSizes) => ColumnSizes);\n\n const lastRef = React.useRef<{changes?: ColumnSizes; time: number}>({time: 0});\n\n return {\n columnSizes,\n setColumnSizes: (updateFn: UpdateFn) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevColumnSizes = getSettingsData(getState())[key] ?? {};\n const changes = 'function' === typeof updateFn ? updateFn({}) : updateFn;\n const newValue = {\n ...prevColumnSizes,\n ...changes,\n };\n\n const time = Date.now();\n if (\n time - lastRef.current.time < DOUBLE_CLICK_TIMEOUT &&\n isEqual_(lastRef.current.changes, changes)\n ) {\n Object.keys(changes).forEach((k) => {\n delete newValue[k];\n });\n }\n\n Object.assign(lastRef.current, {time, changes});\n\n if (!isEqual_(prevColumnSizes, newValue)) {\n dispatch(\n setSettingByKey(\n key,\n Object.entries(newValue).reduce(\n (acc, [k, value]) => {\n acc[k] = Math.max(minWidth, Math.min(maxWidth, value));\n return acc;\n },\n {} as Record<string, number>,\n ),\n ),\n );\n }\n });\n },\n };\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport ReactList from 'react-list';\nimport block from 'bem-cn-lite';\n\nimport isNumber_ from 'lodash/isNumber';\nimport isObject_ from 'lodash/isObject';\nimport partition_ from 'lodash/partition';\n\nimport {Popup, PopupProps, TextInput, TextInputProps} from '@gravity-ui/uikit';\n\nimport templates from '../../components/templates/utils';\n\nimport './Suggest.scss';\n\nconst b = block('suggest');\n\n// TODO add is scrolled into view logic\n// TODO support custom item height\n\nexport const itemsProps = PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n value: PropTypes.string,\n text: PropTypes.string,\n counter: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n }),\n ]),\n);\n\ninterface Item {\n value: string;\n text: string;\n counter?: string | number;\n}\n\nconst ESCAPE = 27;\nconst ENTER = 13;\nconst ARROW_UP = 38;\nconst ARROW_DOWN = 40;\n\n/*const TAB = 9;\nconst CTRL = 16;\nconst ALT = 17;\nconst ARROW_LEFT = 37;\nconst ARROW_RIGHT = 39;\nconst COMMAND = 91;*/\n\nexport interface SuggestProps {\n className?: string;\n\n filter: (items: SuggestProps['items'], text?: string) => SuggestProps['items'];\n apply?: (value: SuggestItem) => void;\n onTextUpdate?: (text: string) => void;\n onItemClick?: (item: SuggestItem) => void;\n clear?: () => void;\n placeholder?: string;\n autoFocus?: boolean;\n text?: string;\n defaultText?: string;\n disabled?: boolean;\n template?: {\n key: string;\n };\n items: Array<SuggestItem>;\n maxItems?: number | {totalAmount: number; groupPredicate: () => void};\n\n zIndexGroupLevel?: number;\n onBlur?: () => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n pin?: TextInputProps['pin'];\n onOpenChange?: (p: {open: boolean}) => void;\n popupClassName?: string;\n popupPlacement?: PopupProps['placement'];\n\n renderItem?: (item: SuggestItem) => React.ReactNode;\n}\n\nexport type SuggestItem = string | Item;\n\ninterface State {\n text?: string;\n items: SuggestProps['items'];\n selectedIndex: number;\n popupVisible: boolean;\n\n prevItems: SuggestProps['items'];\n\n focused?: boolean;\n}\n\nexport default class Suggest extends Component<SuggestProps, State> {\n static defaultProps = {\n disable: false,\n text: '',\n autoFocus: false,\n items: [],\n zIndexGroupLevel: 1,\n onBlur: () => {},\n focused: false,\n };\n\n private input = React.createRef<HTMLInputElement>();\n private isClearClicked = false; // the flag for the correct render text-input view after clear button click\n private isUnmounting = false;\n private skipApplyForNextBlur = false;\n\n constructor(props: SuggestProps) {\n super(props);\n\n this.state = {\n text: 'text' in props ? props.text : props.defaultText,\n items: props.items,\n selectedIndex: 0,\n popupVisible: false,\n prevItems: [],\n };\n\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.hideSuggestions = this.hideSuggestions.bind(this);\n this.clearSuggestions = this.clearSuggestions.bind(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static getDerivedStateFromProps(props: SuggestProps, prevState: State) {\n const text = !prevState.focused && 'text' in props ? props.text : prevState.text;\n\n if (props.items === prevState.prevItems && text === prevState.text) {\n return null;\n }\n\n const items = props.filter(props.items, text);\n const res = {items, prevItems: props.items, text};\n\n return res;\n }\n\n componentDidMount() {\n this.isClearClicked = false;\n }\n\n componentWillUnmount() {\n this.isUnmounting = true;\n }\n\n // eslint-disable-next-line react/sort-comp\n onTextUpdate = (text: string) => {\n const {clear, onTextUpdate} = this.props;\n\n this.setState({text});\n this.loadSuggestions(text);\n\n if (!text.length) {\n clear?.();\n }\n\n onTextUpdate?.(text);\n };\n\n onFocus() {\n // make sure that suggestions popup is visible only if onFocus() invocation was not followed\n // by onClearClick() invocation (which sets the flag to true afterwards), since onFocus event\n // always happen first when any action is made within text input\n this.setState({focused: true});\n\n this.isClearClicked = false;\n this.loadSuggestions(this.state.text);\n this.skipApplyForNextBlur = false;\n this.props.onFocus?.();\n }\n\n onBlur() {\n this.hideSuggestions();\n if (!this.isClearClicked) {\n this.props.onBlur?.();\n }\n if (!this.skipApplyForNextBlur) {\n this.applySuggestion(this.state.text ?? '');\n }\n this.setState({focused: false});\n }\n\n onKeyDown(evt: React.KeyboardEvent<HTMLElement>) {\n const key = evt.keyCode;\n\n if (key === ARROW_DOWN) {\n evt.preventDefault();\n this.selectNextSuggestion();\n } else if (key === ARROW_UP) {\n evt.preventDefault();\n this.selectPrevSuggestion();\n } else if (key === ENTER) {\n this.applyOrClearSuggestion();\n } else if (key === ESCAPE) {\n this.input.current?.blur();\n }\n }\n\n hideSuggestions() {\n this.setState({items: [], popupVisible: false, selectedIndex: 0});\n this.props.onOpenChange?.({open: false});\n }\n\n showSuggestions = (items: SuggestProps['items']) => {\n if (!this.isUnmounting) {\n this.setState({\n items,\n popupVisible: true,\n selectedIndex: 0,\n });\n this.props.onOpenChange?.({open: true});\n }\n };\n\n loadSuggestions(text?: string) {\n const {filter, items} = this.props;\n\n Promise.resolve(filter(items, text)).then(this.showSuggestions);\n }\n\n clearSuggestions() {\n const {clear} = this.props;\n\n clear?.();\n // update flag value not to show suggestions after function clear() have change input value for ''\n // and on input change event listener will call popup render\n this.isClearClicked = true;\n\n this.input.current?.blur();\n }\n\n applySuggestion(text: string) {\n const {apply} = this.props;\n this.setState({text});\n apply?.(text);\n this.input.current?.blur();\n }\n\n getItemIndex(selectedIndex: number) {\n return selectedIndex - 1;\n }\n\n getSelectedIndex(itemIndex: number) {\n return itemIndex + 1;\n }\n\n getItemValue(item: string | Item) {\n return typeof item === 'string' ? item : item.value;\n }\n\n applyOrClearSuggestion() {\n const {selectedIndex, items} = this.state;\n\n let item: SuggestItem | undefined;\n\n if (selectedIndex === 0) {\n if (items.length > 0) {\n item = items[0];\n }\n } else {\n item = items[this.getItemIndex(selectedIndex)];\n }\n\n if (item) {\n const value = this.getItemValue(item);\n this.applySuggestion(value);\n const {onItemClick} = this.props;\n onItemClick?.(item);\n }\n }\n\n selectPrevSuggestion() {\n const {selectedIndex, items} = this.state;\n const prevIndex =\n selectedIndex === 0 ? this.getSelectedIndex(items.length - 1) : selectedIndex - 1;\n this.setState({selectedIndex: prevIndex});\n }\n\n selectNextSuggestion() {\n const {selectedIndex, items} = this.state;\n const nextIndex =\n selectedIndex === this.getSelectedIndex(items.length - 1) ? 0 : selectedIndex + 1;\n this.setState({selectedIndex: nextIndex});\n }\n\n renderInput() {\n const {text} = this.state;\n const {placeholder, autoFocus, disabled, pin} = this.props;\n\n return (\n <TextInput\n hasClear\n value={text}\n className={b('control')}\n placeholder={placeholder}\n disabled={disabled}\n onUpdate={this.onTextUpdate}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n autoFocus={autoFocus}\n controlRef={this.input}\n pin={pin}\n onKeyDown={this.onKeyDown}\n />\n );\n }\n\n renderCounter(item: Item) {\n const counter = item.counter;\n\n return (\n typeof counter !== 'undefined' && <span className={b('item-counter')}>{counter}</span>\n );\n }\n\n renderSimpleItem(item: string | Item) {\n const text = typeof item === 'string' ? item : item.text;\n\n return (\n <span>\n {'string' !== typeof item && this.renderCounter(item)}\n {text}\n </span>\n );\n }\n\n renderItem(\n item: string | Item,\n index: number,\n key: number | string,\n className?: string,\n ): React.ReactElement {\n const {selectedIndex} = this.state;\n const itemClassName = b(\n 'item',\n {\n selected: selectedIndex === this.getSelectedIndex(index) ? 'yes' : undefined,\n },\n className,\n );\n\n const value = this.getItemValue(item);\n\n const {template, renderItem, onItemClick} = this.props;\n\n const renderer =\n renderItem ??\n (typeof template !== 'undefined'\n ? templates.get(template.key).__default__\n : this.renderSimpleItem.bind(this));\n\n return (\n <li\n key={key}\n title={value}\n className={itemClassName}\n onMouseDown={() => {\n this.skipApplyForNextBlur = true;\n onItemClick?.(item);\n this.applySuggestion(value);\n }}\n >\n {renderer(item)}\n </li>\n );\n }\n\n getInputWidth() {\n // Is there a way to avoid using private _control property?\n return this.input.current ? this.input.current.offsetWidth - 2 : 0;\n }\n\n restrictItems(items: Array<string | Item>) {\n const {maxItems} = this.props;\n\n if (isNumber_(maxItems)) {\n return items.slice(0, maxItems || items.length);\n } else if (isObject_(maxItems)) {\n const {totalAmount, groupPredicate} = maxItems;\n const [positiveGroup, negativeGroup] = partition_(items, groupPredicate);\n if (positiveGroup.length && negativeGroup.length) {\n // NOTE: we don't want to one group to be omitted in case there is a large\n // bias towards another group - hence minimum value of 1\n const positiveGroupMaxItems = Math.round(\n Math.max((positiveGroup.length / items.length) * totalAmount, 1),\n );\n return positiveGroup\n .slice(0, positiveGroupMaxItems)\n .concat(negativeGroup.slice(0, totalAmount - positiveGroupMaxItems));\n } else {\n // one group is empty - same case as no groups\n return items.slice(0, totalAmount || items.length);\n }\n } else {\n return items;\n }\n }\n\n renderSuggestions(items: Array<SuggestItem>) {\n const className = b('wrapper');\n const listClassName = b('items');\n\n const itemRenderer = (index: number, key: number | string): JSX.Element =>\n this.renderItem(items[index], index, key);\n\n const showNoItemsMsg = items.length === 0 && this.state.text;\n return (\n items && (\n <div className={className}>\n {showNoItemsMsg && this.renderItem('No items', -1, 'no_items', b('no-items'))}\n <ul className={listClassName} style={{minWidth: this.getInputWidth()}}>\n <ReactList\n itemRenderer={itemRenderer}\n length={items.length}\n type=\"uniform\"\n />\n </ul>\n </div>\n )\n );\n }\n\n renderPopup() {\n const {popupClassName, popupPlacement} = this.props;\n const {popupVisible} = this.state;\n\n const items = this.restrictItems(this.state.items);\n return (\n <Popup\n className={popupClassName}\n placement={popupPlacement ?? 'bottom'}\n anchorElement={this.input.current}\n // don't show popup with suggestions after clear button click\n open={!this.isClearClicked && popupVisible && items.length > 0}\n onOpenChange={(open) => {\n if (!open) {\n this.hideSuggestions();\n }\n }}\n >\n {this.renderSuggestions(items)}\n </Popup>\n );\n }\n\n render() {\n const {className} = this.props;\n return (\n <div className={b(null, className)}>\n {this.renderInput()}\n {this.renderPopup()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\n\nimport './OperationType.scss';\n\nconst block = cn('yt-operation-type');\n\nexport function OperationType({value}: {value?: string}) {\n const text = React.useMemo(() => {\n return format.ReadableField(value);\n }, [value]);\n\n return <span className={block()}>{text}</span>;\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n size={size === 'ss' ? 17 : undefined}\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 headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","size","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","getApproversSubjectFilter","state","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","Object","assign","width","height","getCreatePoolDialogError","scheduling","createPoolDialog","error","getCreatePoolDialogFlatTreeItems","createSelector","treeItems","currentTree","tree","treeName","sortedFlatTree","collectTreeKeys","sort","dst","forEach_","value","key","push","parseValue","rawValue","format","skipSpaces","replace","parseBytes","Number","formatValue","settings","undefined","res","hammer","NO_VALUE","toRawValue","NumberInputWithError","_React$Component","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","concat","parsedValue","NaN","onChange","errorFromValue","formattedValue","setState","parsedError","onBlur","focused","onFocus","onKeyDown","e","keyCode","KeyCode","ENTER","onEnterKeyDown","_inherits","_createClass","this","parseFn","_this$props","decimalPlaces","formatFn","digits","_this$props2","min","max","validator","defaultValue","_objectWithoutProperties","_excluded","_this$props3","showHint","showMin","isNaN","showMax","Tooltip","content","String","placement","_Fragment","_this$props4","hidePrettyValue","_this$props5","defaultValueClassName","TextInput","disabled","pin","bottomLineVisibility","_this$props6","propsValue","showDefaultValue","_this$state","rest","getRestProps","hasClear","err","text","autoComplete","onUpdate","renderDefaultValue","isBottomLineVisible","React","renderPrettyValue","renderMinMaxHint","preciseInitialRawValue","formatted","v","_props$validator","integerOnly","_ref2","defaultProps","NumberInput","_React$Component2","_this2","_len2","_key2","_this$props7","_excluded2","FormatNumber","ellipsis","tooltip","_getFormattedValue","hideApproximateChar","params","type","fullValue","parsed","replaceAll","prefix","APROXIMATEDLY_EQUAL_TO","getFormattedValue","tooltipContent","YTText","color","stopPropagation","ClipboardButton","inlineMargins","input","names","formatRegex","RegExp","join","test","match","dimension","trim","dimensionIndex","findIndex_","name","toUpperCase","Math","floor","pow","compressionExtras","labels","items","_toConsumableArray","map","subItemsMap","zlib_","genComperessionLevelItems","zstd_","brotli_","lzma_","bzip2_","from","to","i","compressionCodecValueFromString","SELECT_EMPTY_VALUE","k","startsWith","substr","compressionCodecValueToString","isEqual_","StorageOptions","REPLICATION","ERASURE","ERASURE_CODECS","storageOptionFromErasureCodec","codec","normalizeErasureCodec","erasureCodec","erasureCodecFromStorageOption","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","makeUiMarker","ui_marker","prepareSetCommandForBatch","path","additionalParameters","command","parameters","force","CypressNodeTypes","REPLICATED_TABLE","REPLICATION_LOG_TABLE","CHAOS_REPLICATED_TABLE","MAP_NODE","TABLE","createParentsBeforeSet","_x","_x2","_createParentsBeforeSet","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","nodePath","attributesToSet","parentPaths","toCreate","_iterator","_step","_loop","wrap","_context3","prev","next","abrupt","Promise","resolve","attr","parents","split","slice","keys","_createForOfIteratorHelper","_context2","yt","exists","then","isCreated","set","stop","s","n","done","delegateYield","t1","f","finish","updateNodeAttributes","changes","isEmpty_","requests","oneLevelDiffsParents","oneLevelDiffs","attrPath","_attrPath$splice","splice","last","_slicedToArray","parentPath","wrapBatchPromise","ytApiV3Id","executeBatch","YTApiId","promises","map_","_callee","diff","p","_context","updateAttributes","_x3","_x4","oneLevelDiff","modifyGuarantee","cloneDeep_","isExists","get","makeBatchSubRequest","setup","prepareAttributes","attributes","_partition_","partition_","indexOf","_partition_2","paths","b","Placeholder","tab","useRouteMatch","theme","useAppRumMeasureStart","cluster","useSelector","getCluster","useRumMeasureStart","subPage","EditableBreadcrumbs","disableEdit","withControls","cancelOnClose","openOnClick","saveButtonView","cancelButtonView","renderEditor","onModeChange","beforeEditorContent","afterEditorContent","breadcrumbsProps","EditableAsText","renderContent","contentProps","Box","Breadcrumbs","showRoot","endContent","style","marginLeft","renderEditButton","marginRight","ExpandableCell","_ref$level","level","onExpand","Flex","alignItems","child","overflow","shrink","grow","LeftPadding","hidden","Boolean","getSchedulingBreadcrumbItems","getPool","getPools","pool","pools","current","tmp","parent","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolGuarantees","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","strong","burst","flow","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","getNumber","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","filter_","_ref3","ROOT_POOL_NAME","getPoolsAllocatedOperationsCount","topPools","reduce_","acc","item","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","resources","getOperationsStaticConfiguration","getTree","_ref4","allocated","config","operationCount","runningOperationCount","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","treeResources","operationRows","resource_distribution_info","resource_limits","undistributed_resources","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","filter","SchedulingStaticConfiguration","dispatch","useDispatch","collapsed","getSettingsSchedulingExpandStaticConfiguration","onToggle","setSettingsSchedulingExpandStaticConfiguration","CollapsibleSection","PoolTreeStaticConfiguration","poolTree","columns","header","sortable","render","row","align","UIFactory","renderSchedulingLastDayMaximum","sensor","showAsLink","freeValue","lastDayMaxValue","DataTableYT","useThemeYT","displayIndices","rowClassName","ChargeLevel","_ref$value","_React$useMemo","sum","stack","effectiveValue","Progress","addProgressStackSpacers","spaceSize","startSpace","endSpace","NumberSmart","addI18Keysets","en","ru","SchedulingMeta","guarantees","mainResource","getSchedulingTreeMainResource","_pool$attributes","mode","integralType","_ref$flowCPU","flowCPU","_ref$flowGPU","flowGPU","weight","user_memory","guaranteeType","ReadableField","burstUnit","formatUnits","flowUnit","i18n","renderOperationsProgress","renderProgress","usage","visible","subTitles","accumulated_resource_volume","integral_pool_capacity","_ref4$type","capacity","_ref5$type","accumulated","Bytes","MetaTable","limit","calcProgressProps","progressType","_pool$operationCount","count","_pool$maxOperationCou","maxCount","_pool$runningOperatio","running","_pool$maxRunningOpera","maxRunning","_pool$lightweightRunn","lightweightRunningOperationCount","lightweightRunning","pending","runningStr","pendingStr","maxRunningStr","maxCountStr","lightweightStr","runningText","totalText","operation","label","ColorCircle","left","right","_ref6","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","_calcProgressProps","makeGet","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","getState","loadExpandedOperationsAndPools","schedulingPoolFullPath","fields","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","parts","poolName","parentPoolPath","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","CHANGE_POOL","toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","forEach","loadAllPools","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_ref5","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","poolsToCollapse","pos","rawPools","cypressData","_ref7","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","index","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","poolNames","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","reduce","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","poolsByName","getSchedulingPoolsMapByName","expandedPoolInfo","_data","_data2","calcExpandedPoolInfo","_defineProperty","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","calculatePoolPath","orchidPath","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","resource_usage","SCHEDULING_DATA_SUCCESS","code","CANCELLED","SCHEDULING_DATA_FAILURE","closePoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","setPoolAttributes","poolPath","values","initials","transferData","toModify","restValues","source","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","hasOwnProperty","call","dstPool","dotPath","INTEGRAL_GUARANTEES_PREFIX","delta","update_","abs","source_pool","destination_pool","pool_tree","resource_delta","schedulingTransferPoolQuota","getBatchError","transferPoolQuota","schedulingOverviewHasFilter","_getSchedulingAttribu","getSchedulingAttributesToFilterParams","lastTime","lastTree","Date","now","wrapApiPromiseByToaster","schedulingFilterAttributes","skipSuccessToast","toasterName","errorContent","attributesToFilter","attributesToFilterParams","setName","newName","prevName","ytApiV3","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","attribute","keyMapper","userSlots","omittedValuesList","_value","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","result","omit_","makeGeneralCommands","_values$weight","_initialValues$weight","isInitial","initialValue","pickBy_","prototype","isOmitted","_values$weight2","isInvalidNumber","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","autoHiding","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","YTErrors","SCHEDULING_EDIT_POOL_FAILURE","cancelled","TOGGLE_EDIT_VISIBILITY","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","DEFAULT_COLUMNS","getSchedulingOverivewColumns","getSettingsData","resColumns","compact_","isSchedulingColumnName","uniq_","PoolTags","Label","capitalize_","NameCell","currentPool","getCurrentTreeExpandedPools","handlePoolExpand","_row$level","incomplete","isCurrentPool","_row$attributes","_row$attributes$child","child_pool_count","_row$attributes$pool_","pool_operation_count","allowExpand","OperationPool","hideTree","routed","isLightweight","isEffectiveLightweight","flex","renderOperationName","id","fifoIndex","url","fifoIndexNode","hasTitle","direction","margin","Text","variant","Link","PoolAbc","clusterUiConfig","getClusterUiConfig","renderSchedulingTableItemExtraControls","SchedulingTable","_useSelector$key","_useSettingsColumnSiz","useSettingsColumnSizes","minWidth","columnSizes","setColumnSizes","_useSettingsVisibleCo","visibleColumns","onColumnVisibilityChange","updateFn","_getSettingsData$key","prevVisibleColumns","newVisibility","newVisibleColumns","kIndex","setSettingByKey","onColumnOrderChange","_getSettingsData$key2","Set","newValue","has","_useSchedulingTableCo","_COLUMNS_BY_MODE$mode","customColumns","getSchedulingContentMode","COLUMNS_BY_MODE","availableColumns","NameHeader","cell","original","TableCell","enableColumnFilter","enableHiding","SchedulingColumnHeader","column","allowUnordered","_item$weightEdited","weightEdited","EditedNumber","edited","OperationType","operationType","_ref8","user","SubjectCard","makeReadableFieldColumn","_ref9","justifyContent","FairShareUsage","options","_ref0","ResourceSummary","_ref1","_ref10","_ref11","maxOperationCountEdited","_ref12","startTime","DurationMemo","start","_ref13","childTableItems","operation_progress","caption","_ref14","info","getProgressTheme","running_operation_progress","_ref15","makeNumberColumn","ctx","SchedulingTableSettings","table","_ref16","RowActions","enableResizing","_React$useMemo2","columnVisibility","_ref17","columnOrder","col","useSchedulingTableColumns","getSchedulingOverviewTableItems","operationRefId","getSchedulingOperationRefId","useTable","enableColumnPinning","enableColumnResizing","columnPinning","columnSizing","onColumnSizingChange","scrollToIndex","findIndex","isHighlightedRow","DataTableGravity","virtualized","rowHeight","summary","integral_guarantees","custom","_ref2$type","Duration","expandedeLoading","getSchedulingOperationsLoading","loading","getSchedulingLoading","_ref18","_useSelector","_resources$cpu","_resources$gpu","_resources$user_memor","showAbsResources","getSchedulingShowAbsResources","dominantResource","fairShareRatio","cpuContent","gpuContent","memContent","l1","l2","fontWeight","_ref20","autocalculated","_ref21","_React$useState","_React$useState2","setNow","setInterval","clearInterval","moment","valueOf","DateTime","formatTimeDuration","round","_ref22","DropdownMenu","switcherWrapperClassName","action","exactPath","openAttributesModal","openEditModal","openPoolDeleteModal","_ref23","starvation_status","usageRatio","starving","aggressively_starving","Readable","_useSelector2","getSchedulingSortState","sortState","order","lastColumnRef","byOptions","find","ColumnHeader","onSort","_ref24","_lastColumnRef$curren","currentOrder","schedulingSetSortState","sortIconSize","_ref25","TableSettings","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","autoFocus","getPoolsNames","getSuggestItems","_items","filtered","lcFilter","toLowerCase","lcPoolName","handleCancelEdit","onItemClick","Suggest","popupClassName","placeholder","SchedulingToolbar","Toolbar","itemsToWrap","node","SchedulingContentMode","SchedulingAbc","SchedulingShowAbsResources","SegmentedRadioGroup","contentMode","CHANGE_CONTENT_MODE","SCHEDULING_CONTENT_MODES","slug","getSchedulingAbcFilter","renderControlAbcService","abcService","abcServiceFilter","schedulingSetAbcFilter","Switch","checked","Overview","WithStickyToolbar","toolbar","topMargin","PoolAcl","NoContent","warning","hint","ErrorBoundary","PoolAclPanel","connect","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","additionalStartType","startDeps","allowStart","isFinalLoadingStatus","useRumMeasureStop","stopDeps","allowStop","SchedulingExpandedPoolsUpdater","PoolAttributes","PoolAttributesFetched","_data$0$output","_data$","_useFetchBatchQuery","useFetchBatchQuery","schedulingPoolAttributes","errorTitle","isLoading","Loader","YTErrorBlock","Yson","folding","withRouter","location","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","SchedulingTab","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","OVERVIEW","ATTRIBUTES","Redirect","makeSchedulingUrl","pathname","search","getSchedulingIsFinalLoadingState","store","loaded","status","calculateLoadingStatus","headingBlock","SchedulingResources","getResources","resource","progress","makeError","PoolEditorDialog","_initialFormValues$ge2","_initialFormValues$ge3","_initialFormValues$re2","_initialFormValues$re3","_initialFormValues$re4","_initialFormValues$in","_initialFormValues$in2","_initialFormValues$in3","_initialFormValues$in4","editItem","getSchedulingEditItem","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","initialFormValues","useMemo","getInitialValues","editCloseHandler","useCallback","editConfirmHandler","form","_form$getState","_initialFormValues$ge","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","_initialFormValues$re","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","getCurrentUserName","hasWarning","setHasWarning","_React$useState3","_React$useState4","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","extras","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","YTDFDialog","onClose","headerProps","onAdd","required","hideFilter","MIN_VALUE","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","useUpdater","Content","SchedulingMemo","SchedulingWithRum","isFinalState","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","open","hasCloseButton","Header","Body","keys_","message","Footer","onClickButtonApply","onClickButtonCancel","propsButtonApply","textButtonCancel","textButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","getPoolTrees","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","abc","successContent","timeout","updateAcl","idmKind","responsible","waitWhilePoolIsReady","CREATE_POOL_DIALOG_TREE_CREATE_FAILURE","_createAdminReqTicket","createAdminReqTicketUrl","createUrl","CHECK_REDINESS_TIMEOUT","MAX_POOL_REDINESS_TIMEOUT","TIMEOUT_ERROR","startedTime","allowRoot","uiSettings","schedulingDenyRootAsParent","CreatePoolButton","_useState","useState","_useState2","changeVisibility","handleShow","handleClose","CreatePoolDialog","treeStored","setTree","handleTreeChange","newTree","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","validateForm","sortedIndexOf_","isApplyDisabled","errors","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","page","Page","urlParams","SchedulingFavourites","SchedulingPhysicalTree","SchedulingBreadcrumbs","renderTopRowExtraControlsForPool","itemClassName","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","Favourites","isActive","toggleDisabled","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","shiftText","hoverContent","bcItems","history","useHistory","calcPathname","window","Item","href","makeRoutedURL","preventDefault","JSON","stringify","onAction","keyText","parse","toString","some_","_v","endsWith","Select","filterable","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","_props$saveButtonView","_props$cancelButtonVi","editMode","setEditMode","setInput","useEffect","handleChangeMode","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","edit","controls","extraProps","onMouseDown","awesome","ref","inputProps","useCheckbox","controlProps","role","control","ControlLabel","labelClassName","YTSortIndicator","getIsSorted","sortIcon","getCanSort","CaretUp","CaretDown","CaretsExpandVertical","getIcon","getCellStyles","isPinned","getIsPinned","getSize","columnDef","minSize","maxWidth","maxSize","getStart","getAfter","renderSortIndicator","element","setElement","scrollMargin","_ref$timeout","setScrollMargin","bodyY","document","body","getBoundingClientRect","y","useScrollMargin","rowVirtualizer","useWindowRowVirtualizer","getRowModel","rows","estimateSize","overscan","virtualizerProps","timerId","clearTimeout","rowClassNameFn","highlighted","cellAttrs","cellAttributes","headerCellAttrs","headerCellAttributes","Table","stickyHeader","sortProps","TimeDuration","_value$error","parseTimeDuration","makeItems","w","M","h","m","ms","matchAll","_input$substring","substring","toAdd","hasErrorRenderer","getDefaultValue","isEmpty","prepareColumnsNames","columnsPermissions","permission","flatten_","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","group","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","entries","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_item$columns","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","permissionsFilterPredicate","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","isMissing","isUnrecognized","isApproved","isRequested","hasInherited","hasDenyAction","inheritance_mode","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","removed","_item$columns$some","_item$columns3","_item$name$toLowerCas","_item$name","unrecognized","requested","depriving","isDepriving","getReadApprovers","readApprovers","getResponsibles","getAuditors","auditors","getNotInheritedReadApprovers","readApprover","getNotInheritedResponsibles","responsibles","getNotInheritedAuditors","auditros","auditro","getAllApprovers","getHasApprovers","getApproversFiltered","getApproversFilteredAndOrdered","getAllAccessColumnsPermissions","filteredPermissions","_permission$columns","getAllDenyColumnsPermissions","_permission$columns2","getAllAccessColumnsNames","getAllDenyColumnsNames","getDenyColumnsItems","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","progressBlock","ProgressInnerText","offset","transform","ProgressStackItem","modifiers","isFinite","backgroundColor","getOffset","getTheme","colorStops","colorStopsValue","matchingColorStopItem","currentValue","minValue","maxValue","ProgressWithStack","stackClassName","getValueFromStack","ProgressWithValue","isProgressWithStack","resolvedProps","DOUBLE_CLICK_TIMEOUT","_ref$minWidth","_ref$maxWidth","lastRef","time","prevColumnSizes","PropTypes","counter","_Component","isClearClicked","isUnmounting","skipApplyForNextBlur","onTextUpdate","clear","loadSuggestions","showSuggestions","_this$props$onOpenCha","popupVisible","selectedIndex","onOpenChange","defaultText","prevItems","bind","hideSuggestions","clearSuggestions","_this$props$onFocus","_this$props$onBlur","_this$state$text","applySuggestion","selectNextSuggestion","selectPrevSuggestion","applyOrClearSuggestion","_this$input$current","blur","_this$props$onOpenCha2","_this$input$current2","_this$input$current3","itemIndex","getItemIndex","getItemValue","_this$state2","prevIndex","getSelectedIndex","_this$state3","nextIndex","controlRef","renderCounter","selected","_this$props8","template","renderItem","renderer","templates","__default__","renderSimpleItem","offsetWidth","maxItems","isNumber_","isObject_","totalAmount","groupPredicate","positiveGroup","negativeGroup","positiveGroupMaxItems","_this3","listClassName","showNoItemsMsg","getInputWidth","ReactList","itemRenderer","_this4","_this$props9","popupPlacement","restrictItems","Popup","anchorElement","renderSuggestions","renderInput","renderPopup","prevState","Component","disable","zIndexGroupLevel","_ref$marginRight","headingCN","CollapsibleSectionStateLess","toggle","overview","headingClassName","marginDirection","togglerRightPadding","clickable","setCollapsed"],"sourceRoot":""}