@nocobase/plugin-acl 0.20.0-alpha.9 → 0.21.0-alpha.2

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.
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export declare const useLoadMoreObserver: ({ loadMore, }: {
3
+ loadMore: () => void;
4
+ }) => {
5
+ lastItem: React.RefObject<any>;
6
+ setLastItem: React.Dispatch<React.SetStateAction<React.RefObject<any>>>;
7
+ };
@@ -1,8 +1,8 @@
1
1
  import { Plugin } from '@nocobase/client';
2
2
  import { RolesManager } from './roles-manager';
3
- declare class ACLPlugin extends Plugin {
3
+ export declare class PluginACLClient extends Plugin {
4
4
  rolesManager: RolesManager;
5
5
  load(): Promise<void>;
6
6
  }
7
- export default ACLPlugin;
8
7
  export { RolesManagerContext } from './RolesManagerProvider';
8
+ export default PluginACLClient;
@@ -1,4 +1,4 @@
1
- (function(d,u){typeof exports=="object"&&typeof module!="undefined"?u(exports,require("@nocobase/client"),require("react/jsx-runtime"),require("react"),require("antd"),require("@formily/react"),require("@ant-design/icons"),require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("ahooks"),require("lodash"),require("antd-style")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","react/jsx-runtime","react","antd","@formily/react","@ant-design/icons","react-i18next","@formily/shared","@nocobase/utils/client","@formily/core","ahooks","lodash","antd-style"],u):(d=typeof globalThis!="undefined"?globalThis:d||self,u(d["@nocobase/plugin-acl"]={},d["@nocobase/client"],d.jsxRuntime,d.react,d.antd,d["@formily/react"],d["@ant-design/icons"],d["react-i18next"],d["@formily/shared"],d["@nocobase/utils"],d["@formily/core"],d.ahooks,d.lodash,d["antd-style"]))})(this,function(d,u,s,g,p,I,G,S,x,k,de,Qe,Z,Re){"use strict";var Si=Object.defineProperty,wi=Object.defineProperties;var Ai=Object.getOwnPropertyDescriptors;var Ze=Object.getOwnPropertySymbols;var Pi=Object.prototype.hasOwnProperty,Ii=Object.prototype.propertyIsEnumerable;var ue=(d,u,s)=>u in d?Si(d,u,{enumerable:!0,configurable:!0,writable:!0,value:s}):d[u]=s,P=(d,u)=>{for(var s in u||(u={}))Pi.call(u,s)&&ue(d,s,u[s]);if(Ze)for(var s of Ze(u))Ii.call(u,s)&&ue(d,s,u[s]);return d},E=(d,u)=>wi(d,Ai(u));var pe=(d,u,s)=>(ue(d,typeof u!="symbol"?u+"":u,s),s);var w=(d,u,s)=>new Promise((g,p)=>{var I=x=>{try{S(s.next(x))}catch(k){p(k)}},G=x=>{try{S(s.throw(x))}catch(k){p(k)}},S=x=>x.done?g(x.value):Promise.resolve(x.value).then(I,G);S((s=s.apply(d,u)).next())});function T(){return S.useTranslation(["acl","client"],{nsMode:"fallback"})}const A=g.createContext({role:null});A.displayName="RolesManagerContext";var U=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function he(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var et=Array.isArray,q=et,tt=typeof U=="object"&&U&&U.Object===Object&&U,rt=tt,nt=rt,at=typeof self=="object"&&self&&self.Object===Object&&self,st=nt||at||Function("return this")(),K=st,ot=K,it=ot.Symbol,z=it,fe=z,ve=Object.prototype,ct=ve.hasOwnProperty,lt=ve.toString,j=fe?fe.toStringTag:void 0;function ut(e){var t=ct.call(e,j),r=e[j];try{e[j]=void 0;var n=!0}catch(i){}var a=lt.call(e);return n&&(t?e[j]=r:delete e[j]),a}var pt=ut,dt=Object.prototype,ht=dt.toString;function ft(e){return ht.call(e)}var vt=ft,ge=z,gt=pt,mt=vt,yt="[object Null]",_t="[object Undefined]",me=ge?ge.toStringTag:void 0;function bt(e){return e==null?e===void 0?_t:yt:me&&me in Object(e)?gt(e):mt(e)}var Q=bt;function $t(e){return e!=null&&typeof e=="object"}var R=$t,Ct=Q,xt=R,St="[object Symbol]";function wt(e){return typeof e=="symbol"||xt(e)&&Ct(e)==St}var ee=wt,At=q,Pt=ee,It=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Tt=/^\w*$/;function Ot(e,t){if(At(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Pt(e)?!0:Tt.test(e)||!It.test(e)||t!=null&&e in Object(t)}var Mt=Ot;function Ft(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var te=Ft,Dt=Q,Nt=te,Et="[object AsyncFunction]",kt="[object Function]",qt="[object GeneratorFunction]",jt="[object Proxy]";function Ht(e){if(!Nt(e))return!1;var t=Dt(e);return t==kt||t==qt||t==Et||t==jt}var Gt=Ht,Ut=K,Kt=Ut["__core-js_shared__"],zt=Kt,re=zt,ye=function(){var e=/[^.]+$/.exec(re&&re.keys&&re.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Lt(e){return!!ye&&ye in e}var Vt=Lt,Wt=Function.prototype,Bt=Wt.toString;function Yt(e){if(e!=null){try{return Bt.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var Xt=Yt,Jt=Gt,Zt=Vt,Qt=te,Rt=Xt,er=/[\\^$.*+?()[\]{}|]/g,tr=/^\[object .+?Constructor\]$/,rr=Function.prototype,nr=Object.prototype,ar=rr.toString,sr=nr.hasOwnProperty,or=RegExp("^"+ar.call(sr).replace(er,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ir(e){if(!Qt(e)||Zt(e))return!1;var t=Jt(e)?or:tr;return t.test(Rt(e))}var cr=ir;function lr(e,t){return e==null?void 0:e[t]}var ur=lr,pr=cr,dr=ur;function hr(e,t){var r=dr(e,t);return pr(r)?r:void 0}var L=hr,fr=L,vr=fr(Object,"create"),V=vr,_e=V;function gr(){this.__data__=_e?_e(null):{},this.size=0}var mr=gr;function yr(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var _r=yr,br=V,$r="__lodash_hash_undefined__",Cr=Object.prototype,xr=Cr.hasOwnProperty;function Sr(e){var t=this.__data__;if(br){var r=t[e];return r===$r?void 0:r}return xr.call(t,e)?t[e]:void 0}var wr=Sr,Ar=V,Pr=Object.prototype,Ir=Pr.hasOwnProperty;function Tr(e){var t=this.__data__;return Ar?t[e]!==void 0:Ir.call(t,e)}var Or=Tr,Mr=V,Fr="__lodash_hash_undefined__";function Dr(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Mr&&t===void 0?Fr:t,this}var Nr=Dr,Er=mr,kr=_r,qr=wr,jr=Or,Hr=Nr;function O(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}O.prototype.clear=Er,O.prototype.delete=kr,O.prototype.get=qr,O.prototype.has=jr,O.prototype.set=Hr;var Gr=O;function Ur(){this.__data__=[],this.size=0}var Kr=Ur;function zr(e,t){return e===t||e!==e&&t!==t}var be=zr,Lr=be;function Vr(e,t){for(var r=e.length;r--;)if(Lr(e[r][0],t))return r;return-1}var W=Vr,Wr=W,Br=Array.prototype,Yr=Br.splice;function Xr(e){var t=this.__data__,r=Wr(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():Yr.call(t,r,1),--this.size,!0}var Jr=Xr,Zr=W;function Qr(e){var t=this.__data__,r=Zr(t,e);return r<0?void 0:t[r][1]}var Rr=Qr,en=W;function tn(e){return en(this.__data__,e)>-1}var rn=tn,nn=W;function an(e,t){var r=this.__data__,n=nn(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var sn=an,on=Kr,cn=Jr,ln=Rr,un=rn,pn=sn;function M(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}M.prototype.clear=on,M.prototype.delete=cn,M.prototype.get=ln,M.prototype.has=un,M.prototype.set=pn;var dn=M,hn=L,fn=K,vn=hn(fn,"Map"),gn=vn,$e=Gr,mn=dn,yn=gn;function _n(){this.size=0,this.__data__={hash:new $e,map:new(yn||mn),string:new $e}}var bn=_n;function $n(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Cn=$n,xn=Cn;function Sn(e,t){var r=e.__data__;return xn(t)?r[typeof t=="string"?"string":"hash"]:r.map}var B=Sn,wn=B;function An(e){var t=wn(this,e).delete(e);return this.size-=t?1:0,t}var Pn=An,In=B;function Tn(e){return In(this,e).get(e)}var On=Tn,Mn=B;function Fn(e){return Mn(this,e).has(e)}var Dn=Fn,Nn=B;function En(e,t){var r=Nn(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var kn=En,qn=bn,jn=Pn,Hn=On,Gn=Dn,Un=kn;function F(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}F.prototype.clear=qn,F.prototype.delete=jn,F.prototype.get=Hn,F.prototype.has=Gn,F.prototype.set=Un;var Ce=F,xe=Ce,Kn="Expected a function";function ne(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(Kn);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],i=r.cache;if(i.has(a))return i.get(a);var o=e.apply(this,n);return r.cache=i.set(a,o)||i,o};return r.cache=new(ne.Cache||xe),r}ne.Cache=xe;var zn=ne,Ln=zn,Vn=500;function Wn(e){var t=Ln(e,function(n){return r.size===Vn&&r.clear(),n}),r=t.cache;return t}var Bn=Wn,Yn=Bn,Xn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Jn=/\\(\\)?/g,Zn=Yn(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Xn,function(r,n,a,i){t.push(a?i.replace(Jn,"$1"):n||r)}),t}),Qn=Zn;function Rn(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}var ea=Rn,Se=z,ta=ea,ra=q,na=ee,aa=1/0,we=Se?Se.prototype:void 0,Ae=we?we.toString:void 0;function Pe(e){if(typeof e=="string")return e;if(ra(e))return ta(e,Pe)+"";if(na(e))return Ae?Ae.call(e):"";var t=e+"";return t=="0"&&1/e==-aa?"-0":t}var sa=Pe,oa=sa;function ia(e){return e==null?"":oa(e)}var ca=ia,la=q,ua=Mt,pa=Qn,da=ca;function ha(e,t){return la(e)?e:ua(e,t)?[e]:pa(da(e))}var Y=ha,fa=ee,va=1/0;function ga(e){if(typeof e=="string"||fa(e))return e;var t=e+"";return t=="0"&&1/e==-va?"-0":t}var ae=ga,ma=Y,ya=ae;function _a(e,t){t=ma(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[ya(t[r++])];return r&&r==n?e:void 0}var ba=_a,$a=L,Ca=function(){try{var e=$a(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),Ie=Ca,Te=Ie;function xa(e,t,r){t=="__proto__"&&Te?Te(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Sa=xa,wa=Sa,Aa=be,Pa=Object.prototype,Ia=Pa.hasOwnProperty;function Ta(e,t,r){var n=e[t];(!(Ia.call(e,t)&&Aa(n,r))||r===void 0&&!(t in e))&&wa(e,t,r)}var Oa=Ta,Ma=9007199254740991,Fa=/^(?:0|[1-9]\d*)$/;function Da(e,t){var r=typeof e;return t=t==null?Ma:t,!!t&&(r=="number"||r!="symbol"&&Fa.test(e))&&e>-1&&e%1==0&&e<t}var Oe=Da,Na=Oa,Ea=Y,ka=Oe,Me=te,qa=ae;function ja(e,t,r,n){if(!Me(e))return e;t=Ea(t,e);for(var a=-1,i=t.length,o=i-1,c=e;c!=null&&++a<i;){var l=qa(t[a]),f=r;if(l==="__proto__"||l==="constructor"||l==="prototype")return e;if(a!=o){var v=c[l];f=n?n(v,l,c):void 0,f===void 0&&(f=Me(v)?v:ka(t[a+1])?[]:{})}Na(c,l,f),c=c[l]}return e}var Ha=ja,Ga=ba,Ua=Ha,Ka=Y;function za(e,t,r){for(var n=-1,a=t.length,i={};++n<a;){var o=t[n],c=Ga(e,o);r(c,o)&&Ua(i,Ka(o,e),c)}return i}var La=za;function Va(e,t){return e!=null&&t in Object(e)}var Wa=Va,Ba=Q,Ya=R,Xa="[object Arguments]";function Ja(e){return Ya(e)&&Ba(e)==Xa}var Za=Ja,Fe=Za,Qa=R,De=Object.prototype,Ra=De.hasOwnProperty,es=De.propertyIsEnumerable,ts=Fe(function(){return arguments}())?Fe:function(e){return Qa(e)&&Ra.call(e,"callee")&&!es.call(e,"callee")},Ne=ts,rs=9007199254740991;function ns(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=rs}var as=ns,ss=Y,os=Ne,is=q,cs=Oe,ls=as,us=ae;function ps(e,t,r){t=ss(t,e);for(var n=-1,a=t.length,i=!1;++n<a;){var o=us(t[n]);if(!(i=e!=null&&r(e,o)))break;e=e[o]}return i||++n!=a?i:(a=e==null?0:e.length,!!a&&ls(a)&&cs(o,a)&&(is(e)||os(e)))}var ds=ps,hs=Wa,fs=ds;function vs(e,t){return e!=null&&fs(e,t,hs)}var gs=vs,ms=La,ys=gs;function _s(e,t){return ms(e,t,function(r,n){return ys(e,n)})}var bs=_s;function $s(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}var Cs=$s,Ee=z,xs=Ne,Ss=q,ke=Ee?Ee.isConcatSpreadable:void 0;function ws(e){return Ss(e)||xs(e)||!!(ke&&e&&e[ke])}var As=ws,Ps=Cs,Is=As;function qe(e,t,r,n,a){var i=-1,o=e.length;for(r||(r=Is),a||(a=[]);++i<o;){var c=e[i];t>0&&r(c)?t>1?qe(c,t-1,r,n,a):Ps(a,c):n||(a[a.length]=c)}return a}var Ts=qe,Os=Ts;function Ms(e){var t=e==null?0:e.length;return t?Os(e,1):[]}var Fs=Ms;function Ds(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var Ns=Ds,Es=Ns,je=Math.max;function ks(e,t,r){return t=je(t===void 0?e.length-1:t,0),function(){for(var n=arguments,a=-1,i=je(n.length-t,0),o=Array(i);++a<i;)o[a]=n[t+a];a=-1;for(var c=Array(t+1);++a<t;)c[a]=n[a];return c[t]=r(o),Es(e,this,c)}}var qs=ks;function js(e){return function(){return e}}var Hs=js;function Gs(e){return e}var Us=Gs,Ks=Hs,He=Ie,zs=Us,Ls=He?function(e,t){return He(e,"toString",{configurable:!0,enumerable:!1,value:Ks(t),writable:!0})}:zs,Vs=Ls,Ws=800,Bs=16,Ys=Date.now;function Xs(e){var t=0,r=0;return function(){var n=Ys(),a=Bs-(n-r);if(r=n,a>0){if(++t>=Ws)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var Js=Xs,Zs=Vs,Qs=Js,Rs=Qs(Zs),eo=Rs,to=Fs,ro=qs,no=eo;function ao(e){return no(ro(e,void 0,to),e+"")}var so=ao,oo=bs,io=so,co=io(function(e,t){return e==null?{}:oo(e,t)}),lo=co;const uo=he(lo),po={type:"object",properties:{[x.uid()]:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=u.useRecord(),r=u.useRequest(()=>Promise.resolve({data:uo(t,["title","name","default"])}),E(P({},e),{manual:!0})),n=u.useActionContext();return g.useEffect(()=>{n.visible&&r.run()},[n.visible]),r}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},se=()=>{const{t:e}=T(),{data:t}=u.useResourceActionContext(),[r,n]=g.useState(!1),[a,i]=g.useState(null),{role:o,setRole:c}=g.useContext(A),l=((t==null?void 0:t.data)||[]).map(v=>({key:v.name,label:s.jsx(se.Item,{item:v,onEdit:()=>{n(!0),i(v)}})})),f=({key:v})=>{c(((t==null?void 0:t.data)||[]).find(m=>m.name===v))};return g.useEffect(()=>{t!=null&&t.data.length&&c(t==null?void 0:t.data[0])},[t,c]),s.jsxs(s.Fragment,{children:[l.length?s.jsx(p.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:l,selectedKeys:[o==null?void 0:o.name],onSelect:f}):s.jsx(p.Empty,{image:p.Empty.PRESENTED_IMAGE_SIMPLE}),s.jsx(u.ActionContextProvider,{value:{visible:r,setVisible:n},children:s.jsx(u.RecordProvider,{record:a,collectionName:"departments",children:s.jsx(u.SchemaComponent,{scope:{t:e},schema:po})})})]})};se.Item=function({item:t,onEdit:r}){const{t:n}=T(),{refreshAsync:a}=u.useResourceActionContext(),{modal:i,message:o}=p.App.useApp(),c=u.useAPIClient(),l=()=>{i.confirm({title:n("Delete"),content:n("Are you sure you want to delete it?"),onOk:()=>w(this,null,function*(){yield c.resource("roles").destroy({filterByTk:t.name}),o.success(n("Deleted successfully")),yield a()})})},f=({key:v,domEvent:m})=>{switch(m.stopPropagation(),v){case"edit":r();break;case"delete":l()}};return s.jsxs(p.Row,{children:[s.jsx(p.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"},children:s.jsxs("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"},children:[s.jsx(G.TagOutlined,{}),s.jsx("span",{style:{marginLeft:"10px"},children:I.Schema.compile(t.title,{t:n})})]})}),s.jsxs(p.Col,{children:[t.default?s.jsx(p.Tag,{color:"success",bordered:!1,children:n("Default")}):null,s.jsx(p.Dropdown,{menu:{items:[{label:n("Edit"),key:"edit"},{label:n("Delete"),key:"delete"}],onClick:f},children:s.jsx(G.MoreOutlined,{})})]})]})};const oe=g.createContext([]);oe.displayName="AvailableActionsContext";const ho=e=>{const{data:t,loading:r}=u.useRequest({resource:"availableActions",action:"list"});return r?s.jsx(p.Spin,{}):s.jsx(oe.Provider,{value:t==null?void 0:t.data,children:e.children})},fo=()=>g.useContext(oe);var vo="__lodash_hash_undefined__";function go(e){return this.__data__.set(e,vo),this}var mo=go;function yo(e){return this.__data__.has(e)}var _o=yo,bo=Ce,$o=mo,Co=_o;function X(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new bo;++t<r;)this.add(e[t])}X.prototype.add=X.prototype.push=$o,X.prototype.has=Co;var xo=X;function So(e,t,r,n){for(var a=e.length,i=r+(n?1:-1);n?i--:++i<a;)if(t(e[i],i,e))return i;return-1}var wo=So;function Ao(e){return e!==e}var Po=Ao;function Io(e,t,r){for(var n=r-1,a=e.length;++n<a;)if(e[n]===t)return n;return-1}var To=Io,Oo=wo,Mo=Po,Fo=To;function Do(e,t,r){return t===t?Fo(e,t,r):Oo(e,Mo,r)}var No=Do,Eo=No;function ko(e,t){var r=e==null?0:e.length;return!!r&&Eo(e,t,0)>-1}var qo=ko;function jo(e,t,r){for(var n=-1,a=e==null?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}var Ho=jo;function Go(e,t){return e.has(t)}var Uo=Go,Ko=L,zo=K,Lo=Ko(zo,"Set"),Vo=Lo;function Wo(){}var Bo=Wo;function Yo(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var Ge=Yo,ie=Vo,Xo=Bo,Jo=Ge,Zo=1/0,Qo=ie&&1/Jo(new ie([,-0]))[1]==Zo?function(e){return new ie(e)}:Xo,Ro=Qo,ei=xo,ti=qo,ri=Ho,ni=Uo,ai=Ro,si=Ge,oi=200;function ii(e,t,r){var n=-1,a=ti,i=e.length,o=!0,c=[],l=c;if(r)o=!1,a=ri;else if(i>=oi){var f=t?null:ai(e);if(f)return si(f);o=!1,a=ni,l=new ei}else l=t?[]:c;e:for(;++n<i;){var v=e[n],m=t?t(v):v;if(v=r||v!==0?v:0,o&&m===m){for(var C=l.length;C--;)if(l[C]===m)continue e;t&&l.push(m),c.push(v)}else a(l,m,r)||(l!==c&&l.push(m),c.push(v))}return c}var ci=ii,li=ci;function ui(e){return e&&e.length?li(e):[]}var pi=ui;const di=he(pi),hi=e=>{var r;if(!e)return{};const t={};return(r=e==null?void 0:e.forEach)==null||r.call(e,n=>{const[a,i]=n.split(":");t[a]=i||"all"}),t},Ue=e=>{const t=[];for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)){const n=e[r];n==="all"?t.push(r):t.push(`${r}:${n}`)}return t},fi=I.connect(e=>{const{onChange:t}=e,r=fo(),n=u.useCompile(),{t:a}=S.useTranslation(),i=I.useField(),o=hi(i.value);return s.jsx("div",{children:s.jsx(p.Table,{rowKey:"name",size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:a("Action display name"),render:c=>n(c)},{dataIndex:"onNewRecord",title:a("Action type"),render:c=>c?s.jsx(p.Tag,{color:"green",children:a("Action on new records")}):s.jsx(p.Tag,{color:"geekblue",children:a("Action on existing records")})},{dataIndex:"enabled",title:a("Allow"),render:(c,l)=>s.jsx(p.Checkbox,{checked:c,"aria-label":`${l.name}_checkbox`,onChange:f=>{c?delete o[l.name]:o[l.name]="all",t(Ue(o))}})},{dataIndex:"scope",title:a("Data scope"),render:(c,l)=>!l.onNewRecord&&s.jsx(p.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:c,options:[{label:a("All records"),value:"all"},{label:a("Own records"),value:"own"}],onChange:f=>{o[l.name]=f,t(Ue(o))}})}],dataSource:r==null?void 0:r.map(c=>{let l="all",f=!1;return o[c.name]&&(f=!0,l=o[c.name]),E(P({},c),{enabled:f,scope:l})})})})}),vi=I.connect(e=>{const{t}=S.useTranslation();return s.jsxs(p.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:r=>{const n=["ui.*","pm","pm.*","app"],a=n.map(o=>`!${o}`),i=di([...e.value||[],...r]).filter(o=>o&&!a.includes(o)).map(o=>!n.includes(o)||r!=null&&r.includes(o)?o:`!${o}`);for(const o of n)!i.includes(o)&&!i.includes(`!${o}`)&&i.push(`!${o}`);e.onChange(i)},children:[s.jsx("div",{style:{marginTop:16},children:s.jsx(p.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),s.jsx("div",{style:{marginTop:8},children:s.jsx(p.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),s.jsx("div",{style:{marginTop:8},children:s.jsx(p.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),s.jsx("div",{style:{marginTop:8},children:s.jsx(p.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),gi=({active:e})=>{const{role:t,setRole:r}=g.useContext(A),{t:n}=T(),a=u.useAPIClient(),{data:i}=u.useRequest(()=>a.resource("roles").get({filterByTk:t==null?void 0:t.name}).then(l=>{var v,m;const f=(v=l==null?void 0:l.data)==null?void 0:v.data;return(m=f.snippets)==null||m.forEach(C=>{f[C]=!0}),f}),{ready:e,refreshDeps:[t==null?void 0:t.name]}),o=Qe.useMemoizedFn(l=>w(this,null,function*(){yield a.resource("roles").update({filterByTk:t.name,values:l.values}),r(P(P({},t),l.values)),p.message.success(n("Saved successfully"))})),c=g.useMemo(()=>de.createForm({values:i,effects(){de.onFormValuesChange(l=>w(this,null,function*(){yield o(l)}))}}),[i,o]);return s.jsx(u.SchemaComponent,{components:{SnippetCheckboxGroup:vi,StrategyActions:fi},schema:{type:"void",name:x.uid(),"x-component":"FormV2","x-component-props":{form:c},properties:{snippets:{title:n("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"},allowNewMenu:{title:n("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":n("New menu items are allowed to be accessed by default.")}}}})},ce=g.createContext(null);ce.displayName="MenuItemsContext";const Ke=(e={})=>{const t=[];for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)){const n=e[r],a={title:n.title,uid:n["x-uid"]};n.properties&&(a.children=Ke(n.properties)),t.push(a)}return t},mi=()=>g.useContext(ce),ze=e=>{var i,o;const r={url:`uiSchemas:getProperties/${u.useAdminSchemaUid()}`},n=u.useRequest(r);if(n.loading)return s.jsx(p.Spin,{});const a=Ke((o=(i=n.data)==null?void 0:i.data)==null?void 0:o.properties);return s.jsx(ce.Provider,{value:{service:n,items:a},children:e.children})},Le=Re.createStyles(({css:e})=>e`
1
+ (function(v,c){typeof exports=="object"&&typeof module!="undefined"?c(exports,require("@nocobase/client"),require("react/jsx-runtime"),require("react"),require("antd"),require("@formily/react"),require("@ant-design/icons"),require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("ahooks"),require("lodash"),require("antd-style")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","react/jsx-runtime","react","antd","@formily/react","@ant-design/icons","react-i18next","@formily/shared","@nocobase/utils/client","@formily/core","ahooks","lodash","antd-style"],c):(v=typeof globalThis!="undefined"?globalThis:v||self,c(v["@nocobase/plugin-acl"]={},v["@nocobase/client"],v.jsxRuntime,v.react,v.antd,v["@formily/react"],v["@ant-design/icons"],v["react-i18next"],v["@formily/shared"],v["@nocobase/utils"],v["@formily/core"],v.ahooks,v.lodash,v["antd-style"]))})(this,function(v,c,a,h,p,E,U,T,x,j,K,ge,ee,tt){"use strict";var Ii=Object.defineProperty,Ti=Object.defineProperties;var Oi=Object.getOwnPropertyDescriptors;var et=Object.getOwnPropertySymbols;var Mi=Object.prototype.hasOwnProperty,Fi=Object.prototype.propertyIsEnumerable;var fe=(v,c,a)=>c in v?Ii(v,c,{enumerable:!0,configurable:!0,writable:!0,value:a}):v[c]=a,P=(v,c)=>{for(var a in c||(c={}))Mi.call(c,a)&&fe(v,a,c[a]);if(et)for(var a of et(c))Fi.call(c,a)&&fe(v,a,c[a]);return v},D=(v,c)=>Ti(v,Oi(c));var ve=(v,c,a)=>(fe(v,typeof c!="symbol"?c+"":c,a),a);var w=(v,c,a)=>new Promise((h,p)=>{var E=x=>{try{T(a.next(x))}catch(j){p(j)}},U=x=>{try{T(a.throw(x))}catch(j){p(j)}},T=x=>x.done?h(x.value):Promise.resolve(x.value).then(E,U);T((a=a.apply(v,c)).next())});function N(){return T.useTranslation(["@nocobase/plugin-acl","client"],{nsMode:"fallback"})}const F=h.createContext({role:null});F.displayName="RolesManagerContext";var L=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function me(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var nt=Array.isArray,G=nt,rt=typeof L=="object"&&L&&L.Object===Object&&L,st=rt,at=st,ot=typeof self=="object"&&self&&self.Object===Object&&self,it=at||ot||Function("return this")(),V=it,ct=V,lt=ct.Symbol,W=lt,ye=W,_e=Object.prototype,ut=_e.hasOwnProperty,pt=_e.toString,z=ye?ye.toStringTag:void 0;function dt(e){var t=ut.call(e,z),n=e[z];try{e[z]=void 0;var r=!0}catch(i){}var s=pt.call(e);return r&&(t?e[z]=n:delete e[z]),s}var ht=dt,ft=Object.prototype,vt=ft.toString;function gt(e){return vt.call(e)}var mt=gt,be=W,yt=ht,_t=mt,bt="[object Null]",Ct="[object Undefined]",Ce=be?be.toStringTag:void 0;function $t(e){return e==null?e===void 0?Ct:bt:Ce&&Ce in Object(e)?yt(e):_t(e)}var te=$t;function xt(e){return e!=null&&typeof e=="object"}var ne=xt,St=te,wt=ne,At="[object Symbol]";function Pt(e){return typeof e=="symbol"||wt(e)&&St(e)==At}var re=Pt,It=G,Tt=re,Ot=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Mt=/^\w*$/;function Ft(e,t){if(It(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Tt(e)?!0:Mt.test(e)||!Ot.test(e)||t!=null&&e in Object(t)}var Et=Ft;function Dt(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var se=Dt,Nt=te,kt=se,qt="[object AsyncFunction]",Ht="[object Function]",jt="[object GeneratorFunction]",Gt="[object Proxy]";function zt(e){if(!kt(e))return!1;var t=Nt(e);return t==Ht||t==jt||t==qt||t==Gt}var Ut=zt,Kt=V,Lt=Kt["__core-js_shared__"],Vt=Lt,ae=Vt,$e=function(){var e=/[^.]+$/.exec(ae&&ae.keys&&ae.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Wt(e){return!!$e&&$e in e}var Bt=Wt,Yt=Function.prototype,Xt=Yt.toString;function Jt(e){if(e!=null){try{return Xt.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var Zt=Jt,Qt=Ut,Rt=Bt,en=se,tn=Zt,nn=/[\\^$.*+?()[\]{}|]/g,rn=/^\[object .+?Constructor\]$/,sn=Function.prototype,an=Object.prototype,on=sn.toString,cn=an.hasOwnProperty,ln=RegExp("^"+on.call(cn).replace(nn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function un(e){if(!en(e)||Rt(e))return!1;var t=Qt(e)?ln:rn;return t.test(tn(e))}var pn=un;function dn(e,t){return e==null?void 0:e[t]}var hn=dn,fn=pn,vn=hn;function gn(e,t){var n=vn(e,t);return fn(n)?n:void 0}var B=gn,mn=B,yn=mn(Object,"create"),Y=yn,xe=Y;function _n(){this.__data__=xe?xe(null):{},this.size=0}var bn=_n;function Cn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var $n=Cn,xn=Y,Sn="__lodash_hash_undefined__",wn=Object.prototype,An=wn.hasOwnProperty;function Pn(e){var t=this.__data__;if(xn){var n=t[e];return n===Sn?void 0:n}return An.call(t,e)?t[e]:void 0}var In=Pn,Tn=Y,On=Object.prototype,Mn=On.hasOwnProperty;function Fn(e){var t=this.__data__;return Tn?t[e]!==void 0:Mn.call(t,e)}var En=Fn,Dn=Y,Nn="__lodash_hash_undefined__";function kn(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Dn&&t===void 0?Nn:t,this}var qn=kn,Hn=bn,jn=$n,Gn=In,zn=En,Un=qn;function k(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}k.prototype.clear=Hn,k.prototype.delete=jn,k.prototype.get=Gn,k.prototype.has=zn,k.prototype.set=Un;var Kn=k;function Ln(){this.__data__=[],this.size=0}var Vn=Ln;function Wn(e,t){return e===t||e!==e&&t!==t}var Se=Wn,Bn=Se;function Yn(e,t){for(var n=e.length;n--;)if(Bn(e[n][0],t))return n;return-1}var X=Yn,Xn=X,Jn=Array.prototype,Zn=Jn.splice;function Qn(e){var t=this.__data__,n=Xn(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():Zn.call(t,n,1),--this.size,!0}var Rn=Qn,er=X;function tr(e){var t=this.__data__,n=er(t,e);return n<0?void 0:t[n][1]}var nr=tr,rr=X;function sr(e){return rr(this.__data__,e)>-1}var ar=sr,or=X;function ir(e,t){var n=this.__data__,r=or(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var cr=ir,lr=Vn,ur=Rn,pr=nr,dr=ar,hr=cr;function q(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}q.prototype.clear=lr,q.prototype.delete=ur,q.prototype.get=pr,q.prototype.has=dr,q.prototype.set=hr;var fr=q,vr=B,gr=V,mr=vr(gr,"Map"),yr=mr,we=Kn,_r=fr,br=yr;function Cr(){this.size=0,this.__data__={hash:new we,map:new(br||_r),string:new we}}var $r=Cr;function xr(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Sr=xr,wr=Sr;function Ar(e,t){var n=e.__data__;return wr(t)?n[typeof t=="string"?"string":"hash"]:n.map}var J=Ar,Pr=J;function Ir(e){var t=Pr(this,e).delete(e);return this.size-=t?1:0,t}var Tr=Ir,Or=J;function Mr(e){return Or(this,e).get(e)}var Fr=Mr,Er=J;function Dr(e){return Er(this,e).has(e)}var Nr=Dr,kr=J;function qr(e,t){var n=kr(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var Hr=qr,jr=$r,Gr=Tr,zr=Fr,Ur=Nr,Kr=Hr;function H(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}H.prototype.clear=jr,H.prototype.delete=Gr,H.prototype.get=zr,H.prototype.has=Ur,H.prototype.set=Kr;var Ae=H,Pe=Ae,Lr="Expected a function";function oe(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(Lr);var n=function(){var r=arguments,s=t?t.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var o=e.apply(this,r);return n.cache=i.set(s,o)||i,o};return n.cache=new(oe.Cache||Pe),n}oe.Cache=Pe;var Vr=oe,Wr=Vr,Br=500;function Yr(e){var t=Wr(e,function(r){return n.size===Br&&n.clear(),r}),n=t.cache;return t}var Xr=Yr,Jr=Xr,Zr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Qr=/\\(\\)?/g,Rr=Jr(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Zr,function(n,r,s,i){t.push(s?i.replace(Qr,"$1"):r||n)}),t}),es=Rr;function ts(e,t){for(var n=-1,r=e==null?0:e.length,s=Array(r);++n<r;)s[n]=t(e[n],n,e);return s}var ns=ts,Ie=W,rs=ns,ss=G,as=re,os=1/0,Te=Ie?Ie.prototype:void 0,Oe=Te?Te.toString:void 0;function Me(e){if(typeof e=="string")return e;if(ss(e))return rs(e,Me)+"";if(as(e))return Oe?Oe.call(e):"";var t=e+"";return t=="0"&&1/e==-os?"-0":t}var is=Me,cs=is;function ls(e){return e==null?"":cs(e)}var us=ls,ps=G,ds=Et,hs=es,fs=us;function vs(e,t){return ps(e)?e:ds(e,t)?[e]:hs(fs(e))}var Z=vs,gs=re,ms=1/0;function ys(e){if(typeof e=="string"||gs(e))return e;var t=e+"";return t=="0"&&1/e==-ms?"-0":t}var ie=ys,_s=Z,bs=ie;function Cs(e,t){t=_s(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[bs(t[n++])];return n&&n==r?e:void 0}var $s=Cs,xs=B,Ss=function(){try{var e=xs(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),Fe=Ss,Ee=Fe;function ws(e,t,n){t=="__proto__"&&Ee?Ee(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var As=ws,Ps=As,Is=Se,Ts=Object.prototype,Os=Ts.hasOwnProperty;function Ms(e,t,n){var r=e[t];(!(Os.call(e,t)&&Is(r,n))||n===void 0&&!(t in e))&&Ps(e,t,n)}var Fs=Ms,Es=9007199254740991,Ds=/^(?:0|[1-9]\d*)$/;function Ns(e,t){var n=typeof e;return t=t==null?Es:t,!!t&&(n=="number"||n!="symbol"&&Ds.test(e))&&e>-1&&e%1==0&&e<t}var De=Ns,ks=Fs,qs=Z,Hs=De,Ne=se,js=ie;function Gs(e,t,n,r){if(!Ne(e))return e;t=qs(t,e);for(var s=-1,i=t.length,o=i-1,l=e;l!=null&&++s<i;){var u=js(t[s]),d=n;if(u==="__proto__"||u==="constructor"||u==="prototype")return e;if(s!=o){var y=l[u];d=r?r(y,u,l):void 0,d===void 0&&(d=Ne(y)?y:Hs(t[s+1])?[]:{})}ks(l,u,d),l=l[u]}return e}var zs=Gs,Us=$s,Ks=zs,Ls=Z;function Vs(e,t,n){for(var r=-1,s=t.length,i={};++r<s;){var o=t[r],l=Us(e,o);n(l,o)&&Ks(i,Ls(o,e),l)}return i}var Ws=Vs;function Bs(e,t){return e!=null&&t in Object(e)}var Ys=Bs,Xs=te,Js=ne,Zs="[object Arguments]";function Qs(e){return Js(e)&&Xs(e)==Zs}var Rs=Qs,ke=Rs,ea=ne,qe=Object.prototype,ta=qe.hasOwnProperty,na=qe.propertyIsEnumerable,ra=ke(function(){return arguments}())?ke:function(e){return ea(e)&&ta.call(e,"callee")&&!na.call(e,"callee")},He=ra,sa=9007199254740991;function aa(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=sa}var oa=aa,ia=Z,ca=He,la=G,ua=De,pa=oa,da=ie;function ha(e,t,n){t=ia(t,e);for(var r=-1,s=t.length,i=!1;++r<s;){var o=da(t[r]);if(!(i=e!=null&&n(e,o)))break;e=e[o]}return i||++r!=s?i:(s=e==null?0:e.length,!!s&&pa(s)&&ua(o,s)&&(la(e)||ca(e)))}var fa=ha,va=Ys,ga=fa;function ma(e,t){return e!=null&&ga(e,t,va)}var ya=ma,_a=Ws,ba=ya;function Ca(e,t){return _a(e,t,function(n,r){return ba(e,r)})}var $a=Ca;function xa(e,t){for(var n=-1,r=t.length,s=e.length;++n<r;)e[s+n]=t[n];return e}var Sa=xa,je=W,wa=He,Aa=G,Ge=je?je.isConcatSpreadable:void 0;function Pa(e){return Aa(e)||wa(e)||!!(Ge&&e&&e[Ge])}var Ia=Pa,Ta=Sa,Oa=Ia;function ze(e,t,n,r,s){var i=-1,o=e.length;for(n||(n=Oa),s||(s=[]);++i<o;){var l=e[i];t>0&&n(l)?t>1?ze(l,t-1,n,r,s):Ta(s,l):r||(s[s.length]=l)}return s}var Ma=ze,Fa=Ma;function Ea(e){var t=e==null?0:e.length;return t?Fa(e,1):[]}var Da=Ea;function Na(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var ka=Na,qa=ka,Ue=Math.max;function Ha(e,t,n){return t=Ue(t===void 0?e.length-1:t,0),function(){for(var r=arguments,s=-1,i=Ue(r.length-t,0),o=Array(i);++s<i;)o[s]=r[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=r[s];return l[t]=n(o),qa(e,this,l)}}var ja=Ha;function Ga(e){return function(){return e}}var za=Ga;function Ua(e){return e}var Ka=Ua,La=za,Ke=Fe,Va=Ka,Wa=Ke?function(e,t){return Ke(e,"toString",{configurable:!0,enumerable:!1,value:La(t),writable:!0})}:Va,Ba=Wa,Ya=800,Xa=16,Ja=Date.now;function Za(e){var t=0,n=0;return function(){var r=Ja(),s=Xa-(r-n);if(n=r,s>0){if(++t>=Ya)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var Qa=Za,Ra=Ba,eo=Qa,to=eo(Ra),no=to,ro=Da,so=ja,ao=no;function oo(e){return ao(so(e,void 0,ro),e+"")}var io=oo,co=$a,lo=io,uo=lo(function(e,t){return e==null?{}:co(e,t)}),po=uo;const ho=me(po),fo={type:"object",properties:{[x.uid()]:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=c.useRecord(),n=c.useRequest(()=>Promise.resolve({data:ho(t,["title","name","default"])}),D(P({},e),{manual:!0})),r=c.useActionContext();return h.useEffect(()=>{r.visible&&n.run()},[r.visible]),n}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}',"x-reactions":e=>{e.initialValue?e.disabled=!0:e.disabled=!1}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},vo=({loadMore:e})=>{const[t,n]=h.useState(null),r=h.useRef(null),s=h.useCallback(i=>{i&&(r.current&&r.current.disconnect(),r.current=new IntersectionObserver(o=>{o.forEach(l=>{l.target===i.current&&l.isIntersecting&&(r.current&&r.current.unobserve(i.current),e())})}),i.current&&r.current&&r.current.observe(i.current))},[e]);return h.useEffect(()=>(s(t),()=>{r.current&&r.current.disconnect()}),[t,s]),{lastItem:t,setLastItem:n}},Q=()=>{const{t:e}=N(),{data:t,mutate:n}=c.useResourceActionContext(),[r,s]=h.useState(!1),[i,o]=h.useState(null),{role:l,setRole:u}=h.useContext(F),[d,y]=h.useState([]),[C,b]=h.useState(!1),S=c.useAPIClient(),A=h.useCallback(()=>w(this,null,function*(){const f=t==null?void 0:t.meta;if(!f||f.page>=f.totalPage)return;b(!0);const _=yield S.resource("roles").list({page:f.page+1,pageSize:f.pageSize,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]});n((_==null?void 0:_.data)||{}),b(!1)}),[t]),{lastItem:$,setLastItem:I}=vo({loadMore:A}),g=({key:f})=>{u(d.find(_=>_.name===f))};h.useEffect(()=>{d[0]&&u(d[0])},[d,u]),h.useEffect(()=>{var _,O;if(!((_=t==null?void 0:t.data)!=null&&_.length))return;const f=h.createRef();I(f),((O=t.meta)==null?void 0:O.page)>1?y(M=>M.concat(t.data)):y(t.data)},[t,I]);const m=h.useMemo(()=>d.map((f,_)=>({key:f.name,label:_===d.length-1?a.jsx("div",{ref:$,children:a.jsx(Q.Item,{item:f,onEdit:()=>{s(!0),o(f)}})}):a.jsx(Q.Item,{item:f,onEdit:()=>{s(!0),o(f)}})})),[d,$]);return a.jsxs(a.Fragment,{children:[d.length?a.jsx(p.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:[...m,...C?[{key:"loading",label:a.jsx(p.Spin,{})}]:[]],selectedKeys:[l==null?void 0:l.name],onSelect:g}):a.jsx(p.Empty,{image:p.Empty.PRESENTED_IMAGE_SIMPLE}),a.jsx(c.ActionContextProvider,{value:{visible:r,setVisible:s},children:a.jsx(c.RecordProvider,{record:i,collectionName:"departments",children:a.jsx(c.SchemaComponent,{scope:{t:e},schema:fo})})})]})};Q.Item=function({item:t,onEdit:n}){const{t:r}=N(),{refreshAsync:s}=c.useResourceActionContext(),{modal:i,message:o}=p.App.useApp(),l=c.useAPIClient(),u=()=>{i.confirm({title:r("Delete"),content:r("Are you sure you want to delete it?"),onOk:()=>w(this,null,function*(){yield l.resource("roles").destroy({filterByTk:t.name}),o.success(r("Deleted successfully")),yield s()})})},d=({key:C,domEvent:b})=>{switch(b.stopPropagation(),C){case"edit":n();break;case"delete":u()}},y=E.Schema.compile(t.title,{t:r});return a.jsxs(p.Row,{children:[a.jsx(p.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"},children:a.jsxs("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"},children:[a.jsx(U.TagOutlined,{}),a.jsx("span",{style:{marginLeft:"10px"},title:y,children:y})]})}),a.jsxs(p.Col,{children:[t.default?a.jsx(p.Tag,{color:"success",bordered:!1,children:r("Default")}):null,a.jsx(p.Dropdown,{menu:{items:[{label:r("Edit"),key:"edit"},{label:r("Delete"),key:"delete"}],onClick:d},children:a.jsx(U.MoreOutlined,{})})]})]})};const ce=h.createContext([]);ce.displayName="AvailableActionsContext";const go=e=>{const{data:t,loading:n}=c.useRequest({resource:"availableActions",action:"list"});return n?a.jsx(p.Spin,{}):a.jsx(ce.Provider,{value:t==null?void 0:t.data,children:e.children})},mo=()=>h.useContext(ce);var yo="__lodash_hash_undefined__";function _o(e){return this.__data__.set(e,yo),this}var bo=_o;function Co(e){return this.__data__.has(e)}var $o=Co,xo=Ae,So=bo,wo=$o;function R(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new xo;++t<n;)this.add(e[t])}R.prototype.add=R.prototype.push=So,R.prototype.has=wo;var Ao=R;function Po(e,t,n,r){for(var s=e.length,i=n+(r?1:-1);r?i--:++i<s;)if(t(e[i],i,e))return i;return-1}var Io=Po;function To(e){return e!==e}var Oo=To;function Mo(e,t,n){for(var r=n-1,s=e.length;++r<s;)if(e[r]===t)return r;return-1}var Fo=Mo,Eo=Io,Do=Oo,No=Fo;function ko(e,t,n){return t===t?No(e,t,n):Eo(e,Do,n)}var qo=ko,Ho=qo;function jo(e,t){var n=e==null?0:e.length;return!!n&&Ho(e,t,0)>-1}var Go=jo;function zo(e,t,n){for(var r=-1,s=e==null?0:e.length;++r<s;)if(n(t,e[r]))return!0;return!1}var Uo=zo;function Ko(e,t){return e.has(t)}var Lo=Ko,Vo=B,Wo=V,Bo=Vo(Wo,"Set"),Yo=Bo;function Xo(){}var Jo=Xo;function Zo(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var Le=Zo,le=Yo,Qo=Jo,Ro=Le,ei=1/0,ti=le&&1/Ro(new le([,-0]))[1]==ei?function(e){return new le(e)}:Qo,ni=ti,ri=Ao,si=Go,ai=Uo,oi=Lo,ii=ni,ci=Le,li=200;function ui(e,t,n){var r=-1,s=si,i=e.length,o=!0,l=[],u=l;if(n)o=!1,s=ai;else if(i>=li){var d=t?null:ii(e);if(d)return ci(d);o=!1,s=oi,u=new ri}else u=t?[]:l;e:for(;++r<i;){var y=e[r],C=t?t(y):y;if(y=n||y!==0?y:0,o&&C===C){for(var b=u.length;b--;)if(u[b]===C)continue e;t&&u.push(C),l.push(y)}else s(u,C,n)||(u!==l&&u.push(C),l.push(y))}return l}var pi=ui,di=pi;function hi(e){return e&&e.length?di(e):[]}var fi=hi;const vi=me(fi),gi=e=>{var n;if(!e)return{};const t={};return(n=e==null?void 0:e.forEach)==null||n.call(e,r=>{const[s,i]=r.split(":");t[s]=i||"all"}),t},Ve=e=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n];r==="all"?t.push(n):t.push(`${n}:${r}`)}return t},mi=E.connect(e=>{const{onChange:t}=e,n=mo(),r=c.useCompile(),{t:s}=T.useTranslation(),i=E.useField(),o=gi(i.value);return a.jsx("div",{children:a.jsx(p.Table,{rowKey:"name",size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:s("Action display name"),render:l=>r(l)},{dataIndex:"onNewRecord",title:s("Action type"),render:l=>l?a.jsx(p.Tag,{color:"green",children:s("Action on new records")}):a.jsx(p.Tag,{color:"geekblue",children:s("Action on existing records")})},{dataIndex:"enabled",title:s("Allow"),render:(l,u)=>a.jsx(p.Checkbox,{checked:l,"aria-label":`${u.name}_checkbox`,onChange:d=>{l?delete o[u.name]:o[u.name]="all",t(Ve(o))}})},{dataIndex:"scope",title:s("Data scope"),render:(l,u)=>!u.onNewRecord&&a.jsx(p.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:l,options:[{label:s("All records"),value:"all"},{label:s("Own records"),value:"own"}],onChange:d=>{o[u.name]=d,t(Ve(o))}})}],dataSource:n==null?void 0:n.map(l=>{let u="all",d=!1;return o[l.name]&&(d=!0,u=o[l.name]),D(P({},l),{enabled:d,scope:u})})})})}),We=tt.createStyles(({css:e})=>e`
2
2
  .ant-table-cell {
3
3
  > .ant-space-horizontal {
4
4
  .ant-space-item-split:has(+ .ant-space-item:empty) {
@@ -6,4 +6,4 @@
6
6
  }
7
7
  }
8
8
  }
9
- `),Ve=e=>{if(!Array.isArray(e))return[];const t=[];for(const r of e)t.push(r.uid),t.push(...Ve(r.children));return t},We=(e,t,r=[])=>{if(!e)return[];for(const n of e){if(r.push(n.uid),t(n))return r;if(n.children){const a=We(n.children,t,r);if(a.length)return a}r.pop()}return[]},Be=(e=[],t=[])=>{for(const r of e)t.push(r.uid),r.children&&r.children.length&&Be(r.children,t);return t},yi=({active:e})=>{const{styles:t}=Le(),{role:r}=g.useContext(A),n=u.useAPIClient(),{items:a}=mi(),{t:i}=S.useTranslation(),o=Ve(a),[c,l]=g.useState([]),{loading:f,refresh:v}=u.useRequest({resource:"roles.menuUiSchemas",resourceOf:r.name,action:"list",params:{paginate:!1}},{ready:!!r&&e,refreshDeps:[r==null?void 0:r.name],onSuccess(b){var y;l(((y=b==null?void 0:b.data)==null?void 0:y.map(h=>h["x-uid"]))||[])}}),m=n.resource("roles.menuUiSchemas",r.name),C=o.length===c.length,le=(b,y)=>w(this,null,function*(){const h=We(a,$=>$.uid===y.uid),_=Be(y==null?void 0:y.children,[]);if(b){const $=_.concat(y.uid),N=c.filter(H=>!$.includes(H));l([...N]),yield m.remove({values:$})}else{const $=_.concat(h);l(N=>Z.uniq([...N,...$])),yield m.add({values:$})}p.message.success(i("Saved successfully"))}),D=b=>b.map(y=>{const h=i(y.title);return y.children?E(P({},y),{title:h,children:D(y.children)}):E(P({},y),{title:h})});return s.jsx(p.Table,{className:t,loading:f,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:i("Menu item title")},{dataIndex:"accessible",title:s.jsxs(s.Fragment,{children:[s.jsx(p.Checkbox,{checked:C,onChange:b=>w(this,null,function*(){C?yield m.set({values:[]}):yield m.set({values:o}),v(),p.message.success(i("Saved successfully"))})})," ",i("Accessible")]}),render:(b,y)=>{const h=c.includes(y.uid);return s.jsx(p.Checkbox,{checked:h,onChange:()=>le(h,y)})}}],dataSource:D(a)})},Ye=(e=[],t=[])=>{for(const r of e)t.push(r.aclSnippet),r.children&&r.children.length&&Ye(r.children,t);return t},_i=({active:e})=>{const t=u.useApp(),{styles:r}=Le(),{role:n}=g.useContext(A),a=u.useAPIClient(),i=u.useCompile(),o=t.pluginSettingsManager.getList(!1),c=t.pluginSettingsManager.getAclSnippets(),[l,f]=g.useState([]),v=g.useMemo(()=>Z.flatMap(o,h=>h.children?[h,...h.children]:h),[o]),m=g.useMemo(()=>l.includes("pm.*")&&l.every(h=>!h.startsWith("!pm.")),[l]),{t:C}=S.useTranslation(),{loading:le,refresh:D}=u.useRequest({resource:"roles.snippets",resourceOf:n.name,action:"list",params:{paginate:!1}},{ready:!!n&&e,refreshDeps:[n==null?void 0:n.name],onSuccess(h){f((h==null?void 0:h.data.filter(_=>v.find($=>_.includes(`!${$.aclSnippet}`)||!_.startsWith("!pm."))))||[])}}),b=a.resource("roles.snippets",n.name),y=(h,_)=>w(this,null,function*(){const N=Ye(_==null?void 0:_.children,[]).concat(_.aclSnippet);h?(yield b.add({values:N.map(H=>"!"+H)}),D()):(yield b.remove({values:N.map(H=>"!"+H)}),D()),p.message.success(C("Saved successfully"))});return s.jsx(p.Table,{className:r,loading:le,rowKey:"key",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:C("Plugin name"),render:h=>i(h)},{dataIndex:"accessible",title:s.jsxs(s.Fragment,{children:[s.jsx(p.Checkbox,{checked:m,onChange:()=>w(this,null,function*(){const h=c.map(_=>"!"+_);m?yield b.add({values:h}):yield b.remove({values:h}),D(),p.message.success(C("Saved successfully"))})})," ",C("Accessible")]}),render:(h,_)=>{const $=!l.includes("!"+_.aclSnippet);return s.jsx(p.Checkbox,{checked:$,onChange:()=>y($,_)})}}],dataSource:o.filter(h=>h.isTopLevel!==!1).map(h=>h.showTabs!==!1?h:Z.omit(h,"children"))})},J=e=>s.jsx("div",{style:{maxHeight:"60vh",overflowY:"auto"},children:e.children}),bi=({active:e})=>{var f;const{t}=T(),[r,n]=g.useState("general"),{role:a}=g.useContext(A),i=(f=a==null?void 0:a.snippets)==null?void 0:f.includes("pm.*"),c=u.useApp().getComponent("DataSourcePermissionManager"),l=g.useMemo(()=>[{key:"general",label:t("General"),children:s.jsx(J,{children:s.jsx(gi,{active:r==="general"&&e})})},{key:"menu",label:t("Menu"),children:s.jsx(J,{children:s.jsx(ze,{children:s.jsx(yi,{active:r==="menu"&&e})})})},...i?[{key:"plugin",label:t("Plugin settings"),children:s.jsx(J,{children:s.jsx(_i,{active:r==="plugin"&&e})})}]:[],...c?[{key:"dataSource",label:t("Data sources"),children:s.jsx(J,{children:s.jsx(ze,{children:s.jsx(c,{role:a,active:r==="dataSource"&&e})})})}]:[]],[i,r,e,t]);return g.useEffect(()=>{n("general")},[a==null?void 0:a.name]),s.jsx(ho,{children:s.jsx(p.Tabs,{type:"card",activeKey:r,onChange:v=>n(v),items:l})})},$i=()=>{const{t:e}=T();return s.jsx(u.SchemaComponent,{scope:{t:e},schema:{type:"void",properties:{newRole:{type:"void",title:e("New role"),"x-component":"Action","x-component-props":{type:"text",icon:"PlusOutlined",style:{width:"100%",textAlign:"left"}},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(t){const r=u.useActionContext();return u.useRequest(()=>Promise.resolve({data:{name:`r_${x.uid()}`,snippets:["!ui.*","!pm","!pm.*"]}}),E(P({},t),{refreshDeps:[r.visible]}))}},title:e("New role"),properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}}})},Xe={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},Ci=()=>{const{t:e}=T(),t=u.usePlugin(Je),[r,n]=g.useState("permissions"),a=Array.from(t.rolesManager.list()).map(([c,l])=>({key:c,label:I.Schema.compile(l.title,{t:e}),children:l.Component?g.createElement(l.Component,{active:r===c}):null})),[i,o]=g.useState(null);return s.jsx(A.Provider,{value:{role:i,setRole:o},children:s.jsx(p.Card,{children:s.jsxs(p.Row,{gutter:24,style:{flexWrap:"nowrap"},children:[s.jsx(p.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"250px"},children:s.jsx(u.ResourceActionProvider,{collection:Xe,request:{resource:"roles",action:"list",params:{pagination:!1,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}},children:s.jsxs(u.CollectionProvider_deprecated,{collection:Xe,children:[s.jsx(p.Row,{children:s.jsx($i,{})}),s.jsx(p.Divider,{style:{margin:"12px 0"}}),s.jsx(se,{})]})})}),s.jsx(p.Col,{flex:"auto",style:{overflow:"hidden"},children:s.jsx(p.Tabs,{activeKey:r,onChange:c=>n(c),items:[{key:"permissions",label:e("Permissions"),children:s.jsx(bi,{active:r==="permissions"})},...a]})})]})})})};class xi{constructor(){pe(this,"rolesManager",new k.Registry)}add(t,r){this.rolesManager.register(t,r)}list(){return this.rolesManager.getEntities()}}class Je extends u.Plugin{constructor(){super(...arguments);pe(this,"rolesManager",new xi)}load(){return w(this,null,function*(){this.app.pluginSettingsManager.add("users-permissions.roles",{title:'{{t("Roles & Permissions")}}',icon:"LockOutlined",Component:Ci,aclSnippet:"pm.acl.roles",sort:3})})}}d.RolesManagerContext=A,d.default=Je,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
9
+ `),Be=(e=[],t=[])=>{for(const n of e)t.push(n.aclSnippet),n.children&&n.children.length&&Be(n.children,t);return t},yi=({active:e})=>{const t=c.useApp(),{styles:n}=We(),{role:r}=h.useContext(F),s=c.useAPIClient(),i=c.useCompile(),o=t.pluginSettingsManager.getList(!1),l=t.pluginSettingsManager.getAclSnippets(),[u,d]=h.useState((r==null?void 0:r.snippets)||[]),y=h.useMemo(()=>ee.flatMap(o,g=>g.children?[g,...g.children]:g),[o]),C=h.useMemo(()=>u.includes("pm.*")&&u.every(g=>!g.startsWith("!pm.")),[u]),{t:b}=T.useTranslation(),{loading:S,refresh:A}=c.useRequest({resource:"roles.snippets",resourceOf:r==null?void 0:r.name,action:"list",params:{paginate:!1}},{ready:!!r&&e,refreshDeps:[r==null?void 0:r.name],manual:!0,onSuccess(g){d((g==null?void 0:g.data.filter(m=>y.find(f=>m.includes(`!${f.aclSnippet}`)||!m.startsWith("!pm."))))||[])}});if(!r)return;const $=s.resource("roles.snippets",r==null?void 0:r.name),I=(g,m)=>w(this,null,function*(){const _=Be(m==null?void 0:m.children,[]).concat(m.aclSnippet);g?(yield $.add({values:_.map(O=>"!"+O)}),A()):(yield $.remove({values:_.map(O=>"!"+O)}),A()),p.message.success(b("Saved successfully"))});return a.jsx(p.Table,{className:n,loading:S,rowKey:"key",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:b("Plugin name"),render:g=>i(g)},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:C,onChange:()=>w(this,null,function*(){const g=l.map(m=>"!"+m);C?yield $.add({values:g}):yield $.remove({values:g}),A(),p.message.success(b("Saved successfully"))})}),b("Accessible")]}),render:(g,m)=>{const f=!u.includes("!"+m.aclSnippet);return a.jsx(p.Checkbox,{checked:f,onChange:()=>I(f,m)})}}],dataSource:o.filter(g=>g.isTopLevel!==!1).map(g=>g.showTabs!==!1?g:ee.omit(g,"children"))})},_i=E.connect(e=>{const{t}=T.useTranslation();return a.jsxs(p.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:n=>{const r=["ui.*","pm","pm.*","app"],s=r.map(o=>`!${o}`),i=vi([...e.value||[],...n]).filter(o=>o&&!s.includes(o)).map(o=>!r.includes(o)||n!=null&&n.includes(o)?o:`!${o}`);for(const o of r)!i.includes(o)&&!i.includes(`!${o}`)&&i.push(`!${o}`);e.onChange(i)},children:[a.jsx("div",{style:{marginTop:16},children:a.jsx(p.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),bi=({active:e})=>{var u;const{role:t,setRole:n}=h.useContext(F),{t:r}=N(),s=c.useAPIClient(),i=(u=t==null?void 0:t.snippets)==null?void 0:u.includes("pm.*"),o=ge.useMemoizedFn(d=>w(this,null,function*(){yield s.resource("roles").update({filterByTk:t.name,values:d.values}),n(P(P({},t),d.values)),p.message.success(r("Saved successfully"))})),l=h.useMemo(()=>K.createForm({values:t,effects(){K.onFormValuesChange(d=>w(this,null,function*(){yield o(d)}))}}),[t,o]);return a.jsx(c.SchemaComponent,{components:{SnippetCheckboxGroup:_i,StrategyActions:mi,PluginPermissions:yi},scope:{pm:i},schema:{type:"void",name:x.uid(),"x-component":"div",properties:{general:{"x-component":"FormV2","x-component-props":{form:l},properties:{snippets:{title:r("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"}}},plugins:{"x-component":"FormV2",properties:{pluginSettings:{title:r("Plugin settings"),"x-decorator":"FormItem","x-component":"PluginPermissions","x-visible":"{{pm}}"}}}}}})},ue=h.createContext(null);ue.displayName="MenuItemsContext";const Ye=(e={})=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n],s={title:r.title,uid:r["x-uid"]};r.properties&&(s.children=Ye(r.properties)),t.push(s)}return t},Ci=()=>h.useContext(ue),Xe=e=>{var i,o;const n={url:`uiSchemas:getProperties/${c.useAdminSchemaUid()}`},r=c.useRequest(n);if(r.loading)return a.jsx(p.Spin,{});const s=Ye((o=(i=r.data)==null?void 0:i.data)==null?void 0:o.properties);return a.jsx(ue.Provider,{value:{service:r,items:s},children:e.children})},Je=e=>{if(!Array.isArray(e))return[];const t=[];for(const n of e)t.push(n.uid),t.push(...Je(n.children));return t},Ze=(e,t,n=[])=>{if(!e)return[];for(const r of e){if(n.push(r.uid),t(r))return n;if(r.children){const s=Ze(r.children,t,n);if(s.length)return s}n.pop()}return[]},Qe=(e=[],t=[])=>{for(const n of e)t.push(n.uid),n.children&&n.children.length&&Qe(n.children,t);return t},$i=({active:e})=>{const{styles:t}=We(),{role:n,setRole:r}=h.useContext(F),s=c.useAPIClient(),{items:i}=Ci(),{t:o}=T.useTranslation(),l=Je(i),[u,d]=h.useState([]),{loading:y,refresh:C}=c.useRequest({resource:"roles.menuUiSchemas",resourceOf:n.name,action:"list",params:{paginate:!1}},{ready:!!n&&e,refreshDeps:[n==null?void 0:n.name],onSuccess(m){var f;d(((f=m==null?void 0:m.data)==null?void 0:f.map(_=>_["x-uid"]))||[])}}),b=s.resource("roles.menuUiSchemas",n.name),S=l.length===u.length,A=(m,f)=>w(this,null,function*(){const _=Ze(i,M=>M.uid===f.uid),O=Qe(f==null?void 0:f.children,[]);if(m){const M=O.concat(f.uid),he=u.filter(Pi=>!M.includes(Pi));d([...he]),yield b.remove({values:M})}else{const M=O.concat(_);d(he=>ee.uniq([...he,...M])),yield b.add({values:M})}p.message.success(o("Saved successfully"))}),$=m=>m.map(f=>{const _=o(f.title);return f.children?D(P({},f),{title:_,children:$(f.children)}):D(P({},f),{title:_})}),I=ge.useMemoizedFn(m=>w(this,null,function*(){yield s.resource("roles").update({filterByTk:n.name,values:m.values}),r(P(P({},n),m.values)),p.message.success(o("Saved successfully"))})),g=h.useMemo(()=>K.createForm({values:n,effects(){K.onFormValuesChange(m=>w(this,null,function*(){yield I(m)}))}}),[n,I]);return a.jsxs(a.Fragment,{children:[a.jsx(c.SchemaComponent,{schema:{type:"void",name:x.uid(),"x-component":"FormV2","x-component-props":{form:g},properties:{allowNewMenu:{title:o("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":o("New menu items are allowed to be accessed by default.")}}}}),a.jsx(p.Table,{className:t,loading:y,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:o("Menu item title")},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:S,onChange:m=>w(this,null,function*(){S?yield b.set({values:[]}):yield b.set({values:l}),C(),p.message.success(o("Saved successfully"))})})," ",o("Accessible")]}),render:(m,f)=>{const _=u.includes(f.uid);return a.jsx(p.Checkbox,{checked:_,onChange:()=>A(_,f)})}}],dataSource:$(i)})]})},pe=e=>a.jsx("div",{style:{maxHeight:"60vh",overflowY:"auto"},children:e.children}),xi=({active:e})=>{var b;const{t}=N(),[n,r]=h.useState("general"),{role:s,setRole:i}=h.useContext(F),o=(b=s==null?void 0:s.snippets)==null?void 0:b.includes("pm.*"),u=c.useApp().getComponent("DataSourcePermissionManager"),d=h.useMemo(()=>[{key:"general",label:t("System"),children:a.jsx(pe,{children:a.jsx(bi,{active:n==="general"&&e})})},{key:"menu",label:t("Menu"),children:a.jsx(pe,{children:a.jsx(Xe,{children:a.jsx($i,{active:n==="menu"&&e})})})},...u?[{key:"dataSource",label:t("Data sources"),children:a.jsx(pe,{children:a.jsx(Xe,{children:a.jsx(u,{role:s,active:n==="dataSource"&&e})})})}]:[]],[o,n,e,t]),y=c.useAPIClient(),{data:C}=c.useRequest(()=>y.resource("roles").get({filterByTk:s==null?void 0:s.name}).then(S=>{var $,I;const A=($=S==null?void 0:S.data)==null?void 0:$.data;return(I=A.snippets)==null||I.forEach(g=>{A[g]=!0}),A}),{ready:e&&!!s,refreshDeps:[s==null?void 0:s.name]});return h.useEffect(()=>{r("general")},[s==null?void 0:s.name]),h.useEffect(()=>{i(C)},[C]),a.jsx(go,{children:a.jsx(p.Tabs,{type:"card",activeKey:n,onChange:S=>r(S),items:d})})},Si=()=>{const{t:e}=N();return a.jsx(c.SchemaComponent,{scope:{t:e},schema:{type:"void",properties:{newRole:{type:"void",title:e("New role"),"x-component":"Action","x-component-props":{type:"text",icon:"PlusOutlined",style:{width:"100%",textAlign:"left"}},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(t){const n=c.useActionContext();return c.useRequest(()=>Promise.resolve({data:{name:`r_${x.uid()}`,snippets:["!ui.*","!pm","!pm.*"]}}),D(P({},t),{refreshDeps:[n.visible]}))}},title:e("New role"),properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}}})},Re={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},wi=()=>{const{t:e}=N(),t=c.usePlugin(de),[n,r]=h.useState("permissions"),s=Array.from(t.rolesManager.list()).map(([u,d])=>({key:u,label:E.Schema.compile(d.title,{t:e}),children:d.Component?h.createElement(d.Component,{active:n===u}):null})),[i,o]=h.useState(null),l=c.useSchemaComponentContext();return a.jsx(c.SchemaComponentContext.Provider,{value:D(P({},l),{designable:!1}),children:a.jsx(F.Provider,{value:{role:i,setRole:o},children:a.jsx(p.Card,{children:a.jsxs(p.Row,{gutter:24,style:{flexWrap:"nowrap"},children:[a.jsx(p.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"250px"},children:a.jsx(c.ResourceActionProvider,{collection:Re,request:{resource:"roles",action:"list",params:{filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}},children:a.jsxs(c.CollectionProvider_deprecated,{collection:Re,children:[a.jsx(p.Row,{children:a.jsx(Si,{})}),a.jsx(p.Divider,{style:{margin:"12px 0"}}),a.jsx(Q,{})]})})}),a.jsx(p.Col,{flex:"auto",style:{overflow:"hidden"},children:a.jsx(p.Tabs,{activeKey:n,onChange:u=>r(u),items:[{key:"permissions",label:e("Permissions"),children:a.jsx(xi,{active:n==="permissions"})},...s]})})]})})})})};class Ai{constructor(){ve(this,"rolesManager",new j.Registry)}add(t,n){this.rolesManager.register(t,n)}list(){return this.rolesManager.getEntities()}}class de extends c.Plugin{constructor(){super(...arguments);ve(this,"rolesManager",new Ai)}load(){return w(this,null,function*(){this.pluginSettingsManager.add("users-permissions.roles",{title:this.t("Roles & Permissions"),icon:"LockOutlined",Component:wi,aclSnippet:"pm.acl.roles",sort:3})})}}v.PluginACLClient=de,v.RolesManagerContext=F,v.default=de,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1 +1 @@
1
- export declare function useACLTranslation(): import("react-i18next").UseTranslationResponse<("acl" | "client")[], undefined>;
1
+ export declare function useACLTranslation(): import("react-i18next").UseTranslationResponse<("@nocobase/plugin-acl" | "client")[], undefined>;
@@ -25,6 +25,7 @@ export declare const roleEditSchema: {
25
25
  'x-component': string;
26
26
  'x-decorator': string;
27
27
  'x-content': string;
28
+ 'x-reactions': (field: any) => void;
28
29
  };
