All Downloads are FREE. Search and download functionalities are using the official Maven repository.

theme.keycloak.v2.admin.resources.assets.GroupsSection-913db2df.js Maven / Gradle / Ivy

There is a newer version: 25.0.1
Show newest version
import{_ as ee,r as p,k as V,bz as ie,X as Re,bv as S,aY as he,bA as Fe,m as Ke,ak as fe,bB as be,u as F,bC as H,c as te,b0 as se,j as t,bD as Oe,bE as xe,L as re,d as q,e as we,P as je,bF as Ne,b5 as Be,aD as Le,g as E,A as z,B as W,l as Se,F as Ue,V as ne,au as ae,D as ce,a7 as le,G as $,b as de,bs as Z,a8 as Y,aO as $e,bG as qe,q as Ce,O as ze,K as He,aW as Pe,x as We,bH as Je,aF as Xe,af as Ye,ag as Ze,bI as Qe,Z as et,bJ as tt}from"./index-0cda761d.js";import{P as st}from"./PermissionTab-06b68a7e.js";import{V as at}from"./ViewHeader-ff389f8e.js";import{u as nt,F as rt}from"./useIsFeatureEnabled-7d978ee4.js";import{u as U}from"./useToggle-3764a2a4.js";import{A as ot}from"./AttributeForm-c6d905c5.js";import{R as it}from"./AddRoleMappingModal-71c36ce9.js";import{L as ue,P as ct}from"./PaginatingTableToolbar-11bdf18a.js";import{K as me,o as lt}from"./KeycloakDataTable-a1a2bfca.js";import{f as Ge}from"./admin-ui-endpoint-f934fa67.js";import{K as dt}from"./KeycloakTextInput-ada01047.js";import{M as Ee,a as Ie}from"./Modal-ea09312d.js";import{F as ut}from"./Form-4087ddae.js";import{C as mt}from"./ConfirmDialog-100e6a40.js";import{b as P}from"./ToolbarContent-fee3570e.js";import{G as pt,a as gt}from"./GroupPickerDialog-9d38b823.js";import{S as ht}from"./TableToolbar-470a2060.js";import{C as ke}from"./Checkbox-3affa1d3.js";import{$ as ve}from"./Td-d9b96677.js";import{T as ft,a as J,b as X}from"./Tabs-76c5b0e3.js";import"./useLocaleSort-ef2c79ac.js";import"./Trans-4d909f1b.js";import"./Card-d5c0a973.js";import"./CardTitle-2a7bf3d6.js";import"./CardBody-8867799e.js";import"./Text-b9444fb8.js";import"./FormAccess-835af982.js";import"./copy-icon-b8d617db.js";import"./GridItem-1535d986.js";import"./KeyValueInput-597f6e1a.js";import"./Select-68736f55.js";import"./check-fc57dbe1.js";import"./star-icon-2ee5dfa7.js";import"./minus-icon-21b0d1e4.js";import"./minus-circle-icon-ac3563ca.js";import"./ActionListItem-c859aeaf.js";import"./plus-circle-icon-fe78809e.js";import"./EmptyStateBody-f9d2c033.js";import"./resource-0803fa9b.js";import"./filter-icon-56a9cd24.js";import"./EmptyStateSecondaryActions-e8364506.js";import"./getAuthorizationHeaders-f2376d1a.js";import"./DataListItemRow-7ca17a45.js";import"./data-list-7d55714c.js";import"./grip-vertical-icon-ba7b06db.js";import"./plus-icon-4f91635d.js";import"./MenuList-7fad6760.js";const Te=e=>{var{className:s="",children:n,hasNoPadding:o=!1}=e,r=ee(e,["className","children","hasNoPadding"]);return p.createElement("div",Object.assign({className:V(ie.drawerBody,o&&ie.modifiers.noPadding,s)},r),n)};Te.displayName="DrawerPanelBody";const Ve=e=>{var{className:s="",children:n,hasNoPadding:o=!1}=e,r=ee(e,["className","children","hasNoPadding"]);return p.createElement(Te,{hasNoPadding:o},p.createElement("div",Object.assign({className:V(ie.drawerHead,s)},r),n))};Ve.displayName="DrawerHead";const _e=e=>{var{isNested:s=!1,toolbar:n,children:o}=e,r=ee(e,["isNested","toolbar","children"]);return p.createElement(p.Fragment,null,n&&p.createElement(p.Fragment,null,n,p.createElement(Re,null)),p.createElement("ul",Object.assign({className:V("pf-c-tree-view__list"),role:s?"group":"tree"},r),o))};_e.displayName="TreeViewList";const G={badge:"pf-c-badge",modifiers:{compact:"pf-m-compact",guides:"pf-m-guides",expanded:"pf-m-expanded",noBackground:"pf-m-no-background",current:"pf-m-current",read:"pf-m-read",selectable:"pf-m-selectable",truncate:"pf-m-truncate"},themeDark:"pf-theme-dark",treeView:"pf-c-tree-view",treeViewAction:"pf-c-tree-view__action",treeViewContent:"pf-c-tree-view__content",treeViewListItem:"pf-c-tree-view__list-item",treeViewNode:"pf-c-tree-view__node",treeViewNodeCheck:"pf-c-tree-view__node-check",treeViewNodeContainer:"pf-c-tree-view__node-container",treeViewNodeContent:"pf-c-tree-view__node-content",treeViewNodeCount:"pf-c-tree-view__node-count",treeViewNodeIcon:"pf-c-tree-view__node-icon",treeViewNodeText:"pf-c-tree-view__node-text",treeViewNodeTitle:"pf-c-tree-view__node-title",treeViewNodeToggle:"pf-c-tree-view__node-toggle",treeViewNodeToggleIcon:"pf-c-tree-view__node-toggle-icon",treeViewSearch:"pf-c-tree-view__search"},bt=({name:e,title:s,id:n,isExpanded:o,defaultExpanded:r=!1,children:c=null,onSelect:l,onCheck:a,hasCheck:i=!1,checkProps:u={checked:!1},hasBadge:f=!1,customBadgeContent:g,badgeProps:h={isRead:!0},isSelectable:m=!1,isCompact:w,activeItems:C=[],itemData:_,parentItem:j,icon:k,expandedIcon:K,action:R,compareItems:A,useMemo:d})=>{const[v,b]=p.useState(r);p.useEffect(()=>{o!=null?b(o):r!=null&&b(v||r)},[o,r]);let M="button";i?M="label":m&&(M="div");const x=i||m?"button":"span",D=I=>S.createElement(x,Object.assign({className:V(G.treeViewNodeToggle),onClick:N=>{(m||i)&&b(!v),m&&N.stopPropagation()}},(i||m)&&{"aria-labelledby":`label-${I}`},{tabIndex:-1}),S.createElement("span",{className:V(G.treeViewNodeToggleIcon)},S.createElement(Ke,{"aria-hidden":"true"}))),B=I=>S.createElement("span",{className:V(G.treeViewNodeCheck)},S.createElement("input",Object.assign({type:"checkbox",onChange:N=>a&&a(N,_,j),onClick:N=>N.stopPropagation(),ref:N=>N&&(N.indeterminate=u.checked===null)},u,{checked:u.checked===null?!1:u.checked,id:I,tabIndex:-1}))),L=S.createElement("span",{className:V(G.treeViewNodeIcon)},!v&&k,v&&(K||k)),y=()=>{const I=S.createElement(S.Fragment,null,w&&s&&S.createElement("span",{className:V(G.treeViewNodeTitle)},s),m?S.createElement("button",{tabIndex:-1,className:V(G.treeViewNodeText)},e):S.createElement("span",{className:V(G.treeViewNodeText)},e));return w?S.createElement("span",{className:V(G.treeViewNodeContent)},I):I},T=S.createElement(S.Fragment,null,f&&c&&S.createElement("span",{className:V(G.treeViewNodeCount)},S.createElement(he,Object.assign({},h),g||c.props.data.length)),f&&!c&&g!==void 0&&S.createElement("span",{className:V(G.treeViewNodeCount)},S.createElement(he,Object.assign({},h),g)));return S.createElement("li",Object.assign({id:n,className:V(G.treeViewListItem,v&&G.modifiers.expanded)},v&&{"aria-expanded":"true"},{role:"treeitem",tabIndex:-1}),S.createElement("div",{className:V(G.treeViewContent)},S.createElement(Fe,{prefix:m?"selectable-id":"checkbox-id"},I=>S.createElement(M,Object.assign({className:V(G.treeViewNode,c&&(m||i)&&G.modifiers.selectable,(!c||m)&&C&&C.length>0&&C.some(N=>A&&N&&A(N,_))?G.modifiers.current:""),onClick:N=>{i||(l&&l(N,_,j),!m&&c&&N.isDefaultPrevented()!==!0&&b(!v))}},i&&{htmlFor:I},(i||m&&c)&&{id:`label-${I}`}),S.createElement("span",{className:V(G.treeViewNodeContainer)},c&&D(I),i&&B(I),k&&L,y(),T))),R&&S.createElement("div",{className:V(G.treeViewAction)},R)),v&&c)},Ae=S.memo(bt,(e,s)=>{if(!s.useMemo)return!1;const n=e.activeItems&&e.activeItems.length>0&&e.activeItems.some(r=>e.compareItems&&r&&e.compareItems(r,e.itemData)),o=s.activeItems&&s.activeItems.length>0&&s.activeItems.some(r=>s.compareItems&&r&&s.compareItems(r,s.itemData));return!(n||o||e.name!==s.name||e.title!==s.title||e.id!==s.id||e.isExpanded!==s.isExpanded||e.defaultExpanded!==s.defaultExpanded||e.onSelect!==s.onSelect||e.onCheck!==s.onCheck||e.hasCheck!==s.hasCheck||e.checkProps!==s.checkProps||e.hasBadge!==s.hasBadge||e.customBadgeContent!==s.customBadgeContent||e.badgeProps!==s.badgeProps||e.isCompact!==s.isCompact||e.icon!==s.icon||e.expandedIcon!==s.expandedIcon||e.action!==s.action||e.parentItem!==s.parentItem||e.itemData!==s.itemData)});Ae.displayName="TreeViewListItem";class xt extends p.Component{constructor(){super(...arguments),this.displayName="TreeViewRoot",this.treeRef=p.createRef(),this.handleKeys=s=>{var n,o,r,c,l,a,i;if(!this.treeRef.current.contains(s.target))return;const u=document.activeElement,f=s.key,g=Array.from((n=this.treeRef.current)===null||n===void 0?void 0:n.getElementsByClassName("pf-c-tree-view__node")).filter(h=>!h.classList.contains("pf-m-disabled"));if(f===fe.Space&&(u.click(),s.preventDefault()),ve(s,g,h=>u===h,void 0,[],void 0,!0,!0),["ArrowLeft","ArrowRight"].includes(f)){const h=(r=(o=u?.firstElementChild)===null||o===void 0?void 0:o.firstElementChild)===null||r===void 0?void 0:r.classList.contains("pf-c-tree-view__node-toggle"),m=(c=u?.closest("li"))===null||c===void 0?void 0:c.classList.contains("pf-m-expanded");if(f==="ArrowLeft")if(h&&m)u.click();else{const w=(l=u?.closest("ul"))===null||l===void 0?void 0:l.parentElement;if(w?.tagName!=="DIV"){const C=w?.querySelector("button");u.tabIndex=-1,C&&(C.tabIndex=0,C.focus())}}else if(h&&!m){u.tabIndex=-1,u.click();const w=(i=(a=u?.closest("li"))===null||a===void 0?void 0:a.querySelector("ul > li"))===null||i===void 0?void 0:i.querySelector("button");w&&(w.tabIndex=0,w.focus())}s.preventDefault()}},this.handleKeysCheckbox=s=>{var n,o,r,c,l;if(!this.treeRef.current.contains(s.target))return;const a=document.activeElement,i=s.key;i===fe.Space&&(a.click(),s.preventDefault());const u=Array.from((n=this.treeRef.current)===null||n===void 0?void 0:n.getElementsByClassName("pf-c-tree-view__node"));ve(s,u,f=>f.contains(a),f=>f.querySelector("button,input"),[],void 0,!0,!0),["ArrowLeft","ArrowRight"].includes(i)&&(i==="ArrowLeft"?a?.tagName==="INPUT"?!((o=a?.parentElement)===null||o===void 0)&&o.previousSibling&&a.parentElement.previousSibling.focus():a?.previousSibling&&(((r=a.previousElementSibling)===null||r===void 0?void 0:r.tagName)==="SPAN"?a.previousSibling.firstChild.focus():a.previousSibling.focus()):a?.tagName==="INPUT"?!((c=a.parentElement)===null||c===void 0)&&c.nextSibling&&a.parentElement.nextSibling.focus():a?.nextSibling&&(((l=a.nextElementSibling)===null||l===void 0?void 0:l.tagName)==="SPAN"?a.nextSibling.firstChild.focus():a.nextSibling.focus()),s.preventDefault())},this.variantStyleModifiers={default:"",compact:G.modifiers.compact,compactNoBackground:[G.modifiers.compact,G.modifiers.noBackground]}}componentDidMount(){var s;if(be&&window.addEventListener("keydown",this.props.hasChecks||this.props.hasSelectableNodes?this.handleKeysCheckbox:this.handleKeys),this.props.hasChecks||this.props.hasSelectableNodes){const n=this.treeRef.current.getElementsByClassName("pf-c-tree-view__node-toggle")[0];if(n&&(n.tabIndex=0),this.props.hasChecks){const o=this.treeRef.current.getElementsByTagName("INPUT")[0];o&&(o.tabIndex=0)}if(this.props.hasSelectableNodes){const o=this.treeRef.current.getElementsByClassName("pf-c-tree-view__node-text")[0];o&&(o.tabIndex=0)}}else((s=this.treeRef.current)===null||s===void 0?void 0:s.getElementsByClassName("pf-c-tree-view__node")[0]).tabIndex=0}componentWillUnmount(){be&&window.removeEventListener("keydown",this.props.hasChecks||this.props.hasSelectableNodes?this.handleKeysCheckbox:this.handleKeys)}render(){const s=this.props,{children:n,hasChecks:o,hasGuides:r,variant:c,className:l,hasSelectableNodes:a}=s,i=ee(s,["children","hasChecks","hasGuides","variant","className","hasSelectableNodes"]);return p.createElement("div",Object.assign({className:V(G.treeView,r&&G.modifiers.guides,this.variantStyleModifiers[c],l),ref:this.treeRef},i),n)}}const pe=e=>{var{data:s,isNested:n=!1,hasChecks:o=!1,hasBadges:r=!1,hasGuides:c=!1,hasSelectableNodes:l=!1,variant:a="default",defaultAllExpanded:i=!1,allExpanded:u,icon:f,expandedIcon:g,parentItem:h,onSelect:m,onCheck:w,toolbar:C,activeItems:_,compareItems:j=(d,v)=>d.id===v.id,className:k,useMemo:K}=e,R=ee(e,["data","isNested","hasChecks","hasBadges","hasGuides","hasSelectableNodes","variant","defaultAllExpanded","allExpanded","icon","expandedIcon","parentItem","onSelect","onCheck","toolbar","activeItems","compareItems","className","useMemo"]);const A=p.createElement(_e,{isNested:n,toolbar:C},s.map(d=>{var v,b;return p.createElement(Ae,Object.assign({key:((v=d.id)===null||v===void 0?void 0:v.toString())||((b=d.name)===null||b===void 0?void 0:b.toString()),name:d.name,title:d.title,id:d.id,isExpanded:u,isSelectable:l,defaultExpanded:d.defaultExpanded!==void 0?d.defaultExpanded:i,onSelect:m,onCheck:w,hasCheck:d.hasCheck!==void 0?d.hasCheck:o,checkProps:d.checkProps,hasBadge:d.hasBadge!==void 0?d.hasBadge:r,customBadgeContent:d.customBadgeContent,badgeProps:d.badgeProps,activeItems:_,parentItem:h,itemData:d,icon:d.icon!==void 0?d.icon:f,expandedIcon:d.expandedIcon!==void 0?d.expandedIcon:g,action:d.action,compareItems:j,isCompact:a==="compact"||a==="compactNoBackground",useMemo:K},d.children&&{children:p.createElement(pe,{data:d.children,isNested:!0,parentItem:d,hasChecks:o,hasBadges:r,hasGuides:c,hasSelectableNodes:l,variant:a,allExpanded:u,defaultAllExpanded:i,onSelect:m,onCheck:w,activeItems:_,icon:f,expandedIcon:g})}))}));return p.createElement(p.Fragment,null,h?A:p.createElement(xt,Object.assign({hasSelectableNodes:l,hasChecks:o,hasGuides:c,variant:a,className:k},R),A))};pe.displayName="TreeView";const vt=()=>{const{t:e}=F(),{clear:s,remove:n,subGroups:o}=H(),{realm:r}=te(),c=se();return p.useEffect(()=>{const{pathname:l}=c;(!l.includes("/groups")||l.endsWith("/groups"))&&s()},[c]),o.length!==0?t.jsxs(Oe,{children:[t.jsx(xe,{children:t.jsx(re,{to:`/${r}/groups`,children:e("groups")})},"home"),o.map((l,a)=>{const i=a===o.length-1;return t.jsxs(xe,{isActive:i,children:[!i&&t.jsx(re,{to:c.pathname.substring(0,c.pathname.indexOf(l.id)+l.id.length),onClick:()=>n(l),children:l.name}),i&&(l.id==="search"?l.name:e("groups:groupDetails"))]},l.id)})]}):null},De=e=>{const s=e.substr(1).split("/");return s.length>1?s.splice(2):void 0},oe=e=>{const s=De(e);return s?s[s.length-1]:void 0},yt=()=>{const{t:e}=F("groups"),{addAlert:s,addError:n}=q(),o=we({mode:"onChange"}),r=se(),c=oe(r.pathname),{currentGroup:l,subGroups:a,setSubGroups:i}=H(),u=g=>Be(g||l()?.attributes);p.useEffect(()=>{o.setValue("attributes",u())},[a]);const f=async g=>{try{const h=l(),m=Le(g.attributes);await E.groups.update({id:c},{...h,attributes:m}),i([...a.slice(0,a.length-1),{...h,attributes:m}]),s(e("groupUpdated"),z.success)}catch(h){n("groups:groupUpdateError",h)}};return t.jsx(je,{variant:Ne.light,children:t.jsx(ot,{form:o,save:f,fineGrainedAccess:l()?.access?.manage,reset:()=>o.reset({attributes:u()})})})},wt=({id:e,name:s})=>{const{t:n}=F("clients"),{addAlert:o,addError:r}=q(),c=async l=>{try{const a=l.filter(i=>i.client===void 0).map(i=>i.role).flat();await E.groups.addRealmRoleMappings({id:e,roles:a}),await Promise.all(l.filter(i=>i.client!==void 0).map(i=>E.groups.addClientRoleMappings({id:e,clientUniqueId:i.client.id,roles:[i.role]}))),o(n("roleMappingUpdatedSuccess"),z.success)}catch(a){r("clients:roleMappingUpdatedError",a)}};return t.jsx(it,{name:s,id:e,type:"groups",save:c})},Q=({id:e,rename:s,handleModalToggle:n,refresh:o})=>{const{t:r}=F("groups"),{addAlert:c,addError:l}=q(),{register:a,handleSubmit:i,formState:{errors:u}}=we({defaultValues:{name:s?.name}}),f=async g=>{g.name=g.name?.trim();try{e?s?await E.groups.update({id:e},{...s,name:g.name}):await(g.id?E.groups.updateChildGroup({id:e},g):E.groups.createChildGroup({id:e},g)):await E.groups.create(g),o(s?{...s,name:g.name}:void 0),n(),c(r(s?"groupUpdated":"groupCreated"),z.success)}catch(h){l("groups:couldNotCreateGroup",h)}};return t.jsx(Ee,{variant:Ie.small,title:r(s?"renameAGroup":"createAGroup"),isOpen:!0,onClose:n,actions:[t.jsx(W,{"data-testid":`${s?"rename":"create"}Group`,variant:"primary",type:"submit",form:"group-form",children:r(s?"rename":"create")},"confirm"),t.jsx(W,{id:"modal-cancel","data-testid":"cancel",variant:Se.link,onClick:()=>{n()},children:r("common:cancel")},"cancel")],children:t.jsx(ut,{id:"group-form",isHorizontal:!0,onSubmit:i(f),children:t.jsx(Ue,{name:"create-modal-group",label:r("common:name"),fieldId:"create-group-name",helperTextInvalid:r("common:required"),validated:u.name?ne.error:ne.default,isRequired:!0,children:t.jsx(dt,{"data-testid":"groupNameInput",autoFocus:!0,id:"create-group-name",validated:u.name?ne.error:ne.default,...a("name",{required:!0})})})})})},ge=({selectedRows:e,show:s,toggleDialog:n,refresh:o})=>{const{t:r}=F("groups"),{addAlert:c,addError:l}=q(),a=async()=>{try{for(const i of e)await E.groups.del({id:i.id});o(),c(r("groupDeleted",{count:e.length}))}catch(i){l("groups:groupDeleteError",i)}};return t.jsx(mt,{titleKey:r("deleteConfirmTitle",{count:e.length}),messageKey:r("deleteConfirm",{count:e.length,groupName:e[0]?.name}),continueButtonLabel:"common:delete",continueButtonVariant:Se.danger,onConfirm:a,open:s,toggleDialog:n})},jt=({toggleCreate:e,toggleDelete:s,kebabDisabled:n})=>{const{t:o}=F("groups"),{currentGroup:r}=H(),{hasAccess:c}=ae(),l=c("manage-users")||r()?.access?.manage,[a,i]=U();return l?t.jsxs(t.Fragment,{children:[t.jsx(P,{children:t.jsx(W,{"data-testid":"openCreateGroupModal",variant:"primary",onClick:e,children:o("createGroup")})}),t.jsx(P,{children:t.jsx(ce,{toggle:t.jsx(le,{onToggle:i,isDisabled:n}),isOpen:a,isPlain:!0,dropdownItems:[t.jsx($,{component:"button",onClick:()=>{s(),i()},children:o("common:delete")},"action")]})})]}):t.jsx("div",{})},Nt=e=>e.id?E.groups.updateRoot(e):E.groups.create(e),St=async(e,s)=>E.groups.updateChildGroup({id:s.id},e),Me=({source:e,onClose:s,refresh:n})=>{const{t:o}=F("groups"),{addAlert:r,addError:c}=q(),l=async a=>{try{await(a?St(e,a[0]):Nt(e)),n(),r(o("moveGroupSuccess"))}catch(i){c("groups:moveGroupError",i)}};return t.jsx(pt,{type:"selectOne",filterGroups:[e],text:{title:"groups:moveToGroup",ok:"groups:moveHere"},onClose:s,onConfirm:l})},ye=({refresh:e,canViewDetails:s})=>{const{t:n}=F("groups"),{realm:o}=te(),[r,c]=p.useState([]),[l,a]=p.useState(),[i,u]=U(),[f,g]=U(),[h,m]=p.useState(),{currentGroup:w}=H(),[C,_]=p.useState(0),j=()=>_(C+1),[k,K]=p.useState(),R=de(),A=se(),d=oe(A.pathname),{hasAccess:v}=ae(),b=v("manage-users")||w()?.access?.manage,M=async(x,D)=>{const B={search:k||"",first:x?.toString()||"",max:D?.toString()||""};let L;if(d){const y=await E.groups.findOne({id:d});if(!y)throw new Error(n("common:notFound"));L=k?y.subGroups?.filter(T=>T.name?.includes(k)):y.subGroups}else L=await Ge("ui-ext/groups",{...B,global:"false"});return L||R(Z({realm:o})),L||[]};return t.jsxs(t.Fragment,{children:[t.jsx(ge,{show:f,toggleDialog:g,selectedRows:r,refresh:()=>{j(),e(),c([])}}),l&&t.jsx(Q,{id:l.id,rename:l,refresh:()=>{j(),e()},handleModalToggle:()=>a(void 0)}),i&&t.jsx(Q,{id:r[0]?.id||d,handleModalToggle:u,refresh:()=>{c([]),j(),e()}}),h&&t.jsx(Me,{source:h,refresh:()=>{m(void 0),j(),e()},onClose:()=>m(void 0)}),t.jsx(me,{onSelect:x=>c([...x]),canSelectAll:!0,loader:M,ariaLabelKey:"groups:groups",isPaginated:!0,isSearching:!!k,toolbarItem:t.jsxs(t.Fragment,{children:[t.jsx(P,{children:t.jsx(ht,{"data-testid":"group-search",placeholder:n("filterGroups"),value:k,onChange:(x,D)=>{K(D)},onSearch:j,onClear:()=>{K(""),j()}})}),t.jsx(jt,{toggleCreate:u,toggleDelete:g,kebabDisabled:r.length===0})]}),actions:b?[{title:n("rename"),onRowClick:async x=>(a(x),!1)},{title:n("moveTo"),onRowClick:async x=>(m(x),!1)},{title:n("createChildGroup"),onRowClick:async x=>(c([x]),u(),!1)},{isSeparator:!0},{title:n("common:delete"),onRowClick:async x=>(c([x]),g(),!0)}]:[],columns:[{name:"name",displayKey:"groups:groupName",cellRenderer:x=>s?t.jsx(re,{to:`${A.pathname}/${x.id}`,onClick:()=>R(Z({realm:o,id:x.id})),children:x.name},x.id):t.jsx("span",{children:x.name})}],emptyState:t.jsx(ue,{hasIcon:!0,message:n(`noGroupsInThis${d?"SubGroup":"Realm"}`),instructions:n(`noGroupsInThis${d?"SubGroup":"Realm"}Instructions`),primaryActionText:n("createGroup"),onPrimaryAction:u})},`${d}${C}`)]})},Ct=({groupId:e,onClose:s})=>{const{t:n}=F("groups"),{addAlert:o,addError:r}=q(),[c,l]=p.useState([]),a=async(i,u,f)=>{const g=await E.groups.listMembers({id:e}),h={first:i,max:u+g.length,search:f||""};try{const m=await E.users.find({...h});return lt(m,g,"id").slice(0,u)}catch(m){return r("groups:noUsersFoundError",m),[]}};return t.jsx(Ee,{variant:Ie.large,title:n("addMember"),isOpen:!0,onClose:s,actions:[t.jsx(W,{"data-testid":"add",variant:"primary",onClick:async()=>{try{await Promise.all(c.map(i=>E.users.addToGroup({id:i.id,groupId:e}))),s(),o(n("usersAdded",{count:c.length}),z.success)}catch(i){r("groups:usersAddedError",i)}},children:n("common:add")},"confirm"),t.jsx(W,{"data-testid":"cancel",variant:"link",onClick:s,children:n("common:cancel")},"cancel")],children:t.jsx(me,{loader:a,isPaginated:!0,ariaLabelKey:"users:title",searchPlaceholderKey:"users:searchForUser",canSelectAll:!0,onSelect:i=>l([...i]),emptyState:t.jsx(ue,{message:n("users:noUsersFound"),instructions:n("users:emptyInstructions")}),columns:[{name:"username",displayKey:"users:username"},{name:"email",displayKey:"users:email"},{name:"lastName",displayKey:"users:lastName",cellFormatters:[Y()]},{name:"firstName",displayKey:"users:firstName",cellFormatters:[Y()]}]})})},Gt=e=>t.jsx(t.Fragment,{children:e.membership.map((s,n)=>t.jsxs(t.Fragment,{children:[t.jsx(gt,{group:s},s.id),e.membership[n+1]?", ":""]}))}),Et=e=>{const{realm:s}=te();return t.jsx(re,{to:$e({realm:s,id:e.id,tab:"settings"}),children:e.username},e.id)},It=()=>{const{t:e}=F("groups"),{addAlert:s,addError:n}=q(),o=se(),r=oe(o.pathname),[c,l]=p.useState(!1),{currentGroup:a}=H(),[i,u]=p.useState(!1),[f,g]=p.useState(!1),[h,m]=p.useState([]),{hasAccess:w}=ae(),C=w("manage-users")||a().access.manageMembership,[_,j]=p.useState(0),k=()=>j(new Date().getTime()),K=async d=>await E.users.listGroups({id:d}),R=d=>{let v=[];for(const b of d){v.push(b);const M=R(b.subGroups);v=v.concat(M)}return v},A=async(d,v)=>{let b=await E.groups.listMembers({id:r,first:d,max:v});if(c){const x=R(a()?.subGroups);for(const D of x)b=b.concat(await E.groups.listMembers({id:D.id}));b=qe(b,D=>D.username)}const M=await Promise.all(b.map(x=>K(x.id)));return b.map((x,D)=>({...x,membership:M[D]}))};return t.jsxs(t.Fragment,{children:[i&&t.jsx(Ct,{groupId:r,onClose:()=>{u(!1),k()}}),t.jsx(me,{"data-testid":"members-table",loader:A,ariaLabelKey:"groups:members",isPaginated:!0,canSelectAll:!0,onSelect:d=>m([...d]),toolbarItem:C&&t.jsxs(t.Fragment,{children:[t.jsx(P,{children:t.jsx(W,{"data-testid":"addMember",variant:"primary",onClick:()=>u(!0),children:e("addMember")})}),t.jsx(P,{children:t.jsx(ke,{"data-testid":"includeSubGroupsCheck",label:e("includeSubGroups"),id:"kc-include-sub-groups",isChecked:c,onChange:()=>l(!c)})}),t.jsx(P,{children:t.jsx(ce,{toggle:t.jsx(le,{onToggle:()=>g(!f),isDisabled:h.length===0}),isOpen:f,isPlain:!0,dropdownItems:[t.jsx($,{component:"button",onClick:async()=>{try{await Promise.all(h.map(d=>E.users.delFromGroup({id:d.id,groupId:r}))),g(!1),s(e("usersLeft",{count:h.length}),z.success)}catch(d){n("groups:usersLeftError",d)}k()},children:e("leave")},"action")]})})]}),actions:C?[{title:e("leave"),onRowClick:async d=>{try{await E.users.delFromGroup({id:d.id,groupId:r}),s(e("usersLeft",{count:1}),z.success)}catch(v){n("groups:usersLeftError",v)}return!0}}]:[],columns:[{name:"username",displayKey:"common:name",cellRenderer:Et},{name:"email",displayKey:"groups:email",cellFormatters:[Y()]},{name:"firstName",displayKey:"groups:firstName",cellFormatters:[Y()]},{name:"lastName",displayKey:"groups:lastName",cellFormatters:[Y()]},{name:"membership",displayKey:"groups:membership",cellRenderer:Gt}],emptyState:t.jsx(ue,{message:e("users:noUsersFound"),instructions:C?e("users:emptyInstructions"):void 0,primaryActionText:C?e("addMember"):void 0,onPrimaryAction:()=>u(!0),secondaryActions:[{text:e("includeSubGroups"),onClick:()=>l(!0)}]})},`${r}${_}${c}`)]})};const kt=({group:e,refresh:s})=>{const{t:n}=F("groups"),[o,r]=U(),[c,l]=U(),[a,i]=U(),[u,f]=U(),[g,h]=U();return t.jsxs(t.Fragment,{children:[c&&t.jsx(Q,{id:e.id,rename:e,refresh:()=>{s()},handleModalToggle:l}),a&&t.jsx(Q,{id:e.id,handleModalToggle:i,refresh:s}),u&&t.jsx(Me,{source:e,refresh:s,onClose:f}),t.jsx(ge,{show:g,toggleDialog:h,selectedRows:[e],refresh:s}),t.jsx(ce,{toggle:t.jsx(le,{onToggle:r}),isOpen:o,isPlain:!0,position:Je.right,dropdownItems:[t.jsx($,{onClick:l,children:n("rename")},"rename"),t.jsx($,{onClick:f,children:n("moveTo")},"move"),t.jsx($,{onClick:i,children:n("createChildGroup")},"create"),t.jsx(Xe,{},"separator"),t.jsx($,{onClick:h,children:n("common:delete")},"delete")]})]})},Tt=({refresh:e,canViewDetails:s})=>{const{t:n}=F("groups"),{realm:o}=te(),r=de(),{addAlert:c}=q(),{hasAccess:l}=ae(),[a,i]=p.useState(),[u,f]=p.useState([]),{subGroups:g,setSubGroups:h}=H(),[m,w]=p.useState(""),[C,_]=p.useState(20),[j,k]=p.useState(0),[K,R]=p.useState(0),[A,d]=p.useState(!1),[v,b]=p.useState(),[M,x]=p.useState(0),D=()=>{x(M+1),e()},B=(y,T,I)=>{const N=[...T,y];return{id:Pe(...N.map(O=>O.id)),name:t.jsx(We,{content:y.name,children:t.jsx("span",{children:y.name})}),children:y.subGroups&&y.subGroups.length>0?y.subGroups.map(O=>B(O,N,I)):void 0,action:(l("manage-users")||y.access?.manage)&&t.jsx(kt,{group:y,refresh:I}),defaultExpanded:g.map(O=>O.id).includes(y.id)}};Ce(async()=>{const y=await Ge("ui-ext/groups",Object.assign({first:`${j}`,max:`${C+1}`,exact:`${A}`},m===""?null:{search:m})),T=(await E.groups.count({search:m,top:!0})).count;return{groups:y,count:T}},({groups:y,count:T})=>{f(y),i(y.map(I=>B(I,[],D))),R(T)},[M,j,C,m,A]);const L=(y,T,I,N)=>y.map(O=>{N.length>0||(O.subGroups&&O.subGroups.length>0&&L(O.subGroups,T,[...I,O],N),O.id===T&&N.push(...I,O))});return a?t.jsx(ct,{count:K-j,first:j,max:C,onNextClick:k,onPreviousClick:k,onPerPageSelect:(y,T)=>{k(y),_(T)},inputGroupName:"searchForGroups",inputGroupPlaceholder:n("groups:searchForGroups"),inputGroupOnEnter:w,toolbarItem:t.jsxs(ze,{className:"pf-u-pt-sm",children:[t.jsx(ke,{id:"exact","data-testid":"exact-search",name:"exact",isChecked:A,onChange:y=>d(y)}),t.jsx("label",{htmlFor:"exact",className:"pf-u-pl-sm",children:n("exactSearch")})]}),children:a.length>0&&t.jsx(pe,{data:a.slice(0,C),allExpanded:m.length>0,activeItems:v?[v]:void 0,hasGuides:!0,hasSelectableNodes:!0,className:"keycloak_groups_treeview",onSelect:(y,T)=>{b(T);const I=T.id?.substring(T.id.lastIndexOf("/")+1),N=[];L(u,I,[],N),h(N),s||N.at(-1)?.access?.view?r(Z({realm:o,id:T.id})):(c(n("noViewRights"),z.warning),r(Z({realm:o})))}})}):t.jsx(He,{})};function Ss(){const{t:e}=F("groups"),[s,n]=p.useState(0),{subGroups:o,setSubGroups:r,currentGroup:c}=H(),{realm:l}=te(),[a,i]=p.useState(),[u,f]=U(),g=de(),h=se(),m=oe(h.pathname),[w,C]=p.useState(0),_=()=>C(w+1),{hasAccess:j}=ae(),K=nt()(rt.AdminFineGrainedAuthz)&&j("manage-authorization","manage-users","manage-clients"),R=j("manage-users")||c()?.access?.manage,A=j("manage-users"),d=j("query-groups","view-users")||j("manage-users","query-groups"),v=j("view-users")||c()?.access?.viewMembers||c()?.access?.manageMembers;return Ce(async()=>{const b=De(h.pathname);if(b&&b.length>o.length){const x=[];for(const D of b){const B=D!=="search"?await E.groups.findOne({id:D}):{name:e("searchGroups"),id:"search"};if(B)x.push(B);else throw new Error(e("common:notFound"))}return x}return[]},b=>{b.length&&r(b)},[m]),t.jsxs(t.Fragment,{children:[t.jsx(ge,{show:u,toggleDialog:f,selectedRows:[c()],refresh:()=>{g(Z({realm:l})),_()}}),a&&t.jsx(Q,{id:m,rename:a,refresh:b=>{_(),r([...o.slice(0,o.length-1),b])},handleModalToggle:()=>i(void 0)}),t.jsx(je,{variant:Ne.light,className:"pf-u-p-0",children:t.jsx(Ye,{isInline:!0,isExpanded:!0,children:t.jsx(Ze,{panelContent:t.jsx(Qe,{isResizable:!0,defaultSize:"80%",minSize:"500px",children:t.jsxs(Ve,{children:[t.jsx(vt,{}),t.jsx(at,{titleKey:m?c()?.name:"groups:groups",subKey:m?"":"groups:groupsDescription",helpUrl:m?"":et.groupsUrl,divider:!m,dropdownItems:m&&R?[t.jsx($,{"data-testid":"renameGroupAction",onClick:()=>i(c()),children:e("renameGroup")},"renameGroup"),t.jsx($,{"data-testid":"deleteGroup",onClick:f,children:e("deleteGroup")},"deleteGroup")]:void 0}),o.length>0&&t.jsxs(ft,{inset:{default:"insetNone",md:"insetSm",xl:"insetLg","2xl":"inset2xl"},activeKey:s,onSelect:(b,M)=>n(M),isBox:!0,mountOnEnter:!0,unmountOnExit:!0,children:[t.jsx(J,{"data-testid":"groups",eventKey:0,title:t.jsx(X,{children:e("childGroups")}),children:t.jsx(ye,{refresh:_,canViewDetails:d})}),v&&t.jsx(J,{"data-testid":"members",eventKey:1,title:t.jsx(X,{children:e("members")}),children:t.jsx(It,{})}),t.jsx(J,{"data-testid":"attributes",eventKey:2,title:t.jsx(X,{children:e("common:attributes")}),children:t.jsx(yt,{})}),A&&t.jsx(J,{eventKey:3,"data-testid":"role-mapping-tab",title:t.jsx(X,{children:e("roleMapping")}),children:t.jsx(wt,{id:m,name:c()?.name})}),K&&t.jsx(J,{eventKey:4,"data-testid":"permissionsTab",title:t.jsx(X,{children:e("common:permissions")}),children:t.jsx(st,{id:m,type:"groups"})})]}),o.length===0&&t.jsx(ye,{refresh:_,canViewDetails:d})]})}),children:t.jsx(tt,{children:t.jsx(Tt,{refresh:_,canViewDetails:d})})})},w)})]})}export{Ss as default};
//# sourceMappingURL=GroupsSection-913db2df.js.map




© 2015 - 2024 Weber Informatics LLC | Privacy Policy