@ytsaurus/ui 1.65.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.
- package/dist/public/build/assets-manifest.json +19 -19
- package/dist/public/build/css/{groups.dc21afeb.chunk.css → groups.7e103f52.chunk.css} +2 -2
- package/dist/public/build/css/groups.7e103f52.chunk.css.map +1 -0
- package/dist/public/build/css/users.c7f945d8.chunk.css +2 -0
- package/dist/public/build/css/users.c7f945d8.chunk.css.map +1 -0
- package/dist/public/build/js/{6729.6403cc56.chunk.js → 6729.8bcf51ba.chunk.js} +2 -2
- package/dist/public/build/js/6729.8bcf51ba.chunk.js.map +1 -0
- package/dist/public/build/js/{cluster-page-wrapper.697b0741.chunk.js → cluster-page-wrapper.4e54efc0.chunk.js} +2 -2
- package/dist/public/build/js/{cluster-page-wrapper.697b0741.chunk.js.map → cluster-page-wrapper.4e54efc0.chunk.js.map} +1 -1
- package/dist/public/build/js/main.b6bc90de.js +3 -0
- package/dist/public/build/js/main.b6bc90de.js.map +1 -0
- package/dist/public/build/js/manage-tokens.41b0ae91.chunk.js +2 -0
- package/dist/public/build/js/manage-tokens.41b0ae91.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.8fed68b1.js → runtime.3fda2b25.js} +2 -2
- package/dist/public/build/js/{runtime.8fed68b1.js.map → runtime.3fda2b25.js.map} +1 -1
- package/dist/public/build/js/users.726d69e0.chunk.js +2 -0
- package/dist/public/build/js/users.726d69e0.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +16 -16
- package/dist/server/components/layout-config.js +1 -1
- package/package.json +2 -2
- package/dist/public/build/css/groups.dc21afeb.chunk.css.map +0 -1
- package/dist/public/build/css/users.c3fc47fb.chunk.css +0 -2
- package/dist/public/build/css/users.c3fc47fb.chunk.css.map +0 -1
- package/dist/public/build/js/6729.6403cc56.chunk.js.map +0 -1
- package/dist/public/build/js/main.5d8871a8.js +0 -3
- package/dist/public/build/js/main.5d8871a8.js.map +0 -1
- package/dist/public/build/js/manage-tokens.1c4ee171.chunk.js +0 -2
- package/dist/public/build/js/manage-tokens.1c4ee171.chunk.js.map +0 -1
- package/dist/public/build/js/users.9e82942b.chunk.js +0 -2
- package/dist/public/build/js/users.9e82942b.chunk.js.map +0 -1
- /package/dist/public/build/js/{main.5d8871a8.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([[4637],{73032:(e,t,n)=>{n.d(t,{H:()=>u});var r=n(9736),a=n(77810),o=n(75299),s=n(76872),i=n(93209),c=n(64922),l=(0,s.A)("yt-collapsed-string"),u=function(e){var t=e.value,n=e.limit,s=void 0===n?200:n,u=(0,o.A)(!1),d=(0,r.A)(u,2),f=d[0],m=d[1],v=t.length>s,h=(0,a.useMemo)((function(){return f||t.length<=s?t:t.slice(0,s-1)+"…"}),[f,s,t]);return(0,c.jsxs)("div",{className:l(),children:[h,v&&(0,c.jsx)(i.S,{className:l("toggle"),onClick:m,children:f?"Hide":"Show more"})]})}},17852:(e,t,n)=>{n.d(t,{D7:()=>m,lN:()=>w,om:()=>f,ps:()=>h});var r=n(13322),a=n(40319),o=n(76872),s=n(49214),i=n.n(s),c=n(39760),l=n.n(c),u=n(27528),d=n.n(u),f=(0,o.A)("role-list-control");function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=[],a=[],o=[];l()(e,(function(e){var t=e.isUnrecognized,s=e.isRequested,i=e.isApproved,c=e.isDepriving;t?o.push(e):c?a.push(e):i||s?r.push(e):n.push(e)}));var s=n.map((function(e){return v(e)})),i=t.map((function(e){return{title:e,data:{},frozen:!0}}));return{newItems:[],current:{title:"Current",data:s.concat(i)},toAdd:{title:"Will be added",itemClassName:f("item-to-add"),data:r.map((function(e){return v(e,{frozen:!0})}))},toRemove:{title:"Will be removed",itemClassName:f("item-to-remove"),data:a.map((function(e){return v(e,{frozen:!0})}))},unrecognized:{title:"Unrecognized",itemClassName:f("item-unrecognized"),data:o.map((function(e){return v(e,{frozen:!0})}))}}}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,a.A)({title:e.text||e.value,data:e},t)}function h(e){var t=e.current,n=e.newItems,a=e.toAdd;return[].concat((0,r.A)(n),(0,r.A)(p(t)),(0,r.A)(p(a)))}function p(e){var t=(e||{}).data;return d()(i()(t,(function(e){return!e.removed})),(function(e){var t=e.data||{};return{type:t.type,value:t.value}}))}function w(e){var t=e.current,n=e.newItems||[],r=(t&&t.data||[]).filter((function(e){return e.removed}));return{added:n.map((function(e){var t=e.type,n=e.value;return"users"===t?{user:n}:{group:n}})),removed:r.map((function(e){var t=e.data||{},n=t.value;return"users"===t.type?{user:n}:{group:n}}))}}},20361:(e,t,n)=>{n.d(t,{J_:()=>x,Vm:()=>E,yz:()=>S,yZ:()=>N,lN:()=>b.lN,Y:()=>A,Ln:()=>y,D7:()=>b.D7,ps:()=>b.ps});var r=n(28407),a=n(70232),o=n.n(a),s=n(77810),i=n(33882),c=n(40319),l=n(9736),u=n(64922),d=n(68175),f=n(76872),m=n(81738),v=n(29347),h=n.n(v),p=n(27528),w=n.n(p),g=(0,f.A)("yt-dialog-error");function x(e){return(0,u.jsx)(m.A,(0,c.A)((0,c.A)({},e),{},{className:g()}))}function A(e){return h()(w()(e,(function(e,t){return e?{name:"error_".concat(t),type:"block",extras:{children:(0,u.jsx)(x,{error:e})}}:void 0})))}var k="FINAL_FORM/form-error";function y(e){return{validationErrors:(0,d.A)({},k,(0,u.jsx)(x,{error:e}))}}var b=n(17852);function C(){return Promise.all([n.e(8096),n.e(4724),n.e(6030),n.e(1086),n.e(164),n.e(2209),n.e(6756),n.e(2640),n.e(6652),n.e(937),n.e(3776),n.e(3716),n.e(5423),n.e(9641),n.e(6019),n.e(3320),n.e(1051),n.e(8512),n.e(7315),n.e(5695),n.e(3990),n.e(3724),n.e(9558),n.e(8427),n.e(5451),n.e(3784),n.e(2736)]).then(n.bind(n,36381))}var j,N=(j=(0,i.A)(s.lazy((0,r.A)(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C();case 2:return e.t0=e.sent.YTDialog,e.abrupt("return",{default:e.t0});case 4:case"end":return e.stop()}}),e)})))),""),function(e){var t=s.useState(!1),n=(0,l.A)(t,2),r=n[0],a=n[1];return s.useEffect((function(){!r&&e.visible&&a(!0)}),[e.visible,r]),r?(0,u.jsx)(j,(0,c.A)({},e)):null});(0,i.A)(s.lazy((0,r.A)(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C();case 2:return e.t0=e.sent.RoleListControl,e.abrupt("return",{default:e.t0});case 4:case"end":return e.stop()}}),e)})))),"");var E=(0,i.A)(s.lazy((0,r.A)(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C();case 2:return e.t0=e.sent.EditableList,e.abrupt("return",{default:e.t0});case 4:case"end":return e.stop()}}),e)})))),""),S=(0,i.A)(s.lazy((0,r.A)(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,C();case 2:return e.t0=e.sent.TabFieldVertical,e.abrupt("return",{default:e.t0});case 4:case"end":return e.stop()}}),e)})))),"")},50239:(e,t,n)=>{n.r(t),n.d(t,{ManageTokensModalContent:()=>te,closeManageTokensModal:()=>S,openManageTokensModal:()=>E});var r=n(28407),a=n(13322),o=n(9736),s=n(70232),i=n.n(s),c=n(76872),l=n(41655),u=n.n(l),d=n(77810),f=n(44693),m=n(92423),v=n(69442),h=n.n(v),p=n(11960),w=n(20361),g=n(40319),x=n(64714),A=n(29081),k=n(52797),y=n(30320),b=n(48971);function C(){var e=(0,A.by)();if(e){var t=(0,k.lt)(e);if(t)return{proxy:(0,k.v9)(t)}}return{}}var j=function(e){return function(t){return t({type:y.WZ.REQUEST}),x.$S.listUserTokens(x.Vu.listUserTokens,{parameters:(0,g.A)((0,g.A)({},e),{},{with_metadata:!0}),setup:C()}).then((function(e){t({type:y.WZ.SUCCESS,data:{data:e}})})).catch((function(e){throw t({type:y.WZ.FAILURE,data:{error:e}}),e}))}},N=function(e){var t=e.credentials,n=e.token_sha256;return function(){return(0,b.fI)(x.$S.revokeToken(x.Vu.issueToken,{parameters:(0,g.A)({token_sha256:n},t),setup:C()}),{autoHide:!0,toasterName:n,successContent:"The token has been removed"})}},E=function(){return function(e){e({type:y.ZG})}},S=function(){return function(e){e({type:y.h$})}},T=n(51194),z=n(15647),R=n(97082),M=n(60620),Z=n(28640),_=n(77318);function I(e){return P.apply(this,arguments)}function P(){return(P=(0,r.A)(i().mark((function e(t){var n;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(t));case 2:return n=e.sent,e.abrupt("return",(0,a.A)(new Uint8Array(n)).map((function(e){return("00"+e.toString(16)).slice(-2)})).join(""));case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var L=n(29121),D=n(12937),B=n(55682),O=n(50073),F=n(64922),V=d.createContext(void 0),H=function(e){var t,n=d.useState(),s=(0,o.A)(n,2),c=s[0],l=s[1],u=(0,z.d4)(k.ID),m=null!==(t=(0,z.d4)(k.kV))&&void 0!==t?t:"";return(0,F.jsx)(F.Fragment,{children:(0,F.jsx)(O.l,{open:e.visible,hasCloseButton:!0,onClose:e.handleCancel,children:(0,F.jsx)(w.yZ,{headerProps:{title:"Authentication"},pristineSubmittable:!0,modal:!1,visible:!0,initialValues:{},onAdd:function(){var t=(0,r.A)(i().mark((function t(n){var r;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return l(void 0),r=n.getState().values.password,t.abrupt("return",I(r).then((function(t){B.A.post("/api/yt/".concat(m,"/login"),{username:u,password:r}).then((function(){return e.handleConfirm(t)})).catch((function(e){var t;return l((null==e||null===(t=e.response)||void 0===t?void 0:t.data)||e)}))})));case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),fields:[{name:"error-block",type:"block",extras:{children:(0,F.jsx)(f.F,{message:"To access tokens management, you need enter your password"})}},{name:"password",type:"text",required:!0,caption:"Password",extras:function(){return{type:"password"}}}].concat((0,a.A)((0,w.Y)([c]))),footerProps:{propsButtonCancel:{onClick:e.handleCancel}}})})})},Y=function(){function e(){(0,L.A)(this,e),this.promise=void 0,this.resolve=function(e){},this.reject=function(e){}}return(0,D.A)(e,[{key:"create",value:function(){var e=this;return this.promise=new Promise((function(t,n){e.resolve=function(n){t(n),e.promise=void 0,e.resolve=function(){}},e.reject=function(t){t&&n(t),e.promise=void 0,e.reject=function(){}}})),this.promise}}]),e}();function $(e){var t=e.children,n=d.useState(!1),r=(0,o.A)(n,2),a=r[0],s=r[1],i=d.useRef(new Y),c=d.useMemo((function(){return{getPassword:function(){return s(!0),i.current.create()}}}),[s]);return(0,F.jsxs)(V.Provider,{value:c,children:[t,(0,F.jsx)(H,{visible:a,handleCancel:function(){s(!1),i.current.reject(new Error("cancel password window"))},handleConfirm:function(e){s(!1),i.current.resolve(e)}})]})}function U(){var e=d.useContext(V);if(!e)throw new Error("Wrap your app into ManageTokensPasswordModalContextProvider");return e}var W=n(73032),q=n(64772),G=(0,c.A)("manage-tokens-modal-content"),J=function(e){var t=e.onClose,n=U().getPassword,r=(0,z.d4)(k.ID),s=(0,T._)(),i=(0,d.useState)(),c=(0,o.A)(i,2),l=c[0],u=c[1],v=(0,d.useState)(),h=(0,o.A)(v,2),p=h[0],A=h[1];return p?(0,F.jsxs)("div",{className:G("new-token"),children:[(0,F.jsx)("h2",{children:"Copy token value"}),(0,F.jsx)(f.F,{theme:"warning",message:"Please save the token value. It is impossible to get the token value after closing the dialog"}),(0,F.jsx)("br",{}),(0,F.jsx)(f.F,{message:p,layout:"horizontal",actions:(0,F.jsx)(Z.A,{text:p})}),(0,F.jsx)("div",{className:G("tokens-action"),children:(0,F.jsx)(m.$,{size:"l",view:"action",onClick:function(){t()},children:"Close"})})]}):(0,F.jsx)(w.yZ,{headerProps:{title:"Generate token"},pristineSubmittable:!0,modal:!1,visible:!0,initialValues:{},onAdd:function(e){var t=e.getState().values.description;return u(void 0),n().then((function(e){return s(function(e){var t=e.description,n=e.credentials;return function(){return x.$S.issueToken(x.Vu.issueToken,{parameters:(0,g.A)({description:t},n),setup:C()})}}({description:t,credentials:{user:r,password_sha256:e}})).then((function(t){return A(t),s(j({user:r,password_sha256:e})).then((function(){})).catch((function(){}))})).catch((function(e){return u(e),Promise.reject(e)}))})).catch((function(e){throw e}))},fields:[{name:"description",type:"textarea",caption:"Description"}].concat((0,a.A)((0,w.Y)([l]))),footerProps:{propsButtonCancel:{onClick:function(){t()}}}})},K=function(e){var t=e.onSuccess,n=(0,d.useState)(),s=(0,o.A)(n,2),c=s[0],l=s[1],u=(0,T._)(),m=(0,z.d4)(k.ID),v=function(){var e=(0,r.A)(i().mark((function e(n){var r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.getState().values,l(void 0),e.next=4,I(r.password).then((function(e){return u(j({user:m,password_sha256:e})).then((function(){t()})).catch((function(e){var t;return l((null==e||null===(t=e.response)||void 0===t?void 0:t.data)||e)}))}));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return(0,F.jsx)(w.yZ,{headerProps:{title:"Authentication"},pristineSubmittable:!0,modal:!1,visible:!0,initialValues:{},onAdd:v,fields:[{name:"error-block",type:"block",extras:{children:(0,F.jsx)(f.F,{message:"To access tokens management, you need enter your password"})}},{name:"password",type:"text",required:!0,caption:"Password",extras:function(){return{type:"password"}}}].concat((0,a.A)((0,w.Y)([c]))),footerProps:{propsButtonCancel:{onClick:function(){u(S())}}}})},Q=function(e){var t=(0,d.useState)(!1),n=(0,o.A)(t,2),r=n[0],a=n[1],s=function(){a(!1)};return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(m.$,{size:"s",onClick:function(){a(!0)},children:(0,F.jsx)(M.A,{awesome:"trash-bin"})}),(0,F.jsx)(p.A,{content:"Are you sure you want to revoke the token? This action CANNOT be undone.",onCancel:s,onConfirm:function(){e.handleClickRemoveToken(e.index),a(!1)},onOutsideClick:s,visible:r})]})},X=function(e){var t=e.onSuccessRemove,n=e.onClickGenerateTokenButton,r=U().getPassword,a=(0,T._)(),o=(0,z.d4)(R.B),s=(0,z.d4)(k.ID),i=d.useCallback((function(e){return r().then((function(n){return a(N({credentials:{user:s,password_sha256:n},token_sha256:o[e].tokenHash})).then((function(){return a(j({user:s,password_sha256:n})).finally((function(){return t()}))}))}))}),[r,s,t,o,N,a]);return(0,F.jsxs)("div",{className:G("tokens"),children:[(0,F.jsx)("h2",{children:"Authentication Tokens"}),(0,F.jsx)("div",{className:G("generate-token-button"),children:(0,F.jsx)(m.$,{size:"l",view:"action",onClick:function(){return n()},children:"Generate token"})}),(0,F.jsx)("div",{className:G("tokens-table"),children:(0,F.jsx)(_.Ay,{loaded:!0,useThemeYT:!0,data:o,noItemsText:"No tokens found",rowClassName:function(){return G("table-row")},columns:[{name:"tokenPrefix",header:"Token",width:110,className:G("table-cell"),render:function(e){var t=e.value;return t?"".concat(String(t),"..."):q.A.NO_VALUE}},{name:"tokenHash",header:"Token Hash",width:110,className:G("table-cell",{name:"hash"}),render:function(e){var t=e.value;return(0,F.jsxs)(F.Fragment,{children:[h()(String(t),{length:12}),(0,F.jsx)(Z.A,{title:"Copy error",view:"flat-secondary",text:t,size:"xs"})]})}},{name:"description",header:"Description",width:320,className:G("table-cell",{name:"description"}),render:function(e){return e.value?(0,F.jsx)(W.H,{limit:100,value:e.value}):""}},{name:"creationTime",header:"Issued At",width:160,className:G("table-cell"),render:function(e){return e.value?u()(e.value).format("DD/MM/YYYY hh:mm:ss"):""}},{name:"",width:30,className:G("table-cell"),render:function(e){var t=e.index;return(0,F.jsx)(Q,{index:t,handleClickRemoveToken:i})}}],settings:{stickyHead:"moving",displayIndices:!1,sortable:!1,highlightRows:!1,stripedRows:!1,disableSortReset:!0}})})]})},ee=function(e){return e[e.default=0]="default",e[e.tokens=1]="tokens",e[e.generate=2]="generate",e}(ee||{}),te=function(){var e,t,n=(e=(0,d.useState)(ee.default),{section:(t=(0,o.A)(e,2))[0],setSection:t[1]}),r=n.section,a=n.setSection,s=(0,d.useMemo)((function(){switch(r){case ee.default:return(0,F.jsx)(K,{onSuccess:function(){return a(ee.tokens)}});case ee.tokens:return(0,F.jsx)(X,{onSuccessRemove:function(){return a(ee.tokens)},onClickGenerateTokenButton:function(){return a(ee.generate)}});case ee.generate:return(0,F.jsx)(J,{onClose:function(){return a(ee.tokens)}});default:return null}}),[r]);return(0,F.jsx)($,{children:(0,F.jsx)("div",{className:G("content"),children:s})})}},44693:(e,t,n)=>{n.d(t,{F:()=>N});var r=n(77810),a=n(72890),o=n(92423),s=n(73139),i=n(72679),c=n(54179),l=n(6740),u=n(6736);const d=r.createContext(null),f=()=>{const e=r.useContext(d);if(!e)throw new Error('Alert: `useAlertContext` hook is used out of "AlertContext"');return e},m=e=>{const{view:t}=f();return r.createElement(o.$,Object.assign({view:"filled"===t?"normal-contrast":void 0},e))};const v=(0,n(21086).om)("alert"),h=({layout:e,view:t,children:n})=>r.createElement(d.Provider,{value:{layout:e,view:t}},n);var p=n(12663);var w=n(44315);var g=n(16822);var x=n(71182);const A={danger:{filled:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94 6.53 5.47Z",clipRule:"evenodd"})),outlined:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0ZM15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94 6.53 5.47Z",clipRule:"evenodd"}))},info:{filled:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75Z",clipRule:"evenodd"})),outlined:p.A},success:{filled:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08l3-4Z",clipRule:"evenodd"})),outlined:w.A},warning:{filled:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M5.836 2.244c.962-1.665 3.366-1.665 4.328 0l4.917 8.505c.964 1.666-.239 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.164-3.751l4.917-8.505ZM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5Zm1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z",clipRule:"evenodd"})),outlined:g.A},utility:{filled:e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",d:"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.216 2.216 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414Z"})),outlined:x.A},normal:null};var k=n(85137),y=n(54205);const b=JSON.parse('{"label_close":"Close"}'),C=JSON.parse('{"label_close":"Закрыть"}'),j=(0,y.N)({en:b,ru:C},"Alert"),N=e=>{const{theme:t="normal",view:n="filled",layout:d="vertical",message:f,className:m,corners:p,style:w,onClose:g,align:x,qa:A}=e;return r.createElement(h,{layout:d,view:n},r.createElement(s.Z,{style:w,className:v({corners:p},(0,l.Y)({py:4,px:5},m)),theme:t,view:n,qa:A},r.createElement(u.s,{gap:"3",alignItems:x},void 0===e.icon?r.createElement(N.Icon,{theme:t,view:n}):e.icon,r.createElement(u.s,{direction:"vertical"===d?"column":"row",gap:"5",grow:!0},r.createElement(u.s,{gap:"2",grow:!0,className:v("text-content")},r.createElement(u.s,{direction:"column",gap:"1",grow:!0,justifyContent:x},"string"==typeof e.title?r.createElement(N.Title,{text:e.title}):e.title,f)),Array.isArray(e.actions)?r.createElement(N.Actions,{items:e.actions}):e.actions),g&&r.createElement(o.$,{view:"flat",className:v("close-btn"),onClick:g,extraProps:{"aria-label":j("label_close")}},r.createElement(i.I,{data:a.A,size:18,className:(0,c.$)({color:"secondary"})})))))};N.Icon=({className:e,theme:t,view:n="filled",size:a=18})=>{const o=A[t];if(!o)return null;let s;return"success"===t?s="positive":"normal"!==t&&(s=t),r.createElement("div",{className:v("icon",(0,c.$)({color:s},e))},r.createElement(i.I,{data:o[n],size:a}))},N.Title=({text:e,className:t})=>r.createElement(k.E,{variant:"subheader-2",className:v("title",t)},e),N.Actions=({items:e,children:t,className:n})=>{const{layout:a}=f();return r.createElement(u.s,{className:v("actions",{minContent:"horizontal"===a},n),direction:"row",gap:"3",wrap:!0,alignItems:"horizontal"===a?"center":"flex-start"},(null==e?void 0:e.map((({handler:e,text:t},n)=>r.createElement(m,{key:n,onClick:e},t))))||t)},N.Action=m},73139:(e,t,n)=>{n.d(t,{Z:()=>c});var r=n(56911),a=n(77810),o=n(3564),s=n(92060);const i=(0,n(21086).om)("card"),c=a.forwardRef((function(e,t){const{type:n="container",theme:c,view:l,size:u="m",children:d,className:f,onClick:m,disabled:v,selected:h}=e,p=(0,r.Tt)(e,["type","theme","view","size","children","className","onClick","disabled","selected"]),w="selection"===n,g="container"===n,x=("action"===n||w)&&Boolean(m)&&!(v||h),A=g?"normal":void 0,k=g||w?"outlined":void 0,y=x?m:void 0,{onKeyDown:b}=(0,o.N)(m);return a.createElement(s.a,Object.assign({ref:t,role:x?"button":void 0,className:i({theme:c||A,view:l||k,type:n,selected:h,size:u,disabled:v,clickable:x},f),onClick:y,onKeyDown:x?b:void 0,tabIndex:x?0:void 0},p),d)}))},75299:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(77810),a=function(e,t){return"boolean"==typeof t?t:!e};const o=function(e){return(0,r.useReducer)(a,e)}}}]);
|
2
|
-
//# sourceMappingURL=manage-tokens.1c4ee171.chunk.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"js/manage-tokens.1c4ee171.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/CollapsedString/CollapsedString.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/manage-tokens/index.ts","webpack://@ytsaurus/ui/./src/ui/utils/sha256.ts","webpack://@ytsaurus/ui/./src/ui/containers/ManageTokens/ManageTokensPasswordModal/ManageTokensPasswordModal.tsx","webpack://@ytsaurus/ui/./src/ui/containers/ManageTokens/ManageTokensModalContent/ManageTokensModalContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/useAlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertAction.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContextProvider.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertIcon.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmarkFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmark.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleInfoFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleCheckFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/TriangleExclamationFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ThunderboltFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/Alert.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertTitle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertActions.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Card/Card.js","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js"],"sourcesContent":["import React, {FC, useMemo} from 'react';\nimport {useToggle} from 'react-use';\nimport cn from 'bem-cn-lite';\n\nimport './CollapsedString.scss';\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\n\ntype Props = {\n value: string;\n limit?: number;\n};\n\nconst block = cn('yt-collapsed-string');\n\nexport const CollapsedString: FC<Props> = ({value, limit = 200}) => {\n const [expanded, toggleExpanded] = useToggle(false);\n const hasToggle = value.length > limit;\n\n const text = useMemo(() => {\n return expanded || value.length <= limit ? value : value.slice(0, limit - 1) + '…';\n }, [expanded, limit, value]);\n\n return (\n <div className={block()}>\n {text}\n {hasToggle && (\n <ClickableText className={block('toggle')} onClick={toggleExpanded}>\n {expanded ? 'Hide' : 'Show more'}\n </ClickableText>\n )}\n </div>\n );\n};\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: 'Unrecognized',\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}) {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value} : {group: value};\n }),\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport Block from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <Block {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\n };\n}\n","import type {ThunkAction} from 'redux-thunk';\nimport type {RootState} from '../../reducers';\nimport type {ManageTokensListAction} from '../../reducers/manage-tokens/tokens';\nimport {YTApiId, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {getQueryTrackerCluster} from '../../../config';\nimport {getClusterConfigByName, getClusterProxy} from '../../selectors/global';\nimport {\n MANAGE_TOKENS_LIST,\n MANAGE_TOKENS_MODALS_CLOSE,\n MANAGE_TOKENS_MODALS_OPEN,\n} from '../../../constants/manage-tokens';\nimport {ManageTokensModalAction} from '../../reducers/manage-tokens/modal';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\n\nfunction getQTApiSetup(): {proxy?: string} {\n const QT_CLUSTER = getQueryTrackerCluster();\n if (QT_CLUSTER) {\n const cluster = getClusterConfigByName(QT_CLUSTER);\n if (cluster) {\n return {\n proxy: getClusterProxy(cluster),\n };\n }\n }\n return {};\n}\n\ntype Credentials = {\n user: string;\n password_sha256: string;\n};\nexport const manageTokensGetList = (\n credentials: Credentials,\n): ThunkAction<Promise<unknown>, RootState, unknown, ManageTokensListAction> => {\n return (dispatch) => {\n dispatch({type: MANAGE_TOKENS_LIST.REQUEST});\n\n return ytApiV4Id\n .listUserTokens(YTApiId.listUserTokens, {\n parameters: {\n ...credentials,\n with_metadata: true,\n },\n setup: getQTApiSetup(),\n })\n .then((data) => {\n dispatch({type: MANAGE_TOKENS_LIST.SUCCESS, data: {data}});\n })\n .catch((error) => {\n dispatch({type: MANAGE_TOKENS_LIST.FAILURE, data: {error}});\n\n throw error;\n });\n };\n};\n\nexport const manageTokensCreateToken = ({\n description,\n credentials,\n}: {\n description: string;\n credentials: Credentials;\n}): ThunkAction<Promise<string>, RootState, unknown, ManageTokensListAction> => {\n return () => {\n return ytApiV4Id.issueToken(YTApiId.issueToken, {\n parameters: {\n description,\n ...credentials,\n },\n setup: getQTApiSetup(),\n });\n };\n};\n\nexport const manageTokensRevokeToken = ({\n credentials,\n token_sha256,\n}: {\n token_sha256: string;\n credentials: Credentials;\n}): ThunkAction<Promise<unknown>, RootState, unknown, ManageTokensListAction> => {\n return () => {\n return wrapApiPromiseByToaster(\n ytApiV4Id.revokeToken(YTApiId.issueToken, {\n parameters: {\n token_sha256,\n ...credentials,\n },\n setup: getQTApiSetup(),\n }),\n {\n autoHide: true,\n toasterName: token_sha256,\n successContent: 'The token has been removed',\n },\n );\n };\n};\n\nexport const openManageTokensModal = (): ThunkAction<\n unknown,\n RootState,\n unknown,\n ManageTokensModalAction\n> => {\n return (dispatch) => {\n dispatch({type: MANAGE_TOKENS_MODALS_OPEN});\n };\n};\n\nexport const closeManageTokensModal = (): ThunkAction<\n unknown,\n RootState,\n unknown,\n ManageTokensModalAction\n> => {\n return (dispatch) => {\n dispatch({type: MANAGE_TOKENS_MODALS_CLOSE});\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","import axios from 'axios';\nimport * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport {Alert, Dialog} from '@gravity-ui/uikit';\nimport {sha256} from '../../../utils/sha256';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {getCurrentUserName, getSettingsCluster} from '../../../store/selectors/global';\nimport {YTError} from '../../../../@types/types';\n\ninterface ManageTokensPasswordModalContextValue {\n getPassword: () => Promise<string>;\n}\nexport const ManageTokensPasswordModalContext = React.createContext<\n undefined | ManageTokensPasswordModalContextValue\n>(undefined);\n\ninterface PasswordModalProps {\n visible: boolean;\n handleCancel: () => void;\n handleConfirm: (hash: string) => void;\n}\n\nconst PasswordModal = (props: PasswordModalProps) => {\n const [error, setError] = React.useState<YTError>();\n const username = useSelector(getCurrentUserName);\n const ytAuthCluster = useSelector(getSettingsCluster) ?? '';\n\n return (\n <>\n <Dialog open={props.visible} hasCloseButton={true} onClose={props.handleCancel}>\n <YTDFDialog<{\n password: string;\n }>\n headerProps={{\n title: 'Authentication',\n }}\n pristineSubmittable\n modal={false}\n visible={true}\n initialValues={{}}\n onAdd={async (data) => {\n setError(undefined);\n\n const password = data.getState().values.password;\n\n return sha256(password).then((password_sha256) => {\n axios\n .post(`/api/yt/${ytAuthCluster}/login`, {\n username,\n password,\n })\n .then(() => props.handleConfirm(password_sha256))\n .catch((error) => setError(error?.response?.data || error));\n });\n }}\n fields={[\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: (\n <Alert message=\"To access tokens management, you need enter your password\" />\n ),\n },\n },\n {\n name: 'password',\n type: 'text',\n required: true,\n caption: 'Password',\n extras: () => ({type: 'password'}),\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n propsButtonCancel: {\n onClick: props.handleCancel,\n },\n }}\n />\n </Dialog>\n </>\n );\n};\n\nclass PromiseWaiter<Data> {\n promise: Promise<Data> | undefined = undefined;\n resolve = (_d: Data) => {};\n reject = (_e?: Error) => {};\n\n create() {\n this.promise = new Promise<Data>((resolve, reject) => {\n this.resolve = (d) => {\n resolve(d);\n this.promise = undefined;\n this.resolve = () => {};\n };\n this.reject = (e) => {\n if (e) {\n reject(e);\n }\n\n this.promise = undefined;\n this.reject = () => {};\n };\n });\n\n return this.promise;\n }\n}\n\nexport function ManageTokensPasswordModalContextProvider({children}: {children: React.ReactChild}) {\n const [visible, setVisible] = React.useState(false);\n const p = React.useRef(new PromiseWaiter<string>());\n const value = React.useMemo(() => {\n return {\n getPassword: () => {\n setVisible(true);\n\n return p.current.create();\n },\n };\n }, [setVisible]);\n\n const handleCancel = () => {\n setVisible(false);\n\n p.current.reject(new Error('cancel password window'));\n };\n\n const handleConfirm = (hash: string) => {\n setVisible(false);\n\n p.current.resolve(hash);\n };\n\n return (\n <ManageTokensPasswordModalContext.Provider value={value}>\n {children}\n <PasswordModal\n visible={visible}\n handleCancel={handleCancel}\n handleConfirm={handleConfirm}\n />\n </ManageTokensPasswordModalContext.Provider>\n );\n}\n\nexport function useManageTokensPasswordModalContext(): ManageTokensPasswordModalContextValue {\n const context = React.useContext(ManageTokensPasswordModalContext);\n\n if (!context) {\n throw new Error('Wrap your app into ManageTokensPasswordModalContextProvider');\n }\n\n return context;\n}\n","import cn from 'bem-cn-lite';\nimport moment from 'moment';\nimport * as React from 'react';\nimport {FC, useMemo, useState} from 'react';\nimport {Alert, Button} from '@gravity-ui/uikit';\nimport type {FormApi} from '../../../components/Dialog';\nimport truncate_ from 'lodash/truncate';\nimport Modal from '../../../components/Modal/Modal';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {\n closeManageTokensModal,\n manageTokensCreateToken,\n manageTokensGetList,\n manageTokensRevokeToken,\n} from '../../../store/actions/manage-tokens';\nimport {useThunkDispatch} from '../../../store/thunkDispatch';\nimport {useSelector} from 'react-redux';\nimport {AuthenticationToken, manageTokensSelector} from '../../../store/selectors/manage-tokens';\nimport {getCurrentUserName} from '../../../store/selectors/global';\nimport Icon from '../../../components/Icon/Icon';\nimport {YTError} from '../../../../@types/types';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport {sha256} from '../../../utils/sha256';\nimport {\n ManageTokensPasswordModalContextProvider,\n useManageTokensPasswordModalContext,\n} from '../ManageTokensPasswordModal/ManageTokensPasswordModal';\nimport {CollapsedString} from '../../../components/CollapsedString';\nimport format from '../../../common/hammer/format';\n\nimport './ManageTokensModalContent.scss';\n\nconst block = cn('manage-tokens-modal-content');\n\nconst AuthenticationGenerateTokenFormSection: FC<{onClose: () => void}> = ({onClose}) => {\n type FormData = {description: string};\n const {getPassword} = useManageTokensPasswordModalContext();\n const user = useSelector(getCurrentUserName);\n const dispatch = useThunkDispatch();\n const [error, setError] = useState<YTError>();\n const [token, setToken] = useState<string>();\n\n const handleSubmit = (form: FormApi<FormData>) => {\n const {description} = form.getState().values;\n\n setError(undefined);\n\n return getPassword()\n .then((password_sha256) => {\n return dispatch(\n manageTokensCreateToken({\n description,\n credentials: {\n user,\n password_sha256,\n },\n }),\n )\n .then((token) => {\n setToken(token);\n\n return dispatch(\n manageTokensGetList({\n user,\n password_sha256,\n }),\n )\n .then(() => undefined)\n .catch(() => undefined);\n })\n .catch((error) => {\n setError(error);\n\n return Promise.reject(error);\n });\n })\n .catch((error) => {\n throw error;\n });\n };\n\n if (token) {\n return (\n <div className={block('new-token')}>\n <h2>Copy token value</h2>\n <Alert\n theme=\"warning\"\n message=\"Please save the token value. It is impossible to get the token value after closing the dialog\"\n />\n <br />\n <Alert\n message={token}\n layout=\"horizontal\"\n actions={<ClipboardButton text={token} />}\n />\n <div className={block('tokens-action')}>\n <Button\n size=\"l\"\n view=\"action\"\n onClick={() => {\n onClose();\n }}\n >\n Close\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <YTDFDialog<FormData>\n headerProps={{\n title: 'Generate token',\n }}\n pristineSubmittable\n modal={false}\n visible={true}\n initialValues={{}}\n onAdd={handleSubmit}\n fields={[\n {\n name: 'description',\n type: 'textarea',\n caption: 'Description',\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n propsButtonCancel: {\n onClick: () => {\n onClose();\n },\n },\n }}\n />\n );\n};\n\nconst AuthenticationPasswordSection: FC<{onSuccess: () => void}> = ({onSuccess}) => {\n const [error, setError] = useState<YTError>();\n type FormData = {password: string};\n const dispatch = useThunkDispatch();\n const user = useSelector(getCurrentUserName);\n const handleSubmit = async (form: FormApi<FormData>) => {\n const values = form.getState().values;\n\n setError(undefined);\n\n await sha256(values.password).then((password_sha256) => {\n return dispatch(\n manageTokensGetList({\n user,\n password_sha256,\n }),\n )\n .then(() => {\n onSuccess();\n })\n .catch((error) => setError(error?.response?.data || error));\n });\n };\n\n return (\n <YTDFDialog<FormData>\n headerProps={{\n title: 'Authentication',\n }}\n pristineSubmittable\n modal={false}\n visible={true}\n initialValues={{}}\n onAdd={handleSubmit}\n fields={[\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: (\n <Alert message=\"To access tokens management, you need enter your password\" />\n ),\n },\n },\n {\n name: 'password',\n type: 'text',\n required: true,\n caption: 'Password',\n extras: () => ({type: 'password'}),\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n propsButtonCancel: {\n onClick: () => {\n dispatch(closeManageTokensModal());\n },\n },\n }}\n />\n );\n};\n\nconst RevokeToken = (props: {handleClickRemoveToken: (index: number) => void; index: number}) => {\n const [visible, setVisible] = useState(false);\n\n const handleClick = () => {\n setVisible(true);\n };\n\n const handleConfirm = () => {\n props.handleClickRemoveToken(props.index);\n\n setVisible(false);\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <>\n <Button size={'s'} onClick={handleClick}>\n <Icon awesome={'trash-bin'} />\n </Button>\n <Modal\n content=\"Are you sure you want to revoke the token? This action CANNOT be undone.\"\n onCancel={handleCancel}\n onConfirm={handleConfirm}\n onOutsideClick={handleCancel}\n visible={visible}\n />\n </>\n );\n};\n\nconst AuthenticationTokensSection: FC<{\n onClickGenerateTokenButton: () => void;\n onSuccessRemove: () => void;\n}> = ({onSuccessRemove, onClickGenerateTokenButton}) => {\n const {getPassword} = useManageTokensPasswordModalContext();\n const dispatch = useThunkDispatch();\n const tokens = useSelector(manageTokensSelector)!;\n const user = useSelector(getCurrentUserName);\n\n const handleClickRemoveToken = React.useCallback(\n (index: number) => {\n return getPassword().then((password_sha256) => {\n return dispatch(\n manageTokensRevokeToken({\n credentials: {\n user,\n password_sha256,\n },\n token_sha256: tokens![index].tokenHash,\n }),\n ).then(() => {\n return dispatch(\n manageTokensGetList({\n user,\n password_sha256,\n }),\n ).finally(() => onSuccessRemove());\n });\n });\n },\n [getPassword, user, onSuccessRemove, tokens, manageTokensRevokeToken, dispatch],\n );\n\n return (\n <div className={block('tokens')}>\n <h2>Authentication Tokens</h2>\n <div className={block('generate-token-button')}>\n <Button size=\"l\" view=\"action\" onClick={() => onClickGenerateTokenButton()}>\n Generate token\n </Button>\n </div>\n <div className={block('tokens-table')}>\n <DataTableYT<AuthenticationToken>\n loaded\n useThemeYT\n data={tokens}\n noItemsText=\"No tokens found\"\n rowClassName={() => block('table-row')}\n columns={[\n {\n name: 'tokenPrefix',\n header: 'Token',\n width: 110,\n className: block('table-cell'),\n render: ({value}) => {\n return value ? `${String(value)}...` : format.NO_VALUE;\n },\n },\n {\n name: 'tokenHash',\n header: 'Token Hash',\n width: 110,\n className: block('table-cell', {name: 'hash'}),\n render: ({value}) => {\n return (\n <>\n {truncate_(String(value), {length: 12})}\n <ClipboardButton\n title=\"Copy error\"\n view=\"flat-secondary\"\n text={value}\n size=\"xs\"\n />\n </>\n );\n },\n },\n {\n name: 'description',\n header: 'Description',\n width: 320,\n className: block('table-cell', {name: 'description'}),\n render(value) {\n if (value.value) {\n return (\n <CollapsedString\n limit={100}\n value={value.value as string}\n />\n );\n }\n\n return '';\n },\n },\n {\n name: 'creationTime',\n header: 'Issued At',\n width: 160,\n className: block('table-cell'),\n render: (value) => {\n return value.value\n ? moment(value.value).format('DD/MM/YYYY hh:mm:ss')\n : '';\n },\n },\n {\n name: '',\n width: 30,\n className: block('table-cell'),\n render: ({index}) => (\n <RevokeToken\n index={index}\n handleClickRemoveToken={handleClickRemoveToken}\n />\n ),\n },\n ]}\n settings={{\n stickyHead: 'moving',\n displayIndices: false,\n sortable: false,\n highlightRows: false,\n stripedRows: false,\n disableSortReset: true,\n }}\n />\n </div>\n </div>\n );\n};\n\nenum ViewSection {\n default,\n tokens,\n generate,\n}\n\nconst useViewSectionState = () => {\n const [section, setSection] = useState<ViewSection>(ViewSection.default);\n\n return {section, setSection};\n};\n\nexport const ManageTokensModalContent = () => {\n const {section, setSection} = useViewSectionState();\n\n const content = useMemo(() => {\n switch (section) {\n case ViewSection.default:\n return (\n <AuthenticationPasswordSection\n onSuccess={() => setSection(ViewSection.tokens)}\n />\n );\n case ViewSection.tokens:\n return (\n <AuthenticationTokensSection\n onSuccessRemove={() => setSection(ViewSection.tokens)}\n onClickGenerateTokenButton={() => setSection(ViewSection.generate)}\n />\n );\n case ViewSection.generate:\n return (\n <AuthenticationGenerateTokenFormSection\n onClose={() => setSection(ViewSection.tokens)}\n />\n );\n default:\n return null;\n }\n }, [section]);\n\n return (\n <ManageTokensPasswordModalContextProvider>\n <div className={block('content')}>{content}</div>\n </ManageTokensPasswordModalContextProvider>\n );\n};\n","import React from 'react';\nexport const AlertContext = React.createContext(null);\n","'use client';\nimport React from 'react';\nimport { AlertContext } from './AlertContext';\nexport const useAlertContext = () => {\n const context = React.useContext(AlertContext);\n if (!context)\n throw new Error('Alert: `useAlertContext` hook is used out of \"AlertContext\"');\n return context;\n};\n","'use client';\nimport React from 'react';\nimport { Button } from '../Button';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertAction = (props) => {\n const { view } = useAlertContext();\n return React.createElement(Button, Object.assign({ view: view === 'filled' ? 'normal-contrast' : undefined }, props));\n};\n","import { block } from '../utils/cn';\nimport './Alert.css';\nexport const DEFAULT_ICON_SIZE = 18;\nexport const bAlert = block('alert');\n","'use client';\nimport React from 'react';\nimport { AlertContext } from './AlertContext';\nexport const AlertContextProvider = ({ layout, view, children }) => {\n return React.createElement(AlertContext.Provider, { value: { layout, view } }, children);\n};\n","import React from 'react';\nimport { CircleCheck, CircleCheckFill, CircleInfo, CircleInfoFill, CircleXmark, CircleXmarkFill, Thunderbolt, ThunderboltFill, TriangleExclamation, TriangleExclamationFill, } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text/colorText/colorText';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nconst typeToIcon = {\n danger: {\n filled: CircleXmarkFill,\n outlined: CircleXmark,\n },\n info: {\n filled: CircleInfoFill,\n outlined: CircleInfo,\n },\n success: {\n filled: CircleCheckFill,\n outlined: CircleCheck,\n },\n warning: {\n filled: TriangleExclamationFill,\n outlined: TriangleExclamation,\n },\n utility: {\n filled: ThunderboltFill,\n outlined: Thunderbolt,\n },\n normal: null,\n};\nexport const AlertIcon = ({ className, theme, view = 'filled', size = DEFAULT_ICON_SIZE, }) => {\n const iconByTheme = typeToIcon[theme];\n if (!iconByTheme) {\n return null;\n }\n let color;\n if (theme === 'success') {\n color = 'positive';\n }\n else if (theme !== 'normal') {\n color = theme;\n }\n return (React.createElement(\"div\", { className: bAlert('icon', colorText({ color }, className)) },\n React.createElement(Icon, { data: iconByTheme[view], size: size })));\n};\n","import * as React from 'react';\nconst CircleXmarkFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94 6.53 5.47Z\", clipRule: \"evenodd\" })));\nexport default CircleXmarkFill;\n","import * as React from 'react';\nconst CircleXmark = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0ZM15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94 6.53 5.47Z\", clipRule: \"evenodd\" })));\nexport default CircleXmark;\n","import * as React from 'react';\nconst CircleInfoFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75Z\", clipRule: \"evenodd\" })));\nexport default CircleInfoFill;\n","import * as React from 'react';\nconst CircleCheckFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Zm3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08l3-4Z\", clipRule: \"evenodd\" })));\nexport default CircleCheckFill;\n","import * as React from 'react';\nconst TriangleExclamationFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.836 2.244c.962-1.665 3.366-1.665 4.328 0l4.917 8.505c.964 1.666-.239 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.164-3.751l4.917-8.505ZM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5Zm1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\", clipRule: \"evenodd\" })));\nexport default TriangleExclamationFill;\n","import * as React from 'react';\nconst ThunderboltFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", d: \"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.216 2.216 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414Z\" })));\nexport default ThunderboltFill;\n","import { addComponentKeysets } from '../../utils/addComponentKeysets';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Alert';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","import React from 'react';\nimport { Xmark } from '@gravity-ui/icons';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text';\nimport { Flex, spacing } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertContextProvider } from './AlertContextProvider';\nimport { AlertIcon } from './AlertIcon';\nimport { AlertTitle } from './AlertTitle';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nimport i18n from './i18n';\nexport const Alert = (props) => {\n const { theme = 'normal', view = 'filled', layout = 'vertical', message, className, corners, style, onClose, align, qa, } = props;\n return (React.createElement(AlertContextProvider, { layout: layout, view: view },\n React.createElement(Card, { style: style, className: bAlert({ corners }, spacing({ py: 4, px: 5 }, className)), theme: theme, view: view, qa: qa },\n React.createElement(Flex, { gap: \"3\", alignItems: align },\n typeof props.icon === 'undefined' ? (React.createElement(Alert.Icon, { theme: theme, view: view })) : (props.icon // ability to pass `null` as `icon` prop value\n ),\n React.createElement(Flex, { direction: layout === 'vertical' ? 'column' : 'row', gap: \"5\", grow: true },\n React.createElement(Flex, { gap: \"2\", grow: true, className: bAlert('text-content') },\n React.createElement(Flex, { direction: \"column\", gap: \"1\", grow: true, justifyContent: align },\n typeof props.title === 'string' ? (React.createElement(Alert.Title, { text: props.title })) : (props.title),\n message)),\n Array.isArray(props.actions) ? (React.createElement(Alert.Actions, { items: props.actions })) : (props.actions)),\n onClose && (React.createElement(Button, { view: \"flat\", className: bAlert('close-btn'), onClick: onClose, extraProps: {\n 'aria-label': i18n('label_close'),\n } },\n React.createElement(Icon, { data: Xmark, size: DEFAULT_ICON_SIZE, className: colorText({ color: 'secondary' }) })))))));\n};\nAlert.Icon = AlertIcon;\nAlert.Title = AlertTitle;\nAlert.Actions = AlertActions;\nAlert.Action = AlertAction;\n","import React from 'react';\nimport { Text } from '../Text';\nimport { bAlert } from './constants';\nexport const AlertTitle = ({ text, className }) => {\n return (React.createElement(Text, { variant: \"subheader-2\", className: bAlert('title', className) }, text));\n};\n","'use client';\nimport React from 'react';\nimport { Flex } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { bAlert } from './constants';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertActions = ({ items, children, className }) => {\n const { layout } = useAlertContext();\n return (React.createElement(Flex, { className: bAlert('actions', { minContent: layout === 'horizontal' }, className), direction: \"row\", gap: \"3\", wrap: true, alignItems: layout === 'horizontal' ? 'center' : 'flex-start' }, (items === null || items === void 0 ? void 0 : items.map(({ handler, text }, i) => (React.createElement(AlertAction, { key: i, onClick: handler }, text)))) || children));\n};\n","'use client';\nimport { __rest } from \"tslib\";\nimport React from 'react';\nimport { useActionHandlers } from '../../hooks';\nimport { Box } from '../layout';\nimport { block } from '../utils/cn';\nimport './Card.css';\nconst b = block('card');\nexport const Card = React.forwardRef(function Card(props, ref) {\n const { type = 'container', theme, view, size = 'm', children, className, onClick, disabled, selected } = props, restProps = __rest(props, [\"type\", \"theme\", \"view\", \"size\", \"children\", \"className\", \"onClick\", \"disabled\", \"selected\"]);\n const isTypeAction = type === 'action';\n const isTypeSelection = type === 'selection';\n const isTypeContainer = type === 'container';\n /* Clickable card — only with type 'action' or 'selection' and not selected or disabled */\n const hasAction = isTypeAction || isTypeSelection;\n const isClickable = hasAction && Boolean(onClick) && !(disabled || selected);\n /* Theme only with type 'container' */\n const defaultTheme = isTypeContainer ? 'normal' : undefined;\n /* View only with type 'container' and 'selection' */\n const defaultView = isTypeContainer || isTypeSelection ? 'outlined' : undefined;\n const handleClick = isClickable ? onClick : undefined;\n const { onKeyDown } = useActionHandlers(onClick);\n return (React.createElement(Box, Object.assign({ ref: ref, role: isClickable ? 'button' : undefined, className: b({\n theme: theme || defaultTheme,\n view: view || defaultView,\n type,\n selected,\n size,\n disabled,\n clickable: isClickable,\n }, className), onClick: handleClick, onKeyDown: isClickable ? onKeyDown : undefined, tabIndex: isClickable ? 0 : undefined }, restProps), children));\n});\n","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n"],"names":["block","cn","CollapsedString","_ref","value","_ref$limit","limit","_useToggle","useToggle","_useToggle2","_slicedToArray","expanded","toggleExpanded","hasToggle","length","text","useMemo","slice","_jsxs","className","children","_jsx","ClickableText","onClick","prepareRoleListValue","roles","otherMembers","arguments","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","title","data","frozen","newItems","concat","itemClassName","role","extraProps","_objectSpread","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","map_","filter_","_ref2","removed","_ref3","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","props","Block","makeErrorFields","errors","compact_","error","index","name","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","Component","YTDFDialog","withLazyLoading","React","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","_React$useState","_React$useState2","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","getQTApiSetup","QT_CLUSTER","getQueryTrackerCluster","cluster","getClusterConfigByName","proxy","getClusterProxy","manageTokensGetList","credentials","dispatch","MANAGE_TOKENS_LIST","REQUEST","ytApiV4Id","listUserTokens","YTApiId","parameters","with_metadata","setup","then","SUCCESS","FAILURE","manageTokensRevokeToken","token_sha256","wrapApiPromiseByToaster","revokeToken","issueToken","autoHide","toasterName","successContent","openManageTokensModal","MANAGE_TOKENS_MODALS_OPEN","closeManageTokensModal","MANAGE_TOKENS_MODALS_CLOSE","sha256","_x","_sha","apply","str","buf","crypto","subtle","digest","TextEncoder","encode","Uint8Array","x","toString","join","ManageTokensPasswordModalContext","PasswordModal","_useSelector","setError","username","useSelector","getCurrentUserName","ytAuthCluster","getSettingsCluster","_Fragment","Dialog","open","hasCloseButton","onClose","handleCancel","headerProps","pristineSubmittable","modal","initialValues","onAdd","password","getState","values","password_sha256","axios","post","handleConfirm","_error$response","response","fields","Alert","message","required","caption","footerProps","propsButtonCancel","PromiseWaiter","_classCallCheck","promise","resolve","_d","reject","_e","_createClass","key","_this","this","Promise","d","e","ManageTokensPasswordModalContextProvider","_React$useState3","_React$useState4","setVisible","p","getPassword","create","Provider","Error","hash","useManageTokensPasswordModalContext","context","AuthenticationGenerateTokenFormSection","useThunkDispatch","_useState","useState","_useState2","_useState3","_useState4","token","setToken","theme","layout","actions","ClipboardButton","Button","size","view","form","description","manageTokensCreateToken","AuthenticationPasswordSection","onSuccess","_useState5","_useState6","handleSubmit","RevokeToken","_useState7","_useState8","Icon","awesome","Modal","content","onCancel","onConfirm","handleClickRemoveToken","onOutsideClick","AuthenticationTokensSection","onSuccessRemove","onClickGenerateTokenButton","tokens","manageTokensSelector","tokenHash","DataTableYT","loaded","useThemeYT","noItemsText","rowClassName","columns","header","width","render","String","format","NO_VALUE","truncate_","moment","settings","stickyHead","displayIndices","sortable","highlightRows","stripedRows","disableSortReset","ViewSection","ManageTokensModalContent","_useState9","_useState10","_useViewSectionState","section","setSection","generate","AlertContext","useAlertContext","AlertAction","Object","assign","bAlert","AlertContextProvider","typeToIcon","danger","filled","xmlns","height","fill","viewBox","fillRule","clipRule","outlined","info","CircleInfo","success","CircleCheck","warning","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","en","corners","style","align","qa","Card","spacing","py","px","Flex","gap","alignItems","icon","direction","grow","justifyContent","Title","Array","isArray","Actions","items","i18n","I","Xmark","colorText","color","iconByTheme","Text","variant","minContent","wrap","handler","i","Action","b","ref","disabled","selected","restProps","isTypeSelection","isTypeContainer","isClickable","Boolean","defaultTheme","defaultView","handleClick","onKeyDown","useActionHandlers","Box","clickable","tabIndex","toggleReducer","state","nextValue","initialValue","useReducer"],"sourceRoot":""}
|
@@ -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 </>\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":""}
|
File without changes
|