@ytsaurus/ui 1.73.0 → 1.74.0
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 +44 -44
- package/dist/public/build/css/{system.ac99373e.chunk.css → system.fca5f8f3.chunk.css} +2 -2
- package/dist/public/build/css/{system.ac99373e.chunk.css.map → system.fca5f8f3.chunk.css.map} +1 -1
- package/dist/public/build/js/1879.23423388.chunk.js +3 -0
- package/dist/public/build/js/1879.23423388.chunk.js.LICENSE.txt +14 -0
- package/dist/public/build/js/1879.23423388.chunk.js.map +1 -0
- package/dist/public/build/js/{5177.8978a5b3.chunk.js → 5177.b4cec253.chunk.js} +2 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js.map +1 -0
- package/dist/public/build/js/{6729.c07b8f4c.chunk.js → 6729.a66f3554.chunk.js} +2 -2
- package/dist/public/build/js/6729.a66f3554.chunk.js.map +1 -0
- package/dist/public/build/js/{8390.2c2f36fb.chunk.js → 8390.83f4531a.chunk.js} +2 -2
- package/dist/public/build/js/{8390.2c2f36fb.chunk.js.map → 8390.83f4531a.chunk.js.map} +1 -1
- package/dist/public/build/js/{8460.8dbcd2fa.chunk.js → 8460.2d4d237e.chunk.js} +2 -2
- package/dist/public/build/js/{8460.8dbcd2fa.chunk.js.map → 8460.2d4d237e.chunk.js.map} +1 -1
- package/dist/public/build/js/{8778.ee4c426e.chunk.js → 8778.e18e655b.chunk.js} +2 -2
- package/dist/public/build/js/{8778.ee4c426e.chunk.js.map → 8778.e18e655b.chunk.js.map} +1 -1
- package/dist/public/build/js/{acl.5e54e4b4.chunk.js → acl.205964ad.chunk.js} +2 -2
- package/dist/public/build/js/{acl.5e54e4b4.chunk.js.map → acl.205964ad.chunk.js.map} +1 -1
- package/dist/public/build/js/{cluster-page-wrapper.7c7301b9.chunk.js → cluster-page-wrapper.894fbacc.chunk.js} +2 -2
- package/dist/public/build/js/{cluster-page-wrapper.7c7301b9.chunk.js.map → cluster-page-wrapper.894fbacc.chunk.js.map} +1 -1
- package/dist/public/build/js/main.03a8e7a9.js +3 -0
- package/dist/public/build/js/main.03a8e7a9.js.map +1 -0
- package/dist/public/build/js/{manage-tokens.3f481f05.chunk.js → manage-tokens.1888a00d.chunk.js} +2 -2
- package/dist/public/build/js/{manage-tokens.3f481f05.chunk.js.map → manage-tokens.1888a00d.chunk.js.map} +1 -1
- package/dist/public/build/js/navigation.18741a4d.chunk.js +2 -0
- package/dist/public/build/js/navigation.18741a4d.chunk.js.map +1 -0
- package/dist/public/build/js/{odin.7d64348c.chunk.js → odin.df1cfe56.chunk.js} +2 -2
- package/dist/public/build/js/{odin.7d64348c.chunk.js.map → odin.df1cfe56.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-navigation.76b02345.chunk.js → query-navigation.0ac62e3b.chunk.js} +2 -2
- package/dist/public/build/js/query-navigation.0ac62e3b.chunk.js.map +1 -0
- package/dist/public/build/js/{query-results.75d72153.chunk.js → query-results.733b1795.chunk.js} +2 -2
- package/dist/public/build/js/{query-results.75d72153.chunk.js.map → query-results.733b1795.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-tracker.5f5e3683.chunk.js → query-tracker.8e7f7688.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.5f5e3683.chunk.js.map → query-tracker.8e7f7688.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.30501cea.js → runtime.8d1e4e78.js} +2 -2
- package/dist/public/build/js/{runtime.30501cea.js.map → runtime.8d1e4e78.js.map} +1 -1
- package/dist/public/build/js/{scheduling.428b3b4f.chunk.js → scheduling.b70d4627.chunk.js} +2 -2
- package/dist/public/build/js/{scheduling.428b3b4f.chunk.js.map → scheduling.b70d4627.chunk.js.map} +1 -1
- package/dist/public/build/js/system.f759d3f0.chunk.js +2 -0
- package/dist/public/build/js/system.f759d3f0.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.636f6f6b.chunk.js → yt-df-dialog.9ddda260.chunk.js} +2 -2
- package/dist/public/build/js/{yt-df-dialog.636f6f6b.chunk.js.map → yt-df-dialog.9ddda260.chunk.js.map} +1 -1
- package/dist/public/build/manifest.json +40 -40
- package/package.json +3 -3
- package/dist/public/build/js/5177.8978a5b3.chunk.js.map +0 -1
- package/dist/public/build/js/6729.c07b8f4c.chunk.js.map +0 -1
- package/dist/public/build/js/7263.210dadfd.chunk.js +0 -3
- package/dist/public/build/js/7263.210dadfd.chunk.js.LICENSE.txt +0 -5
- package/dist/public/build/js/7263.210dadfd.chunk.js.map +0 -1
- package/dist/public/build/js/main.afa006d1.js +0 -3
- package/dist/public/build/js/main.afa006d1.js.map +0 -1
- package/dist/public/build/js/navigation.0adc0583.chunk.js +0 -2
- package/dist/public/build/js/navigation.0adc0583.chunk.js.map +0 -1
- package/dist/public/build/js/query-navigation.76b02345.chunk.js.map +0 -1
- package/dist/public/build/js/system.65647634.chunk.js +0 -2
- package/dist/public/build/js/system.65647634.chunk.js.map +0 -1
- /package/dist/public/build/js/{main.afa006d1.js.LICENSE.txt → main.03a8e7a9.js.LICENSE.txt} +0 -0
package/dist/public/build/js/{scheduling.428b3b4f.chunk.js.map → scheduling.b70d4627.chunk.js.map}
RENAMED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/scheduling.428b3b4f.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/utils/batch.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/expanded-pools.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/PoolMetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/SchedulingOperationsError/SchedulingOperationsError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableSticky.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/details.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingResources.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/PoolEditorDialog/PoolEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/Scheduling.tsx","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/create-pool-dialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Instruments/CreatePoolDialog/CreatePoolDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/SchedulingTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts"],"sourcesContent":["import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: 'Unrecognized',\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\n }),\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport Block from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <Block {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\n };\n}\n","import React, {useCallback, useEffect} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../Icon/Icon';\n\nimport './EditableAsText.scss';\nimport Button, {ButtonProps} from '../Button/Button';\nconst block = cn('editable-as-text');\n\ninterface Props {\n className?: string;\n editorClassName?: string;\n\n text?: string;\n children: React.ReactNode;\n onChange: (v?: string) => void;\n disableEdit?: boolean;\n withControls?: boolean;\n cancelOnClose?: boolean;\n openOnClick?: boolean;\n size?: 's' | 'm' | 'l' | 'xl';\n saveButtonView?: ButtonProps['view'];\n cancelButtonView?: ButtonProps['view'];\n\n renderEditor?: (props: {\n value?: string;\n onBlur: () => void;\n onChange: (value?: string) => void;\n className?: string;\n onApply: (value?: string) => void;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\n onModeChange,\n saveButtonView = 'normal',\n cancelButtonView = 'normal',\n } = props;\n const [editMode, setEditMode] = React.useState(false);\n const [input, setInput] = React.useState(text || '');\n\n useEffect(() => {\n setInput(text || '');\n }, [text]);\n\n const handleChangeMode = useCallback(\n (isEdit: boolean) => {\n if (onModeChange) onModeChange(isEdit);\n setEditMode(isEdit);\n },\n [onModeChange],\n );\n\n const closeEditMode = React.useCallback(() => {\n handleChangeMode(false);\n if (cancelOnClose) setInput(text || '');\n }, [cancelOnClose, handleChangeMode, text]);\n\n const startTextEdit = useCallback(() => {\n handleChangeMode(true);\n }, [handleChangeMode]);\n\n const handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\n\n const handleChange = React.useCallback((val?: string) => setInput(val ?? ''), [setInput]);\n\n const applyValue = useCallback(() => {\n handleChangeMode(false);\n onChange(input);\n }, [onChange, handleChangeMode, input]);\n\n const closeAndResetValue = useCallback(() => {\n handleChangeMode(false);\n setInput(text || '');\n }, [handleChangeMode, text]);\n\n const onApply = useCallback(\n (value?: string) => {\n handleChangeMode(false);\n onChange(value);\n },\n [handleChangeMode, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if (evt.key === 'Enter') {\n applyValue();\n }\n if (evt.key === 'Escape') {\n closeAndResetValue();\n }\n },\n [applyValue, closeAndResetValue],\n );\n\n const controlSize = size ? size : 'm';\n\n return (\n <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\n <>\n {renderEditor ? (\n renderEditor({\n value: input,\n onChange: handleChange,\n className: block('control'),\n onBlur: closeEditMode,\n onApply,\n })\n ) : (\n <TextInput\n className={block('control')}\n autoFocus\n size={controlSize}\n value={input}\n onUpdate={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={closeEditMode}\n />\n )}\n {withControls && (\n <>\n <Button\n className={block('control')}\n view={saveButtonView}\n extraProps={{onMouseDown: applyValue}}\n size={controlSize}\n >\n <Icon awesome={'check'} size={controlSize} />\n </Button>\n <Button\n className={block('control')}\n view={cancelButtonView}\n extraProps={{onMouseDown: closeAndResetValue}}\n size={controlSize}\n >\n <Icon awesome={'times'} size={controlSize} />\n </Button>\n </>\n )}\n </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","import {USE_CACHE, USE_MAX_SIZE} from '../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../shared/yt-types';\n\nexport function makeGet(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'get'})['parameters'], 'path'>,\n) {\n return {\n command: 'get' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n },\n };\n}\n\nexport function makeList(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'list'})['parameters'], 'path'>,\n) {\n return {\n command: 'list' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {\n ExpandedPoolInfo,\n ExpandedPoolsAction,\n PoolCypressData,\n} from '../../reducers/scheduling/expanded-pools';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_IGNORE_NODE_DOES_NOT_EXIST, splitBatchResults} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {\n CHANGE_POOL,\n ROOT_POOL_NAME,\n SCHEDULING_EXPANDED_POOLS_FAILURE,\n SCHEDULING_EXPANDED_POOLS_PARTITION,\n SCHEDULING_EXPANDED_POOLS_REQUEST,\n SCHEDULING_EXPANDED_POOLS_SUCCESS,\n} from '../../../constants/scheduling';\nimport {calculatePoolPath, getPool, getPools, getTree} from '../../selectors/scheduling/scheduling';\nimport {\n getExpandedPoolsLoadAll,\n getSchedulingOperationsExpandedPools,\n} from '../../selectors/scheduling/expanded-pools';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\nimport {PoolInfo, getSchedulingPoolsMapByName} from '../../selectors/scheduling/scheduling-pools';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport {isSupportedSchedulingChildrenByPool} from '../../../store/selectors/thor/support';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\n\ntype ExpandedPoolsThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ExpandedPoolsAction | SchedulingAction\n>;\n\nconst cancelHelper = new CancelHelper();\n\nconst POOL_FIELDS_TO_LOAD = [\n 'accumulated_resource_ratio_volume',\n 'accumulated_resource_volume',\n 'demand_ratio',\n 'detailed_fair_share',\n 'dominant_resource',\n 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_running_operation_count',\n 'max_share_ratio',\n 'min_share_ratio',\n 'mode',\n 'operation_count',\n 'parent',\n 'pool_operation_count',\n 'child_pool_count',\n 'resource_demand',\n 'resource_limits',\n 'resource_usage',\n 'promised_fair_share_resources',\n 'running_operation_count',\n 'specified_burst_guarantee_resources',\n 'specified_resource_flow',\n 'starvation_status',\n 'starving',\n 'strong_guarantee_resources',\n 'usage_ratio',\n 'weight',\n 'abc',\n];\n\nconst POOL_TREE_GET_ATTRS = [\n 'integral_guarantees',\n 'weight',\n 'max_operation_count',\n 'max_running_operation_count',\n 'strong_guarantee_resources',\n 'resource_limits',\n 'forbid_immediate_operations',\n 'create_ephemeral_subpools',\n 'fifo_sort_parameters',\n 'config',\n 'folder_id',\n];\n\nclass EmptyFullPath extends Error {}\n\nexport function loadExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const pool = getPool(getState());\n\n if (!tree) {\n return undefined;\n }\n\n if (pool === ROOT_POOL_NAME) {\n return dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n return ytApiV3Id\n .executeBatch<{full_path: string; is_ephemeral?: boolean}>(\n YTApiId.schedulingPoolFullPath,\n {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`,\n fields: ['is_ephemeral', 'full_path'],\n },\n },\n ],\n },\n )\n .then(([{output}]) => {\n const {full_path, is_ephemeral} = output ?? {};\n if (!full_path) {\n throw new EmptyFullPath();\n } else {\n dispatch(addFullPathToExpandedPoolsNoLoad(tree, full_path, is_ephemeral));\n dispatch(loadExpandedOperationsAndPools(tree));\n }\n })\n .catch((e) => {\n if (e instanceof EmptyFullPath) {\n dispatch({type: CHANGE_POOL, data: {pool: ROOT_POOL_NAME}});\n /**\n * We don't need to call `dispatch(loadExpandedOperationsAndPools(tree))` after `CHANGE_POOL`.\n * The call will be triggered by SchedulingExpandedPoolsUpdater.\n */\n // dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n new Toaster().add({\n name: 'schedulingPoolFullPath',\n theme: 'danger',\n title: '',\n });\n }\n });\n }\n };\n}\n\nfunction loadExpandedOperationsAndPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const loadAll = getExpandedPoolsLoadAll(state);\n const expandedPools: Map<string, ExpandedPoolInfo> = loadAll\n ? new Map()\n : getSchedulingOperationsExpandedPools(state)[tree] ?? new Map();\n const expandedPoolNames: Array<string> = [...expandedPools.keys()];\n\n const operationsExpandedPools: Array<string> = [...expandedPoolNames];\n\n const operationsRequests: Array<BatchSubRequest> = [];\n if (loadAll) {\n operationsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations`),\n );\n } else {\n const prefix = `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations_by_pool`;\n operationsExpandedPools.forEach((item) => {\n operationsRequests.push(makeGet(`${prefix}/${item}`));\n });\n }\n\n const loadAllPools = loadAll || !isSupportedSchedulingChildrenByPool(state);\n const poolsRequests: Array<BatchSubRequest> = [];\n const poolsChildrenRequests: Array<BatchSubRequest> = [];\n const poolsCypressDataRequests: Array<BatchSubRequest> = [];\n\n const poolsExpandedPools: Array<string> = [ROOT_POOL_NAME, ...expandedPoolNames];\n\n if (loadAllPools) {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsCypressDataRequests.push(\n makeGet(`//sys/pool_trees/${tree}`, {attributes: POOL_TREE_GET_ATTRS}),\n );\n } else {\n poolsExpandedPools.forEach((pool) => {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsChildrenRequests.push(\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/child_pools_by_pool/${pool}`,\n {\n fields: POOL_FIELDS_TO_LOAD,\n },\n ),\n );\n const {parentPoolPath, isEphemeral} = expandedPools.get(pool) ?? {};\n const cypressDataPath = parentPoolPath\n ? `//sys/pool_trees/${tree}/${parentPoolPath}/${pool}`\n : `//sys/pool_trees/${tree}/${pool}`;\n if (pool === ROOT_POOL_NAME || !isEphemeral) {\n poolsCypressDataRequests.push(\n makeList(\n pool === ROOT_POOL_NAME ? `//sys/pool_trees/${tree}` : cypressDataPath,\n {\n attributes: POOL_TREE_GET_ATTRS,\n },\n ),\n );\n }\n });\n }\n\n cancelHelper.removeAllRequests();\n\n dispatch({type: SCHEDULING_EXPANDED_POOLS_REQUEST});\n return Promise.all([\n operationsRequests.length\n ? ytApiV3Id.executeBatch(YTApiId.schedulingLoadOperationsPerPool, {\n parameters: {requests: operationsRequests},\n cancellation: cancelHelper.saveCancelToken,\n })\n : Promise.resolve([]),\n\n ytApiV3Id.executeBatch(\n loadAllPools ? YTApiId.schedulingLoadPoolsAll : YTApiId.schedulingLoadPoolsPerPool,\n {\n parameters: {requests: poolsRequests},\n cancellation: cancelHelper.saveCancelToken,\n },\n ),\n loadAllPools\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadChildrenPerPool, {\n parameters: {requests: poolsChildrenRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n !poolsCypressDataRequests.length\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadCypressDataPerPool, {\n parameters: {requests: poolsCypressDataRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n ])\n .then(([operationsResults, poolsResults, poolsChildrenResults, poolsCypressData]) => {\n const error = new UIBatchError('Failed to load expanded pools');\n const {results: operations, errorIgnoredIndices} = splitBatchResults(\n operationsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n const rawOperations = reduce_(\n operations,\n (acc, data) => {\n return Object.assign(acc, data);\n },\n {},\n );\n\n const poolsToCollapse: Record<string, false> = {};\n forEach_(errorIgnoredIndices, (pos) => {\n poolsToCollapse[operationsExpandedPools[pos]] = false;\n });\n\n const rawPools: Record<string, PoolInfo> = {};\n const cypressData: Record<string, PoolCypressData> = {};\n\n if (loadAllPools) {\n const {results: pools} = splitBatchResults<Record<string, PoolInfo>>(\n poolsResults,\n error,\n );\n const [value = {}] = pools ?? [];\n Object.assign(rawPools, value);\n\n const {\n results: [data],\n } = splitBatchResults(poolsCypressData, error);\n Object.assign(cypressData, flattenAttributes(data));\n } else {\n const {\n results: pools,\n resultIndices,\n errorIgnoredIndices: poolsReqeustsIgnored,\n } = splitBatchResults<PoolInfo>(\n poolsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n pools.forEach((poolInfo, index) => {\n const name = poolsExpandedPools[resultIndices[index]];\n rawPools[name] = poolInfo;\n });\n\n const {\n results: poolChildren,\n errorIgnoredIndices: poolsChildrenRequestsIgnored,\n } = splitBatchResults<Record<string, PoolInfo>>(\n poolsChildrenResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n poolChildren.forEach((children) => {\n Object.assign(rawPools, children);\n });\n\n const {\n results: cypressDataChildrenPerPool,\n errorIgnoredIndices: poolsCypressDataRequestsIgnored,\n } = splitBatchResults<Array<PoolCypressData>>(\n poolsCypressData,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n cypressDataChildrenPerPool.forEach((poolChildrenCypressData) => {\n poolChildrenCypressData.forEach((item) => {\n cypressData[item.$value] = item;\n });\n });\n\n forEach_(\n [\n ...poolsReqeustsIgnored,\n ...poolsChildrenRequestsIgnored,\n ...poolsCypressDataRequestsIgnored,\n ],\n (position) => {\n const poolName = poolsExpandedPools[position];\n poolsToCollapse[poolName] = false;\n },\n );\n setExpandedPools(poolsToCollapse);\n }\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_SUCCESS,\n data: {\n expandedPoolsTree: tree,\n rawOperations: Object.keys(rawOperations).length\n ? rawOperations\n : EMPTY_OBJECT,\n rawPools: Object.keys(rawPools).length ? rawPools : EMPTY_OBJECT,\n flattenCypressData: Object.keys(cypressData).length\n ? cypressData\n : EMPTY_OBJECT,\n },\n });\n\n if (error.inner_errors?.length) {\n throw error;\n }\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setExpandedPools(changes: Record<string, boolean>): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const tree = getTree(getState());\n const expandedPools = getSchedulingOperationsExpandedPools(state);\n\n const poolsByName = getSchedulingPoolsMapByName(state);\n\n const treeExpandedPools = new Map(expandedPools[tree]);\n forEach_(changes, (expanded, poolName) => {\n if (expanded) {\n const expandedPoolInfo = calcExpandedPoolInfo(poolName, poolsByName);\n treeExpandedPools.set(poolName, expandedPoolInfo);\n } else {\n treeExpandedPools.delete(poolName);\n }\n });\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction addFullPathToExpandedPoolsNoLoad(\n tree: string,\n /**\n * elements of the array should have the same format as `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}/full_path`\n */\n fullPath: string,\n isEphemeral?: boolean,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const oldExpandedPools = getSchedulingOperationsExpandedPools(state);\n const treeExpandedPools = new Map(oldExpandedPools[tree]);\n\n /**\n * `fullPath` value starts from `/`, example: `/mypool/child/subchild`\n * so we have to use `.slice(1)` to remove first empty string\n */\n const parts = fullPath.split('/').slice(1);\n\n for (let i = 0; i < parts.length; ++i) {\n const poolName = parts[i];\n const parentPoolPath = parts.slice(0, i).join('/');\n treeExpandedPools.set(poolName, {parentPoolPath, isEphemeral});\n }\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n };\n}\n\nfunction updateExpandedPoolNoLoad(\n tree: string,\n treeExpandedPools: Map<string, ExpandedPoolInfo>,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const oldExpandedPools = getSchedulingOperationsExpandedPools(getState());\n\n const expandedPools = {\n ...oldExpandedPools,\n [tree]: treeExpandedPools,\n };\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {expandedPools},\n });\n };\n}\n\nexport function resetExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n if (!tree) {\n return;\n }\n\n const state = getState();\n const {[tree]: old, ...rest} = getSchedulingOperationsExpandedPools(state);\n\n if (old?.size) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {\n expandedPools: {\n ...rest,\n [tree]: new Map<string, ExpandedPoolInfo>(),\n },\n },\n });\n }\n };\n}\n\nexport function getSchedulingOperationsCount(): ThunkAction<number, RootState, any, any> {\n return (_dispatch, getState) => {\n const state = getState();\n\n const tree = getSchedulingPoolsMapByName(state);\n const root = tree[ROOT_POOL_NAME];\n return root?.operationCount || 0;\n };\n}\n\nexport function getPoolPathsByName(\n poolName: string,\n): ThunkAction<{fullPath: string; orchidPath: string}, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const state = getState();\n const pools = getPools(state);\n const tree = getTree(state);\n\n return {\n fullPath: calculatePoolPath(poolName, pools, tree),\n orchidPath: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${poolName}`,\n };\n };\n}\n\nexport function setLoadAllOperations(loadAll: boolean): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {loadAll},\n });\n\n const tree = getTree(state);\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction calcExpandedPoolInfo(\n poolName: string,\n poolsByName: Record<string, PoolInfo>,\n): ExpandedPoolInfo {\n let data = poolsByName[poolName];\n const isEphemeral = data?.isEphemeral;\n let res = '';\n while (data?.parent && data.parent !== ROOT_POOL_NAME) {\n res = res ? `${data.parent}/${res}` : data.parent;\n data = poolsByName[data.parent];\n }\n return {parentPoolPath: res, isEphemeral};\n}\n","import forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport update_ from 'lodash/update';\n\nimport {\n INTEGRAL_GUARANTEES_PREFIX,\n InitialPoolResourceInfo,\n POOL_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolResourceType,\n computePoolPath,\n prepareCurrentTree,\n prepareTrees,\n} from '../../../utils/scheduling/scheduling';\nimport {\n extractBatchV4Values,\n getBatchError,\n splitBatchResults,\n wrapApiPromiseByToaster,\n} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n getPools,\n getSchedulingIsInitialLoading,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\n\nimport {\n POOL_TOGGLE_DELETE_VISIBILITY,\n SCHEDULING_DATA_FAILURE,\n SCHEDULING_DATA_PARTITION,\n SCHEDULING_DATA_REQUEST,\n SCHEDULING_DATA_SUCCESS,\n SCHEDULING_DELETE_POOL_FAILURE,\n SCHEDULING_DELETE_POOL_REQUEST,\n SCHEDULING_DELETE_POOL_SUCCESS,\n} from '../../../constants/scheduling';\nimport {loadExpandedPools} from './expanded-pools';\nimport {RumWrapper, YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport type {RootState} from '../../../store/reducers';\nimport type {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport type {PoolInfo} from '../../../store/selectors/scheduling/scheduling-pools';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nconst toaster = new Toaster();\n\ntype SchedulingThunkAction<T = unknown> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function loadSchedulingData(): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch({type: SCHEDULING_DATA_REQUEST});\n\n const state = getState();\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n const cluster = getCluster(state);\n const rumId = new RumWrapper(cluster, RumMeasureTypes.SCHEDULING);\n return rumId\n .fetch(\n YTApiId.schedulingData,\n ytApiV3Id.executeBatch(YTApiId.schedulingData, {\n requests: [\n makeGet('//sys/scheduler/@alerts'),\n makeList('//sys/scheduler/orchid/scheduler/pool_trees'),\n makeGet('//sys/scheduler/orchid/scheduler/default_fair_share_tree'),\n ],\n ...USE_CACHE,\n }),\n )\n .then((data) => {\n const {\n error,\n results: [schedulerAlerts, rawTrees, defaultTree],\n } = splitBatchResults(data, 'Failed to fetch scheduling data');\n\n if (error) {\n return Promise.reject(error);\n }\n\n const state = getState();\n\n const trees = prepareTrees(rawTrees);\n const tree = prepareCurrentTree(\n defaultTree,\n trees,\n state.scheduling.scheduling.tree,\n );\n\n if (isInitialLoading) {\n dispatch(schedulingLoadFilterAttributes(tree, {checkFilters: true}));\n }\n\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {schedulerAlerts, trees, tree},\n });\n\n const treeRequests = [\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_usage`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_limits`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/config`),\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_distribution_info`,\n ),\n ];\n\n if (isInitialLoading) {\n /**\n * We don't need to call `dispatch(loadExpandedPools(tree))` for this branch of code,\n * the call should be triggered by SchedulingExpandedPoolsUpdater\n */\n //dispatch(loadExpandedPools(tree));\n } else {\n dispatch(loadExpandedPools(tree));\n }\n\n return rumId\n .fetch(\n YTApiId.schedulingLoadTree,\n ytApiV4Id.executeBatch(YTApiId.schedulingLoadTree, {\n requests: treeRequests,\n ...USE_CACHE,\n }),\n )\n .then((treeData) => {\n const extracted = extractBatchV4Values(treeData, treeRequests);\n const {error, results} = splitBatchResults(\n extracted.results,\n 'Failed to fetch tree details',\n );\n if (error) {\n throw error;\n }\n return results;\n });\n })\n .then(([resource_usage, resource_limits, config, resource_distribution_info]) => {\n const treeResources = {\n resource_usage,\n resource_limits,\n config,\n resource_distribution_info,\n };\n\n dispatch({\n type: SCHEDULING_DATA_SUCCESS,\n data: {\n treeResources,\n },\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function deletePool(item?: PoolInfo): SchedulingThunkAction {\n return (dispatch, getState) => {\n if (!item) {\n return;\n }\n\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const path = computePoolPath(item, pools);\n\n dispatch({type: SCHEDULING_DELETE_POOL_REQUEST});\n\n return yt.v3\n .remove({\n path: `//sys/pool_trees/${tree}/${path}`,\n })\n .then(() => {\n toaster.add({\n name: 'delete pool',\n autoHiding: 10000,\n theme: 'success',\n title: `Successfully deleted ${item.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_DELETE_POOL_SUCCESS});\n dispatch(closePoolDeleteModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error: any) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DELETE_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return null;\n });\n };\n}\n\nexport function openPoolDeleteModal(item: PoolInfo): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closePoolDeleteModal(): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n };\n}\n\ntype PoolResources = Partial<\n Record<Exclude<PoolResourceType, 'guaranteeType'>, InitialPoolResourceInfo>\n>;\n\ninterface SetResourceGuaranteeParams {\n poolPath: string;\n values: PoolResources & {guaranteeType: string};\n initials: PoolResources;\n tree: string;\n}\n\nexport function setPoolAttributes(params: SetResourceGuaranteeParams) {\n const {poolPath, values, initials, tree} = params;\n if (isEmpty_(values)) {\n return Promise.resolve();\n }\n\n const transferData: Array<{diff: number; source: string; path: string}> = [];\n const toModify: Array<{attr: string; value: any}> = [];\n\n const {guaranteeType, ...restValues} = values;\n\n forEach_(restValues, (v, k) => {\n const {limit, source} = v || {};\n const key = k as keyof typeof restValues;\n\n const attr = POOL_RESOURCE_TYPE_TO_ATTRIBUTE[key];\n if (!source || limit === undefined) {\n toModify.push({attr, value: limit});\n } else {\n const prevLimit = initials[key]?.limit || 0;\n const diff = (limit || 0) - prevLimit;\n if (diff) {\n transferData.push({diff, source, path: attr});\n }\n }\n });\n\n if (Object.hasOwnProperty.call(values, 'guaranteeType')) {\n toModify.push({\n attr: POOL_RESOURCE_TYPE_TO_ATTRIBUTE['guaranteeType'],\n value: guaranteeType,\n });\n }\n\n return updateNodeAttributes(poolPath, toModify).then(() => {\n return transferPoolQuota({poolPath, transferData, tree});\n });\n}\n\ninterface TransferPoolQuotaParams {\n poolPath: string;\n transferData: Array<{diff: number; source: string; path: string}>;\n tree: string;\n}\n\nfunction transferPoolQuota({poolPath, transferData, tree}: TransferPoolQuotaParams) {\n if (isEmpty_(transferData)) {\n return Promise.resolve();\n }\n const tmp = poolPath.split('/');\n const dstPool = tmp[tmp.length - 1];\n\n const requests = map_(transferData, (v) => {\n const {diff, source, path} = v;\n const transferPath = path.startsWith(INTEGRAL_GUARANTEES_PREFIX)\n ? path.substr(INTEGRAL_GUARANTEES_PREFIX.length)\n : path;\n const dotPath = transferPath.replace(/\\//g, '.');\n\n const delta = update_({}, dotPath, () => Math.abs(diff));\n\n return {\n command: 'transfer_pool_resources' as const,\n parameters: {\n source_pool: diff > 0 ? source : dstPool,\n destination_pool: diff > 0 ? dstPool : source,\n pool_tree: tree,\n resource_delta: delta,\n },\n };\n });\n\n return ytApiV4Id\n .executeBatch(YTApiId.schedulingTransferPoolQuota, {requests})\n .then((res: any) => {\n const err = getBatchError(res.results, 'Failed to transfer pool quota');\n if (err) {\n return Promise.reject(err);\n }\n return res;\n });\n}\n\nexport function schedulingLoadFilterAttributes(\n tree: string,\n {checkFilters}: {checkFilters?: boolean} = {},\n): SchedulingThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n if (checkFilters && !schedulingOverviewHasFilter(state)) {\n return undefined;\n }\n\n const {lastTime, lastTree} = getSchedulingAttributesToFilterParams(state);\n if (tree === lastTree && Date.now() - lastTime < 120000) {\n return undefined;\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.schedulingFilterAttributes, {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`,\n fields: ['parent', 'abc'],\n ...USE_CACHE,\n }),\n {\n skipSuccessToast: true,\n toasterName: 'schedulingLoadFilterAttributes',\n errorContent: 'Failed to load attributes required for filtering',\n },\n ).then((attributesToFilter) => {\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {\n attributesToFilter,\n attributesToFilterParams: {lastTime: Date.now(), lastTree: tree},\n },\n });\n });\n };\n}\n\nexport function schedulingSetAbcFilter(abcServiceFilter: {\n id: number;\n slug: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter},\n });\n };\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport mapKeys_ from 'lodash/mapKeys';\nimport mapValues_ from 'lodash/mapValues';\nimport omit_ from 'lodash/omit';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {getPools, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n computePoolPath,\n} from '../../../utils/scheduling/scheduling';\n\nimport {\n CHANGE_CONTENT_MODE,\n CHANGE_POOL,\n CHANGE_POOL_CHILDREN_FILTER,\n CHANGE_TABLE_TREE_STATE,\n CHANGE_TREE,\n SCHEDULING_EDIT_POOL_CANCELLED,\n SCHEDULING_EDIT_POOL_FAILURE,\n SCHEDULING_EDIT_POOL_REQUEST,\n SCHEDULING_EDIT_POOL_SUCCESS,\n TOGGLE_EDIT_VISIBILITY,\n} from '../../../constants/scheduling';\nimport {loadSchedulingData, setPoolAttributes} from './scheduling-ts';\nimport {splitBatchResults} from '../../../utils/utils';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst toaster = new Toaster();\n\nconst setName = (path, newName, prevName) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return yt.v3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (path, values, initialValues) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands = [];\n\n if (initialValues.forbidImmediateOperations !== values.forbidImmediateOperations) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@forbid_immediate_operations`,\n },\n input: values.forbidImmediateOperations,\n });\n }\n\n if (initialValues.createEphemeralSubpools !== values.createEphemeralSubpools) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@create_ephemeral_subpools`,\n },\n input: values.createEphemeralSubpools,\n });\n }\n\n if (initialSortParamsString !== newSortParamsString) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@fifo_sort_parameters`,\n },\n input: values.fifoSortParams,\n });\n }\n\n return commands;\n};\n\nconst setResourceAttributes = (path, values, omittedValues, attribute) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper = {userSlots: 'user_slots'};\n const omittedValuesList = map_(omittedValues, (value, key) => keyMapper[key] || key);\n const preparedValues = mapKeys_(values, (value, key) => keyMapper[key] || key);\n\n return ytApiV3Id\n .get(YTApiId.schedulingGetAttrsBeforeEdit, {path: `${path}/@${attribute}`})\n .then((resources) => {\n const result = {...resources, ...preparedValues};\n const input = omit_(result, omittedValuesList);\n\n return yt.v3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return yt.v3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\nconst makeGeneralCommands = (path, values, initialValues) => {\n const isInitial = (value, initialValue) => value === initialValue;\n const isOmitted = (value, omittedValues) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n //const {name: abcServiceName, slug: abcServiceSlug, id} = prepareAbcService(values.abcService);\n const omittedValues = pickBy_(\n values,\n (value) => value === '' || value === undefined || value === null,\n );\n\n const commands = [];\n\n // if (!isInitial(abcServiceSlug, initialValues.abcService?.value)) {\n // commands.push({\n // command: abcServiceSlug ? 'set' : 'remove',\n // parameters: {\n // path: `${path}/@abc`,\n // },\n // input: !abcServiceSlug ? undefined : {\n // slug: abcServiceSlug,\n // name: abcServiceName,\n // id,\n // },\n // });\n // }\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight, initialValues.weight)) {\n if (isOmitted('weight', omittedValues)) {\n commands.push({\n command: 'remove',\n parameters: {\n path: `${path}/@weight`,\n },\n });\n } else if (!isInitial(values.weight, initialValues.weight)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@weight`,\n },\n input: Number(values.weight),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value) {\n return !isInvalidNumber(value);\n}\n\nexport function editPool(pool, values, initialValues) {\n return (dispatch, getState) => {\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const poolPath = computePoolPath(pool, pools);\n const path = `//sys/pool_trees/${tree}/${poolPath}`;\n\n const filteredResourceLimitsValues = pickBy_(values.resourceLimits, isValidNumber);\n const omittedResourceLimitsValues = pickBy_(values.resourceLimits, isInvalidNumber);\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n delete resourceLimitsValues['error-block'];\n delete omittedResourceLimitsValues['error-block'];\n\n dispatch({type: SCHEDULING_EDIT_POOL_REQUEST});\n\n const requests = [\n ...makeGeneralCommands(path, values.general, initialValues.general),\n ...makeOtherAttributesCommands(path, values.otherSettings, initialValues.otherSettings),\n ];\n\n return Promise.all([\n ytApiV3Id.executeBatch(YTApiId.schedulingEditPool, {requests}).then((data) => {\n const {error} = splitBatchResults(data, 'Failed to fetch pool details');\n if (error) {\n return Promise.reject(error);\n }\n }),\n setPoolAttributes({\n poolPath: path,\n values: {\n ...values.resourceGuarantee,\n ...values.integralGuarantee,\n ...pick_(values.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n initials: {\n ...initialValues.resourceGuarantee,\n ...initialValues.integralGuarantee,\n ...pick_(initialValues.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n tree,\n }),\n setResourceAttributes(\n path,\n resourceLimitsValues,\n omittedResourceLimitsValues,\n 'resource_limits',\n ),\n ])\n .then(setName(path, values.general.name, initialValues.general.name))\n .then(() => {\n toaster.add({\n name: 'edit pool',\n timeout: 10000,\n theme: 'success',\n title: `Successfully edited ${pool.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_EDIT_POOL_SUCCESS});\n dispatch(closeEditModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n });\n };\n}\n\nexport function openEditModal(item) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled} = {}) {\n return (dispatch) => {\n dispatch({\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n });\n\n if (cancelled) {\n dispatch({type: SCHEDULING_EDIT_POOL_CANCELLED});\n }\n };\n}\n\nexport function changeTree(tree) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState) {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool) {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function changeContentMode(evt) {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {\n contentMode: evt.target.value,\n },\n };\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool, tree) {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\n","import {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {createSelector} from 'reselect';\n\nexport const getSchedulingIsFinalLoadingState = createSelector(\n [\n (store: RootState) => store.scheduling.scheduling.loading,\n (store: RootState) => store.scheduling.scheduling.loaded,\n (store: RootState) => store.scheduling.scheduling.error,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\nimport {calcProgressProps} from '../../../../utils/utils';\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport './ShareUsageBar.scss';\n\nconst block = cn('share-usage-bar');\n\ninterface Props {\n className?: string;\n shareValue?: number;\n shareTitle?: string;\n usageValue?: number;\n usageTitle?: string;\n forceTheme?: ProgressProps['theme'];\n title?: React.ReactNode;\n}\n\nfunction ShareUsageBar(props: Props) {\n const {className, shareValue, usageValue, shareTitle, usageTitle, forceTheme, title} = props;\n\n const x = Number(usageValue) / Number(shareValue);\n\n if (isNaN(shareValue!) || isNaN(usageValue!) || isNaN(x)) {\n return (\n <Tooltip\n content={\n <React.Fragment>\n <div>\n {shareTitle}: {shareValue}\n </div>\n <div>\n {usageTitle}: {usageValue}\n </div>\n </React.Fragment>\n }\n >\n {format.NO_VALUE}\n </Tooltip>\n );\n }\n\n const {value, theme} = calcProgressProps(usageValue, Number(shareValue) * 2);\n\n return (\n <Tooltip\n className={block(null, className)}\n content={\n <React.Fragment>\n {title}\n <div>\n {usageTitle} / {shareTitle} = {format.Number(x, {digits: 3})}\n </div>\n </React.Fragment>\n }\n >\n <Progress\n className={block('progress')}\n size={'s'}\n value={Number(value)}\n theme={forceTheme || theme}\n />\n <div className={block('tick')} />\n </Tooltip>\n );\n}\n\nexport default React.memo(ShareUsageBar);\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\nimport {getCurrentPool, getIsRoot, getPool, getTree, getTreeResources} from './scheduling';\n\nimport ypath from '../../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport {getCluster} from '../global';\nimport {PoolInfo, getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools: Array<PoolInfo>) => {\n let current: string | undefined = pool;\n const path = [];\n while (current) {\n path.push(current);\n const tmp: string = current;\n const {parent} = find_(pools, ({name}) => name === tmp) || {};\n current = parent;\n }\n return path.reverse();\n },\n);\n\ninterface PoolStaticConfigurationItem {\n name: string;\n cpu?: number;\n cpuLabel?: string;\n gpu?: number;\n memory?: number;\n user_slots?: number;\n network?: number;\n}\n\nfunction makeStaticConfigurationItem(name: string, attrs: object): PoolStaticConfigurationItem {\n return {\n name,\n cpu: ypath.getValue(attrs, '/cpu'),\n gpu: ypath.getValue(attrs, '/gpu'),\n memory: ypath.getValue(attrs, '/user_memory'),\n user_slots: ypath.getValue(attrs, '/user_slots'),\n network: ypath.getValue(attrs, '/network'),\n };\n}\n\nexport const getCurrentPoolStaticConfiguration = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data): Array<PoolStaticConfigurationItem> => {\n if (isRoot || !data?.attributes) {\n return [];\n }\n\n const burst_guarantee_resources = ypath.getValue(\n data.attributes,\n '/specified_burst_guarantee_resources',\n );\n const resource_flow = ypath.getValue(data.attributes, '/specified_resource_flow');\n\n return [\n makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst_guarantee_resources &&\n makeStaticConfigurationItem('Burst', burst_guarantee_resources),\n resource_flow && makeStaticConfigurationItem('Flow', resource_flow),\n ].filter(Boolean);\n },\n);\n\ninterface PoolTreeStaticConfigurationItem {\n name: string;\n total?: number;\n\n used?: number;\n usedTitle?: string;\n\n free?: number;\n format: 'Bytes' | 'Number';\n level?: number;\n\n lastDayMaxValueSensor?: 'max_operation_count' | 'max_running_operation_count';\n lastDayMaxValueTitle?: string;\n}\n\nfunction calcTreeStaticConfiguration(totals: any, undistributed: any, resourceType: any) {\n const total = ypath.getNumber(totals, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total,\n used: total - free,\n free,\n };\n}\n\nfunction calcTreeStaticConfigurationByDistributed(\n distributed: any,\n undistributed: any,\n resourceType: any,\n) {\n const used = ypath.getNumber(distributed, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total: used + free,\n used,\n free,\n };\n}\n\nexport const getPoolsTopLevel = createSelector([getPools], (pools) => {\n return filter_(pools, ({parent}) => parent === ROOT_POOL_NAME);\n});\n\nconst getPoolsAllocatedOperationsCount = createSelector([getPoolsTopLevel], (topPools) => {\n return reduce_(\n topPools,\n (acc, item) => {\n acc.maxOperationCount += item.maxOperationCount || 0;\n acc.maxRunningOperationCount += item.maxRunningOperationCount || 0;\n return acc;\n },\n {maxOperationCount: 0, maxRunningOperationCount: 0},\n );\n});\n\nexport const getCurrentTreeGpuLimit = createSelector([getTreeResources], (resources): number => {\n return ypath.getNumber(resources, '/resource_limits/gpu', 0);\n});\n\nexport const getOperationsStaticConfiguration = createSelector(\n [getTreeResources, getPoolsAllocatedOperationsCount, getCluster, getTree],\n ({config}, allocated): Array<PoolTreeStaticConfigurationItem> => {\n const operationCount = ypath.getNumber(config, '/max_operation_count', 0);\n const runningOperationCount = ypath.getNumber(config, '/max_running_operation_count', 0);\n\n return [\n {\n name: 'Operations',\n format: 'Number',\n },\n {\n level: 1,\n name: 'Total',\n format: 'Number',\n total: operationCount,\n used: allocated.maxOperationCount,\n usedTitle: 'Max operation count',\n free: operationCount - allocated.maxOperationCount,\n\n lastDayMaxValueSensor: 'max_operation_count',\n lastDayMaxValueTitle: 'Last day max operations',\n },\n {\n level: 1,\n name: 'Running',\n format: 'Number',\n total: runningOperationCount,\n used: allocated.maxRunningOperationCount,\n usedTitle: 'Max running operation count',\n\n free: runningOperationCount - allocated.maxRunningOperationCount,\n\n lastDayMaxValueSensor: 'max_running_operation_count',\n lastDayMaxValueTitle: 'Last day max running operations',\n },\n ];\n },\n);\n\nexport const getCurrentPoolTreeStaticConfiguration = createSelector(\n [getTreeResources, getOperationsStaticConfiguration],\n (treeResources = {}, operationRows): Array<PoolTreeStaticConfigurationItem> => {\n const {resource_distribution_info, resource_limits} = treeResources;\n\n if (!resource_distribution_info) {\n return [];\n }\n\n const {\n undistributed_resources,\n distributed_burst_guarantee_resources: burst,\n undistributed_burst_guarantee_resources: unburst,\n distributed_resource_flow: flow,\n undistributed_resource_flow: unflow,\n } = resource_distribution_info;\n\n const cpuRow: PoolTreeStaticConfigurationItem = {\n level: 0,\n name: 'CPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'cpu'),\n };\n\n const burstRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Burst',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(burst, unburst, 'cpu'),\n total: undefined,\n free: undefined,\n };\n\n const flowRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Flow',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(flow, unflow, 'cpu'),\n total: undefined,\n };\n\n flowRow.free = burstRow.used! - flowRow.used!;\n\n const strong: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Strong',\n format: 'Number',\n used:\n cpuRow.used! -\n Math.max(...[0, burstRow.used!, flowRow.used!].filter((v) => !isNaN(v))),\n };\n\n return [\n cpuRow,\n strong,\n burstRow,\n flowRow,\n {\n name: 'Memory',\n format: 'Bytes',\n ...calcTreeStaticConfiguration(\n resource_limits,\n undistributed_resources,\n 'user_memory',\n ),\n },\n {\n name: 'GPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'gpu'),\n },\n ...operationRows,\n ];\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport format from '../../../common/hammer/format';\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {useSelector} from 'react-redux';\nimport {getCurrentPool, getIsRoot} from '../../../store/selectors/scheduling/scheduling';\nimport UIFactory from '../../../UIFactory';\nimport {getClusterUiConfig} from '../../../store/selectors/global';\n\nconst block = cn('pool-meta-table');\n\ninterface Props {\n className?: string;\n}\n\nexport default function PoolMetaData({className}: Props) {\n const pool = useSelector(getCurrentPool);\n const isRoot = useSelector(getIsRoot);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n if (!pool || isRoot) {\n return null;\n }\n\n const cpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/cpu', 0);\n const gpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/gpu', 0);\n const memory = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/memory', 0);\n const hasStrong = cpu > 0 || gpu > 0 || memory > 0;\n\n const {integralType, mode} = pool;\n const hasIntegralType = integralType && integralType !== 'none';\n\n const guaranteeType = [hasStrong && 'Strong', hasIntegralType && capitalize_(integralType)]\n .filter(Boolean)\n .join(' + ');\n return (\n <div className={block(null, className)}>\n <MetaTable\n items={[\n {\n key: 'Guarantee type',\n value: guaranteeType || 'Strong',\n },\n {\n key: 'Mode',\n value: format.Readable(mode) || format.NO_VALUE,\n },\n ...(UIFactory.getExtraMetaTableItemsForPool({pool, clusterUiConfig}) || []),\n ]}\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Column} from '@gravity-ui/react-data-table';\n\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {getIsRoot, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n getCurrentPoolStaticConfiguration,\n getCurrentPoolTreeStaticConfiguration,\n} from '../../../store/selectors/scheduling/scheduling-ts';\n\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport format from '../../../common/hammer/format';\n\nimport './SchedulingStaticConfiguration.scss';\nimport {getSettingsSchedulingExpandStaticConfiguration} from '../../../store/selectors/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport Label from '../../../components/Label/Label';\nimport UIFactory from '../../../UIFactory';\nimport PoolMetaData from '../Content/PoolMetaData';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\ninterface Props {\n onToggleCollapsedState: (value: boolean) => void;\n}\n\nfunction SchedulingStaticConfiguration(props: Props) {\n const {onToggleCollapsedState} = props;\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n onToggleCollapsedState(value);\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [onToggleCollapsedState, dispatch],\n );\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolMetaData className={block('pool-meta')} />\n {isRoot ? <PoolTreeStaticConfiguration /> : <PoolStaticConfiguration />}\n </div>\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\n\nfunction PoolStaticConfiguration() {\n const staticConfigurationItems = useSelector(getCurrentPoolStaticConfiguration);\n\n const columns: Array<Column<ArrayElement<typeof staticConfigurationItems>>> = [\n {\n name: 'name',\n header: 'Guarantees',\n sortable: false,\n width: 200,\n },\n {\n name: 'cpu',\n header: 'CPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const {cpu, cpuLabel} = row;\n if (cpuLabel) {\n return <Label capitalize text={cpuLabel} />;\n }\n return format['Number'](cpu);\n },\n align: 'right',\n },\n {\n name: 'gpu',\n header: 'GPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.gpu);\n },\n align: 'right',\n },\n {\n name: 'memory',\n header: 'Memory',\n sortable: false,\n width: 120,\n render: ({row}) => {\n return format['Bytes'](row.memory);\n },\n align: 'right',\n },\n {\n name: 'user_slots',\n header: 'User slots',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.user_slots);\n },\n align: 'right',\n },\n {\n name: 'network',\n header: 'Network',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const res = format['Number'](row.network);\n return res === format.NO_VALUE ? res : res + ' %';\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={staticConfigurationItems}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n />\n );\n}\n\nfunction PoolTreeStaticConfiguration() {\n const items = useSelector(getCurrentPoolTreeStaticConfiguration);\n const poolTree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n\n const columns: Array<Column<ArrayElement<typeof items>>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'total',\n header: 'Total',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format[row.format](row.total);\n },\n align: 'right',\n },\n {\n name: 'used',\n header: 'Distributed',\n sortable: false,\n width: 150,\n render({row}) {\n const {used, usedTitle, lastDayMaxValueSensor, lastDayMaxValueTitle} = row;\n const formatValue = format[row.format];\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: lastDayMaxValueTitle,\n sensor: lastDayMaxValueSensor,\n format: formatValue,\n current: {\n value: formatValue(used),\n title: usedTitle!,\n },\n showHint: true,\n showAsLink: true,\n });\n\n return !content ? (\n formatValue(used)\n ) : (\n <span className={block('used-cell')}>\n {formatValue(used)} / {content}\n </span>\n );\n },\n align: 'right',\n },\n {\n name: 'free',\n header: 'Delta',\n sortable: false,\n width: 150,\n render({row}) {\n const formatFn = format[row.format];\n const {free, total, lastDayMaxValueSensor} = row;\n const freeValue = formatFn(free);\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: 'Last day max operations',\n sensor: lastDayMaxValueSensor,\n format: (lastDayMaxValue?: number) => {\n const v =\n isNaN(total!) || isNaN(lastDayMaxValue!)\n ? undefined\n : total! - lastDayMaxValue!;\n return formatFn(v);\n },\n });\n\n return !content ? (\n freeValue\n ) : (\n <span>\n {freeValue} / {content}\n </span>\n );\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={items}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n rowClassName={(row) => {\n return !row?.level ? '' : block('row', {level: row.level as any});\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {getSchedulingOperationsError} from '../../../../../store/selectors/scheduling/expanded-pools';\n\nfunction SchedulingOperationsError() {\n const error = useSelector(getSchedulingOperationsError);\n return !error ? null : <ErrorBlock error={error} topMargin={'none'} />;\n}\n\nexport default React.memo(SchedulingOperationsError);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\n\nimport {getPoolsNames, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {changePool} from '../../../store/actions/scheduling/scheduling';\nimport {schedulingLoadFilterAttributes} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport Suggest from '../../../components/Suggest/Suggest';\n\nimport './PoolsSuggest.scss';\n\nconst block = cn('yt-pools-suggest');\n\nexport function PoolsSuggest({\n onCancelEdit = () => {},\n className,\n autoFocus,\n}: {\n onCancelEdit?: () => void;\n className?: string;\n autoFocus?: boolean;\n}) {\n const poolNames = useSelector(getPoolsNames);\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n\n const getSuggestItems = React.useCallback(\n (_items: any, filter?: string) => {\n if (!filter) {\n return poolNames;\n }\n\n const match: Array<string> = [];\n const startsWith: Array<string> = [];\n const filtered: Array<string> = [];\n\n const lcFilter = filter?.toLowerCase();\n\n forEach_(poolNames, (poolName) => {\n const lcPoolName = poolName.toLowerCase();\n if (lcFilter === lcPoolName) {\n match.push(poolName);\n } else if (lcPoolName.startsWith(lcFilter)) {\n startsWith.push(poolName);\n } else if (poolName !== ROOT_POOL_NAME && -1 !== lcPoolName.indexOf(lcFilter)) {\n filtered.push(poolName);\n }\n });\n return match.concat(startsWith, filtered);\n },\n [poolNames],\n );\n\n const handleCancelEdit = React.useCallback(() => {\n setTimeout(onCancelEdit, 500);\n }, [onCancelEdit]);\n\n const onItemClick = React.useCallback(\n (pool: string) => {\n dispatch(changePool(pool));\n onCancelEdit();\n },\n [dispatch, onCancelEdit],\n );\n\n const onFocus = React.useCallback(() => {\n dispatch(schedulingLoadFilterAttributes(tree));\n }, [dispatch, tree]);\n\n return (\n <Suggest\n className={block(null, className)}\n popupClassName={block('popup')}\n autoFocus={autoFocus}\n filter={getSuggestItems}\n onBlur={handleCancelEdit}\n onFocus={onFocus}\n placeholder=\"Select pool...\"\n onItemClick={(item) => onItemClick('string' === typeof item ? item : item.value)}\n items={poolNames}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../components/Label/Label';\nimport UIFactory from '../../../../../UIFactory';\nimport {PoolInfo} from '../../../../../store/selectors/scheduling/scheduling-pools';\nimport {getCluster, getClusterUiConfig} from '../../../../../store/selectors/global';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolInfo}) {\n const cluster = useSelector(getCluster);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {integralType} = pool;\n const showGuaranteeType = integralType === 'burst' || integralType === 'relaxed';\n const hasFlow = Number(pool.flowCPU) > 0 || Number(pool.flowGPU) > 0;\n return (\n <span className={block()}>\n {showGuaranteeType && (\n <Label\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n )}\n {!showGuaranteeType && hasFlow && (\n <Label className={block('tag')} text={'Integral'} theme={'complementary'} />\n )}\n {pool.mode === 'fifo' && (\n <Label className={block('tag')} text={'FIFO'} theme={'misc'} />\n )}\n {UIFactory.renderSchedulingTableItemExtraControls({\n cluster,\n pool,\n clusterUiConfig,\n })}\n </span>\n );\n}\n\nexport default React.memo(PoolTags);\n","import {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport qs from 'qs';\n\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../../components/formatters';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Button from '../../../../../components/Button/Button';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n changePool,\n changeTableTreeState,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {\n openPoolDeleteModal,\n schedulingSetAbcFilter,\n} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n getCurrentPool,\n getIsRoot,\n getSchedulingIsInitialLoading,\n getSchedulingOverviewMaxDepth,\n getSchedulingTreeState,\n getTableItems,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {SCHEDULING_POOL_TREE_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {poolsTableItems} from '../../../../../utils/scheduling/overviewTable';\nimport {HEADER_HEIGHT, Page} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport ShareUsageBar from '../../controls/ShareUsageBar';\nimport SchedulingStaticConfiguration from '../../../PoolStaticConfiguration/SchedulingStaticConfiguration';\n\nimport './Overview.scss';\nimport {Dialog} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {\n getPoolPathsByName,\n getSchedulingOperationsCount,\n resetExpandedPools,\n setExpandedPools,\n setLoadAllOperations,\n} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport PoolTags from './PoolTags';\nimport UIFactory from '../../../../../UIFactory';\n\nconst block = cn('scheduling-overview');\n\nconst STARVATION_STATUS_TO_THEME = {\n starving: 'warning',\n aggressively_starving: 'danger',\n};\n\nclass Overview extends Component {\n static resourcePropTypes = PropTypes.shape({\n type: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n });\n\n static tableItemPropTypes = PropTypes.shape({\n abc: PropTypes.object,\n name: PropTypes.string.isRequired,\n fairShareRatio: PropTypes.number,\n usageRatio: PropTypes.number,\n weight: PropTypes.number,\n demandRatio: PropTypes.number,\n\n runningOperationCount: PropTypes.number,\n operationCount: PropTypes.number,\n children: PropTypes.array,\n level: PropTypes.number,\n type: PropTypes.string,\n mode: PropTypes.string,\n });\n\n static propTypes = {\n // from connect\n treeState: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n\n changePool: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n schedulingSetFilter: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n changeTableTreeState: PropTypes.func.isRequired,\n schedulingSetAbcFilter: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n static poolModeTheme = {\n fair_share: 'default',\n fifo: 'info',\n };\n\n static renderBars([share, usage] = [], {forceTheme = undefined, title = undefined}) {\n return (\n <ShareUsageBar\n className={block('bars')}\n shareValue={share?.value}\n shareTitle={share?.title}\n usageValue={usage?.value}\n usageTitle={usage?.title}\n forceTheme={forceTheme}\n title={title}\n />\n );\n }\n\n static renderRatio(data) {\n const EPSILON = 1e-6;\n\n if (data < EPSILON) {\n return 0;\n } else if (data === 1) {\n return 1;\n }\n\n return hammer.format['Number'](data, {digits: 6});\n }\n\n static renderMode(item) {\n if (item.mode) {\n const text = hammer.format['ReadableField'](item.mode);\n const theme = Overview.poolModeTheme[item.mode];\n\n return <Label text={text} theme={theme} />;\n }\n\n return hammer.format.NO_VALUE;\n }\n\n static renderWeight(item) {\n const {weightEdited} = item;\n const edited = !isNaN(weightEdited);\n return (\n <span className={block('weight-content', {edited})}>\n <Tooltip content={edited ? 'Explicitly defined' : 'Automatically calculated'}>\n {hammer.format['Number'](item.weight, {\n digits: 6,\n digitsOnlyForFloat: true,\n })}\n </Tooltip>\n </span>\n );\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = poolsTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderFairShareUsage(item) {\n const barsData = [\n {\n value: item.fairShareRatio,\n title: 'Fair share',\n theme: 'success',\n },\n {\n value: item.usageRatio,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n const {starvation_status} = item;\n const forceTheme = STARVATION_STATUS_TO_THEME[starvation_status];\n\n return Overview.renderBars(barsData, {\n forceTheme,\n title: !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={hammer.format.Readable(starvation_status)} />\n </div>\n ),\n });\n }\n\n static renderOperationOverview(item) {\n const formatter = hammer.format['Number'];\n\n return formatter(item.runningOperationCount) + ' / ' + formatter(item.operationCount);\n }\n\n static renderAttributesButton(item, getPoolPaths) {\n const buttonProps = getPoolPaths\n ? {\n getPathProps: () => {\n return {\n exactPath: getPoolPaths(item.name).orchidPath,\n };\n },\n }\n : {\n attributes: item.attributes,\n };\n return <ClickableAttributesButton title={item.name} {...buttonProps} />;\n }\n\n static renderEditButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n const title = `edit pool ${item?.name || ''}`;\n return (\n <Button title={title} size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n );\n }\n\n static renderFifoIndex(item) {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n }\n\n static renderDeleteButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n return (\n <Button size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n }\n\n static renderType(item, columnName, toggleItemState, itemState, allowExpand = true) {\n const icon = {\n pool: 'tasks',\n operation: 'code',\n };\n\n const empty = allowExpand && itemState ? itemState.empty : true;\n const expanderClass = block('table-row-expander', {empty});\n const expanderClassIcon = block('table-row-expander-icon', {empty});\n\n const expanderIcon = itemState && (\n <Icon\n className={expanderClassIcon}\n awesome={itemState.collapsed ? 'angle-down' : 'angle-up'}\n />\n );\n\n return (\n <span onClick={empty ? undefined : toggleItemState} className={expanderClass}>\n {item.type !== 'operation' && expanderIcon}\n <span\n className={block('operation-icon', {\n type: item.type,\n })}\n title={item.type}\n >\n {icon[item.type] ? <Icon awesome={icon[item.type]} /> : null}\n </span>\n </span>\n );\n }\n\n static renderName(item, tab, cluster, currentPool) {\n const isCurrentPool = item.name === currentPool.name;\n const linkText = {\n pool: item.incomplete ? '' : item.name,\n operation: item.id,\n };\n\n if (item.type === 'pool') {\n if (isCurrentPool) {\n return <FormattedText text={linkText[item.type]} />;\n } else {\n const params = qs.parse(window.location.search.slice(1));\n const text = linkText[item.type];\n const state = {\n ...params,\n tab,\n cluster,\n pool: item.name,\n page: Page.SCHEDULING,\n };\n return <FormattedLink text={text} state={state} theme=\"primary\" routed />;\n }\n } else if (item.type === 'operation') {\n const url = `/${cluster}/operations/${item.id}`;\n return <Link url={url}>{linkText[item.type]}</Link>;\n } else {\n return <FormattedText text={item.name} />;\n }\n }\n\n static renderEphemeralIcon(item) {\n return (\n item.isEphemeral && (\n <Tooltip content=\"Ephemeral pool\" className={block('ephemeral-icon')}>\n <Icon awesome=\"ghost\" />\n </Tooltip>\n )\n );\n }\n\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool, itemsMaxDepth} = this.props;\n const allowExpand = item.name !== currentPool.name;\n\n return (\n <span\n className={block('name-content', {\n level: item.level,\n 'max-depth': itemsMaxDepth,\n })}\n >\n {Overview.renderType(item, ...rest, allowExpand)}\n <span className={block('name-content-name')}>\n {Overview.renderName(item, Tab.OVERVIEW, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n get tableSettings() {\n const {treeState} = this.props;\n\n return {\n treeState,\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_TREE_TABLE_ID,\n tree: true,\n columns: {\n items: poolsTableItems,\n sets: {\n default: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'fair_share_usage',\n 'fair_share',\n 'usage',\n 'demand',\n 'min_share',\n 'operation_overview',\n 'dominant_resource',\n 'actions',\n ],\n },\n },\n mode: 'default',\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n fair_share: Overview.renderColumnAsRatio,\n usage: Overview.renderColumnAsRatio,\n demand: Overview.renderColumnAsRatio,\n min_share: Overview.renderMinShare,\n fair_share_usage: Overview.renderFairShareUsage,\n dominant_resource: Overview.renderDominantResource,\n operation_overview: Overview.renderOperationOverview,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.key;\n },\n };\n }\n\n renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <SchedulingOverviewToolbar {...this.props} />\n </div>\n )}\n </Sticky>\n );\n }\n\n rowClassName = (item) => {\n const {currentPool} = this.props;\n return item.name !== currentPool?.name ? undefined : block('current-row');\n };\n\n render() {\n const {items, treeStateExpanded, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <SchedulingStaticConfiguration onToggleCollapsedState={fireResizeEvent} />\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ResetExpandedPoolsOnTreeChange>\n <ElementsTable\n {...this.tableSettings}\n treeStateExpanded={treeStateExpanded}\n items={items}\n rowClassName={this.rowClassName}\n onItemToggleState={this.onItemToggleState}\n isLoading={isInitialLoading}\n />\n </ResetExpandedPoolsOnTreeChange>\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n\n onItemToggleState = (poolPath, collapsed) => {\n const {setExpandedPools} = this.props;\n const parts = poolPath.split('/');\n const poolName = parts[parts.length - 1];\n\n setExpandedPools({[poolName]: !collapsed});\n };\n}\n\nconst mapStateToProps = (state) => {\n const items = getTableItems(state);\n const itemsMaxDepth = getSchedulingOverviewMaxDepth(state);\n const cluster = getCluster(state);\n const currentPool = getCurrentPool(state);\n const treeState = getSchedulingTreeState(state);\n const isRoot = getIsRoot(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {\n cluster,\n items,\n itemsMaxDepth,\n currentPool,\n treeState,\n treeStateExpanded: isRoot || !items[0] ? undefined : [items[0].key],\n abcServiceFilter: getSchedulingAbcFilter(state),\n isInitialLoading,\n };\n};\n\nconst mapDispatchToProps = {\n changePool,\n openPoolDeleteModal,\n openEditModal,\n changeTableTreeState,\n schedulingSetAbcFilter,\n setExpandedPools,\n getSchedulingOperationsCount,\n setLoadAllOperations,\n getPoolPathsByName,\n};\n\nfunction fireResizeEvent() {\n setTimeout(() => window.dispatchEvent(new Event('resize')), 500);\n}\n\nconst OverviewConnected = connect(mapStateToProps, mapDispatchToProps)(Overview);\n\nexport default OverviewConnected;\n\nexport function OverviewWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OverviewConnected />;\n}\n\nfunction ResetExpandedPoolsOnTreeChange({children}) {\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n /**\n * The component is required to reset inner state of ElementsTable by recreate it when tree is changed.\n * Also it resets state when the tab is changed back from 'Details'\n * These resets are required to sync store.getState().schedulingOperations.expandedPools and state of ElementsTable\n * to correctly calculate current max depth of items (see getSchedulingOverviewMaxDepth)\n */\n React.useEffect(() => {\n dispatch(resetExpandedPools(tree));\n }, [tree]);\n\n return <React.Fragment key={tree}>{children}</React.Fragment>;\n}\n\nclass SchedulingOverviewToolbar extends React.PureComponent {\n state = {\n confirmExpandDialogVisible: false,\n };\n\n handleExpand = () => {\n const opCount = this.props.getSchedulingOperationsCount();\n if (opCount <= 2000) {\n this.onConfirmExpand();\n } else {\n this.setConfirmDialogVisibility(true);\n }\n };\n onConfirmExpand = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('expanded');\n };\n handleCollapse = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('collapsed');\n };\n\n onAbcServiceFilter = (abcService) => {\n const {slug, id} = abcService || {};\n this.props.schedulingSetAbcFilter({id, slug});\n };\n\n setConfirmDialogVisibility = (confirmExpandDialogVisible) => {\n this.setState({confirmExpandDialogVisible});\n };\n\n renderConfirmExpandDialog() {\n const {confirmExpandDialogVisible} = this.state;\n return !confirmExpandDialogVisible ? null : (\n <Dialog open={true}>\n <Dialog.Header caption={'Confirmation of \"Expand all\"'} />\n <Dialog.Body>\n To display the expanded tree it is required to load all running operations, it\n might be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonApply={() => {\n this.setConfirmDialogVisibility(false);\n this.onConfirmExpand();\n }}\n onClickButtonCancel={() => this.setConfirmDialogVisibility(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </Dialog>\n );\n }\n\n render() {\n const {\n abcServiceFilter: {slug},\n } = this.props;\n\n return (\n <React.Fragment>\n {this.renderConfirmExpandDialog()}\n <PoolsSuggest className={block('filter')} />\n\n {UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: {slug},\n onChange: this.onAbcServiceFilter,\n })}\n\n <Button\n size=\"m\"\n className={block('toolbar-button')}\n theme=\"normal\"\n title=\"Expand All\"\n onClick={this.handleExpand}\n >\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n\n <Button size=\"m\" theme=\"normal\" title=\"Collapse All\" onClick={this.handleCollapse}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n","import React from 'react';\nimport {compose} from 'redux';\n\nimport withStickyHead from '../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../components/ElementsTable/hocs/withStickyFooter';\nimport ElementsTableBase from '../../components/ElementsTable/ElementsTable';\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction ElementsTableSticky(props) {\n return <ElementsTable {...props} />;\n}\n\nexport default ElementsTableSticky;\n","import React, {Component, Fragment} from 'react';\nimport {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport ElementsTableSticky from '../../../../../components/ElementsTable/ElementsTableSticky';\nimport Overview from '../../../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Filter from '../../../../../components/Filter/Filter';\n\nimport {\n changeContentMode,\n changePool,\n changePoolChildrenFilter,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {SCHEDULING_POOL_CHILDREN_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {calculateTotalOverPools} from '../../../../../utils/scheduling/details';\nimport {childTableItems} from '../../../../../utils/scheduling/detailsTable';\nimport {HEADER_HEIGHT} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getContentMode,\n getCurrentPool,\n getPollChildrenTableItems,\n getPoolChildrenFilter,\n getSchedulingIsInitialLoading,\n getSortedPoolChildren,\n} from '../../../../../store/selectors/scheduling/scheduling';\n\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getProgressTheme} from '../../../../../utils/progress';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {Bold, Secondary} from '../../../../../components/Text/Text';\n\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\n\nimport PoolTags from '../Overview/PoolTags';\n\nimport './Details.scss';\n\nconst block = cn('scheduling-details');\n\nclass Details extends Component {\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n static renderMaxShare(item) {\n return Overview.renderRatio(item.maxShareRatio);\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderColumnAsNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data);\n }\n\n static renderMaxOperationCount(item) {\n const {maxOperationCount, maxOperationCountEdited} = item;\n return Details.renderNumberWithEdited(maxOperationCount, maxOperationCountEdited);\n }\n\n static renderMaxRunningOperationCount(item) {\n const {maxRunningOperationCount, maxRunningOperationCountEdited} = item;\n return Details.renderNumberWithEdited(\n maxRunningOperationCount,\n maxRunningOperationCountEdited,\n );\n }\n\n static renderNumberWithEdited(value, editedValue) {\n const content = hammer.format.Number(value);\n\n const autoCalculated = isNaN(editedValue);\n return (\n <Tooltip content={autoCalculated ? 'Automatically calculated' : 'Explicitly defined'}>\n {autoCalculated ? <Secondary>{content}</Secondary> : <Bold>{content}</Bold>}\n </Tooltip>\n );\n }\n\n static renderColumnAsBytes(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Bytes'](data);\n }\n\n static renderColumnAsFloatNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static renderIntegralGuarantee(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n const {integralType} = item;\n const hasActiveGuarantee = integralType && integralType !== 'none';\n\n const value = hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n\n return hasActiveGuarantee ? (\n value\n ) : (\n <Tooltip\n className={block('integral-guarantee', {\n inactive: !hasActiveGuarantee,\n })}\n content={'It is impossible to use the guarantee until \"Guarantee type\" is defined'}\n >\n {value}\n </Tooltip>\n );\n }\n\n static renderColumnAsReadable(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](data);\n }\n\n static renderIntegralType(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return data === undefined\n ? hammer.format.NO_VALUE\n : Details.renderColumnAsReadable(item, columnName);\n }\n\n static renderAsProgress(item, columnName) {\n const value = childTableItems[columnName].get(item);\n const theme = getProgressTheme(value);\n const text = childTableItems[columnName].text(item);\n return isNaN(value) ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n }\n\n static childrenIntegrals(item, columnName) {\n const value = childTableItems[columnName].get(item);\n return !value\n ? hammer.format.NO_VALUE\n : hammer.format.Number(value, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static propTypes = {\n // from connect\n mode: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n children: PropTypes.arrayOf(Overview.tableItemPropTypes),\n\n changePoolChildrenFilter: PropTypes.func.isRequired,\n changeContentMode: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n changePool: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n get columnsSets() {\n return {\n cpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n //'rel_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n //'rel_usage_cpu',\n 'resource_limit_cpu',\n //'guaranteed_usage_cpu',\n 'actions',\n ],\n },\n memory: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n //'rel_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n //'rel_usage_memory',\n 'resource_limit_memory',\n //'guaranteed_usage_memory',\n 'actions',\n ],\n },\n gpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n //'rel_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n //'rel_usage_gpu',\n 'resource_limit_gpu',\n //'guaranteed_usage_gpu',\n 'actions',\n ],\n },\n user_slots: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n //'rel_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n //'rel_usage_user_slots',\n 'resource_limit_user_slots',\n //'guaranteed_usage_user_slots',\n 'actions',\n ],\n },\n operations: {\n items: [\n 'name',\n 'FI',\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n 'actions',\n ],\n },\n integral: {\n items: [\n 'name',\n 'FI',\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n //'accumulated_cpu',\n 'burst_duration',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {mode, children} = this.props;\n const isCurrentPool = this.isCurrentPool;\n const totalRow = children?.length ? calculateTotalOverPools(children) : undefined;\n\n return {\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_CHILDREN_TABLE_ID,\n footer: totalRow,\n header: false,\n top: 99,\n columns: {\n items: childTableItems,\n sets: this.columnsSets,\n mode,\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n dominant_resource: Details.renderDominantResource,\n min_share: Details.renderMinShare,\n max_share: Details.renderMaxShare,\n operation_overview: Overview.renderOperationOverview,\n demand: Details.renderColumnAsRatio,\n fair_share: Details.renderColumnAsRatio,\n usage: Details.renderColumnAsRatio,\n fair_share_usage: Overview.renderFairShareUsage,\n\n resource_detailed_cpu: Details.renderColumnAsFloatNumber,\n resource_detailed_memory: Details.renderColumnAsBytes,\n resource_detailed_gpu: Details.renderColumnAsNumber,\n resource_detailed_user_slots: Details.renderColumnAsNumber,\n\n resource_limit_cpu: Details.renderColumnAsFloatNumber,\n resource_limit_memory: Details.renderColumnAsBytes,\n resource_limit_gpu: Details.renderColumnAsNumber,\n resource_limit_user_slots: Details.renderColumnAsNumber,\n\n min_resources_cpu: Details.renderColumnAsFloatNumber,\n min_resources_memory: Details.renderColumnAsBytes,\n min_resources_gpu: Details.renderColumnAsNumber,\n min_resources_user_slots: Details.renderColumnAsNumber,\n\n abs_guaranteed_cpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_memory: Details.renderColumnAsBytes,\n abs_guaranteed_gpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_user_slots: Details.renderColumnAsFloatNumber,\n\n abs_demand_cpu: Details.renderColumnAsNumber,\n abs_demand_memory: Details.renderColumnAsBytes,\n abs_demand_gpu: Details.renderColumnAsNumber,\n abs_demand_user_slots: Details.renderColumnAsNumber,\n\n abs_usage_cpu: Details.renderColumnAsNumber,\n abs_usage_memory: Details.renderColumnAsBytes,\n abs_usage_gpu: Details.renderColumnAsNumber,\n abs_usage_user_slots: Details.renderColumnAsNumber,\n\n rel_guaranteed_cpu: this.renderRelResource,\n rel_guaranteed_memory: this.renderRelResource,\n rel_guaranteed_gpu: this.renderRelResource,\n rel_guaranteed_user_slots: this.renderRelResource,\n\n rel_usage_cpu: this.renderRelResource,\n rel_usage_memory: this.renderRelResource,\n rel_usage_gpu: this.renderRelResource,\n rel_usage_user_slots: this.renderRelResource,\n\n guaranteed_usage_cpu: this.renderResourceBars,\n guaranteed_usage_memory: this.renderResourceBars,\n guaranteed_usage_gpu: this.renderResourceBars,\n guaranteed_usage_user_slots: this.renderResourceBars,\n\n running_operation_progress: Details.renderAsProgress,\n running_operation_count: Details.renderColumnAsNumber,\n operation_count: Details.renderColumnAsNumber,\n operation_progress: Details.renderAsProgress,\n max_running_operation_count: Details.renderMaxRunningOperationCount,\n max_operation_count: Details.renderMaxOperationCount,\n\n integral_type: Details.renderIntegralType,\n burst_cpu: Details.renderIntegralGuarantee,\n flow_cpu: Details.renderIntegralGuarantee,\n children_burst_cpu: Details.childrenIntegrals,\n children_flow_cpu: Details.childrenIntegrals,\n accumulated: Details.renderColumnAsRatio,\n accumulated_cpu: Details.renderColumnAsNumber,\n burst_duration: Details.renderColumnAsNumber,\n\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.name;\n },\n itemMods(item) {\n return {\n current: isCurrentPool(item) ? 'yes' : '',\n aggregation: item.aggregation ? 'yes' : '',\n };\n },\n };\n }\n\n renderResourceBars = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const resourceData = childTableItems[columnName].get(item, currentPool);\n const barsData = [\n {\n value: resourceData.guaranteed,\n title: 'Guaranteed share',\n theme: 'success',\n },\n {\n value: resourceData.usage,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n return Overview.renderBars(barsData);\n };\n\n renderRelResource = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const data = childTableItems[columnName].get(item, currentPool);\n\n return Overview.renderRatio(data);\n };\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool} = this.props;\n\n return (\n <span className={block('name-cell', {child: item.isChildPool})}>\n {Overview.renderType(item, ...rest)}\n <span className={block('name-cell-text')}>\n {Overview.renderName(item, Tab.DETAILS, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n isCurrentPool = (item) => item.name === this.props.currentPool.name;\n\n renderToolbar() {\n const {filter, mode, changePoolChildrenFilter, changeContentMode, currentPool} = this.props;\n\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <Filter\n key={currentPool?.name}\n size=\"m\"\n value={filter}\n placeholder=\"Filter...\"\n className={block('filter')}\n onChange={changePoolChildrenFilter}\n />\n\n <RadioButton\n size=\"m\"\n value={mode}\n onChange={changeContentMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'cpu',\n text: 'CPU',\n },\n {\n value: 'memory',\n text: 'Memory',\n },\n {\n value: 'gpu',\n text: 'GPU',\n },\n {\n value: 'user_slots',\n text: 'User slots',\n },\n {\n value: 'operations',\n text: 'Operations',\n },\n {\n value: 'integral',\n text: 'Integral guarantees',\n },\n ]}\n />\n </div>\n )}\n </Sticky>\n );\n }\n\n render() {\n const {items, mode, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ElementsTableSticky\n cssTableMods={{mode}}\n {...this.tableSettings}\n items={items}\n isLoading={isInitialLoading}\n />\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const currentPool = getCurrentPool(state);\n const items = getPollChildrenTableItems(state);\n const mode = getContentMode(state);\n const filter = getPoolChildrenFilter(state);\n const cluster = getCluster(state);\n const children = getSortedPoolChildren(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {currentPool, mode, filter, items, children, cluster, isInitialLoading};\n};\n\nconst mapDispatchToProps = {\n changePoolChildrenFilter,\n changeContentMode,\n openEditModal,\n openPoolDeleteModal,\n changePool,\n getPoolPathsByName,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <DetailsConnected />;\n}\n","import hammer from '../../common/hammer';\n\nexport function calculateTotalOverPools(pools) {\n const summedProperties = [\n 'weight',\n 'minShareRatio',\n 'demandRatio',\n 'fairShareRatio',\n 'usageRatio',\n 'maxOperationCount',\n 'maxRunningOperationCount',\n 'runningOperationCount',\n 'operationCount',\n ].map((name) => ({name, type: 'sum'}));\n\n ['cpu', 'user_memory', 'gpu', 'user_slots'].forEach((resource) => {\n ['min', 'guaranteed', 'usage', 'demand'].forEach((metric) => {\n const name = ['resources', resource, metric].join('.');\n summedProperties.push({name, type: 'nested/sum'});\n });\n });\n\n // We can aggregate only pools with resources\n const items = pools.filter((pool) => Boolean(pool.resources));\n\n return Object.assign(hammer.aggregation.prepare(items, summedProperties)[0], {\n key: 'aggregation',\n name: 'Aggregation',\n type: 'aggregation',\n aggregation: true,\n });\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getIsRoot,\n getPool,\n getPools,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {PoolAclPanel} from '../../../../../containers/ACL';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {getAclLoadState} from '../../../../../store/selectors/acl';\nimport {IdmObjectType} from '../../../../../constants/acl';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nfunction PoolAcl() {\n const isRoot = useSelector(getIsRoot);\n\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const pools = useSelector(getPools);\n\n if (isRoot) {\n return (\n <NoContent\n warning=\"Visualization is not supported for <Root>.\"\n hint=\" Please select a specific pool.\"\n />\n );\n }\n\n return isEmpty_(pools) ? null : (\n <ErrorBoundary>\n <PoolAclPanel key={`${tree}_${pool}`} path={pool} poolTree={tree} />\n </ErrorBoundary>\n );\n}\n\nfunction PoolAclWithRum({loadState}) {\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_ACL,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_ACL,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PoolAcl />;\n}\n\nconst mapStateToProps = (state) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {loadExpandedPools} from '../../../store/actions/scheduling/expanded-pools';\n\nfunction SchedulingExpandedPoolsUpdater() {\n const tree = useSelector(getTree);\n const name = useSelector(getPool);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadExpandedPools(tree));\n }, [dispatch, tree, name]);\n\n return null;\n}\n\nexport default React.memo(SchedulingExpandedPoolsUpdater);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport {OverviewWithRum} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport Details from '../../../pages/scheduling/Content/tabs/Details/Details';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {DEFAULT_TAB, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport PoolAcl from '../../../pages/scheduling/Content/tabs/PoolAcl/PoolAcl';\nimport {\n getIsRoot,\n getPool,\n getPoolIsEphemeral,\n getTree,\n isPoolAclAllowed,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport './Content.scss';\nimport {getCluster} from '../../../store/selectors/global';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport UIFactory from '../../../UIFactory';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst block = cn('scheduling-content');\n\nContent.propTypes = {\n // from parent\n className: PropTypes.string,\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nfunction Content({className, match, location}) {\n const cluster = useSelector(getCluster);\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const isEphemeral = useSelector(getPoolIsEphemeral);\n const isRoot = useSelector(getIsRoot);\n const allowAcl = useSelector(isPoolAclAllowed);\n\n const localTab = {...Tab};\n\n const showSettings = reduce_(\n Tab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {},\n );\n\n const titleDict = {};\n\n const aclTab = showSettings[Tab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n });\n\n const extraRoutes = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate} = tab;\n const tabSettings = {show: true};\n showSettings[name] = tabSettings;\n\n if (urlTemplate) {\n tabSettings.routed = false;\n tabSettings.external = true;\n tabSettings.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytPool: pool,\n ytPoolTree: tree,\n });\n }\n\n localTab[name] = name;\n if (title) {\n titleDict[name] = title;\n }\n if (component) {\n const route = <Route key={name} path={`${match.path}/${name}`} component={component} />;\n extraRoutes.push(route);\n }\n });\n\n delete localTab.ACL;\n localTab[Tab.ACL] = Tab.ACL;\n\n const props = makeTabProps(match.url, localTab, showSettings, {pool, tree}, titleDict);\n\n return (\n <ErrorBoundary>\n <SchedulingExpandedPoolsUpdater />\n <div className={block(null, className)}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={OverviewWithRum} />\n <Route path={`${match.path}/${Tab.DETAILS}`} component={Details} />\n {extraRoutes}\n {aclTab.show && <Route path={`${match.path}/${Tab.ACL}`} component={PoolAcl} />}\n <Route path={`${match.path}/:tab`} component={Placeholder} />\n <Redirect\n from={match.url}\n to={{pathname: `${match.url}/${DEFAULT_TAB}`, search: location.search}}\n />\n </Switch>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport hammer from '../../../common/hammer';\nimport {getIsRoot, getResources} from '../../../store/selectors/scheduling/scheduling';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport './SchedulingResources.scss';\n\nconst block = cn('scheduling-resources');\nconst headingBlock = cn('elements-heading');\n\nfunction SchedulingResources() {\n const isRoot = useSelector(getIsRoot);\n const resources = useSelector(getResources) as any;\n\n return !isRoot || isEmpty_(resources) ? null : (\n <div className={block()}>\n {map_(resources, (resource) => (\n <div className={block('resources-item')} key={resource.type}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](resource.type)}\n </div>\n <Progress {...resource.progress} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default React.memo(SchedulingResources);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {DialogField, FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Error from '../../../../components/Error/Error';\n\nimport {\n calculatePoolPath,\n getPools,\n getPoolsSelectItems,\n getSchedulingEditItem,\n getSchedulingSourcesOfEditItem,\n getTree,\n} from '../../../../store/selectors/scheduling/scheduling';\nimport {\n InitialPoolResourceInfo,\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolGeneralResourceType,\n PoolIntegralResourceType,\n PoolStrongResourceType,\n getInitialValues,\n} from '../../../../utils/scheduling/scheduling';\nimport {isAbcPoolName, isTopLevelPool} from '../../../../utils/scheduling/pool';\nimport {closeEditModal, editPool} from '../../../../store/actions/scheduling/scheduling';\n\nimport {checkUserPermissionsUI} from '../../../../utils/acl/acl-api';\nimport {getCluster, getCurrentUserName} from '../../../../store/selectors/global';\nimport {getCurrentTreeGpuLimit} from '../../../../store/selectors/scheduling/scheduling-ts';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n PoolInfo,\n getSchedulingPoolsMapByName,\n} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\n\nconst block = cn('pool-editor-dialog');\n\nfunction makePermissionWarning(visible: boolean) {\n return !visible ? null : (\n <div className={block('permissions-warning')}>\n You do not have sufficient permissions to modify pool settings. In order to be able to\n modify pool settings <span className={block('flag')}>inherit_acl</span> flag should be\n enabled for current pool and you should be responsible for the parent pool.\n </div>\n );\n}\n\nfunction makeError(error: any) {\n return isEmpty_(error) ? null : <Error className={block('error')} error={error} />;\n}\n\nexport interface PoolEditorFormValues {\n general: Record<PoolGeneralResourceType, InitialPoolResourceInfo> & {\n weight: {value?: number; error?: string};\n }; // TODO add description for another fields\n resourceGuarantee: Record<PoolStrongResourceType, InitialPoolResourceInfo>;\n integralGuarantee: Record<\n Exclude<PoolIntegralResourceType, 'guaranteeType'>,\n InitialPoolResourceInfo\n > & {guaranteeType?: 'none' | 'burst' | 'relaxed'};\n resourceLimits: {\n cpu: number | string;\n gpu: number | string;\n memory: number | string;\n userSlots: number | string;\n };\n otherSettings: {\n forbidImmediateOperations: boolean;\n fifoSortParams: Array<string>;\n createEphemeralSubpools: boolean;\n };\n}\n\nexport function PoolEditorDialog() {\n const dispatch = useDispatch();\n\n const editItem = useSelector(getSchedulingEditItem);\n const {poolErrorData, editVisibility} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const treGpuLimit = useSelector(getCurrentTreeGpuLimit);\n\n const allowedSources = useSelector(getSchedulingSourcesOfEditItem);\n\n const poolsItems = useSelector(getPoolsSelectItems);\n const pools = useSelector(getPools);\n const tree = useSelector(getTree);\n const modeItems = [\n {key: 'fair_share', value: 'fair_share', title: 'fair_share'},\n {key: 'fifo', value: 'fifo', title: 'fifo'},\n ];\n const [initialValues, initialFormValues] = useMemo(() => {\n const data = getInitialValues(editItem, allowedSources);\n const formData: PoolEditorFormValues = {\n ...data,\n general: {\n ...data.general,\n weight: {\n value: data.general.weight,\n },\n },\n };\n return [data, formData];\n }, [editItem, allowedSources]); // don't pass pools into memo's array\n\n const editCloseHandler = useCallback(() => {\n dispatch(closeEditModal({cancelled: true}));\n }, [dispatch]);\n const editConfirmHandler = useCallback(\n async (form: FormApi<PoolEditorFormValues>) => {\n const {values} = form.getState();\n const {general, resourceGuarantee, integralGuarantee, resourceLimits, otherSettings} =\n values;\n const data = {\n general: {\n ...pick_(general, ['name', 'mode']),\n weight: general.weight.value,\n ...pickBy_(\n pick_(general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof POOL_GENERAL_TYPE_TO_ATTRIBUTE;\n const initialValue = initialValues.general[key].limit;\n return item.limit !== initialValue;\n },\n ),\n },\n resourceGuarantee: pickBy_(\n pick_(resourceGuarantee, Object.keys(POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof resourceGuarantee;\n const initialValue = initialValues.resourceGuarantee[key].limit;\n return item.limit !== initialValue;\n },\n ),\n integralGuarantee: pickBy_(\n pick_(integralGuarantee, Object.keys(POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR)),\n (item, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof integralGuarantee;\n const initialValue = initialValues.integralGuarantee[key];\n if (typeof item === 'object' && typeof initialValue === 'object') {\n return item.limit !== initialValue.limit;\n } else {\n return item !== initialValue;\n }\n },\n ),\n resourceLimits: pick_(resourceLimits, ['cpu', 'gpu', 'memory', 'userSlots']),\n otherSettings: pick_(otherSettings, [\n 'forbidImmediateOperations',\n 'fifoSortParams',\n 'createEphemeralSubpools',\n ]),\n };\n await dispatch(editPool(editItem, data, initialValues));\n },\n [editItem, initialValues, dispatch],\n );\n\n const user = useSelector(getCurrentUserName);\n const [hasWarning, setHasWarning] = React.useState(false);\n const [checkPermError, setCheckPermError] = React.useState(null);\n\n React.useEffect(() => {\n setCheckPermError(null);\n if (!editItem?.name) {\n return;\n }\n const pathToCheck = calculatePoolPath(editItem.name, pools, tree);\n checkUserPermissionsUI(pathToCheck, user, ['write'])\n .then(([{action}]) => {\n const newHasWarning = action !== 'allow';\n if (newHasWarning !== hasWarning) {\n setHasWarning(newHasWarning);\n }\n })\n .catch((error) => {\n setCheckPermError(error);\n });\n }, [pools, tree, editItem?.name, hasWarning, setHasWarning, setCheckPermError]);\n\n const warningField: DialogField = {\n type: 'block',\n name: 'perm-warning',\n extras: {\n children: makePermissionWarning(hasWarning),\n },\n };\n\n const checkPermErrorField: DialogField = {\n type: 'block',\n name: 'check-perm-error',\n extras: {\n children: makeError(checkPermError),\n },\n };\n\n const poolErrorDataField: DialogField = {\n type: 'block',\n name: 'pool-error-data',\n extras: {\n children: makeError(poolErrorData),\n },\n };\n\n const transferNotice = useTransferNotice(editItem);\n\n const integralTypeNotice = useChangeIntegralTypeNotice(editItem, pools, tree);\n\n return (\n <YTDFDialog<PoolEditorFormValues>\n size=\"l\"\n key={editItem?.name + '/' + editVisibility}\n className={block()}\n visible={editVisibility}\n onClose={editCloseHandler}\n headerProps={{\n title: editItem?.name,\n }}\n onAdd={editConfirmHandler}\n initialValues={initialFormValues}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...transferNotice,\n {\n name: 'name',\n type: 'text',\n caption: 'Pool name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n },\n {\n name: 'parent',\n type: 'yt-select-single',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: true,\n extras: {\n disabled: true,\n items: poolsItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n },\n {\n name: 'separator',\n type: 'block',\n extras: {\n children: <div className={block('separator')} />,\n },\n },\n {\n name: 'mode',\n type: 'yt-select-single',\n caption: 'Mode',\n required: true,\n extras: {\n items: modeItems,\n placeholder: 'Select mode...',\n width: 'max',\n hideFilter: true,\n },\n },\n {\n name: 'weight',\n type: 'number',\n caption: 'Weight',\n extras: {\n min: Number.MIN_VALUE,\n hidePrettyValue: true,\n formatFn: (value) => (value === undefined ? '' : String(value)),\n },\n },\n {\n name: 'maxOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxOperationCount',\n initialLimit: initialValues.general.maxOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n {\n name: 'maxRunningOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max running operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxRunningOperationCount',\n initialLimit: initialValues.general.maxRunningOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceGuarantee',\n title: 'Strong Guarantee',\n fields: [\n ...transferNotice,\n {\n name: 'cpuStrong',\n type: 'pool-quota-editor',\n caption: 'CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'cpuStrong',\n initialLimit: initialValues.resourceGuarantee.cpuStrong.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'gpuStrong',\n type: 'pool-quota-editor' as const,\n caption: 'GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'gpuStrong' as const,\n initialLimit:\n initialValues.resourceGuarantee.gpuStrong.limit,\n },\n },\n ]\n : []),\n {\n name: 'memoryStrong',\n type: 'pool-quota-editor' as const,\n caption: 'Memory',\n extras: {\n format: 'Bytes',\n pool: editItem?.name || '',\n resourceType: 'memoryStrong' as const,\n initialLimit: initialValues.resourceGuarantee.memoryStrong.limit,\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'integralGuarantee',\n title: 'Integral Guarantee',\n fields: [\n ...transferNotice,\n ...integralTypeNotice,\n {\n name: 'guaranteeType',\n type: 'yt-select-single',\n caption: 'Guarantee',\n extras: {\n placeholder: 'Integral guarantee type...',\n items: [\n {\n value: 'none',\n text: 'Descendants only',\n },\n {value: 'burst', text: 'Burst'},\n {value: 'relaxed', text: 'Relaxed'},\n ],\n width: 'max',\n },\n },\n {\n name: 'burstCpu',\n type: 'pool-quota-editor',\n caption: 'Burst CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstCpu',\n initialLimit: initialValues.integralGuarantee.burstCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'burstGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Burst GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.burstGpu.limit,\n },\n },\n ]\n : []),\n {\n name: 'flowCpu',\n type: 'pool-quota-editor',\n caption: 'Flow CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowCpu',\n initialLimit: initialValues.integralGuarantee.flowCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'flowGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Flow GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.flowGpu.limit,\n },\n },\n ]\n : []),\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceLimits',\n title: 'Resource Limits',\n fields: [\n {\n name: 'cpu',\n type: 'text',\n caption: 'CPU',\n },\n {\n name: 'gpu',\n type: 'text',\n caption: 'GPU',\n },\n {\n name: 'memory',\n type: 'bytes',\n caption: 'Memory',\n validator(value?: number) {\n if (typeof value !== 'undefined' && isNaN(value)) {\n return 'Incorrect value';\n }\n return undefined;\n },\n },\n {\n name: 'userSlots',\n type: 'text',\n caption: 'User slots',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'otherSettings',\n title: 'Other settings',\n fields: [\n {\n name: 'forbidImmediateOperations',\n type: 'tumbler',\n caption: 'Forbid immediate operations',\n },\n {\n name: 'fifoSortParams',\n type: 'sortable-list',\n caption: 'Fifo sort parameters',\n extras: {\n axis: 'x',\n },\n },\n {\n name: 'createEphemeralSubpools',\n type: 'tumbler',\n caption: 'Create ephemeral subpools',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n ]}\n />\n );\n}\n\nfunction useTransferNotice(editItem?: PoolInfo): [DialogField<PoolEditorFormValues>] | [] {\n const {parent} = editItem || {};\n // const abcInfo = abcInfoFromAttributes(cypressAttributes);\n const poolsByName = useSelector(getSchedulingPoolsMapByName);\n const parentPool = poolsByName[parent!];\n\n const children = UIFactory.renderTransferQuotaNoticeForPool({\n pool: editItem,\n parentPool,\n isTopLevel: isTopLevelPool(editItem),\n });\n\n return !children\n ? []\n : [\n {\n type: 'block' as const,\n name: 'transferQuotaNotice',\n extras: {\n children,\n },\n },\n ];\n}\n\nfunction useChangeIntegralTypeNotice(\n editItem: PoolInfo | undefined,\n pools: Array<PoolInfo>,\n tree: string,\n): [DialogField<PoolEditorFormValues>] | [] {\n const {name, parent} = editItem || {};\n\n const cluster = useSelector(getCluster);\n\n if (isAbcPoolName(name) || (!isAbcPoolName(parent) && !isTopLevelPool(editItem))) {\n return [];\n }\n\n const poolPath = name ? calculatePoolPath(name, pools, tree) : undefined;\n const path = `${poolPath}/@integral_guarantees/guarantee_type`;\n const summary = `[${cluster}]: Change-request of ${path}`;\n\n const {url, queue} = createQuotaReqTicketUrl({summary});\n\n return [\n {\n type: 'block' as const,\n name: 'integralTypeNotice',\n extras: {\n children: (\n <div className={block('changeTypeNotice')}>\n To change the guarantee type of the pool you have to create a request to{' '}\n {url ? <Link url={url}>{queue}</Link> : \"the cluster's support team\"}\n </div>\n ),\n },\n },\n ];\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {Dialog as DeleteDialog} from '@gravity-ui/uikit';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Error from '../../../components/Error/Error';\n\nimport Content from '../Content/Content';\n\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../constants/scheduling';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport {\n closePoolDeleteModal as closeDeleteModal,\n deletePool,\n loadSchedulingData,\n} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport './Scheduling.scss';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../store/selectors/scheduling';\nimport SchedulingResources from '../Content/SchedulingResources';\nimport {PoolEditorDialog} from './PoolEditorDialog/PoolEditorDialog';\nimport {RootState} from '../../../store/reducers';\n\nconst block = cn('scheduling');\n\nconst SchedulingDialogsMemo = React.memo(SchedulingDialogs);\n\nfunction Scheduling() {\n const error = useSelector((state: RootState) => {\n const {error: hasError, errorData} = state.scheduling.scheduling;\n return hasError ? errorData : undefined;\n });\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(loadSchedulingData());\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return (\n <div className={block(null, 'elements-main-section')}>\n <ErrorBoundary>\n {error && <Error error={error} />}\n <div className={block('wrapper')}>\n <SchedulingResources />\n <Content {...{className: block('content')}} />\n </div>\n <SchedulingDialogsMemo />\n </ErrorBoundary>\n </div>\n );\n}\n\nconst SchedulingMemo = React.memo(Scheduling);\n\nexport default function SchedulingWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n return <SchedulingMemo />;\n}\n\nfunction SchedulingDialogs() {\n const dispatch = useDispatch();\n\n const {deleteVisibility, deleteItem, poolErrorData} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const deleteConfirmHandler = React.useCallback(\n () => dispatch(deletePool(deleteItem)),\n [deleteItem, dispatch],\n );\n const deleteCloseHandler = React.useCallback(() => {\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n dispatch(closeDeleteModal());\n }, [dispatch]);\n\n return (\n <React.Fragment>\n {deleteVisibility && (\n <DeleteDialog\n size=\"m\"\n className={block('delete-dialog')}\n open={deleteVisibility}\n onClose={deleteCloseHandler}\n hasCloseButton\n >\n <DeleteDialog.Header caption=\"Delete\" />\n <DeleteDialog.Body>\n Are you sure you want to delete the <b>{deleteItem?.name}</b> pool?\n {keys_(poolErrorData).length > 0 ? (\n <Error message=\"Delete pool failure\" error={poolErrorData} />\n ) : null}\n </DeleteDialog.Body>\n <DeleteDialog.Footer\n onClickButtonApply={deleteConfirmHandler}\n onClickButtonCancel={deleteCloseHandler}\n propsButtonApply={{view: 'flat-danger'}}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Delete\"\n />\n </DeleteDialog>\n )}\n <PoolEditorDialog />\n </React.Fragment>\n );\n}\n","export function prepareAbcService(abcService?: {\n value?: string;\n title: string;\n id: string | number;\n}) {\n if (!abcService || !abcService.value) {\n return {};\n }\n const slug = abcService.value.startsWith('svc_')\n ? abcService.value.slice(4) // remove 'svc_' prefix;\n : abcService.value;\n const name = abcService.title;\n\n return {slug, name, id: Number(abcService.id)};\n}\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {\n CreatePoolDialogAction,\n CreatePoolDialogState,\n} from '../../reducers/scheduling/create-pool-dialog';\nimport {\n CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n} from '../../../constants/scheduling';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {prepareAbcService} from '../../../utils/scheduling';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {loadSchedulingData} from './scheduling-ts';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {getCluster} from '../../selectors/global';\nimport {updateAcl} from '../../../utils/acl/acl-api';\nimport {IdmObjectType} from '../../../constants/acl';\nimport Link from '../../../components/Link/Link';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {createAdminReqTicketUrl} from '../../../config';\n\ntype CreatePoolDialogThunkAction<R = any> = ThunkAction<\n R,\n RootState,\n unknown,\n CreatePoolDialogAction\n>;\n\nexport function fetchCreatePoolDialogTreeItems(currentTree: string): CreatePoolDialogThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.getPoolTrees, {path: `//sys/pool_trees/${currentTree}`})\n .then((treeItems: CreatePoolDialogState['treeItems']) => {\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n data: {currentTree, treeItems},\n });\n });\n };\n}\n\nexport function createPool(values: FIX_MY_TYPE): CreatePoolDialogThunkAction {\n return (dispatch, getState) => {\n const {abcService} = values;\n const cluster = getCluster(getState()) as string;\n\n return wrapApiPromiseByToaster(\n yt.v3.create({\n type: 'scheduler_pool',\n attributes: Object.assign(\n {\n name: values.name,\n parent_name: values.parent || undefined,\n pool_tree: values.tree,\n },\n !abcService || !abcService.value\n ? {}\n : {\n abc: prepareAbcService(abcService),\n },\n ),\n }),\n {\n toasterName: `create_${values.name}`,\n successContent: `Successfully created ${values.name}. Please wait.`,\n errorContent: `'${values.name}' pool creation failed`,\n timeout: 10000,\n },\n )\n .then(() => {\n updateAcl(cluster, values.name, {\n idmKind: IdmObjectType.POOL,\n poolTree: values.tree,\n responsible: values.responsible,\n });\n\n return waitWhilePoolIsReady(values).then(() => {\n dispatch(loadSchedulingData());\n });\n })\n .catch((error) => {\n if (error?.code === yt.codes.CANCELLED) {\n return;\n }\n\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n data: error,\n });\n\n return Promise.reject(error);\n });\n };\n}\n\nconst {url: createUrl, queue} = createAdminReqTicketUrl();\n\nconst CHECK_REDINESS_TIMEOUT = 1500;\nconst MAX_POOL_REDINESS_TIMEOUT = 10 * 1000; // the value is provided by @renadeen\nconst TIMEOUT_ERROR = {\n message: (\n <div>\n The pool was not appeared in orchidea in 10 seconds.\n {createUrl ? (\n <>\n Please fill a ticket for <Link url={createUrl}>{queue}</Link>\n </>\n ) : (\n \"Please report it to the cluster's support team.\"\n )}\n .\n </div>\n ),\n};\n\nfunction waitWhilePoolIsReady({name, tree}: {name: string; tree: string}, startedAt = 0) {\n const startedTime = startedAt || Date.now();\n const diff = Date.now() - startedTime;\n if (diff > MAX_POOL_REDINESS_TIMEOUT) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n yt.v3\n .exists({\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${name}`,\n })\n .then((res: boolean) => {\n if (res) {\n return resolve(true);\n } else {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n })\n .catch((error: unknown) => {\n if (error !== TIMEOUT_ERROR) {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n\n return reject(error);\n });\n }, CHECK_REDINESS_TIMEOUT);\n });\n}\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport Error from '../../../../components/Error/Error';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Button from '../../../../components/Button/Button';\n\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {\n getIsRoot,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../../store/selectors/scheduling/scheduling';\n\nimport {\n createPool,\n fetchCreatePoolDialogTreeItems,\n} from '../../../../store/actions/scheduling/create-pool-dialog';\nimport {\n getCreatePoolDialogError,\n getCreatePoolDialogFlatTreeItems,\n} from '../../../../store/selectors/scheduling/create-pool-dialog';\nimport {FIX_MY_TYPE} from '../../../../types';\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../../constants/scheduling';\nimport {docsUrl, isIdmAclAvailable} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {uiSettings} from '../../../../config/ui-settings';\n\nconst allowRoot = !uiSettings.schedulingDenyRootAsParent;\n\nexport default function CreatePoolButton() {\n const dispatch = useDispatch();\n\n const isRoot = useSelector(getIsRoot);\n\n const [visible, changeVisibility] = useState(false);\n const handleShow = useCallback(() => changeVisibility(true), [changeVisibility]);\n const handleClose = useCallback(() => {\n changeVisibility(false);\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n }, [dispatch, changeVisibility]);\n\n return (\n <React.Fragment>\n <Button view=\"action\" disabled={!allowRoot && isRoot} onClick={handleShow}>\n Create pool\n </Button>\n {visible && <CreatePoolDialog onClose={handleClose} />}\n </React.Fragment>\n );\n}\n\ninterface FormValues {\n name: string;\n tree: string;\n parent: string;\n responsible: {value: string; id: string | number; title: string};\n}\n\nfunction CreatePoolDialog(props: {onClose: () => void}) {\n const dispatch = useDispatch();\n const treeStored: string = useSelector(getTree);\n const [tree, setTree] = React.useState(treeStored);\n const handleTreeChange = React.useCallback(\n (newTree: string | undefined) => {\n setTree(newTree!);\n dispatch(fetchCreatePoolDialogTreeItems(newTree!));\n },\n [dispatch],\n );\n React.useEffect(() => {\n dispatch(fetchCreatePoolDialogTreeItems(tree));\n }, [dispatch]);\n\n const error = useSelector(getCreatePoolDialogError);\n\n const login = useSelector(getCurrentUserName);\n const treeItems = useSelector(getTreesSelectItems);\n const pool = useSelector(getPool);\n\n const handleCreateConfirm = useCallback(\n (form: FormApi) => {\n const {values} = form.getState();\n return dispatch(createPool(values));\n },\n [dispatch],\n );\n const initialValues = useMemo(() => {\n // const slug = ypath.getValue(poolData, '/abc/slug');\n return {\n // abcService: slug ? {\n // key: slug,\n // value: slug,\n // id: ypath.getValue(poolData, '/abc/id'),\n // title: ypath.getValue(poolData, '/abc/name'),\n // } : undefined,\n tree,\n parent: pool,\n responsible: [\n {\n value: login,\n type: 'users',\n },\n ],\n };\n }, [tree, pool, login]);\n\n const [name, setName] = React.useState('');\n const handleNameChange = React.useCallback(\n (newName: string) => {\n setName(newName);\n },\n [setName],\n );\n\n const {sortedFlatTree} = useSelector(getCreatePoolDialogFlatTreeItems);\n\n const validateForm = React.useCallback(\n (values: FormValues): null | {name?: string} => {\n const {name} = values;\n const res: Partial<Record<keyof FormValues, string>> = {};\n if (-1 !== sortedIndexOf_(sortedFlatTree, name)) {\n res.name = 'the value must be unique';\n }\n return isEmpty_(res) ? null : res;\n },\n [sortedFlatTree],\n );\n\n const isApplyDisabled = React.useMemo(\n () => (form: {values: FormValues}) => {\n const errors = validateForm(form.values);\n return Boolean(errors);\n },\n [validateForm],\n );\n\n return (\n <YTDFDialog\n visible={true}\n onClose={props.onClose}\n headerProps={{\n title: 'Create pool',\n }}\n onAdd={handleCreateConfirm as FIX_MY_TYPE}\n initialValues={{\n ...initialValues,\n name,\n }}\n validate={validateForm as FIX_MY_TYPE}\n isApplyDisabled={isApplyDisabled}\n pristineSubmittable={true}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'Name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n onChange: handleNameChange,\n touched: Boolean(name),\n },\n {\n name: 'tree',\n type: 'yt-select-single',\n caption: 'Pool tree',\n tooltip: (\n <span>\n Select pool tree where to create new pool.{' '}\n {docsUrl(\n <>\n See{' '}\n <Link url={UIFactory.docsUrls['scheduler:scheduler_and_pools']}>\n Documentations\n </Link>{' '}\n for more details.\n </>,\n )}\n </span>\n ),\n required: true,\n extras: {\n hideFilter: true,\n items: treeItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n onChange: (value: string | Array<string> | undefined) => {\n handleTreeChange(value as string);\n },\n },\n {\n name: 'parent',\n type: 'create-pool-parent',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: !allowRoot,\n extras: {\n placeholder: 'Select parent...',\n },\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n name: 'responsible',\n type: 'acl-subjects' as const,\n caption: 'Responsible users',\n tooltip:\n 'Choose responsible users who will manage permissions and pool settings.',\n required: true,\n extras: {\n placeholder: 'Select responsible users...',\n },\n },\n ]),\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: error && <Error error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport some_ from 'lodash/some';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport Favourites from '../../../components/Favourites/Favourites';\nimport {PoolsSuggest} from '../PoolsSuggest/PoolsSuggest';\nimport {\n getCurrentPool,\n getCurrentPoolPath,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {getFavouritePools, isActivePoolInFavourites} from '../../../store/selectors/favourites';\nimport {\n changePool,\n changeTree,\n togglePoolFavourites,\n} from '../../../store/actions/scheduling/scheduling';\n\nimport {ROOT_POOL_NAME, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport {EditButton} from '../../../components/EditableAsText/EditableAsText';\nimport Select from '../../../components/Select/Select';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {makeRoutedURL} from '../../../store/location';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\n\nimport './SchedulingTopRowContent.scss';\n\nconst block = cn('scheduling-top-row-content');\n\nfunction SchedulingTopRowContent() {\n const pool = useSelector(getCurrentPool);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={Page.SCHEDULING} className={block()} urlParams={{pool: ''}}>\n <SchedulingFavourites />\n <SchedulingPhysicalTree />\n <EditableSchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\n </RowWithName>\n );\n}\n\nfunction SchedulingFavourites() {\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n const pool = useSelector(getPool);\n const favouritesPools = useSelector(getFavouritePools);\n const isActivePool = useSelector(isActivePoolInFavourites);\n\n const onFavouriteClick = React.useCallback(\n ({path}: {path: string}) => {\n const [, pool, tree] = path.match(/(.+)\\[(.+)]/)!;\n dispatch(changePool(pool));\n dispatch(changeTree(tree));\n },\n [dispatch],\n );\n const onFavouriteToggle = React.useCallback(\n () => dispatch(togglePoolFavourites(pool, tree)),\n [dispatch, pool, tree],\n );\n\n const currentPool = useSelector(getPool);\n\n return (\n <Favourites\n className={block('favourites')}\n theme={'clear'}\n items={favouritesPools || []}\n isActive={isActivePool}\n onToggle={onFavouriteToggle}\n onItemClick={onFavouriteClick}\n toggleDisabled={ROOT_POOL_NAME === currentPool}\n />\n );\n}\n\nfunction CurrentPoolToClipboardButton() {\n const currentPool = useSelector(getPool);\n const currentPoolPath = useSelector(getCurrentPoolPath);\n\n return (\n <ClipboardButton\n className={block('clipboard')}\n text={currentPool}\n shiftText={currentPoolPath}\n hoverContent={'Hold SHIFT-key to copy full path'}\n />\n );\n}\n\nfunction SchedulingBreadcrumbs() {\n const bcItems = useSelector(getSchedulingBreadcrumbItems);\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text) => {\n const pathname = text\n ? window.location.pathname\n : calcRootPathname(window.location.pathname, cluster);\n return (\n <BreadcrumbsItem\n key={text}\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n >\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleChangePool}\n className={block('breadcrumbs')}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nfunction calcRootPathname(pathname: string, cluster: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\n const isAllowedTab = some_(SCHEDULING_ALLOWED_ROOT_TABS, (_v, tab) =>\n pathname.endsWith('/' + tab),\n );\n return isAllowedTab ? pathname : `/${cluster}/${Page.SCHEDULING}/${Tab.OVERVIEW}`;\n}\n\nfunction EditableSchedulingBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n const toggleEdit = React.useCallback(() => {\n setEditMode(!editMode);\n }, [editMode, setEditMode]);\n\n return (\n <div className={block('editable-breadcrumbs', {edit: editMode})}>\n {editMode ? (\n <PoolsSuggest autoFocus onCancelEdit={toggleEdit} />\n ) : (\n <React.Fragment>\n <SchedulingBreadcrumbs />\n <EditButton onClick={toggleEdit} />\n <div className={block('btn-spacer')} />\n <CurrentPoolToClipboardButton />\n </React.Fragment>\n )}\n </div>\n );\n}\n\nfunction SchedulingPhysicalTree() {\n const tree = useSelector(getTree);\n const treeItems = useSelector(getTreesSelectItems);\n const dispatch = useDispatch();\n\n const onChange = React.useCallback((tree: unknown) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n hideFilter={treeItems?.length <= 5}\n items={treeItems}\n onUpdate={(vals) => onChange(vals[0])}\n className={block('path-tree')}\n placeholder=\"Select tree...\"\n width=\"max\"\n />\n </div>\n );\n}\n\nconst SchedulingTopRowContentMemo = React.memo(SchedulingTopRowContent);\n\nexport default function SchedulingTopRowContentWithError() {\n return (\n <ErrorBoundary compact>\n <SchedulingTopRowContentMemo />\n </ErrorBoundary>\n );\n}\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import {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 {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) ?? false\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 filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n"],"names":["connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","props","collapsed","_createClass","key","value","_this$props","this","name","children","size","overview","className","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","_jsxs","margin","clickable","Icon","awesome","Component","CollapsibleSection","_React$useState","React","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","cn","prepareRoleListValue","roles","otherMembers","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","data","frozen","newItems","itemClassName","role","extraProps","text","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","map_","filter_","_ref2","removed","_ref3","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","Block","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","EditableAsText","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","Button","view","onMouseDown","EditButton","_ref$size","ElementsTableFooter","state","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","Favourites","isActive","toggleActive","setState","prevState","onItemClick","_this2","dropItems","action","switcher","renderButton","pin","DropdownMenu","popupProps","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","toggleDisabled","clear","disabled","renderDropDownMenu","renderHotkey","itemType","PropTypes","Secondary","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","Placeholder","tab","useRouteMatch","params","hammer","format","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","tree","dispatch","getState","pool","getPool","ROOT_POOL_NAME","loadExpandedOperationsAndPools","ytApiV3Id","executeBatch","YTApiId","schedulingPoolFullPath","requests","fields","then","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","parts","split","slice","i","poolName","parentPoolPath","join","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","Toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","isSupportedSchedulingChildrenByPool","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","all","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","resolve","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","reduce_","acc","Object","assign","poolsToCollapse","pos","rawPools","cypressData","pools","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","getTree","poolsByName","getSchedulingPoolsMapByName","expanded","expandedPoolInfo","_data","res","_data2","parent","calcExpandedPoolInfo","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","getPools","calculatePoolPath","orchidPath","toaster","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","cluster","getCluster","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","scheduling","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","treeResources","resource_usage","resource_limits","config","resource_distribution_info","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","openPoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","closePoolDeleteModal","setPoolAttributes","poolPath","values","initials","isEmpty_","transferData","toModify","guaranteeType","restValues","v","k","limit","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","updateNodeAttributes","tmp","dstPool","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","Math","abs","source_pool","destination_pool","pool_tree","resource_delta","schedulingTransferPoolQuota","err","getBatchError","transferPoolQuota","schedulingOverviewHasFilter","_getSchedulingAttribu","getSchedulingAttributesToFilterParams","lastTime","lastTree","Date","now","wrapApiPromiseByToaster","schedulingFilterAttributes","skipSuccessToast","toasterName","errorContent","attributesToFilter","attributesToFilterParams","setName","newName","prevName","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","keyMapper","userSlots","omittedValuesList","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","resources","result","omit_","makeGeneralCommands","isInitial","initialValue","pickBy_","mode","weight","prototype","isOmitted","Number","isInvalidNumber","isNaN","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","timeout","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","SCHEDULING_EDIT_POOL_FAILURE","openEditModal","TOGGLE_EDIT_VISIBILITY","cancelled","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","getSchedulingIsFinalLoadingState","createSelector","store","loading","loaded","status","calculateLoadingStatus","isFinalLoadingStatus","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","Tooltip","NO_VALUE","_calcProgressProps","calcProgressProps","digits","Progress","getSchedulingBreadcrumbItems","_loop","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolStaticConfiguration","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","Boolean","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","getPoolsAllocatedOperationsCount","topPools","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","getOperationsStaticConfiguration","allocated","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","operationRows","undistributed_resources","burst","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","flow","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","max","PoolMetaData","useSelector","clusterUiConfig","getClusterUiConfig","hasStrong","integralType","capitalize_","MetaTable","Readable","UIFactory","getExtraMetaTableItemsForPool","SchedulingStaticConfiguration","onToggleCollapsedState","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","PoolStaticConfiguration","staticConfigurationItems","header","sortable","width","render","row","cpuLabel","Label","capitalize","align","DataTableYT","useThemeYT","displayIndices","poolTree","formatValue","renderSchedulingLastDayMaximum","sensor","showHint","showAsLink","_ref9","formatFn","freeValue","lastDayMaxValue","rowClassName","SchedulingOperationsError","getSchedulingOperationsError","ErrorBlock","topMargin","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","poolNames","getPoolsNames","getSuggestItems","_items","match","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onFocus","Suggest","popupClassName","placeholder","PoolTags","showGuaranteeType","hasFlow","flowCPU","flowGPU","renderSchedulingTableItemExtraControls","STARVATION_STATUS_TO_THEME","starving","aggressively_starving","Overview","renderNameCell","currentPool","itemsMaxDepth","allowExpand","_len2","_key2","renderType","renderName","Tab","OVERVIEW","renderEphemeralIcon","renderActions","_this$props2","aggregation","renderAttributesButton","Fragment","renderEditButton","renderDeleteButton","onItemToggleState","treeState","tableId","SCHEDULING_POOL_TREE_TABLE_ID","poolsTableItems","sets","default","renderMode","FI","renderFifoIndex","renderWeight","fair_share","renderColumnAsRatio","usage","demand","min_share","renderMinShare","fair_share_usage","renderFairShareUsage","dominant_resource","renderDominantResource","operation_overview","renderOperationOverview","actions","Sticky","topOffset","isSticky","SchedulingOverviewToolbar","_this$props3","treeStateExpanded","fireResizeEvent","StickyContainer","renderToolbar","ResetExpandedPoolsOnTreeChange","ElementsTable","tableSettings","isLoading","share","_ref4$forceTheme","_ref4$title","poolModeTheme","weightEdited","edited","digitsOnlyForFloat","columnName","renderRatio","barsData","fairShareRatio","usageRatio","starvation_status","renderBars","formatter","getPoolPaths","ClickableAttributesButton","fifoIndex","toggleItemState","itemState","icon","operation","expanderClass","expanderClassIcon","expanderIcon","isCurrentPool","linkText","incomplete","id","FormattedText","qs","window","location","search","page","Page","FormattedLink","routed","url","Link","dominantResource","minShareRatio","resourcePropTypes","isRequired","progress","tableItemPropTypes","abc","demandRatio","fifo","changeTableTreeState","CHANGE_TABLE_TREE_STATE","schedulingSetAbcFilter","abcServiceFilter","getSchedulingOperationsCount","root","setLoadAllOperations","dispatchEvent","Event","OverviewConnected","getTableItems","getSchedulingOverviewMaxDepth","getSchedulingTreeState","getSchedulingAbcFilter","OverviewWithRum","isFinalState","useAppRumMeasureStart","SCHEDULING_OVERVIEW","additionalStartType","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_getSchedulingOperati2","old","_toPropertyKey","resetExpandedPools","_React$PureComponent","_super2","_this3","_len3","_key3","confirmExpandDialogVisible","handleExpand","onConfirmExpand","setConfirmDialogVisibility","handleCollapse","onAbcServiceFilter","abcService","_ref10","slug","_this4","Dialog","open","Header","caption","Body","Footer","onClickButtonApply","onClickButtonCancel","textButtonCancel","textButtonApply","renderConfirmExpandDialog","renderControlAbcService","withStickyHead","withStickyFooter","ElementsTableBase","Details","renderResourceBars","resourceData","childTableItems","guaranteed","renderRelResource","child","isChildPool","DETAILS","integral","totalRow","summedProperties","resource","metric","prepare","calculateTotalOverPools","SCHEDULING_POOL_CHILDREN_TABLE_ID","columnsSets","max_share","renderMaxShare","resource_detailed_cpu","renderColumnAsFloatNumber","resource_detailed_memory","renderColumnAsBytes","resource_detailed_gpu","renderColumnAsNumber","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","running_operation_progress","renderAsProgress","running_operation_count","operation_count","operation_progress","max_running_operation_count","renderMaxRunningOperationCount","max_operation_count","renderMaxOperationCount","integral_type","renderIntegralType","burst_cpu","renderIntegralGuarantee","flow_cpu","children_burst_cpu","childrenIntegrals","children_flow_cpu","accumulated","accumulated_cpu","burst_duration","_this$props4","changePoolChildrenFilter","changeContentMode","Filter","RadioButton","_this$props5","ElementsTableSticky","cssTableMods","maxShareRatio","maxOperationCountEdited","renderNumberWithEdited","maxRunningOperationCountEdited","editedValue","autoCalculated","hasActiveGuarantee","inactive","renderColumnAsReadable","getProgressTheme","poolChildrenFilter","CHANGE_POOL_CHILDREN_FILTER","CHANGE_CONTENT_MODE","contentMode","target","DetailsConnected","getPollChildrenTableItems","getContentMode","getPoolChildrenFilter","getSortedPoolChildren","DetailsWithRum","SCHEDULING_DETAILS","PoolAcl","NoContent","warning","hint","PoolAclPanel","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","SchedulingExpandedPoolsUpdater","withRouter","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","showSettings","show","SCHEDULING_ALLOWED_ROOT_TABS","titleDict","aclTab","ACL","extraTabs","getSchedulingExtraTabs","extraOptions","extraRoutes","component","urlTemplate","tabSettings","external","formatByParams","ytCluster","ytPool","ytPoolTree","route","Route","makeTabProps","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","Switch","Redirect","from","to","pathname","headingBlock","SchedulingResources","getResources","makeError","PoolEditorDialog","editItem","getSchedulingEditItem","_useSelector","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","_useMemo","useMemo","getInitialValues","_useMemo2","initialFormValues","editCloseHandler","editConfirmHandler","form","_form$getState","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","_x","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","summary","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","onClose","headerProps","onAdd","required","tooltip","hideFilter","min","MIN_VALUE","hidePrettyValue","String","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","updateFn","useUpdater","Content","SchedulingMemo","SchedulingWithRum","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","autoHiding","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","hasCloseButton","keys_","message","propsButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","currentTree","getPoolTrees","treeItems","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","successContent","updateAcl","idmKind","responsible","waitWhilePoolIsReady","CREATE_POOL_DIALOG_TREE_CREATE_FAILURE","_createAdminReqTicket","createAdminReqTicketUrl","createUrl","CHECK_REDINESS_TIMEOUT","MAX_POOL_REDINESS_TIMEOUT","TIMEOUT_ERROR","startedTime","exists","allowRoot","uiSettings","schedulingDenyRootAsParent","CreatePoolButton","_useState","useState","_useState2","changeVisibility","handleShow","handleClose","CreatePoolDialog","treeStored","setTree","handleTreeChange","newTree","getCreatePoolDialogError","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","sortedFlatTree","getCreatePoolDialogFlatTreeItems","validateForm","sortedIndexOf_","isApplyDisabled","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","urlParams","SchedulingFavourites","SchedulingPhysicalTree","EditableSchedulingBreadcrumbs","renderTopRowExtraControlsForPool","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","ClipboardButton","shiftText","hoverContent","SchedulingBreadcrumbs","bcItems","history","useHistory","some_","_v","endsWith","calcRootPathname","BreadcrumbsItem","href","makeRoutedURL","Breadcrumbs","navigate","onAction","toString","showRoot","toggleEdit","edit","Select","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","useRumMeasureStart","subPage","getApproversSubjectFilter","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","prepareColumnsNames","columnsPermissions","permission","uniq_","flatten_","sort","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","Set","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","entries","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_partition_","partition_","_item$columns","_partition_2","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","p","has","permissionsFilterPredicate","visibleColumns","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","count","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","JSON","stringify","column","isMissing","hasInherited","hasDenyAction","inheritance_mode","isEqual_","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","dst","reduce","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_item$name","requested","depriving","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","names","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","getChaosBundlesFiltered","accountFilter","tagNodeFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","getChaosBundlesSorted","order","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","list","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","creation_time","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","getSettingsData","userColumns","getChytListColumns","checked","getChytListTableSortState","getChytListTableSortStateByName","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","makeGetSetting","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getFavouritePaths","getClusterNS","getLastVisitedPaths","getPopularPaths","isCurrentPathInFavourites","getPath","favourites","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","getSetting","SettingName","LOCAL","FAVOURITES","settingGetter","LAST_VISITED","lastVisited","entry","tabletCellBundleDashboardUrl","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/scheduling.b70d4627.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/utils/batch.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/expanded-pools.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/PoolMetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/SchedulingOperationsError/SchedulingOperationsError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableSticky.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/details.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingResources.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/PoolEditorDialog/PoolEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/Scheduling.tsx","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/create-pool-dialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Instruments/CreatePoolDialog/CreatePoolDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/SchedulingTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts"],"sourcesContent":["import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: 'Unrecognized',\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\n }),\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport Block from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <Block {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\n };\n}\n","import React, {useCallback, useEffect} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../Icon/Icon';\n\nimport './EditableAsText.scss';\nimport Button, {ButtonProps} from '../Button/Button';\nconst block = cn('editable-as-text');\n\ninterface Props {\n className?: string;\n editorClassName?: string;\n\n text?: string;\n children: React.ReactNode;\n onChange: (v?: string) => void;\n disableEdit?: boolean;\n withControls?: boolean;\n cancelOnClose?: boolean;\n openOnClick?: boolean;\n size?: 's' | 'm' | 'l' | 'xl';\n saveButtonView?: ButtonProps['view'];\n cancelButtonView?: ButtonProps['view'];\n\n renderEditor?: (props: {\n value?: string;\n onBlur: () => void;\n onChange: (value?: string) => void;\n className?: string;\n onApply: (value?: string) => void;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\n onModeChange,\n saveButtonView = 'normal',\n cancelButtonView = 'normal',\n } = props;\n const [editMode, setEditMode] = React.useState(false);\n const [input, setInput] = React.useState(text || '');\n\n useEffect(() => {\n setInput(text || '');\n }, [text]);\n\n const handleChangeMode = useCallback(\n (isEdit: boolean) => {\n if (onModeChange) onModeChange(isEdit);\n setEditMode(isEdit);\n },\n [onModeChange],\n );\n\n const closeEditMode = React.useCallback(() => {\n handleChangeMode(false);\n if (cancelOnClose) setInput(text || '');\n }, [cancelOnClose, handleChangeMode, text]);\n\n const startTextEdit = useCallback(() => {\n handleChangeMode(true);\n }, [handleChangeMode]);\n\n const handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\n\n const handleChange = React.useCallback((val?: string) => setInput(val ?? ''), [setInput]);\n\n const applyValue = useCallback(() => {\n handleChangeMode(false);\n onChange(input);\n }, [onChange, handleChangeMode, input]);\n\n const closeAndResetValue = useCallback(() => {\n handleChangeMode(false);\n setInput(text || '');\n }, [handleChangeMode, text]);\n\n const onApply = useCallback(\n (value?: string) => {\n handleChangeMode(false);\n onChange(value);\n },\n [handleChangeMode, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if (evt.key === 'Enter') {\n applyValue();\n }\n if (evt.key === 'Escape') {\n closeAndResetValue();\n }\n },\n [applyValue, closeAndResetValue],\n );\n\n const controlSize = size ? size : 'm';\n\n return (\n <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\n <>\n {renderEditor ? (\n renderEditor({\n value: input,\n onChange: handleChange,\n className: block('control'),\n onBlur: closeEditMode,\n onApply,\n })\n ) : (\n <TextInput\n className={block('control')}\n autoFocus\n size={controlSize}\n value={input}\n onUpdate={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={closeEditMode}\n />\n )}\n {withControls && (\n <>\n <Button\n className={block('control')}\n view={saveButtonView}\n extraProps={{onMouseDown: applyValue}}\n size={controlSize}\n >\n <Icon awesome={'check'} size={controlSize} />\n </Button>\n <Button\n className={block('control')}\n view={cancelButtonView}\n extraProps={{onMouseDown: closeAndResetValue}}\n size={controlSize}\n >\n <Icon awesome={'times'} size={controlSize} />\n </Button>\n </>\n )}\n </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","import {USE_CACHE, USE_MAX_SIZE} from '../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../shared/yt-types';\n\nexport function makeGet(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'get'})['parameters'], 'path'>,\n) {\n return {\n command: 'get' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n },\n };\n}\n\nexport function makeList(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'list'})['parameters'], 'path'>,\n) {\n return {\n command: 'list' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {\n ExpandedPoolInfo,\n ExpandedPoolsAction,\n PoolCypressData,\n} from '../../reducers/scheduling/expanded-pools';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_IGNORE_NODE_DOES_NOT_EXIST, splitBatchResults} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {\n CHANGE_POOL,\n ROOT_POOL_NAME,\n SCHEDULING_EXPANDED_POOLS_FAILURE,\n SCHEDULING_EXPANDED_POOLS_PARTITION,\n SCHEDULING_EXPANDED_POOLS_REQUEST,\n SCHEDULING_EXPANDED_POOLS_SUCCESS,\n} from '../../../constants/scheduling';\nimport {calculatePoolPath, getPool, getPools, getTree} from '../../selectors/scheduling/scheduling';\nimport {\n getExpandedPoolsLoadAll,\n getSchedulingOperationsExpandedPools,\n} from '../../selectors/scheduling/expanded-pools';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\nimport {PoolInfo, getSchedulingPoolsMapByName} from '../../selectors/scheduling/scheduling-pools';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport {isSupportedSchedulingChildrenByPool} from '../../../store/selectors/thor/support';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\n\ntype ExpandedPoolsThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ExpandedPoolsAction | SchedulingAction\n>;\n\nconst cancelHelper = new CancelHelper();\n\nconst POOL_FIELDS_TO_LOAD = [\n 'accumulated_resource_ratio_volume',\n 'accumulated_resource_volume',\n 'demand_ratio',\n 'detailed_fair_share',\n 'dominant_resource',\n 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_running_operation_count',\n 'max_share_ratio',\n 'min_share_ratio',\n 'mode',\n 'operation_count',\n 'parent',\n 'pool_operation_count',\n 'child_pool_count',\n 'resource_demand',\n 'resource_limits',\n 'resource_usage',\n 'promised_fair_share_resources',\n 'running_operation_count',\n 'specified_burst_guarantee_resources',\n 'specified_resource_flow',\n 'starvation_status',\n 'starving',\n 'strong_guarantee_resources',\n 'usage_ratio',\n 'weight',\n 'abc',\n];\n\nconst POOL_TREE_GET_ATTRS = [\n 'integral_guarantees',\n 'weight',\n 'max_operation_count',\n 'max_running_operation_count',\n 'strong_guarantee_resources',\n 'resource_limits',\n 'forbid_immediate_operations',\n 'create_ephemeral_subpools',\n 'fifo_sort_parameters',\n 'config',\n 'folder_id',\n];\n\nclass EmptyFullPath extends Error {}\n\nexport function loadExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const pool = getPool(getState());\n\n if (!tree) {\n return undefined;\n }\n\n if (pool === ROOT_POOL_NAME) {\n return dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n return ytApiV3Id\n .executeBatch<{full_path: string; is_ephemeral?: boolean}>(\n YTApiId.schedulingPoolFullPath,\n {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`,\n fields: ['is_ephemeral', 'full_path'],\n },\n },\n ],\n },\n )\n .then(([{output}]) => {\n const {full_path, is_ephemeral} = output ?? {};\n if (!full_path) {\n throw new EmptyFullPath();\n } else {\n dispatch(addFullPathToExpandedPoolsNoLoad(tree, full_path, is_ephemeral));\n dispatch(loadExpandedOperationsAndPools(tree));\n }\n })\n .catch((e) => {\n if (e instanceof EmptyFullPath) {\n dispatch({type: CHANGE_POOL, data: {pool: ROOT_POOL_NAME}});\n /**\n * We don't need to call `dispatch(loadExpandedOperationsAndPools(tree))` after `CHANGE_POOL`.\n * The call will be triggered by SchedulingExpandedPoolsUpdater.\n */\n // dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n new Toaster().add({\n name: 'schedulingPoolFullPath',\n theme: 'danger',\n title: '',\n });\n }\n });\n }\n };\n}\n\nfunction loadExpandedOperationsAndPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const loadAll = getExpandedPoolsLoadAll(state);\n const expandedPools: Map<string, ExpandedPoolInfo> = loadAll\n ? new Map()\n : getSchedulingOperationsExpandedPools(state)[tree] ?? new Map();\n const expandedPoolNames: Array<string> = [...expandedPools.keys()];\n\n const operationsExpandedPools: Array<string> = [...expandedPoolNames];\n\n const operationsRequests: Array<BatchSubRequest> = [];\n if (loadAll) {\n operationsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations`),\n );\n } else {\n const prefix = `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations_by_pool`;\n operationsExpandedPools.forEach((item) => {\n operationsRequests.push(makeGet(`${prefix}/${item}`));\n });\n }\n\n const loadAllPools = loadAll || !isSupportedSchedulingChildrenByPool(state);\n const poolsRequests: Array<BatchSubRequest> = [];\n const poolsChildrenRequests: Array<BatchSubRequest> = [];\n const poolsCypressDataRequests: Array<BatchSubRequest> = [];\n\n const poolsExpandedPools: Array<string> = [ROOT_POOL_NAME, ...expandedPoolNames];\n\n if (loadAllPools) {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsCypressDataRequests.push(\n makeGet(`//sys/pool_trees/${tree}`, {attributes: POOL_TREE_GET_ATTRS}),\n );\n } else {\n poolsExpandedPools.forEach((pool) => {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsChildrenRequests.push(\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/child_pools_by_pool/${pool}`,\n {\n fields: POOL_FIELDS_TO_LOAD,\n },\n ),\n );\n const {parentPoolPath, isEphemeral} = expandedPools.get(pool) ?? {};\n const cypressDataPath = parentPoolPath\n ? `//sys/pool_trees/${tree}/${parentPoolPath}/${pool}`\n : `//sys/pool_trees/${tree}/${pool}`;\n if (pool === ROOT_POOL_NAME || !isEphemeral) {\n poolsCypressDataRequests.push(\n makeList(\n pool === ROOT_POOL_NAME ? `//sys/pool_trees/${tree}` : cypressDataPath,\n {\n attributes: POOL_TREE_GET_ATTRS,\n },\n ),\n );\n }\n });\n }\n\n cancelHelper.removeAllRequests();\n\n dispatch({type: SCHEDULING_EXPANDED_POOLS_REQUEST});\n return Promise.all([\n operationsRequests.length\n ? ytApiV3Id.executeBatch(YTApiId.schedulingLoadOperationsPerPool, {\n parameters: {requests: operationsRequests},\n cancellation: cancelHelper.saveCancelToken,\n })\n : Promise.resolve([]),\n\n ytApiV3Id.executeBatch(\n loadAllPools ? YTApiId.schedulingLoadPoolsAll : YTApiId.schedulingLoadPoolsPerPool,\n {\n parameters: {requests: poolsRequests},\n cancellation: cancelHelper.saveCancelToken,\n },\n ),\n loadAllPools\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadChildrenPerPool, {\n parameters: {requests: poolsChildrenRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n !poolsCypressDataRequests.length\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadCypressDataPerPool, {\n parameters: {requests: poolsCypressDataRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n ])\n .then(([operationsResults, poolsResults, poolsChildrenResults, poolsCypressData]) => {\n const error = new UIBatchError('Failed to load expanded pools');\n const {results: operations, errorIgnoredIndices} = splitBatchResults(\n operationsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n const rawOperations = reduce_(\n operations,\n (acc, data) => {\n return Object.assign(acc, data);\n },\n {},\n );\n\n const poolsToCollapse: Record<string, false> = {};\n forEach_(errorIgnoredIndices, (pos) => {\n poolsToCollapse[operationsExpandedPools[pos]] = false;\n });\n\n const rawPools: Record<string, PoolInfo> = {};\n const cypressData: Record<string, PoolCypressData> = {};\n\n if (loadAllPools) {\n const {results: pools} = splitBatchResults<Record<string, PoolInfo>>(\n poolsResults,\n error,\n );\n const [value = {}] = pools ?? [];\n Object.assign(rawPools, value);\n\n const {\n results: [data],\n } = splitBatchResults(poolsCypressData, error);\n Object.assign(cypressData, flattenAttributes(data));\n } else {\n const {\n results: pools,\n resultIndices,\n errorIgnoredIndices: poolsReqeustsIgnored,\n } = splitBatchResults<PoolInfo>(\n poolsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n pools.forEach((poolInfo, index) => {\n const name = poolsExpandedPools[resultIndices[index]];\n rawPools[name] = poolInfo;\n });\n\n const {\n results: poolChildren,\n errorIgnoredIndices: poolsChildrenRequestsIgnored,\n } = splitBatchResults<Record<string, PoolInfo>>(\n poolsChildrenResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n poolChildren.forEach((children) => {\n Object.assign(rawPools, children);\n });\n\n const {\n results: cypressDataChildrenPerPool,\n errorIgnoredIndices: poolsCypressDataRequestsIgnored,\n } = splitBatchResults<Array<PoolCypressData>>(\n poolsCypressData,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n cypressDataChildrenPerPool.forEach((poolChildrenCypressData) => {\n poolChildrenCypressData.forEach((item) => {\n cypressData[item.$value] = item;\n });\n });\n\n forEach_(\n [\n ...poolsReqeustsIgnored,\n ...poolsChildrenRequestsIgnored,\n ...poolsCypressDataRequestsIgnored,\n ],\n (position) => {\n const poolName = poolsExpandedPools[position];\n poolsToCollapse[poolName] = false;\n },\n );\n setExpandedPools(poolsToCollapse);\n }\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_SUCCESS,\n data: {\n expandedPoolsTree: tree,\n rawOperations: Object.keys(rawOperations).length\n ? rawOperations\n : EMPTY_OBJECT,\n rawPools: Object.keys(rawPools).length ? rawPools : EMPTY_OBJECT,\n flattenCypressData: Object.keys(cypressData).length\n ? cypressData\n : EMPTY_OBJECT,\n },\n });\n\n if (error.inner_errors?.length) {\n throw error;\n }\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setExpandedPools(changes: Record<string, boolean>): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const tree = getTree(getState());\n const expandedPools = getSchedulingOperationsExpandedPools(state);\n\n const poolsByName = getSchedulingPoolsMapByName(state);\n\n const treeExpandedPools = new Map(expandedPools[tree]);\n forEach_(changes, (expanded, poolName) => {\n if (expanded) {\n const expandedPoolInfo = calcExpandedPoolInfo(poolName, poolsByName);\n treeExpandedPools.set(poolName, expandedPoolInfo);\n } else {\n treeExpandedPools.delete(poolName);\n }\n });\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction addFullPathToExpandedPoolsNoLoad(\n tree: string,\n /**\n * elements of the array should have the same format as `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}/full_path`\n */\n fullPath: string,\n isEphemeral?: boolean,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const oldExpandedPools = getSchedulingOperationsExpandedPools(state);\n const treeExpandedPools = new Map(oldExpandedPools[tree]);\n\n /**\n * `fullPath` value starts from `/`, example: `/mypool/child/subchild`\n * so we have to use `.slice(1)` to remove first empty string\n */\n const parts = fullPath.split('/').slice(1);\n\n for (let i = 0; i < parts.length; ++i) {\n const poolName = parts[i];\n const parentPoolPath = parts.slice(0, i).join('/');\n treeExpandedPools.set(poolName, {parentPoolPath, isEphemeral});\n }\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n };\n}\n\nfunction updateExpandedPoolNoLoad(\n tree: string,\n treeExpandedPools: Map<string, ExpandedPoolInfo>,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const oldExpandedPools = getSchedulingOperationsExpandedPools(getState());\n\n const expandedPools = {\n ...oldExpandedPools,\n [tree]: treeExpandedPools,\n };\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {expandedPools},\n });\n };\n}\n\nexport function resetExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n if (!tree) {\n return;\n }\n\n const state = getState();\n const {[tree]: old, ...rest} = getSchedulingOperationsExpandedPools(state);\n\n if (old?.size) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {\n expandedPools: {\n ...rest,\n [tree]: new Map<string, ExpandedPoolInfo>(),\n },\n },\n });\n }\n };\n}\n\nexport function getSchedulingOperationsCount(): ThunkAction<number, RootState, any, any> {\n return (_dispatch, getState) => {\n const state = getState();\n\n const tree = getSchedulingPoolsMapByName(state);\n const root = tree[ROOT_POOL_NAME];\n return root?.operationCount || 0;\n };\n}\n\nexport function getPoolPathsByName(\n poolName: string,\n): ThunkAction<{fullPath: string; orchidPath: string}, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const state = getState();\n const pools = getPools(state);\n const tree = getTree(state);\n\n return {\n fullPath: calculatePoolPath(poolName, pools, tree),\n orchidPath: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${poolName}`,\n };\n };\n}\n\nexport function setLoadAllOperations(loadAll: boolean): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {loadAll},\n });\n\n const tree = getTree(state);\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction calcExpandedPoolInfo(\n poolName: string,\n poolsByName: Record<string, PoolInfo>,\n): ExpandedPoolInfo {\n let data = poolsByName[poolName];\n const isEphemeral = data?.isEphemeral;\n let res = '';\n while (data?.parent && data.parent !== ROOT_POOL_NAME) {\n res = res ? `${data.parent}/${res}` : data.parent;\n data = poolsByName[data.parent];\n }\n return {parentPoolPath: res, isEphemeral};\n}\n","import forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport update_ from 'lodash/update';\n\nimport {\n INTEGRAL_GUARANTEES_PREFIX,\n InitialPoolResourceInfo,\n POOL_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolResourceType,\n computePoolPath,\n prepareCurrentTree,\n prepareTrees,\n} from '../../../utils/scheduling/scheduling';\nimport {\n extractBatchV4Values,\n getBatchError,\n splitBatchResults,\n wrapApiPromiseByToaster,\n} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n getPools,\n getSchedulingIsInitialLoading,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\n\nimport {\n POOL_TOGGLE_DELETE_VISIBILITY,\n SCHEDULING_DATA_FAILURE,\n SCHEDULING_DATA_PARTITION,\n SCHEDULING_DATA_REQUEST,\n SCHEDULING_DATA_SUCCESS,\n SCHEDULING_DELETE_POOL_FAILURE,\n SCHEDULING_DELETE_POOL_REQUEST,\n SCHEDULING_DELETE_POOL_SUCCESS,\n} from '../../../constants/scheduling';\nimport {loadExpandedPools} from './expanded-pools';\nimport {RumWrapper, YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport type {RootState} from '../../../store/reducers';\nimport type {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport type {PoolInfo} from '../../../store/selectors/scheduling/scheduling-pools';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nconst toaster = new Toaster();\n\ntype SchedulingThunkAction<T = unknown> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function loadSchedulingData(): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch({type: SCHEDULING_DATA_REQUEST});\n\n const state = getState();\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n const cluster = getCluster(state);\n const rumId = new RumWrapper(cluster, RumMeasureTypes.SCHEDULING);\n return rumId\n .fetch(\n YTApiId.schedulingData,\n ytApiV3Id.executeBatch(YTApiId.schedulingData, {\n requests: [\n makeGet('//sys/scheduler/@alerts'),\n makeList('//sys/scheduler/orchid/scheduler/pool_trees'),\n makeGet('//sys/scheduler/orchid/scheduler/default_fair_share_tree'),\n ],\n ...USE_CACHE,\n }),\n )\n .then((data) => {\n const {\n error,\n results: [schedulerAlerts, rawTrees, defaultTree],\n } = splitBatchResults(data, 'Failed to fetch scheduling data');\n\n if (error) {\n return Promise.reject(error);\n }\n\n const state = getState();\n\n const trees = prepareTrees(rawTrees);\n const tree = prepareCurrentTree(\n defaultTree,\n trees,\n state.scheduling.scheduling.tree,\n );\n\n if (isInitialLoading) {\n dispatch(schedulingLoadFilterAttributes(tree, {checkFilters: true}));\n }\n\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {schedulerAlerts, trees, tree},\n });\n\n const treeRequests = [\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_usage`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_limits`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/config`),\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_distribution_info`,\n ),\n ];\n\n if (isInitialLoading) {\n /**\n * We don't need to call `dispatch(loadExpandedPools(tree))` for this branch of code,\n * the call should be triggered by SchedulingExpandedPoolsUpdater\n */\n //dispatch(loadExpandedPools(tree));\n } else {\n dispatch(loadExpandedPools(tree));\n }\n\n return rumId\n .fetch(\n YTApiId.schedulingLoadTree,\n ytApiV4Id.executeBatch(YTApiId.schedulingLoadTree, {\n requests: treeRequests,\n ...USE_CACHE,\n }),\n )\n .then((treeData) => {\n const extracted = extractBatchV4Values(treeData, treeRequests);\n const {error, results} = splitBatchResults(\n extracted.results,\n 'Failed to fetch tree details',\n );\n if (error) {\n throw error;\n }\n return results;\n });\n })\n .then(([resource_usage, resource_limits, config, resource_distribution_info]) => {\n const treeResources = {\n resource_usage,\n resource_limits,\n config,\n resource_distribution_info,\n };\n\n dispatch({\n type: SCHEDULING_DATA_SUCCESS,\n data: {\n treeResources,\n },\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function deletePool(item?: PoolInfo): SchedulingThunkAction {\n return (dispatch, getState) => {\n if (!item) {\n return;\n }\n\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const path = computePoolPath(item, pools);\n\n dispatch({type: SCHEDULING_DELETE_POOL_REQUEST});\n\n return yt.v3\n .remove({\n path: `//sys/pool_trees/${tree}/${path}`,\n })\n .then(() => {\n toaster.add({\n name: 'delete pool',\n autoHiding: 10000,\n theme: 'success',\n title: `Successfully deleted ${item.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_DELETE_POOL_SUCCESS});\n dispatch(closePoolDeleteModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error: any) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DELETE_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return null;\n });\n };\n}\n\nexport function openPoolDeleteModal(item: PoolInfo): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closePoolDeleteModal(): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n };\n}\n\ntype PoolResources = Partial<\n Record<Exclude<PoolResourceType, 'guaranteeType'>, InitialPoolResourceInfo>\n>;\n\ninterface SetResourceGuaranteeParams {\n poolPath: string;\n values: PoolResources & {guaranteeType: string};\n initials: PoolResources;\n tree: string;\n}\n\nexport function setPoolAttributes(params: SetResourceGuaranteeParams) {\n const {poolPath, values, initials, tree} = params;\n if (isEmpty_(values)) {\n return Promise.resolve();\n }\n\n const transferData: Array<{diff: number; source: string; path: string}> = [];\n const toModify: Array<{attr: string; value: any}> = [];\n\n const {guaranteeType, ...restValues} = values;\n\n forEach_(restValues, (v, k) => {\n const {limit, source} = v || {};\n const key = k as keyof typeof restValues;\n\n const attr = POOL_RESOURCE_TYPE_TO_ATTRIBUTE[key];\n if (!source || limit === undefined) {\n toModify.push({attr, value: limit});\n } else {\n const prevLimit = initials[key]?.limit || 0;\n const diff = (limit || 0) - prevLimit;\n if (diff) {\n transferData.push({diff, source, path: attr});\n }\n }\n });\n\n if (Object.hasOwnProperty.call(values, 'guaranteeType')) {\n toModify.push({\n attr: POOL_RESOURCE_TYPE_TO_ATTRIBUTE['guaranteeType'],\n value: guaranteeType,\n });\n }\n\n return updateNodeAttributes(poolPath, toModify).then(() => {\n return transferPoolQuota({poolPath, transferData, tree});\n });\n}\n\ninterface TransferPoolQuotaParams {\n poolPath: string;\n transferData: Array<{diff: number; source: string; path: string}>;\n tree: string;\n}\n\nfunction transferPoolQuota({poolPath, transferData, tree}: TransferPoolQuotaParams) {\n if (isEmpty_(transferData)) {\n return Promise.resolve();\n }\n const tmp = poolPath.split('/');\n const dstPool = tmp[tmp.length - 1];\n\n const requests = map_(transferData, (v) => {\n const {diff, source, path} = v;\n const transferPath = path.startsWith(INTEGRAL_GUARANTEES_PREFIX)\n ? path.substr(INTEGRAL_GUARANTEES_PREFIX.length)\n : path;\n const dotPath = transferPath.replace(/\\//g, '.');\n\n const delta = update_({}, dotPath, () => Math.abs(diff));\n\n return {\n command: 'transfer_pool_resources' as const,\n parameters: {\n source_pool: diff > 0 ? source : dstPool,\n destination_pool: diff > 0 ? dstPool : source,\n pool_tree: tree,\n resource_delta: delta,\n },\n };\n });\n\n return ytApiV4Id\n .executeBatch(YTApiId.schedulingTransferPoolQuota, {requests})\n .then((res: any) => {\n const err = getBatchError(res.results, 'Failed to transfer pool quota');\n if (err) {\n return Promise.reject(err);\n }\n return res;\n });\n}\n\nexport function schedulingLoadFilterAttributes(\n tree: string,\n {checkFilters}: {checkFilters?: boolean} = {},\n): SchedulingThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n if (checkFilters && !schedulingOverviewHasFilter(state)) {\n return undefined;\n }\n\n const {lastTime, lastTree} = getSchedulingAttributesToFilterParams(state);\n if (tree === lastTree && Date.now() - lastTime < 120000) {\n return undefined;\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.schedulingFilterAttributes, {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`,\n fields: ['parent', 'abc'],\n ...USE_CACHE,\n }),\n {\n skipSuccessToast: true,\n toasterName: 'schedulingLoadFilterAttributes',\n errorContent: 'Failed to load attributes required for filtering',\n },\n ).then((attributesToFilter) => {\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {\n attributesToFilter,\n attributesToFilterParams: {lastTime: Date.now(), lastTree: tree},\n },\n });\n });\n };\n}\n\nexport function schedulingSetAbcFilter(abcServiceFilter: {\n id: number;\n slug: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter},\n });\n };\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport mapKeys_ from 'lodash/mapKeys';\nimport mapValues_ from 'lodash/mapValues';\nimport omit_ from 'lodash/omit';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {getPools, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n computePoolPath,\n} from '../../../utils/scheduling/scheduling';\n\nimport {\n CHANGE_CONTENT_MODE,\n CHANGE_POOL,\n CHANGE_POOL_CHILDREN_FILTER,\n CHANGE_TABLE_TREE_STATE,\n CHANGE_TREE,\n SCHEDULING_EDIT_POOL_CANCELLED,\n SCHEDULING_EDIT_POOL_FAILURE,\n SCHEDULING_EDIT_POOL_REQUEST,\n SCHEDULING_EDIT_POOL_SUCCESS,\n TOGGLE_EDIT_VISIBILITY,\n} from '../../../constants/scheduling';\nimport {loadSchedulingData, setPoolAttributes} from './scheduling-ts';\nimport {splitBatchResults} from '../../../utils/utils';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst toaster = new Toaster();\n\nconst setName = (path, newName, prevName) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return yt.v3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (path, values, initialValues) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands = [];\n\n if (initialValues.forbidImmediateOperations !== values.forbidImmediateOperations) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@forbid_immediate_operations`,\n },\n input: values.forbidImmediateOperations,\n });\n }\n\n if (initialValues.createEphemeralSubpools !== values.createEphemeralSubpools) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@create_ephemeral_subpools`,\n },\n input: values.createEphemeralSubpools,\n });\n }\n\n if (initialSortParamsString !== newSortParamsString) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@fifo_sort_parameters`,\n },\n input: values.fifoSortParams,\n });\n }\n\n return commands;\n};\n\nconst setResourceAttributes = (path, values, omittedValues, attribute) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper = {userSlots: 'user_slots'};\n const omittedValuesList = map_(omittedValues, (value, key) => keyMapper[key] || key);\n const preparedValues = mapKeys_(values, (value, key) => keyMapper[key] || key);\n\n return ytApiV3Id\n .get(YTApiId.schedulingGetAttrsBeforeEdit, {path: `${path}/@${attribute}`})\n .then((resources) => {\n const result = {...resources, ...preparedValues};\n const input = omit_(result, omittedValuesList);\n\n return yt.v3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return yt.v3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\nconst makeGeneralCommands = (path, values, initialValues) => {\n const isInitial = (value, initialValue) => value === initialValue;\n const isOmitted = (value, omittedValues) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n //const {name: abcServiceName, slug: abcServiceSlug, id} = prepareAbcService(values.abcService);\n const omittedValues = pickBy_(\n values,\n (value) => value === '' || value === undefined || value === null,\n );\n\n const commands = [];\n\n // if (!isInitial(abcServiceSlug, initialValues.abcService?.value)) {\n // commands.push({\n // command: abcServiceSlug ? 'set' : 'remove',\n // parameters: {\n // path: `${path}/@abc`,\n // },\n // input: !abcServiceSlug ? undefined : {\n // slug: abcServiceSlug,\n // name: abcServiceName,\n // id,\n // },\n // });\n // }\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight, initialValues.weight)) {\n if (isOmitted('weight', omittedValues)) {\n commands.push({\n command: 'remove',\n parameters: {\n path: `${path}/@weight`,\n },\n });\n } else if (!isInitial(values.weight, initialValues.weight)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@weight`,\n },\n input: Number(values.weight),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value) {\n return !isInvalidNumber(value);\n}\n\nexport function editPool(pool, values, initialValues) {\n return (dispatch, getState) => {\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const poolPath = computePoolPath(pool, pools);\n const path = `//sys/pool_trees/${tree}/${poolPath}`;\n\n const filteredResourceLimitsValues = pickBy_(values.resourceLimits, isValidNumber);\n const omittedResourceLimitsValues = pickBy_(values.resourceLimits, isInvalidNumber);\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n delete resourceLimitsValues['error-block'];\n delete omittedResourceLimitsValues['error-block'];\n\n dispatch({type: SCHEDULING_EDIT_POOL_REQUEST});\n\n const requests = [\n ...makeGeneralCommands(path, values.general, initialValues.general),\n ...makeOtherAttributesCommands(path, values.otherSettings, initialValues.otherSettings),\n ];\n\n return Promise.all([\n ytApiV3Id.executeBatch(YTApiId.schedulingEditPool, {requests}).then((data) => {\n const {error} = splitBatchResults(data, 'Failed to fetch pool details');\n if (error) {\n return Promise.reject(error);\n }\n }),\n setPoolAttributes({\n poolPath: path,\n values: {\n ...values.resourceGuarantee,\n ...values.integralGuarantee,\n ...pick_(values.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n initials: {\n ...initialValues.resourceGuarantee,\n ...initialValues.integralGuarantee,\n ...pick_(initialValues.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n tree,\n }),\n setResourceAttributes(\n path,\n resourceLimitsValues,\n omittedResourceLimitsValues,\n 'resource_limits',\n ),\n ])\n .then(setName(path, values.general.name, initialValues.general.name))\n .then(() => {\n toaster.add({\n name: 'edit pool',\n timeout: 10000,\n theme: 'success',\n title: `Successfully edited ${pool.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_EDIT_POOL_SUCCESS});\n dispatch(closeEditModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n });\n };\n}\n\nexport function openEditModal(item) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled} = {}) {\n return (dispatch) => {\n dispatch({\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n });\n\n if (cancelled) {\n dispatch({type: SCHEDULING_EDIT_POOL_CANCELLED});\n }\n };\n}\n\nexport function changeTree(tree) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState) {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool) {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function changeContentMode(evt) {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {\n contentMode: evt.target.value,\n },\n };\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool, tree) {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\n","import {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {createSelector} from 'reselect';\n\nexport const getSchedulingIsFinalLoadingState = createSelector(\n [\n (store: RootState) => store.scheduling.scheduling.loading,\n (store: RootState) => store.scheduling.scheduling.loaded,\n (store: RootState) => store.scheduling.scheduling.error,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\nimport {calcProgressProps} from '../../../../utils/utils';\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport './ShareUsageBar.scss';\n\nconst block = cn('share-usage-bar');\n\ninterface Props {\n className?: string;\n shareValue?: number;\n shareTitle?: string;\n usageValue?: number;\n usageTitle?: string;\n forceTheme?: ProgressProps['theme'];\n title?: React.ReactNode;\n}\n\nfunction ShareUsageBar(props: Props) {\n const {className, shareValue, usageValue, shareTitle, usageTitle, forceTheme, title} = props;\n\n const x = Number(usageValue) / Number(shareValue);\n\n if (isNaN(shareValue!) || isNaN(usageValue!) || isNaN(x)) {\n return (\n <Tooltip\n content={\n <React.Fragment>\n <div>\n {shareTitle}: {shareValue}\n </div>\n <div>\n {usageTitle}: {usageValue}\n </div>\n </React.Fragment>\n }\n >\n {format.NO_VALUE}\n </Tooltip>\n );\n }\n\n const {value, theme} = calcProgressProps(usageValue, Number(shareValue) * 2);\n\n return (\n <Tooltip\n className={block(null, className)}\n content={\n <React.Fragment>\n {title}\n <div>\n {usageTitle} / {shareTitle} = {format.Number(x, {digits: 3})}\n </div>\n </React.Fragment>\n }\n >\n <Progress\n className={block('progress')}\n size={'s'}\n value={Number(value)}\n theme={forceTheme || theme}\n />\n <div className={block('tick')} />\n </Tooltip>\n );\n}\n\nexport default React.memo(ShareUsageBar);\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\nimport {getCurrentPool, getIsRoot, getPool, getTree, getTreeResources} from './scheduling';\n\nimport ypath from '../../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport {getCluster} from '../global';\nimport {PoolInfo, getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools: Array<PoolInfo>) => {\n let current: string | undefined = pool;\n const path = [];\n while (current) {\n path.push(current);\n const tmp: string = current;\n const {parent} = find_(pools, ({name}) => name === tmp) || {};\n current = parent;\n }\n return path.reverse();\n },\n);\n\ninterface PoolStaticConfigurationItem {\n name: string;\n cpu?: number;\n cpuLabel?: string;\n gpu?: number;\n memory?: number;\n user_slots?: number;\n network?: number;\n}\n\nfunction makeStaticConfigurationItem(name: string, attrs: object): PoolStaticConfigurationItem {\n return {\n name,\n cpu: ypath.getValue(attrs, '/cpu'),\n gpu: ypath.getValue(attrs, '/gpu'),\n memory: ypath.getValue(attrs, '/user_memory'),\n user_slots: ypath.getValue(attrs, '/user_slots'),\n network: ypath.getValue(attrs, '/network'),\n };\n}\n\nexport const getCurrentPoolStaticConfiguration = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data): Array<PoolStaticConfigurationItem> => {\n if (isRoot || !data?.attributes) {\n return [];\n }\n\n const burst_guarantee_resources = ypath.getValue(\n data.attributes,\n '/specified_burst_guarantee_resources',\n );\n const resource_flow = ypath.getValue(data.attributes, '/specified_resource_flow');\n\n return [\n makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst_guarantee_resources &&\n makeStaticConfigurationItem('Burst', burst_guarantee_resources),\n resource_flow && makeStaticConfigurationItem('Flow', resource_flow),\n ].filter(Boolean);\n },\n);\n\ninterface PoolTreeStaticConfigurationItem {\n name: string;\n total?: number;\n\n used?: number;\n usedTitle?: string;\n\n free?: number;\n format: 'Bytes' | 'Number';\n level?: number;\n\n lastDayMaxValueSensor?: 'max_operation_count' | 'max_running_operation_count';\n lastDayMaxValueTitle?: string;\n}\n\nfunction calcTreeStaticConfiguration(totals: any, undistributed: any, resourceType: any) {\n const total = ypath.getNumber(totals, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total,\n used: total - free,\n free,\n };\n}\n\nfunction calcTreeStaticConfigurationByDistributed(\n distributed: any,\n undistributed: any,\n resourceType: any,\n) {\n const used = ypath.getNumber(distributed, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total: used + free,\n used,\n free,\n };\n}\n\nexport const getPoolsTopLevel = createSelector([getPools], (pools) => {\n return filter_(pools, ({parent}) => parent === ROOT_POOL_NAME);\n});\n\nconst getPoolsAllocatedOperationsCount = createSelector([getPoolsTopLevel], (topPools) => {\n return reduce_(\n topPools,\n (acc, item) => {\n acc.maxOperationCount += item.maxOperationCount || 0;\n acc.maxRunningOperationCount += item.maxRunningOperationCount || 0;\n return acc;\n },\n {maxOperationCount: 0, maxRunningOperationCount: 0},\n );\n});\n\nexport const getCurrentTreeGpuLimit = createSelector([getTreeResources], (resources): number => {\n return ypath.getNumber(resources, '/resource_limits/gpu', 0);\n});\n\nexport const getOperationsStaticConfiguration = createSelector(\n [getTreeResources, getPoolsAllocatedOperationsCount, getCluster, getTree],\n ({config}, allocated): Array<PoolTreeStaticConfigurationItem> => {\n const operationCount = ypath.getNumber(config, '/max_operation_count', 0);\n const runningOperationCount = ypath.getNumber(config, '/max_running_operation_count', 0);\n\n return [\n {\n name: 'Operations',\n format: 'Number',\n },\n {\n level: 1,\n name: 'Total',\n format: 'Number',\n total: operationCount,\n used: allocated.maxOperationCount,\n usedTitle: 'Max operation count',\n free: operationCount - allocated.maxOperationCount,\n\n lastDayMaxValueSensor: 'max_operation_count',\n lastDayMaxValueTitle: 'Last day max operations',\n },\n {\n level: 1,\n name: 'Running',\n format: 'Number',\n total: runningOperationCount,\n used: allocated.maxRunningOperationCount,\n usedTitle: 'Max running operation count',\n\n free: runningOperationCount - allocated.maxRunningOperationCount,\n\n lastDayMaxValueSensor: 'max_running_operation_count',\n lastDayMaxValueTitle: 'Last day max running operations',\n },\n ];\n },\n);\n\nexport const getCurrentPoolTreeStaticConfiguration = createSelector(\n [getTreeResources, getOperationsStaticConfiguration],\n (treeResources = {}, operationRows): Array<PoolTreeStaticConfigurationItem> => {\n const {resource_distribution_info, resource_limits} = treeResources;\n\n if (!resource_distribution_info) {\n return [];\n }\n\n const {\n undistributed_resources,\n distributed_burst_guarantee_resources: burst,\n undistributed_burst_guarantee_resources: unburst,\n distributed_resource_flow: flow,\n undistributed_resource_flow: unflow,\n } = resource_distribution_info;\n\n const cpuRow: PoolTreeStaticConfigurationItem = {\n level: 0,\n name: 'CPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'cpu'),\n };\n\n const burstRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Burst',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(burst, unburst, 'cpu'),\n total: undefined,\n free: undefined,\n };\n\n const flowRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Flow',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(flow, unflow, 'cpu'),\n total: undefined,\n };\n\n flowRow.free = burstRow.used! - flowRow.used!;\n\n const strong: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Strong',\n format: 'Number',\n used:\n cpuRow.used! -\n Math.max(...[0, burstRow.used!, flowRow.used!].filter((v) => !isNaN(v))),\n };\n\n return [\n cpuRow,\n strong,\n burstRow,\n flowRow,\n {\n name: 'Memory',\n format: 'Bytes',\n ...calcTreeStaticConfiguration(\n resource_limits,\n undistributed_resources,\n 'user_memory',\n ),\n },\n {\n name: 'GPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'gpu'),\n },\n ...operationRows,\n ];\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport format from '../../../common/hammer/format';\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {useSelector} from 'react-redux';\nimport {getCurrentPool, getIsRoot} from '../../../store/selectors/scheduling/scheduling';\nimport UIFactory from '../../../UIFactory';\nimport {getClusterUiConfig} from '../../../store/selectors/global';\n\nconst block = cn('pool-meta-table');\n\ninterface Props {\n className?: string;\n}\n\nexport default function PoolMetaData({className}: Props) {\n const pool = useSelector(getCurrentPool);\n const isRoot = useSelector(getIsRoot);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n if (!pool || isRoot) {\n return null;\n }\n\n const cpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/cpu', 0);\n const gpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/gpu', 0);\n const memory = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/memory', 0);\n const hasStrong = cpu > 0 || gpu > 0 || memory > 0;\n\n const {integralType, mode} = pool;\n const hasIntegralType = integralType && integralType !== 'none';\n\n const guaranteeType = [hasStrong && 'Strong', hasIntegralType && capitalize_(integralType)]\n .filter(Boolean)\n .join(' + ');\n return (\n <div className={block(null, className)}>\n <MetaTable\n items={[\n {\n key: 'Guarantee type',\n value: guaranteeType || 'Strong',\n },\n {\n key: 'Mode',\n value: format.Readable(mode) || format.NO_VALUE,\n },\n ...(UIFactory.getExtraMetaTableItemsForPool({pool, clusterUiConfig}) || []),\n ]}\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Column} from '@gravity-ui/react-data-table';\n\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {getIsRoot, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n getCurrentPoolStaticConfiguration,\n getCurrentPoolTreeStaticConfiguration,\n} from '../../../store/selectors/scheduling/scheduling-ts';\n\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport format from '../../../common/hammer/format';\n\nimport './SchedulingStaticConfiguration.scss';\nimport {getSettingsSchedulingExpandStaticConfiguration} from '../../../store/selectors/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport Label from '../../../components/Label/Label';\nimport UIFactory from '../../../UIFactory';\nimport PoolMetaData from '../Content/PoolMetaData';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\ninterface Props {\n onToggleCollapsedState: (value: boolean) => void;\n}\n\nfunction SchedulingStaticConfiguration(props: Props) {\n const {onToggleCollapsedState} = props;\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n onToggleCollapsedState(value);\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [onToggleCollapsedState, dispatch],\n );\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolMetaData className={block('pool-meta')} />\n {isRoot ? <PoolTreeStaticConfiguration /> : <PoolStaticConfiguration />}\n </div>\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\n\nfunction PoolStaticConfiguration() {\n const staticConfigurationItems = useSelector(getCurrentPoolStaticConfiguration);\n\n const columns: Array<Column<ArrayElement<typeof staticConfigurationItems>>> = [\n {\n name: 'name',\n header: 'Guarantees',\n sortable: false,\n width: 200,\n },\n {\n name: 'cpu',\n header: 'CPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const {cpu, cpuLabel} = row;\n if (cpuLabel) {\n return <Label capitalize text={cpuLabel} />;\n }\n return format['Number'](cpu);\n },\n align: 'right',\n },\n {\n name: 'gpu',\n header: 'GPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.gpu);\n },\n align: 'right',\n },\n {\n name: 'memory',\n header: 'Memory',\n sortable: false,\n width: 120,\n render: ({row}) => {\n return format['Bytes'](row.memory);\n },\n align: 'right',\n },\n {\n name: 'user_slots',\n header: 'User slots',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.user_slots);\n },\n align: 'right',\n },\n {\n name: 'network',\n header: 'Network',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const res = format['Number'](row.network);\n return res === format.NO_VALUE ? res : res + ' %';\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={staticConfigurationItems}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n />\n );\n}\n\nfunction PoolTreeStaticConfiguration() {\n const items = useSelector(getCurrentPoolTreeStaticConfiguration);\n const poolTree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n\n const columns: Array<Column<ArrayElement<typeof items>>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'total',\n header: 'Total',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format[row.format](row.total);\n },\n align: 'right',\n },\n {\n name: 'used',\n header: 'Distributed',\n sortable: false,\n width: 150,\n render({row}) {\n const {used, usedTitle, lastDayMaxValueSensor, lastDayMaxValueTitle} = row;\n const formatValue = format[row.format];\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: lastDayMaxValueTitle,\n sensor: lastDayMaxValueSensor,\n format: formatValue,\n current: {\n value: formatValue(used),\n title: usedTitle!,\n },\n showHint: true,\n showAsLink: true,\n });\n\n return !content ? (\n formatValue(used)\n ) : (\n <span className={block('used-cell')}>\n {formatValue(used)} / {content}\n </span>\n );\n },\n align: 'right',\n },\n {\n name: 'free',\n header: 'Delta',\n sortable: false,\n width: 150,\n render({row}) {\n const formatFn = format[row.format];\n const {free, total, lastDayMaxValueSensor} = row;\n const freeValue = formatFn(free);\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: 'Last day max operations',\n sensor: lastDayMaxValueSensor,\n format: (lastDayMaxValue?: number) => {\n const v =\n isNaN(total!) || isNaN(lastDayMaxValue!)\n ? undefined\n : total! - lastDayMaxValue!;\n return formatFn(v);\n },\n });\n\n return !content ? (\n freeValue\n ) : (\n <span>\n {freeValue} / {content}\n </span>\n );\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={items}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n rowClassName={(row) => {\n return !row?.level ? '' : block('row', {level: row.level as any});\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {getSchedulingOperationsError} from '../../../../../store/selectors/scheduling/expanded-pools';\n\nfunction SchedulingOperationsError() {\n const error = useSelector(getSchedulingOperationsError);\n return !error ? null : <ErrorBlock error={error} topMargin={'none'} />;\n}\n\nexport default React.memo(SchedulingOperationsError);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\n\nimport {getPoolsNames, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {changePool} from '../../../store/actions/scheduling/scheduling';\nimport {schedulingLoadFilterAttributes} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport Suggest from '../../../components/Suggest/Suggest';\n\nimport './PoolsSuggest.scss';\n\nconst block = cn('yt-pools-suggest');\n\nexport function PoolsSuggest({\n onCancelEdit = () => {},\n className,\n autoFocus,\n}: {\n onCancelEdit?: () => void;\n className?: string;\n autoFocus?: boolean;\n}) {\n const poolNames = useSelector(getPoolsNames);\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n\n const getSuggestItems = React.useCallback(\n (_items: any, filter?: string) => {\n if (!filter) {\n return poolNames;\n }\n\n const match: Array<string> = [];\n const startsWith: Array<string> = [];\n const filtered: Array<string> = [];\n\n const lcFilter = filter?.toLowerCase();\n\n forEach_(poolNames, (poolName) => {\n const lcPoolName = poolName.toLowerCase();\n if (lcFilter === lcPoolName) {\n match.push(poolName);\n } else if (lcPoolName.startsWith(lcFilter)) {\n startsWith.push(poolName);\n } else if (poolName !== ROOT_POOL_NAME && -1 !== lcPoolName.indexOf(lcFilter)) {\n filtered.push(poolName);\n }\n });\n return match.concat(startsWith, filtered);\n },\n [poolNames],\n );\n\n const handleCancelEdit = React.useCallback(() => {\n setTimeout(onCancelEdit, 500);\n }, [onCancelEdit]);\n\n const onItemClick = React.useCallback(\n (pool: string) => {\n dispatch(changePool(pool));\n onCancelEdit();\n },\n [dispatch, onCancelEdit],\n );\n\n const onFocus = React.useCallback(() => {\n dispatch(schedulingLoadFilterAttributes(tree));\n }, [dispatch, tree]);\n\n return (\n <Suggest\n className={block(null, className)}\n popupClassName={block('popup')}\n autoFocus={autoFocus}\n filter={getSuggestItems}\n onBlur={handleCancelEdit}\n onFocus={onFocus}\n placeholder=\"Select pool...\"\n onItemClick={(item) => onItemClick('string' === typeof item ? item : item.value)}\n items={poolNames}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../components/Label/Label';\nimport UIFactory from '../../../../../UIFactory';\nimport {PoolInfo} from '../../../../../store/selectors/scheduling/scheduling-pools';\nimport {getCluster, getClusterUiConfig} from '../../../../../store/selectors/global';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolInfo}) {\n const cluster = useSelector(getCluster);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {integralType} = pool;\n const showGuaranteeType = integralType === 'burst' || integralType === 'relaxed';\n const hasFlow = Number(pool.flowCPU) > 0 || Number(pool.flowGPU) > 0;\n return (\n <span className={block()}>\n {showGuaranteeType && (\n <Label\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n )}\n {!showGuaranteeType && hasFlow && (\n <Label className={block('tag')} text={'Integral'} theme={'complementary'} />\n )}\n {pool.mode === 'fifo' && (\n <Label className={block('tag')} text={'FIFO'} theme={'misc'} />\n )}\n {UIFactory.renderSchedulingTableItemExtraControls({\n cluster,\n pool,\n clusterUiConfig,\n })}\n </span>\n );\n}\n\nexport default React.memo(PoolTags);\n","import {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport qs from 'qs';\n\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../../components/formatters';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Button from '../../../../../components/Button/Button';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n changePool,\n changeTableTreeState,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {\n openPoolDeleteModal,\n schedulingSetAbcFilter,\n} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n getCurrentPool,\n getIsRoot,\n getSchedulingIsInitialLoading,\n getSchedulingOverviewMaxDepth,\n getSchedulingTreeState,\n getTableItems,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {SCHEDULING_POOL_TREE_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {poolsTableItems} from '../../../../../utils/scheduling/overviewTable';\nimport {HEADER_HEIGHT, Page} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport ShareUsageBar from '../../controls/ShareUsageBar';\nimport SchedulingStaticConfiguration from '../../../PoolStaticConfiguration/SchedulingStaticConfiguration';\n\nimport './Overview.scss';\nimport {Dialog} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {\n getPoolPathsByName,\n getSchedulingOperationsCount,\n resetExpandedPools,\n setExpandedPools,\n setLoadAllOperations,\n} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport PoolTags from './PoolTags';\nimport UIFactory from '../../../../../UIFactory';\n\nconst block = cn('scheduling-overview');\n\nconst STARVATION_STATUS_TO_THEME = {\n starving: 'warning',\n aggressively_starving: 'danger',\n};\n\nclass Overview extends Component {\n static resourcePropTypes = PropTypes.shape({\n type: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n });\n\n static tableItemPropTypes = PropTypes.shape({\n abc: PropTypes.object,\n name: PropTypes.string.isRequired,\n fairShareRatio: PropTypes.number,\n usageRatio: PropTypes.number,\n weight: PropTypes.number,\n demandRatio: PropTypes.number,\n\n runningOperationCount: PropTypes.number,\n operationCount: PropTypes.number,\n children: PropTypes.array,\n level: PropTypes.number,\n type: PropTypes.string,\n mode: PropTypes.string,\n });\n\n static propTypes = {\n // from connect\n treeState: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n\n changePool: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n schedulingSetFilter: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n changeTableTreeState: PropTypes.func.isRequired,\n schedulingSetAbcFilter: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n static poolModeTheme = {\n fair_share: 'default',\n fifo: 'info',\n };\n\n static renderBars([share, usage] = [], {forceTheme = undefined, title = undefined}) {\n return (\n <ShareUsageBar\n className={block('bars')}\n shareValue={share?.value}\n shareTitle={share?.title}\n usageValue={usage?.value}\n usageTitle={usage?.title}\n forceTheme={forceTheme}\n title={title}\n />\n );\n }\n\n static renderRatio(data) {\n const EPSILON = 1e-6;\n\n if (data < EPSILON) {\n return 0;\n } else if (data === 1) {\n return 1;\n }\n\n return hammer.format['Number'](data, {digits: 6});\n }\n\n static renderMode(item) {\n if (item.mode) {\n const text = hammer.format['ReadableField'](item.mode);\n const theme = Overview.poolModeTheme[item.mode];\n\n return <Label text={text} theme={theme} />;\n }\n\n return hammer.format.NO_VALUE;\n }\n\n static renderWeight(item) {\n const {weightEdited} = item;\n const edited = !isNaN(weightEdited);\n return (\n <span className={block('weight-content', {edited})}>\n <Tooltip content={edited ? 'Explicitly defined' : 'Automatically calculated'}>\n {hammer.format['Number'](item.weight, {\n digits: 6,\n digitsOnlyForFloat: true,\n })}\n </Tooltip>\n </span>\n );\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = poolsTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderFairShareUsage(item) {\n const barsData = [\n {\n value: item.fairShareRatio,\n title: 'Fair share',\n theme: 'success',\n },\n {\n value: item.usageRatio,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n const {starvation_status} = item;\n const forceTheme = STARVATION_STATUS_TO_THEME[starvation_status];\n\n return Overview.renderBars(barsData, {\n forceTheme,\n title: !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={hammer.format.Readable(starvation_status)} />\n </div>\n ),\n });\n }\n\n static renderOperationOverview(item) {\n const formatter = hammer.format['Number'];\n\n return formatter(item.runningOperationCount) + ' / ' + formatter(item.operationCount);\n }\n\n static renderAttributesButton(item, getPoolPaths) {\n const buttonProps = getPoolPaths\n ? {\n getPathProps: () => {\n return {\n exactPath: getPoolPaths(item.name).orchidPath,\n };\n },\n }\n : {\n attributes: item.attributes,\n };\n return <ClickableAttributesButton title={item.name} {...buttonProps} />;\n }\n\n static renderEditButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n const title = `edit pool ${item?.name || ''}`;\n return (\n <Button title={title} size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n );\n }\n\n static renderFifoIndex(item) {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n }\n\n static renderDeleteButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n return (\n <Button size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n }\n\n static renderType(item, columnName, toggleItemState, itemState, allowExpand = true) {\n const icon = {\n pool: 'tasks',\n operation: 'code',\n };\n\n const empty = allowExpand && itemState ? itemState.empty : true;\n const expanderClass = block('table-row-expander', {empty});\n const expanderClassIcon = block('table-row-expander-icon', {empty});\n\n const expanderIcon = itemState && (\n <Icon\n className={expanderClassIcon}\n awesome={itemState.collapsed ? 'angle-down' : 'angle-up'}\n />\n );\n\n return (\n <span onClick={empty ? undefined : toggleItemState} className={expanderClass}>\n {item.type !== 'operation' && expanderIcon}\n <span\n className={block('operation-icon', {\n type: item.type,\n })}\n title={item.type}\n >\n {icon[item.type] ? <Icon awesome={icon[item.type]} /> : null}\n </span>\n </span>\n );\n }\n\n static renderName(item, tab, cluster, currentPool) {\n const isCurrentPool = item.name === currentPool.name;\n const linkText = {\n pool: item.incomplete ? '' : item.name,\n operation: item.id,\n };\n\n if (item.type === 'pool') {\n if (isCurrentPool) {\n return <FormattedText text={linkText[item.type]} />;\n } else {\n const params = qs.parse(window.location.search.slice(1));\n const text = linkText[item.type];\n const state = {\n ...params,\n tab,\n cluster,\n pool: item.name,\n page: Page.SCHEDULING,\n };\n return <FormattedLink text={text} state={state} theme=\"primary\" routed />;\n }\n } else if (item.type === 'operation') {\n const url = `/${cluster}/operations/${item.id}`;\n return <Link url={url}>{linkText[item.type]}</Link>;\n } else {\n return <FormattedText text={item.name} />;\n }\n }\n\n static renderEphemeralIcon(item) {\n return (\n item.isEphemeral && (\n <Tooltip content=\"Ephemeral pool\" className={block('ephemeral-icon')}>\n <Icon awesome=\"ghost\" />\n </Tooltip>\n )\n );\n }\n\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool, itemsMaxDepth} = this.props;\n const allowExpand = item.name !== currentPool.name;\n\n return (\n <span\n className={block('name-content', {\n level: item.level,\n 'max-depth': itemsMaxDepth,\n })}\n >\n {Overview.renderType(item, ...rest, allowExpand)}\n <span className={block('name-content-name')}>\n {Overview.renderName(item, Tab.OVERVIEW, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n get tableSettings() {\n const {treeState} = this.props;\n\n return {\n treeState,\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_TREE_TABLE_ID,\n tree: true,\n columns: {\n items: poolsTableItems,\n sets: {\n default: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'fair_share_usage',\n 'fair_share',\n 'usage',\n 'demand',\n 'min_share',\n 'operation_overview',\n 'dominant_resource',\n 'actions',\n ],\n },\n },\n mode: 'default',\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n fair_share: Overview.renderColumnAsRatio,\n usage: Overview.renderColumnAsRatio,\n demand: Overview.renderColumnAsRatio,\n min_share: Overview.renderMinShare,\n fair_share_usage: Overview.renderFairShareUsage,\n dominant_resource: Overview.renderDominantResource,\n operation_overview: Overview.renderOperationOverview,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.key;\n },\n };\n }\n\n renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <SchedulingOverviewToolbar {...this.props} />\n </div>\n )}\n </Sticky>\n );\n }\n\n rowClassName = (item) => {\n const {currentPool} = this.props;\n return item.name !== currentPool?.name ? undefined : block('current-row');\n };\n\n render() {\n const {items, treeStateExpanded, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <SchedulingStaticConfiguration onToggleCollapsedState={fireResizeEvent} />\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ResetExpandedPoolsOnTreeChange>\n <ElementsTable\n {...this.tableSettings}\n treeStateExpanded={treeStateExpanded}\n items={items}\n rowClassName={this.rowClassName}\n onItemToggleState={this.onItemToggleState}\n isLoading={isInitialLoading}\n />\n </ResetExpandedPoolsOnTreeChange>\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n\n onItemToggleState = (poolPath, collapsed) => {\n const {setExpandedPools} = this.props;\n const parts = poolPath.split('/');\n const poolName = parts[parts.length - 1];\n\n setExpandedPools({[poolName]: !collapsed});\n };\n}\n\nconst mapStateToProps = (state) => {\n const items = getTableItems(state);\n const itemsMaxDepth = getSchedulingOverviewMaxDepth(state);\n const cluster = getCluster(state);\n const currentPool = getCurrentPool(state);\n const treeState = getSchedulingTreeState(state);\n const isRoot = getIsRoot(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {\n cluster,\n items,\n itemsMaxDepth,\n currentPool,\n treeState,\n treeStateExpanded: isRoot || !items[0] ? undefined : [items[0].key],\n abcServiceFilter: getSchedulingAbcFilter(state),\n isInitialLoading,\n };\n};\n\nconst mapDispatchToProps = {\n changePool,\n openPoolDeleteModal,\n openEditModal,\n changeTableTreeState,\n schedulingSetAbcFilter,\n setExpandedPools,\n getSchedulingOperationsCount,\n setLoadAllOperations,\n getPoolPathsByName,\n};\n\nfunction fireResizeEvent() {\n setTimeout(() => window.dispatchEvent(new Event('resize')), 500);\n}\n\nconst OverviewConnected = connect(mapStateToProps, mapDispatchToProps)(Overview);\n\nexport default OverviewConnected;\n\nexport function OverviewWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OverviewConnected />;\n}\n\nfunction ResetExpandedPoolsOnTreeChange({children}) {\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n /**\n * The component is required to reset inner state of ElementsTable by recreate it when tree is changed.\n * Also it resets state when the tab is changed back from 'Details'\n * These resets are required to sync store.getState().schedulingOperations.expandedPools and state of ElementsTable\n * to correctly calculate current max depth of items (see getSchedulingOverviewMaxDepth)\n */\n React.useEffect(() => {\n dispatch(resetExpandedPools(tree));\n }, [tree]);\n\n return <React.Fragment key={tree}>{children}</React.Fragment>;\n}\n\nclass SchedulingOverviewToolbar extends React.PureComponent {\n state = {\n confirmExpandDialogVisible: false,\n };\n\n handleExpand = () => {\n const opCount = this.props.getSchedulingOperationsCount();\n if (opCount <= 2000) {\n this.onConfirmExpand();\n } else {\n this.setConfirmDialogVisibility(true);\n }\n };\n onConfirmExpand = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('expanded');\n };\n handleCollapse = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('collapsed');\n };\n\n onAbcServiceFilter = (abcService) => {\n const {slug, id} = abcService || {};\n this.props.schedulingSetAbcFilter({id, slug});\n };\n\n setConfirmDialogVisibility = (confirmExpandDialogVisible) => {\n this.setState({confirmExpandDialogVisible});\n };\n\n renderConfirmExpandDialog() {\n const {confirmExpandDialogVisible} = this.state;\n return !confirmExpandDialogVisible ? null : (\n <Dialog open={true}>\n <Dialog.Header caption={'Confirmation of \"Expand all\"'} />\n <Dialog.Body>\n To display the expanded tree it is required to load all running operations, it\n might be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonApply={() => {\n this.setConfirmDialogVisibility(false);\n this.onConfirmExpand();\n }}\n onClickButtonCancel={() => this.setConfirmDialogVisibility(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </Dialog>\n );\n }\n\n render() {\n const {\n abcServiceFilter: {slug},\n } = this.props;\n\n return (\n <React.Fragment>\n {this.renderConfirmExpandDialog()}\n <PoolsSuggest className={block('filter')} />\n\n {UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: {slug},\n onChange: this.onAbcServiceFilter,\n })}\n\n <Button\n size=\"m\"\n className={block('toolbar-button')}\n theme=\"normal\"\n title=\"Expand All\"\n onClick={this.handleExpand}\n >\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n\n <Button size=\"m\" theme=\"normal\" title=\"Collapse All\" onClick={this.handleCollapse}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n","import React from 'react';\nimport {compose} from 'redux';\n\nimport withStickyHead from '../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../components/ElementsTable/hocs/withStickyFooter';\nimport ElementsTableBase from '../../components/ElementsTable/ElementsTable';\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction ElementsTableSticky(props) {\n return <ElementsTable {...props} />;\n}\n\nexport default ElementsTableSticky;\n","import React, {Component, Fragment} from 'react';\nimport {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport ElementsTableSticky from '../../../../../components/ElementsTable/ElementsTableSticky';\nimport Overview from '../../../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Filter from '../../../../../components/Filter/Filter';\n\nimport {\n changeContentMode,\n changePool,\n changePoolChildrenFilter,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {SCHEDULING_POOL_CHILDREN_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {calculateTotalOverPools} from '../../../../../utils/scheduling/details';\nimport {childTableItems} from '../../../../../utils/scheduling/detailsTable';\nimport {HEADER_HEIGHT} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getContentMode,\n getCurrentPool,\n getPollChildrenTableItems,\n getPoolChildrenFilter,\n getSchedulingIsInitialLoading,\n getSortedPoolChildren,\n} from '../../../../../store/selectors/scheduling/scheduling';\n\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getProgressTheme} from '../../../../../utils/progress';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {Bold, Secondary} from '../../../../../components/Text/Text';\n\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\n\nimport PoolTags from '../Overview/PoolTags';\n\nimport './Details.scss';\n\nconst block = cn('scheduling-details');\n\nclass Details extends Component {\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n static renderMaxShare(item) {\n return Overview.renderRatio(item.maxShareRatio);\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderColumnAsNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data);\n }\n\n static renderMaxOperationCount(item) {\n const {maxOperationCount, maxOperationCountEdited} = item;\n return Details.renderNumberWithEdited(maxOperationCount, maxOperationCountEdited);\n }\n\n static renderMaxRunningOperationCount(item) {\n const {maxRunningOperationCount, maxRunningOperationCountEdited} = item;\n return Details.renderNumberWithEdited(\n maxRunningOperationCount,\n maxRunningOperationCountEdited,\n );\n }\n\n static renderNumberWithEdited(value, editedValue) {\n const content = hammer.format.Number(value);\n\n const autoCalculated = isNaN(editedValue);\n return (\n <Tooltip content={autoCalculated ? 'Automatically calculated' : 'Explicitly defined'}>\n {autoCalculated ? <Secondary>{content}</Secondary> : <Bold>{content}</Bold>}\n </Tooltip>\n );\n }\n\n static renderColumnAsBytes(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Bytes'](data);\n }\n\n static renderColumnAsFloatNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static renderIntegralGuarantee(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n const {integralType} = item;\n const hasActiveGuarantee = integralType && integralType !== 'none';\n\n const value = hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n\n return hasActiveGuarantee ? (\n value\n ) : (\n <Tooltip\n className={block('integral-guarantee', {\n inactive: !hasActiveGuarantee,\n })}\n content={'It is impossible to use the guarantee until \"Guarantee type\" is defined'}\n >\n {value}\n </Tooltip>\n );\n }\n\n static renderColumnAsReadable(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](data);\n }\n\n static renderIntegralType(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return data === undefined\n ? hammer.format.NO_VALUE\n : Details.renderColumnAsReadable(item, columnName);\n }\n\n static renderAsProgress(item, columnName) {\n const value = childTableItems[columnName].get(item);\n const theme = getProgressTheme(value);\n const text = childTableItems[columnName].text(item);\n return isNaN(value) ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n }\n\n static childrenIntegrals(item, columnName) {\n const value = childTableItems[columnName].get(item);\n return !value\n ? hammer.format.NO_VALUE\n : hammer.format.Number(value, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static propTypes = {\n // from connect\n mode: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n children: PropTypes.arrayOf(Overview.tableItemPropTypes),\n\n changePoolChildrenFilter: PropTypes.func.isRequired,\n changeContentMode: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n changePool: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n get columnsSets() {\n return {\n cpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n //'rel_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n //'rel_usage_cpu',\n 'resource_limit_cpu',\n //'guaranteed_usage_cpu',\n 'actions',\n ],\n },\n memory: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n //'rel_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n //'rel_usage_memory',\n 'resource_limit_memory',\n //'guaranteed_usage_memory',\n 'actions',\n ],\n },\n gpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n //'rel_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n //'rel_usage_gpu',\n 'resource_limit_gpu',\n //'guaranteed_usage_gpu',\n 'actions',\n ],\n },\n user_slots: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n //'rel_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n //'rel_usage_user_slots',\n 'resource_limit_user_slots',\n //'guaranteed_usage_user_slots',\n 'actions',\n ],\n },\n operations: {\n items: [\n 'name',\n 'FI',\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n 'actions',\n ],\n },\n integral: {\n items: [\n 'name',\n 'FI',\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n //'accumulated_cpu',\n 'burst_duration',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {mode, children} = this.props;\n const isCurrentPool = this.isCurrentPool;\n const totalRow = children?.length ? calculateTotalOverPools(children) : undefined;\n\n return {\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_CHILDREN_TABLE_ID,\n footer: totalRow,\n header: false,\n top: 99,\n columns: {\n items: childTableItems,\n sets: this.columnsSets,\n mode,\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n dominant_resource: Details.renderDominantResource,\n min_share: Details.renderMinShare,\n max_share: Details.renderMaxShare,\n operation_overview: Overview.renderOperationOverview,\n demand: Details.renderColumnAsRatio,\n fair_share: Details.renderColumnAsRatio,\n usage: Details.renderColumnAsRatio,\n fair_share_usage: Overview.renderFairShareUsage,\n\n resource_detailed_cpu: Details.renderColumnAsFloatNumber,\n resource_detailed_memory: Details.renderColumnAsBytes,\n resource_detailed_gpu: Details.renderColumnAsNumber,\n resource_detailed_user_slots: Details.renderColumnAsNumber,\n\n resource_limit_cpu: Details.renderColumnAsFloatNumber,\n resource_limit_memory: Details.renderColumnAsBytes,\n resource_limit_gpu: Details.renderColumnAsNumber,\n resource_limit_user_slots: Details.renderColumnAsNumber,\n\n min_resources_cpu: Details.renderColumnAsFloatNumber,\n min_resources_memory: Details.renderColumnAsBytes,\n min_resources_gpu: Details.renderColumnAsNumber,\n min_resources_user_slots: Details.renderColumnAsNumber,\n\n abs_guaranteed_cpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_memory: Details.renderColumnAsBytes,\n abs_guaranteed_gpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_user_slots: Details.renderColumnAsFloatNumber,\n\n abs_demand_cpu: Details.renderColumnAsNumber,\n abs_demand_memory: Details.renderColumnAsBytes,\n abs_demand_gpu: Details.renderColumnAsNumber,\n abs_demand_user_slots: Details.renderColumnAsNumber,\n\n abs_usage_cpu: Details.renderColumnAsNumber,\n abs_usage_memory: Details.renderColumnAsBytes,\n abs_usage_gpu: Details.renderColumnAsNumber,\n abs_usage_user_slots: Details.renderColumnAsNumber,\n\n rel_guaranteed_cpu: this.renderRelResource,\n rel_guaranteed_memory: this.renderRelResource,\n rel_guaranteed_gpu: this.renderRelResource,\n rel_guaranteed_user_slots: this.renderRelResource,\n\n rel_usage_cpu: this.renderRelResource,\n rel_usage_memory: this.renderRelResource,\n rel_usage_gpu: this.renderRelResource,\n rel_usage_user_slots: this.renderRelResource,\n\n guaranteed_usage_cpu: this.renderResourceBars,\n guaranteed_usage_memory: this.renderResourceBars,\n guaranteed_usage_gpu: this.renderResourceBars,\n guaranteed_usage_user_slots: this.renderResourceBars,\n\n running_operation_progress: Details.renderAsProgress,\n running_operation_count: Details.renderColumnAsNumber,\n operation_count: Details.renderColumnAsNumber,\n operation_progress: Details.renderAsProgress,\n max_running_operation_count: Details.renderMaxRunningOperationCount,\n max_operation_count: Details.renderMaxOperationCount,\n\n integral_type: Details.renderIntegralType,\n burst_cpu: Details.renderIntegralGuarantee,\n flow_cpu: Details.renderIntegralGuarantee,\n children_burst_cpu: Details.childrenIntegrals,\n children_flow_cpu: Details.childrenIntegrals,\n accumulated: Details.renderColumnAsRatio,\n accumulated_cpu: Details.renderColumnAsNumber,\n burst_duration: Details.renderColumnAsNumber,\n\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.name;\n },\n itemMods(item) {\n return {\n current: isCurrentPool(item) ? 'yes' : '',\n aggregation: item.aggregation ? 'yes' : '',\n };\n },\n };\n }\n\n renderResourceBars = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const resourceData = childTableItems[columnName].get(item, currentPool);\n const barsData = [\n {\n value: resourceData.guaranteed,\n title: 'Guaranteed share',\n theme: 'success',\n },\n {\n value: resourceData.usage,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n return Overview.renderBars(barsData);\n };\n\n renderRelResource = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const data = childTableItems[columnName].get(item, currentPool);\n\n return Overview.renderRatio(data);\n };\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool} = this.props;\n\n return (\n <span className={block('name-cell', {child: item.isChildPool})}>\n {Overview.renderType(item, ...rest)}\n <span className={block('name-cell-text')}>\n {Overview.renderName(item, Tab.DETAILS, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n isCurrentPool = (item) => item.name === this.props.currentPool.name;\n\n renderToolbar() {\n const {filter, mode, changePoolChildrenFilter, changeContentMode, currentPool} = this.props;\n\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <Filter\n key={currentPool?.name}\n size=\"m\"\n value={filter}\n placeholder=\"Filter...\"\n className={block('filter')}\n onChange={changePoolChildrenFilter}\n />\n\n <RadioButton\n size=\"m\"\n value={mode}\n onChange={changeContentMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'cpu',\n text: 'CPU',\n },\n {\n value: 'memory',\n text: 'Memory',\n },\n {\n value: 'gpu',\n text: 'GPU',\n },\n {\n value: 'user_slots',\n text: 'User slots',\n },\n {\n value: 'operations',\n text: 'Operations',\n },\n {\n value: 'integral',\n text: 'Integral guarantees',\n },\n ]}\n />\n </div>\n )}\n </Sticky>\n );\n }\n\n render() {\n const {items, mode, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ElementsTableSticky\n cssTableMods={{mode}}\n {...this.tableSettings}\n items={items}\n isLoading={isInitialLoading}\n />\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const currentPool = getCurrentPool(state);\n const items = getPollChildrenTableItems(state);\n const mode = getContentMode(state);\n const filter = getPoolChildrenFilter(state);\n const cluster = getCluster(state);\n const children = getSortedPoolChildren(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {currentPool, mode, filter, items, children, cluster, isInitialLoading};\n};\n\nconst mapDispatchToProps = {\n changePoolChildrenFilter,\n changeContentMode,\n openEditModal,\n openPoolDeleteModal,\n changePool,\n getPoolPathsByName,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <DetailsConnected />;\n}\n","import hammer from '../../common/hammer';\n\nexport function calculateTotalOverPools(pools) {\n const summedProperties = [\n 'weight',\n 'minShareRatio',\n 'demandRatio',\n 'fairShareRatio',\n 'usageRatio',\n 'maxOperationCount',\n 'maxRunningOperationCount',\n 'runningOperationCount',\n 'operationCount',\n ].map((name) => ({name, type: 'sum'}));\n\n ['cpu', 'user_memory', 'gpu', 'user_slots'].forEach((resource) => {\n ['min', 'guaranteed', 'usage', 'demand'].forEach((metric) => {\n const name = ['resources', resource, metric].join('.');\n summedProperties.push({name, type: 'nested/sum'});\n });\n });\n\n // We can aggregate only pools with resources\n const items = pools.filter((pool) => Boolean(pool.resources));\n\n return Object.assign(hammer.aggregation.prepare(items, summedProperties)[0], {\n key: 'aggregation',\n name: 'Aggregation',\n type: 'aggregation',\n aggregation: true,\n });\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getIsRoot,\n getPool,\n getPools,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {PoolAclPanel} from '../../../../../containers/ACL';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {getAclLoadState} from '../../../../../store/selectors/acl';\nimport {IdmObjectType} from '../../../../../constants/acl';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nfunction PoolAcl() {\n const isRoot = useSelector(getIsRoot);\n\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const pools = useSelector(getPools);\n\n if (isRoot) {\n return (\n <NoContent\n warning=\"Visualization is not supported for <Root>.\"\n hint=\" Please select a specific pool.\"\n />\n );\n }\n\n return isEmpty_(pools) ? null : (\n <ErrorBoundary>\n <PoolAclPanel key={`${tree}_${pool}`} path={pool} poolTree={tree} />\n </ErrorBoundary>\n );\n}\n\nfunction PoolAclWithRum({loadState}) {\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_ACL,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_ACL,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PoolAcl />;\n}\n\nconst mapStateToProps = (state) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {loadExpandedPools} from '../../../store/actions/scheduling/expanded-pools';\n\nfunction SchedulingExpandedPoolsUpdater() {\n const tree = useSelector(getTree);\n const name = useSelector(getPool);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadExpandedPools(tree));\n }, [dispatch, tree, name]);\n\n return null;\n}\n\nexport default React.memo(SchedulingExpandedPoolsUpdater);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport {OverviewWithRum} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport Details from '../../../pages/scheduling/Content/tabs/Details/Details';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {DEFAULT_TAB, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport PoolAcl from '../../../pages/scheduling/Content/tabs/PoolAcl/PoolAcl';\nimport {\n getIsRoot,\n getPool,\n getPoolIsEphemeral,\n getTree,\n isPoolAclAllowed,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport './Content.scss';\nimport {getCluster} from '../../../store/selectors/global';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport UIFactory from '../../../UIFactory';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst block = cn('scheduling-content');\n\nContent.propTypes = {\n // from parent\n className: PropTypes.string,\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nfunction Content({className, match, location}) {\n const cluster = useSelector(getCluster);\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const isEphemeral = useSelector(getPoolIsEphemeral);\n const isRoot = useSelector(getIsRoot);\n const allowAcl = useSelector(isPoolAclAllowed);\n\n const localTab = {...Tab};\n\n const showSettings = reduce_(\n Tab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {},\n );\n\n const titleDict = {};\n\n const aclTab = showSettings[Tab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n });\n\n const extraRoutes = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate} = tab;\n const tabSettings = {show: true};\n showSettings[name] = tabSettings;\n\n if (urlTemplate) {\n tabSettings.routed = false;\n tabSettings.external = true;\n tabSettings.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytPool: pool,\n ytPoolTree: tree,\n });\n }\n\n localTab[name] = name;\n if (title) {\n titleDict[name] = title;\n }\n if (component) {\n const route = <Route key={name} path={`${match.path}/${name}`} component={component} />;\n extraRoutes.push(route);\n }\n });\n\n delete localTab.ACL;\n localTab[Tab.ACL] = Tab.ACL;\n\n const props = makeTabProps(match.url, localTab, showSettings, {pool, tree}, titleDict);\n\n return (\n <ErrorBoundary>\n <SchedulingExpandedPoolsUpdater />\n <div className={block(null, className)}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={OverviewWithRum} />\n <Route path={`${match.path}/${Tab.DETAILS}`} component={Details} />\n {extraRoutes}\n {aclTab.show && <Route path={`${match.path}/${Tab.ACL}`} component={PoolAcl} />}\n <Route path={`${match.path}/:tab`} component={Placeholder} />\n <Redirect\n from={match.url}\n to={{pathname: `${match.url}/${DEFAULT_TAB}`, search: location.search}}\n />\n </Switch>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport hammer from '../../../common/hammer';\nimport {getIsRoot, getResources} from '../../../store/selectors/scheduling/scheduling';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport './SchedulingResources.scss';\n\nconst block = cn('scheduling-resources');\nconst headingBlock = cn('elements-heading');\n\nfunction SchedulingResources() {\n const isRoot = useSelector(getIsRoot);\n const resources = useSelector(getResources) as any;\n\n return !isRoot || isEmpty_(resources) ? null : (\n <div className={block()}>\n {map_(resources, (resource) => (\n <div className={block('resources-item')} key={resource.type}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](resource.type)}\n </div>\n <Progress {...resource.progress} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default React.memo(SchedulingResources);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {DialogField, FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Error from '../../../../components/Error/Error';\n\nimport {\n calculatePoolPath,\n getPools,\n getPoolsSelectItems,\n getSchedulingEditItem,\n getSchedulingSourcesOfEditItem,\n getTree,\n} from '../../../../store/selectors/scheduling/scheduling';\nimport {\n InitialPoolResourceInfo,\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolGeneralResourceType,\n PoolIntegralResourceType,\n PoolStrongResourceType,\n getInitialValues,\n} from '../../../../utils/scheduling/scheduling';\nimport {isAbcPoolName, isTopLevelPool} from '../../../../utils/scheduling/pool';\nimport {closeEditModal, editPool} from '../../../../store/actions/scheduling/scheduling';\n\nimport {checkUserPermissionsUI} from '../../../../utils/acl/acl-api';\nimport {getCluster, getCurrentUserName} from '../../../../store/selectors/global';\nimport {getCurrentTreeGpuLimit} from '../../../../store/selectors/scheduling/scheduling-ts';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n PoolInfo,\n getSchedulingPoolsMapByName,\n} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\n\nconst block = cn('pool-editor-dialog');\n\nfunction makePermissionWarning(visible: boolean) {\n return !visible ? null : (\n <div className={block('permissions-warning')}>\n You do not have sufficient permissions to modify pool settings. In order to be able to\n modify pool settings <span className={block('flag')}>inherit_acl</span> flag should be\n enabled for current pool and you should be responsible for the parent pool.\n </div>\n );\n}\n\nfunction makeError(error: any) {\n return isEmpty_(error) ? null : <Error className={block('error')} error={error} />;\n}\n\nexport interface PoolEditorFormValues {\n general: Record<PoolGeneralResourceType, InitialPoolResourceInfo> & {\n weight: {value?: number; error?: string};\n }; // TODO add description for another fields\n resourceGuarantee: Record<PoolStrongResourceType, InitialPoolResourceInfo>;\n integralGuarantee: Record<\n Exclude<PoolIntegralResourceType, 'guaranteeType'>,\n InitialPoolResourceInfo\n > & {guaranteeType?: 'none' | 'burst' | 'relaxed'};\n resourceLimits: {\n cpu: number | string;\n gpu: number | string;\n memory: number | string;\n userSlots: number | string;\n };\n otherSettings: {\n forbidImmediateOperations: boolean;\n fifoSortParams: Array<string>;\n createEphemeralSubpools: boolean;\n };\n}\n\nexport function PoolEditorDialog() {\n const dispatch = useDispatch();\n\n const editItem = useSelector(getSchedulingEditItem);\n const {poolErrorData, editVisibility} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const treGpuLimit = useSelector(getCurrentTreeGpuLimit);\n\n const allowedSources = useSelector(getSchedulingSourcesOfEditItem);\n\n const poolsItems = useSelector(getPoolsSelectItems);\n const pools = useSelector(getPools);\n const tree = useSelector(getTree);\n const modeItems = [\n {key: 'fair_share', value: 'fair_share', title: 'fair_share'},\n {key: 'fifo', value: 'fifo', title: 'fifo'},\n ];\n const [initialValues, initialFormValues] = useMemo(() => {\n const data = getInitialValues(editItem, allowedSources);\n const formData: PoolEditorFormValues = {\n ...data,\n general: {\n ...data.general,\n weight: {\n value: data.general.weight,\n },\n },\n };\n return [data, formData];\n }, [editItem, allowedSources]); // don't pass pools into memo's array\n\n const editCloseHandler = useCallback(() => {\n dispatch(closeEditModal({cancelled: true}));\n }, [dispatch]);\n const editConfirmHandler = useCallback(\n async (form: FormApi<PoolEditorFormValues>) => {\n const {values} = form.getState();\n const {general, resourceGuarantee, integralGuarantee, resourceLimits, otherSettings} =\n values;\n const data = {\n general: {\n ...pick_(general, ['name', 'mode']),\n weight: general.weight.value,\n ...pickBy_(\n pick_(general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof POOL_GENERAL_TYPE_TO_ATTRIBUTE;\n const initialValue = initialValues.general[key].limit;\n return item.limit !== initialValue;\n },\n ),\n },\n resourceGuarantee: pickBy_(\n pick_(resourceGuarantee, Object.keys(POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof resourceGuarantee;\n const initialValue = initialValues.resourceGuarantee[key].limit;\n return item.limit !== initialValue;\n },\n ),\n integralGuarantee: pickBy_(\n pick_(integralGuarantee, Object.keys(POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR)),\n (item, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof integralGuarantee;\n const initialValue = initialValues.integralGuarantee[key];\n if (typeof item === 'object' && typeof initialValue === 'object') {\n return item.limit !== initialValue.limit;\n } else {\n return item !== initialValue;\n }\n },\n ),\n resourceLimits: pick_(resourceLimits, ['cpu', 'gpu', 'memory', 'userSlots']),\n otherSettings: pick_(otherSettings, [\n 'forbidImmediateOperations',\n 'fifoSortParams',\n 'createEphemeralSubpools',\n ]),\n };\n await dispatch(editPool(editItem, data, initialValues));\n },\n [editItem, initialValues, dispatch],\n );\n\n const user = useSelector(getCurrentUserName);\n const [hasWarning, setHasWarning] = React.useState(false);\n const [checkPermError, setCheckPermError] = React.useState(null);\n\n React.useEffect(() => {\n setCheckPermError(null);\n if (!editItem?.name) {\n return;\n }\n const pathToCheck = calculatePoolPath(editItem.name, pools, tree);\n checkUserPermissionsUI(pathToCheck, user, ['write'])\n .then(([{action}]) => {\n const newHasWarning = action !== 'allow';\n if (newHasWarning !== hasWarning) {\n setHasWarning(newHasWarning);\n }\n })\n .catch((error) => {\n setCheckPermError(error);\n });\n }, [pools, tree, editItem?.name, hasWarning, setHasWarning, setCheckPermError]);\n\n const warningField: DialogField = {\n type: 'block',\n name: 'perm-warning',\n extras: {\n children: makePermissionWarning(hasWarning),\n },\n };\n\n const checkPermErrorField: DialogField = {\n type: 'block',\n name: 'check-perm-error',\n extras: {\n children: makeError(checkPermError),\n },\n };\n\n const poolErrorDataField: DialogField = {\n type: 'block',\n name: 'pool-error-data',\n extras: {\n children: makeError(poolErrorData),\n },\n };\n\n const transferNotice = useTransferNotice(editItem);\n\n const integralTypeNotice = useChangeIntegralTypeNotice(editItem, pools, tree);\n\n return (\n <YTDFDialog<PoolEditorFormValues>\n size=\"l\"\n key={editItem?.name + '/' + editVisibility}\n className={block()}\n visible={editVisibility}\n onClose={editCloseHandler}\n headerProps={{\n title: editItem?.name,\n }}\n onAdd={editConfirmHandler}\n initialValues={initialFormValues}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...transferNotice,\n {\n name: 'name',\n type: 'text',\n caption: 'Pool name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n },\n {\n name: 'parent',\n type: 'yt-select-single',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: true,\n extras: {\n disabled: true,\n items: poolsItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n },\n {\n name: 'separator',\n type: 'block',\n extras: {\n children: <div className={block('separator')} />,\n },\n },\n {\n name: 'mode',\n type: 'yt-select-single',\n caption: 'Mode',\n required: true,\n extras: {\n items: modeItems,\n placeholder: 'Select mode...',\n width: 'max',\n hideFilter: true,\n },\n },\n {\n name: 'weight',\n type: 'number',\n caption: 'Weight',\n extras: {\n min: Number.MIN_VALUE,\n hidePrettyValue: true,\n formatFn: (value) => (value === undefined ? '' : String(value)),\n },\n },\n {\n name: 'maxOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxOperationCount',\n initialLimit: initialValues.general.maxOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n {\n name: 'maxRunningOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max running operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxRunningOperationCount',\n initialLimit: initialValues.general.maxRunningOperationCount.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceGuarantee',\n title: 'Strong Guarantee',\n fields: [\n ...transferNotice,\n {\n name: 'cpuStrong',\n type: 'pool-quota-editor',\n caption: 'CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'cpuStrong',\n initialLimit: initialValues.resourceGuarantee.cpuStrong.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'gpuStrong',\n type: 'pool-quota-editor' as const,\n caption: 'GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'gpuStrong' as const,\n initialLimit:\n initialValues.resourceGuarantee.gpuStrong.limit,\n },\n },\n ]\n : []),\n {\n name: 'memoryStrong',\n type: 'pool-quota-editor' as const,\n caption: 'Memory',\n extras: {\n format: 'Bytes',\n pool: editItem?.name || '',\n resourceType: 'memoryStrong' as const,\n initialLimit: initialValues.resourceGuarantee.memoryStrong.limit,\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'integralGuarantee',\n title: 'Integral Guarantee',\n fields: [\n ...transferNotice,\n ...integralTypeNotice,\n {\n name: 'guaranteeType',\n type: 'yt-select-single',\n caption: 'Guarantee',\n extras: {\n placeholder: 'Integral guarantee type...',\n items: [\n {\n value: 'none',\n text: 'Descendants only',\n },\n {value: 'burst', text: 'Burst'},\n {value: 'relaxed', text: 'Relaxed'},\n ],\n width: 'max',\n },\n },\n {\n name: 'burstCpu',\n type: 'pool-quota-editor',\n caption: 'Burst CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstCpu',\n initialLimit: initialValues.integralGuarantee.burstCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'burstGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Burst GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.burstGpu.limit,\n },\n },\n ]\n : []),\n {\n name: 'flowCpu',\n type: 'pool-quota-editor',\n caption: 'Flow CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowCpu',\n initialLimit: initialValues.integralGuarantee.flowCpu.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'flowGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Flow GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowGpu' as const,\n initialLimit:\n initialValues.integralGuarantee.flowGpu.limit,\n },\n },\n ]\n : []),\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceLimits',\n title: 'Resource Limits',\n fields: [\n {\n name: 'cpu',\n type: 'text',\n caption: 'CPU',\n },\n {\n name: 'gpu',\n type: 'text',\n caption: 'GPU',\n },\n {\n name: 'memory',\n type: 'bytes',\n caption: 'Memory',\n validator(value?: number) {\n if (typeof value !== 'undefined' && isNaN(value)) {\n return 'Incorrect value';\n }\n return undefined;\n },\n },\n {\n name: 'userSlots',\n type: 'text',\n caption: 'User slots',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'otherSettings',\n title: 'Other settings',\n fields: [\n {\n name: 'forbidImmediateOperations',\n type: 'tumbler',\n caption: 'Forbid immediate operations',\n },\n {\n name: 'fifoSortParams',\n type: 'sortable-list',\n caption: 'Fifo sort parameters',\n extras: {\n axis: 'x',\n },\n },\n {\n name: 'createEphemeralSubpools',\n type: 'tumbler',\n caption: 'Create ephemeral subpools',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n ]}\n />\n );\n}\n\nfunction useTransferNotice(editItem?: PoolInfo): [DialogField<PoolEditorFormValues>] | [] {\n const {parent} = editItem || {};\n // const abcInfo = abcInfoFromAttributes(cypressAttributes);\n const poolsByName = useSelector(getSchedulingPoolsMapByName);\n const parentPool = poolsByName[parent!];\n\n const children = UIFactory.renderTransferQuotaNoticeForPool({\n pool: editItem,\n parentPool,\n isTopLevel: isTopLevelPool(editItem),\n });\n\n return !children\n ? []\n : [\n {\n type: 'block' as const,\n name: 'transferQuotaNotice',\n extras: {\n children,\n },\n },\n ];\n}\n\nfunction useChangeIntegralTypeNotice(\n editItem: PoolInfo | undefined,\n pools: Array<PoolInfo>,\n tree: string,\n): [DialogField<PoolEditorFormValues>] | [] {\n const {name, parent} = editItem || {};\n\n const cluster = useSelector(getCluster);\n\n if (isAbcPoolName(name) || (!isAbcPoolName(parent) && !isTopLevelPool(editItem))) {\n return [];\n }\n\n const poolPath = name ? calculatePoolPath(name, pools, tree) : undefined;\n const path = `${poolPath}/@integral_guarantees/guarantee_type`;\n const summary = `[${cluster}]: Change-request of ${path}`;\n\n const {url, queue} = createQuotaReqTicketUrl({summary});\n\n return [\n {\n type: 'block' as const,\n name: 'integralTypeNotice',\n extras: {\n children: (\n <div className={block('changeTypeNotice')}>\n To change the guarantee type of the pool you have to create a request to{' '}\n {url ? <Link url={url}>{queue}</Link> : \"the cluster's support team\"}\n </div>\n ),\n },\n },\n ];\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {Dialog as DeleteDialog} from '@gravity-ui/uikit';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Error from '../../../components/Error/Error';\n\nimport Content from '../Content/Content';\n\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../constants/scheduling';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport {\n closePoolDeleteModal as closeDeleteModal,\n deletePool,\n loadSchedulingData,\n} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport './Scheduling.scss';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../store/selectors/scheduling';\nimport SchedulingResources from '../Content/SchedulingResources';\nimport {PoolEditorDialog} from './PoolEditorDialog/PoolEditorDialog';\nimport {RootState} from '../../../store/reducers';\n\nconst block = cn('scheduling');\n\nconst SchedulingDialogsMemo = React.memo(SchedulingDialogs);\n\nfunction Scheduling() {\n const error = useSelector((state: RootState) => {\n const {error: hasError, errorData} = state.scheduling.scheduling;\n return hasError ? errorData : undefined;\n });\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(loadSchedulingData());\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return (\n <div className={block(null, 'elements-main-section')}>\n <ErrorBoundary>\n {error && <Error error={error} />}\n <div className={block('wrapper')}>\n <SchedulingResources />\n <Content {...{className: block('content')}} />\n </div>\n <SchedulingDialogsMemo />\n </ErrorBoundary>\n </div>\n );\n}\n\nconst SchedulingMemo = React.memo(Scheduling);\n\nexport default function SchedulingWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n return <SchedulingMemo />;\n}\n\nfunction SchedulingDialogs() {\n const dispatch = useDispatch();\n\n const {deleteVisibility, deleteItem, poolErrorData} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const deleteConfirmHandler = React.useCallback(\n () => dispatch(deletePool(deleteItem)),\n [deleteItem, dispatch],\n );\n const deleteCloseHandler = React.useCallback(() => {\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n dispatch(closeDeleteModal());\n }, [dispatch]);\n\n return (\n <React.Fragment>\n {deleteVisibility && (\n <DeleteDialog\n size=\"m\"\n className={block('delete-dialog')}\n open={deleteVisibility}\n onClose={deleteCloseHandler}\n hasCloseButton\n >\n <DeleteDialog.Header caption=\"Delete\" />\n <DeleteDialog.Body>\n Are you sure you want to delete the <b>{deleteItem?.name}</b> pool?\n {keys_(poolErrorData).length > 0 ? (\n <Error message=\"Delete pool failure\" error={poolErrorData} />\n ) : null}\n </DeleteDialog.Body>\n <DeleteDialog.Footer\n onClickButtonApply={deleteConfirmHandler}\n onClickButtonCancel={deleteCloseHandler}\n propsButtonApply={{view: 'flat-danger'}}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Delete\"\n />\n </DeleteDialog>\n )}\n <PoolEditorDialog />\n </React.Fragment>\n );\n}\n","export function prepareAbcService(abcService?: {\n value?: string;\n title: string;\n id: string | number;\n}) {\n if (!abcService || !abcService.value) {\n return {};\n }\n const slug = abcService.value.startsWith('svc_')\n ? abcService.value.slice(4) // remove 'svc_' prefix;\n : abcService.value;\n const name = abcService.title;\n\n return {slug, name, id: Number(abcService.id)};\n}\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {\n CreatePoolDialogAction,\n CreatePoolDialogState,\n} from '../../reducers/scheduling/create-pool-dialog';\nimport {\n CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n} from '../../../constants/scheduling';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {prepareAbcService} from '../../../utils/scheduling';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {loadSchedulingData} from './scheduling-ts';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {getCluster} from '../../selectors/global';\nimport {updateAcl} from '../../../utils/acl/acl-api';\nimport {IdmObjectType} from '../../../constants/acl';\nimport Link from '../../../components/Link/Link';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {createAdminReqTicketUrl} from '../../../config';\n\ntype CreatePoolDialogThunkAction<R = any> = ThunkAction<\n R,\n RootState,\n unknown,\n CreatePoolDialogAction\n>;\n\nexport function fetchCreatePoolDialogTreeItems(currentTree: string): CreatePoolDialogThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.getPoolTrees, {path: `//sys/pool_trees/${currentTree}`})\n .then((treeItems: CreatePoolDialogState['treeItems']) => {\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n data: {currentTree, treeItems},\n });\n });\n };\n}\n\nexport function createPool(values: FIX_MY_TYPE): CreatePoolDialogThunkAction {\n return (dispatch, getState) => {\n const {abcService} = values;\n const cluster = getCluster(getState()) as string;\n\n return wrapApiPromiseByToaster(\n yt.v3.create({\n type: 'scheduler_pool',\n attributes: Object.assign(\n {\n name: values.name,\n parent_name: values.parent || undefined,\n pool_tree: values.tree,\n },\n !abcService || !abcService.value\n ? {}\n : {\n abc: prepareAbcService(abcService),\n },\n ),\n }),\n {\n toasterName: `create_${values.name}`,\n successContent: `Successfully created ${values.name}. Please wait.`,\n errorContent: `'${values.name}' pool creation failed`,\n timeout: 10000,\n },\n )\n .then(() => {\n updateAcl(cluster, values.name, {\n idmKind: IdmObjectType.POOL,\n poolTree: values.tree,\n responsible: values.responsible,\n });\n\n return waitWhilePoolIsReady(values).then(() => {\n dispatch(loadSchedulingData());\n });\n })\n .catch((error) => {\n if (error?.code === yt.codes.CANCELLED) {\n return;\n }\n\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n data: error,\n });\n\n return Promise.reject(error);\n });\n };\n}\n\nconst {url: createUrl, queue} = createAdminReqTicketUrl();\n\nconst CHECK_REDINESS_TIMEOUT = 1500;\nconst MAX_POOL_REDINESS_TIMEOUT = 10 * 1000; // the value is provided by @renadeen\nconst TIMEOUT_ERROR = {\n message: (\n <div>\n The pool was not appeared in orchidea in 10 seconds.\n {createUrl ? (\n <>\n Please fill a ticket for <Link url={createUrl}>{queue}</Link>\n </>\n ) : (\n \"Please report it to the cluster's support team.\"\n )}\n .\n </div>\n ),\n};\n\nfunction waitWhilePoolIsReady({name, tree}: {name: string; tree: string}, startedAt = 0) {\n const startedTime = startedAt || Date.now();\n const diff = Date.now() - startedTime;\n if (diff > MAX_POOL_REDINESS_TIMEOUT) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n yt.v3\n .exists({\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${name}`,\n })\n .then((res: boolean) => {\n if (res) {\n return resolve(true);\n } else {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n })\n .catch((error: unknown) => {\n if (error !== TIMEOUT_ERROR) {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n\n return reject(error);\n });\n }, CHECK_REDINESS_TIMEOUT);\n });\n}\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport Error from '../../../../components/Error/Error';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Button from '../../../../components/Button/Button';\n\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {\n getIsRoot,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../../store/selectors/scheduling/scheduling';\n\nimport {\n createPool,\n fetchCreatePoolDialogTreeItems,\n} from '../../../../store/actions/scheduling/create-pool-dialog';\nimport {\n getCreatePoolDialogError,\n getCreatePoolDialogFlatTreeItems,\n} from '../../../../store/selectors/scheduling/create-pool-dialog';\nimport {FIX_MY_TYPE} from '../../../../types';\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../../constants/scheduling';\nimport {docsUrl, isIdmAclAvailable} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {uiSettings} from '../../../../config/ui-settings';\n\nconst allowRoot = !uiSettings.schedulingDenyRootAsParent;\n\nexport default function CreatePoolButton() {\n const dispatch = useDispatch();\n\n const isRoot = useSelector(getIsRoot);\n\n const [visible, changeVisibility] = useState(false);\n const handleShow = useCallback(() => changeVisibility(true), [changeVisibility]);\n const handleClose = useCallback(() => {\n changeVisibility(false);\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n }, [dispatch, changeVisibility]);\n\n return (\n <React.Fragment>\n <Button view=\"action\" disabled={!allowRoot && isRoot} onClick={handleShow}>\n Create pool\n </Button>\n {visible && <CreatePoolDialog onClose={handleClose} />}\n </React.Fragment>\n );\n}\n\ninterface FormValues {\n name: string;\n tree: string;\n parent: string;\n responsible: {value: string; id: string | number; title: string};\n}\n\nfunction CreatePoolDialog(props: {onClose: () => void}) {\n const dispatch = useDispatch();\n const treeStored: string = useSelector(getTree);\n const [tree, setTree] = React.useState(treeStored);\n const handleTreeChange = React.useCallback(\n (newTree: string | undefined) => {\n setTree(newTree!);\n dispatch(fetchCreatePoolDialogTreeItems(newTree!));\n },\n [dispatch],\n );\n React.useEffect(() => {\n dispatch(fetchCreatePoolDialogTreeItems(tree));\n }, [dispatch]);\n\n const error = useSelector(getCreatePoolDialogError);\n\n const login = useSelector(getCurrentUserName);\n const treeItems = useSelector(getTreesSelectItems);\n const pool = useSelector(getPool);\n\n const handleCreateConfirm = useCallback(\n (form: FormApi) => {\n const {values} = form.getState();\n return dispatch(createPool(values));\n },\n [dispatch],\n );\n const initialValues = useMemo(() => {\n // const slug = ypath.getValue(poolData, '/abc/slug');\n return {\n // abcService: slug ? {\n // key: slug,\n // value: slug,\n // id: ypath.getValue(poolData, '/abc/id'),\n // title: ypath.getValue(poolData, '/abc/name'),\n // } : undefined,\n tree,\n parent: pool,\n responsible: [\n {\n value: login,\n type: 'users',\n },\n ],\n };\n }, [tree, pool, login]);\n\n const [name, setName] = React.useState('');\n const handleNameChange = React.useCallback(\n (newName: string) => {\n setName(newName);\n },\n [setName],\n );\n\n const {sortedFlatTree} = useSelector(getCreatePoolDialogFlatTreeItems);\n\n const validateForm = React.useCallback(\n (values: FormValues): null | {name?: string} => {\n const {name} = values;\n const res: Partial<Record<keyof FormValues, string>> = {};\n if (-1 !== sortedIndexOf_(sortedFlatTree, name)) {\n res.name = 'the value must be unique';\n }\n return isEmpty_(res) ? null : res;\n },\n [sortedFlatTree],\n );\n\n const isApplyDisabled = React.useMemo(\n () => (form: {values: FormValues}) => {\n const errors = validateForm(form.values);\n return Boolean(errors);\n },\n [validateForm],\n );\n\n return (\n <YTDFDialog\n visible={true}\n onClose={props.onClose}\n headerProps={{\n title: 'Create pool',\n }}\n onAdd={handleCreateConfirm as FIX_MY_TYPE}\n initialValues={{\n ...initialValues,\n name,\n }}\n validate={validateForm as FIX_MY_TYPE}\n isApplyDisabled={isApplyDisabled}\n pristineSubmittable={true}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'Name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n onChange: handleNameChange,\n touched: Boolean(name),\n },\n {\n name: 'tree',\n type: 'yt-select-single',\n caption: 'Pool tree',\n tooltip: (\n <span>\n Select pool tree where to create new pool.{' '}\n {docsUrl(\n <>\n See{' '}\n <Link url={UIFactory.docsUrls['scheduler:scheduler_and_pools']}>\n Documentations\n </Link>{' '}\n for more details.\n </>,\n )}\n </span>\n ),\n required: true,\n extras: {\n hideFilter: true,\n items: treeItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n onChange: (value: string | Array<string> | undefined) => {\n handleTreeChange(value as string);\n },\n },\n {\n name: 'parent',\n type: 'create-pool-parent',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: !allowRoot,\n extras: {\n placeholder: 'Select parent...',\n },\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n name: 'responsible',\n type: 'acl-subjects' as const,\n caption: 'Responsible users',\n tooltip:\n 'Choose responsible users who will manage permissions and pool settings.',\n required: true,\n extras: {\n placeholder: 'Select responsible users...',\n },\n },\n ]),\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: error && <Error error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport some_ from 'lodash/some';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport Favourites from '../../../components/Favourites/Favourites';\nimport {PoolsSuggest} from '../PoolsSuggest/PoolsSuggest';\nimport {\n getCurrentPool,\n getCurrentPoolPath,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {getFavouritePools, isActivePoolInFavourites} from '../../../store/selectors/favourites';\nimport {\n changePool,\n changeTree,\n togglePoolFavourites,\n} from '../../../store/actions/scheduling/scheduling';\n\nimport {ROOT_POOL_NAME, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport {EditButton} from '../../../components/EditableAsText/EditableAsText';\nimport Select from '../../../components/Select/Select';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {makeRoutedURL} from '../../../store/location';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\n\nimport './SchedulingTopRowContent.scss';\n\nconst block = cn('scheduling-top-row-content');\n\nfunction SchedulingTopRowContent() {\n const pool = useSelector(getCurrentPool);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={Page.SCHEDULING} className={block()} urlParams={{pool: ''}}>\n <SchedulingFavourites />\n <SchedulingPhysicalTree />\n <EditableSchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\n </RowWithName>\n );\n}\n\nfunction SchedulingFavourites() {\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n const pool = useSelector(getPool);\n const favouritesPools = useSelector(getFavouritePools);\n const isActivePool = useSelector(isActivePoolInFavourites);\n\n const onFavouriteClick = React.useCallback(\n ({path}: {path: string}) => {\n const [, pool, tree] = path.match(/(.+)\\[(.+)]/)!;\n dispatch(changePool(pool));\n dispatch(changeTree(tree));\n },\n [dispatch],\n );\n const onFavouriteToggle = React.useCallback(\n () => dispatch(togglePoolFavourites(pool, tree)),\n [dispatch, pool, tree],\n );\n\n const currentPool = useSelector(getPool);\n\n return (\n <Favourites\n className={block('favourites')}\n theme={'clear'}\n items={favouritesPools || []}\n isActive={isActivePool}\n onToggle={onFavouriteToggle}\n onItemClick={onFavouriteClick}\n toggleDisabled={ROOT_POOL_NAME === currentPool}\n />\n );\n}\n\nfunction CurrentPoolToClipboardButton() {\n const currentPool = useSelector(getPool);\n const currentPoolPath = useSelector(getCurrentPoolPath);\n\n return (\n <ClipboardButton\n className={block('clipboard')}\n text={currentPool}\n shiftText={currentPoolPath}\n hoverContent={'Hold SHIFT-key to copy full path'}\n />\n );\n}\n\nfunction SchedulingBreadcrumbs() {\n const bcItems = useSelector(getSchedulingBreadcrumbItems);\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text) => {\n const pathname = text\n ? window.location.pathname\n : calcRootPathname(window.location.pathname, cluster);\n return (\n <BreadcrumbsItem\n key={text}\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n >\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleChangePool}\n className={block('breadcrumbs')}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nfunction calcRootPathname(pathname: string, cluster: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\n const isAllowedTab = some_(SCHEDULING_ALLOWED_ROOT_TABS, (_v, tab) =>\n pathname.endsWith('/' + tab),\n );\n return isAllowedTab ? pathname : `/${cluster}/${Page.SCHEDULING}/${Tab.OVERVIEW}`;\n}\n\nfunction EditableSchedulingBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n const toggleEdit = React.useCallback(() => {\n setEditMode(!editMode);\n }, [editMode, setEditMode]);\n\n return (\n <div className={block('editable-breadcrumbs', {edit: editMode})}>\n {editMode ? (\n <PoolsSuggest autoFocus onCancelEdit={toggleEdit} />\n ) : (\n <React.Fragment>\n <SchedulingBreadcrumbs />\n <EditButton onClick={toggleEdit} />\n <div className={block('btn-spacer')} />\n <CurrentPoolToClipboardButton />\n </React.Fragment>\n )}\n </div>\n );\n}\n\nfunction SchedulingPhysicalTree() {\n const tree = useSelector(getTree);\n const treeItems = useSelector(getTreesSelectItems);\n const dispatch = useDispatch();\n\n const onChange = React.useCallback((tree: unknown) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n hideFilter={treeItems?.length <= 5}\n items={treeItems}\n onUpdate={(vals) => onChange(vals[0])}\n className={block('path-tree')}\n placeholder=\"Select tree...\"\n width=\"max\"\n />\n </div>\n );\n}\n\nconst SchedulingTopRowContentMemo = React.memo(SchedulingTopRowContent);\n\nexport default function SchedulingTopRowContentWithError() {\n return (\n <ErrorBoundary compact>\n <SchedulingTopRowContentMemo />\n </ErrorBoundary>\n );\n}\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import {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 {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) ?? false\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 filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n"],"names":["connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","props","collapsed","_createClass","key","value","_this$props","this","name","children","size","overview","className","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","_jsxs","margin","clickable","Icon","awesome","Component","CollapsibleSection","_React$useState","React","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","cn","prepareRoleListValue","roles","otherMembers","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","data","frozen","newItems","itemClassName","role","extraProps","text","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","map_","filter_","_ref2","removed","_ref3","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","Block","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","EditableAsText","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","Button","view","onMouseDown","EditButton","_ref$size","ElementsTableFooter","state","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","Favourites","isActive","toggleActive","setState","prevState","onItemClick","_this2","dropItems","action","switcher","renderButton","pin","DropdownMenu","popupProps","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","toggleDisabled","clear","disabled","renderDropDownMenu","renderHotkey","itemType","PropTypes","Secondary","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","Placeholder","tab","useRouteMatch","params","hammer","format","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","tree","dispatch","getState","pool","getPool","ROOT_POOL_NAME","loadExpandedOperationsAndPools","ytApiV3Id","executeBatch","YTApiId","schedulingPoolFullPath","requests","fields","then","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","parts","split","slice","i","poolName","parentPoolPath","join","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","Toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","isSupportedSchedulingChildrenByPool","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","all","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","resolve","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","reduce_","acc","Object","assign","poolsToCollapse","pos","rawPools","cypressData","pools","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","getTree","poolsByName","getSchedulingPoolsMapByName","expanded","expandedPoolInfo","_data","res","_data2","parent","calcExpandedPoolInfo","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","getPools","calculatePoolPath","orchidPath","toaster","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","cluster","getCluster","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","scheduling","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","treeResources","resource_usage","resource_limits","config","resource_distribution_info","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","openPoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","closePoolDeleteModal","setPoolAttributes","poolPath","values","initials","isEmpty_","transferData","toModify","guaranteeType","restValues","v","k","limit","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","updateNodeAttributes","tmp","dstPool","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","Math","abs","source_pool","destination_pool","pool_tree","resource_delta","schedulingTransferPoolQuota","err","getBatchError","transferPoolQuota","schedulingOverviewHasFilter","_getSchedulingAttribu","getSchedulingAttributesToFilterParams","lastTime","lastTree","Date","now","wrapApiPromiseByToaster","schedulingFilterAttributes","skipSuccessToast","toasterName","errorContent","attributesToFilter","attributesToFilterParams","setName","newName","prevName","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","keyMapper","userSlots","omittedValuesList","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","resources","result","omit_","makeGeneralCommands","isInitial","initialValue","pickBy_","mode","weight","prototype","isOmitted","Number","isInvalidNumber","isNaN","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","timeout","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","SCHEDULING_EDIT_POOL_FAILURE","openEditModal","TOGGLE_EDIT_VISIBILITY","cancelled","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","getSchedulingIsFinalLoadingState","createSelector","store","loading","loaded","status","calculateLoadingStatus","isFinalLoadingStatus","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","Tooltip","NO_VALUE","_calcProgressProps","calcProgressProps","digits","Progress","getSchedulingBreadcrumbItems","_loop","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolStaticConfiguration","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","Boolean","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","getPoolsAllocatedOperationsCount","topPools","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","getOperationsStaticConfiguration","allocated","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","operationRows","undistributed_resources","burst","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","flow","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","max","PoolMetaData","useSelector","clusterUiConfig","getClusterUiConfig","hasStrong","integralType","capitalize_","MetaTable","Readable","UIFactory","getExtraMetaTableItemsForPool","SchedulingStaticConfiguration","onToggleCollapsedState","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","PoolStaticConfiguration","staticConfigurationItems","header","sortable","width","render","row","cpuLabel","Label","capitalize","align","DataTableYT","useThemeYT","displayIndices","poolTree","formatValue","renderSchedulingLastDayMaximum","sensor","showHint","showAsLink","_ref9","formatFn","freeValue","lastDayMaxValue","rowClassName","SchedulingOperationsError","getSchedulingOperationsError","ErrorBlock","topMargin","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","poolNames","getPoolsNames","getSuggestItems","_items","match","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onFocus","Suggest","popupClassName","placeholder","PoolTags","showGuaranteeType","hasFlow","flowCPU","flowGPU","renderSchedulingTableItemExtraControls","STARVATION_STATUS_TO_THEME","starving","aggressively_starving","Overview","renderNameCell","currentPool","itemsMaxDepth","allowExpand","_len2","_key2","renderType","renderName","Tab","OVERVIEW","renderEphemeralIcon","renderActions","_this$props2","aggregation","renderAttributesButton","Fragment","renderEditButton","renderDeleteButton","onItemToggleState","treeState","tableId","SCHEDULING_POOL_TREE_TABLE_ID","poolsTableItems","sets","default","renderMode","FI","renderFifoIndex","renderWeight","fair_share","renderColumnAsRatio","usage","demand","min_share","renderMinShare","fair_share_usage","renderFairShareUsage","dominant_resource","renderDominantResource","operation_overview","renderOperationOverview","actions","Sticky","topOffset","isSticky","SchedulingOverviewToolbar","_this$props3","treeStateExpanded","fireResizeEvent","StickyContainer","renderToolbar","ResetExpandedPoolsOnTreeChange","ElementsTable","tableSettings","isLoading","share","_ref4$forceTheme","_ref4$title","poolModeTheme","weightEdited","edited","digitsOnlyForFloat","columnName","renderRatio","barsData","fairShareRatio","usageRatio","starvation_status","renderBars","formatter","getPoolPaths","ClickableAttributesButton","fifoIndex","toggleItemState","itemState","icon","operation","expanderClass","expanderClassIcon","expanderIcon","isCurrentPool","linkText","incomplete","id","FormattedText","qs","window","location","search","page","Page","FormattedLink","routed","url","Link","dominantResource","minShareRatio","resourcePropTypes","isRequired","progress","tableItemPropTypes","abc","demandRatio","fifo","changeTableTreeState","CHANGE_TABLE_TREE_STATE","schedulingSetAbcFilter","abcServiceFilter","getSchedulingOperationsCount","root","setLoadAllOperations","dispatchEvent","Event","OverviewConnected","getTableItems","getSchedulingOverviewMaxDepth","getSchedulingTreeState","getSchedulingAbcFilter","OverviewWithRum","isFinalState","useAppRumMeasureStart","SCHEDULING_OVERVIEW","additionalStartType","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_getSchedulingOperati2","old","_toPropertyKey","resetExpandedPools","_React$PureComponent","_super2","_this3","_len3","_key3","confirmExpandDialogVisible","handleExpand","onConfirmExpand","setConfirmDialogVisibility","handleCollapse","onAbcServiceFilter","abcService","_ref10","slug","_this4","Dialog","open","Header","caption","Body","Footer","onClickButtonApply","onClickButtonCancel","textButtonCancel","textButtonApply","renderConfirmExpandDialog","renderControlAbcService","withStickyHead","withStickyFooter","ElementsTableBase","Details","renderResourceBars","resourceData","childTableItems","guaranteed","renderRelResource","child","isChildPool","DETAILS","integral","totalRow","summedProperties","resource","metric","prepare","calculateTotalOverPools","SCHEDULING_POOL_CHILDREN_TABLE_ID","columnsSets","max_share","renderMaxShare","resource_detailed_cpu","renderColumnAsFloatNumber","resource_detailed_memory","renderColumnAsBytes","resource_detailed_gpu","renderColumnAsNumber","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","running_operation_progress","renderAsProgress","running_operation_count","operation_count","operation_progress","max_running_operation_count","renderMaxRunningOperationCount","max_operation_count","renderMaxOperationCount","integral_type","renderIntegralType","burst_cpu","renderIntegralGuarantee","flow_cpu","children_burst_cpu","childrenIntegrals","children_flow_cpu","accumulated","accumulated_cpu","burst_duration","_this$props4","changePoolChildrenFilter","changeContentMode","Filter","RadioButton","_this$props5","ElementsTableSticky","cssTableMods","maxShareRatio","maxOperationCountEdited","renderNumberWithEdited","maxRunningOperationCountEdited","editedValue","autoCalculated","hasActiveGuarantee","inactive","renderColumnAsReadable","getProgressTheme","poolChildrenFilter","CHANGE_POOL_CHILDREN_FILTER","CHANGE_CONTENT_MODE","contentMode","target","DetailsConnected","getPollChildrenTableItems","getContentMode","getPoolChildrenFilter","getSortedPoolChildren","DetailsWithRum","SCHEDULING_DETAILS","PoolAcl","NoContent","warning","hint","PoolAclPanel","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","SchedulingExpandedPoolsUpdater","withRouter","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","showSettings","show","SCHEDULING_ALLOWED_ROOT_TABS","titleDict","aclTab","ACL","extraTabs","getSchedulingExtraTabs","extraOptions","extraRoutes","component","urlTemplate","tabSettings","external","formatByParams","ytCluster","ytPool","ytPoolTree","route","Route","makeTabProps","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","Switch","Redirect","from","to","pathname","headingBlock","SchedulingResources","getResources","makeError","PoolEditorDialog","editItem","getSchedulingEditItem","_useSelector","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","_useMemo","useMemo","getInitialValues","_useMemo2","initialFormValues","editCloseHandler","editConfirmHandler","form","_form$getState","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","_x","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","summary","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","onClose","headerProps","onAdd","required","tooltip","hideFilter","min","MIN_VALUE","hidePrettyValue","String","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","updateFn","useUpdater","Content","SchedulingMemo","SchedulingWithRum","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","autoHiding","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","hasCloseButton","keys_","message","propsButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","currentTree","getPoolTrees","treeItems","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","successContent","updateAcl","idmKind","responsible","waitWhilePoolIsReady","CREATE_POOL_DIALOG_TREE_CREATE_FAILURE","_createAdminReqTicket","createAdminReqTicketUrl","createUrl","CHECK_REDINESS_TIMEOUT","MAX_POOL_REDINESS_TIMEOUT","TIMEOUT_ERROR","startedTime","exists","allowRoot","uiSettings","schedulingDenyRootAsParent","CreatePoolButton","_useState","useState","_useState2","changeVisibility","handleShow","handleClose","CreatePoolDialog","treeStored","setTree","handleTreeChange","newTree","getCreatePoolDialogError","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","sortedFlatTree","getCreatePoolDialogFlatTreeItems","validateForm","sortedIndexOf_","isApplyDisabled","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","urlParams","SchedulingFavourites","SchedulingPhysicalTree","EditableSchedulingBreadcrumbs","renderTopRowExtraControlsForPool","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","ClipboardButton","shiftText","hoverContent","SchedulingBreadcrumbs","bcItems","history","useHistory","some_","_v","endsWith","calcRootPathname","BreadcrumbsItem","href","makeRoutedURL","Breadcrumbs","navigate","onAction","toString","showRoot","toggleEdit","edit","Select","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","useRumMeasureStart","subPage","getApproversSubjectFilter","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","prepareColumnsNames","columnsPermissions","permission","uniq_","flatten_","sort","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","Set","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","entries","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_partition_","partition_","_item$columns","_partition_2","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","p","has","permissionsFilterPredicate","visibleColumns","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","count","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","JSON","stringify","column","isMissing","hasInherited","hasDenyAction","inheritance_mode","isEqual_","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","dst","reduce","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_item$name","requested","depriving","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","names","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","getChaosBundlesFiltered","accountFilter","tagNodeFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","getChaosBundlesSorted","order","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","list","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","creation_time","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","getSettingsData","userColumns","getChytListColumns","checked","getChytListTableSortState","getChytListTableSortStateByName","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","makeGetSetting","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getFavouritePaths","getClusterNS","getLastVisitedPaths","getPopularPaths","isCurrentPathInFavourites","getPath","favourites","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","getSetting","SettingName","LOCAL","FAVOURITES","settingGetter","LAST_VISITED","lastVisited","entry","tabletCellBundleDashboardUrl","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes"],"sourceRoot":""}
|