@ytsaurus/ui 3.3.1 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +34 -34
- package/dist/public/build/css/3132.43311d48.chunk.css +2 -0
- package/dist/public/build/css/3132.43311d48.chunk.css.map +1 -0
- package/dist/public/build/css/590.6f40b178.chunk.css +2 -0
- package/dist/public/build/css/590.6f40b178.chunk.css.map +1 -0
- package/dist/public/build/css/scheduling.8b8a192b.chunk.css +2 -0
- package/dist/public/build/css/scheduling.8b8a192b.chunk.css.map +1 -0
- package/dist/public/build/js/2563.bbb74274.chunk.js +2 -0
- package/dist/public/build/js/2563.bbb74274.chunk.js.map +1 -0
- package/dist/public/build/js/4237.57c56e6b.chunk.js +3 -0
- package/dist/public/build/js/4237.57c56e6b.chunk.js.map +1 -0
- package/dist/public/build/js/887.d8e107dc.chunk.js +2 -0
- package/dist/public/build/js/887.d8e107dc.chunk.js.map +1 -0
- package/dist/public/build/js/{app-navigation-page-layout.27364587.chunk.js → app-navigation-page-layout.afb1c1ba.chunk.js} +2 -2
- package/dist/public/build/js/app-navigation-page-layout.afb1c1ba.chunk.js.map +1 -0
- package/dist/public/build/js/{app-navigation.b86557c0.chunk.js → app-navigation.38835895.chunk.js} +2 -2
- package/dist/public/build/js/{app-navigation.b86557c0.chunk.js.map → app-navigation.38835895.chunk.js.map} +1 -1
- package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js → cluster-page-wrapper.84f72ceb.chunk.js} +2 -2
- package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js.map → cluster-page-wrapper.84f72ceb.chunk.js.map} +1 -1
- package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js → code-assistant-chat.a7927638.chunk.js} +2 -2
- package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js.map → code-assistant-chat.a7927638.chunk.js.map} +1 -1
- package/dist/public/build/js/main.d91d7090.js +3 -0
- package/dist/public/build/js/main.d91d7090.js.map +1 -0
- package/dist/public/build/js/{navigation.c35bb543.chunk.js → navigation.9b4e0429.chunk.js} +2 -2
- package/dist/public/build/js/navigation.9b4e0429.chunk.js.map +1 -0
- package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js → query-tracker.1b6d537a.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js.map → query-tracker.1b6d537a.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.6000b37f.js → runtime.93a1fc00.js} +2 -2
- package/dist/public/build/js/{runtime.6000b37f.js.map → runtime.93a1fc00.js.map} +1 -1
- package/dist/public/build/js/scheduling.943b1602.chunk.js +2 -0
- package/dist/public/build/js/scheduling.943b1602.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +30 -30
- package/dist/server/controllers/ai-chat.js +2 -1
- package/dist/server/types/ai-chat.d.ts +3 -0
- package/package.json +5 -5
- package/dist/public/build/css/3132.62cd9c06.chunk.css +0 -2
- package/dist/public/build/css/3132.62cd9c06.chunk.css.map +0 -1
- package/dist/public/build/css/590.1d7b27ca.chunk.css +0 -2
- package/dist/public/build/css/590.1d7b27ca.chunk.css.map +0 -1
- package/dist/public/build/css/scheduling.f5b832cf.chunk.css +0 -2
- package/dist/public/build/css/scheduling.f5b832cf.chunk.css.map +0 -1
- package/dist/public/build/js/3205.87c8575d.chunk.js +0 -2
- package/dist/public/build/js/3205.87c8575d.chunk.js.map +0 -1
- package/dist/public/build/js/4237.a6d263f6.chunk.js +0 -3
- package/dist/public/build/js/4237.a6d263f6.chunk.js.map +0 -1
- package/dist/public/build/js/887.7bbb21d6.chunk.js +0 -2
- package/dist/public/build/js/887.7bbb21d6.chunk.js.map +0 -1
- package/dist/public/build/js/app-navigation-page-layout.27364587.chunk.js.map +0 -1
- package/dist/public/build/js/main.39129d1a.js +0 -3
- package/dist/public/build/js/main.39129d1a.js.map +0 -1
- package/dist/public/build/js/navigation.c35bb543.chunk.js.map +0 -1
- package/dist/public/build/js/scheduling.3fff0b4f.chunk.js +0 -2
- package/dist/public/build/js/scheduling.3fff0b4f.chunk.js.map +0 -1
- /package/dist/public/build/js/{4237.a6d263f6.chunk.js.LICENSE.txt → 4237.57c56e6b.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.39129d1a.js.LICENSE.txt → main.d91d7090.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/scheduling.943b1602.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/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.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/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableBreadcrumbs/EditableBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","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/./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/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","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/components/DataTableGravity/ExpandableCell.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/FormatNumber/FormatNumber.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/settings/use-settings-column-sizes.ts","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"],"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 qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\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 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 && <> </>}\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} </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';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport {YTErrorBlock} from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <YTErrorBlock {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\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';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\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 {addI18Keysets} from '../../../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:dialog-role-list', {en, ru});\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nimport i18n from './i18n';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: i18n('title_current'), data: currentArr.concat(otherArr)},\n toAdd: {\n title: i18n('title_will-be-added'),\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: i18n('title_will-be-removed'),\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: i18n('title_unrecognized'),\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\n }),\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 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, {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 />\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","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 {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 {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';\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 ...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 />\n </div>\n );\n}\n\nexport function TableCell({\n children,\n ...rest\n}: {children: React.ReactNode} & 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 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\nexport type FormatSettings =\n | {\n type: 'Number';\n settings?: {digits?: number; digitsOnlyForFloat?: boolean};\n }\n | {\n type: 'NumberSmart';\n settings?: {significantDigits?: number};\n }\n | {\n type: 'Bytes';\n settings?: {digits?: number};\n };\n\nexport function FormatNumber({className, 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 content={\n <>\n {tooltipContent} <span>{title} </span>\n <ClipboardButton view=\"clear\" text={title} inlineMargins />\n </>\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 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 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 {\n ExpandedPoolInfo,\n ExpandedPoolsAction,\n PoolCypressData,\n} from '../../reducers/scheduling/expanded-pools';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_IGNORE_NODE_DOES_NOT_EXIST, splitBatchResults} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {\n CHANGE_POOL,\n ROOT_POOL_NAME,\n SCHEDULING_EXPANDED_POOLS_FAILURE,\n SCHEDULING_EXPANDED_POOLS_PARTITION,\n SCHEDULING_EXPANDED_POOLS_REQUEST,\n SCHEDULING_EXPANDED_POOLS_SUCCESS,\n} from '../../../constants/scheduling';\nimport {calculatePoolPath, getPool, getPools, getTree} from '../../selectors/scheduling/scheduling';\nimport {\n getExpandedPoolsLoadAll,\n getSchedulingOperationsExpandedPools,\n} from '../../selectors/scheduling/expanded-pools';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\nimport {PoolInfo, getSchedulingPoolsMapByName} from '../../selectors/scheduling/scheduling-pools';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\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 {\n INTEGRAL_GUARANTEES_PREFIX,\n InitialPoolResourceInfo,\n POOL_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolResourceType,\n computePoolPath,\n prepareCurrentTree,\n prepareTrees,\n} from '../../../utils/scheduling/scheduling';\nimport {\n extractBatchV4Values,\n getBatchError,\n splitBatchResults,\n wrapApiPromiseByToaster,\n} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\n\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 {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';\nimport {splitBatchResults} from '../../../utils/utils';\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';\n\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} </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 / \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 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 />\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';\nimport React from 'react';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {DEFAULT_TAB, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport Placeholder from '../../../pages/components/Placeholder';\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 UIFactory from '../../../UIFactory';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {makeSchedulingUrl} from '../../../utils/app-url';\nimport {formatByParams} from '../../../utils/format';\nimport './Content.scss';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport {PoolAttributes} from './tabs/PoolAttributes/PoolAttributes';\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> = {...Tab};\n\n const showSettings = reduce_(\n Tab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {} as Record<string, TabSettings>,\n );\n\n const titleDict: Record<string, string> = {};\n\n const aclTab = showSettings[Tab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n });\n\n const extraRoutes: 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[Tab.ACL] = Tab.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}/${Tab.OVERVIEW}`} component={Overview} />\n <Route\n path={`${match.path}/${Tab.ATTRIBUTES}`}\n render={() => <PoolAttributes className={block('attributes')} />}\n />\n {extraRoutes}\n {aclTab.show && <Route path={`${match.path}/${Tab.ACL}`} component={PoolAcl} />}\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 {ROOT_POOL_NAME, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport {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 grow={1} shrink={1} justifyContent={'space-between'} alignItems={'center'}>\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}/${Tab.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"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","size","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","DialogError","YTErrorBlock","makeErrorFields","errors","compact_","map_","index","name","type","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","Component","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","t0","sent","YTDialog","abrupt","stop","_React$useState","_React$useState2","_slicedToArray","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","input","names","formatRegex","RegExp","join","test","match","dimension","trim","dimensionIndex","findIndex_","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","nodePath","attributesToSet","parentPaths","toCreate","_iterator","_step","_loop","Promise","resolve","attr","parents","split","slice","keys","_createForOfIteratorHelper","yt","exists","then","isCreated","set","s","n","done","delegateYield","t1","f","finish","updateNodeAttributes","changes","isEmpty_","requests","oneLevelDiffsParents","oneLevelDiffs","attrPath","_attrPath$splice","splice","last","parentPath","wrapBatchPromise","ytApiV3Id","executeBatch","YTApiId","promises","diff","p","updateAttributes","_x3","_x4","oneLevelDiff","modifyGuarantee","cloneDeep_","isExists","get","makeBatchSubRequest","setup","prepareAttributes","attributes","_partition_","partition_","indexOf","_partition_2","paths","b","Placeholder","tab","useRouteMatch","params","theme","useAppRumMeasureStart","cluster","useSelector","getCluster","useRumMeasureStart","subPage","ICON_BY_TYPE","SortIcon","order","allowUnordered","withUndefined","nextSortOrderValue","label","hidden","icon","ReadableField","awesome","face","EditableBreadcrumbs","disableEdit","withControls","cancelOnClose","openOnClick","saveButtonView","cancelButtonView","renderEditor","onModeChange","beforeEditorContent","afterEditorContent","breadcrumbsProps","EditableAsText","renderContent","contentProps","Box","Breadcrumbs","showRoot","endContent","style","marginLeft","renderEditButton","marginRight","addI18Keysets","en","ru","prepareRoleListValue","roles","otherMembers","current","toAdd","toRemove","unrecognized","item","isUnrecognized","isRequested","isApproved","isDepriving","currentArr","prepareItemOfCurrent","otherArr","frozen","newItems","i18n","itemClassName","role","extraProps","roleListValueToSubjectList","manyListDataItemToSubjectList","manyListDataItem","filter_","removed","_ref3","_ref4","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","_props$saveButtonView","_props$cancelButtonVi","editMode","setEditMode","_React$useState3","_React$useState4","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","edit","controls","Boolean","autoFocus","onMouseDown","Switch","ref","checked","inputProps","useCheckbox","controlProps","control","ControlLabel","labelClassName","TimeDuration","_value$error","formatTimeDuration","parseTimeDuration","MetaTable","makeItems","y","w","M","h","m","ms","parts","forEach","count","matchAll","_input$substring","substring","moment","valueOf","hasErrorRenderer","getDefaultValue","isEmpty","prepareColumnsNames","columnsPermissions","columns","permission","uniq_","flatten_","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","url","action","getAllUserPermissions","idmKind","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","Set","permissionTypes","UIFactory","getAclPermissionsSettings","add","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","some_","entries","_str","str","pop","toLowerCase","getAllObjectPermissionsFiltered","subjectFilter","_item$columns","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","has","permissionsFilterPredicate","visibleColumns","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","AggregateBySubject","first","aggrKey","inherited","allPermissions","Error","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","JSON","stringify","child","column","isMissing","hasInherited","level","hasDenyAction","inheritance_mode","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","values","reduce","acc","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_item$name$toLowerCas","_item$name","filtered","requested","depriving","getReadApprovers","readApprovers","getResponsibles","responsible","getAuditors","auditors","getNotInheritedReadApprovers","readApprover","getNotInheritedResponsibles","responsibles","getNotInheritedAuditors","auditros","auditro","getAllApprovers","getHasApprovers","getApproversFiltered","getApproversFilteredAndOrdered","getAllAccessColumnsPermissions","filteredPermissions","_permission$columns","tmp","getAllDenyColumnsPermissions","_permission$columns2","getAllAccessColumnsNames","getAllDenyColumnsNames","getDenyColumnsItems","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","getAclLoadState","loading","loaded","calculateLoadingStatus","progressBlock","ProgressInnerText","offset","transform","ProgressStackItem","color","modifiers","isFinite","backgroundColor","getOffset","getTheme","colorStops","colorStopsValue","matchingColorStopItem","find","currentValue","minValue","maxValue","ProgressWithStack","stack","stackClassName","sum","getValueFromStack","ProgressWithValue","isProgressWithStack","Progress","resolvedProps","Suggest","PropTypes","counter","_Component","isClearClicked","isUnmounting","skipApplyForNextBlur","onTextUpdate","clear","loadSuggestions","showSuggestions","_this$props$onOpenCha","popupVisible","selectedIndex","onOpenChange","call","open","defaultText","prevItems","bind","hideSuggestions","clearSuggestions","_this$props$onFocus","_this$props$onBlur","_this$state$text","applySuggestion","preventDefault","selectNextSuggestion","selectPrevSuggestion","applyOrClearSuggestion","_this$input$current","blur","_this$props$onOpenCha2","_this$input$current2","_this$input$current3","itemIndex","getItemIndex","getItemValue","onItemClick","_this$state2","prevIndex","getSelectedIndex","_this$state3","nextIndex","placeholder","controlRef","renderCounter","selected","_this$props8","template","renderItem","renderer","templates","__default__","renderSimpleItem","offsetWidth","maxItems","isNumber_","isObject_","totalAmount","groupPredicate","positiveGroup","negativeGroup","positiveGroupMaxItems","round","_this3","listClassName","showNoItemsMsg","minWidth","getInputWidth","ReactList","itemRenderer","_this4","_this$props9","popupClassName","popupPlacement","restrictItems","Popup","anchorElement","renderSuggestions","renderInput","renderPopup","prevState","disable","zIndexGroupLevel","OperationType","ColorCircle","_ref$marginRight","headingCN","CollapsibleSectionStateLess","toggle","onToggle","collapsed","overview","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","margin","clickable","CollapsibleSection","setCollapsed","getSchedulingBreadcrumbItems","getPool","getPools","pool","pools","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","ROOT_POOL_NAME","getPoolsAllocatedOperationsCount","topPools","reduce_","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","resources","getOperationsStaticConfiguration","getTree","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","SchedulingStaticConfiguration","dispatch","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","poolTree","header","sortable","render","row","align","renderSchedulingLastDayMaximum","sensor","showAsLink","freeValue","lastDayMaxValue","DataTableYT","useThemeYT","displayIndices","rowClassName","ChargeLevel","_ref$value","_React$useMemo","effectiveValue","addProgressStackSpacers","spaceSize","startSpace","endSpace","NumberSmart","SchedulingMeta","guarantees","mainResource","getSchedulingTreeMainResource","_pool$attributes","mode","integralType","_ref$flowCPU","flowCPU","_ref$flowGPU","flowGPU","weight","user_memory","guaranteeType","burstUnit","formatUnits","flowUnit","renderOperationsProgress","renderProgress","usage","subTitles","accumulated_resource_volume","integral_pool_capacity","_ref4$type","capacity","_ref5$type","accumulated","Bytes","limit","calcProgressProps","progressType","_pool$operationCount","_pool$maxOperationCou","maxCount","_pool$runningOperatio","running","_pool$maxRunningOpera","maxRunning","_pool$lightweightRunn","lightweightRunningOperationCount","lightweightRunning","pending","runningStr","pendingStr","maxRunningStr","maxCountStr","lightweightStr","runningText","totalText","operation","left","right","ExpandableCell","_ref$level","onExpand","Flex","alignItems","overflow","shrink","grow","LeftPadding","getCellStyles","cell","isPinned","getIsPinned","getSize","columnDef","minSize","maxWidth","maxSize","getStart","getAfter","DataTableGravity","virtualized","rowHeight","scrollToIndex","isHighlightedRow","element","setElement","scrollMargin","_ref$timeout","timeout","setScrollMargin","id","setInterval","bodyY","document","body","getBoundingClientRect","clearInterval","useScrollMargin","rowVirtualizer","useWindowRowVirtualizer","table","getRowModel","rows","estimateSize","overscan","virtualizerProps","timerId","setTimeout","clearTimeout","rowClassNameFn","highlighted","original","cellAttrs","cellAttributes","headerCellAttrs","headerCellAttributes","Table","stickyHeader","TableCell","FormatNumber","tooltip","_getFormattedValue","hideApproximateChar","fullValue","parsed","replaceAll","prefix","APROXIMATEDLY_EQUAL_TO","getFormattedValue","tooltipContent","YTText","ClipboardButton","inlineMargins","DOUBLE_CLICK_TIMEOUT","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","loadExpandedPools","getState","loadExpandedOperationsAndPools","schedulingPoolFullPath","fields","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","poolName","parentPoolPath","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","CHANGE_POOL","toaster","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","loadAllPools","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","poolsToCollapse","pos","rawPools","cypressData","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","poolNames","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","poolsByName","getSchedulingPoolsMapByName","expandedPoolInfo","_data","_data2","calcExpandedPoolInfo","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","initials","transferData","toModify","restValues","source","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","hasOwnProperty","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","YTErrors","SCHEDULING_EDIT_POOL_FAILURE","cancelled","TOGGLE_EDIT_VISIBILITY","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","DEFAULT_COLUMNS","getSchedulingOverivewColumns","getSettingsData","resColumns","isSchedulingColumnName","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","fifoIndex","fifoIndexNode","hasTitle","direction","Text","variant","ellipsis","Link","PoolAbc","clusterUiConfig","getClusterUiConfig","renderSchedulingTableItemExtraControls","SchedulingTable","_useSelector$key","_useSettingsColumnSiz","_ref$minWidth","_ref$maxWidth","columnSizes","lastRef","time","setColumnSizes","updateFn","_getSettingsData$key","prevColumnSizes","newValue","setSettingByKey","useSettingsColumnSizes","_useSettingsVisibleCo","onColumnVisibilityChange","prevVisibleColumns","newVisibility","newVisibleColumns","kIndex","onColumnOrderChange","_getSettingsData$key2","_useSchedulingTableCo","_COLUMNS_BY_MODE$mode","customColumns","getSchedulingContentMode","COLUMNS_BY_MODE","availableColumns","NameHeader","enableColumnFilter","enableHiding","SchedulingColumnHeader","_item$weightEdited","weightEdited","EditedNumber","edited","operationType","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","_ref16","RowActions","enableResizing","_React$useMemo2","columnVisibility","_ref17","columnOrder","col","useSchedulingTableColumns","getSchedulingOverviewTableItems","operationRefId","getSchedulingOperationRefId","useTable","enableColumnPinning","enableColumnResizing","columnPinning","columnSizing","onColumnSizingChange","findIndex","summary","integral_guarantees","custom","_ref2$type","Duration","expandedeLoading","getSchedulingOperationsLoading","getSchedulingLoading","_ref18","_useSelector","_resources$cpu","_resources$gpu","_resources$user_memor","showAbsResources","getSchedulingShowAbsResources","dominantResource","fairShareRatio","cpuContent","gpuContent","memContent","l1","l2","fontWeight","_ref20","autocalculated","_ref21","setNow","DateTime","_ref22","DropdownMenu","switcherWrapperClassName","exactPath","openAttributesModal","openEditModal","openPoolDeleteModal","_ref23","starvation_status","usageRatio","starving","aggressively_starving","Readable","_useSelector2","getSchedulingSortState","sortState","lastColumnRef","byOptions","ColumnHeader","onSort","_ref24","_lastColumnRef$curren","currentOrder","schedulingSetSortState","_ref25","TableSettings","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","getPoolsNames","getSuggestItems","_items","lcFilter","lcPoolName","handleCancelEdit","SchedulingToolbar","Toolbar","itemsToWrap","node","SchedulingContentMode","SchedulingAbc","SchedulingShowAbsResources","SegmentedRadioGroup","contentMode","CHANGE_CONTENT_MODE","SCHEDULING_CONTENT_MODES","slug","getSchedulingAbcFilter","renderControlAbcService","abcService","abcServiceFilter","schedulingSetAbcFilter","Overview","WithStickyToolbar","toolbar","topMargin","PoolAcl","NoContent","warning","hint","PoolAclPanel","connect","loadState","IdmObjectType","POOL","SCHEDULING_ACL","additionalStartType","startDeps","allowStart","isFinalLoadingStatus","useRumMeasureStop","stopDeps","allowStop","SchedulingExpandedPoolsUpdater","PoolAttributes","PoolAttributesFetched","_data$0$output","_data$","_useFetchBatchQuery","useFetchBatchQuery","schedulingPoolAttributes","errorTitle","isLoading","Loader","Yson","folding","withRouter","location","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","Tab","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","status","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","editConfirmHandler","form","_form$getState","_initialFormValues$ge","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","_initialFormValues$re","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","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","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","updateAcl","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","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","page","Page","urlParams","SchedulingFavourites","SchedulingPhysicalTree","SchedulingBreadcrumbs","renderTopRowExtraControlsForPool","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","onAction","keyText","parse","toString","_v","endsWith","Select","filterable","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact"],"sourceRoot":""}
|