29
30
  footer: {
30
31
  type: string;
@@ -1,22 +1,22 @@
1
1
  module.exports = {
2
- "@nocobase/client": "0.20.0-alpha.9",
2
+ "@nocobase/client": "0.21.0-alpha.2",
3
3
  "react": "18.2.0",
4
4
  "@formily/shared": "2.3.0",
5
5
  "antd": "5.12.8",
6
6
  "@formily/react": "2.3.0",
7
7
  "@ant-design/icons": "5.2.6",
8
8
  "react-i18next": "11.18.6",
9
- "@nocobase/utils": "0.20.0-alpha.9",
10
- "@nocobase/actions": "0.20.0-alpha.9",
11
- "@nocobase/cache": "0.20.0-alpha.9",
12
- "@nocobase/database": "0.20.0-alpha.9",
13
- "@nocobase/server": "0.20.0-alpha.9",
9
+ "@nocobase/utils": "0.21.0-alpha.2",
10
+ "@nocobase/actions": "0.21.0-alpha.2",
11
+ "@nocobase/cache": "0.21.0-alpha.2",
12
+ "@nocobase/database": "0.21.0-alpha.2",
13
+ "@nocobase/server": "0.21.0-alpha.2",
14
14
  "async-mutex": "0.3.2",
15
15
  "lodash": "4.17.21",
16
- "@nocobase/test": "0.20.0-alpha.9",
16
+ "@nocobase/test": "0.21.0-alpha.2",
17
17
  "@formily/core": "2.3.0",
18
18
  "ahooks": "3.7.8",
19
19
  "@formily/antd-v5": "1.1.9",
20
20
  "antd-style": "3.4.5",
21
- "@nocobase/acl": "0.20.0-alpha.9"
21
+ "@nocobase/acl": "0.21.0-alpha.2"
22
22
  };
@@ -2,5 +2,10 @@
2
2
  "The current user has no roles. Please try another account.": "当前用户没有角色,请使用其他账号。",
3
3
  "The user role does not exist. Please try signing in again": "用户角色不存在,请尝试重新登录。",
4
4
  "New role": "新建角色",
5
- "Permissions": "权限"
5
+ "Permissions": "权限",
6
+ "Roles & Permissions": "角色和权限",
7
+ "General": "通用",
8
+ "Menu": "菜单",
9
+ "Plugin settings": "插件设置",
10
+ "Data sources": "数据源"
6
11
  }
