1"use strict";(globalThis.webpackChunk_mlflow_mlflow=globalThis.webpackChunk_mlflow_mlflow||[]).push([[4060],{94852(e,s,r){r.d(s,{E:()=>w});var n=r(15032),l=r(51477),a=r(10587),o=r(77753),i=r(89237),d=r(58709),t=r(65888),c=r(83113),m=r(63968);const u={resourceType:d.Rx[0],scope:"all",resourceId:"",permission:d.Jj[0]},p=({value:e,onChange:s,workspace:r,disabled:u,showResourceRequiredError:p=!1})=>{const{theme:h}=(0,a.u)(),[g,f]=(0,l.useState)(""),{workspacesEnabled:v,loading:b}=(0,c.Xu)(),y=(0,l.useMemo)(()=>v||b?d.Rx:d.Rx.filter(e=>"workspace"!==e),[v,b]),Y=(0,d.tj)(e.resourceType),{options:C,isLoading:w,error:x}=(0,t.YI)(e.resourceType,r),k=(0,l.useMemo)(()=>{const e=g.trim().toLowerCase();return e?C.filter(s=>s.name.toLowerCase().includes(e)||s.id.toLowerCase().includes(e)):C},[C,g]),_=C.find(s=>s.id===e.resourceId),T=e=>e.name===e.id?e.name:`${e.name} (${e.id})`;return(0,m.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:h.spacing.md},""),children:[(0,m.FD)("div",{children:[(0,m.Y)(i.d,{children:"Resource Type"}),(0,m.Y)(o.SimpleSelect,{id:"admin-role-permission-form-resource-type",componentId:"admin.role_permission_form.resource_type",value:e.resourceType,onChange:({target:r})=>{const n=r.value,l=(0,d.zD)(n),a=l.includes(e.permission)?e.permission:l[0];s({...e,resourceType:n,scope:"all",resourceId:"",permission:a})},disabled:u,children:y.map(e=>(0,m.Y)(o.SimpleSelectOption,{value:e,children:(0,d.tj)(e)},e))})]}),"workspace"===e.resourceType?(0,m.FD)("div",{children:[(0,m.Y)(i.d,{children:"Workspace"}),(0,m.FD)(a.T.Text,{color:"secondary",children:[null!==r&&void 0!==r?r:"default"," ",(0,m.Y)(a.T.Text,{color:"secondary",size:"sm",children:"(this grant applies to the role's workspace)"})]})]}):(0,m.FD)(m.FK,{children:[(0,m.FD)("div",{children:[(0,m.Y)(i.d,{children:"Scope"}),(0,m.FD)(o.Radio.Group,{componentId:"admin.role_permission_form.scope",name:"admin-role-permission-form-scope",value:e.scope,onChange:r=>s({...e,scope:r.target.value,resourceId:""}),layout:"vertical",children:[(0,m.FD)(o.Radio,{value:"specific",children:["Specific ",Y.toLowerCase()]}),(0,m.FD)(o.Radio,{value:"all",children:["All ",Y.toLowerCase(),"s"]})]})]}),"specific"===e.scope&&(0,m.FD)("div",{children:[(0,m.Y)(i.d,{children:Y}),p&&(0,m.FD)(a.T.Text,{color:"error",size:"sm",css:(0,n.AH)({display:"block",marginBottom:h.spacing.xs},""),"data-testid":"admin.role_permission_form.resource_required_error",children:["Select a specific ",Y.toLowerCase()," or switch the scope to"," ",(0,m.FD)("strong",{children:["All ",Y.toLowerCase(),"s"]})," before submitting."]}),(0,m.FD)(o.DialogCombobox,{componentId:"admin.role_permission_form.resource_id",label:Y,value:e.resourceId?[e.resourceId]:[],children:[(0,m.Y)(o.DialogComboboxTrigger,{withInlineLabel:!1,placeholder:`Select ${Y.toLowerCase()}`,renderDisplayedValue:()=>_?T(_):e.resourceId,onClear:()=>s({...e,resourceId:""}),width:"100%",disabled:u}),(0,m.FD)(o.DialogComboboxContent,{style:{zIndex:h.options.zIndexBase+100},loading:w,children:[x&&(0,m.FD)("div",{css:(0,n.AH)({padding:h.spacing.sm,color:h.colors.textValidationDanger},""),children:["Failed to load ",Y.toLowerCase(),"s"]}),(0,m.Y)(o.DialogComboboxOptionList,{children:(0,m.Y)(o.DialogComboboxOptionListSearch,{controlledValue:g,setControlledValue:f,children:0!==k.length||w?k.map(r=>(0,m.Y)(a.aw,{value:r.id,onChange:r=>{s({...e,resourceId:r}),f("")},checked:r.id===e.resourceId,children:T(r)},r.id)):(0,m.Y)(a.aw,{value:"",onChange:()=>{},checked:!1,disabled:!0,children:g?"No matching results":"No resources found"})})})]})]})]})]}),(0,m.FD)("div",{children:[(0,m.Y)(i.d,{children:"Permission"}),(0,m.Y)(o.SimpleSelect,{id:"admin-role-permission-form-level",componentId:"admin.role_permission_form.permission_level",value:e.permission,onChange:({target:r})=>s({...e,permission:r.value}),disabled:u,children:(0,d.zD)(e.resourceType).map(e=>(0,m.Y)(o.SimpleSelectOption,{value:e,children:e},e))})]})]})};var h={name:"82a6rk",styles:"flex:1"},g={name:"82a6rk",styles:"flex:1"},f={name:"82a6rk",styles:"flex:1"},v={name:"m7hv6",styles:"flex:0;min-width:60px;max-width:60px"},b={name:"82a6rk",styles:"flex:1"},y={name:"82a6rk",styles:"flex:1"},Y={name:"82a6rk",styles:"flex:1"},C={name:"m7hv6",styles:"flex:0;min-width:60px;max-width:60px"};
1const w=({value:e,onChange:s,workspace:r,disabled:t,onUnsavedDraftChange:c})=>{const{theme:w}=(0,a.u)(),[x,k]=(0,l.useState)(u),_=(e=>"workspace"===e.resourceType||"all"===e.scope||"specific"===e.scope&&e.resourceId.trim().length>0)(x),T=(e=>e.resourceType!==u.resourceType||e.scope!==u.scope||e.resourceId!==u.resourceId||e.permission!==u.permission)(x),D=T&&!_,A=(0,l.useRef)(c);(0,l.useEffect)(()=>{A.current=c},[c]),(0,l.useEffect)(()=>{var e;null===(e=A.current)||void 0===e||e.call(A,T)},[T]);return(0,m.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:w.spacing.md},""),children:[e.length>0&&(0,m.FD)(o.Table,{scrollable:!0,noMinHeight:!0,css:(0,n.AH)({border:`1px solid ${w.colors.border}`},""),children:[(0,m.FD)(o.TableRow,{isHeader:!0,children:[(0,m.Y)(o.TableHeader,{componentId:"admin.role_permissions.staged_type",css:h,children:"Resource type"}),(0,m.Y)(o.TableHeader,{componentId:"admin.role_permissions.staged_pattern",css:g,children:"Pattern"}),(0,m.Y)(o.TableHeader,{componentId:"admin.role_permissions.staged_level",css:f,children:"Permission"}),(0,m.Y)(o.TableHeader,{componentId:"admin.role_permissions.staged_actions",css:v,children:" "})]}),e.map((r,n)=>(0,m.FD)(o.TableRow,{children:[(0,m.Y)(o.TableCell,{css:b,children:(0,m.Y)(o.Tag,{componentId:"admin.role_permissions.staged_type_tag",children:(0,d.tj)(r.resourceType)})}),(0,m.Y)(o.TableCell,{css:y,children:(0,m.Y)("code",{children:(0,d.Sw)(r.resourcePattern)})}),(0,m.Y)(o.TableCell,{css:Y,children:(0,m.Y)(o.Tag,{componentId:"admin.role_permissions.staged_level_tag",color:"indigo",children:r.permission})}),(0,m.Y)(o.TableCell,{css:C,children:(0,m.Y)(a.B,{componentId:"admin.role_permissions.staged_remove",type:"tertiary",size:"small",icon:(0,m.Y)(a.n,{}),"aria-label":`Remove ${r.resourceType} ${(0,d.Sw)(r.resourcePattern)}`,onClick:()=>{return r=n,void s(e.filter((e,s)=>s!==r));var r},disabled:t})})]},`${r.resourceType}-${r.resourcePattern}-${r.permission}-${n}`))]}),(0,m.FD)("div",{css:(0,n.AH)({border:`1px dashed ${w.colors.border}`,borderRadius:w.general.borderRadiusBase,padding:w.spacing.md,display:"flex",flexDirection:"column",gap:w.spacing.md},""),children:[(0,m.Y)(i.d,{children:"Add a permission"}),(0,m.Y)(p,{value:x,onChange:k,workspace:r,disabled:t,showResourceRequiredError:D}),(0,m.FD)("div",{css:(0,n.AH)({display:"flex",justifyContent:"flex-end",gap:w.spacing.sm},""),children:[T&&(0,m.Y)(a.B,{componentId:"admin.role_permissions.clear",type:"tertiary",onClick:()=>k(u),disabled:t,children:"Clear"}),(0,m.Y)(a.B,{componentId:"admin.role_permissions.add",onClick:()=>{if(!_)return;const r=(e=>"workspace"===e.resourceType||"all"===e.scope?d.vV:e.resourceId.trim())(x);e.some(e=>e.resourceType===x.resourceType&&e.resourcePattern===r&&e.permission===x.permission)||s([...e,{resourceType:x.resourceType,resourcePattern:r,permission:x.permission}]),k(u)},disabled:!_||t,children:"Add"})]})]})]})}},56838(e,s,r){r.d(s,{q:()=>c});var n=r(15032),l=r(51477),a=r(77753),o=r(10587),i=r(89237),d=r(65888),t=r(63968);const c=({value:e,onChange:s,disabled:r})=>{const{theme:c}=(0,o.u)(),[m,u]=(0,l.useState)(""),{data:p,isLoading:h}=(0,d.QT)(),g=(0,l.useMemo)(()=>{var e;return null!==(e=null===p||void 0===p?void 0:p.users)&&void 0!==e?e:[]},[p]),f=(0,l.useMemo)(()=>[...g].sort((e,s)=>e.username.localeCompare(s.username)),[g]),v=(0,l.useMemo)(()=>{const e=m.trim().toLowerCase();return e?f.filter(s=>s.username.toLowerCase().includes(e)):f},[f,m]),b=(0,l.useMemo)(()=>new Set(e),[e]),y=(0,l.useMemo)(()=>0===e.length?"":1===e.length?e[0]:`${e.length} users selected`,[e]),Y=(0,l.useMemo)(()=>y?[y]:[],[y]);return(0,t.FD)("div",{children:[(0,t.Y)(i.d,{children:"Users"}),h?(0,t.Y)("div",{css:(0,n.AH)({padding:c.spacing.sm},""),children:(0,t.Y)(o.ah,{size:"small"})}):0===g.length?(0,t.Y)(o.T.Text,{color:"secondary",children:"No users available."}):(0,t.FD)(a.DialogCombobox,{componentId:"admin.role_users.users",label:"Users",multiSelect:!0,value:Y,children:[(0,t.Y)(a.DialogComboboxTrigger,{withInlineLabel:!1,placeholder:"Select one or more users",onClear:()=>s([]),width:"100%",disabled:r}),(0,t.Y)(a.DialogComboboxContent,{style:{zIndex:c.options.zIndexBase+100},children:(0,t.Y)(a.DialogComboboxOptionList,{children:(0,t.Y)(a.DialogComboboxOptionListSearch,{controlledValue:m,setControlledValue:u,children:0===v.length?(0,t.Y)(o.av,{value:"",checked:!1,onChange:()=>{},disabled:!0,children:m?"No matching users":"No users available"}):v.map(r=>(0,t.Y)(o.av,{value:r.username,checked:b.has(r.username),onChange:()=>{return n=r.username,void(b.has(n)?s(e.filter(e=>e!==n)):s([...e,n]));var n}},r.username))})})})]})]})}},4060(e,s,r){r.r(s),r.d(s,{default:()=>Z});var n=r(15032),l=r(51477),a=r(10587),o=r(77753),i=r(5460),d=r(99256),t=r(39521),c=r(83113),m=r(76103),u=r(39286),p=r(95364);const h=(e,s)=>{const[r,n]=(0,l.useState)(()=>new Set),a=(0,l.useMemo)(()=>{const n=new Set(e.map(e=>e[s]));return new Set(Array.from(r).filter(e=>n.has(e)))},[r,e,s]),o=e.length>0&&e.every(e=>a.has(e[s])),i=(0,l.useCallback)(e=>{n(s=>{const r=new Set(s);return r.has(e)?r.delete(e):r.add(e),r})},[]),d=(0,l.useCallback)(()=>{n(o?new Set:new Set(e.map(e=>e[s])))},[o,e,s]),t=(0,l.useCallback)(()=>n(new Set),[]);return{visibleSelected:a,isAllSelected:o,toggleItem:i,toggleAll:d,clear:t}};var g=r(65888),f=r(58709),v=r(89237),b=r(20193),y=r(14506),Y=r(37940),C=r(84599),w=r(10629),x=r(27618),k=r(59245),_=r(63968);var T={name:"unrh3l",styles:"display:flex;justify-content:space-between;width:100%"};const D=({open:e,onClose:s})=>{const{theme:r}=(0,a.u)(),i=(0,b.jE)(),d=(0,g.Tk)(),t=(0,g.qD)(),p=(0,g.PV)(),h=(0,m.Vr)(),{workspacesEnabled:D}=(0,c.Xu)(),A=p&&D,{workspaces:I}=(0,w.C)(A),S=null!==h&&void 0!==h?h:f.I,[F,H]=(0,l.useState)(""),[M,R]=(0,l.useState)(""),[$,z]=(0,l.useState)(!1),[B,L]=(0,l.useState)(x.x),[P,q]=(0,l.useState)([]),[j,E]=(0,l.useState)(S),U=D?j:void 0,[V,N]=(0,l.useState)(!1),[O,W]=(0,l.useState)(!1),[X,K]=(0,l.useState)(!1),[Q,G]=(0,l.useState)(null),[J,Z]=(0,l.useState)(null),ee=(0,g.X3)(I);(0,l.useEffect)(()=>{e&&(H(""),R(""),z(!1),L(x.x),q([]),E(S),W(!1),K(!1),G(null),Z(null))},[e]);const se=B.roleIds.length>0,re=P.length>0,ne=null!==J||Boolean(F.trim()&&M),le=(0,l.useCallback)(async()=>{const e=F.trim();if(null===J&&(!e||!M))return void G("Username and password are required");if(K(!0),null===J)try{await d.mutateAsync({username:e,password:M}),Z(e)}catch(o){return G((null===o||void 0===o?void 0:o.message)||"Failed to create user"),void K(!1)}const r=[];if($)try{await Y.y.updateAdmin({username:e,is_admin:!0}
1),i.invalidateQueries({queryKey:g.Sq.users})}catch(o){var n;r.push(`Setting admin status failed: ${null!==(n=null===o||void 0===o?void 0:o.message)&&void 0!==n?n:"unknown error"}`)}if(se){for(const s of B.roleIds)try{await Y.y.assignRole(e,s)}catch(o){var l;r.push(`Role assignment (id ${s}) failed: ${null!==(l=null===o||void 0===o?void 0:o.message)&&void 0!==l?l:"unknown error"}`)}i.invalidateQueries({queryKey:C.Mn.userRoles(e)}),i.invalidateQueries({queryKey:g.Sq.users});for(const e of B.roleIds)i.invalidateQueries({queryKey:g.Sq.roleUsers(e)})}if(re)for(const s of P)try{await t.mutateAsync({resource_type:s.resourceType,resource_id:s.resourceId,username:e,permission:s.permission,workspace:U})}catch(o){var a;r.push(`Direct permission ${s.resourceType}:${s.resourceId} \u2192 ${s.permission} failed: ${null!==(a=null===o||void 0===o?void 0:o.message)&&void 0!==a?a:"unknown error"}`)}0!==r.length?(G(`User ${e} created, but some grants failed:\n${r.join("\n")}\nOpen the user's detail page and click "Edit access" to retry.`),K(!1)):s()},[F,M,$,se,re,B.roleIds,P,U,J,d,i,t,s]);return(0,_.FD)(a.M,{componentId:"admin.create_user_modal",title:"Create User",visible:e,onCancel:s,size:"wide",footer:(0,_.FD)("div",{css:T,children:[(0,_.Y)(a.B,{componentId:"admin.create_user_modal.cancel",onClick:s,disabled:X,children:"Cancel"}),(0,_.Y)(a.B,{componentId:"admin.create_user_modal.submit",type:"primary",onClick:()=>V?W(!0):le(),loading:X,disabled:!ne,children:null!==J?"Retry failed grants":$||se||re?"Create user and grant access":"Create user"})]}),children:[Q&&(0,_.Y)(o.Alert,{componentId:"admin.create_user_modal.error",type:"error",message:Q,closable:!0,onClose:()=>G(null),css:(0,n.AH)({marginBottom:r.spacing.md,position:"sticky",top:0,zIndex:1},"")}),(0,_.Y)(y.o,{title:"User details",children:(0,_.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:r.spacing.md},""),children:[(0,_.FD)("div",{children:[(0,_.Y)(v.d,{children:"Username"}),(0,_.Y)(o.Input,{componentId:"admin.create_user_modal.username",value:F,onChange:e=>H(e.target.value),placeholder:"Enter username",autoFocus:!0,disabled:X||null!==J})]}),(0,_.FD)("div",{children:[(0,_.Y)(v.d,{children:"Password"}),(0,_.Y)(o.Input,{componentId:"admin.create_user_modal.password",type:"password",value:M,onChange:e=>R(e.target.value),placeholder:"Enter password",disabled:X||null!==J})]})]})}),(0,_.FD)(y.o,{title:"Role assignment",collapsible:!0,defaultCollapsed:!0,children:[(0,_.Y)(a.T.Text,{color:"secondary",css:(0,n.AH)({display:"block",marginBottom:r.spacing.sm},""),children:"Assign one or more existing roles to give this user reusable bundles of permissions."}),(0,_.Y)(x.O,{value:B,onChange:L,disabled:X})]}),(0,_.FD)(y.o,{title:"Direct permissions",collapsible:!0,defaultCollapsed:!0,hideDivider:!p,children:[(0,_.Y)(a.T.Text,{color:"secondary",css:(0,n.AH)({display:"block",marginBottom:r.spacing.sm},""),children:"Grant one or more one-off permissions on specific resources."}),A&&(0,_.FD)("div",{css:(0,n.AH)({marginBottom:r.spacing.md},""),children:[(0,_.Y)(v.d,{children:"Workspace"}),(0,_.Y)(o.SimpleSelect,{id:"admin-create-user-modal-grant-workspace",componentId:"admin.create_user_modal.grant_workspace",value:j,onChange:({target:e})=>E(e.value),disabled:X||null!==J,children:ee.map(e=>(0,_.Y)(o.SimpleSelectOption,{value:e,children:e},e))}),(0,_.Y)(a.T.Text,{color:"secondary",size:"sm",css:(0,n.AH)({display:"block",marginTop:r.spacing.xs},""),children:"Grants land on the user's per-workspace direct-grant role. Pick a workspace other than your active one to grant access there."})]}),(0,_.Y)(k.D,{value:P,onChange:q,workspace:U,disabled:X,onUnsavedDraftChange:N},String(e))]}),p&&(0,_.FD)(y.o,{title:"Admin status",hideDivider:!0,children:[(0,_.Y)(a.T.Text,{color:"secondary",css:(0,n.AH)({display:"block",marginBottom:r.spacing.sm},""),children:"Admins can manage all users, roles, and workspaces."}),(0,_.Y)(o.Switch,{componentId:"admin.create_user_modal.is_admin",checked:$,onChange:z,label:"Make this user an admin",disabled:X})]}),(0,_.Y)(u.R,{componentId:"admin.create_user_modal.discard_unsaved_draft",title:"Discard unsaved direct permission?",visible:O,message:"You started adding a direct permission but didn't click Add. Continuing will discard it. Go back to either click Add to stage it, or Clear to drop the draft on the spot.",okText:"Continue",cancelText:"Back",danger:!1,onCancel:()=>W(!1),onConfirm:()=>{W(!1),le()}})]})};var A=r(94852),I=r(56838);var S={name:"unrh3l",styles:"display:flex;justify-content:space-between;width:100%"};const F=({open:e,onClose:s})=>{const{theme:r}=(0,a.u)(),i=(0,g.U7)(),{workspacesEnabled:d}=(0,c.Xu)(),{workspaces:t}=(0,w.C)(d),[m,p]=(0,l.useState)(""),[h,b]=(0,l.useState)(f.I),C=d?h:void 0,[x,k]=(0,l.useState)(""),[T,D]=(0,l.useState)([]),[F,H]=(0,l.useState)([]),[M,R]=(0,l.useState)(!1),[$,z]=(0,l.useState)(!1),[B,L]=(0,l.useState)(!1),[P,q]=(0,l.useState)(null),[j,E]=(0,l.useState)(null),U=(0,l.useMemo)(()=>{const e=new Set;for(const s of t)s.name!==f.I&&e.add(s.name);return[f.I,...Array.from(e).sort()]},[t]);(0,l.useEffect)(()=>{e&&(p(""),b(f.I),k(""),D([]),H([]),z(!1),L(!1),q(null),E(null))},[e]);const V=null!==j||m.trim().length>0,N=(0,l.useCallback)(async()=>{const e=m.trim();if(null===j&&!e)return void q("Role name cannot be empty");L(!0);let r=j;if(null===r)try{const s={name:e,workspace:h,description:x||void 0};r=(await i.mutateAsync(s)).role.id,E(r)}catch(d){return q((null===d||void 0===d?void 0:d.message)||"Failed to create role"),void L(!1)}const n=[];for(const s of T)try{await Y.y.addPermission({role_id:r,resource_type:s.resourceType,resource_pattern:(0,f.af)(s.resourcePattern),permission:s.permission})}catch(d){var l;n.push(`${s.resourceType}:${(0,f.Sw)(s.resourcePattern)} \u2192 ${s.permission} (${null!==(l=null===d||void 0===d?void 0:d.message)&&void 0!==l?l:"unknown"})`)}const a=[];for(const s of F)try{await Y.y.assignRole(s,r)}catch(d){var o;a.push(`${s} (${null!==(o=null===d||void 0===d?void 0:d.message)&&void 0!==o?o:"unknown"})`)}0!==n.length||0!==a.length?(q(`Role "${e}" created, but some follow-ups failed:\n`+(n.length>0?`Permissions: ${n.join("; ")}\n`:"")+(a.length>0?`Users: ${a.join("; ")}`:"")+"\nFinish wiring up the role from the role detail page."),L(!1)):s()},[m,h,x,T,F,j,i,s]);return(0,_.FD)(a.M,{componentId:"admin.create_role_modal",title:"Create Role",visible:e,onCancel:s,size:"wide",footer:(0,_.FD)("div",{css:S,children:[(0,_.Y)(a.B,{componentId:"admin.create_role_modal.cancel",onClick:s,disabled:B,children:"Cancel"}),(0,_.Y)(a.B,{componentId:"admin.create_role_modal.submit",type:"primary",onClick:()=>M?z(!0):N(),loading:B,disabled:!V,children:null!==j?"Retry failed grants":"Create role"})]}),children:[P&&(0,_.Y)(o.Alert,{componentId:"admin.create_role_modal.error",type:"error",message:P,closable:!0,onClose:()=>q(null),css:(0,n.AH)({marginBottom:r.spacing.md,position:"sticky",top:0,zIndex:1},"")}),(0,_.Y)(y.o,{title:"Role details",children:(0,_.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:r.spacing.md},""),children:[(0,_.FD)("div",{children:[(0,_.Y)(v.d,{children:"Name"}),(0,_.Y)(o.Input,{componentId:"admin.create_role_modal.name",value:m,onChange:e=>p(e.target.value),placeholder:"Enter role name",autoFocus:!0,disabled:B||null!==j})]}
1),d&&(0,_.FD)("div",{children:[(0,_.Y)(v.d,{children:"Workspace"}),(0,_.Y)(o.SimpleSelect,{id:"admin-create-role-modal-workspace",componentId:"admin.create_role_modal.workspace",value:h,onChange:({target:e})=>b(e.value),disabled:B||null!==j,children:U.map(e=>(0,_.Y)(o.SimpleSelectOption,{value:e,children:e},e))})]}),(0,_.FD)("div",{children:[(0,_.Y)(v.d,{children:"Description"}),(0,_.Y)(o.Input,{componentId:"admin.create_role_modal.description",value:x,onChange:e=>k(e.target.value),placeholder:"Enter description (optional)",disabled:B||null!==j})]}),(0,_.FD)(a.T.Paragraph,{css:(0,n.AH)({color:r.colors.textSecondary,marginTop:r.spacing.sm},""),children:["To make this a workspace manager role, add a permission with resource type ",(0,_.Y)("strong",{children:"workspace"}),", resource pattern ",(0,_.Y)("strong",{children:f.vV}),", and permission ",(0,_.Y)("strong",{children:"MANAGE"})," in the next section."]})]})}),(0,_.FD)(y.o,{title:"Permissions",collapsible:!0,defaultCollapsed:!0,children:[(0,_.Y)(a.T.Text,{color:"secondary",css:(0,n.AH)({display:"block",marginBottom:r.spacing.sm},""),children:"Add one or more permissions to this role. You can add more later from the role detail page."}),(0,_.Y)(A.E,{value:T,onChange:D,workspace:C,disabled:B,onUnsavedDraftChange:R},String(e))]}),(0,_.FD)(y.o,{title:"Assign users",hideDivider:!0,collapsible:!0,defaultCollapsed:!0,children:[(0,_.Y)(a.T.Text,{color:"secondary",css:(0,n.AH)({display:"block",marginBottom:r.spacing.sm},""),children:"Assign one or more users to this role. You can assign more later from the role detail page."}),(0,_.Y)(I.q,{value:F,onChange:H,disabled:B})]}),(0,_.Y)(u.R,{componentId:"admin.create_role_modal.discard_unsaved_draft",title:"Discard unsaved role permission?",visible:$,message:"You started adding a permission to this role but didn't click Add. Continuing will discard it. Go back to either click Add to stage it, or Clear to drop the draft on the spot.",okText:"Continue",cancelText:"Back",danger:!1,onCancel:()=>z(!1),onConfirm:()=>{z(!1),N()}})]})},H=({roles:e,scopeWorkspace:s})=>{const{theme:r}=(0,a.u)(),{workspacesEnabled:l,loading:o}=(0,c.Xu)(),i=o||l,d=e.filter(e=>!(0,f.hz)(e.name)),t=s?d.filter(e=>e.workspace===s):d;return 0===t.length?(0,_.Y)(a.T.Text,{color:"secondary",children:"\u2014"}):(0,_.Y)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:r.spacing.xs/2},""),children:t.map(e=>(0,_.Y)(a.T.Text,{size:"sm",children:i?(0,_.FD)(_.FK,{children:[(0,_.Y)("code",{children:e.workspace})," \u2192 ",e.name]}):e.name},e.id))})};var M={name:"1by9jh9",styles:"flex:0;min-width:40px;max-width:40px"},R={name:"1189xqs",styles:"flex:2"},$={name:"1189xqs",styles:"flex:2"},z={name:"82a6rk",styles:"flex:1"},B={name:"1by9jh9",styles:"flex:0;min-width:40px;max-width:40px"},L={name:"1189xqs",styles:"flex:2"},P={name:"1189xqs",styles:"flex:2"},q={name:"82a6rk",styles:"flex:1"};const j=()=>{var e;const{theme:s}=(0,a.u)(),{data:r,isLoading:d,error:c}=(0,g.QT)(),{data:f,isLoading:v}=(0,g.sg)(),b=null===f||void 0===f||null===(e=f.user)||void 0===e?void 0:e.username,y=d||v,Y=(0,g.iY)(),C=(0,g.Cz)(),w=(0,g.PV)(),x=(0,g.wG)(),k=w||x,T=(0,m.Vr)(),A=w?null:T,[I,S]=(0,l.useState)(!1),[F,j]=(0,l.useState)(!1),[E,U]=(0,l.useState)(null),V=(0,l.useMemo)(()=>{var e;return null!==(e=null===r||void 0===r?void 0:r.users)&&void 0!==e?e:[]},[r]),N=(0,l.useMemo)(()=>null==b?V:V.filter(e=>e.username!==b),[V,b]),{visibleSelected:O,isAllSelected:W,toggleItem:X,toggleAll:K,clear:Q}=h(N,"username");if(y)return(0,_.Y)("div",{css:(0,n.AH)({display:"flex",alignItems:"center",justifyContent:"center",gap:s.spacing.sm,padding:s.spacing.lg,minHeight:200},""),children:(0,_.Y)(a.ah,{size:"small"})});if(c)return(0,_.Y)(o.Alert,{componentId:"admin.users.query_error",type:"error",message:"Failed to load users",description:(null===c||void 0===c?void 0:c.message)||"An error occurred while fetching users."});const G=0===V.length?(0,_.Y)(a.ds,{title:(0,_.Y)(i.A,{id:"zRxidQ",defaultMessage:"No users"}),description:(0,_.Y)(i.A,{id:"4iVjvu",defaultMessage:"Create a user to get started."})}):null;return(0,_.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:s.spacing.md},""),children:[E&&(0,_.Y)(o.Alert,{componentId:"admin.users.error",type:"error",message:E,closable:!0,onClose:()=>U(null)}),k&&(0,_.FD)("div",{css:(0,n.AH)({display:"flex",justifyContent:"flex-end",alignItems:"center",gap:s.spacing.sm},""),children:[w&&(0,_.Y)(a.B,{componentId:"admin.users.bulk_delete_button",danger:!0,disabled:0===O.size,onClick:()=>j(!0),children:0===O.size?(0,_.Y)(i.A,{id:"Jq+dzd",defaultMessage:"Delete"}):(0,_.Y)(i.A,{id:"2ifJXM",defaultMessage:"Delete ({count})",values:{count:O.size}})}),(0,_.Y)(a.B,{componentId:"admin.users.create_button",type:"primary",onClick:()=>S(!0),children:(0,_.Y)(i.A,{id:"ABM9Yz",defaultMessage:"Create User"})})]}),(0,_.FD)(o.Table,{scrollable:!0,noMinHeight:!0,empty:G,css:(0,n.AH)({border:`1px solid ${s.colors.border}`,borderRadius:s.general.borderRadiusBase,overflow:"hidden"},""),children:[(0,_.FD)(o.TableRow,{isHeader:!0,children:[w&&(0,_.Y)(o.TableHeader,{componentId:"admin.users.select_header",css:M,children:(0,_.Y)(a.aH,{componentId:"admin.users.select_all",isChecked:W,onChange:K,"aria-label":"Select all users"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.users.username_header",css:R,children:(0,_.Y)(i.A,{id:"TQeU/X",defaultMessage:"Username"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.users.roles_header",css:$,children:(0,_.Y)(i.A,{id:"tMlCTg",defaultMessage:"Roles"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.users.admin_header",css:z,children:(0,_.Y)(i.A,{id:"ljrrDi",defaultMessage:"Admin"})})]}),V.map(e=>{var s;const r=e.username===b,n=(0,_.Y)(a.aH,{componentId:"admin.users.select_row",isChecked:O.has(e.username),isDisabled:r,onChange:()=>X(e.username),"aria-label":r?`Cannot select your own account (${e.username})`:`Select user ${e.username}`});return(0,_.FD)(o.TableRow,{children:[w&&(0,_.Y)(o.TableCell,{css:B,children:r?(0,_.Y)(a.s,{componentId:"admin.users.select_row.self_tooltip",content:(0,_.Y)(i.A,{id:"M9X4CX",defaultMessage:"You cannot delete your own account."}),children:(0,_.Y)("span",{children:n})}):n}),(0,_.Y)(o.TableCell,{css:L,children:(0,_.Y)(t.N_,{componentId:"admin.users.username_link",to:C(p.Ay.getUserDetailRoute(e.username)),children:e.username})}),(0,_.Y)(o.TableCell,{css:P,children:(0,_.Y)(H,{roles:null!==(s=e.roles)&&void 0!==s?s:[],scopeWorkspace:A})}),(0,_.Y)(o.TableCell,{css:q,children:e.is_admin?(0,_.Y)(o.Tag,{componentId:"admin.users.admin_tag",color:"indigo",children:"Admin"}):(0,_.Y)(a.T.Text,{color:"secondary",children:"\u2014"})})]},e.username)})]}),(0,_.Y)(D,{open:I,onClose:()=>S(!1)}),(0,_.Y)(u.R,{componentId:"admin.users.bulk_delete_modal",title:"Delete users",visible:F,onCancel:()=>j(!1),onConfirm:async()=>{U(null);const e=Array.from(O),s=(await Promise.allSettled(e.map(e=>Y.mutateAsync(e)))).filter(e=>"rejected"===e.status);var r,n;s.length>0&&U(`Failed to delete ${s.length}/${e.length} users: ${null!==(r=null===(n=s[0].reason)||void 0===n?void 0:n.message)&&void 0!==r?r:""}`);Q(),j(!1)},isLoading:Y.isLoading,message:(0,_.FD)(_.FK,{children:["Delete ",O.size," user",1===O.size?"":"s","? This action cannot be undone."]})})]})};
1var E={name:"1by9jh9",styles:"flex:0;min-width:40px;max-width:40px"},U={name:"1189xqs",styles:"flex:2"},V={name:"82a6rk",styles:"flex:1"},N={name:"1189xqs",styles:"flex:2"},O={name:"82a6rk",styles:"flex:1"},W={name:"1by9jh9",styles:"flex:0;min-width:40px;max-width:40px"},X={name:"1189xqs",styles:"flex:2"},K={name:"82a6rk",styles:"flex:1"},Q={name:"1189xqs",styles:"flex:2"},G={name:"82a6rk",styles:"flex:1"};const J=()=>{const{theme:e}=(0,a.u)(),s=(0,g.PV)(),r=(0,g.tB)(),d=(0,m.Vr)(),{workspacesEnabled:v,loading:b}=(0,c.Xu)(),y=b||v,Y=v||b?"Manager":"Admin",C=s||null!==d&&r.has(d),w=s?void 0:null!==d&&void 0!==d?d:void 0,x=s||Boolean(d),{data:k,isLoading:T,error:D}=(0,g.D_)(w,{enabled:x}),A=(0,g.rO)(),I=(0,g.Cz)(),[S,H]=(0,l.useState)(!1),[M,R]=(0,l.useState)(!1),[$,z]=(0,l.useState)(null),B=(0,l.useMemo)(()=>{var e;return(null!==(e=null===k||void 0===k?void 0:k.roles)&&void 0!==e?e:[]).filter(e=>!(0,f.hz)(e.name))},[k]),{visibleSelected:L,isAllSelected:P,toggleItem:q,toggleAll:j,clear:J}=h(B,"id");if(!x)return(0,_.Y)(a.ds,{title:(0,_.Y)(i.A,{id:"UsvDLH",defaultMessage:"Select a workspace"}),description:(0,_.Y)(i.A,{id:"XJP2Uv",defaultMessage:"Pick a workspace from the workspace selector to see its roles."})});if(T)return(0,_.Y)("div",{css:(0,n.AH)({display:"flex",alignItems:"center",justifyContent:"center",gap:e.spacing.sm,padding:e.spacing.lg,minHeight:200},""),children:(0,_.Y)(a.ah,{size:"small"})});if(D)return(0,_.Y)(o.Alert,{componentId:"admin.roles.query_error",type:"error",message:"Failed to load roles",description:(null===D||void 0===D?void 0:D.message)||"An error occurred while fetching roles."});const Z=0===B.length?(0,_.Y)(a.ds,{title:(0,_.Y)(i.A,{id:"z3xE99",defaultMessage:"No roles"}),description:(0,_.Y)(i.A,{id:"Wbpp7P",defaultMessage:"Create a role to assign permissions to users."})}):null;return(0,_.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:e.spacing.md},""),children:[$&&(0,_.Y)(o.Alert,{componentId:"admin.roles.error",type:"error",message:$,closable:!0,onClose:()=>z(null)}),(0,_.FD)("div",{css:(0,n.AH)({display:"flex",justifyContent:"flex-end",alignItems:"center",gap:e.spacing.sm},""),children:[C&&(0,_.Y)(a.B,{componentId:"admin.roles.bulk_delete_button",danger:!0,disabled:0===L.size,onClick:()=>R(!0),children:0===L.size?(0,_.Y)(i.A,{id:"v9fbSW",defaultMessage:"Delete"}):(0,_.Y)(i.A,{id:"SOHtlg",defaultMessage:"Delete ({count})",values:{count:L.size}})}),C&&(0,_.Y)(a.B,{componentId:"admin.roles.create_button",type:"primary",onClick:()=>H(!0),children:(0,_.Y)(i.A,{id:"Fs6pF+",defaultMessage:"Create Role"})})]}),(0,_.FD)(o.Table,{scrollable:!0,noMinHeight:!0,empty:Z,css:(0,n.AH)({border:`1px solid ${e.colors.border}`,borderRadius:e.general.borderRadiusBase,overflow:"hidden"},""),children:[(0,_.FD)(o.TableRow,{isHeader:!0,children:[C&&(0,_.Y)(o.TableHeader,{componentId:"admin.roles.select_header",css:E,children:(0,_.Y)(a.aH,{componentId:"admin.roles.select_all",isChecked:P,onChange:j,"aria-label":"Select all roles"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.roles.name_header",css:U,children:(0,_.Y)(i.A,{id:"4YBr1I",defaultMessage:"Name"})}),y&&(0,_.Y)(o.TableHeader,{componentId:"admin.roles.workspace_header",css:V,children:(0,_.Y)(i.A,{id:"lnxy2u",defaultMessage:"Workspace"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.roles.description_header",css:N,children:(0,_.Y)(i.A,{id:"sYKPid",defaultMessage:"Description"})}),(0,_.Y)(o.TableHeader,{componentId:"admin.roles.admin_role_header",css:O,children:y?(0,_.Y)(i.A,{id:"QSrkjY",defaultMessage:"Workspace Manager"}):(0,_.Y)(i.A,{id:"UlkINy",defaultMessage:"Admin"})})]}),B.map(e=>(0,_.FD)(o.TableRow,{children:[C&&(0,_.Y)(o.TableCell,{css:W,children:(0,_.Y)(a.aH,{componentId:"admin.roles.select_row",isChecked:L.has(e.id),onChange:()=>q(e.id),"aria-label":`Select role ${e.name}`})}),(0,_.Y)(o.TableCell,{css:X,children:(0,_.Y)(t.N_,{componentId:"admin.roles.name_link",to:I(p.Ay.getRoleDetailRoute(e.id)),children:e.name})}),y&&(0,_.Y)(o.TableCell,{css:K,children:e.workspace}),(0,_.Y)(o.TableCell,{css:Q,children:e.description||"-"}),(0,_.Y)(o.TableCell,{css:G,children:(0,f.By)(e)?(0,_.Y)(o.Tag,{componentId:"admin.roles.admin_tag",color:"indigo",children:Y}):null})]},e.id))]}),(0,_.Y)(F,{open:S,onClose:()=>H(!1)}),(0,_.Y)(u.R,{componentId:"admin.roles.bulk_delete_modal",title:"Delete roles",visible:M,onCancel:()=>R(!1),onConfirm:async()=>{z(null);const e=Array.from(L),s=(await Promise.allSettled(e.map(e=>A.mutateAsync(e)))).filter(e=>"rejected"===e.status);var r,n;s.length>0&&z(`Failed to delete ${s.length}/${e.length} roles: ${null!==(r=null===(n=s[0].reason)||void 0===n?void 0:n.message)&&void 0!==r?r:""}`);J(),R(!1)},isLoading:A.isLoading,message:(0,_.FD)(_.FK,{children:["Delete ",L.size," role",1===L.size?"":"s","? This action cannot be undone."]})})]})},Z=()=>{const{theme:e}=(0,a.u)(),[s,r]=(0,t.ok)(),o="roles"===s.get("tab")?"roles":"users",c=(0,m.Vr)(),{pathname:u}=(0,t.zy)(),h=u===p.Bf.workspaceManagementPage;return(0,l.useEffect)(()=>{const e=h?"Workspace Manager - MLflow":"Platform Admin - MLflow";queueMicrotask(()=>{document.title=e})}
1,[h]),(0,_.Y)(d.m,{children:(0,_.FD)("div",{css:(0,n.AH)({padding:e.spacing.md,display:"flex",flexDirection:"column",gap:e.spacing.lg},""),children:[(0,_.FD)("div",{css:(0,n.AH)({display:"flex",flexDirection:"column",gap:e.spacing.xs},""),children:[(0,_.FD)("div",{css:(0,n.AH)({display:"flex",gap:e.spacing.sm,alignItems:"center"},""),children:[(0,_.Y)("div",{css:(0,n.AH)({borderRadius:e.borders.borderRadiusSm,backgroundColor:e.colors.backgroundSecondary,padding:e.spacing.sm,display:"flex"},""),children:(0,_.Y)(a.hZ,{})}),(0,_.Y)(a.T.Title,{withoutMargins:!0,level:2,children:h?(0,_.Y)(i.A,{id:"P0Y/ks",defaultMessage:"Workspace Manager"}):(0,_.Y)(i.A,{id:"vaeS94",defaultMessage:"Platform Admin"})})]}),h&&(0,_.Y)(a.T.Text,{color:"secondary",children:(0,_.Y)(i.A,{id:"zIXqYZ",defaultMessage:"Workspace: {workspace}",values:{workspace:(0,_.Y)("code",{children:c})}})})]}),(0,_.FD)(a.ht.Root,{componentId:"admin.tabs",valueHasNoPii:!0,value:o,onValueChange:e=>{const n=new URLSearchParams(s);"users"===e?n.delete("tab"):n.set("tab",e),r(n,{replace:!0})},children:[(0,_.FD)(a.ht.List,{children:[(0,_.Y)(a.ht.Trigger,{value:"users",children:(0,_.Y)(i.A,{id:"ZwyDx6",defaultMessage:"Users"})}),(0,_.Y)(a.ht.Trigger,{value:"roles",children:(0,_.Y)(i.A,{id:"jINNng",defaultMessage:"Roles"})})]}),(0,_.Y)(a.ht.Content,{value:"users",css:(0,n.AH)({paddingTop:e.spacing.md},""),children:(0,_.Y)(j,{})}),(0,_.Y)(a.ht.Content,{value:"roles",css:(0,n.AH)({paddingTop:e.spacing.md},""),children:(0,_.Y)(J,{})})]})]})})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.