@ytsaurus/ui 1.64.0 → 1.66.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 (80) hide show
  1. package/README.md +7 -0
  2. package/dist/public/build/assets-manifest.json +45 -45
  3. package/dist/public/build/css/{577.b41224cd.chunk.css → 577.f8556dcc.chunk.css} +2 -2
  4. package/dist/public/build/css/577.f8556dcc.chunk.css.map +1 -0
  5. package/dist/public/build/css/{cluster-menu.1242e46d.chunk.css → cluster-menu.d8cafef3.chunk.css} +2 -2
  6. package/dist/public/build/css/cluster-menu.d8cafef3.chunk.css.map +1 -0
  7. package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css +2 -0
  8. package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css.map +1 -0
  9. package/dist/public/build/css/{groups.dc21afeb.chunk.css → groups.7e103f52.chunk.css} +2 -2
  10. package/dist/public/build/css/groups.7e103f52.chunk.css.map +1 -0
  11. package/dist/public/build/css/main.fb5dcfa3.css +10 -0
  12. package/dist/public/build/css/{main.b2af1626.css.map → main.fb5dcfa3.css.map} +1 -1
  13. package/dist/public/build/css/users.c7f945d8.chunk.css +2 -0
  14. package/dist/public/build/css/users.c7f945d8.chunk.css.map +1 -0
  15. package/dist/public/build/js/2081.b642c3c2.chunk.js +2 -0
  16. package/dist/public/build/js/{2081.56ca6548.chunk.js.map → 2081.b642c3c2.chunk.js.map} +1 -1
  17. package/dist/public/build/js/4016.37d0a2f0.chunk.js +3 -0
  18. package/dist/public/build/js/4016.37d0a2f0.chunk.js.map +1 -0
  19. package/dist/public/build/js/{6729.91ef11dc.chunk.js → 6729.8bcf51ba.chunk.js} +2 -2
  20. package/dist/public/build/js/6729.8bcf51ba.chunk.js.map +1 -0
  21. package/dist/public/build/js/{7077.7dab612c.chunk.js → 7077.fb18710a.chunk.js} +2 -2
  22. package/dist/public/build/js/7077.fb18710a.chunk.js.map +1 -0
  23. package/dist/public/build/js/acl.19d28cd7.chunk.js +2 -0
  24. package/dist/public/build/js/acl.19d28cd7.chunk.js.map +1 -0
  25. package/dist/public/build/js/{cluster-page-wrapper.eddde18f.chunk.js → cluster-page-wrapper.4e54efc0.chunk.js} +2 -2
  26. package/dist/public/build/js/cluster-page-wrapper.4e54efc0.chunk.js.map +1 -0
  27. package/dist/public/build/js/job.bddddc9e.chunk.js +2 -0
  28. package/dist/public/build/js/job.bddddc9e.chunk.js.map +1 -0
  29. package/dist/public/build/js/main.b6bc90de.js +3 -0
  30. package/dist/public/build/js/main.b6bc90de.js.map +1 -0
  31. package/dist/public/build/js/manage-tokens.41b0ae91.chunk.js +2 -0
  32. package/dist/public/build/js/manage-tokens.41b0ae91.chunk.js.map +1 -0
  33. package/dist/public/build/js/navigation-flow.c43f2927.chunk.js +2 -0
  34. package/dist/public/build/js/navigation-flow.c43f2927.chunk.js.map +1 -0
  35. package/dist/public/build/js/navigation.e4272357.chunk.js +2 -0
  36. package/dist/public/build/js/navigation.e4272357.chunk.js.map +1 -0
  37. package/dist/public/build/js/{runtime.7752c183.js → runtime.3fda2b25.js} +2 -2
  38. package/dist/public/build/js/{runtime.7752c183.js.map → runtime.3fda2b25.js.map} +1 -1
  39. package/dist/public/build/js/system.92b7afc7.chunk.js +2 -0
  40. package/dist/public/build/js/system.92b7afc7.chunk.js.map +1 -0
  41. package/dist/public/build/js/users.726d69e0.chunk.js +2 -0
  42. package/dist/public/build/js/users.726d69e0.chunk.js.map +1 -0
  43. package/dist/public/build/manifest.json +40 -40
  44. package/dist/public/favicon-dorn-yellow.png +0 -0
  45. package/dist/public/favicon-rubber.png +0 -0
  46. package/dist/server/components/layout-config.js +1 -1
  47. package/dist/server/configs/e2e/local.js +4 -0
  48. package/package.json +2 -2
  49. package/dist/public/build/css/577.b41224cd.chunk.css.map +0 -1
  50. package/dist/public/build/css/cluster-menu.1242e46d.chunk.css.map +0 -1
  51. package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css +0 -2
  52. package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +0 -1
  53. package/dist/public/build/css/groups.dc21afeb.chunk.css.map +0 -1
  54. package/dist/public/build/css/main.b2af1626.css +0 -10
  55. package/dist/public/build/css/users.c3fc47fb.chunk.css +0 -2
  56. package/dist/public/build/css/users.c3fc47fb.chunk.css.map +0 -1
  57. package/dist/public/build/js/2081.56ca6548.chunk.js +0 -2
  58. package/dist/public/build/js/4016.03291f63.chunk.js +0 -3
  59. package/dist/public/build/js/4016.03291f63.chunk.js.map +0 -1
  60. package/dist/public/build/js/6729.91ef11dc.chunk.js.map +0 -1
  61. package/dist/public/build/js/7077.7dab612c.chunk.js.map +0 -1
  62. package/dist/public/build/js/acl.cd1fe761.chunk.js +0 -2
  63. package/dist/public/build/js/acl.cd1fe761.chunk.js.map +0 -1
  64. package/dist/public/build/js/cluster-page-wrapper.eddde18f.chunk.js.map +0 -1
  65. package/dist/public/build/js/job.31c91355.chunk.js +0 -2
  66. package/dist/public/build/js/job.31c91355.chunk.js.map +0 -1
  67. package/dist/public/build/js/main.693c4cb1.js +0 -3
  68. package/dist/public/build/js/main.693c4cb1.js.map +0 -1
  69. package/dist/public/build/js/manage-tokens.1c4ee171.chunk.js +0 -2
  70. package/dist/public/build/js/manage-tokens.1c4ee171.chunk.js.map +0 -1
  71. package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js +0 -2
  72. package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js.map +0 -1
  73. package/dist/public/build/js/navigation.c8c7b9cc.chunk.js +0 -2
  74. package/dist/public/build/js/navigation.c8c7b9cc.chunk.js.map +0 -1
  75. package/dist/public/build/js/system.57ed0f9d.chunk.js +0 -2
  76. package/dist/public/build/js/system.57ed0f9d.chunk.js.map +0 -1
  77. package/dist/public/build/js/users.9e82942b.chunk.js +0 -2
  78. package/dist/public/build/js/users.9e82942b.chunk.js.map +0 -1
  79. /package/dist/public/build/js/{4016.03291f63.chunk.js.LICENSE.txt → 4016.37d0a2f0.chunk.js.LICENSE.txt} +0 -0
  80. /package/dist/public/build/js/{main.693c4cb1.js.LICENSE.txt → main.b6bc90de.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_ytsaurus_ui=self.webpackChunk_ytsaurus_ui||[]).push([[8809],{42324:(e,t,r)=>{r.d(t,{A:()=>l});var n=r(77810),a=r(76426),s=r(60620),i=r(64922);function u(e){var t=e.className,r=e.url,u=e.title,l=e.theme,o=e.children,c=e.hideIcon,d=e.face,m=e.wrapContent;if(!r)return null;var p=c?null:(0,i.jsx)(s.A,{awesome:"chart-bar",face:d}),h=o?(0,i.jsxs)(n.Fragment,{children:[p,o]}):p;return(0,i.jsx)(a.A,{className:t,target:"_blank",theme:l,url:r,title:null!=u?u:"View",children:m?m(h):h})}const l=n.memo(u)},59578:(e,t,r)=>{r.d(t,{Qw:()=>p,dF:()=>d,jx:()=>m});var n=r(77810),a=r(15647),s=r(80676),i=r.n(s),u=r(88144),l=r.n(u),o=r(52797),c=r(53246);function d(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.uU)())}),[]);var t=(0,a.d4)(o.mz);return{getFiltered:n.useCallback((function(e){var r=i()(t,e,(function(t){return t.substr(0,e.length)})),n=l()(t,e,(function(t){return t.substr(0,e.length)}));return t.slice(r,n)}),[t]),allNames:t}}function m(){var e=(0,a.wA)();n.useEffect((function(){e((0,c.qR)())}),[])}function p(e){var t=e.children;return m(),null!=t?t:null}},64197:(e,t,r)=>{r.d(t,{A:()=>y});var n=r(40319),a=r(18801),s=r(77810),i=r(15647),u=r(53144),l=r.n(u),o=r(49214),c=r.n(o),d=r(27528),m=r.n(d),p=r(76872),h=r(20361),v=r(52797),f=r(50074),_=r(64922),g=["items","width","multiple","onChange","placeholder","className","showTags","value"],b=(0,p.A)("group-suggest");function A(e){var t=e.items,r=e.width,i=e.multiple,u=e.onChange,o=e.placeholder,d=e.className,p=e.showTags,v=e.value,A=(0,a.A)(e,g),y=m()(t,(function(e){return{value:e,text:e}})),w=!(null!=v&&v.length),x=s.useMemo((function(){return m()(l()([],v),(function(e){return{title:e}}))}),[v]),q=s.useCallback((function(e){var t=c()(e,(function(e){return!e.removed})).map((function(e){return e.title}));u(t)}),[v,u]);return(0,_.jsxs)("div",{className:b({empty:w},d),children:[(0,_.jsx)(f.A,(0,n.A)((0,n.A)({},A),{},{items:y,onUpdate:u,placeholder:o,value:e.value,multiple:i,width:null!=r?r:"max",filterable:!0,disablePortal:!0})),i&&p&&(0,_.jsx)(h.Vm,{onChange:q,value:x})]})}A.isEmpty=function(e){return!(null!=e&&e.length)},A.getDefaultValue=function(){return[]};const y=(0,i.Ng)((function(e,t){return{items:t.idmOnly?(0,v.yP)(e):(0,v.Gd)(e)}}))(A)},36825:(e,t,r)=>{r.r(t),r.d(t,{UsersPage:()=>Te});var n=r(77810),a=r(76872),s=r(83534),i=r(29121),u=r(12937),l=r(10785),o=r(26718),c=r(15647),d=r(16413),m=r(84162),p=r(9736),h=r(18801),v=r(40843),f=r.n(v),_=r(39760),g=r.n(_),b=r(27528),A=r.n(b),y=r(91414),w=r(52797),x=r(88681),q=r(53332),C=r(48971),N=r(64714),j=r(7787),U=["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 G(e){var t=e.$attributes,r=t.member_of,n=t.member_of_closure,a=t.upravlyator_managed;return r.sort(),n.sort(),e.$attributes.idm=q.Mv.get(a||!1),e.$attributes.transitiveGroups=f()(n,r),e.$attributes}function M(){return function(e){return e({type:y.Oi.REQUEST}),(0,x.Q1)(N.Vu.usersData,{attributes:F}).then((function(t){var r=[];g()(t,(function(e){r.push(G(e))})),e({type:y.Oi.SUCCESS,data:{users:r}})})).catch((function(t){e({type:y.Oi.FAILURE,data:t})}))}}function k(e,t,r){return Promise.all(A()(r,(function(r){return j.Ay.getAclApi().removeUserFromGroup({cluster:e,username:t,groupname:r})})))}function E(e,t,r,n){return Promise.all(A()(r,(function(r){return j.Ay.getAclApi().addUserToGroup({cluster:e,username:t,groupname:r,comment:n})})))}var S=r(64197),B=r(33023),R=r(13322),z=r(49214),D=r.n(z),T=r(99564),P=r.n(T),V=r(18472),I=r(44458),Q=r(6184),O=function(e){return e.users.table.nameFilter},L=function(e){return e.users.table.groupFilter},$=function(e){return e.users.table.bannedFilter},H=(0,V.Mz)([function(e){return e.users.table.users},O,L,$],(function(e,t,r,n){var a=[t&&function(e){return-1!==e.name.indexOf(t)},r&&function(e){var t=e.member_of,n=e.transitiveGroups;return-1!==P()(t,r)||-1!==P()(n,r)},n&&function(e){return e.banned}].filter(Boolean);return 0===a.length?e:D()(e,Q.concatByAnd.apply(void 0,(0,R.A)(a)))})),W=(0,V.Mz)([function(e){return e.users.table.sort},H],(function(e,t){return(0,I.gn)(t,e)})),Z=function(e){return e.users.editUser},Y=r(59578),J=r(64922),K=(0,a.A)("users-page-filters"),X=function(e){(0,l.A)(r,e);var t=(0,o.A)(r);function r(){var e;(0,i.A)(this,r);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=t.call.apply(t,[this].concat(a))).toggleBannedFilter=function(){var t=e.props,r=t.bannedFilter;(0,t.setUsersBannedFilter)(!r)},e}return(0,u.A)(r,[{key:"render",value:function(){var e=this,t=this.props,r=t.className,n=t.nameFilter,a=t.groupFilter,s=t.bannedFilter;return(0,J.jsx)(B.M,{className:K(null,r),itemsToWrap:[{name:"name",node:(0,J.jsx)(m.A,{className:K("username-filter"),hasClear:!0,size:"m",type:"text",value:n,placeholder:"User name filter...",onChange:this.props.setUsersNameFilter}),shrinkable:!0,growable:!0,wrapperClassName:K("item")},{name:"group",node:(0,J.jsx)(Y.Qw,{children:(0,J.jsx)(S.A,{className:K("group-suggest"),value:a?[a]:void 0,placeholder:"Group name filter...",onChange:function(t){return e.props.setUsersGroupFilter(t[0])}})}),shrinkable:!0,growable:!0,wrapperClassName:K("item")},{name:"banned",node:(0,J.jsx)(d.S,{size:"l",checked:s,content:"Banned",onChange:this.toggleBannedFilter})}]})}}]),r}(n.Component),ee={setUsersBannedFilter:function(e){return{type:y.Nx,data:{bannedFilter:e}}},setUsersNameFilter:function(e){return{type:y.Nx,data:{nameFilter:e}}},setUsersGroupFilter:function(e){return{type:y.Nx,data:{groupFilter:e||""}}}};const te=(0,c.Ng)((function(e){return{bannedFilter:$(e),nameFilter:O(e),groupFilter:L(e)}}),ee)(X);var re=r(40319),ne=r(27222),ae=r(57614),se=r(14880),ie=r(34413),ue=r(62640),le=r(77318),oe=r(34380),ce=r(60620),de=r(76426),me=r(63588),pe=r(95664),he=r(28407),ve=r(70232),fe=r.n(ve),_e=r(20361),ge=r(31470),be=r.n(ge),Ae=r(75414),ye=r.n(Ae),we=r(29081),xe=["idm","groups","newGroups"],qe=(0,a.A)("users-page-editor"),Ce=function(e){(0,l.A)(r,e);var t=(0,o.A)(r);function r(){var e;(0,i.A)(this,r);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=t.call.apply(t,[this].concat(a))).state={},e.onAdd=function(){var t=(0,he.A)(fe().mark((function t(r){var n,a,s,i,u,l,o,c,d,m,v,f,_,g,b,y;return fe().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=r.getState(),a=n.values,s=a.general,i=a.groups,u=a.ban,(l=(0,re.A)((0,re.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},i),u)).idm,o=l.groups,c=l.newGroups,d=(0,h.A)(l,xe),m=(0,p.A)(o,1),v=m[0],f=A()(D()(null==v?void 0:v.data,"removed"),"title"),(_=ye()(d,(function(t,r,n){return be()(r,e.props[n])||(t[n]=r),t}),{})).ban_message||e.props.ban_message||delete _.ban_message,g=e.props,b=g.username,y=g.saveUserData,t.abrupt("return",y(b,_,c,f).catch((function(t){return e.setState({error:t}),Promise.reject(t)})));case 9:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.onClose=function(){e.props.closeUserEditorModal()},e}return(0,u.A)(r,[{key:"render",value:function(){var e=this.props,t=e.className,a=e.showModal,s=e.username,i=e.idm,u=e.banned,l=e.ban_message,o=e.member_of,c=e.read_request_rate_limit,d=e.request_queue_size_limit,m=e.write_request_rate_limit,p=e.groupAttributesMap,h=(0,_e.Y)([this.state.error]);return(0,J.jsxs)(n.Fragment,{children:[(0,J.jsx)(Y.Qw,{}),(0,J.jsx)(_e.yZ,{className:qe(null,t),headerProps:{title:"User ".concat(s)},size:"l",initialValues:{general:{idm:void 0===i?"":String(i),read_request_rate_limit:{value:c||1},request_queue_size_limit:{value:d||1},write_request_rate_limit:{value:m||1}},groups:{newGroups:[],groups:r.prepareCurrent(o,p),comment:""},ban:{banned:u||!1,ban_message:l}},onAdd:this.onAdd,visible:Boolean(a),onClose:this.onClose,fields:[{type:"tab-vertical",name:"general",title:"General",fields:[].concat((0,R.A)((0,we.Gq)()?[{type:"plain",name:"idm",caption:"IDM"}]:[]),[{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,R.A)(h))}].concat((0,R.A)((0,we.Gq)()?[{type:"tab-vertical",name:"groups",title:"Groups",fields:[{type:"yt-group",name:"newGroups",caption:"Groups",extras:{multiple:!0,showTags:!0,disabled:!(0,we.Gq)(),maxVisibleValues:3,placeholder:"Enter group name"}},{name:"groups",type:"multi-editable-lists",caption:"",extras:{titleClassName:qe("list-title")}},{name:"comment",caption:"Comment for IDM",type:"textarea",extras:{disabled:!(0,we.Gq)()}}].concat((0,R.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,R.A)(h))}])})]})}}],[{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(t){var r=e[t];return{title:t,frozen:!q.Mv.get(null==r?void 0:r.upravlyator_managed)}}))}},{key:"prepareCurrent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return[{title:"Current",data:r.prepareGroups(e,t)}].filter((function(e){return e.data.length}))}}]),r}(n.Component),Ne={closeUserEditorModal:function(){return{type:y.Zc,data:{showModal:!1,username:""}}},saveUserData:function(e,t,r,n){return function(a,s){a({type:y.aD.REQUEST});var i="//sys/users/".concat(e),u=[],l=t.comment,o=(0,h.A)(t,U);g()(o,(function(e,t){u.push({command:"set",parameters:{path:"".concat(i,"/@").concat(t)},input:e})}));var c=s(),d=(0,w.dB)(c);return Promise.all([E(d,e,r,l),k(d,e,n),u.length&&N.Qq.executeBatch(N.Vu.usersSaveData,{requests:u})].filter(Boolean)).then((function(e){var t=(0,p.A)(e,3),r=(t[0],t[1],t[2]),n=(0,C.$7)(r,"Failed to save user's data");if(n)throw n;a({type:y.aD.SUCCESS,data:{}}),a(M())})).catch((function(e){var t,r=(null==e||null===(t=e.response)||void 0===t?void 0:t.data)||e;return a({type:y.aD.FAILURE,data:r}),Promise.reject(r)}))}}};const je=(0,c.Ng)((function(e){var t=Z(e),r=t.showModal,n=t.username,a=t.data,s=a&&n===a.name?a:{};return(0,re.A)((0,re.A)({showModal:r,username:n},s),{},{groupAttributesMap:(0,w.CS)(e)})}),Ne)(Ce);var Ue=r(42324),Fe=(0,a.A)("users-page-table"),Ge={displayIndices:!1,stickyHead:ne.Ay.MOVING,stickyTop:s.kB,syncHeadOnResize:!0,dynamicRender:!0};function Me(e,t){return"/".concat(e,"/operations?mode=list&user=").concat(t,"&state=all")}function ke(e){var t=e.className,r=e.cluster,a=e.username,s=e.edit,i=e.showAttributes,u=n.useCallback((function(){s(a)}),[a,s]);return(0,J.jsxs)("div",{className:t,children:[(0,J.jsx)(Ue.A,{url:j.Ay.makeUrlForUserDashboard(r,a)}),(0,J.jsx)(de.A,{routed:!0,url:Me(r,a),children:"</>"}),(0,J.jsx)(se.A,{title:a,path:"//sys/users/".concat(a),openAttributesModal:i}),(0,J.jsx)(de.A,{onClick:u,className:Fe("edit-action"),children:(0,J.jsx)(ce.A,{awesome:"pencil-alt"})})]})}var Ee={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:""},Se={banned:"B",request_queue_size_limit:"RQ",read_request_rate_limit:"RRR",write_request_rate_limit:"WRR"},Be=function(e){(0,l.A)(r,e);var t=(0,o.A)(r);function r(){var e;(0,i.A)(this,r);for(var n=arguments.length,a=new Array(n),s=0;s<n;s++)a[s]=arguments[s];return(e=t.call.apply(t,[this].concat(a))).renderColumnHeader=function(t,r){var n=e.props.sort,a=n.column,s=n.order,i=t===a,u=Ee[t];return(0,J.jsx)(ie.A,{className:Fe("header-cell",{col:t,sortable:r},"data-table__head-cell"),column:t,title:u,shortTitle:Se[t]||u,order:i?s:"",onSort:e.onColumnSort,withUndefined:!0})},e.onColumnSort=function(t,r){(0,e.props.setUsersPageSorting)({column:t,order:r})},e.renderIdmCell=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row.upravlyator_managed;return(0,J.jsx)("div",{className:Fe("content",{col:e}),children:(0,J.jsx)("div",{className:Fe(e),children:t&&t.toString()})})},e.renderNumberCell=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,J.jsx)("div",{className:Fe("content",{col:e}),children:(0,J.jsx)("span",{children:t})})},e.renderActionsCell=function(t,r){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).row,a=e.props.openAttributesModal,s=n.name;return(0,J.jsx)(ke,{className:Fe("content",{col:t}),showAttributes:a,edit:e.editUser,username:s,cluster:r})},e.editUser=function(t){(0,e.props.showUserEditorModal)(t)},e}return(0,u.A)(r,[{key:"componentDidMount",value:function(){(0,this.props.fetchUsers)()}},{key:"renderNameCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,r=t.name,n=t.upravlyator_managed;return(0,J.jsx)("div",{className:Fe("content",{col:e}),children:(0,J.jsx)(pe.R,{name:r,internal:!n})})}},{key:"renderBannedCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row,r=t.banned,n=t.ban_message;return(0,J.jsx)(oe.m,{content:n,children:(0,J.jsx)("div",{className:Fe("content",{col:e}),children:r&&(0,J.jsx)("span",{className:Fe(e),children:"B"})})})}},{key:"renderGroupsCell",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).row[e];return(0,J.jsx)("div",{className:Fe("content",{col:e}),children:(0,J.jsx)(ue.A,{className:Fe("groups"),items:t})})}},{key:"renderTable",value:function(){var e=this,t=this.props,r=t.cluster,n=t.users,a=t.loaded,s=t.loading,i=function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{name:t,align:ne.Ay.LEFT,sortable:!1,className:Fe("td",{col:t.toLowerCase()}),header:e.renderColumnHeader(t,!r)}},u=!0,l=[(0,re.A)((0,re.A)({},i("name")),{},{render:this.renderNameCell.bind(this,"name")}),(0,re.A)((0,re.A)({},i("banned")),{},{render:this.renderBannedCell.bind(this,"banned"),align:ne.Ay.CENTER})].concat((0,R.A)((0,we.Gq)()?[(0,re.A)((0,re.A)({},i("upravlyator_managed")),{},{render:this.renderIdmCell.bind(this,"upravlyator_managed")})]:[]),[(0,re.A)((0,re.A)({},i("member_of",u)),{},{render:this.renderGroupsCell.bind(this,"member_of")}),(0,re.A)((0,re.A)({},i("transitiveGroups",u)),{},{render:this.renderGroupsCell.bind(this,"transitiveGroups")}),(0,re.A)((0,re.A)({},i("request_queue_size_limit")),{},{render:this.renderNumberCell.bind(this,"request_queue_size_limit"),align:"right"}),(0,re.A)((0,re.A)({},i("read_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"read_request_rate_limit"),align:"right"}),(0,re.A)((0,re.A)({},i("write_request_rate_limit")),{},{render:this.renderNumberCell.bind(this,"write_request_rate_limit"),align:"right"}),(0,re.A)((0,re.A)({},i("actions")),{},{header:"",render:this.renderActionsCell.bind(this,"actions",r)})]);return(0,J.jsx)(le.Ay,{loaded:a,loading:s,className:Fe("table"),data:n,columns:l,settings:Ge,theme:"yt-internal"})}},{key:"render",value:function(){var e=this.props,t=e.className,r=e.error,n=e.showModal;return(0,J.jsx)("div",{className:Fe(null,t),children:(0,J.jsxs)(me.A,{loaded:!0,error:Boolean(r),errorData:r||null,children:[this.renderTable(),n&&(0,J.jsx)(je,{})]})})}}]),r}(n.Component),Re={fetchUsers:M,setUsersPageSorting:function(e){var t=e.column,r=e.order,n={column:t,order:r};return r||(n.column=""),{type:y.Nx,data:{sort:n}}},openAttributesModal:ae.V6,showUserEditorModal:function(e){return function(t){t({type:y.aD.REQUEST});var r="//sys/users/".concat(e);return N.Qq.get(N.Vu.usersEditData,{path:r,attributes:F}).then((function(r){t({type:y.aD.SUCCESS,data:{data:G(r)}}),t({type:y.Zc,data:{showModal:!0,username:e}})})).catch((function(e){return t({type:y.aD.FAILURE,data:e})}))}}};const ze=(0,c.Ng)((function(e){var t=function(e){return e.users.table}(e),r=t.loaded,n=t.loading,a=t.error,s=t.sort,i=Z(e).showModal;return{loaded:r,loading:n,error:a,users:W(e),sort:s,cluster:(0,w.dB)(e),showModal:i}}),Re)(Be);var De=(0,a.A)("users-page");function Te(){return(0,J.jsx)("div",{className:De(null,"elements-main-section"),children:(0,J.jsx)(s.Ay,{className:"elements-section",toolbar:(0,J.jsx)(te,{}),content:(0,J.jsx)(ze,{})})})}}}]);
2
- //# sourceMappingURL=users.9e82942b.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/users.9e82942b.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/UsersPageFilters/UsersPageFilters.js","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageEditor/UsersPageEditor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPageTable/UsersPageTable.js","webpack://@ytsaurus/ui/./src/ui/pages/users/UsersPage.js"],"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} from '../../rum/rum-wrap-api';\nimport UIFactory from '../../UIFactory';\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 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\nexport function saveUserData(username, attributes, groupsToAdd, groupsToRemove) {\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 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 requests.length && ytApiV3Id.executeBatch(YTApiId.usersSaveData, {requests}),\n ].filter(Boolean),\n )\n // eslint-disable-next-line no-unused-vars\n .then(([addRes, removeRes, 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 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';\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 );\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","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, saveUserData} from '../../../store/actions/users';\nimport {getGlobalGroupAttributesMap} 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';\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\n closeUserEditorModal: () => void;\n saveUserData: (\n username: string,\n changedFields: Partial<Pick<Props, Exclude<Level2Keys, 'idm' | 'groups' | 'newGroups'>>>,\n newGroups: 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 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}\n\ntype Level2Keys =\n | keyof FormValues['general']\n | keyof FormValues['groups']\n | keyof FormValues['ban'];\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},\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 ...groupsTab,\n ...banTab,\n };\n\n const {idm: _idm, groups, newGroups, ...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 const {username, saveUserData} = this.props;\n return saveUserData(username, changedFields, newGroups, groupsToRemove).catch((error) => {\n this.setState({error});\n return Promise.reject(error);\n });\n };\n\n onClose = () => {\n this.props.closeUserEditorModal();\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 } = this.props;\n\n const errors = makeErrorFields([this.state.error]);\n return (\n <React.Fragment>\n <GroupsLoader />\n <YTDFDialog<FormValues>\n className={block(null, className)}\n headerProps={{\n title: `User ${username}`,\n }}\n size={'l'}\n initialValues={{\n general: {\n idm: idm === undefined ? '' : String(idm),\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 }}\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 {\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 ]}\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 };\n};\n\nconst mapDispatchToProps = {\n closeUserEditorModal,\n saveUserData,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersPageEditor);\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 {openAttributesModal} from '../../../store/actions/modals/attributes-modal';\nimport {fetchUsers, setUsersPageSorting, showUserEditorModal} from '../../../store/actions/users';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\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 Icon from '../../../components/Icon/Icon';\nimport Link from '../../../components/Link/Link';\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 {getCluster} from '../../../store/selectors/global';\nimport {\n getUsersFilteredAndSorted,\n getUsersPageEditableUser,\n getUsersTableDataState,\n} from '../../../store/selectors/users';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport {isIdmAclAvailable} from '../../../config';\n\nimport './UsersPageTable.scss';\nimport UIFactory from '../../../UIFactory';\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\nfunction userOperationsLink(cluster, user) {\n return `/${cluster}/operations?mode=list&user=${user}&state=all`;\n}\n\nUserActions.propTypes = {\n className: PropTypes.string,\n cluster: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n edit: PropTypes.func.isRequired,\n showAttributes: PropTypes.func.isRequired,\n};\n\nfunction UserActions({className, cluster, username, edit, showAttributes}) {\n const onEdit = React.useCallback(() => {\n edit(username);\n }, [username, edit]);\n\n return (\n <div className={className}>\n <ChartLink url={UIFactory.makeUrlForUserDashboard(cluster, username)} />\n <Link routed url={userOperationsLink(cluster, username)}>\n &lt;/&gt;\n </Link>\n <ClickableAttributesButton\n title={username}\n path={`//sys/users/${username}`}\n openAttributesModal={showAttributes}\n />\n <Link onClick={onEdit} className={block('edit-action')}>\n <Icon awesome=\"pencil-alt\" />\n </Link>\n </div>\n );\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 openAttributesModal: PropTypes.func.isRequired,\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 {openAttributesModal} = this.props;\n const {name: username} = row;\n return (\n <UserActions\n className={block('content', {col})}\n showAttributes={openAttributesModal}\n edit={this.editUser}\n username={username}\n cluster={cluster}\n />\n );\n };\n\n editUser = (username) => {\n const {showUserEditorModal} = this.props;\n showUserEditorModal(username);\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 </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 openAttributesModal,\n showUserEditorModal,\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"],"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","removeUserFromGroups","cluster","username","Promise","all","groupname","UIFactory","getAclApi","removeUserFromGroup","addUserToGroups","comment","addUserToGroup","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","UsersPageFilters","_React$Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","args","Array","_key","call","concat","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","UsersPageEditor","onAdd","_asyncToGenerator","_regeneratorRuntime","_callee","form","_form$getState","_form$getState$values","generalTab","groupsTab","banTab","fields","newGroups","_groups","current","groupsToRemove","changedFields","saveUserData","_context","prev","next","getState","values","general","ban","read_request_rate_limit","request_queue_size_limit","write_request_rate_limit","_slicedToArray","reduce_","acc","fieldName","isEqual_","abrupt","setState","reject","stop","_x","onClose","closeUserEditorModal","showModal","banMessage","ban_message","rrrl","rqsl","wrrl","groupAttributesMap","errors","makeErrorFields","YTDFDialog","headerProps","initialValues","String","prepareCurrent","visible","isIdmAclAvailable","caption","extras","min","hidePrettyValue","disabled","maxVisibleValues","titleClassName","groupAttributes","group","frozen","prepareGroups","USERS_EDIT_USER_DATA_FIELDS","groupsToAdd","USERS_EDIT_USER","path","requests","restAttrs","command","parameters","input","getCluster","ytApiV3Id","executeBatch","usersSaveData","batchRes","batchError","getBatchError","_error$response","response","_getUsersPageEditable","attrs","getGlobalGroupAttributesMap","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","userOperationsLink","user","UserActions","edit","showAttributes","onEdit","makeUrlForUserDashboard","routed","ClickableAttributesButton","openAttributesModal","onClick","COLUMN_NAMES","actions","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","showUserEditorModal","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","usersEditData","_getUsersTableDataSta","getUsersTableDataState","UsersPage","WithStickyToolbar","toolbar"],"sourceRoot":""}