@@ -1,5 +1,5 @@
1
- export { default } from './server';
1
+ export * from './middlewares/setCurrentRole';
2
+ export * from './middlewares/with-acl-meta';
2
3
  export { RoleResourceActionModel } from './model/RoleResourceActionModel';
3
4
  export { RoleResourceModel } from './model/RoleResourceModel';
4
- export * from './middlewares/with-acl-meta';
5
- export * from './middlewares/setCurrentRole';
5
+ export { default } from './server';
@@ -33,15 +33,15 @@ __export(server_exports, {
33
33
  default: () => import_server.default
34
34
  });
35
35
  module.exports = __toCommonJS(server_exports);
36
- var import_server = __toESM(require("./server"));
36
+ __reExport(server_exports, require("./middlewares/setCurrentRole"), module.exports);
37
+ __reExport(server_exports, require("./middlewares/with-acl-meta"), module.exports);
37
38
  var import_RoleResourceActionModel = require("./model/RoleResourceActionModel");
38
39
  var import_RoleResourceModel = require("./model/RoleResourceModel");
39
- __reExport(server_exports, require("./middlewares/with-acl-meta"), module.exports);
40
- __reExport(server_exports, require("./middlewares/setCurrentRole"), module.exports);
40
+ var import_server = __toESM(require("./server"));
41
41
  // Annotate the CommonJS export names for ESM import in node:
