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