unleash-server 5.2.0 → 5.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/frontend/build/index.html +1 -1
  2. package/frontend/build/static/{AdvancedPlayground-520a25e1.js → AdvancedPlayground-b8d00f81.js} +1 -1
  3. package/frontend/build/static/{CreateProject-c430691b.js → CreateProject-fe1d0f0f.js} +1 -1
  4. package/frontend/build/static/{Error-492e8b38.js → Error-6550f020.js} +1 -1
  5. package/frontend/build/static/{FeatureArchiveDialog-70daa567.js → FeatureArchiveDialog-42d2cf92.js} +3 -3
  6. package/frontend/build/static/{FeatureMetricsChart-bc99b364.js → FeatureMetricsChart-70a6747e.js} +1 -1
  7. package/frontend/build/static/{FeatureViewLazyExport-01d70575.js → FeatureViewLazyExport-60874e5e.js} +2 -2
  8. package/frontend/build/static/{LazyAdminExport-e2c90193.js → LazyAdminExport-c5eec10c.js} +2 -2
  9. package/frontend/build/static/{LazyProjectExport-fa62d2fe.js → LazyProjectExport-7f66ff80.js} +6 -6
  10. package/frontend/build/static/{NetworkOverview-3b72e4ea.js → NetworkOverview-b82ebe0c.js} +2 -2
  11. package/frontend/build/static/{NetworkTraffic-365db744.js → NetworkTraffic-51a825ea.js} +1 -1
  12. package/frontend/build/static/{Playground-b473b399.js → Playground-2b482aeb.js} +1 -1
  13. package/frontend/build/static/{PlaygroundGuidancePopper-8e3e97db.js → PlaygroundGuidancePopper-5673aca8.js} +1 -1
  14. package/frontend/build/static/{RoleCell-9bb513a8.js → RoleCell-c9b26e7a.js} +1 -1
  15. package/frontend/build/static/{StrategyItemContainer-1f7503c7.js → StrategyItemContainer-7b356e23.js} +1 -1
  16. package/frontend/build/static/{chartjs-adapter-date-fns.esm-db338d44.js → chartjs-adapter-date-fns.esm-04fda623.js} +1 -1
  17. package/frontend/build/static/{flowchart-elk-definition-170a3958-a428dd25.js → flowchart-elk-definition-170a3958-68f1625d.js} +1 -1
  18. package/frontend/build/static/{index-dc5debe9.js → index-545ad556.js} +1 -1
  19. package/frontend/build/static/{index-0a56292a.js → index-78d048a4.js} +79 -79
  20. package/frontend/build/static/{index-d362ae7a.js → index-b74e9af8.js} +1 -1
  21. package/frontend/build/static/{is_dark-884249e0.js → is_dark-77b9ee14.js} +1 -1
  22. package/frontend/build/static/{mindmap-definition-44684416-3c9425ff.js → mindmap-definition-44684416-4cca63a5.js} +1 -1
  23. package/frontend/build/static/{timeline-definition-8e5a9bc6-d289cd6d.js → timeline-definition-8e5a9bc6-31dad151.js} +1 -1
  24. package/frontend/build/static/{unknownify-5b23bf29.js → unknownify-53fb2d5d.js} +1 -1
  25. package/frontend/package.json +4 -3
  26. package/package.json +4 -3
@@ -16,7 +16,7 @@
16
16
  href="https://fonts.googleapis.com/css2?family=Sen:wght@400;700;800&display=swap"
17
17
  rel="stylesheet"
18
18
  />
19
- <script type="module" crossorigin src="/static/index-0a56292a.js"></script>
19
+ <script type="module" crossorigin src="/static/index-78d048a4.js"></script>
20
20
  <link rel="stylesheet" href="/static/index-66c635eb.css">
21
21
  </head>
22
22
  <body>