42
42
  0 && (module.exports = {
43
43
  RoleResourceActionModel,
44
44
  RoleResourceModel,
45
- ...require("./middlewares/with-acl-meta"),
46
- ...require("./middlewares/setCurrentRole")
45
+ ...require("./middlewares/setCurrentRole"),
46
+ ...require("./middlewares/with-acl-meta")
47
47
  });
@@ -35,7 +35,7 @@ var import_acl = require("@nocobase/acl");
35
35
  var import_database = require("@nocobase/database");
36
36
  function createWithACLMetaMiddleware() {
37
37
  return async (ctx, next) => {
38
- var _a, _b, _c;
38
+ var _a, _b, _c, _d;
39
39
  await next();
40
40
  const dataSourceKey = ctx.get("x-data-source");
41
41
  const dataSource = ctx.app.dataSourceManager.dataSources.get(dataSourceKey);
@@ -57,8 +57,17 @@ function createWithACLMetaMiddleware() {
57
57
  }
58
58
  const Model = collection.model;
59
59
  const primaryKeyField = Model.primaryKeyField || Model.primaryKeyAttribute;
60
- const dataPath = ((_a = ctx.body) == null ? void 0 : _a.rows) ? "body.rows" : "body";
61
- let listData = import_lodash.default.get(ctx, dataPath);
60
+ let listData;
61
+ if ((_a = ctx.body) == null ? void 0 : _a.data) {
62
+ listData = ctx.data;
63
+ } else if ((_b = ctx.body) == null ? void 0 : _b.rows) {
64
+ listData = ctx.body.rows;
65
+ } else if (ctx.body) {
66
+ listData = ctx.body;
67
+ }
68
+ if (!listData) {
69
+ return;
70
+ }
62
71
  if (actionName == "get") {
63
72
  listData = import_lodash.default.castArray(listData);
64
73
  }
@@ -112,7 +121,7 @@ function createWithACLMetaMiddleware() {
112
121
  }
113
122
  actionsParams.push([
114
123
  action,
115
- ((_b = actionCtx.permission) == null ? void 0 : _b.can) === null && !actionCtx.permission.skip ? null : ((_c = actionCtx.permission) == null ? void 0 : _c.parsedParams) || {},
124
+ ((_c = actionCtx.permission) == null ? void 0 : _c.can) === null && !actionCtx.permission.skip ? null : ((_d = actionCtx.permission) == null ? void 0 : _d.parsedParams) || {},
116
125
  actionCtx
117
126
  ]);
118
127
  }
@@ -43,10 +43,10 @@ var import_role_check = require("./actions/role-check");
43
43
  var import_role_collections = require("./actions/role-collections");
44
44
  var import_user_setDefaultRole = require("./actions/user-setDefaultRole");
45
45
  var import_setCurrentRole = require("./middlewares/setCurrentRole");
46
+ var import_with_acl_meta = require("./middlewares/with-acl-meta");
46
47
  var import_RoleModel = require("./model/RoleModel");
47
48
  var import_RoleResourceActionModel = require("./model/RoleResourceActionModel");
48
49
  var import_RoleResourceModel = require("./model/RoleResourceModel");
49
- var import_with_acl_meta = require("./middlewares/with-acl-meta");
50
50
  class GrantHelper {
51
51
  resourceTargetActionMap = /* @__PURE__ */ new Map();
52
52
  targetActionResourceMap = /* @__PURE__ */ new Map();
@@ -172,7 +172,8 @@ class PluginACL extends import_server.Plugin {
172
172
  "roles.collections:list",
173
173
  "roles.resources:*",
174
174
  "uiSchemas:getProperties",
175
- "roles.menuUiSchemas:*"
175
+ "roles.menuUiSchemas:*",
176
+ "roles.users:*"
176
177
  ]
177
178
  });
