@ytsaurus/ui 1.69.0 → 1.70.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.
Files changed (25) hide show
  1. package/dist/public/build/assets-manifest.json +15 -15
  2. package/dist/public/build/css/groups.ed9ded1f.chunk.css +2 -0
  3. package/dist/public/build/css/groups.ed9ded1f.chunk.css.map +1 -0
  4. package/dist/public/build/js/cluster-page-wrapper.573e8598.chunk.js +2 -0
  5. package/dist/public/build/js/{cluster-page-wrapper.ee23d43b.chunk.js.map → cluster-page-wrapper.573e8598.chunk.js.map} +1 -1
  6. package/dist/public/build/js/groups.38f0df6f.chunk.js +2 -0
  7. package/dist/public/build/js/groups.38f0df6f.chunk.js.map +1 -0
  8. package/dist/public/build/js/main.38e39f6e.js +3 -0
  9. package/dist/public/build/js/main.38e39f6e.js.map +1 -0
  10. package/dist/public/build/js/{runtime.c701c84d.js → runtime.44a1d4a3.js} +2 -2
  11. package/dist/public/build/js/{runtime.c701c84d.js.map → runtime.44a1d4a3.js.map} +1 -1
  12. package/dist/public/build/js/users.58b85268.chunk.js +2 -0
  13. package/dist/public/build/js/users.58b85268.chunk.js.map +1 -0
  14. package/dist/public/build/manifest.json +12 -12
  15. package/package.json +2 -2
  16. package/dist/public/build/css/groups.7e103f52.chunk.css +0 -2
  17. package/dist/public/build/css/groups.7e103f52.chunk.css.map +0 -1
  18. package/dist/public/build/js/cluster-page-wrapper.ee23d43b.chunk.js +0 -2
  19. package/dist/public/build/js/groups.ea480cb3.chunk.js +0 -2
  20. package/dist/public/build/js/groups.ea480cb3.chunk.js.map +0 -1
  21. package/dist/public/build/js/main.e5f238db.js +0 -3
  22. package/dist/public/build/js/main.e5f238db.js.map +0 -1
  23. package/dist/public/build/js/users.726d69e0.chunk.js +0 -2
  24. package/dist/public/build/js/users.726d69e0.chunk.js.map +0 -1
  25. /package/dist/public/build/js/{main.e5f238db.js.LICENSE.txt → main.38e39f6e.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_ytsaurus_ui=self.webpackChunk_ytsaurus_ui||[]).push([[8809],{42324:(e,r,t)=>{t.d(r,{A:()=>o});var n=t(77810),a=t(76426),s=t(60620),i=t(64922);function u(e){var r=e.className,t=e.url,u=e.title,o=e.theme,l=e.children,c=e.hideIcon,d=e.face,m=e.wrapContent;if(!t)return null;var p=c?null:(0,i.jsx)(s.A,{awesome:"chart-bar",face:d}),f=l?(0,i.jsxs)(n.Fragment,{children:[p,l]}):p;return(0,i.jsx)(a.A,{className:r,target:"_blank",theme:o,url:t,title:null!=u?u:"View",children:m?m(f):f})}const o=n.memo(u)},59578:(e,r,t)=>{t.d(r,{Qw:()=>p,dF:()=>d,jx:()=>m});var n=t(77810),a=t(15647),s=t(80676),i=t.n(s),u=t(88144),o=t.n(u),l=t(52797),c=t(53246);function d(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.uU)())}),[]);var r=(0,a.d4)(l.mz);return{getFiltered:n.useCallback((function(e){var t=i()(r,e,(function(r){return r.substr(0,e.length)})),n=o()(r,e,(function(r){return r.substr(0,e.length)}));return r.slice(t,n)}),[r]),allNames:r}}function m(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.qR)())}),[])}function p(e){var r=e.children;return m(),null!=r?r:null}},64197:(e,r,t)=>{t.d(r,{A:()=>w});var n=t(40319),a=t(18801),s=t(77810),i=t(15647),u=t(53144),o=t.n(u),l=t(49214),c=t.n(l),d=t(27528),m=t.n(d),p=t(76872),f=t(20361),h=t(52797),v=t(50074),g=t(64922),_=["items","width","multiple","onChange","placeholder","className","showTags","value"],b=(0,p.A)("group-suggest");function A(e){var r=e.items,t=e.width,i=e.multiple,u=e.onChange,l=e.placeholder,d=e.className,p=e.showTags,h=e.value,A=(0,a.A)(e,_),w=m()(r,(function(e){return{value:e,text:e}})),y=!(null!=h&&h.length),x=s.useMemo((function(){return m()(o()([],h),(function(e){return{title:e}}))}),[h]),C=s.useCallback((function(e){var r=c()(e,(function(e){return!e.removed})).map((function(e){return e.title}));u(r)}),[h,u]);return(0,g.jsxs)("div",{className:b({empty:y},d),children:[(0,g.jsx)(v.A,(0,n.A)((0,n.A)({},A),{},{items:w,onUpdate:u,placeholder:l,value:e.value,multiple:i,width:null!=t?t:"max",filterable:!0,disablePortal:!0})),i&&p&&(0,g.jsx)(f.Vm,{onChange:C,value:x})]})}A.isEmpty=function(e){return!(null!=e&&e.length)},A.getDefaultValue=function(){return[]};const w=(0,i.Ng)((function(e,r){return{items:r.idmOnly?(0,h.yP)(e):(0,h.Gd)(e)}}))(A)},58562:(e,r,t)=>{t.r(r),t.d(r,{UsersPage:()=>Ye});var n=t(77810),a=t(76872),s=t(83534),i=t(29121),u=t(12937),o=t(10785),l=t(26718),c=t(15647),d=t(16413),m=t(84162),p=t(9736),f=t(18801),h=t(40843),v=t.n(h),g=t(39760),_=t.n(g),b=t(27528),A=t.n(b),w=t(91414),y=t(52797),x=t(88681),C=t(53332),N=t(48971),q=t(64714),j=t(7787),U=t(15801),k=["comment"],F=["name","banned","ban_message","member_of","member_of_closure","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","upravlyator_managed"];function S(e){var r=e.$attributes,t=r.member_of,n=r.member_of_closure,a=r.upravlyator_managed;return t.sort(),n.sort(),e.$attributes.idm=C.Mv.get(a||!1),e.$attributes.transitiveGroups=v()(n,t),e.$attributes}function G(){return function(e){return e({type:w.Oi.REQUEST}),(0,x.Q1)(q.Vu.usersData,{attributes:F}).then((function(r){var t=[];_()(r,(function(e){t.push(S(e))})),e({type:w.Oi.SUCCESS,data:{users:t}})})).catch((function(r){e({type:w.Oi.FAILURE,data:r})}))}}function M(e){return function(r){if(e){r({type:w.aD.REQUEST});var t="//sys/users/".concat(e);return q.Qq.get(q.Vu.usersEditData,{path:t,attributes:F}).then((function(t){r({type:w.aD.SUCCESS,data:{data:S(t)}}),r({type:w.Zc,data:{showModal:!0,username:e}})})).catch((function(e){return r({type:w.aD.FAILURE,data:e})}))}r({type:w.Zc,data:{showModal:!0}})}}function E(e,r,t){return Promise.all(A()(t,(function(t){return j.Ay.getAclApi().removeUserFromGroup({cluster:e,username:r,groupname:t})})))}function B(e,r,t,n){return Promise.all(A()(t,(function(t){return j.Ay.getAclApi().addUserToGroup({cluster:e,username:r,groupname:t,comment:n})})))}function R(e){var r=e.username,t=e.password;return t?(0,U.s)(t).then((function(e){return q.$S.setUserPassword(q.Vu.setUserPassword,{parameters:{user:r,new_password_sha256:e}})})):Promise.resolve()}var T=t(64197),D=t(33023),z=t(13322),P=t(49214),V=t.n(P),I=t(99564),Q=t.n(I),O=t(18472),$=t(44458),H=t(6184),L=function(e){return e.users.table.nameFilter},Z=function(e){return e.users.table.groupFilter},W=function(e){return e.users.table.bannedFilter},Y=(0,O.Mz)([function(e){return e.users.table.users},L,Z,W],(function(e,r,t,n){var a=[r&&function(e){return-1!==e.name.indexOf(r)},t&&function(e){var r=e.member_of,n=e.transitiveGroups;return-1!==Q()(r,t)||-1!==Q()(n,t)},n&&function(e){return e.banned}].filter(Boolean);return 0===a.length?e:V()(e,H.concatByAnd.apply(void 0,(0,z.A)(a)))})),J=(0,O.Mz)([function(e){return e.users.table.sort},Y],(function(e,r){return(0,$.gn)(r,e)})),K=function(e){return e.users.editUser},X=t(59578),ee=t(51806),re=t(64922),te=function(){var e=(0,c.wA)(),r=(0,n.useCallback)((function(){e(M())}),[]);return(0,c.d4)(y.A7)?(0,re.jsx)(ee.A,{view:"action",onClick:r,children:"Create new"}):null},ne=(0,a.A)("users-page-filters"),ae=function(e){(0,o.A)(t,e);var r=(0,l.A)(t);function t(){var e;(0,i.A)(this,t);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=r.call.apply(r,[this].concat(a))).toggleBannedFilter=function(){var r=e.props,t=r.bannedFilter;(0,r.setUsersBannedFilter)(!t)},e}return(0,u.A)(t,[{key:"render",value:function(){var e=this,r=this.props,t=r.className,n=r.nameFilter,a=r.groupFilter,s=r.bannedFilter;return(0,re.jsx)(D.M,{className:ne(null,t),itemsToWrap:[{name:"name",node:(0,re.jsx)(m.A,{className:ne("username-filter"),hasClear:!0,size:"m",type:"text",value:n,placeholder:"User name filter...",onChange:this.props.setUsersNameFilter}),shrinkable:!0,growable:!0,wrapperClassName:ne("item")},{name:"group",node:(0,re.jsx)(X.Qw,{children:(0,re.jsx)(T.A,{className:ne("group-suggest"),value:a?[a]:void 0,placeholder:"Group name filter...",onChange:function(r){return e.props.setUsersGroupFilter(r[0])}})}),shrinkable:!0,growable:!0,wrapperClassName:ne("item")},{name:"banned",node:(0,re.jsx)(d.S,{size:"l",checked:s,content:"Banned",onChange:this.toggleBannedFilter})}],children:(0,re.jsx)(te,{})})}}]),t}(n.Component),se={setUsersBannedFilter:function(e){return{type:w.Nx,data:{bannedFilter:e}}},setUsersNameFilter:function(e){return{type:w.Nx,data:{nameFilter:e}}},setUsersGroupFilter:function(e){return{type:w.Nx,data:{groupFilter:e||""}}}};const ie=(0,c.Ng)((function(e){return{bannedFilter:W(e),nameFilter:L(e),groupFilter:Z(e)}}),se)(ae);var ue=t(40319),oe=t(27222),le=t(34413),ce=t(62640),de=t(77318),me=t(34380),pe=t(63588),fe=t(95664),he=t(28407),ve=t(70232),ge=t.n(ve),_e=t(20361),be=t(31470),Ae=t.n(be),we=t(75414),ye=t.n(we),xe=t(29081),Ce=t(84092),Ne=t.n(Ce),qe=t(88034),je=function(e){var r=e.username;return Ne().v3.create({parameters:{type:"user",attributes:{name:r}}})},Ue=["idm","groups","newGroups","password"],ke=(0,a.A)("users-page-editor"),Fe=function(e){(0,o.A)(t,e);var r=(0,l.A)(t);function t(){var e;(0,i.A)(this,t);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=r.call.apply(r,[this].concat(a))).state={},e.onAdd=function(){var r=(0,he.A)(ge().mark((function r(t){var n,a,s,i,u,o,l,c,d,m,h,v,g,_,b,w,y;return ge().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(n=t.getState(),a=n.values,s=a.general,i=a.groups,u=a.ban,o=a.password,(l=(0,ue.A)((0,ue.A)({idm:s.idm,read_request_rate_limit:s.read_request_rate_limit.value,request_queue_size_limit:s.request_queue_size_limit.value,write_request_rate_limit:s.write_request_rate_limit.value,password:o.password},i),u)).idm,c=l.groups,d=l.newGroups,m=l.password,h=(0,f.A)(l,Ue),v=(0,p.A)(c,1),g=v[0],_=A()(V()(null==g?void 0:g.data,"removed"),"title"),(b=ye()(h,(function(r,t,n){return Ae()(t,e.props[n])||(r[n]=t),r}),{})).ban_message||e.props.ban_message||delete b.ban_message,!e.isNewUser()){r.next=21;break}return w=s.name,y=w,r.prev=10,r.next=13,je({username:w});case 13:r.next=19;break;case 15:return r.prev=15,r.t0=r.catch(10),e.setState({error:r.t0}),r.abrupt("return",Promise.reject(r.t0));case 19:r.next=23;break;case 21:w=e.props.username,y=s.name;case 23:return r.abrupt("return",e.props.saveUserData({username:w,newName:y,attributes:b,groupsToAdd:d,groupsToRemove:_,password:m}).then((function(){e.props.fetchUsers()})).catch((function(r){return e.setState({error:r}),Promise.reject(r)})));case 24:case"end":return r.stop()}}),r,null,[[10,15]])})));return function(e){return r.apply(this,arguments)}}(),e.onClose=function(){e.props.closeUserEditorModal()},e}return(0,u.A)(t,[{key:"isNewUser",value:function(){return!this.props.username}},{key:"render",value:function(){var e=this.props,r=e.className,a=e.showModal,s=e.username,i=e.idm,u=e.banned,o=e.ban_message,l=e.member_of,c=e.read_request_rate_limit,d=e.request_queue_size_limit,m=e.write_request_rate_limit,p=e.groupAttributesMap,f=e.isUserManagementEnabled,h=(0,_e.Y)([this.state.error]);return(0,re.jsxs)(n.Fragment,{children:[(0,re.jsx)(X.Qw,{}),(0,re.jsx)(_e.yZ,{className:ke(null,r),headerProps:{title:this.isNewUser()?"Create user":"User ".concat(s)},size:"l",initialValues:{general:{idm:void 0===i?"":String(i),name:s,read_request_rate_limit:{value:c||1},request_queue_size_limit:{value:d||1},write_request_rate_limit:{value:m||1}},groups:{newGroups:[],groups:t.prepareCurrent(l,p),comment:""},ban:{banned:u||!1,ban_message:o},password:{password:"",passwordConfirm:""}},onAdd:this.onAdd,visible:Boolean(a),onClose:this.onClose,fields:[{type:"tab-vertical",name:"general",title:"General",fields:[].concat((0,z.A)((0,xe.Gq)()?[{type:"plain",name:"idm",caption:"IDM"}]:[]),(0,z.A)(f?[{name:"name",type:"text",required:!0,caption:"Name"}]:[]),[{type:"number",name:"request_queue_size_limit",caption:"Request queue size limit",extras:{min:1,hidePrettyValue:!0}},{type:"number",name:"read_request_rate_limit",caption:"Read request rate limit",extras:{min:1,hidePrettyValue:!0}},{type:"number",name:"write_request_rate_limit",caption:"Write request rate limit",extras:{min:1,hidePrettyValue:!0}}],(0,z.A)(h))}].concat((0,z.A)((0,xe.Gq)()?[{type:"tab-vertical",name:"groups",title:"Groups",fields:[{type:"yt-group",name:"newGroups",caption:"Groups",extras:{multiple:!0,showTags:!0,disabled:!(0,xe.Gq)(),maxVisibleValues:3,placeholder:"Enter group name"}},{name:"groups",type:"multi-editable-lists",caption:"",extras:{titleClassName:ke("list-title")}},{name:"comment",caption:"Comment for IDM",type:"textarea",extras:{disabled:!(0,xe.Gq)()}}].concat((0,z.A)(h))}]:[]),[{type:"tab-vertical",name:"ban",title:"Ban",fields:[{type:"tumbler",name:"banned",caption:"Ban user"},{type:"textarea",name:"ban_message",caption:"Ban message"}].concat((0,z.A)(h))}],(0,z.A)(f?[{type:"tab-vertical",name:"password",title:"Password",fields:[{name:"password",type:"text",caption:"New password",extras:function(){return{type:"password"}}},{name:"passwordConfirm",type:"text",caption:"Confirm password",extras:function(){return{type:"password"}}}].concat((0,z.A)(h))}]:[])),validate:function(e){var r=e.password,t={};return r.password!==r.passwordConfirm&&(t.password="New and confirm password must be equal"),{password:t}}})]})}}],[{key:"prepareGroups",value:function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((function(r){var t=e[r];return{title:r,frozen:!C.Mv.get(null==t?void 0:t.upravlyator_managed)}}))}},{key:"prepareCurrent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return[{title:"Current",data:t.prepareGroups(e,r)}].filter((function(e){return e.data.length}))}}]),t}(n.Component),Se={closeUserEditorModal:function(){return{type:w.Zc,data:{showModal:!1,username:""}}},saveUserData:function(e){var r=e.username,t=e.newName,n=e.attributes,a=e.groupsToAdd,s=e.groupsToRemove,i=e.password;return function(e,u){e({type:w.aD.REQUEST});var o="//sys/users/".concat(r),l=[],c=n.comment,d=(0,f.A)(n,k);_()(d,(function(e,r){l.push({command:"set",parameters:{path:"".concat(o,"/@").concat(r)},input:e})})),t!==r&&l.push({command:"set",parameters:{path:"".concat(o,"/@name")},input:t});var m=u(),h=(0,y.dB)(m);return Promise.all([B(h,r,a,c),E(h,r,s),R({username:r,password:i}),l.length&&q.Qq.executeBatch(q.Vu.usersSaveData,{requests:l})].filter(Boolean)).then((function(r){var t=(0,p.A)(r,4),n=(t[0],t[1],t[2],t[3]),a=(0,N.$7)(n,"Failed to save user's data");if(a)throw a;e({type:w.aD.SUCCESS,data:{}}),e(G())})).catch((function(r){var t,n=(null==r||null===(t=r.response)||void 0===t?void 0:t.data)||r;return e({type:w.aD.FAILURE,data:n}),Promise.reject(n)}))}},fetchUsers:G};const Ge=(0,c.Ng)((function(e){var r=K(e),t=r.showModal,n=r.username,a=r.data,s=a&&n===a.name?a:{};return(0,ue.A)((0,ue.A)({showModal:t,username:n},s),{},{groupAttributesMap:(0,y.CS)(e),isUserManagementEnabled:(0,y.A7)(e)})}),Se)(Fe);var Me=t(85137),Ee=function(){var e=(0,c.wA)(),r=n.useState(void 0),t=(0,p.A)(r,2),a=t[0],s=t[1],i=(0,c.d4)((function(e){return e.users.deleteUser.usernameToDelete})),u=(0,n.useCallback)((function(){e((function(e){e(qe.u.actions.setModalState({usernameToDelete:""}))}))}),[e]),o=(0,n.useCallback)((0,he.A)(ge().mark((function r(){return ge().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,s(void 0),r.next=4,void 0,t=i,Ne().v3.remove({parameters:{path:"//sys/users/".concat(t)}});case 4:u(),e(G()),r.next=11;break;case 8:r.prev=8,r.t0=r.catch(0),s(r.t0);case 11:case"end":return r.stop()}var t}),r,null,[[0,8]])}))),[e,i,u]);return(0,re.jsx)(_e.yZ,{visible:Boolean(i),headerProps:{title:"Delete user ".concat(i)},pristineSubmittable:!0,onClose:u,onAdd:o,fields:[{name:"username",type:"block",extras:{children:(0,re.jsxs)(Me.E,{children:['Are you sure you want to delete "',i,'"?']})}}].concat((0,z.A)((0,_e.Y)([a])))})},Be=t(14880),Re=t(42324),Te=t(76426),De=t(60620),ze=(0,a.A)("yt-user-actions"),Pe=function(e){var r,t=e.className,a=e.cluster,s=e.username,i=(0,c.wA)(),u=(0,n.useCallback)((function(){i(M(s))}),[s,i]),o=(0,n.useCallback)((function(){var e;i((e=s,function(r){r(qe.u.actions.setModalState({usernameToDelete:e}))}))}),[s,i]);return r=(0,c.d4)(y.A7)?(0,re.jsx)(ee.A,{view:"flat-secondary",size:"m",onClick:o,children:(0,re.jsx)(De.A,{awesome:"trash-bin"})}):null,(0,re.jsxs)("div",{className:ze(null,t),children:[(0,re.jsx)(Re.A,{url:j.Ay.makeUrlForUserDashboard(a,s)}),(0,re.jsx)(Te.A,{routed:!0,url:Ve(a,s),children:"</>"}),(0,re.jsx)(Be.A,{title:s,path:"//sys/users/".concat(s)}),(0,re.jsx)(ee.A,{view:"flat-secondary",size:"m",onClick:u,children:(0,re.jsx)(De.A,{awesome:"pencil-alt"})}),r]})};function Ve(e,r){return"/".concat(e,"/operations?mode=list&user=").concat(r,"&state=all")}var Ie=(0,a.A)("users-page-table"),Qe={displayIndices:!1,stickyHead:oe.Ay.MOVING,stickyTop:s.kB,syncHeadOnResize:!0,dynamicRender:!0},Oe={name:"Name",banned:"Banned",member_of:"Groups",transitiveGroups:"Transitive groups",request_queue_size_limit:"Request queue",read_request_rate_limit:"Read request rate",write_request_rate_limit:"Write request rate",upravlyator_managed:"IDM",actions:""},$e={banned:"B",request_queue_size_limit:"RQ",read_request_rate_limit:"RRR",write_request_rate_limit:"WRR"},He=function(e){(0,o.A)(t,e);var r=(0,l.A)(t);function t(){var e;(0,i.A)(this,t);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=r.call.apply(r,[this].concat(a))).renderColumnHeader=function(r,t){var n=e.props.sort,a=n.column,s=n.order,i=r===a,u=Oe[r];return(0,re.jsx)(le.A,{className:Ie("header-cell",{col:r,sortable:t},"data-table__head-cell"),column:r,title:u,shortTitle:$e[r]||u,order:i?s:"",onSort:e.onColumnSort,withUndefined:!0})},e.onColumnSort=function(r,t){(0,e.props.setUsersPageSorting)({column:r,order:t})},e.renderIdmCell=function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row.upravlyator_managed;return(0,re.jsx)("div",{className:Ie("content",{col:e}),children:(0,re.jsx)("div",{className:Ie(e),children:r&&r.toString()})})},e.renderNumberCell=function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,re.jsx)("div",{className:Ie("content",{col:e}),children:(0,re.jsx)("span",{children:r})})},e.renderActionsCell=function(e,r){var t=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).row.name;return(0,re.jsx)(Pe,{className:Ie("content",{col:e}),username:t,cluster:r})},e}return(0,u.A)(t,[{key:"componentDidMount",value:function(){(0,this.props.fetchUsers)()}},{key:"renderNameCell",value:function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,t=r.name,n=r.upravlyator_managed;return(0,re.jsx)("div",{className:Ie("content",{col:e}),children:(0,re.jsx)(fe.R,{name:t,internal:!n})})}},{key:"renderBannedCell",value:function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,t=r.banned,n=r.ban_message;return(0,re.jsx)(me.m,{content:n,children:(0,re.jsx)("div",{className:Ie("content",{col:e}),children:t&&(0,re.jsx)("span",{className:Ie(e),children:"B"})})})}},{key:"renderGroupsCell",value:function(e){var r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,re.jsx)("div",{className:Ie("content",{col:e}),children:(0,re.jsx)(ce.A,{className:Ie("groups"),items:r})})}},{key:"renderTable",value:function(){var e=this,r=this.props,t=r.cluster,n=r.users,a=r.loaded,s=r.loading,i=function(r){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{name:r,align:oe.Ay.LEFT,sortable:!1,className:Ie("td",{col:r.toLowerCase()}),header:e.renderColumnHeader(r,!t)}},u=!0,o=[(0,ue.A)((0,ue.A)({},i("name")),{},{render:this.renderNameCell.bind(this,"name")}),(0,ue.A)((0,ue.A)({},i("banned")),{},{render:this.renderBannedCell.bind(this,"banned"),align:oe.Ay.CENTER})].concat((0,z.A)((0,xe.Gq)()?[(0,ue.A)((0,ue.A)({},i("upravlyator_managed")),{},{render:this.renderIdmCell.bind(this,"upravlyator_managed")})]:[]),[(0,ue.A)((0,ue.A)({},i("member_of",u)),{},{render:this.renderGroupsCell.bind(this,"member_of")}),(0,ue.A)((0,ue.A)({},i("transitiveGroups",u)),{},{render:this.renderGroupsCell.bind(this,"transitiveGroups")}),(0,ue.A)((0,ue.A)({},i("request_queue_size_limit")),{},{render:this.renderNumberCell.bind(this,"request_queue_size_limit"),align:"right"}),(0,ue.A)((0,ue.A)({},i("read_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"read_request_rate_limit"),align:"right"}),(0,ue.A)((0,ue.A)({},i("write_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"write_request_rate_limit"),align:"right"}),(0,ue.A)((0,ue.A)({},i("actions")),{},{header:"",render:this.renderActionsCell.bind(this,"actions",t)})]);return(0,re.jsx)(de.Ay,{loaded:a,loading:s,className:Ie("table"),data:n,columns:o,settings:Qe,theme:"yt-internal"})}},{key:"render",value:function(){var e=this.props,r=e.className,t=e.error,n=e.showModal;return(0,re.jsx)("div",{className:Ie(null,r),children:(0,re.jsxs)(pe.A,{loaded:!0,error:Boolean(t),errorData:t||null,children:[this.renderTable(),n&&(0,re.jsx)(Ge,{}),(0,re.jsx)(Ee,{})]})})}}]),t}(n.Component),Le={fetchUsers:G,setUsersPageSorting:function(e){var r=e.column,t=e.order,n={column:r,order:t};return t||(n.column=""),{type:w.Nx,data:{sort:n}}}};const Ze=(0,c.Ng)((function(e){var r=function(e){return e.users.table}(e),t=r.loaded,n=r.loading,a=r.error,s=r.sort,i=K(e).showModal;return{loaded:t,loading:n,error:a,users:J(e),sort:s,cluster:(0,y.dB)(e),showModal:i}}),Le)(He);var We=(0,a.A)("users-page");function Ye(){return(0,re.jsx)("div",{className:We(null,"elements-main-section"),children:(0,re.jsx)(s.Ay,{className:"elements-section",toolbar:(0,re.jsx)(ie,{}),content:(0,re.jsx)(Ze,{})})})}},15801:(e,r,t)=>{t.d(r,{s:()=>u});var n=t(13322),a=t(28407),s=t(70232),i=t.n(s);function u(e){return o.apply(this,arguments)}function o(){return(o=(0,a.A)(i().mark((function e(r){var t;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.digest("SHA-256",(new TextEncoder).encode(r));case 2:return t=e.sent,e.abrupt("return",(0,n.A)(new Uint8Array(t)).map((function(e){return("00"+e.toString(16)).slice(-2)})).join(""));case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}}}]);
2
- //# sourceMappingURL=users.726d69e0.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/users.726d69e0.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/GroupSuggest/GroupSuggest.tsx","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.js","webpack://@ytsaurus/ui/./src/ui/utils/sha256.ts"],"sourcesContent":["import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\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 className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\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 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}\n\nfunction GroupSuggest(props: Props) {\n const {items, width, multiple, onChange, placeholder, className, showTags, value, ...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\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 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';\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];\n\nexport function prepareUserData(item) {\n const {\n $attributes: {member_of: groups, member_of_closure: allGroups, upravlyator_managed: idm},\n } = item;\n groups.sort();\n allGroups.sort();\n item.$attributes.idm = flags.get(idm || false);\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 />\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';\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 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';\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 // 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 {isIdmAclAvailable} from '../../../config';\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 upravlyator_managed: 'IDM',\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 renderIdmCell = (col, {row} = {}) => {\n const {upravlyator_managed: idm} = row;\n return (\n <div className={block('content', {col})}>\n <div className={block(col)}>{idm && idm.toString()}</div>\n </div>\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 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 ...(!isIdmAclAvailable()\n ? []\n : [\n {\n ...columnProps('upravlyator_managed'),\n render: this.renderIdmCell.bind(this, 'upravlyator_managed'),\n },\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 className=\"elements-section\"\n toolbar={<UsersPageFilters />}\n content={<UsersPageTable />}\n />\n </div>\n );\n}\n","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"],"names":["ChartLink","props","className","url","title","theme","children","hideIcon","face","wrapContent","icon","_jsx","Icon","awesome","content","_jsxs","React","Link","target","useAllUserNamesFiltered","dispatch","useDispatch","loadUsersIfNotLoaded","namesSorted","useSelector","getAllUserNamesSorted","getFiltered","text","from","sortedIndexBy_","item","substr","length","to","sortedLastIndexBy_","slice","allNames","useGroupsLoaded","loadGroupsIfNotLoaded","GroupsLoader","_ref","block","cn","GroupSuggest","items","width","multiple","onChange","placeholder","showTags","value","rest","_objectWithoutProperties","_excluded","ycItems","map_","empty","listValue","concat_","onListChange","newList","res","filter_","removed","map","_ref2","Select","_objectSpread","onUpdate","filterable","disablePortal","EditableList","isEmpty","getDefaultValue","connect","state","ownProps","idmOnly","getAllIdmGroupNamesSorted","getAllGroupNamesSorted","USER_ATTRIBUTES","prepareUserData","_item$$attributes","$attributes","groups","member_of","allGroups","member_of_closure","idm","upravlyator_managed","sort","flags","get","difference_","fetchUsers","type","USERS_TABLE","REQUEST","listAllUsers","YTApiId","usersData","attributes","then","data","users","forEach_","push","SUCCESS","error","FAILURE","showUserEditorModal","username","USERS_EDIT_USER","path","concat","ytApiV3Id","usersEditData","USERS_EDIT_USER_DATA_FIELDS","showModal","removeUserFromGroups","cluster","Promise","all","groupname","UIFactory","getAclApi","removeUserFromGroup","addUserToGroups","comment","addUserToGroup","changeUserPassword","password","sha256","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","Boolean","concatByAnd","apply","_toConsumableArray","getUsersFilteredAndSorted","sortState","sortArrayBySortState","getUsersPageEditableUser","editUser","ShowCreateUserModalButton","onClick","useCallback","getUserManagementEnabled","Button","view","UsersPageFilters","_React$Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","args","Array","_key","call","toggleBannedFilter","_this$props","setUsersBannedFilter","_createClass","key","_this2","_this$props2","this","Toolbar","itemsToWrap","node","Filter","hasClear","size","setUsersNameFilter","shrinkable","growable","wrapperClassName","undefined","vals","setUsersGroupFilter","Checkbox","checked","mapDispatchToProps","USERS_TABLE_DATA_FIELDS","createUser","yt","create","UsersPageEditor","onAdd","_asyncToGenerator","_regeneratorRuntime","_callee","form","_form$getState","_form$getState$values","generalTab","groupsTab","banTab","passwordTab","fields","newGroups","newPassword","_groups","current","groupsToRemove","changedFields","newName","_context","prev","next","getState","values","general","ban","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","_slicedToArray","reduce_","acc","fieldName","isEqual_","isNewUser","t0","setState","abrupt","reject","saveUserData","groupsToAdd","stop","_x","onClose","closeUserEditorModal","banMessage","ban_message","rrrl","rqsl","wrrl","groupAttributesMap","isUserManagementEnabled","errors","makeErrorFields","YTDFDialog","headerProps","initialValues","String","prepareCurrent","passwordConfirm","visible","isIdmAclAvailable","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","makeUrlForUserDashboard","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","renderIdmCell","row","toString","renderNumberCell","renderActionsCell","SubjectCard","internal","Tooltip","CommaSeparatedListWithRestCounter","loaded","loading","columnProps","disableSorting","align","LEFT","toLowerCase","header","DISABLED_SORTING","columns","render","renderNameCell","bind","renderBannedCell","CENTER","renderGroupsCell","DataTableYT","settings","LoadDataHandler","errorData","renderTable","_getUsersTableDataSta","getUsersTableDataState","UsersPage","WithStickyToolbar","toolbar","_sha","str","buf","crypto","subtle","digest","TextEncoder","encode","sent","Uint8Array","x","join"],"sourceRoot":""}