1import{a as X}from"./chunk-KEMC76VF.js";import{a as q}from"./chunk-TP4P4NLA.js";import{f as W}from"./chunk-SG2U2TUF.js";import"./chunk-2KPH5TEY.js";import{a as ee}from"./chunk-2ZS6VXHF.js";import"./chunk-4T2Y6F5I.js";import{a as k}from"./chunk-RGAGRXXU.js";import"./chunk-EWSNREVT.js";import{C as K}from"./chunk-V2LM4UG2.js";import{a as Z}from"./chunk-OCIUJ2IP.js";import{a as Q}from"./chunk-42N6KNR5.js";import{B as Y,t as D,u as H}from"./chunk-2AW5MEZE.js";import"./chunk-73KZCSGV.js";import"./chunk-XUJY7VIR.js";import{i as G,k as A,l as B,m as M,p as z,u as $,w as J}from"./chunk-54H6WZML.js";import{$b as f,Ba as _,Bc as F,Ca as j,Cc as R,Da as h,Db as v,Ea as T,Eb as L,Fb as d,Fc as y,Hb as b,Qb as r,Rb as o,Sb as p,Tb as x,Ub as E,Wb as w,bc as u,ib as a,jb as g,kc as I,lc as c,mc as S,qa as V,tc as N,uc as O,vc as U,wc as P}from"./chunk-TN6V64GS.js";import"./chunk-DM275RSA.js";var re=n=>({opacity:n}),oe=()=>["/projects/create-project"],te=n=>({"selected-card":n});function se(n,m){n&1&&(x(0),c(1," Limit Reached: 2 projects and 5 environments. Upgrade to Nimbuz Business for more capacity and features. "),E())}function ae(n,m){if(n&1&&(x(0),r(1,"c-alert",25)(2,"div",26),h(),r(3,"svg",27),p(4,"rect",28)(5,"path",29),o(),T(),r(6,"div",30)(7,"p",31),c(8,"Note"),o(),v(9,se,2,0,"ng-container",3),o()()(),E()),n&2){let t=u();a(9),d("ngIf",t.projectExhausted||t.environmentExhausted)}}function ce(n,m){n&1&&(x(0),h(),r(1,"svg",42),p(2,"circle",43)(3,"circle",44),o(),E())}function le(n,m){n&1&&(h(),r(0,"svg",42),p(1,"circle",45),o())}function de(n,m){if(n&1){let t=w();r(0,"div",32)(1,"div",33),f("click",function(){let e=_(t).$implicit,s=u();return s.onProjectChange(e),j(s.selectedProjectId=e.id)}),r(2,"div",34)(3,"div",35)(4,"div",36),v(5,ce,4,0,"ng-container",37)(6,le,2,0,"ng-template",null,0,y),o(),r(8,"div",38)(9,"p",39),c(10),o(),r(11,"p",40),c(12),F(13,"date"),o()(),r(14,"div",36)(15,"i",41),f("click",function(){let e=_(t).$implicit,s=u();return j(s.navigateToProjectPreference(e))}),o()()()()()()}if(n&2){let t=m.$implicit,i=I(7),e=u();a(),d("ngClass",P(7,te,e.selectedProjectId===t.id)),a(4),d("ngIf",e.selectedProjectId===t.id)("ngIfElse",i),a(5),S(t.name),a(2),S(R(13,5,t.created_at))}}function me(n,m){n&1&&(x(0),h(),r(1,"svg",42),p(2,"circle",43)(3,"circle",44),o(),E())}function pe(n,m){n&1&&(h(),r(0,"svg",42),p(1,"circle",45),o())}function ue(n,m){if(n&1){let t=w();r(0,"div",46),f("click",function(){let e=_(t).$implicit,s=u();return s.selectedRegion=e,j(s.onRegionChange(e))}),r(1,"div",36),v(2,me,4,0,"ng-container",37)(3,pe,2,0,"ng-template",null,1,y),r(5,"span",47),c(6),o()()()}if(n&2){let t=m.$implicit,i=I(4),e=u();a(2),d("ngIf",e.selectedRegion===t)("ngIfElse",i),a(4),S(t)}}function ge(n,m){n&1&&(x(0),h(),r(1,"svg",42),p(2,"circle",43)(3,"circle",44),o(),E())}function ve(n,m){n&1&&(h(),r(0,"svg",42),p(1,"circle",45),o())}function he(n,m){if(n&1){let t=w();r(0,"div",48)(1,"div",49),f("click",function(){let e=_(t).$implicit,s=u();return s.selectedEnvId=e.id,j(s.onEnvironmentChange(e))}),r(2,"div",34)(3,"div",50)(4,"div",36),v(5,ge,4,0,"ng-container",37)(6,ve,2,0,"ng-template",null,2,y),o(),r(8,"div",38)(9,"p",51),c(10),o(),r(11,"p",40),c(12),F(13,"date"),o()(),r(14,"div",36)(15,"i",41),f("click",function(e){let s=_(t).$implicit;return u().gotoViewEnvironment(s),j(e.stopPropagation())}),o()()()()()()}if(n&2){let t=m.$implicit,i=I(7),e=u();a(),d("ngClass",P(7,te,e.selectedEnvId===t.id)),a(4),d("ngIf",e.selectedEnvId===t.id)("ngIfElse",i),a(5),S(t.name),a(2),S(R(13,5,t.created_at))}}var Fe=(()=>{class n{constructor(t,i,e,s,l,C,ie,ne){this.projectService=t,this.sharedService=i,this.authService=e,this.router=s,this.sideNavService=l,this.toastr=C,this.location=ie,this.permissionService=ne,this.projectList=[],this.selectedProjectId="",this.selectedEnvId="",this.selectedRegion="ap-south-1",this.projectExhausted=!1,this.environmentExhausted=!1,this.orgName="",this.vcsProfileInfo={}}ngOnInit(){this.getAllProjects(),this.sharedService.user$.subscribe(t=>{t&&(this.orgName=t.owner)})}getResourceUsage(t){!t||this.orgName!=="nimbuz"||this.projectService.getResourceUsage(t).subscribe(i=>{if(i.status&&i.data){localStorage.setItem("resourceUsage",JSON.stringify(i.data));let e=i.data.find(l=>l.resource_type==="projects");this.projectExhausted=e?.remaining===0;let s=i.data.find(l=>l.resource_type==="environments");this.environmentExhausted=s?.remaining===0}})}getAllProjects(){this.sharedService.show(),this.projectService.getAllProjects().subscribe(i=>{if(this.projectList=i?.data||[],this.sideNavService.setProject(this.projectList),!this.projectList.length){this.environmentList=[],localStorage.removeItem("environment"),localStorage.removeItem("project"),localStorage.removeItem("resourceUsage");return}let e=this.safeParseJSON(localStorage.getItem("project")),s=this.projectList.find(l=>l.id===e?.id);this.selectedProjectId=s?.id||this.projectList[0].id,!e&&this.selectedProjectId&&this.onProjectChange(this.projectList[0]),this.environmentList=this.getEnvironmentsByProjectId(this.selectedProjectId),this.extractRegions(this.projectList)});let t=window.location.pathname;this.location.replaceState(t)}loadResourceUsageFromCookie(){let t=localStorage.getItem("resourceUsage");if(!t){console.log("No resourceUsage cookie found.");return}let i=JSON.parse(t),e=i.find(l=>l.resource_type==="projects"),s=i.find(l=>l.resource_type==="environments");this.projectExhausted=e?.remaining===0,this.environmentExhausted=s?.remaining===0}safeParseJSON(t){try{return t?JSON.parse(t):null}catch{return null}}extractRegions(t){let i=new Set;this.regionList=["ap-south-1"];let e="ap-south-1a";this.selectedRegion=this.regionList.includes(e)?e:this.regionList[0],e?this.filterEnvironments():this.onRegionChange(this.regionList[0])}onProjectChange(t){this.selectedProjectId=t.id,localStorage.setItem("project",JSON.stringify(t)),this.sharedService.emitProjectValueChange(t),this.projectService.getProjectDetailsById(t.id).subscribe(i=>{this.vcsProfileInfo={github:i.data.github,gitlab:i.data.gitlab,bitbucket:i.data.bitbucket}}),this.environmentList=this.getEnvironmentsByProjectId(this.selectedProjectId),this.onRegionChange(this.selectedRegion)}onRegionChange(t){this.selectedRegion=t,this.filterEnvironments()}onEnvironmentChange(t){this.selectedEnvId=t?.id,localStorage.setItem("environment",JSON.stringify(t)),this.sharedService.emitEnvValueChange(t),localStorage.getItem("resourceUsage"),localStorage.getItem("resourceUsage")?this.loadResourceUsageFromCookie():t?.id&&this.loadResourceUsageFromCookie()}filterEnvironments(){let t=[...this.environmentList??[]],i=this.safeParseJSON(localStorage.getItem("environment")),s=this.environmentList?.find(C=>C.id===this.selectedEnvId)||this.environmentList?.find(C=>C.id===i?.id),l=t[0];this.selectedEnvId=s?.id||l?.id,s?this.onEnvironmentChange(s):l&&this.onEnvironmentChange(l)}getEnvironmentsByProjectId(t){return t===""?[]:(this.projectService.getAllEnvironmentsByProject(t).subscribe(i=>{this.environmentList=i?.data||[],this.filterEnvironments()}),this.environmentList)}updateCookies(){this.selectedEnvId&&this.router.navigate(["/applications"])}navigateToProjectPreference(t){this.selectedProjectId=t.id,this.router.navigate(["/projects/project-preferences"],{queryParams:{projectId:this.selectedProjectId}})}gotoEnvironment(){if(this.projectList.length===0){this.toastr.warning("Please create a project before creating an environment.");return}this.permissionService.canAdminGlobal()||this.permissionService.canWriteForCurrentUser(this.selectedProjectId,null)?this.router.navigate(["/projects/create-environment"]):this.toastr.warning("You are not authorized to create an environment for the selected project.")}gotoViewEnvironment(t){if(this.selectedEnvId=t.id,this.selectedEnvId){let i=this.environmentList.find(e=>e.id===this.selectedEnvId);i?this.router.navigate(["/projects/environment-preferences"],{queryParams:{envName:i.name,region:i.region,envId:i.id,projectId:this.selectedProjectId}}):this.toastr.error("Selected environment not found")}else this.toastr.error("Please select an environment to view")}ngOnDestroy(){this.routerSub&&this.routerSub.unsubscribe()}static{this.\u0275fac=function(i){return new(i||n)(g(k),g(Z),g(q),g(D),g(X),g(Q),g(G),g(ee))}}static{this.\u0275cmp=V({type:n,selectors:[["app-projects"]],standalone:!0,features:[N([k]),O],decls:44,vars:23,consts:[["unselectedIcon",""],["unselectedRegionIcon",""],["unselectedEnvIcon",""],[4,"ngIf"],[1,"header-format"],[1,"subtitle"],[1,"scrollable-row-wrapper","mt-2"],[1,"project-grid"],[1,"my-2"],[1,"card","custom-card-height","dotted-outline",3,"ngStyle"],[1,"card-body","d-flex","flex-column","p-0"],[1,"d-flex","justify-content-between","align-items-start","w-100","h-100"],[1,"d-flex","justify-content-center","align-items-center","w-100","h-100"],[1,"curs
1or","text-decoration-none",3,"routerLink"],["class","my-2 project-list",4,"ngFor","ngForOf"],[1,"my-4"],[1,"d-flex","align-items-center","mx-2","my-3"],["class","d-flex align-items-center me-3 cursor-pointer",3,"click",4,"ngFor","ngForOf"],[1,"scrollable-row-wrapper","mt-4"],[1,"env-grid"],[1,"card","custom-card-height","dotted-outline"],[1,"b-0","cursor","env-btn",3,"click","disabled"],["class","my-2 environments-list",4,"ngFor","ngForOf"],[1,"d-flex","justify-content-end","mt-4","mb-2"],["type","submit","data-testid","proceed-btn",1,"btn","button-format-solid",3,"click","disabled"],["color","warning"],[1,"d-flex","align-items-center","gap-3"],["xmlns","http://www.w3.org/2000/svg","width","40","height","40","viewBox","0 0 48 47","fill","none"],["width","48","height","47","rx","23.5","fill","#FF9800"],["d","M22.4 28.8H25.6V32H22.4V28.8ZM22.4 16H25.6V25.6H22.4V16ZM23.984 8C15.152 8 8 15.168 8 24C8 32.832 15.152 40 23.984 40C32.832 40 40 32.832 40 24C40 15.168 32.832 8 23.984 8ZM24 36.8C16.928 36.8 11.2 31.072 11.2 24C11.2 16.928 16.928 11.2 24 11.2C31.072 11.2 36.8 16.928 36.8 24C36.8 31.072 31.072 36.8 24 36.8Z","fill","white"],[1,"warn-text"],[1,"title"],[1,"my-2","project-list"],["data-testid","project-card",1,"card","custom-card-height","solid-outline",3,"click","ngClass"],[1,"card-body","p-2"],[1,"d-flex","justify-content-between"],[1,"d-flex","align-items-center"],[4,"ngIf","ngIfElse"],[1,"d-flex","flex-column","justify-content-center","mx-2","flex-grow-1"],[1,"card-title","fs-6","text-break"],[1,"m-0","text-nowrap","text-gray","fs-12px"],[1,"bi","bi-gear","fs-4","text-secondary","cursor",3,"click"],["xmlns","http://www.w3.org/2000/svg","width","20","height","20","viewBox","0 0 24 24","fill","none",1,"me-1"],["cx","12","cy","12","r","11","fill","white","stroke","#001225","stroke-width","2"],["cx","12","cy","12","r","5.6","fill","#FF6600"],["cx","12","cy","12","r","11","fill","white","stroke","#CCCCCC","stroke-width","2"],[1,"d-flex","align-items-center","me-3","cursor-pointer",3,"click"],[1,"card-title","radio-label","mb-0"],[1,"my-2","environments-list"],["data-testid","environment-card",1,"card","custom-card-height","solid-outline","cursor-pointer",3,"click","ngClass"],[1,"d-flex","justify-content-between","align-items-center","w-100","px-2","py-1"],[1,"card-title","text-capitalize","fs-6","text-break"]],template:function(i,e){i&1&&(v(0,ae,10,1,"ng-container",3),p(1,"hr"),r(2,"section")(3,"label",4),c(4,"Projects"),o(),r(5,"p",5),c(6," Groups related apps, services, and resources into a single unit for managing environments, access controls, and deployments. "),o(),r(7,"div",6)(8,"div",7)(9,"div",8)(10,"div",9)(11,"div",10)(12,"div",11)(13,"div",12)(14,"span",13),c(15,"+ Create project"),o()()()()()(),v(16,de,16,9,"div",14),o()()(),p(17,"hr"),r(18,"div",15)(19,"label",4),c(20,"Regions"),o(),r(21,"p",5),c(22,"Geographic location for hosting environments. Choose one near your users for better performance. "),o(),r(23,"div",16),v(24,ue,7,3,"div",17),o()(),p(25,"hr"),r(26,"label",4),c(27,"Environments"),o(),r(28,"p",5),c(29,"Deployable instance of an application within a project, such as dev, staging, or production."),o(),r(30,"div",18)(31,"div",19)(32,"div",8)(33,"div",20)(34,"div",10)(35,"div",11)(36,"div",12)(37,"button",21),f("click",function(){return e.gotoEnvironment()}),c(38," + Create environment "),o()()()()()(),v(39,he,16,9,"div",22),o()(),p(40,"hr"),r(41,"div",23)(42,"button",24),f("click",function(){return e.updateCookies()}),c(43,"Proceed"),o()()),i&2&&(d("ngIf",e.projectExhausted||e.environmentExhausted),a(10),b("disabled",e.projectExhausted||e.environmentExhausted)("pointer-events-none",e.projectExhausted||e.environmentExhausted),d("ngStyle",P(20,re,e.projectExhausted||e.environmentExhausted?.5:1)),a(4),b("disabled",e.projectExhausted||e.environmentExhausted||!e.permissionService.canCreateProject()),d("routerLink",e.projectExhausted||e.environmentExhausted||!e.permissionService.canAdminGlobal()?null:U(22,oe)),L("title",e.projectExhausted||e.environmentExhausted||!e.permissionService.canCreateProject()?"You are not authorized to view that page.":null),a(2),d("ngForOf",e.projectList),a(8),d("ngForOf",e.regionList),a(9),b("pointer-events-none",e.environmentExhausted)("disabled",e.environmentExhausted),a(4),d("disabled",e.environmentExhausted||!(e.permissionService.canAdminGlobal()||e.selectedProjectId&&e.permissionService.canWriteForCurrentUser(e.selectedProjectId,"*"))),L("title",e.environmentExhausted||!(e.permissionService.canAdminGlobal()||e.selectedProjectId&&e.permissionService.canWriteForCurrentUser(e.selectedProjectId,"*"))?"You are not authorized to view that page.":null),a(2),d("ngForOf",e.environmentList),a(3),d("disabled",!e.selectedEnvId))},dependencies:[J,A,B,M,z,$,Y,H,K,W],styles:[`.dotted-outline{border:1px dashed #F60;border-radius:10px}.scrollable-row-wrapper{max-height:300px;overflow-y:auto;overflow-x:hidden;padding-right:8px}.header-format{color:#232323;font-weight:600;font-size:18px;font-family:plusFont,sans-serif}.custom-card-height{height:100px}.solid-outline{border:1px solid #CCCCCC;border-radius:8px}.custom-radio{position:relative;padding-left:24px;
1cursor:pointer;display:flex;align-items:center;justify-content:center;height:100%;margin-bottom:0}.custom-radio input{position:absolute;opacity:0;cursor:pointer}.checkmark{position:absolute;top:50%;left:0;transform:translateY(-50%);height:17px;width:17px;border:2px solid #001225;border-radius:50%;background-color:#fff}.custom-radio input:checked~.checkmark:after{content:"";position:absolute;top:2px;left:2px;width:10px;height:10px;background-color:#f60;border-radius:50%}.radio-label{font-size:14px!important;font-style:normal;font-weight:700;line-height:13px;margin-left:5px}.project-list .card-title,.environments-list .card-title{font-size:14px!important;font-weight:700;word-break:break-word;white-space:normal}.selected-card{border:2px solid rgba(0,18,37,.4);background-color:#f8f8f8}.project-grid,.env-grid{display:grid;gap:1rem;grid-template-columns:repeat(4,1fr)}@media (max-width: 1300px){.project-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width: 1100px){.project-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 600px){.project-grid{grid-template-columns:repeat(1,1fr)}}@media (max-width: 1300px){.env-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width: 1100px){.env-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 600px){.env-grid{grid-template-columns:repeat(1,1fr)}}.env-btn{background:transparent;border:0}.text-break{margin-bottom:4px}.pull-right{float:right}.pointer-events-none{pointer-events:none}.disabled{pointer-events:none;opacity:.6;cursor:not-allowed} 2`],encapsulation:2})}}return n})();export{Fe as ProjectsComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.