178
179
  this.app.acl.beforeGrantAction((ctx) => {
@@ -348,7 +349,7 @@ class PluginACL extends import_server.Plugin {
348
349
  await this.writeRolesToACL(options);
349
350
  }
350
351
  };
351
- this.app.on("afterLoad", async () => {
352
+ this.app.on("afterStart", async () => {
352
353
  await writeRolesToACL(this.app, {
353
354
  withOutResources: true
354
355
  });
@@ -598,7 +599,7 @@ class PluginACL extends import_server.Plugin {
598
599
  ctx.logger.error(error);
599
600
  }
600
601
  },
601
- { after: "restApi", group: "after" }
602
+ { after: "dataSource", group: "with-acl-meta" }
602
603
  );
603
604
  }
604
605
  async install() {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName.zh-CN": "权限控制",
5
5
  "description": "Based on roles, resources, and actions, access control can precisely manage interface configuration permissions, data operation permissions, menu access permissions, and plugin permissions.",
6
6
  "description.zh-CN": "基于角色、资源和操作的权限控制,可以精确控制界面配置权限、数据操作权限、菜单访问权限、插件权限。",
7
- "version": "0.20.0-alpha.9",
7
+ "version": "0.21.0-alpha.2",
8
8
  "license": "AGPL-3.0",
9
9
  "main": "./dist/server/index.js",
10
10
  "homepage": "https://docs.nocobase.com/handbook/acl",
@@ -34,5 +34,5 @@
34
34
  "url": "git+https://github.com/nocobase/nocobase.git",
35
35
  "directory": "packages/plugins/acl"
36
36
  },
37
- "gitHead": "5473d9039cfdb649a8c8c625edefc9a3ac464be5"
37
+ "gitHead": "90628f2e2da846208fb2d7966ddb4e467d187ffb"
38
38
  }