@ytsaurus/ui 1.103.0 → 1.103.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/public/build/assets-manifest.json +40 -40
  2. package/dist/public/build/css/default-subject-link.b01c2230.chunk.css +2 -0
  3. package/dist/public/build/css/default-subject-link.b01c2230.chunk.css.map +1 -0
  4. package/dist/public/build/css/{main.d1987746.css → main.23e8d0fd.css} +2 -2
  5. package/dist/public/build/css/main.23e8d0fd.css.map +1 -0
  6. package/dist/public/build/js/6157.6786c942.chunk.js +2 -0
  7. package/dist/public/build/js/6157.6786c942.chunk.js.map +1 -0
  8. package/dist/public/build/js/6983.a2b31b33.chunk.js +2 -0
  9. package/dist/public/build/js/6983.a2b31b33.chunk.js.map +1 -0
  10. package/dist/public/build/js/8165.9684f49e.chunk.js +2 -0
  11. package/dist/public/build/js/8165.9684f49e.chunk.js.map +1 -0
  12. package/dist/public/build/js/{accounts.aaa21eca.chunk.js → accounts.f328f823.chunk.js} +2 -2
  13. package/dist/public/build/js/accounts.f328f823.chunk.js.map +1 -0
  14. package/dist/public/build/js/acl.556f2525.chunk.js +2 -0
  15. package/dist/public/build/js/acl.556f2525.chunk.js.map +1 -0
  16. package/dist/public/build/js/{bundles.b851f32c.chunk.js → bundles.0ab2d6f4.chunk.js} +2 -2
  17. package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map} +1 -1
  18. package/dist/public/build/js/cluster-page-wrapper.a5c05070.chunk.js +2 -0
  19. package/dist/public/build/js/{cluster-page-wrapper.45436df6.chunk.js.map → cluster-page-wrapper.a5c05070.chunk.js.map} +1 -1
  20. package/dist/public/build/js/dashboard.efdd63a2.chunk.js +3 -0
  21. package/dist/public/build/js/{dashboard.234b8062.chunk.js.map → dashboard.efdd63a2.chunk.js.map} +1 -1
  22. package/dist/public/build/js/main.a89bac74.js +3 -0
  23. package/dist/public/build/js/main.a89bac74.js.map +1 -0
  24. package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js → navigation-flow.1d83e216.chunk.js} +2 -2
  25. package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js.map → navigation-flow.1d83e216.chunk.js.map} +1 -1
  26. package/dist/public/build/js/{navigation.b91a7a0b.chunk.js → navigation.0aff5a3a.chunk.js} +2 -2
  27. package/dist/public/build/js/{navigation.b91a7a0b.chunk.js.map → navigation.0aff5a3a.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js → query-tracker.b7334a6f.chunk.js} +2 -2
  29. package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js.map → query-tracker.b7334a6f.chunk.js.map} +1 -1
  30. package/dist/public/build/js/{runtime.8a460b23.js → runtime.d583e98e.js} +2 -2
  31. package/dist/public/build/js/{runtime.8a460b23.js.map → runtime.d583e98e.js.map} +1 -1
  32. package/dist/public/build/js/users.aec1e380.chunk.js +2 -0
  33. package/dist/public/build/js/users.aec1e380.chunk.js.map +1 -0
  34. package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js +3 -0
  35. package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js.map +1 -0
  36. package/dist/public/build/manifest.json +34 -34
  37. package/package.json +4 -3
  38. package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css +0 -2
  39. package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css.map +0 -1
  40. package/dist/public/build/css/main.d1987746.css.map +0 -1
  41. package/dist/public/build/js/2009.8121a60e.chunk.js +0 -2
  42. package/dist/public/build/js/2009.8121a60e.chunk.js.map +0 -1
  43. package/dist/public/build/js/6157.92170346.chunk.js +0 -2
  44. package/dist/public/build/js/6157.92170346.chunk.js.map +0 -1
  45. package/dist/public/build/js/6960.8b7e01c6.chunk.js +0 -2
  46. package/dist/public/build/js/6960.8b7e01c6.chunk.js.map +0 -1
  47. package/dist/public/build/js/accounts.aaa21eca.chunk.js.map +0 -1
  48. package/dist/public/build/js/acl.1ad3d494.chunk.js +0 -2
  49. package/dist/public/build/js/acl.1ad3d494.chunk.js.map +0 -1
  50. package/dist/public/build/js/cluster-page-wrapper.45436df6.chunk.js +0 -2
  51. package/dist/public/build/js/dashboard.234b8062.chunk.js +0 -3
  52. package/dist/public/build/js/main.aa6a17d8.js +0 -3
  53. package/dist/public/build/js/main.aa6a17d8.js.map +0 -1
  54. package/dist/public/build/js/users.a0dc610f.chunk.js +0 -2
  55. package/dist/public/build/js/users.a0dc610f.chunk.js.map +0 -1
  56. package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js +0 -3
  57. package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js.map +0 -1
  58. /package/dist/public/build/js/{dashboard.234b8062.chunk.js.LICENSE.txt → dashboard.efdd63a2.chunk.js.LICENSE.txt} +0 -0
  59. /package/dist/public/build/js/{main.aa6a17d8.js.LICENSE.txt → main.a89bac74.js.LICENSE.txt} +0 -0
  60. /package/dist/public/build/js/{yt-df-dialog.acab4eb0.chunk.js.LICENSE.txt → yt-df-dialog.1d05b0a5.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/users.aec1e380.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/bars-descending-align-left.svg","webpack://@ytsaurus/ui/./src/ui/utils/sha256.ts","webpack://@ytsaurus/ui/./src/ui/pages/components/GroupSuggest/GroupSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/utils/getExternalSystem.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/users.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/users.js","webpack://@ytsaurus/ui/./src/ui/pages/users/CreateUserModal/CreateUserModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageFilters/UsersPageFilters.js","webpack://@ytsaurus/ui/./src/ui/store/actions/users-typed.ts","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageEditor/UsersPageEditor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/DeleteUserModal/DeleteUserModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UserActions/UserActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageTable/UsersPageTable.js","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPage.tsx","webpack://@ytsaurus/ui/./src/ui/components/PageCounter/PageCounter.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColumnHeader/ColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/CommaSeparateListWithRestCounter/CommaSeparateListWithRestCounter.js","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx"],"sourcesContent":["import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\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: i18n('tooltip-content')},\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","const SvgBarsDescendingAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgBarsDescendingAlignLeft;","export async function sha256(str: string) {\n const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(str));\n\n return [...new Uint8Array(buf)].map((x) => ('00' + x.toString(16)).slice(-2)).join('');\n}\n\nexport const isCryptoSubtleAvailable = () => {\n return Boolean(crypto?.subtle?.digest);\n};\n","import React from 'react';\nimport {connect} from 'react-redux';\n\nimport concat_ from 'lodash/concat';\nimport filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\n\nimport cn from 'bem-cn-lite';\n\nimport {SelectProps} from '@gravity-ui/uikit';\n\nimport {EditableList, EditableListItemType} from '../../../components/Dialog';\n\nimport {getAllGroupNamesSorted, getAllIdmGroupNamesSorted} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport Select from '../../../components/Select/Select';\n\nimport './GroupSuggest.scss';\n\nconst block = cn('group-suggest');\n\ninterface Props {\n placeholder?: string;\n items?: Array<string>;\n className?: string;\n showTags?: boolean;\n idmOnly?: boolean;\n multiple?: boolean;\n value: Array<string>;\n onChange: (value: Props['value']) => void;\n disabled?: boolean;\n width?: SelectProps['width'];\n maxVisibleValues?: number;\n disablePortal?: boolean;\n}\n\nfunction GroupSuggest(props: Props) {\n const {\n items,\n width,\n multiple,\n onChange,\n placeholder,\n className,\n showTags,\n value,\n disablePortal,\n ...rest\n } = props;\n\n const ycItems = map_(items, (item) => ({\n value: item,\n text: item,\n }));\n\n const empty = !value?.length;\n\n const listValue = React.useMemo(() => map_(concat_([], value), (title) => ({title})), [value]);\n\n const onListChange = React.useCallback(\n (newList: Array<EditableListItemType<any>>) => {\n const res = filter_(newList, ({removed}) => !removed).map(({title}) => title);\n onChange(res);\n },\n [value, onChange],\n );\n\n return (\n <div className={block({empty}, className)}>\n <Select\n {...rest}\n items={ycItems}\n onUpdate={onChange}\n placeholder={placeholder}\n value={props.value}\n multiple={multiple}\n width={width ?? 'max'}\n filterable\n disablePortal={disablePortal}\n />\n {multiple && showTags && <EditableList onChange={onListChange} value={listValue} />}\n </div>\n );\n}\n\nGroupSuggest.isEmpty = (value: Array<string>) => {\n return !value?.length;\n};\n\nGroupSuggest.getDefaultValue = () => {\n return [];\n};\n\nconst mapStateToProps = (state: RootState, ownProps: Props) => {\n const {idmOnly} = ownProps;\n const items: Array<string> = idmOnly\n ? (getAllIdmGroupNamesSorted(state) as Array<string>)\n : getAllGroupNamesSorted(state);\n return {items};\n};\n\nexport default connect(mapStateToProps)(GroupSuggest);\n","import {isIdmAclAvailable} from '../config';\n\nexport const getExternalSystem = (ldap: boolean, idm: boolean) => {\n const hasIdm = idm && isIdmAclAvailable();\n\n if (ldap) return 'ldap';\n if (hasIdm) return 'idm';\n return '-';\n};\n","import difference_ from 'lodash/difference';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport {\n USERS_EDIT_USER,\n USERS_EDIT_USER_DATA_FIELDS,\n USERS_TABLE,\n USERS_TABLE_DATA_FIELDS,\n} from '../../constants/users';\nimport {getCluster} from '../../store/selectors/global';\nimport {listAllUsers} from '../../utils/users-groups';\nimport {flags} from '../../utils/index';\nimport {getBatchError} from '../../utils/utils';\nimport {YTApiId, ytApiV3Id, ytApiV4Id} from '../../rum/rum-wrap-api';\nimport UIFactory from '../../UIFactory';\nimport {sha256} from '../../utils/sha256';\nimport {getExternalSystem} from '../../utils/getExternalSystem';\n\nconst USER_ATTRIBUTES = [\n 'name',\n 'banned',\n 'ban_message',\n 'member_of',\n 'member_of_closure',\n 'read_request_rate_limit',\n 'request_queue_size_limit',\n 'write_request_rate_limit',\n 'upravlyator_managed',\n 'ldap',\n];\n\nexport function prepareUserData(item) {\n const {\n $attributes: {\n member_of: groups,\n member_of_closure: allGroups,\n upravlyator_managed: idm,\n ldap,\n },\n } = item;\n groups.sort();\n allGroups.sort();\n const hasIdm = flags.get(idm || false);\n\n item.$attributes.idm = hasIdm;\n item.$attributes.externalSystem = getExternalSystem(ldap, hasIdm);\n item.$attributes['transitiveGroups'] = difference_(allGroups, groups);\n return item.$attributes;\n}\n\nexport function fetchUsers() {\n return (dispatch) => {\n dispatch({type: USERS_TABLE.REQUEST});\n\n return listAllUsers(YTApiId.usersData, {attributes: USER_ATTRIBUTES})\n .then((data) => {\n const users = [];\n forEach_(data, (item) => {\n users.push(prepareUserData(item));\n });\n dispatch({type: USERS_TABLE.SUCCESS, data: {users}});\n })\n .catch((error) => {\n dispatch({type: USERS_TABLE.FAILURE, data: error});\n });\n };\n}\n\nexport function setUsersNameFilter(nameFilter) {\n return {type: USERS_TABLE_DATA_FIELDS, data: {nameFilter}};\n}\n\nexport function setUsersGroupFilter(filter) {\n return {\n type: USERS_TABLE_DATA_FIELDS,\n data: {groupFilter: filter || ''},\n };\n}\n\nexport function setUsersBannedFilter(bannedFilter) {\n return {type: USERS_TABLE_DATA_FIELDS, data: {bannedFilter}};\n}\n\nexport function setUsersPageSorting({column, order}) {\n const sort = {column, order};\n if (!order) {\n sort.column = '';\n }\n return {type: USERS_TABLE_DATA_FIELDS, data: {sort}};\n}\n\nexport function showUserEditorModal(username) {\n return (dispatch) => {\n const isNewUser = !username;\n\n if (isNewUser) {\n dispatch({\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: true},\n });\n return;\n }\n\n dispatch({type: USERS_EDIT_USER.REQUEST});\n const path = `//sys/users/${username}`;\n return ytApiV3Id\n .get(YTApiId.usersEditData, {path, attributes: USER_ATTRIBUTES})\n .then((res) => {\n dispatch({\n type: USERS_EDIT_USER.SUCCESS,\n data: {data: prepareUserData(res)},\n });\n dispatch({\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: true, username},\n });\n })\n .catch((error) => {\n return dispatch({type: USERS_EDIT_USER.FAILURE, data: error});\n });\n };\n}\n\nexport function closeUserEditorModal() {\n return {\n type: USERS_EDIT_USER_DATA_FIELDS,\n data: {showModal: false, username: ''},\n };\n}\n\nfunction removeUserFromGroups(cluster, username, groups) {\n return Promise.all(\n map_(groups, (groupname) => {\n return UIFactory.getAclApi().removeUserFromGroup({cluster, username, groupname});\n }),\n );\n}\n\nfunction addUserToGroups(cluster, username, groups, comment) {\n return Promise.all(\n map_(groups, (groupname) => {\n return UIFactory.getAclApi().addUserToGroup({cluster, username, groupname, comment});\n }),\n );\n}\n\nfunction changeUserPassword({username, password}) {\n if (password) {\n return sha256(password).then((new_password_sha256) => {\n return ytApiV4Id.setUserPassword(YTApiId.setUserPassword, {\n parameters: {\n user: username,\n new_password_sha256,\n },\n });\n });\n }\n\n return Promise.resolve();\n}\n\nexport function saveUserData({\n username,\n newName,\n attributes,\n groupsToAdd,\n groupsToRemove,\n password,\n}) {\n return (dispatch, getState) => {\n dispatch({type: USERS_EDIT_USER.REQUEST});\n\n const path = `//sys/users/${username}`;\n const requests = [];\n const {comment, ...restAttrs} = attributes;\n forEach_(restAttrs, (value, key) => {\n requests.push({\n command: 'set',\n parameters: {\n path: `${path}/@${key}`,\n },\n input: value,\n });\n });\n\n if (newName !== username) {\n requests.push({\n command: 'set',\n parameters: {\n path: `${path}/@name`,\n },\n input: newName,\n });\n }\n\n const state = getState();\n const cluster = getCluster(state);\n\n return (\n Promise.all(\n [\n addUserToGroups(cluster, username, groupsToAdd, comment),\n removeUserFromGroups(cluster, username, groupsToRemove),\n changeUserPassword({username, password}),\n requests.length && ytApiV3Id.executeBatch(YTApiId.usersSaveData, {requests}),\n ].filter(Boolean),\n )\n // eslint-disable-next-line no-unused-vars\n .then(([addRes, removeRes, changePasswordRes, batchRes]) => {\n const batchError = getBatchError(batchRes, \"Failed to save user's data\");\n if (batchError) {\n throw batchError;\n }\n\n dispatch({type: USERS_EDIT_USER.SUCCESS, data: {}});\n dispatch(fetchUsers());\n\n return;\n })\n .catch((error) => {\n const data = error?.response?.data || error;\n dispatch({type: USERS_EDIT_USER.FAILURE, data: data});\n return Promise.reject(data);\n })\n );\n };\n}\n","import filter_ from 'lodash/filter';\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\n\nimport {createSelector} from 'reselect';\nimport {sortArrayBySortState} from '../../utils/sort-helpers';\nimport {concatByAnd} from '../../common/hammer/predicate';\n\n// Table\n\nexport const getUsersTableDataState = (state) => state.users.table;\n\nexport const getUsers = (state) => state.users.table.users;\nexport const getUsersNameFilter = (state) => state.users.table.nameFilter;\nexport const getUsersGroupFilter = (state) => state.users.table.groupFilter;\nexport const getUsersBannedFilter = (state) => state.users.table.bannedFilter;\nexport const getUsersSort = (state) => state.users.table.sort;\n\nexport const getUsersFiltered = createSelector(\n [getUsers, getUsersNameFilter, getUsersGroupFilter, getUsersBannedFilter],\n (users, nameFilter, groupFilter, bannedFilter) => {\n const predicates = [\n nameFilter && (({name}) => name.indexOf(nameFilter) !== -1),\n groupFilter &&\n (({member_of: memberOf, transitiveGroups}) => {\n return (\n -1 !== sortedIndexOf_(memberOf, groupFilter) ||\n -1 !== sortedIndexOf_(transitiveGroups, groupFilter)\n );\n }),\n bannedFilter && (({banned}) => banned),\n ].filter(Boolean);\n\n if (predicates.length === 0) {\n return users;\n }\n\n return filter_(users, concatByAnd(...predicates));\n },\n);\n\nexport const getUsersFilteredAndSorted = createSelector(\n [getUsersSort, getUsersFiltered],\n (sortState, users) => {\n return sortArrayBySortState(users, sortState);\n },\n);\n\n// User editor\nexport const getUsersPageEditableUser = (state) => state.users.editUser;\n","import Button from '../../../components/Button/Button';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {showUserEditorModal} from '../../../store/actions/users';\nimport {getUserManagementEnabled} from '../../../store/selectors/global';\n\nexport const ShowCreateUserModalButton: React.FC = () => {\n const dispatch = useDispatch();\n const onClick = useCallback(() => {\n dispatch(showUserEditorModal());\n }, []);\n\n const isEnabled = useSelector(getUserManagementEnabled);\n\n if (isEnabled) {\n return (\n <Button view=\"action\" onClick={onClick}>\n Create new\n </Button>\n );\n }\n\n return null;\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport Filter from '../../../components/Filter/Filter';\n\nimport {\n setUsersBannedFilter,\n setUsersGroupFilter,\n setUsersNameFilter,\n} from '../../../store/actions/users';\nimport GroupSuggest from '../../../pages/components/GroupSuggest/GroupSuggest';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {\n getUsersBannedFilter,\n getUsersGroupFilter,\n getUsersNameFilter,\n} from '../../../store/selectors/users';\nimport {GroupsLoader} from '../../../hooks/global';\nimport {ShowCreateUserModalButton} from '../CreateUserModal/CreateUserModal';\n\nimport './UsersPageFilters.scss';\n\nconst block = cn('users-page-filters');\n\nclass UsersPageFilters extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n\n bannedFilter: PropTypes.bool.isRequired,\n setUsersBannedFilter: PropTypes.func.isRequired,\n\n groupFilter: PropTypes.string.isRequired,\n setUsersGroupFilter: PropTypes.func.isRequired,\n\n nameFilter: PropTypes.string.isRequired,\n setUsersNameFilter: PropTypes.func.isRequired,\n };\n\n toggleBannedFilter = () => {\n const {bannedFilter, setUsersBannedFilter} = this.props;\n setUsersBannedFilter(!bannedFilter);\n };\n\n render() {\n const {className, nameFilter, groupFilter, bannedFilter} = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={[\n {\n name: 'name',\n node: (\n <Filter\n className={block('username-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={nameFilter}\n placeholder=\"User name filter...\"\n onChange={this.props.setUsersNameFilter}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'group',\n node: (\n <GroupsLoader>\n <GroupSuggest\n className={block('group-suggest')}\n value={groupFilter ? [groupFilter] : undefined}\n placeholder=\"Group name filter...\"\n onChange={(vals) => this.props.setUsersGroupFilter(vals[0])}\n disablePortal={false}\n />\n </GroupsLoader>\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'banned',\n node: (\n <Checkbox\n size=\"l\"\n checked={bannedFilter}\n content=\"Banned\"\n onChange={this.toggleBannedFilter}\n />\n ),\n },\n ]}\n >\n <ShowCreateUserModalButton />\n </Toolbar>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n bannedFilter: getUsersBannedFilter(state),\n nameFilter: getUsersNameFilter(state),\n groupFilter: getUsersGroupFilter(state),\n };\n};\n\nconst mapDispatchToProps = {\n setUsersBannedFilter,\n setUsersNameFilter,\n setUsersGroupFilter,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageFilters);\n","// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {deleteUserModalSlice} from '../reducers/users/delete-user';\nimport {Dispatch} from 'redux';\n\nexport const deleteUser = ({username}: {username: string}): Promise<void> => {\n return yt.v3.remove({\n parameters: {\n path: `//sys/users/${username}`,\n },\n });\n};\n\nexport const createUser = ({username}: {username: string}): Promise<void> => {\n return yt.v3.create({\n parameters: {\n type: 'user',\n attributes: {\n name: username,\n },\n },\n });\n};\n\nexport function showUserDeleteModal(usernameToDelete: string) {\n return (dispatch: Dispatch) => {\n dispatch(deleteUserModalSlice.actions.setModalState({usernameToDelete}));\n };\n}\n\nexport function closeUserDeleteModal() {\n return (dispatch: Dispatch) => {\n dispatch(deleteUserModalSlice.actions.setModalState({usernameToDelete: ''}));\n };\n}\n","import {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport filter_ from 'lodash/filter';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {closeUserEditorModal, fetchUsers, saveUserData} from '../../../store/actions/users';\nimport {\n getGlobalGroupAttributesMap,\n getUserManagementEnabled,\n} from '../../../store/selectors/global';\nimport {getUsersPageEditableUser} from '../../../store/selectors/users';\nimport {flags} from '../../../utils';\n\nimport './UsersPageEditor.scss';\nimport {GroupsLoader} from '../../../hooks/global';\nimport {RootState} from '../../../store/reducers';\nimport {FIX_MY_TYPE, YTError} from '../../../types';\nimport {isIdmAclAvailable} from '../../../config';\nimport {createUser} from '../../../store/actions/users-typed';\nimport {disableUsersCache} from '../../../utils/users-groups';\n\nconst block = cn('users-page-editor');\n\ninterface Props {\n className?: string;\n showModal?: boolean;\n username: string;\n ban_message?: string;\n banned?: string | boolean;\n member_of?: Array<string>;\n comment?: string;\n idm?: boolean;\n read_request_rate_limit?: number;\n request_queue_size_limit?: number;\n write_request_rate_limit?: number;\n groupAttributesMap?: GroupAttributes;\n isUserManagementEnabled?: boolean;\n\n closeUserEditorModal: () => void;\n fetchUsers: () => void;\n saveUserData: (payload: {\n username: string;\n password: string;\n newName: string;\n attributes: Partial<\n Pick<\n Props,\n Exclude<\n Level2Keys,\n 'idm' | 'name' | 'groups' | 'newGroups' | 'password' | 'passwordConfirm'\n >\n >\n >;\n groupsToAdd: Array<string>;\n groupsToRemove: Array<string>;\n }) => Promise<void>;\n}\n\ninterface State {\n error?: YTError;\n}\n\ntype GroupAttributes = Record<string, {upravlyator_managed: boolean}>;\n\ninterface FormValues {\n general: {\n idm: string;\n name: string;\n read_request_rate_limit: {value: number};\n request_queue_size_limit: {value: number};\n write_request_rate_limit: {value: number};\n };\n groups: {\n newGroups: Array<string>;\n groups: ReturnType<typeof UsersPageEditor.prepareCurrent>;\n comment: string;\n };\n ban: {\n banned?: string | boolean;\n ban_message?: string;\n };\n password: {\n password: string;\n passwordConfirm: string;\n };\n}\n\ntype Level2Keys =\n | keyof FormValues['general']\n | keyof FormValues['groups']\n | keyof FormValues['ban']\n | keyof FormValues['password'];\n\nclass UsersPageEditor extends React.Component<Props, State> {\n static propTypes = {\n className: PropTypes.string,\n showModal: PropTypes.bool,\n username: PropTypes.string.isRequired,\n ban_message: PropTypes.string,\n banned: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n member_of: PropTypes.arrayOf(PropTypes.string),\n read_request_rate_limit: PropTypes.number,\n request_queue_size_limit: PropTypes.number,\n write_request_rate_limit: PropTypes.number,\n groupAttributesMap: PropTypes.object,\n idm: PropTypes.bool,\n comment: PropTypes.string,\n\n closeUserEditorModal: PropTypes.func,\n saveUserData: PropTypes.func,\n };\n\n static prepareGroups(groups: Array<string> = [], groupAttributes: GroupAttributes = {}) {\n return groups.map((title) => {\n const {[title]: group} = groupAttributes;\n return {\n title,\n // eslint-disable-next-line camelcase\n frozen: !flags.get(group?.upravlyator_managed),\n };\n });\n }\n\n static prepareCurrent(groups: Array<string> = [], groupAttributes: GroupAttributes = {}) {\n const current: {\n title: string;\n data: ReturnType<typeof UsersPageEditor.prepareGroups>;\n } = {\n title: 'Current',\n data: UsersPageEditor.prepareGroups(groups, groupAttributes),\n };\n return [current].filter(({data}) => data.length);\n }\n\n state: State = {};\n\n // eslint-disable-next-line react/sort-comp\n onAdd = async (form: FormApi<FormValues>) => {\n const {\n values: {general: generalTab, groups: groupsTab, ban: banTab, password: passwordTab},\n } = form.getState();\n const fields = {\n idm: generalTab.idm,\n read_request_rate_limit: generalTab.read_request_rate_limit.value,\n request_queue_size_limit: generalTab.request_queue_size_limit.value,\n write_request_rate_limit: generalTab.write_request_rate_limit.value,\n password: passwordTab.password,\n ...groupsTab,\n ...banTab,\n };\n\n const {idm: _idm, groups, newGroups, password: newPassword, ...rest} = fields;\n const [current] = groups;\n const groupsToRemove = map_(filter_(current?.data, 'removed'), 'title');\n\n const changedFields = reduce_(\n rest,\n (acc, value, fieldName) => {\n if (!isEqual_(value, this.props[fieldName as keyof Props])) {\n (acc as FIX_MY_TYPE)[fieldName] = value;\n }\n return acc;\n },\n {} as Partial<typeof fields>,\n );\n if (!changedFields['ban_message'] && !this.props['ban_message']) {\n // This is required because textarea returns empty string\n // even if it receives 'undefined' as input\n delete changedFields['ban_message'];\n }\n\n let username;\n let newName;\n\n if (this.isNewUser()) {\n username = generalTab.name;\n newName = username;\n\n try {\n await createUser({username});\n } catch (error: any) {\n this.setState({error});\n return Promise.reject(error);\n }\n } else {\n username = this.props.username;\n newName = generalTab.name;\n }\n\n return this.props\n .saveUserData({\n username,\n newName,\n attributes: changedFields,\n groupsToAdd: newGroups,\n groupsToRemove: groupsToRemove,\n password: newPassword,\n })\n .then(() => {\n // we don't need to wait for the end of the action\n disableUsersCache();\n this.props.fetchUsers();\n })\n .catch((error) => {\n this.setState({error});\n return Promise.reject(error);\n });\n };\n\n onClose = () => {\n this.props.closeUserEditorModal();\n };\n\n isNewUser() {\n return !this.props.username;\n }\n\n render() {\n const {\n className,\n showModal,\n username,\n idm,\n banned,\n ban_message: banMessage,\n member_of: groups,\n read_request_rate_limit: rrrl,\n request_queue_size_limit: rqsl,\n write_request_rate_limit: wrrl,\n groupAttributesMap,\n isUserManagementEnabled,\n } = this.props;\n\n const errors = makeErrorFields([this.state.error]);\n\n return (\n <React.Fragment>\n <GroupsLoader />\n <YTDFDialog<FormValues>\n className={block(null, className)}\n headerProps={{\n title: this.isNewUser() ? 'Create user' : `User ${username}`,\n }}\n size={'l'}\n initialValues={{\n general: {\n idm: idm === undefined ? '' : String(idm),\n name: username,\n read_request_rate_limit: {value: rrrl || 1},\n request_queue_size_limit: {value: rqsl || 1},\n write_request_rate_limit: {value: wrrl || 1},\n },\n groups: {\n newGroups: [],\n groups: UsersPageEditor.prepareCurrent(groups, groupAttributesMap),\n comment: '',\n },\n ban: {\n banned: banned || false,\n ban_message: banMessage,\n },\n password: {\n password: '',\n passwordConfirm: '',\n },\n }}\n onAdd={this.onAdd}\n visible={Boolean(showModal)}\n onClose={this.onClose}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n type: 'plain' as const,\n name: 'idm',\n caption: 'IDM',\n },\n ]),\n ...(isUserManagementEnabled\n ? [\n {\n name: 'name',\n type: 'text' as const,\n required: true,\n caption: 'Name',\n },\n ]\n : []),\n {\n type: 'number',\n name: 'request_queue_size_limit',\n caption: 'Request queue size limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n {\n type: 'number',\n name: 'read_request_rate_limit',\n caption: 'Read request rate limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n {\n type: 'number',\n name: 'write_request_rate_limit',\n caption: 'Write request rate limit',\n extras: {\n min: 1,\n hidePrettyValue: true,\n },\n },\n ...errors,\n ],\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n type: 'tab-vertical' as const,\n name: 'groups',\n title: 'Groups',\n fields: [\n {\n type: 'yt-group' as const,\n name: 'newGroups',\n caption: 'Groups',\n extras: {\n multiple: true,\n showTags: true,\n disabled: !isIdmAclAvailable(),\n maxVisibleValues: 3,\n placeholder: 'Enter group name',\n },\n },\n {\n name: 'groups',\n type: 'multi-editable-lists' as const,\n caption: '',\n extras: {\n titleClassName: block('list-title'),\n },\n },\n {\n name: 'comment',\n caption: 'Comment for IDM',\n type: 'textarea' as const,\n extras: {\n disabled: !isIdmAclAvailable(),\n },\n },\n ...errors,\n ],\n },\n ]),\n {\n type: 'tab-vertical',\n name: 'ban',\n title: 'Ban',\n fields: [\n {\n type: 'tumbler',\n name: 'banned',\n caption: 'Ban user',\n },\n {\n type: 'textarea',\n name: 'ban_message',\n caption: 'Ban message',\n },\n ...errors,\n ],\n },\n ...(isUserManagementEnabled\n ? [\n {\n type: 'tab-vertical' as const,\n name: 'password',\n title: 'Password',\n fields: [\n {\n name: 'password',\n type: 'text' as const,\n caption: 'New password',\n extras: () => ({type: 'password' as const}),\n },\n {\n name: 'passwordConfirm',\n type: 'text' as const,\n caption: 'Confirm password',\n extras: () => ({type: 'password' as const}),\n },\n ...errors,\n ],\n },\n ]\n : []),\n ]}\n validate={({password}) => {\n const passwordErrors: Partial<\n Record<keyof typeof password, string | undefined>\n > = {};\n\n if (password.password !== password.passwordConfirm) {\n passwordErrors.password = 'New and confirm password must be equal';\n }\n\n return {password: passwordErrors};\n }}\n />\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {showModal, username, data: attrs} = getUsersPageEditableUser(state);\n const data = attrs && username === attrs.name ? attrs : {};\n return {\n showModal,\n username,\n ...data,\n groupAttributesMap: getGlobalGroupAttributesMap(state),\n isUserManagementEnabled: getUserManagementEnabled(state),\n };\n};\n\nconst mapDispatchToProps = {\n closeUserEditorModal,\n saveUserData,\n fetchUsers,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageEditor);\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RootState} from '../../../store/reducers';\nimport {Text} from '@gravity-ui/uikit';\nimport {closeUserDeleteModal, deleteUser} from '../../../store/actions/users-typed';\nimport {fetchUsers} from '../../../store/actions/users';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {YTError} from '../../../types';\nimport {disableUsersCache} from '../../../utils/users-groups';\n\nexport const DeleteUserModal: React.FC = () => {\n const dispatch = useDispatch();\n const [error, setError] = React.useState<YTError | undefined>(undefined);\n const usernameToDelete = useSelector(\n (state: RootState) => state.users.deleteUser.usernameToDelete,\n );\n\n const onClose = useCallback(() => {\n dispatch(closeUserDeleteModal());\n }, [dispatch]);\n\n const onAdd = useCallback(async () => {\n try {\n setError(undefined);\n\n await deleteUser({username: usernameToDelete});\n\n onClose();\n\n disableUsersCache();\n // we don't need to wait for the end of the action\n dispatch(fetchUsers());\n } catch (error) {\n setError(error as YTError);\n }\n }, [dispatch, usernameToDelete, onClose]);\n\n return (\n <YTDFDialog\n visible={Boolean(usernameToDelete)}\n headerProps={{title: `Delete user ${usernameToDelete}`}}\n pristineSubmittable={true}\n onClose={onClose}\n onAdd={onAdd}\n fields={[\n {\n name: 'username',\n type: 'block',\n extras: {\n children: (\n <Text>\n Are you sure you want to delete &quot;{usernameToDelete}&quot;?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n );\n};\n","import React, {useCallback} from 'react';\nimport UIFactory from '../../../UIFactory';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport Link from '../../../components/Link/Link';\nimport Icon from '../../../components/Icon/Icon';\nimport Button from '../../../components/Button/Button';\nimport {showUserEditorModal} from '../../../store/actions/users';\nimport {showUserDeleteModal} from '../../../store/actions/users-typed';\nimport {getUserManagementEnabled} from '../../../store/selectors/global';\nimport block from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport './UserActions.scss';\n\nconst b = block('yt-user-actions');\n\ntype UserActionsProps = {\n className?: string;\n cluster: string;\n username: string;\n};\n\nexport const UserActions: React.FC<UserActionsProps> = ({className, cluster, username}) => {\n const dispatch = useDispatch();\n\n const onEditClick = useCallback(() => {\n dispatch(showUserEditorModal(username));\n }, [username, dispatch]);\n\n const onDeleteClick = useCallback(() => {\n dispatch(showUserDeleteModal(username));\n }, [username, dispatch]);\n\n const isUserManagementEnabled = useSelector(getUserManagementEnabled);\n\n let deleteUserButton;\n\n if (isUserManagementEnabled) {\n deleteUserButton = (\n <Button view=\"flat-secondary\" size=\"m\" onClick={onDeleteClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n } else {\n deleteUserButton = null;\n }\n\n return (\n <div className={b(null, className)}>\n <ChartLink url={UIFactory.makeUrlForUserDashboard(cluster, username)} />\n <Link routed url={userOperationsLink(cluster, username)}>\n &lt;/&gt;\n </Link>\n <ClickableAttributesButton title={username} path={`//sys/users/${username}`} />\n <Button view=\"flat-secondary\" size=\"m\" onClick={onEditClick}>\n <Icon awesome=\"pencil-alt\" />\n </Button>\n {deleteUserButton}\n </div>\n );\n};\n\nfunction userOperationsLink(cluster: string, user: string) {\n return `/${cluster}/operations?mode=list&user=${user}&state=all`;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport DataTable from '@gravity-ui/react-data-table';\n\nimport {fetchUsers, setUsersPageSorting} from '../../../store/actions/users';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport CommaSeparatedListWithRestCounter from '../../../components/CommaSeparateListWithRestCounter/CommaSeparateListWithRestCounter';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport LoadDataHandler from '../../../components/LoadDataHandler/LoadDataHandler';\nimport {SubjectCard} from '../../../components/SubjectLink/SubjectLink';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport UsersPageEditor from '../../../pages/users/UsersPageEditor/UsersPageEditor';\nimport {DeleteUserModal} from '../../../pages/users/DeleteUserModal/DeleteUserModal';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getUsersFilteredAndSorted,\n getUsersPageEditableUser,\n getUsersTableDataState,\n} from '../../../store/selectors/users';\nimport {UserActions} from '../UserActions/UserActions';\n\nimport './UsersPageTable.scss';\n\nconst block = cn('users-page-table');\n\nconst TABLE_SETTINGS = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\nconst COLUMN_NAMES = {\n name: 'Name',\n banned: 'Banned',\n member_of: 'Groups',\n transitiveGroups: 'Transitive groups',\n request_queue_size_limit: 'Request queue',\n read_request_rate_limit: 'Read request rate',\n write_request_rate_limit: 'Write request rate',\n externalSystem: 'External system',\n\n // pseudo columns\n actions: '',\n};\n\nconst SHOR_COLUMN_NAMES = {\n banned: 'B',\n request_queue_size_limit: 'RQ',\n read_request_rate_limit: 'RRR',\n write_request_rate_limit: 'WRR',\n};\n\nclass UsersPageTable extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n\n loading: PropTypes.bool,\n loaded: PropTypes.bool.isRequired,\n\n users: PropTypes.array.isRequired,\n cluster: PropTypes.string.isRequired,\n fetchUsers: PropTypes.func.isRequired,\n setUsersPageSorting: PropTypes.func.isRequired,\n\n sort: PropTypes.shape({\n column: PropTypes.string,\n order: PropTypes.string,\n }),\n\n showModal: PropTypes.bool,\n showUserEditorModal: PropTypes.func,\n };\n\n componentDidMount() {\n const {fetchUsers} = this.props;\n fetchUsers();\n }\n\n renderColumnHeader = (col, sortable) => {\n const {\n sort: {column, order},\n } = this.props;\n const isSorted = col === column;\n\n const title = COLUMN_NAMES[col];\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={title}\n shortTitle={SHOR_COLUMN_NAMES[col] || title}\n order={isSorted ? order : ''}\n onSort={this.onColumnSort}\n withUndefined\n />\n );\n };\n\n onColumnSort = (colName, nextOrder) => {\n const {setUsersPageSorting} = this.props;\n setUsersPageSorting({column: colName, order: nextOrder});\n };\n\n renderNameCell(col, {row} = {}) {\n const {name, upravlyator_managed: idm} = row;\n return (\n <div className={block('content', {col})}>\n <SubjectCard name={name} internal={!idm} />\n </div>\n );\n }\n\n renderBannedCell(col, {row} = {}) {\n const {banned, ban_message: banMessage} = row;\n return (\n <Tooltip content={banMessage}>\n <div className={block('content', {col})}>\n {banned && <span className={block(col)}>B</span>}\n </div>\n </Tooltip>\n );\n }\n\n renderGroupsCell(col, {row} = {}) {\n const {[col]: value} = row;\n return (\n <div className={block('content', {col})}>\n <CommaSeparatedListWithRestCounter className={block('groups')} items={value} />\n </div>\n );\n }\n\n renderNumberCell = (col, {row} = {}) => {\n const {[col]: value} = row;\n return (\n <div className={block('content', {col})}>\n <span>{value}</span>\n </div>\n );\n };\n\n renderExternalSystemCell = (col, {row} = {}) => {\n const {externalSystem} = row;\n\n return (\n <div className={block('content', {col})}>\n <div className={block(col)}>{externalSystem}</div>\n </div>\n );\n };\n\n renderActionsCell = (col, cluster, {row} = {}) => {\n const {name: username} = row;\n return (\n <UserActions\n className={block('content', {col})}\n username={username}\n cluster={cluster}\n />\n );\n };\n\n renderTable() {\n const {cluster, users, loaded, loading} = this.props;\n\n const columnProps = (name, disableSorting = false) => {\n return {\n name,\n align: DataTable.LEFT,\n sortable: false,\n className: block('td', {col: name.toLowerCase()}),\n header: this.renderColumnHeader(name, !disableSorting),\n };\n };\n\n const DISABLED_SORTING = true;\n\n const columns = [\n {\n ...columnProps('name'),\n render: this.renderNameCell.bind(this, 'name'),\n },\n {\n ...columnProps('banned'),\n render: this.renderBannedCell.bind(this, 'banned'),\n align: DataTable.CENTER,\n },\n {\n ...columnProps('externalSystem', DISABLED_SORTING),\n render: this.renderExternalSystemCell.bind(this, 'externalSystem'),\n },\n {\n ...columnProps('member_of', DISABLED_SORTING),\n render: this.renderGroupsCell.bind(this, 'member_of'),\n },\n {\n ...columnProps('transitiveGroups', DISABLED_SORTING),\n render: this.renderGroupsCell.bind(this, 'transitiveGroups'),\n },\n {\n ...columnProps('request_queue_size_limit'),\n render: this.renderNumberCell.bind(this, 'request_queue_size_limit'),\n align: 'right',\n },\n {\n ...columnProps('read_request_rate_limit'),\n render: this.renderNumberCell.bind(this, 'read_request_rate_limit'),\n align: 'right',\n },\n {\n ...columnProps('write_request_rate_limit'),\n render: this.renderNumberCell.bind(this, 'write_request_rate_limit'),\n align: 'right',\n },\n {\n ...columnProps('actions'),\n header: '',\n render: this.renderActionsCell.bind(this, 'actions', cluster),\n },\n ];\n\n return (\n <DataTableYT\n loaded={loaded}\n loading={loading}\n className={block('table')}\n data={users}\n columns={columns}\n settings={TABLE_SETTINGS}\n theme={'yt-internal'}\n />\n );\n }\n\n render() {\n const {className, error, showModal} = this.props;\n return (\n <div className={block(null, className)}>\n <LoadDataHandler loaded={true} error={Boolean(error)} errorData={error || null}>\n {this.renderTable()}\n {showModal && <UsersPageEditor />}\n <DeleteUserModal />\n </LoadDataHandler>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loaded, loading, error, sort} = getUsersTableDataState(state);\n const {showModal} = getUsersPageEditableUser(state);\n return {\n loaded,\n loading,\n error,\n users: getUsersFilteredAndSorted(state),\n sort,\n cluster: getCluster(state),\n showModal,\n };\n};\n\nconst mapDispatchToProps = {\n fetchUsers,\n setUsersPageSorting,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageTable);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport WithStickyToolbar from '../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport UsersPageFilters from './UsersPageFilters/UsersPageFilters';\nimport UsersPageTable from './UsersPageTable/UsersPageTable';\n\nconst block = cn('users-page');\n\nexport default function UsersPage() {\n return (\n <div className={block(null, 'elements-main-section')}>\n <WithStickyToolbar\n hideToolbarShadow\n className=\"elements-section\"\n toolbar={<UsersPageFilters />}\n content={<UsersPageTable />}\n />\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-page-counter');\n\nexport interface PageCounterProps {\n className?: string;\n pageIndex?: number;\n pageCount?: number;\n}\n\nfunction PageCounter({pageIndex, pageCount, className}: PageCounterProps) {\n if (pageIndex === undefined || pageCount === undefined) {\n return null;\n }\n\n return pageCount! > 1 ? (\n <span className={block(null, className)}>\n Page: {(pageIndex || 0) + 1} / {pageCount}\n </span>\n ) : null;\n}\n\nexport default React.memo(PageCounter);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport capitalize_ from 'lodash/capitalize';\n\nimport barsDescendingSvg from '@gravity-ui/icons/svgs/bars-descending-align-left.svg';\nimport {Button, DropdownMenu, Icon, Text} from '@gravity-ui/uikit';\n\nimport SortIcon from '../../components/SortIcon/SortIcon';\n\nimport {OrderType, calculateNextOrderValue, nextSortOrderValue} from '../../utils/sort-helpers';\nimport PageCounter, {PageCounterProps} from '../../components/PageCounter/PageCounter';\nimport Loader from '../../components/Loader/Loader';\nimport {rumLogError} from '../../rum/rum-counter';\n\nimport './ColumnHeader.scss';\n\nconst block = cn('column-header');\n\nexport type ColumnInfo<T> = {\n column: T;\n title?: string;\n shortTitle?: string;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n allowUnordered?: boolean;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n withUndefined?: boolean;\n allowedOrderTypes?: Array<OrderType>;\n};\n\nexport type HasSortColumn<T> =\n | (ColumnInfo<T> & {options?: undefined})\n | ({\n title: string;\n shortTitle?: string;\n column: T;\n options: Array<ColumnInfo<T>>;\n } & Partial<Record<keyof Omit<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>, undefined>>);\n\nexport type ColumnHeaderProps<T extends string = string> = PageCounterProps &\n HasSortColumn<T> & {\n className?: string;\n order?: OrderType;\n multisortIndex?: number;\n onSort?: (\n column: T,\n nextOrder: OrderType,\n options: {currentOrder?: OrderType; multisort?: boolean},\n ) => void;\n\n loading?: boolean;\n\n align?: 'center' | 'left' | 'right';\n };\n\ntype NameTitleContent = {\n nameContent: string;\n titleContent: string;\n};\n\nfunction getNameTitle<T extends string>({\n column,\n title,\n shortTitle,\n}: Pick<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>): NameTitleContent {\n const t = title ?? capitalize_(column);\n const nameContent = !shortTitle ? t : shortTitle;\n return {nameContent, titleContent: t};\n}\n\nfunction useColumnInfo<T extends string = string>(\n props: ColumnHeaderProps<T>,\n): ColumnInfo<T> & NameTitleContent & {subColumn?: NameTitleContent} {\n if (props.options === undefined) {\n const {column, allowUnordered, withUndefined, title, shortTitle, allowedOrderTypes} = props;\n return {\n column,\n allowUnordered,\n withUndefined,\n allowedOrderTypes,\n ...getNameTitle({column, title, shortTitle}),\n };\n }\n\n const {column: value, options, title, shortTitle} = props;\n const columnData = options.find(({column}) => value === column)!;\n if (!columnData) {\n rumLogError({\n message: 'Unexpected behavior: missing value in ColumnHeader.props.options',\n additional: props,\n });\n }\n return {\n subColumn: getNameTitle({...columnData}),\n ...columnData,\n ...getNameTitle({column: '', title, shortTitle}),\n };\n}\n\nexport default function ColumnHeader<T extends string = string>(props: ColumnHeaderProps<T>) {\n const {className, align, order, onSort, multisortIndex, loading, pageIndex, pageCount} = props;\n const {\n column,\n allowUnordered,\n withUndefined,\n nameContent,\n titleContent,\n allowedOrderTypes,\n subColumn,\n } = useColumnInfo(props);\n\n const changeHandler = React.useCallback(\n (e: React.MouseEvent) => {\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort?.(column, nextOrder, {\n currentOrder: order,\n multisort: e.ctrlKey || e.metaKey,\n });\n },\n [column, order, onSort, allowUnordered, allowedOrderTypes, withUndefined],\n );\n\n const sortable = Boolean(onSort);\n\n return (\n <div className={block(null, className)}>\n <div\n className={block('label-icon', {sortable, align})}\n onClick={sortable ? changeHandler : undefined}\n >\n <span className={block('label')} title={titleContent}>\n {nameContent}\n </span>\n {sortable && (\n <span className={block('icon')}>\n <SortIcon order={order} />\n </span>\n )}\n {multisortIndex !== undefined && (\n <span className={block('multisort')}>\n &nbsp;<sup>{multisortIndex}</sup>\n </span>\n )}\n {Boolean(order) && Boolean(subColumn) && (\n <Text\n className={block('label', {'sub-column': true})}\n variant=\"caption-2\"\n title={subColumn?.titleContent}\n color=\"dark-secondary\"\n >\n {subColumn?.nameContent}\n </Text>\n )}\n </div>\n <SubColumnSelector options={props.options} order={order} onSort={onSort} />\n {loading !== undefined && (\n <div className={block('loader')}>\n <Loader visible={loading} />\n </div>\n )}\n {Boolean(pageCount) && (\n <PageCounter\n className={block('page-counter')}\n pageIndex={pageIndex}\n pageCount={pageCount}\n />\n )}\n </div>\n );\n}\n\nfunction SubColumnSelector<T extends string>({\n order,\n options,\n onSort,\n}: Pick<ColumnHeaderProps<T>, 'onSort'> & {\n order?: ColumnHeaderProps<T>['order'];\n options?: Array<ColumnInfo<T>>;\n}) {\n return !options ? null : (\n <DropdownMenu\n items={options.map((x) => {\n const {titleContent} = getNameTitle(x);\n return {\n text: titleContent,\n action() {\n if (!onSort) {\n return;\n }\n const {column, allowUnordered, withUndefined, allowedOrderTypes} = x;\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort(column, nextOrder, {\n currentOrder: order,\n });\n },\n };\n })}\n renderSwitcher={({onClick}) => (\n <Button onClick={onClick} view=\"flat\" size=\"xs\">\n <Icon size={12} data={barsDescendingSvg} />\n </Button>\n )}\n />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport sortedIndexBy_ from 'lodash/sortedIndexBy';\nimport sortedLastIndexBy_ from 'lodash/sortedLastIndexBy';\n\nimport {getAllUserNamesSorted} from '../store/selectors/global';\nimport {\n loadAccountsIfNotLoaded,\n loadBundlesIfNotLoaded,\n loadGroupsIfNotLoaded,\n loadUsersIfNotLoaded,\n} from '../store/actions/global';\n\nexport function useAllUserNamesFiltered() {\n const dispatch = useDispatch();\n React.useEffect(() => {\n dispatch(loadUsersIfNotLoaded());\n }, []);\n\n const namesSorted = useSelector(getAllUserNamesSorted);\n\n const getFiltered = React.useCallback(\n (text: string) => {\n const from = sortedIndexBy_(namesSorted, text, (item) => item.substr(0, text.length));\n const to = sortedLastIndexBy_(namesSorted, text, (item) => item.substr(0, text.length));\n const res = namesSorted.slice(from, to);\n return res;\n },\n [namesSorted],\n );\n\n return {getFiltered, allNames: namesSorted};\n}\n\nexport function useGroupsLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadGroupsIfNotLoaded());\n }, []);\n}\n\nexport function GroupsLoader({children}: {children?: React.ReactElement}) {\n useGroupsLoaded();\n return children ?? null;\n}\n\nexport function useAccountsLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadAccountsIfNotLoaded());\n }, []);\n}\n\nexport function AccountsLoader() {\n useAccountsLoaded();\n return null;\n}\n\nexport function useBundlesLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadBundlesIfNotLoaded());\n }, []);\n}\n\nexport function BundlesLoader() {\n useBundlesLoaded();\n return null;\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded?: boolean;\n error?: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <YTErrorBlock error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\n\nimport isEqual_ from 'lodash/isEqual';\nimport throttle_ from 'lodash/throttle';\n\nimport SimpleModal from '../../components/Modal/SimpleModal';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './CommaSeparateListWithRestCounter.scss';\n\nconst block = cn('comma-separated-list-with-rest-counter');\n\nfunction counterText(length) {\n return ` +${length}`; // one space more than required\n}\n\nconst MAX_TOOLTIP_COUNT = 20;\n\n/**\n * The rendered result depends on:\n * - offsetWidth\n * - offsetHeight\n * - lineHeight (from getComputedStyle(...))\n * - font (from getComputedStyle(...))\n * properties of main-block of the component,\n * but the component does not try to detect any changes of these properties.\n * So you must force re-rendering of the component from outside\n * for each changing of these properties. Or the properties should be constant.\n */\nexport default class CommaSeparatedListWithRestCounter extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.string),\n maxTooltipCount: PropTypes.number, // maximum items in tooltip should be <= MAX_TOOLTIP_COUNT\n\n itemRenderer: PropTypes.func,\n };\n\n static defaultProps = {\n maxTooltipCount: MAX_TOOLTIP_COUNT,\n };\n\n ref;\n unmounted = false;\n\n state = {\n restCounter: 0,\n rows: [],\n showDialog: false,\n };\n\n onRef = (ref) => {\n this.ref = ref;\n this.updateState();\n };\n\n componentWillUnmount() {\n this.unmounted = true;\n }\n\n componentDidUpdate() {\n this.updateState();\n }\n\n updateStateImpl = () => {\n if (this.unmounted) {\n this.unmounted = true;\n }\n\n const {items} = this.props;\n if (!this.ref || !items || !items.length) {\n return this.setStateIfChanged({rows: [], restCounter: 0});\n }\n\n const {offsetWidth, offsetHeight} = this.ref;\n const {fontWeight, lineHeight, fontSize, fontFamily} = getComputedStyle(this.ref);\n const font = `${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`;\n\n if (!offsetWidth || !offsetHeight) {\n return this.setStateIfChanged({rows: [], restCounter: 0});\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx.font = font;\n const rows = [];\n let pos = 0;\n\n const lh = parseInt(lineHeight);\n\n let currentRow = [];\n let currentRowWidth = 0;\n while ((rows.length + 1) * lh <= offsetHeight && pos < items.length) {\n const isLastItem = pos === items.length - 1;\n\n const text = items[pos++];\n const {width} = ctx.measureText(text + ', ');\n currentRowWidth += width;\n\n const isLastRow = offsetHeight - (rows.length + 1) * lh < lh;\n const counterWidth =\n isLastRow && !isLastItem\n ? ctx.measureText(counterText(items.length - pos)).width\n : 0;\n const maxWidth = offsetWidth - counterWidth;\n\n if (currentRowWidth <= maxWidth) {\n currentRow.push(text);\n if (isLastItem) {\n rows.push(currentRow);\n }\n } else {\n rows.push(currentRow);\n\n if (isLastRow) {\n --pos;\n } else {\n currentRow = [text];\n currentRowWidth = width;\n if (isLastItem) {\n rows.push(currentRow);\n }\n }\n }\n }\n\n const stateToCompare = {\n offsetWidth,\n offsetHeight,\n font,\n lineHeight,\n items,\n rows,\n restCounter: items.length - pos,\n };\n this.setStateIfChanged(stateToCompare);\n };\n\n updateState = throttle_(this.updateStateImpl, 30);\n\n setStateIfChanged(toCompare) {\n const changed = Object.keys(toCompare).some((key) => {\n return !isEqual_(this.state[key], toCompare[key]);\n });\n\n if (changed) {\n this.setState({...toCompare});\n }\n return changed;\n }\n\n renderRows() {\n const {rows} = this.state;\n return rows.map((row, index) => {\n return (\n <div key={index} className={block('row')}>\n {this.renderRow(row, index === rows.length - 1)}\n </div>\n );\n });\n }\n\n renderRow(items, isLastRow) {\n return (\n <React.Fragment>\n <div className={block('row-items')}>{this.renderItems(items, isLastRow)}</div>\n {isLastRow && this.renderCounter()}\n </React.Fragment>\n );\n }\n\n renderItems(items, isLastRow) {\n return items.map((item, index) => {\n const isLastItem = index === items.length - 1;\n const comma = !isLastRow || !isLastItem || this.state.restCounter ? ', ' : '';\n return (\n <span key={index} className={block('row-item')}>\n {this.renderItem(item)}\n {comma}\n </span>\n );\n });\n }\n\n renderItem = (item) => {\n const {itemRenderer} = this.props;\n return itemRenderer ? itemRenderer(item) : item;\n };\n\n renderCounter() {\n const {restCounter} = this.state;\n if (!restCounter) {\n return null;\n }\n\n const clickable = !this.allowItemsInTooltip();\n const toolTip = !clickable ? this.renderTooltip() : 'Click to show all items';\n\n const {showDialog} = this.state;\n const key = showDialog; // the key is required to hide tooltip behind the dialog with all items\n\n return (\n <Tooltip key={key} className={block('hover-tooltip')} content={toolTip}>\n <div className={block('row-counter', {clickable})} onClick={this.onCounterClick}>\n +{restCounter}\n </div>\n <SimpleModal title={'All items'} visible={showDialog} onCancel={this.closeDialog}>\n {showDialog && this.renderTooltip()}\n </SimpleModal>\n </Tooltip>\n );\n }\n\n closeDialog = () => {\n this.setState({showDialog: false});\n };\n\n onCounterClick = () => {\n if (this.allowItemsInTooltip()) {\n return;\n }\n\n this.setState({showDialog: true});\n };\n\n renderTooltip() {\n const {items} = this.state;\n return (\n <div className={block('tooltip', 'yc-root')}>\n {items.map((item) => {\n return <div key={item}>{this.renderItem(item)}</div>;\n })}\n </div>\n );\n }\n\n allowItemsInTooltip() {\n const {maxTooltipCount} = this.props;\n const {items} = this.state;\n return items.length <= Math.min(MAX_TOOLTIP_COUNT, maxTooltipCount);\n }\n\n render() {\n const {className} = this.props;\n return (\n <div ref={this.onRef} className={block(null, className)}>\n {this.renderRows()}\n </div>\n );\n }\n}\n","import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n"],"names":["addI18Keysets","en","ru","connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","i18n","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","props","xmlns","fill","viewBox","children","fillRule","d","clipRule","sha256","_x","_sha","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","str","buf","wrap","_context","prev","next","crypto","subtle","digest","TextEncoder","encode","sent","abrupt","_toConsumableArray","Uint8Array","map","x","toString","slice","join","stop","isCryptoSubtleAvailable","_crypto","Boolean","block","cn","GroupSuggest","items","width","multiple","onChange","placeholder","className","showTags","value","disablePortal","ycItems","map_","item","text","empty","length","listValue","React","concat_","onListChange","newList","res","filter_","removed","_ref2","_jsxs","Select","onUpdate","filterable","EditableList","isEmpty","getDefaultValue","state","ownProps","idmOnly","getAllIdmGroupNamesSorted","getAllGroupNamesSorted","getExternalSystem","ldap","idm","hasIdm","isIdmAclAvailable","USER_ATTRIBUTES","prepareUserData","_item$$attributes","$attributes","groups","member_of","allGroups","member_of_closure","upravlyator_managed","sort","flags","get","externalSystem","difference_","fetchUsers","dispatch","type","USERS_TABLE","REQUEST","listAllUsers","YTApiId","usersData","then","data","users","forEach_","push","SUCCESS","error","FAILURE","showUserEditorModal","username","USERS_EDIT_USER","concat","ytApiV3Id","usersEditData","USERS_EDIT_USER_DATA_FIELDS","showModal","removeUserFromGroups","cluster","Promise","all","groupname","UIFactory","getAclApi","removeUserFromGroup","addUserToGroups","comment","addUserToGroup","changeUserPassword","password","new_password_sha256","ytApiV4Id","setUserPassword","parameters","user","resolve","getUsersNameFilter","table","nameFilter","getUsersGroupFilter","groupFilter","getUsersBannedFilter","bannedFilter","getUsersFiltered","createSelector","predicates","name","indexOf","memberOf","transitiveGroups","sortedIndexOf_","_ref3","banned","filter","concatByAnd","getUsersFilteredAndSorted","sortState","sortArrayBySortState","getUsersPageEditableUser","editUser","ShowCreateUserModalButton","useDispatch","useCallback","useSelector","getUserManagementEnabled","Button","view","UsersPageFilters","_React$Component","_this","_classCallCheck","_len","args","Array","_key","_callSuper","toggleBannedFilter","_this$props","setUsersBannedFilter","_inherits","_createClass","key","_this2","_this$props2","this","Toolbar","itemsToWrap","node","Filter","hasClear","size","setUsersNameFilter","shrinkable","growable","wrapperClassName","GroupsLoader","undefined","vals","setUsersGroupFilter","Checkbox","checked","mapDispatchToProps","USERS_TABLE_DATA_FIELDS","createUser","yt","create","UsersPageEditor","onAdd","form","_form$getState","_form$getState$values","generalTab","groupsTab","banTab","passwordTab","fields","newGroups","newPassword","_groups","current","groupsToRemove","changedFields","newName","getState","values","general","ban","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","_slicedToArray","reduce_","acc","fieldName","isEqual_","isNewUser","t0","setState","reject","saveUserData","groupsToAdd","disableUsersCache","onClose","closeUserEditorModal","banMessage","ban_message","rrrl","rqsl","wrrl","groupAttributesMap","isUserManagementEnabled","errors","makeErrorFields","YTDFDialog","headerProps","initialValues","String","prepareCurrent","passwordConfirm","visible","caption","required","extras","min","hidePrettyValue","disabled","maxVisibleValues","titleClassName","validate","passwordErrors","groupAttributes","group","frozen","prepareGroups","requests","restAttrs","command","input","getCluster","executeBatch","usersSaveData","_ref4","_ref5","batchRes","batchError","getBatchError","_error$response","response","_getUsersPageEditable","attrs","getGlobalGroupAttributesMap","DeleteUserModal","_React$useState","_React$useState2","setError","usernameToDelete","deleteUser","deleteUserModalSlice","actions","setModalState","remove","pristineSubmittable","Text","b","UserActions","deleteUserButton","onEditClick","onDeleteClick","Icon","awesome","ChartLink","url","makeUrlForUserDashboard","Link","routed","userOperationsLink","ClickableAttributesButton","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_NAMES","SHOR_COLUMN_NAMES","UsersPageTable","renderColumnHeader","col","sortable","_this$props$sort","column","order","isSorted","ColumnHeader","shortTitle","onSort","onColumnSort","withUndefined","colName","nextOrder","setUsersPageSorting","renderNumberCell","row","renderExternalSystemCell","renderActionsCell","SubjectCard","internal","Tooltip","CommaSeparatedListWithRestCounter","loaded","loading","columnProps","disableSorting","align","LEFT","toLowerCase","header","DISABLED_SORTING","columns","render","renderNameCell","bind","renderBannedCell","CENTER","renderGroupsCell","DataTableYT","settings","theme","LoadDataHandler","errorData","renderTable","_getUsersTableDataSta","getUsersTableDataState","UsersPage","WithStickyToolbar","hideToolbarShadow","toolbar","PageCounter","pageIndex","pageCount","getNameTitle","t","capitalize_","nameContent","titleContent","multisortIndex","_useColumnInfo","options","allowUnordered","allowedOrderTypes","columnData","find","rumLogError","message","additional","subColumn","useColumnInfo","changeHandler","e","calculateNextOrderValue","nextSortOrderValue","currentOrder","multisort","ctrlKey","metaKey","SortIcon","variant","color","SubColumnSelector","Loader","DropdownMenu","action","renderSwitcher","barsDescendingSvg","ICON_BY_TYPE","_defineProperty","label","hidden","icon","format","ReadableField","face","useAllUserNamesFiltered","loadUsersIfNotLoaded","namesSorted","getAllUserNamesSorted","getFiltered","from","sortedIndexBy_","substr","to","sortedLastIndexBy_","allNames","useGroupsLoaded","loadGroupsIfNotLoaded","hideIcon","wrapContent","target","toaster","Toaster","_Component","add","autoHiding","hammer","NO_VALUE","showErrorPopup","_this$props2$alwaysSh","alwaysShowError","YTErrorBlock","Component","ref","unmounted","restCounter","rows","showDialog","onRef","updateState","updateStateImpl","setStateIfChanged","_this$ref","offsetWidth","offsetHeight","_getComputedStyle","getComputedStyle","fontWeight","lineHeight","fontSize","fontFamily","font","ctx","document","createElement","getContext","pos","lh","parseInt","currentRow","currentRowWidth","isLastItem","measureText","isLastRow","stateToCompare","throttle_","renderItem","itemRenderer","closeDialog","onCounterClick","allowItemsInTooltip","toCompare","changed","Object","keys","some","_this3","index","renderRow","renderItems","renderCounter","_this4","comma","clickable","toolTip","renderTooltip","SimpleModal","onCancel","_this5","maxTooltipCount","Math","renderRows","defaultProps","_ref$view","_ref$size"],"sourceRoot":""}