@@ -1 +1 @@
1
- import{b as B,d as Y,H as G,r as d,j as e,f as C,s as D,g as Z,B as w,V,t as O,v as _,h as g,C as E,F as I,I as he,w as pe,x as ee,T as z,y as fe,c as te,z as ge,u as ne,a as ye,L as Q,e as be,S as ve,i as W,k as xe,A as Se,l as Ce,m as Pe,n as M,D as Re,P as je,o as Ee,p as we,q as Fe}from"./index-0a56292a.js";import{V as ke,F as se,a as oe,f as K,u as He,r as Te,g as Ae,b as Be,P as Oe,d as Le,c as $e,e as Ue}from"./PlaygroundGuidancePopper-8e3e97db.js";import"./StrategyItemContainer-1f7503c7.js";import"./Error-492e8b38.js";const q=t=>t.charAt(0).toUpperCase()+t.slice(1),Ie=({features:t})=>{const l=B(),n=Y(l.breakpoints.down("sm")),h=Object.keys(t[0].context).map(o=>({Header:q(o),accessor:`context.${o}`,minWidth:160,Cell:G})),m=d.useMemo(()=>[...h,{Header:"Variant",id:"variant",accessor:"variant.name",sortType:"alphanumeric",filterName:"variant",maxWidth:200,Cell:({value:o,row:{original:{variant:i,feature:c,variants:u,isEnabled:v}}})=>e(ke,{variant:i!=null&&i.enabled?o:"",variants:u,feature:c,isEnabled:v})},{id:"isEnabled",Header:"isEnabled",filterName:"isEnabled",accessor:o=>{var i;return o!=null&&o.isEnabled?"true":((i=o==null?void 0:o.strategies)==null?void 0:i.result)==="unknown"?"unknown":"false"},Cell:({row:o})=>e(se,{feature:o.original}),sortType:"playgroundResultState",maxWidth:120,sortInverted:!0},{Header:"",maxWidth:70,id:"info",Cell:({row:o})=>e(oe,{feature:o.original,input:{environment:o.original.environment,context:o.original.context}})}],[]),{headerGroups:y,rows:P,prepareRow:a,setHiddenColumns:R}=C.useTable({columns:m,data:t,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0},C.useGlobalFilter,C.useFlexLayout,C.useSortBy);Z([{condition:n,columns:["variant"]}],R,m);const s=d.useRef(null);return e(w,{ref:s,sx:{overflow:"auto",maxHeight:"800px"},children:e(V,{parentRef:s,rows:P,headerGroups:y,prepareRow:a})})},Ne=O("div",{})(({theme:t})=>({flexGrow:0,..._,justifyContent:"flex-start",margin:t.spacing(0,1.5)})),We=O(w)(({theme:t})=>({display:"flex",flexDirection:"row",gap:t.spacing(1)})),Me=({value:t})=>{const l=B(),[n,h]=d.useState(null),m=s=>h(s.currentTarget),y=()=>h(null),P=!!n,a=(t||[]).filter(s=>s.isEnabled),R=(t||[]).filter(s=>!s.isEnabled);return g(Ne,{children:[g(We,{children:[e(E,{condition:a.length>0,show:e(K,{enabled:!0,label:`${a.length}`,showIcon:!0})}),e(E,{condition:R.length>0,show:e(K,{enabled:!1,label:`${R.length}`,showIcon:!0})})]}),g(I,{children:[e(he,{onClick:m,children:e(pe,{})}),g(ee,{open:P,id:`${t}-result-details`,PaperProps:{sx:{borderRadius:`${l.shape.borderRadiusLarge}px`,padding:l.spacing(3)}},onClose:y,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:-320},children:[e(z,{variant:"subtitle2",sx:{mb:3},children:t[0].environment}),e(Ie,{features:t})]})]})]})},Ge=({features:t})=>{const l=Object.keys(t),n=t[l[0]],h=n[0].context,m=d.useMemo(()=>n.map((c,u)=>({...Object.fromEntries(l.map(v=>[v,t[v][u]]))})),[JSON.stringify(t)]),y=Object.keys(h).map(c=>({Header:q(c),accessor:`${l[0]}.context.${c}`,minWidth:160,Cell:G})),P=l.map(c=>({Header:c,accessor:u=>{var v,p,f;return(v=u[c])!=null&&v.isEnabled?"true":((f=(p=u[c])==null?void 0:p.strategies)==null?void 0:f.result)==="unknown"?"unknown":"false"},Cell:({row:u})=>g(w,{sx:{display:"flex"},children:[e(se,{feature:u.original[c]}),e(oe,{feature:u.original[c],input:{environment:u.original[c].environment,context:u.original[c].context}})]}),sortType:"playgroundResultState",maxWidth:140})),a=d.useMemo(()=>[...y,...P],[]),{headerGroups:R,rows:s,prepareRow:o}=C.useTable({columns:a,data:m,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0},C.useGlobalFilter,C.useFlexLayout,C.useSortBy),i=d.useRef(null);return e(w,{ref:i,sx:{overflow:"auto",maxHeight:"800px"},children:e(V,{parentRef:i,rows:s,headerGroups:R,prepareRow:o})})},De=O("div",{})(({theme:t})=>({flexGrow:0,..._,justifyContent:"flex-start",margin:t.spacing(0,1.5)})),Ve=O(fe)(({theme:t})=>({textAlign:"left",textDecorationStyle:"dotted",textUnderlineOffset:t.spacing(.75),color:t.palette.neutral.dark})),ze=({value:t})=>{const l=B(),[n,h]=d.useState(null),m=a=>h(a.currentTarget),y=()=>h(null);return e(De,{children:g(I,{children:[e(Ve,{variant:"body2",onClick:m,children:"Preview diff"}),g(ee,{open:!!n,id:`${t}-result-details`,PaperProps:{sx:{borderRadius:`${l.shape.borderRadiusLarge}px`,padding:l.spacing(3)}},onClose:y,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:-320},children:[e(z,{variant:"subtitle2",sx:{mb:3},children:"Environments diff"}),e(Ge,{features:t})]})]})})},qe=t=>t.reduce((l,n)=>l+Object.values(n.environments).flatMap(h=>Object.keys(h)).length,0),Je={id:"name"},{value:X,setValue:Qe}=te("AdvancedPlaygroundResultsTable:v1",Je),Ke=({features:t,input:l,loading:n})=>{const{trackEvent:h}=ge();t&&h("playground",{props:{eventType:"number-of-combinations",count:qe(t)}});const[m,y]=ne(),P=ye(n),[a,R]=d.useState(m.get("search")||""),s=B(),o=Y(s.breakpoints.down("md")),i=t&&t.length>0?Object.keys(t[0].environments).length:0,c=d.useMemo(()=>{var S;return[{Header:"Name",accessor:"name",searchable:!0,minWidth:160,Cell:({value:b,row:{original:k}})=>e(Q,{title:b,to:`/projects/${k==null?void 0:k.projectId}/features/${b}`})},{Header:"Project ID",accessor:"projectId",sortType:"alphanumeric",filterName:"projectId",searchable:!0,minWidth:150,Cell:({value:b})=>e(Q,{title:b,to:`/projects/${b}`})},...((S=l==null?void 0:l.environments)==null?void 0:S.map(b=>({Header:n?()=>"":q(b),maxWidth:140,id:`environments.${b}`,align:"flex-start",Cell:({row:k})=>e(Me,{value:k.original.environments[b]})})))||[],...i>1?[{Header:"Diff",minWidth:150,id:"diff",align:"left",Cell:({row:b})=>e(ze,{value:b.original.environments})}]:[]]},[l]),{data:u,getSearchText:v,getSearchContext:p}=be(c,a,t||[]),f=d.useMemo(()=>n?Array(5).fill({name:"Feature name",projectId:"Feature Project",environments:{name:"Feature Environments",variants:[]},enabled:!0}):u,[u,n]),[T]=d.useState(()=>({sortBy:[{id:m.get("sort")||X.id,desc:m.has("order")?m.get("order")==="desc":X.desc}]})),{headerGroups:x,rows:A,state:{sortBy:F},prepareRow:N,setHiddenColumns:L}=C.useTable({initialState:T,columns:c,data:f,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0,defaultColumn:{Cell:G}},C.useGlobalFilter,C.useFlexLayout,C.useSortBy);return Z([{condition:o,columns:["projectId"]}],L,c),d.useEffect(()=>{if(n)return;const S=Object.fromEntries(m);S.sort=F[0].id,F[0].desc?S.order="desc":S.order&&delete S.order,a?S.search=a:delete S.search,y(S,{replace:!0}),Qe({id:F[0].id,desc:F[0].desc||!1})},[n,F,a]),g(I,{children:[g(w,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[e(z,{variant:"subtitle1",sx:{ml:1},children:t!==void 0&&!n?`Results (${A.length<f.length?`${A.length} of ${f.length}`:f.length})`:"Results"}),e(ve,{initialValue:a,onChange:R,hasFilters:!0,getSearchContext:p,disabled:n,containerStyles:{marginLeft:"1rem",maxWidth:"400px"}})]}),e(E,{condition:!n&&!f,show:()=>e(W,{children:f===void 0?"None of the feature toggles were evaluated yet.":"No results found."}),elseShow:()=>g(w,{ref:P,sx:{overflow:"auto"},children:[e(xe,{value:v(a),children:e(V,{rows:A,headerGroups:x,prepareRow:N})}),e(E,{condition:f.length===0&&(a==null?void 0:a.length)>0,show:g(W,{children:["No feature toggles found matching “",a,"”"]})}),e(E,{condition:f&&f.length===0&&!a,show:e(W,{children:"No features toggles to display"})})]})})]})},Xe=O(Se)(({theme:t})=>({marginBottom:t.spacing(3)})),tt=({FormComponent:t=$e})=>{const l={projects:[],environments:[]},{value:n,setValue:h}=te("AdvancedPlayground:v1",l),{environments:m}=Ce(),y=B(),P=!0,[a,R]=d.useState(),[s,o]=d.useState(n.environments),[i,c]=d.useState(n.projects),[u,v]=d.useState(n.context),[p,f]=d.useState(),{setToastData:T}=Pe(),[x,A]=ne(),F=Array.from(x.entries()).length,{evaluateAdvancedPlayground:N,loading:L}=He(),[S,b]=d.useState(!1);d.useEffect(()=>{(s==null?void 0:s.length)===0&&o([Te(m)])},[JSON.stringify(s),JSON.stringify(m)]),d.useEffect(()=>{F>0&&k()},[]);const k=()=>{try{const r=re(),j=ae(),$=le();(async()=>{r&&$&&await J(r||[],j||"*",$)})()}catch(r){T({type:"error",title:`Failed to parse URL parameters: ${M(r)}`})}},re=()=>{let r=null;const j=x.get("environments");return j&&(r=j.split(","),o(r)),r},ae=()=>{let r=null,j=x.get("projects");return j&&(r=j.split(","),c(r)),r},le=()=>{let r=x.get("context");return r&&(r=decodeURI(r),v(r)),r},J=async(r,j,$,U)=>{try{R(void 0);const H=JSON.parse($||"{}"),me=await N({environments:Ae(r),projects:Be(j),context:{appName:"playground",...H}});U&&typeof U=="function"&&U(),f(me)}catch(H){H instanceof Re?R(H.message):H instanceof SyntaxError?T({type:"error",title:`Error parsing context: ${M(H)}`}):T({type:"error",title:M(H)})}},ie=async r=>{r.preventDefault(),b(!0),await J(s,i,u,()=>{ce(),h({environments:s,projects:i,context:u})})},ce=()=>{x.set("context",encodeURI(u||"")),Array.isArray(s)&&s.length>0&&!(s.length===1&&s[0]==="*")?x.set("environments",s.join(",")):x.delete("projects"),Array.isArray(i)&&i.length>0&&!(i.length===1&&i[0]==="*")?x.set("projects",i.join(",")):x.delete("projects"),A(x)},de=p&&!P?"35%":"auto",ue=Ue(P,p);return e(je,{header:e(Ee,{title:"Unleash playground",actions:e(Oe,{})}),disableLoading:!0,bodyClass:"no-padding",children:g(w,{sx:{display:"flex",flexDirection:"column"},children:[e(w,{sx:{background:y.palette.background.elevation2,borderBottomLeftRadius:y.shape.borderRadiusMedium},children:e(we,{elevation:0,sx:{px:4,py:3,mb:4,mt:2,background:y.palette.background.elevation2,transition:"width 0.4s ease",minWidth:"auto",width:de,position:"sticky",top:0},children:e(t,{onSubmit:ie,context:u,setContext:v,availableEnvironments:m,projects:i,environments:s,setProjects:c,setEnvironments:o})})}),g(w,{sx:r=>({width:ue,transition:"width 0.4s ease",padding:r.spacing(4,2)}),children:[e(E,{condition:!!a,show:e(Xe,{severity:"warning",children:a})}),e(E,{condition:L,show:e(Fe,{}),elseShow:g(I,{children:[e(E,{condition:!!p,show:e(Ke,{loading:L,features:p==null?void 0:p.features,input:p==null?void 0:p.input})}),e(E,{condition:!p&&!S,show:e(Le,{})})]})})]})]})})};export{tt as AdvancedPlayground,tt as default};
1
+ import{b as B,d as Y,H as G,r as d,j as e,f as C,s as D,g as Z,B as w,V,t as O,v as _,h as g,C as E,F as I,I as he,w as pe,x as ee,T as z,y as fe,c as te,z as ge,u as ne,a as ye,L as Q,e as be,S as ve,i as W,k as xe,A as Se,l as Ce,m as Pe,n as M,D as Re,P as je,o as Ee,p as we,q as Fe}from"./index-78d048a4.js";import{V as ke,F as se,a as oe,f as K,u as He,r as Te,g as Ae,b as Be,P as Oe,d as Le,c as $e,e as Ue}from"./PlaygroundGuidancePopper-5673aca8.js";import"./StrategyItemContainer-7b356e23.js";import"./Error-6550f020.js";const q=t=>t.charAt(0).toUpperCase()+t.slice(1),Ie=({features:t})=>{const l=B(),n=Y(l.breakpoints.down("sm")),h=Object.keys(t[0].context).map(o=>({Header:q(o),accessor:`context.${o}`,minWidth:160,Cell:G})),m=d.useMemo(()=>[...h,{Header:"Variant",id:"variant",accessor:"variant.name",sortType:"alphanumeric",filterName:"variant",maxWidth:200,Cell:({value:o,row:{original:{variant:i,feature:c,variants:u,isEnabled:v}}})=>e(ke,{variant:i!=null&&i.enabled?o:"",variants:u,feature:c,isEnabled:v})},{id:"isEnabled",Header:"isEnabled",filterName:"isEnabled",accessor:o=>{var i;return o!=null&&o.isEnabled?"true":((i=o==null?void 0:o.strategies)==null?void 0:i.result)==="unknown"?"unknown":"false"},Cell:({row:o})=>e(se,{feature:o.original}),sortType:"playgroundResultState",maxWidth:120,sortInverted:!0},{Header:"",maxWidth:70,id:"info",Cell:({row:o})=>e(oe,{feature:o.original,input:{environment:o.original.environment,context:o.original.context}})}],[]),{headerGroups:y,rows:P,prepareRow:a,setHiddenColumns:R}=C.useTable({columns:m,data:t,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0},C.useGlobalFilter,C.useFlexLayout,C.useSortBy);Z([{condition:n,columns:["variant"]}],R,m);const s=d.useRef(null);return e(w,{ref:s,sx:{overflow:"auto",maxHeight:"800px"},children:e(V,{parentRef:s,rows:P,headerGroups:y,prepareRow:a})})},Ne=O("div",{})(({theme:t})=>({flexGrow:0,..._,justifyContent:"flex-start",margin:t.spacing(0,1.5)})),We=O(w)(({theme:t})=>({display:"flex",flexDirection:"row",gap:t.spacing(1)})),Me=({value:t})=>{const l=B(),[n,h]=d.useState(null),m=s=>h(s.currentTarget),y=()=>h(null),P=!!n,a=(t||[]).filter(s=>s.isEnabled),R=(t||[]).filter(s=>!s.isEnabled);return g(Ne,{children:[g(We,{children:[e(E,{condition:a.length>0,show:e(K,{enabled:!0,label:`${a.length}`,showIcon:!0})}),e(E,{condition:R.length>0,show:e(K,{enabled:!1,label:`${R.length}`,showIcon:!0})})]}),g(I,{children:[e(he,{onClick:m,children:e(pe,{})}),g(ee,{open:P,id:`${t}-result-details`,PaperProps:{sx:{borderRadius:`${l.shape.borderRadiusLarge}px`,padding:l.spacing(3)}},onClose:y,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:-320},children:[e(z,{variant:"subtitle2",sx:{mb:3},children:t[0].environment}),e(Ie,{features:t})]})]})]})},Ge=({features:t})=>{const l=Object.keys(t),n=t[l[0]],h=n[0].context,m=d.useMemo(()=>n.map((c,u)=>({...Object.fromEntries(l.map(v=>[v,t[v][u]]))})),[JSON.stringify(t)]),y=Object.keys(h).map(c=>({Header:q(c),accessor:`${l[0]}.context.${c}`,minWidth:160,Cell:G})),P=l.map(c=>({Header:c,accessor:u=>{var v,p,f;return(v=u[c])!=null&&v.isEnabled?"true":((f=(p=u[c])==null?void 0:p.strategies)==null?void 0:f.result)==="unknown"?"unknown":"false"},Cell:({row:u})=>g(w,{sx:{display:"flex"},children:[e(se,{feature:u.original[c]}),e(oe,{feature:u.original[c],input:{environment:u.original[c].environment,context:u.original[c].context}})]}),sortType:"playgroundResultState",maxWidth:140})),a=d.useMemo(()=>[...y,...P],[]),{headerGroups:R,rows:s,prepareRow:o}=C.useTable({columns:a,data:m,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0},C.useGlobalFilter,C.useFlexLayout,C.useSortBy),i=d.useRef(null);return e(w,{ref:i,sx:{overflow:"auto",maxHeight:"800px"},children:e(V,{parentRef:i,rows:s,headerGroups:R,prepareRow:o})})},De=O("div",{})(({theme:t})=>({flexGrow:0,..._,justifyContent:"flex-start",margin:t.spacing(0,1.5)})),Ve=O(fe)(({theme:t})=>({textAlign:"left",textDecorationStyle:"dotted",textUnderlineOffset:t.spacing(.75),color:t.palette.neutral.dark})),ze=({value:t})=>{const l=B(),[n,h]=d.useState(null),m=a=>h(a.currentTarget),y=()=>h(null);return e(De,{children:g(I,{children:[e(Ve,{variant:"body2",onClick:m,children:"Preview diff"}),g(ee,{open:!!n,id:`${t}-result-details`,PaperProps:{sx:{borderRadius:`${l.shape.borderRadiusLarge}px`,padding:l.spacing(3)}},onClose:y,anchorEl:n,anchorOrigin:{vertical:"bottom",horizontal:-320},children:[e(z,{variant:"subtitle2",sx:{mb:3},children:"Environments diff"}),e(Ge,{features:t})]})]})})},qe=t=>t.reduce((l,n)=>l+Object.values(n.environments).flatMap(h=>Object.keys(h)).length,0),Je={id:"name"},{value:X,setValue:Qe}=te("AdvancedPlaygroundResultsTable:v1",Je),Ke=({features:t,input:l,loading:n})=>{const{trackEvent:h}=ge();t&&h("playground",{props:{eventType:"number-of-combinations",count:qe(t)}});const[m,y]=ne(),P=ye(n),[a,R]=d.useState(m.get("search")||""),s=B(),o=Y(s.breakpoints.down("md")),i=t&&t.length>0?Object.keys(t[0].environments).length:0,c=d.useMemo(()=>{var S;return[{Header:"Name",accessor:"name",searchable:!0,minWidth:160,Cell:({value:b,row:{original:k}})=>e(Q,{title:b,to:`/projects/${k==null?void 0:k.projectId}/features/${b}`})},{Header:"Project ID",accessor:"projectId",sortType:"alphanumeric",filterName:"projectId",searchable:!0,minWidth:150,Cell:({value:b})=>e(Q,{title:b,to:`/projects/${b}`})},...((S=l==null?void 0:l.environments)==null?void 0:S.map(b=>({Header:n?()=>"":q(b),maxWidth:140,id:`environments.${b}`,align:"flex-start",Cell:({row:k})=>e(Me,{value:k.original.environments[b]})})))||[],...i>1?[{Header:"Diff",minWidth:150,id:"diff",align:"left",Cell:({row:b})=>e(ze,{value:b.original.environments})}]:[]]},[l]),{data:u,getSearchText:v,getSearchContext:p}=be(c,a,t||[]),f=d.useMemo(()=>n?Array(5).fill({name:"Feature name",projectId:"Feature Project",environments:{name:"Feature Environments",variants:[]},enabled:!0}):u,[u,n]),[T]=d.useState(()=>({sortBy:[{id:m.get("sort")||X.id,desc:m.has("order")?m.get("order")==="desc":X.desc}]})),{headerGroups:x,rows:A,state:{sortBy:F},prepareRow:N,setHiddenColumns:L}=C.useTable({initialState:T,columns:c,data:f,sortTypes:D,autoResetGlobalFilter:!1,autoResetHiddenColumns:!1,autoResetSortBy:!1,disableSortRemove:!0,disableMultiSort:!0,defaultColumn:{Cell:G}},C.useGlobalFilter,C.useFlexLayout,C.useSortBy);return Z([{condition:o,columns:["projectId"]}],L,c),d.useEffect(()=>{if(n)return;const S=Object.fromEntries(m);S.sort=F[0].id,F[0].desc?S.order="desc":S.order&&delete S.order,a?S.search=a:delete S.search,y(S,{replace:!0}),Qe({id:F[0].id,desc:F[0].desc||!1})},[n,F,a]),g(I,{children:[g(w,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[e(z,{variant:"subtitle1",sx:{ml:1},children:t!==void 0&&!n?`Results (${A.length<f.length?`${A.length} of ${f.length}`:f.length})`:"Results"}),e(ve,{initialValue:a,onChange:R,hasFilters:!0,getSearchContext:p,disabled:n,containerStyles:{marginLeft:"1rem",maxWidth:"400px"}})]}),e(E,{condition:!n&&!f,show:()=>e(W,{children:f===void 0?"None of the feature toggles were evaluated yet.":"No results found."}),elseShow:()=>g(w,{ref:P,sx:{overflow:"auto"},children:[e(xe,{value:v(a),children:e(V,{rows:A,headerGroups:x,prepareRow:N})}),e(E,{condition:f.length===0&&(a==null?void 0:a.length)>0,show:g(W,{children:["No feature toggles found matching “",a,"”"]})}),e(E,{condition:f&&f.length===0&&!a,show:e(W,{children:"No features toggles to display"})})]})})]})},Xe=O(Se)(({theme:t})=>({marginBottom:t.spacing(3)})),tt=({FormComponent:t=$e})=>{const l={projects:[],environments:[]},{value:n,setValue:h}=te("AdvancedPlayground:v1",l),{environments:m}=Ce(),y=B(),P=!0,[a,R]=d.useState(),[s,o]=d.useState(n.environments),[i,c]=d.useState(n.projects),[u,v]=d.useState(n.context),[p,f]=d.useState(),{setToastData:T}=Pe(),[x,A]=ne(),F=Array.from(x.entries()).length,{evaluateAdvancedPlayground:N,loading:L}=He(),[S,b]=d.useState(!1);d.useEffect(()=>{(s==null?void 0:s.length)===0&&o([Te(m)])},[JSON.stringify(s),JSON.stringify(m)]),d.useEffect(()=>{F>0&&k()},[]);const k=()=>{try{const r=re(),j=ae(),$=le();(async()=>{r&&$&&await J(r||[],j||"*",$)})()}catch(r){T({type:"error",title:`Failed to parse URL parameters: ${M(r)}`})}},re=()=>{let r=null;const j=x.get("environments");return j&&(r=j.split(","),o(r)),r},ae=()=>{let r=null,j=x.get("projects");return j&&(r=j.split(","),c(r)),r},le=()=>{let r=x.get("context");return r&&(r=decodeURI(r),v(r)),r},J=async(r,j,$,U)=>{try{R(void 0);const H=JSON.parse($||"{}"),me=await N({environments:Ae(r),projects:Be(j),context:{appName:"playground",...H}});U&&typeof U=="function"&&U(),f(me)}catch(H){H instanceof Re?R(H.message):H instanceof SyntaxError?T({type:"error",title:`Error parsing context: ${M(H)}`}):T({type:"error",title:M(H)})}},ie=async r=>{r.preventDefault(),b(!0),await J(s,i,u,()=>{ce(),h({environments:s,projects:i,context:u})})},ce=()=>{x.set("context",encodeURI(u||"")),Array.isArray(s)&&s.length>0&&!(s.length===1&&s[0]==="*")?x.set("environments",s.join(",")):x.delete("projects"),Array.isArray(i)&&i.length>0&&!(i.length===1&&i[0]==="*")?x.set("projects",i.join(",")):x.delete("projects"),A(x)},de=p&&!P?"35%":"auto",ue=Ue(P,p);return e(je,{header:e(Ee,{title:"Unleash playground",actions:e(Oe,{})}),disableLoading:!0,bodyClass:"no-padding",children:g(w,{sx:{display:"flex",flexDirection:"column"},children:[e(w,{sx:{background:y.palette.background.elevation2,borderBottomLeftRadius:y.shape.borderRadiusMedium},children:e(we,{elevation:0,sx:{px:4,py:3,mb:4,mt:2,background:y.palette.background.elevation2,transition:"width 0.4s ease",minWidth:"auto",width:de,position:"sticky",top:0},children:e(t,{onSubmit:ie,context:u,setContext:v,availableEnvironments:m,projects:i,environments:s,setProjects:c,setEnvironments:o})})}),g(w,{sx:r=>({width:ue,transition:"width 0.4s ease",padding:r.spacing(4,2)}),children:[e(E,{condition:!!a,show:e(Xe,{severity:"warning",children:a})}),e(E,{condition:L,show:e(Fe,{}),elseShow:g(I,{children:[e(E,{condition:!!p,show:e(Ke,{loading:L,features:p==null?void 0:p.features,input:p==null?void 0:p.input})}),e(E,{condition:!p&&!S,show:e(Le,{})})]})})]})]})})};export{tt as AdvancedPlayground,tt as default};
@@ -1,4 +1,4 @@
1
- import{m as k,ar as R,a6 as w,as as O,z as U,at as D,au as J,j as e,av as b,aw as x,ax as B,ay as F,az as L,n as z,aA as K}from"./index-0a56292a.js";const $="CREATE_PROJECT_BTN",H=()=>{const{setToastData:n,setToastApiError:i}=k(),{refetchUser:d}=R(),{uiConfig:l}=w(),t=O(),{trackEvent:u}=U(),{projectId:a,projectName:j,projectMode:p,projectDesc:m,setProjectId:P,setProjectName:C,setProjectDesc:T,getProjectPayload:o,clearErrors:r,validateProjectId:s,validateName:h,setProjectStickiness:E,setProjectMode:f,projectStickiness:c,errors:g}=D(),{createProject:A,loading:_}=J();return e(b,{loading:_,title:"Create project",description:"Projects allows you to group feature toggles together in the management UI.",documentationLink:"https://docs.getunleash.io/reference/projects",documentationLinkLabel:"Projects documentation",formatApiCode:()=>`curl --location --request POST '${l.unleashUrl}/api/admin/projects' \\
1
+ import{m as k,ar as R,a6 as w,as as O,z as U,at as D,au as J,j as e,av as b,aw as x,ax as B,ay as F,az as L,n as z,aA as K}from"./index-78d048a4.js";const $="CREATE_PROJECT_BTN",H=()=>{const{setToastData:n,setToastApiError:i}=k(),{refetchUser:d}=R(),{uiConfig:l}=w(),t=O(),{trackEvent:u}=U(),{projectId:a,projectName:j,projectMode:p,projectDesc:m,setProjectId:P,setProjectName:C,setProjectDesc:T,getProjectPayload:o,clearErrors:r,validateProjectId:s,validateName:h,setProjectStickiness:E,setProjectMode:f,projectStickiness:c,errors:g}=D(),{createProject:A,loading:_}=J();return e(b,{loading:_,title:"Create project",description:"Projects allows you to group feature toggles together in the management UI.",documentationLink:"https://docs.getunleash.io/reference/projects",documentationLinkLabel:"Projects documentation",formatApiCode:()=>`curl --location --request POST '${l.unleashUrl}/api/admin/projects' \\
2
2
  --header 'Authorization: INSERT_API_KEY' \\
3
3
  --header 'Content-Type: application/json' \\
4
4
  --data-raw '${JSON.stringify(o(),void 0,2)}'`,children:e(x,{errors:g,handleSubmit:async N=>{N.preventDefault(),r();const v=h(),y=await s();if(v&&y){const S=o();try{await A(S),d(),t(`/projects/${a}`),n({title:"Project created",text:"Now you can add toggles to this project",confetti:!0,type:"success"}),c!==L&&u("project_stickiness_set")}catch(I){i(z(I))}}},handleCancel:()=>{t(K)},projectId:a,setProjectId:P,projectName:j,projectMode:p,projectStickiness:c,setProjectStickiness:E,setProjectMode:f,setProjectName:C,projectDesc:m,setProjectDesc:T,mode:"Create",clearErrors:r,validateProjectId:s,children:e(B,{name:"project",permission:F,"data-testid":$})})})};export{H as default};
@@ -1 +1 @@
1
- import{E as r,j as o}from"./index-0a56292a.js";const a=r(o("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");export{a as E};
1
+ import{E as r,j as o}from"./index-78d048a4.js";const a=r(o("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"}),"Error");export{a as E};
@@ -1,10 +1,10 @@
1
- import{E as ie,j as r,b as ce,aI as Y,a_ as Z,h as C,bb as W,C as L,A as we,T as O,ca as Ae,t as U,fx as xe,bh as Re,fy as X,as as J,a6 as ee,fz as ke,fA as Fe,fB as De,fC as Pe,bv as G,fD as $e,ai as Oe,fE as Be,fF as N,cl as le,r as w,au as ue,m as z,fG as de,z as ge,fH as he,av as fe,a$ as pe,br as qe,fI as _e,n as B,dp as Le,b0 as Ue,aZ as me,aJ as Q,b2 as ye,fJ as je,fK as Ve,fL as Ie,fM as ze,fN as Ye,fO as We,b3 as be,bc as He,fP as Me,F as K,aN as ne,B as Ge,v as Je,bR as te,fQ as Ke,ej as Ne,fR as Qe,fS as Ze,fT as Xe,be as et,bf as tt,bg as at,am as Se,al as ve,bU as st,cc as nt,df as rt,$ as ot,fU as it,de as ct,a8 as lt,bP as ut,aU as dt,aS as gt,aT as ht}from"./index-0a56292a.js";const ft=ie(r("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"}),"Cloud"),zt=ie(r("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"}),"WatchLater"),Yt=({enabled:e,className:s})=>{const t=ce(),i=e?"Environment enabled":"Environment disabled",a={backgroundColor:e?t.palette.primary.light:t.palette.neutral.border,borderRadius:"50%",width:"28px",height:"28px",minWidth:"28px",display:"flex",alignItems:"center",justifyContent:"center",marginRight:t.spacing(1)},n={fill:t.palette.common.white,width:"16px",height:"16px"};return r("div",{style:a,className:s,children:r(ft,{style:n,titleAccess:i})})},pt=({isOpen:e,onConfirm:s,onClose:t,showBanner:i,environment:a,messageComponent:n})=>{const o=Y("projectId"),{data:d}=Z(o),{changeRequestInReviewOrApproved:f,alert:h}=Ae(d),l=f(a||"");return C(W,{open:e,primaryButtonText:l?"Add to existing change request":"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:s,onClose:t,title:"Request changes",fullWidth:!0,children:[r(L,{condition:l,show:h}),r(L,{condition:!!i,show:C(we,{severity:"info",sx:{mb:2},children:["Change requests feature is enabled for ",a,". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})}),r(O,{variant:"body2",color:"text.secondary",children:"Your suggestion:"}),n]})},mt=(e,s)=>{const t={};return s.parameters.forEach(i=>{t[i.name]=yt(e,i)}),{name:s.name,constraints:[],parameters:t}},yt=(e,s)=>s.name==="rollout"||s.name==="percentage"||s.type==="percentage"?"50":s.name==="stickiness"?"":s.name==="groupId"?e:s.type==="boolean"?"false":"",bt=U("form")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),re=U("hr")(({theme:e})=>({width:"100%",height:"1px",margin:e.spacing(2,0),border:"none",background:e.palette.background.elevation2})),St=U("div")(({theme:e})=>({display:"flex",justifyContent:"end",gap:e.spacing(2),paddingBottom:e.spacing(10)})),vt=({projectId:e,environmentId:s,permission:t,onSubmit:i,onCancel:a,loading:n,strategy:o,setStrategy:d,segments:f,setSegments:h,errors:l})=>{const S=xe(o.constraints),c=Re(t,e,s),{strategyDefinition:u}=X(o==null?void 0:o.name),m=J(),{uiConfig:g,error:v,loading:x}=ee();if(v)throw v;if(x||!u)return null;const D=p=>u.parameters.find(E=>E.name===p),A=(p,E)=>{const F=D(p);if(p!=="groupId"){const T=Be(F,E);return T?(l.setFormError(p,T),!1):(l.removeFormError(p),!0)}return!0},y=()=>u.parameters.map(p=>p.name).map(p=>{var E;return A(p,(E=o.parameters)==null?void 0:E[p])}).every(Boolean),q=()=>{m(`/projects/${e}/settings/default-strategy`)};return C(bt,{onSubmit:async p=>{if(p.preventDefault(),y())i();else return},children:[r(ke,{title:o.title||"",setTitle:p=>{d(E=>({...E,title:p}))}}),r(L,{condition:!!g.flags.SE,show:r(Fe,{segments:f,setSegments:h,projectId:e})}),r(De,{projectId:e,environmentId:s,strategy:o,setStrategy:d}),r(re,{}),r(Pe,{strategy:o,strategyDefinition:u,setStrategy:d,validateParameter:A,errors:l,hasAccess:c}),r(re,{}),C(St,{children:[r(G,{permission:t,projectId:e,environmentId:s,variant:"contained",color:"primary",type:"submit",disabled:n||!S||l.hasFormErrors(),"data-testid":$e,children:"Save strategy"}),r(Oe,{type:"button",color:"primary",onClick:a||q,disabled:n,children:"Cancel"})]})]})},Te={name:"flexibleRollout",constraints:[],parameters:{rollout:"100",stickiness:"default",groupId:""}},Wt=()=>{var F;const e=Y("projectId"),s=N("environmentId"),{project:t,refetch:i}=le(e),a=(F=t.environments.find(T=>T.environment===s))==null?void 0:F.defaultStrategy,[n,o]=w.useState(a||Te),[d,f]=w.useState([]),{updateDefaultStrategy:h,loading:l}=ue(),{strategyDefinition:S}=X(n==null?void 0:n.name),{setToastData:c,setToastApiError:u}=z(),m=de(),{uiConfig:g}=ee(),{unleashUrl:v}=g,x=J(),{trackEvent:D}=ge(),{segments:A,refetchSegments:y}=he();w.useEffect(()=>{if(A&&(a!=null&&a.segments)){const T=[];for(const P of a==null?void 0:a.segments)T.push(...A.filter(j=>j.id===P));f(T)}},[JSON.stringify(A),JSON.stringify(a==null?void 0:a.segments)]);const q=g!=null&&g.flags.SE?d:[],k=Tt(n,q),p=async T=>{await h(e,s,T),D("default_strategy",{props:{action:"edit",hasTitle:!!T.title}}),await y(),c({title:"Default Strategy updated",type:"success",confetti:!0})},E=async()=>{const T=`/projects/${e}/settings/default-strategy`;try{await p(k),await i(),x(T)}catch(P){u(B(P))}};return!S||!n?null:r(fe,{modal:!0,title:pe((n==null?void 0:n.name)??""),description:Et,documentationLink:wt,documentationLinkLabel:At,formatApiCode:()=>Ct(e,s,k,S,v),children:r(vt,{projectId:e,strategy:n,setStrategy:o,segments:d,setSegments:f,environmentId:s,onSubmit:E,loading:l,permission:qe,errors:m,isChangeRequest:!1})})},Tt=(e,s)=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:e.parameters??{},segments:s.map(t=>t.id),disabled:e.disabled??!1}),Ct=(e,s,t,i,a)=>{if(!a)return"";const n={...t,parameters:_e(t.parameters??{},i)},o=`${a}/api/admin/projects/${e}/environments/${s}/default-strategy}`,d=JSON.stringify(n,void 0,2);return`curl --location --request PUT '${o}' \\
1
+ import{E as ie,j as r,b as ce,aI as Y,a_ as Z,h as C,bb as W,C as U,A as we,T as O,ca as Ae,t as j,fx as xe,bh as Re,fy as X,as as J,a6 as ee,fz as ke,fA as Fe,fB as De,fC as Pe,bv as G,fD as $e,ai as Oe,fE as Be,fF as N,cl as le,r as w,au as ue,m as z,fG as de,z as ge,fH as he,av as fe,a$ as pe,br as qe,fI as _e,n as B,dp as Le,b0 as Ue,aZ as me,aJ as Q,b2 as ye,fJ as je,fK as Ve,fL as Ie,fM as ze,fN as Ye,fO as We,b3 as be,bc as He,fP as Me,F as K,aN as ne,B as Ge,v as Je,bR as te,fQ as Ke,ej as Ne,fR as Qe,fS as Ze,fT as Xe,be as et,bf as tt,bg as at,am as Se,al as ve,bU as st,cc as nt,df as rt,$ as ot,fU as it,de as ct,a8 as lt,bP as ut,aU as dt,aS as gt,aT as ht}from"./index-78d048a4.js";const ft=ie(r("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"}),"Cloud"),zt=ie(r("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"}),"WatchLater"),Yt=({enabled:e,className:s})=>{const t=ce(),i=e?"Environment enabled":"Environment disabled",a={backgroundColor:e?t.palette.primary.light:t.palette.neutral.border,borderRadius:"50%",width:"28px",height:"28px",minWidth:"28px",display:"flex",alignItems:"center",justifyContent:"center",marginRight:t.spacing(1)},n={fill:t.palette.common.white,width:"16px",height:"16px"};return r("div",{style:a,className:s,children:r(ft,{style:n,titleAccess:i})})},pt=({isOpen:e,onConfirm:s,onClose:t,showBanner:i,environment:a,messageComponent:n})=>{const o=Y("projectId"),{data:d}=Z(o),{changeRequestInReviewOrApproved:f,alert:h}=Ae(d),l=f(a||"");return C(W,{open:e,primaryButtonText:l?"Add to existing change request":"Add suggestion to draft",secondaryButtonText:"Cancel",onClick:s,onClose:t,title:"Request changes",fullWidth:!0,children:[r(U,{condition:l,show:h}),r(U,{condition:!!i,show:C(we,{severity:"info",sx:{mb:2},children:["Change requests feature is enabled for ",a,". Your changes need to be approved before they will be live. All the changes you do now will be added into a draft that you can submit for review."]})}),r(O,{variant:"body2",color:"text.secondary",children:"Your suggestion:"}),n]})},mt=(e,s)=>{const t={};return s.parameters.forEach(i=>{t[i.name]=yt(e,i)}),{name:s.name,constraints:[],parameters:t}},yt=(e,s)=>s.name==="rollout"||s.name==="percentage"||s.type==="percentage"?"50":s.name==="stickiness"?"":s.name==="groupId"?e:s.type==="boolean"?"false":"",bt=j("form")(({theme:e})=>({display:"grid",gap:e.spacing(2)})),re=j("hr")(({theme:e})=>({width:"100%",height:"1px",margin:e.spacing(2,0),border:"none",background:e.palette.background.elevation2})),St=j("div")(({theme:e})=>({display:"flex",justifyContent:"end",gap:e.spacing(2),paddingBottom:e.spacing(10)})),vt=({projectId:e,environmentId:s,permission:t,onSubmit:i,onCancel:a,loading:n,strategy:o,setStrategy:d,segments:f,setSegments:h,errors:l})=>{const S=xe(o.constraints),c=Re(t,e,s),{strategyDefinition:u}=X(o==null?void 0:o.name),m=J(),{uiConfig:g,error:v,loading:x}=ee();if(v)throw v;if(x||!u)return null;const D=p=>u.parameters.find(E=>E.name===p),A=(p,E)=>{const F=D(p);if(p!=="groupId"){const T=Be(F,E);return T?(l.setFormError(p,T),!1):(l.removeFormError(p),!0)}return!0},y=()=>u.parameters.map(p=>p.name).map(p=>{var E;return A(p,(E=o.parameters)==null?void 0:E[p])}).every(Boolean),q=()=>{m(`/projects/${e}/settings/default-strategy`)};return C(bt,{onSubmit:async p=>{if(p.preventDefault(),y())i();else return},children:[r(ke,{title:o.title||"",setTitle:p=>{d(E=>({...E,title:p}))}}),r(U,{condition:!!g.flags.SE,show:r(Fe,{segments:f,setSegments:h,projectId:e})}),r(De,{projectId:e,environmentId:s,strategy:o,setStrategy:d}),r(re,{}),r(Pe,{strategy:o,strategyDefinition:u,setStrategy:d,validateParameter:A,errors:l,hasAccess:c}),r(re,{}),C(St,{children:[r(G,{permission:t,projectId:e,environmentId:s,variant:"contained",color:"primary",type:"submit",disabled:n||!S||l.hasFormErrors(),"data-testid":$e,children:"Save strategy"}),r(Oe,{type:"button",color:"primary",onClick:a||q,disabled:n,children:"Cancel"})]})]})},Te={name:"flexibleRollout",constraints:[],parameters:{rollout:"100",stickiness:"default",groupId:""}},Wt=()=>{var F;const e=Y("projectId"),s=N("environmentId"),{project:t,refetch:i}=le(e),a=(F=t.environments.find(T=>T.environment===s))==null?void 0:F.defaultStrategy,[n,o]=w.useState(a||Te),[d,f]=w.useState([]),{updateDefaultStrategy:h,loading:l}=ue(),{strategyDefinition:S}=X(n==null?void 0:n.name),{setToastData:c,setToastApiError:u}=z(),m=de(),{uiConfig:g}=ee(),{unleashUrl:v}=g,x=J(),{trackEvent:D}=ge(),{segments:A,refetchSegments:y}=he();w.useEffect(()=>{if(A&&(a!=null&&a.segments)){const T=[];for(const P of a==null?void 0:a.segments)T.push(...A.filter(V=>V.id===P));f(T)}},[JSON.stringify(A),JSON.stringify(a==null?void 0:a.segments)]);const q=g!=null&&g.flags.SE?d:[],k=Tt(n,q),p=async T=>{await h(e,s,T),D("default_strategy",{props:{action:"edit",hasTitle:!!T.title}}),await y(),c({title:"Default Strategy updated",type:"success",confetti:!0})},E=async()=>{const T=`/projects/${e}/settings/default-strategy`;try{await p(k),await i(),x(T)}catch(P){u(B(P))}};return!S||!n?null:r(fe,{modal:!0,title:pe((n==null?void 0:n.name)??""),description:Et,documentationLink:wt,documentationLinkLabel:At,formatApiCode:()=>Ct(e,s,k,S,v),children:r(vt,{projectId:e,strategy:n,setStrategy:o,segments:d,setSegments:f,environmentId:s,onSubmit:E,loading:l,permission:qe,errors:m,isChangeRequest:!1})})},Tt=(e,s)=>({name:e.name,title:e.title,constraints:e.constraints??[],parameters:e.parameters??{},segments:s.map(t=>t.id),disabled:e.disabled??!1}),Ct=(e,s,t,i,a)=>{if(!a)return"";const n={...t,parameters:_e(t.parameters??{},i)},o=`${a}/api/admin/projects/${e}/environments/${s}/default-strategy}`,d=JSON.stringify(n,void 0,2);return`curl --location --request PUT '${o}' \\
2
2
  --header 'Authorization: INSERT_API_KEY' \\
3
3
  --header 'Content-Type: application/json' \\
4
4
  --data-raw '${d}'`},Et=`
5
5
  An activation strategy will only run when a feature toggle is enabled and provides a way to control who will get access to the feature.
6
6
  If any of a feature toggle's activation strategies returns true, the user will get access.
7
- `,wt="https://docs.getunleash.io/reference/activation-strategies",At="Default strategy documentation",Ht=()=>{var se;const e=Y("projectId"),s=Y("featureId"),t=N("environmentId"),i=N("strategyName"),a=JSON.parse(Le().get("defaultStrategy")||"false"),{project:n}=le(e),o=(se=n.environments.find(R=>R.environment===t))==null?void 0:se.defaultStrategy,{segments:d}=he(),f=(d||[]).filter(R=>{var I;return(I=o==null?void 0:o.segments)==null?void 0:I.includes(R.id)}),[h,l]=w.useState({}),[S,c]=w.useState(a?f:[]),{strategyDefinition:u}=X(i),m=de(),{addStrategyToFeature:g,loading:v}=Ue(),{addChange:x}=me(),{setToastData:D,setToastApiError:A}=z(),{uiConfig:y}=ee(),{unleashUrl:q}=y,k=J(),{feature:p,refetchFeature:E}=Q(e,s),F=w.useRef(p),{isChangeRequestConfigured:T}=ye(e),{refetch:P}=Z(e),{trackEvent:j}=ge(),{data:V,staleDataNotification:b,forceRefreshCache:$}=je({unleashGetter:Q,params:[e,s],dataKey:"feature",refetchFunctionKey:"refetchFeature",options:{}},p,{afterSubmitAction:E},Me);w.useEffect(()=>{F.current.name===""&&p.name&&($(p),F.current=p)},[p.name]),w.useEffect(()=>{var R;if(a){const I=o||Te;((R=I.parameters)==null?void 0:R.groupId)===""&&s&&(I.parameters.groupId=s),l(I)}else u&&l(mt(s,u))},[s,JSON.stringify(u),a]);const H=async R=>{await g(e,s,t,R),D({title:"Strategy created",type:"success",confetti:!0})},M=async R=>{await x(e,t,{action:"addStrategy",feature:s,payload:R}),D({title:"Strategy added to draft",type:"success",confetti:!0}),P()},_=Ve(h,S),Ee=async()=>{j("strategyTitle",{props:{hasTitle:!!h.title,on:"create"}});try{T(t)?await M(_):await H(_),E(),k(He(e,s))}catch(R){A(B(R))}};return!V||!V.project?null:C(fe,{modal:!0,title:pe(i),description:Ie,documentationLink:ze,documentationLinkLabel:Ye,formatApiCode:()=>Rt(e,s,t,_,q),children:[r(We,{projectId:e,feature:V,strategy:h,setStrategy:l,segments:S,setSegments:c,environmentId:t,onSubmit:Ee,loading:v,permission:be,errors:m,isChangeRequest:T(t)}),b]})},xt=(e,s,t,i,a=!1)=>{const n=new URLSearchParams({environmentId:t,strategyName:i,defaultStrategy:String(a)});return`/projects/${e}/features/${s}/strategies/create?${n}`},Rt=(e,s,t,i,a)=>{if(!a)return"";const n=`${a}/api/admin/projects/${e}/features/${s}/environments/${t}/strategies`,o=JSON.stringify(i,void 0,2);return`curl --location --request POST '${n}' \\
7
+ `,wt="https://docs.getunleash.io/reference/activation-strategies",At="Default strategy documentation",Ht=()=>{var se;const e=Y("projectId"),s=Y("featureId"),t=N("environmentId"),i=N("strategyName"),a=JSON.parse(Le().get("defaultStrategy")||"false"),{project:n}=le(e),o=(se=n.environments.find(R=>R.environment===t))==null?void 0:se.defaultStrategy,{segments:d}=he(),f=(d||[]).filter(R=>{var L;return(L=o==null?void 0:o.segments)==null?void 0:L.includes(R.id)}),[h,l]=w.useState({}),[S,c]=w.useState(a?f:[]),{strategyDefinition:u}=X(i),m=de(),{addStrategyToFeature:g,loading:v}=Ue(),{addChange:x}=me(),{setToastData:D,setToastApiError:A}=z(),{uiConfig:y}=ee(),{unleashUrl:q}=y,k=J(),{feature:p,refetchFeature:E}=Q(e,s),F=w.useRef(p),{isChangeRequestConfigured:T}=ye(e),{refetch:P}=Z(e),{trackEvent:V}=ge(),{data:I,staleDataNotification:b,forceRefreshCache:$}=je({unleashGetter:Q,params:[e,s],dataKey:"feature",refetchFunctionKey:"refetchFeature",options:{}},p,{afterSubmitAction:E},Me);w.useEffect(()=>{F.current.name===""&&p.name&&($(p),F.current=p)},[p.name]),w.useEffect(()=>{var R;if(a){const L=o||Te;((R=L.parameters)==null?void 0:R.groupId)===""&&s?l({...L,parameters:{...L.parameters,groupId:s}}):l(L)}else u&&l(mt(s,u))},[s,JSON.stringify(u),a]);const H=async R=>{await g(e,s,t,R),D({title:"Strategy created",type:"success",confetti:!0})},M=async R=>{await x(e,t,{action:"addStrategy",feature:s,payload:R}),D({title:"Strategy added to draft",type:"success",confetti:!0}),P()},_=Ve(h,S),Ee=async()=>{V("strategyTitle",{props:{hasTitle:!!h.title,on:"create"}});try{T(t)?await M(_):await H(_),E(),k(He(e,s))}catch(R){A(B(R))}};return!I||!I.project?null:C(fe,{modal:!0,title:pe(i),description:Ie,documentationLink:ze,documentationLinkLabel:Ye,formatApiCode:()=>Rt(e,s,t,_,q),children:[r(We,{projectId:e,feature:I,strategy:h,setStrategy:l,segments:S,setSegments:c,environmentId:t,onSubmit:Ee,loading:v,permission:be,errors:m,isChangeRequest:T(t)}),b]})},xt=(e,s,t,i,a=!1)=>{const n=new URLSearchParams({environmentId:t,strategyName:i,defaultStrategy:String(a)});return`/projects/${e}/features/${s}/strategies/create?${n}`},Rt=(e,s,t,i,a)=>{if(!a)return"";const n=`${a}/api/admin/projects/${e}/features/${s}/environments/${t}/strategies`,o=JSON.stringify(i,void 0,2);return`curl --location --request POST '${n}' \\
8
8
  --header 'Authorization: INSERT_API_KEY' \\
9
9
  --header 'Content-Type: application/json' \\
10
- --data-raw '${o}'`},oe=U("p")(({theme:e})=>({marginBottom:e.spacing(.5),fontSize:e.fontSizes.bodySize})),Mt=({open:e,environmentName:s,featureId:t,projectId:i,onClose:a})=>{const n=J(),o=xt(i,t,s,"default");return C(W,{open:e,maxWidth:"sm",onClose:()=>a(),title:"You need to add a strategy to your toggle",primaryButtonText:"Take me directly to add strategy",permissionButton:r(G,{type:"button",permission:be,projectId:i,environmentId:s,onClick:()=>{a(),n(o)},children:"Take me directly to add strategy"}),secondaryButtonText:"Cancel",children:[r(oe,{children:"Before you can enable the toggle in the environment, you need to add an activation strategy."}),r(oe,{children:"You can add the activation strategy by selecting the toggle, open the environment accordion and add the activation strategy."})]})},kt="You can not enable the environment before it has strategies",Ft=e=>{const{setToastData:s,setToastApiError:t}=z(),{addChange:i}=me(),{refetch:a}=Z(e),[n,o]=w.useState({isOpen:!1}),d=w.useCallback((l,S,c,u)=>{o({featureName:l,environment:S,enabled:c,shouldActivateDisabledStrategies:u,isOpen:!0})},[]),f=w.useCallback(()=>{o(l=>({...l,isOpen:!1}))},[]),h=w.useCallback(async()=>{try{await i(e,n.environment,{feature:n.featureName,action:"updateEnabled",payload:{enabled:!!n.enabled,shouldActivateDisabledStrategies:!!n.shouldActivateDisabledStrategies}}),a(),o(l=>({...l,isOpen:!1})),s({type:"success",title:"Changes added to the draft!"})}catch(l){t(B(l)),o(S=>({...S,isOpen:!1}))}},[i]);return{onChangeRequestToggle:d,onChangeRequestToggleClose:f,onChangeRequestToggleConfirm:h,changeRequestDialogDetails:n}},Dt=({isOpen:e,onAddDefaultStrategy:s,onActivateDisabledStrategies:t,onClose:i,environment:a,disabledStrategiesCount:n=0})=>{const o=Y("projectId");return C(W,{open:e,secondaryButtonText:"Cancel",permissionButton:C(K,{children:[r(G,{type:"button",permission:ne,projectId:o,environmentId:a,onClick:s,children:"Add default strategy"}),r(G,{type:"button",variant:"text",permission:ne,projectId:o,environmentId:a,onClick:t,children:"Enable all strategies"})]}),onClose:i,title:"Enable feature toggle",fullWidth:!0,children:[C(O,{variant:"body1",color:"text.primary",sx:{mb:d=>d.spacing(2)},children:["The feature toggle has ",n," disabled",n===1?" strategy":" strategies","."]}),r(O,{variant:"body1",color:"text.primary",children:"You can choose to enable all the disabled strategies or you can add the default strategy to enable this feature toggle."})]})},Pt=({enabled:e,featureName:s,environment:t})=>C(O,{"data-testid":"update-enabled-message",children:[r("strong",{children:e?"Enable":"Disable"})," feature toggle"," ",r("strong",{children:s})," in ",r("strong",{children:t})]}),$t=U(Ge)(()=>({mx:"auto",...Je})),Gt=({projectId:e,featureId:s,environmentName:t,value:i,onToggle:a,onError:n})=>{var V;const{toggleFeatureEnvironmentOn:o,toggleFeatureEnvironmentOff:d}=te(),{setToastData:f,setToastApiError:h}=z(),{isChangeRequestConfigured:l}=ye(e),{onChangeRequestToggle:S,onChangeRequestToggleClose:c,onChangeRequestToggleConfirm:u,changeRequestDialogDetails:m}=Ft(e),[g,v,x]=Ke(i),[D,A]=w.useState(!1),{feature:y}=Q(e,s),q=((V=y==null?void 0:y.environments.find(b=>b.name===t))==null?void 0:V.strategies.filter(b=>b.disabled).length)??0,k=async(b=!1)=>{try{v(!g),await o(e,y.name,t,b),f({type:"success",title:`Available in ${t}`,text:`${y.name} is now available in ${t} based on its defined strategies.`}),a==null||a(e,y.name,t,!g)}catch($){$ instanceof Error&&$.message===kt?n==null||n():h(B($)),x()}},p=async()=>{try{v(!g),await d(e,y.name,t),f({type:"success",title:`Unavailable in ${t}`,text:`${y.name} is unavailable in ${t} and its strategies will no longer have any effect.`}),a==null||a(e,y.name,t,!g)}catch(b){h(B(b)),x()}},E=async b=>{if(l(t)){b.preventDefault(),P()?A(!0):S(y.name,t,!g,!1);return}if(g){await p();return}P()?A(!0):await k()},F=async()=>{l(t)?S(y.name,t,!g,!0):await k(!0),A(!1)},T=async()=>{l(t)?S(y.name,t,!g,!1):await k(),A(!1)},P=()=>{var $,H,M;const b=($=y==null?void 0:y.environments)==null?void 0:$.find(_=>_.name===t);return(b==null?void 0:b.strategies)&&((H=b==null?void 0:b.strategies)==null?void 0:H.length)>0&&((M=b==null?void 0:b.strategies)==null?void 0:M.every(_=>_.disabled))},j=`${y.name}-${t}`;return C(K,{children:[r($t,{"data-testid":`TOGGLE-${j}`,children:r(Ne,{tooltip:g?`Disable feature in ${t}`:`Enable feature in ${t}`,checked:g,environmentId:t,projectId:e,permission:Qe,inputProps:{"aria-label":t},onClick:E})},j),r(Dt,{isOpen:D,onClose:()=>A(!1),environment:t,disabledStrategiesCount:q,onActivateDisabledStrategies:F,onAddDefaultStrategy:T}),r(pt,{isOpen:m.isOpen,onClose:c,environment:m==null?void 0:m.environment,onConfirm:u,messageComponent:r(Pt,{enabled:m==null?void 0:m.enabled,featureName:m==null?void 0:m.featureName,environment:m.environment})})]})},Ot=U(Ze)(({theme:e})=>({color:e.palette.warning.main,fontSize:e.fontSizes.bodySize})),Jt=()=>r(Xe,{arrow:!0,title:C(K,{children:["This environment has no variants enabled. If you check this feature's variants in this environment, you will get the"," ",r("a",{href:"https://docs.getunleash.io/reference/feature-toggle-variants#the-disabled-variant",target:"_blank",rel:"noreferrer",children:"disabled variant"}),"."]}),children:r(Ot,{})});var ae={},Bt=tt;Object.defineProperty(ae,"__esModule",{value:!0});var Ce=ae.default=void 0,qt=Bt(et()),_t=at,Lt=(0,qt.default)((0,_t.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");Ce=ae.default=Lt;const Ut=it(),Kt=({options:e,selectedOptions:s,indeterminateOptions:t,tagType:i,existingTags:a,disabled:n=!1,onChange:o})=>{const d=r(ct,{fontSize:"small"});return r(Se,{multiple:!0,id:"checkboxes-tag",sx:{marginTop:c=>c.spacing(2),width:500},disableCloseOnSelect:!0,placeholder:"Select Values",options:e,value:s,renderTags:(c,u)=>c.map((m,g)=>a.some(x=>x.value===m.title&&x.type===i.name)&&t===void 0?null:r(ot,{...u({index:g}),label:m.title})),isOptionEqualToValue:(c,u)=>u.inputValue&&u.inputValue!==""?c.title===u.inputValue:c.title===u.title,getOptionLabel:c=>c.inputValue?c.inputValue:c.title,renderOption:(c,u,{selected:m})=>{const g=(t==null?void 0:t.some(v=>v.title===u.title))??!1;return C("li",{...c,children:[r(L,{condition:!!u.inputValue,show:r(st,{sx:{mr:v=>v.spacing(.5)}}),elseShow:r(nt,{icon:d,checkedIcon:r(rt,{fontSize:"small"}),indeterminateIcon:r(Ce,{fontSize:"small"}),sx:{mr:v=>v.spacing(.5)},checked:m&&!g,indeterminate:g})}),u.title]})},filterOptions:(c,u)=>{const m=Ut(c,u),{inputValue:g}=u,v=c.some(x=>g===x.title);return g!==""&&!v&&m.push({inputValue:g,title:`Create new value "${g}"`}),m},ListboxProps:{style:{maxHeight:200,overflow:"auto"}},onChange:o,renderInput:c=>r(ve,{...c,label:"Select values",placeholder:"Select values"}),disabled:n})},jt=U("li")({flexDirection:"column"}),Nt=({options:e,value:s,disabled:t=!1,onChange:i})=>{const a=ce();return r(Se,{disablePortal:!0,disabled:t,id:"tag-type-select",sx:{marginTop:n=>n.spacing(2),width:500},options:e,disableClearable:!0,value:s,getOptionLabel:n=>n.name,renderOption:(n,o)=>C(jt,{...n,style:{alignItems:"flex-start",gap:a.spacing(.5)},children:[r(O,{variant:"body1",children:o.name}),r(O,{variant:"caption",children:o.description})]}),renderInput:n=>r(ve,{...n,label:"Tag type",value:s}),onChange:i,ListboxProps:{style:{maxHeight:200,overflow:"auto"}}})},Qt=()=>{const{makeRequest:e,createRequest:s,errors:t,loading:i}=lt({propagateErrors:!0});return{createTag:async o=>{const f=s("api/admin/tags",{method:"POST",body:JSON.stringify(o)});try{return await e(f.caller,f.id)}catch(h){throw h}},bulkUpdateTags:async o=>{const f=s("api/admin/tags/features",{method:"PUT",body:JSON.stringify(o)});try{return await e(f.caller,f.id)}catch(h){throw h}},errors:t,loading:i}},Zt=(e,s={})=>{const t=async()=>{const h=gt(`api/admin/tags/${e}`);return(await fetch(h,{method:"GET"}).then(ht("Tags"))).json()},i=`api/admin/tags/${e}`,{data:a,error:n}=ut(!!e,{tags:[]},i,t,s),[o,d]=w.useState(!n&&!a),f=()=>{dt(i)};return w.useEffect(()=>{d(!n&&!a)},[a,n]),{tags:(a==null?void 0:a.tags)||[],error:n,loading:o,refetch:f}},Xt=({isStale:e,isOpen:s,projectId:t,featureId:i,onClose:a})=>{const{setToastData:n,setToastApiError:o}=z(),{patchFeatureToggle:d}=te(),f=r(O,{children:"Setting a toggle to stale marks it for cleanup"}),h=r(O,{children:"Setting a toggle to active marks it as in active use"}),l=e?"active":"stale",S=async c=>{c.stopPropagation();try{await d(t,i,[{op:"replace",path:"/stale",value:!e}]),a()}catch(u){o(B(u))}n(e?{type:"success",title:"And we're back!",text:"The toggle is no longer marked as stale."}:{type:"success",title:"A job well done.",text:"The toggle has been marked as stale."})};return r(W,{open:s,secondaryButtonText:"Cancel",primaryButtonText:`Flip to ${l}`,title:`Set feature state to ${l}`,onClick:S,onClose:a,children:r(L,{condition:e,show:h,elseShow:f})})},ea=({isOpen:e,onClose:s,onConfirm:t,projectId:i,featureIds:a})=>{const{archiveFeatureToggle:n}=te(),{archiveFeatures:o}=ue(),{setToastData:d,setToastApiError:f}=z(),h=(a==null?void 0:a.length)>1;return r(W,{onClick:h?async()=>{try{await o(i,a),d({text:"Selected feature toggles have been archived",type:"success",title:"Feature toggles archived"}),t(),s()}catch(c){f(B(c)),s()}}:async()=>{try{await n(i,a[0]),d({text:"Your feature toggle has been archived",type:"success",title:"Feature archived"}),t(),s()}catch(c){f(B(c)),s()}},open:e,onClose:s,primaryButtonText:h?"Archive toggles":"Archive toggle",secondaryButtonText:"Cancel",title:h?"Archive feature toggles":"Archive feature toggle",children:r(L,{condition:h,show:C(K,{children:[C("p",{children:["Are you sure you want to archive"," ",r("strong",{children:a==null?void 0:a.length})," feature toggles?"]}),r(L,{condition:(a==null?void 0:a.length)<=5,show:r("ul",{children:a==null?void 0:a.map(c=>r("li",{children:c},c))})})]}),elseShow:r("p",{children:"Are you sure you want to archive these feature toggles?"})})})};export{pt as C,Yt as E,Gt as F,Nt as T,Pt as U,Jt as V,zt as W,Mt as a,Zt as b,Kt as c,Ht as d,ea as e,xt as f,Xt as g,Ft as h,Wt as i,Qt as u};
10
+ --data-raw '${o}'`},oe=j("p")(({theme:e})=>({marginBottom:e.spacing(.5),fontSize:e.fontSizes.bodySize})),Mt=({open:e,environmentName:s,featureId:t,projectId:i,onClose:a})=>{const n=J(),o=xt(i,t,s,"default");return C(W,{open:e,maxWidth:"sm",onClose:()=>a(),title:"You need to add a strategy to your toggle",primaryButtonText:"Take me directly to add strategy",permissionButton:r(G,{type:"button",permission:be,projectId:i,environmentId:s,onClick:()=>{a(),n(o)},children:"Take me directly to add strategy"}),secondaryButtonText:"Cancel",children:[r(oe,{children:"Before you can enable the toggle in the environment, you need to add an activation strategy."}),r(oe,{children:"You can add the activation strategy by selecting the toggle, open the environment accordion and add the activation strategy."})]})},kt="You can not enable the environment before it has strategies",Ft=e=>{const{setToastData:s,setToastApiError:t}=z(),{addChange:i}=me(),{refetch:a}=Z(e),[n,o]=w.useState({isOpen:!1}),d=w.useCallback((l,S,c,u)=>{o({featureName:l,environment:S,enabled:c,shouldActivateDisabledStrategies:u,isOpen:!0})},[]),f=w.useCallback(()=>{o(l=>({...l,isOpen:!1}))},[]),h=w.useCallback(async()=>{try{await i(e,n.environment,{feature:n.featureName,action:"updateEnabled",payload:{enabled:!!n.enabled,shouldActivateDisabledStrategies:!!n.shouldActivateDisabledStrategies}}),a(),o(l=>({...l,isOpen:!1})),s({type:"success",title:"Changes added to the draft!"})}catch(l){t(B(l)),o(S=>({...S,isOpen:!1}))}},[i]);return{onChangeRequestToggle:d,onChangeRequestToggleClose:f,onChangeRequestToggleConfirm:h,changeRequestDialogDetails:n}},Dt=({isOpen:e,onAddDefaultStrategy:s,onActivateDisabledStrategies:t,onClose:i,environment:a,disabledStrategiesCount:n=0})=>{const o=Y("projectId");return C(W,{open:e,secondaryButtonText:"Cancel",permissionButton:C(K,{children:[r(G,{type:"button",permission:ne,projectId:o,environmentId:a,onClick:s,children:"Add default strategy"}),r(G,{type:"button",variant:"text",permission:ne,projectId:o,environmentId:a,onClick:t,children:"Enable all strategies"})]}),onClose:i,title:"Enable feature toggle",fullWidth:!0,children:[C(O,{variant:"body1",color:"text.primary",sx:{mb:d=>d.spacing(2)},children:["The feature toggle has ",n," disabled",n===1?" strategy":" strategies","."]}),r(O,{variant:"body1",color:"text.primary",children:"You can choose to enable all the disabled strategies or you can add the default strategy to enable this feature toggle."})]})},Pt=({enabled:e,featureName:s,environment:t})=>C(O,{"data-testid":"update-enabled-message",children:[r("strong",{children:e?"Enable":"Disable"})," feature toggle"," ",r("strong",{children:s})," in ",r("strong",{children:t})]}),$t=j(Ge)(()=>({mx:"auto",...Je})),Gt=({projectId:e,featureId:s,environmentName:t,value:i,onToggle:a,onError:n})=>{var I;const{toggleFeatureEnvironmentOn:o,toggleFeatureEnvironmentOff:d}=te(),{setToastData:f,setToastApiError:h}=z(),{isChangeRequestConfigured:l}=ye(e),{onChangeRequestToggle:S,onChangeRequestToggleClose:c,onChangeRequestToggleConfirm:u,changeRequestDialogDetails:m}=Ft(e),[g,v,x]=Ke(i),[D,A]=w.useState(!1),{feature:y}=Q(e,s),q=((I=y==null?void 0:y.environments.find(b=>b.name===t))==null?void 0:I.strategies.filter(b=>b.disabled).length)??0,k=async(b=!1)=>{try{v(!g),await o(e,y.name,t,b),f({type:"success",title:`Available in ${t}`,text:`${y.name} is now available in ${t} based on its defined strategies.`}),a==null||a(e,y.name,t,!g)}catch($){$ instanceof Error&&$.message===kt?n==null||n():h(B($)),x()}},p=async()=>{try{v(!g),await d(e,y.name,t),f({type:"success",title:`Unavailable in ${t}`,text:`${y.name} is unavailable in ${t} and its strategies will no longer have any effect.`}),a==null||a(e,y.name,t,!g)}catch(b){h(B(b)),x()}},E=async b=>{if(l(t)){b.preventDefault(),P()?A(!0):S(y.name,t,!g,!1);return}if(g){await p();return}P()?A(!0):await k()},F=async()=>{l(t)?S(y.name,t,!g,!0):await k(!0),A(!1)},T=async()=>{l(t)?S(y.name,t,!g,!1):await k(),A(!1)},P=()=>{var $,H,M;const b=($=y==null?void 0:y.environments)==null?void 0:$.find(_=>_.name===t);return(b==null?void 0:b.strategies)&&((H=b==null?void 0:b.strategies)==null?void 0:H.length)>0&&((M=b==null?void 0:b.strategies)==null?void 0:M.every(_=>_.disabled))},V=`${y.name}-${t}`;return C(K,{children:[r($t,{"data-testid":`TOGGLE-${V}`,children:r(Ne,{tooltip:g?`Disable feature in ${t}`:`Enable feature in ${t}`,checked:g,environmentId:t,projectId:e,permission:Qe,inputProps:{"aria-label":t},onClick:E})},V),r(Dt,{isOpen:D,onClose:()=>A(!1),environment:t,disabledStrategiesCount:q,onActivateDisabledStrategies:F,onAddDefaultStrategy:T}),r(pt,{isOpen:m.isOpen,onClose:c,environment:m==null?void 0:m.environment,onConfirm:u,messageComponent:r(Pt,{enabled:m==null?void 0:m.enabled,featureName:m==null?void 0:m.featureName,environment:m.environment})})]})},Ot=j(Ze)(({theme:e})=>({color:e.palette.warning.main,fontSize:e.fontSizes.bodySize})),Jt=()=>r(Xe,{arrow:!0,title:C(K,{children:["This environment has no variants enabled. If you check this feature's variants in this environment, you will get the"," ",r("a",{href:"https://docs.getunleash.io/reference/feature-toggle-variants#the-disabled-variant",target:"_blank",rel:"noreferrer",children:"disabled variant"}),"."]}),children:r(Ot,{})});var ae={},Bt=tt;Object.defineProperty(ae,"__esModule",{value:!0});var Ce=ae.default=void 0,qt=Bt(et()),_t=at,Lt=(0,qt.default)((0,_t.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");Ce=ae.default=Lt;const Ut=it(),Kt=({options:e,selectedOptions:s,indeterminateOptions:t,tagType:i,existingTags:a,disabled:n=!1,onChange:o})=>{const d=r(ct,{fontSize:"small"});return r(Se,{multiple:!0,id:"checkboxes-tag",sx:{marginTop:c=>c.spacing(2),width:500},disableCloseOnSelect:!0,placeholder:"Select Values",options:e,value:s,renderTags:(c,u)=>c.map((m,g)=>a.some(x=>x.value===m.title&&x.type===i.name)&&t===void 0?null:r(ot,{...u({index:g}),label:m.title})),isOptionEqualToValue:(c,u)=>u.inputValue&&u.inputValue!==""?c.title===u.inputValue:c.title===u.title,getOptionLabel:c=>c.inputValue?c.inputValue:c.title,renderOption:(c,u,{selected:m})=>{const g=(t==null?void 0:t.some(v=>v.title===u.title))??!1;return C("li",{...c,children:[r(U,{condition:!!u.inputValue,show:r(st,{sx:{mr:v=>v.spacing(.5)}}),elseShow:r(nt,{icon:d,checkedIcon:r(rt,{fontSize:"small"}),indeterminateIcon:r(Ce,{fontSize:"small"}),sx:{mr:v=>v.spacing(.5)},checked:m&&!g,indeterminate:g})}),u.title]})},filterOptions:(c,u)=>{const m=Ut(c,u),{inputValue:g}=u,v=c.some(x=>g===x.title);return g!==""&&!v&&m.push({inputValue:g,title:`Create new value "${g}"`}),m},ListboxProps:{style:{maxHeight:200,overflow:"auto"}},onChange:o,renderInput:c=>r(ve,{...c,label:"Select values",placeholder:"Select values"}),disabled:n})},jt=j("li")({flexDirection:"column"}),Nt=({options:e,value:s,disabled:t=!1,onChange:i})=>{const a=ce();return r(Se,{disablePortal:!0,disabled:t,id:"tag-type-select",sx:{marginTop:n=>n.spacing(2),width:500},options:e,disableClearable:!0,value:s,getOptionLabel:n=>n.name,renderOption:(n,o)=>C(jt,{...n,style:{alignItems:"flex-start",gap:a.spacing(.5)},children:[r(O,{variant:"body1",children:o.name}),r(O,{variant:"caption",children:o.description})]}),renderInput:n=>r(ve,{...n,label:"Tag type",value:s}),onChange:i,ListboxProps:{style:{maxHeight:200,overflow:"auto"}}})},Qt=()=>{const{makeRequest:e,createRequest:s,errors:t,loading:i}=lt({propagateErrors:!0});return{createTag:async o=>{const f=s("api/admin/tags",{method:"POST",body:JSON.stringify(o)});try{return await e(f.caller,f.id)}catch(h){throw h}},bulkUpdateTags:async o=>{const f=s("api/admin/tags/features",{method:"PUT",body:JSON.stringify(o)});try{return await e(f.caller,f.id)}catch(h){throw h}},errors:t,loading:i}},Zt=(e,s={})=>{const t=async()=>{const h=gt(`api/admin/tags/${e}`);return(await fetch(h,{method:"GET"}).then(ht("Tags"))).json()},i=`api/admin/tags/${e}`,{data:a,error:n}=ut(!!e,{tags:[]},i,t,s),[o,d]=w.useState(!n&&!a),f=()=>{dt(i)};return w.useEffect(()=>{d(!n&&!a)},[a,n]),{tags:(a==null?void 0:a.tags)||[],error:n,loading:o,refetch:f}},Xt=({isStale:e,isOpen:s,projectId:t,featureId:i,onClose:a})=>{const{setToastData:n,setToastApiError:o}=z(),{patchFeatureToggle:d}=te(),f=r(O,{children:"Setting a toggle to stale marks it for cleanup"}),h=r(O,{children:"Setting a toggle to active marks it as in active use"}),l=e?"active":"stale",S=async c=>{c.stopPropagation();try{await d(t,i,[{op:"replace",path:"/stale",value:!e}]),a()}catch(u){o(B(u))}n(e?{type:"success",title:"And we're back!",text:"The toggle is no longer marked as stale."}:{type:"success",title:"A job well done.",text:"The toggle has been marked as stale."})};return r(W,{open:s,secondaryButtonText:"Cancel",primaryButtonText:`Flip to ${l}`,title:`Set feature state to ${l}`,onClick:S,onClose:a,children:r(U,{condition:e,show:h,elseShow:f})})},ea=({isOpen:e,onClose:s,onConfirm:t,projectId:i,featureIds:a})=>{const{archiveFeatureToggle:n}=te(),{archiveFeatures:o}=ue(),{setToastData:d,setToastApiError:f}=z(),h=(a==null?void 0:a.length)>1;return r(W,{onClick:h?async()=>{try{await o(i,a),d({text:"Selected feature toggles have been archived",type:"success",title:"Feature toggles archived"}),t(),s()}catch(c){f(B(c)),s()}}:async()=>{try{await n(i,a[0]),d({text:"Your feature toggle has been archived",type:"success",title:"Feature archived"}),t(),s()}catch(c){f(B(c)),s()}},open:e,onClose:s,primaryButtonText:h?"Archive toggles":"Archive toggle",secondaryButtonText:"Cancel",title:h?"Archive feature toggles":"Archive feature toggle",children:r(U,{condition:h,show:C(K,{children:[C("p",{children:["Are you sure you want to archive"," ",r("strong",{children:a==null?void 0:a.length})," feature toggles?"]}),r(U,{condition:(a==null?void 0:a.length)<=5,show:r("ul",{children:a==null?void 0:a.map(c=>r("li",{children:c},c))})})]}),elseShow:r("p",{children:"Are you sure you want to archive these feature toggles?"})})})};export{pt as C,Yt as E,Gt as F,Nt as T,Pt as U,Jt as V,zt as W,Mt as a,Zt as b,Kt as c,Ht as d,ea as e,xt as f,Xt as g,Ft as h,Wt as i,Qt as u};
@@ -1,2 +1,2 @@
1
- import{f_ as c,b as m,bK as g,r as d,j as u}from"./index-0a56292a.js";import{d as b,L as x,C as f,a as C,b as v,P as S,c as h,T as q,p as k,e as M,f as L}from"./chartjs-adapter-date-fns.esm-db338d44.js";import"./index-d362ae7a.js";import"./index-dc5debe9.js";const $=(e,s,n)=>{const a={label:"Total requests",borderColor:e.palette.primary.main,backgroundColor:e.palette.primary.main,data:p(s,n,o=>o.yes+o.no),elements:{point:{radius:6,pointStyle:"circle"},line:{borderDash:[8,4]}}},t={label:"Exposed",borderColor:e.palette.success.main,backgroundColor:e.palette.success.main,data:p(s,n,o=>o.yes),elements:{point:{radius:6,pointStyle:"triangle"}}},r={label:"Not exposed",borderColor:e.palette.error.main,backgroundColor:e.palette.error.main,data:p(s,n,o=>o.no),elements:{point:{radius:6,pointStyle:"triangle",pointRotation:180}}};return{datasets:[t,r,a]}},p=(e,s,n)=>e.map(a=>({x:a.timestamp,y:n(a),variants:a.variants})),E=(e,s)=>{if(s===0)return"";const[n,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${n}`},P=(e,s,n,a)=>({locale:a.locale,responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},color:e.palette.text.secondary,plugins:{tooltip:{backgroundColor:e.palette.background.paper,bodyColor:e.palette.text.primary,titleColor:e.palette.text.secondary,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,itemSort:(t,r)=>{const o=["Total requests","Exposed","Not exposed"],l=o.indexOf(t.dataset.label),i=o.indexOf(r.dataset.label);return l-i},callbacks:{label:t=>`${t.formattedValue} - ${t.dataset.label}`,afterLabel:t=>{const r=t.dataset.data[t.dataIndex];if(t.dataset.label!=="Exposed"||r.variants===void 0)return"";const{disabled:o,...l}=r.variants;return Object.entries(l).map(i=>E(i,r.y)).join(`
1
+ import{f_ as c,b as m,bK as g,r as d,j as u}from"./index-78d048a4.js";import{d as b,L as x,C as f,a as C,b as v,P as S,c as h,T as q,p as k,e as M,f as L}from"./chartjs-adapter-date-fns.esm-04fda623.js";import"./index-b74e9af8.js";import"./index-545ad556.js";const $=(e,s,n)=>{const a={label:"Total requests",borderColor:e.palette.primary.main,backgroundColor:e.palette.primary.main,data:p(s,n,o=>o.yes+o.no),elements:{point:{radius:6,pointStyle:"circle"},line:{borderDash:[8,4]}}},t={label:"Exposed",borderColor:e.palette.success.main,backgroundColor:e.palette.success.main,data:p(s,n,o=>o.yes),elements:{point:{radius:6,pointStyle:"triangle"}}},r={label:"Not exposed",borderColor:e.palette.error.main,backgroundColor:e.palette.error.main,data:p(s,n,o=>o.no),elements:{point:{radius:6,pointStyle:"triangle",pointRotation:180}}};return{datasets:[t,r,a]}},p=(e,s,n)=>e.map(a=>({x:a.timestamp,y:n(a),variants:a.variants})),E=(e,s)=>{if(s===0)return"";const[n,a]=e,t=Math.floor(Number(a)/s*100);return`${a} (${t}%) - ${n}`},P=(e,s,n,a)=>({locale:a.locale,responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},color:e.palette.text.secondary,plugins:{tooltip:{backgroundColor:e.palette.background.paper,bodyColor:e.palette.text.primary,titleColor:e.palette.text.secondary,borderColor:e.palette.primary.main,borderWidth:1,padding:10,boxPadding:5,usePointStyle:!0,itemSort:(t,r)=>{const o=["Total requests","Exposed","Not exposed"],l=o.indexOf(t.dataset.label),i=o.indexOf(r.dataset.label);return l-i},callbacks:{label:t=>`${t.formattedValue} - ${t.dataset.label}`,afterLabel:t=>{const r=t.dataset.data[t.dataIndex];if(t.dataset.label!=="Exposed"||r.variants===void 0)return"";const{disabled:o,...l}=r.variants;return Object.entries(l).map(i=>E(i,r.y)).join(`
2
2
  `)},title:t=>`Time: ${c(t[0].parsed.x,a.locale)}`}},legend:{position:"top",align:"end",labels:{boxWidth:10,boxHeight:10,usePointStyle:!0}},title:{text:T(n),position:"top",align:"start",display:!0,font:{size:16,weight:"400"},color:e.palette.text.primary}},scales:{y:{type:"linear",title:{display:!0,text:"Number of requests",color:e.palette.text.secondary},suggestedMin:0,ticks:{precision:0,color:e.palette.text.secondary},grid:{color:e.palette.divider,borderColor:e.palette.divider}},x:{type:"time",time:{unit:"hour"},grid:{display:!1},ticks:{callback:(t,r,o)=>c(o[r].value,a.locale),color:e.palette.text.secondary}}}}),T=e=>e===1?"Requests in the last hour":`Requests in the last ${e} hours`;b.font={...b.font,family:"Sen",size:13,weight:"400"};const R=({metrics:e,hoursBack:s,statsSectionId:n})=>{const a=m(),{locationSettings:t}=g(),r=d.useMemo(()=>[...e].sort((i,y)=>i.timestamp.localeCompare(y.timestamp)),[e]),o=d.useMemo(()=>P(a,r,s,t),[a,r,s,t]),l=d.useMemo(()=>$(a,r,t),[a,r,t]);return u("div",{style:{height:400},children:u(x,{options:o,data:l,"aria-label":"A feature metrics line chart, with three lines: all requests, positive requests, and negative requests.","aria-describedby":n})})};f.register(C,v,S,h,q,k,M,L);export{R as FeatureMetricsChart,R as default};