1import{a as Wt}from"./chunk-2HASKVFY.js";import{a as Xt}from"./chunk-OHC2IZNS.js";import{a as Jt}from"./chunk-XVKPVLSE.js";import"./chunk-YWEB3LM7.js";import{a as Rt}from"./chunk-VXB62CJS.js";import{b as Yt}from"./chunk-QP2ZQDKH.js";import{a as Ht}from"./chunk-C6NQCHSD.js";import{a as Qt}from"./chunk-4EOLFRJB.js";import"./chunk-LOLEDFTI.js";import{a as Gt}from"./chunk-IJLXE3ZB.js";import{a as Lt}from"./chunk-R7Q4MPN4.js";import"./chunk-FSNJXJRF.js";import"./chunk-TBPISSO7.js";import{a as Mt,b as At}from"./chunk-KOS3UPFJ.js";import"./chunk-MHGPMOH4.js";import{b as zt}from"./chunk-6MJ6GBBJ.js";import"./chunk-X7KPNDIF.js";import"./chunk-HMYLPI67.js";import{a as Ut}from"./chunk-3DISUXPJ.js";import"./chunk-74ZKM7YT.js";import"./chunk-RXS5X33U.js";import"./chunk-3EBNOWGO.js";import{a as kt}from"./chunk-36AOFBP3.js";import"./chunk-DDBXRR4N.js";import"./chunk-5XZ4LBEV.js";import{a as Et}from"./chunk-HZ6OFQFZ.js";import"./chunk-3HLDLQLX.js";import"./chunk-RQUDP6MO.js";import{a as qt}from"./chunk-2NOLRJET.js";import"./chunk-I3RMREUV.js";import"./chunk-U3GFLZ7G.js";import"./chunk-2EJWNQEI.js";import"./chunk-GJPX7LEC.js";import{a as Vt}from"./chunk-DRPVIY55.js";import"./chunk-UA4D6324.js";import"./chunk-LRN5PFED.js";import"./chunk-UVTPWGAU.js";import"./chunk-BYSAF66A.js";import{a as G}from"./chunk-6KJY6F5K.js";import{a as le}from"./chunk-EHJIT67H.js";import"./chunk-SJ7NTDU3.js";import{d as Ot}from"./chunk-NBTC4KJH.js";import{b as Ft}from"./chunk-HPJYNWMZ.js";import"./chunk-U3KJ4YPI.js";import"./chunk-RPTTJAYU.js";import"./chunk-55TTXFST.js";import"./chunk-3XH5Q45Z.js";import{a as Bt}from"./chunk-EQKEXRGX.js";import"./chunk-GO5UFWQE.js";import"./chunk-C3XVN4GH.js";import"./chunk-537TI2QE.js";import"./chunk-VXC4ISOG.js";import"./chunk-BQUGFGOI.js";import"./chunk-KDX2CJI5.js";import{c as Tt}from"./chunk-ENOHEOY7.js";import"./chunk-3RL577BW.js";import"./chunk-ZU5A7LBM.js";import{a as It,b as Nt}from"./chunk-QACI4GAG.js";import"./chunk-3FQAJ54H.js";import"./chunk-OGTIZ5XW.js";import"./chunk-L2Y7GTDC.js";import"./chunk-MCTJ2GLA.js";import{a as $t}from"./chunk-XE2LB5RF.js";import"./chunk-Y6I3CHUK.js";import"./chunk-QQUZNG23.js";import"./chunk-Y5JZEXHH.js";import{a as De}from"./chunk-PBQAI6PT.js";import"./chunk-RS47BARH.js";import"./chunk-IC4QIEG6.js";import"./chunk-KNXSWGR2.js";import{a as Pt}from"./chunk-Q4BB4ZY2.js";import{a as yt}from"./chunk-R3FQUAW3.js";import{a as Fe}from"./chunk-AR7SQJSK.js";import"./chunk-RQJM5YXQ.js";import{a as X}from"./chunk-2FJVMB6B.js";import"./chunk-X3OOA2DK.js";import"./chunk-KRD4AULN.js";import{a as xt}from"./chunk-CXDRHDQS.js";import"./chunk-U46GHHQU.js";import"./chunk-5KFZRJE5.js";import"./chunk-3QFKLBJH.js";import"./chunk-FCPJXAKR.js";import{a as wt}from"./chunk-TIBQBFJA.js";import"./chunk-WGY5R6UM.js";import{a as Dt}from"./chunk-KEPK3WJZ.js";import"./chunk-AU6BFOYX.js";import"./chunk-3M75U6ED.js";import"./chunk-J4NKYDUO.js";import"./chunk-7CG6YTEJ.js";import"./chunk-OTZ2GYQO.js";import"./chunk-CAVH7CEE.js";import{a as St}from"./chunk-6FNBZNBF.js";import"./chunk-K5JPTH2W.js";import"./chunk-KRM6RWLK.js";import"./chunk-KLKAJBEG.js";import{b as jt}from"./chunk-VOFNQY3P.js";import"./chunk-HHBYN2T2.js";import{e as J}from"./chunk-ODENK2RA.js";import{c as Ct,d as _t,e as Te,h as se}from"./chunk-MID3ZZXO.js";import{a as oe}from"./chunk-6BXP5JV5.js";import{e as ve,l as je}from"./chunk-7BVWSGV7.js";import"./chunk-PJAAIMNK.js";import"./chunk-6UILVNEF.js";import"./chunk-J2737D6V.js";import{a as bt,b as ae}from"./chunk-JJ7S5BBI.js";import"./chunk-FYFF4OYG.js";import{Ae as Pe,B as fe,Cc as A,Dc as pt,Ec as te,Ed as gt,Fd as ht,Ke as we,Ld as ft,Md as ne,Nd as vt,Ne as xe,Pd as ye,V as P,W as Se,ae as L,be as W,ce as $,ja as C,l as he,ld as dt,ma as be,nd as ie,qd as re,rd as ut,xd as _e,yc as Ce,yd as mt,zc as Y}from"./chunk-U3FRP2OH.js";import"./chunk-MT6FXMKE.js";import{$b as h,A as Ve,Aa as F,Ba as E,Ec as et,F as pe,Fa as Ye,Fc as tt,Gc as it,Gd as ct,H as Qe,Hb as R,Kc as ot,Lc as j,Ma as S,Mc as y,Nb as ke,Nc as de,O as q,Oc as H,Pa as We,S as Ie,Sc as rt,Tc as nt,Uc as at,W as qe,Y as U,Yc as K,bc as f,cc as Xe,cd as M,ea as Ne,ec as Ze,f as O,fa as k,fc as Ke,ga as b,gc as l,hc as a,ia as ge,ic as s,jc as v,kb as Je,kd as d,ld as u,md as ee,pa as He,pd as ue,qc as V,r as Ge,rb as n,s as x,t as me,ua as p,uc as _,ud as B,wc as g,yd as st,z as T,zd as lt}from"./chunk-5VQKZTJF.js";import{a as w,b as N,h as Ue}from"./chunk-OKNOHCUX.js";var di=["multiSelect"],Zt=o=>({count:o}),Re=o=>({"tw:border-border-danger":o}),Be=o=>({"tw:text-text-danger tw:pr-0":o});function ui(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorEnterProjectName")))}function mi(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorProjectNameMaxLength")))}function gi(o,m){if(o&1&&(h(0,ui,3,3,"div",26),h(1,mi,3,3,"div",26)
1),o&2){let e=g(2);f(e.projectForm.controls.name.touched&&e.projectForm.controls.name.errors.required?0:-1),n(),f(e.projectForm.controls.name.errors!=null&&e.projectForm.controls.name.errors.maxlength?1:-1)}}function hi(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorEnterSubprojectName")))}function fi(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorSubprojectNameMaxLength")))}function vi(o,m){if(o&1&&(h(0,hi,3,3,"div",26),h(1,fi,3,3,"div",26)),o&2){let e=g(2);f(e.projectForm.controls.subProject.touched&&e.projectForm.controls.subProject.errors.required?0:-1),n(),f(e.projectForm.controls.subProject.errors!=null&&e.projectForm.controls.subProject.errors.maxlength?1:-1)}}function ji(o,m){if(o&1&&(a(0,"div",25),v(1,"ui-alert",27),s()),o&2){let e=g(2);n(),l("type",e.alertTypes.ERROR)("message",e.errorMessage)}}function Si(o,m){if(o&1&&(a(0,"div")(1,"div",21,3),d(3,"transloco"),v(4,"ui-input-label",10),d(5,"transloco"),v(6,"input",22),d(7,"transloco"),a(8,"div",16)(9,"div"),h(10,gi,2,2),s(),a(11,"div",17),j(12),d(13,"transloco"),s()()(),a(14,"div",23),v(15,"ui-input-label",10),d(16,"transloco"),v(17,"input",24),d(18,"transloco"),a(19,"div",16)(20,"div"),h(21,vi,2,2),s(),a(22,"div",17),j(23),d(24,"transloco"),s()(),h(25,ji,2,2,"div",25),s()()),o&2){let e=g();n(),l("fdlTooltip",!!e.parentProjectName()&&u(3,21,"projectDialog.tooltipProjectNameUneditable"))("tooltipDirection","bottom"),n(3),l("label",u(5,23,"projectDialog.projectNameLabel"))("isMandatory",!0),n(2),l("placeholder",K(u(7,25,"projectDialog.placeholderEnterProjectName")))("ngClass",M(35,Re,e.projectForm.controls.name.touched&&e.projectForm.controls.name.invalid)),n(4),f(e.projectForm.controls.name.errors?10:-1),n(),l("ngClass",M(37,Be,e.projectForm.controls.name.errors==null?null:e.projectForm.controls.name.errors.maxlength)),n(),H("",e.projectForm.controls.name.value==null?null:e.projectForm.controls.name.value.length," ",u(13,27,"projectDialog.characterCountSuffix")),n(3),l("label",u(16,29,"projectDialog.labelSubprojectName"))("isMandatory",!!e.parentProjectName()),n(2),l("placeholder",K(u(18,31,"projectDialog.placeholderEnterSubprojectName")))("ngClass",M(39,Re,e.projectForm.controls.subProject.touched&&e.projectForm.controls.subProject.invalid)),n(4),f(e.projectForm.controls.subProject.errors?21:-1),n(),l("ngClass",M(41,Be,e.projectForm.controls.subProject.errors==null?null:e.projectForm.controls.subProject.errors.maxlength)),n(),H("",e.projectForm.controls.subProject.value==null?null:e.projectForm.controls.subProject.value.length," ",u(24,33,"projectDialog.characterCountSuffix")),n(2),f(e.errorMessage?25:-1)}}function bi(o,m){if(o&1&&(a(0,"div",9),v(1,"ui-input-label",28),d(2,"transloco"),d(3,"transloco"),v(4,"input",29),s()),o&2){let e=g(2);n(),l("label",u(2,5,"projectDialog.labelSubprojectName"))("isMandatory",!0)("infoButtonTooltipText",u(3,7,"projectDialog.tooltipInfoSubprojectNameUneditableCreateNew")),n(3),l("value",K(e.projectForm.value.subProject))}}function Ci(o,m){if(o&1&&(a(0,"div")(1,"div",9),v(2,"ui-input-label",28),d(3,"transloco"),d(4,"transloco"),v(5,"input",29),s(),h(6,bi,5,9,"div",9),s()),o&2){let e=g();n(2),l("label",u(3,6,"projectDialog.projectNameLabel"))("isMandatory",!0)("infoButtonTooltipText",u(4,8,"projectDialog.tooltipInfoProjectNameUneditableCreateNew")),n(3),l("value",K(e.projectForm.value.name)),n(),f(e.projectForm.value.subProject?6:-1)}}function _i(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorSelectOneOrMoreCategories")))}function yi(o,m){if(o&1&&h(0,_i,3,3,"div",26),o&2){let e=g(2);f(e.projectForm.controls.categoryIds.touched&&e.projectForm.controls.categoryIds.errors.required?0:-1)}}function Pi(o,m){if(o&1&&(a(0,"div",12),v(1,"ui-input-label",28),d(2,"transloco"),d(3,"transloco"),v(4,"feature-project-category-multiselect",30,4),d(6,"transloco"),a(7,"div",31),h(8,yi,1,1),s()()),o&2){let e=g();n(),l("label",u(2,7,"projectDialog.labelCategories"))("isMandatory",!0)("infoButtonTooltipText",u(3,9,"projectDialog.tooltipInfoCategoriesMandatory")),n(3),l("placeholder",u(6,11,"projectDialog.placeholderSelectCategories"))("resourceType","category")("restrictedIds",e.initialCategoryIds),n(4),f(e.projectForm.controls.categoryIds.errors?8:-1)}}function wi(o,m){if(o&1&&j(0),o&2){let e=m.$implicit;
1H(" ",e.full_name," (",e.email,") ")}}function Di(o,m){if(o&1&&j(0),o&2){let e=m.$implicit;H(" ",e.full_name," (",e.email,") ")}}function xi(o,m){if(o&1&&j(0),o&2){let e=m.$implicit;H(" ",e.full_name," (",e.email,") ")}}function Ti(o,m){if(o&1&&j(0),o&2){let e=m.$implicit;H(" ",e.full_name," (",e.email,") ")}}function Fi(o,m){if(o&1&&(v(0,"ui-alert",32),d(1,"transloco")),o&2){let e=g(2);l("type",e.alertTypes.ERROR)("message",u(1,2,"projectDialog.errorDuplicateApprovers"))}}function Ei(o,m){if(o&1&&h(0,Fi,2,4,"ui-alert",32),o&2){let e=g();f(e.projectForm.errors!=null&&e.projectForm.errors.duplicateApproverValues?0:-1)}}function Mi(o,m){o&1&&(a(0,"div",26),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"projectDialog.errorDescriptionMaxLength")))}function Ai(o,m){if(o&1&&h(0,Mi,3,3,"div",26),o&2){let e=g();f(e.projectForm.controls.description.errors!=null&&e.projectForm.controls.description.errors.maxlength?0:-1)}}function Ii(o,m){o&1&&(a(0,"div"),v(1,"ui-input-label",10),d(2,"transloco"),a(3,"div",33)(4,"div",34),v(5,"p-radioButton",35),a(6,"label",36),j(7),d(8,"transloco"),s()(),a(9,"div",34),v(10,"p-radioButton",37),a(11,"label",38),j(12),d(13,"transloco"),s()()()()),o&2&&(n(),l("label",u(2,6,"projectDialog.labelDefaultBillableValue"))("isMandatory",!1),n(4),l("value",!0),n(2),y(u(8,8,"projectDialog.defaultBillableYesLabel")),n(3),l("value",!1),n(2),y(u(13,10,"projectDialog.defaultBillableNoLabel")))}var Ee=(()=>{class o{projectCategoryMultiSelectComponent=lt("multiSelect");parentProjectName=S("");isProjectCategoryRestrictionEnabled=S(!1);project=S(null);isBillableEnabled=B(()=>this.billableField()?.is_enabled||!1);title;errorMessage;editProjectAlertMessage;projectForm;alertTypes=be;categoriesRemovedWarning;approverUsers=S([]);totalApproversCount=S(0);buttonType=P;buttonDisabled=!1;saveButtonLabel;showButtonLoader=!1;initialCategoryIds=[];componentDestroyed$=new O;approversSearchSubject$=new O;config=p(Ce);dialogRef=p(Y);projectsService=p(G);employeesService=p(Pe);toastMessageService=p(X);utilityService=p(we);translocoService=p(L);formBuilder=p(ft);expenseFieldsService=p(le);billableField=ye(this.expenseFieldsService.watchExpenseFieldByColumnName("is_billable",C.ADMIN),{initialValue:void 0});constructor(){this.projectForm=this.formBuilder.group({name:["",[ie.required,ie.maxLength(250)]],subProject:["",ie.maxLength(250)],code:[null],categoryIds:[[],ie.required],description:["",ie.maxLength(250)],approver1:[null],approver2:[null],default_billable:[!1]},{validators:this.distinctApproverValuesValidator})}searchApprovers(e=""){let i={is_enabled:"eq.true",limit:10,offset:0,order:"user->full_name.asc"};if(e.trim()){let t=this.utilityService.sanitizeSearchQuery(e);i.or=`(user->full_name.ilike."%${t}%",user->email.ilike."%${t}%")`}return this.employeesService.getAllByParams(C.ADMIN,i).pipe(T(t=>t.map(r=>r.user)))}getSelectedApproverUserIds(){return(this.project()?.approver_user_ids||[]).filter(e=>!!e)}fetchApproverByUserId(e){let i={user_id:`eq.${e}`,is_enabled:"eq.true",limit:1,offset:0};return this.employeesService.getByParams(C.ADMIN,i).pipe(T(t=>t[0]?.user||null),q(()=>x(null)))}patchApproversForEditProject(e){if(!this.project())return;let i=this.project(),[t,r]=i.approver_user_ids||[],c=e.find(z=>z.id===t)||null,D=e.find(z=>z.id===r)||null;this.projectForm.patchValue({approver1:c,approver2:D},{emitEvent:!1})}checkIfDuplicateExists(e,i){let t=this.utilityService.sanitizeSearchQuery(e),r=this.utilityService.sanitizeSearchQuery(i),c={name:`ilike."${t}"`,sub_project:"is.null"};return r&&(c.sub_project=`ilike."${r}"`),this.projectsService.getCount(C.ADMIN,c).pipe(T(D=>D.count>0))}loadInitialApprovers(){let e=this.getSelectedApproverUserIds(),i=e.length>0?pe(e.map(t=>this.fetchApproverByUserId(t))).pipe(T(t=>t.filter(r=>!!r))):x([]);pe([this.searchApprovers(),i]).pipe(b(this.componentDestroyed$)).subscribe(([t,r])=>{let c=[...t];for(let D of r)c.some(z=>z.id===D.id)||c.push(D);this.approverUsers.set(c),this.totalApproversCount.set(c.length),this.patchApproversForEditProject(c)})}initializeApproversSearchSubscription(){this.approversSearchSubject$.pipe(Ie(300),qe(),b(this.componentDestroyed$),k(e=>this.searchApprovers(e))).subscribe(e=>{this.approverUsers.set(e)})}initializeCheckDuplicateProjectsSubscription(){Ve([this.projectForm.get("name").valueChanges.pipe(Ne("")),this.projectForm.get("subProject").valueChanges.pipe(Ne(""))]).pipe(Ie(300),k(([i,t])=>{let r=x(!1);
1return i?r=this.checkIfDuplicateExists(i,t):this.parentProjectName()&&t&&(r=this.checkIfDuplicateExists(this.parentProjectName(),t)),r.pipe(q(()=>x(!1)))}),b(this.componentDestroyed$)).pipe(b(this.componentDestroyed$)).subscribe(i=>{i?(this.buttonDisabled=!0,this.errorMessage=this.parentProjectName()?this.translocoService.translate("projectDialog.errorUniqueSubprojectName"):this.translocoService.translate("projectDialog.errorUniqueProjectSubprojectCombination")):(this.buttonDisabled=!1,this.errorMessage="")})}distinctApproverValuesValidator(e){let i=e.get("approver1")?.value?.email,t=e.get("approver2")?.value?.email;return i===t&&i?{duplicateApproverValues:!0}:null}handleSuccess(){this.config?.data?this.dialogRef.close(A.SUCCESS):this.dialogRef.close()}handleError(e){this.toastMessageService.showErrorToast(this.translocoService.translate("projectDialog.errorSomethingWentWrong")),this.config?.data&&this.dialogRef.close({action:A.ERROR})}getTextColumns=()=>["name","sub_project","code","description"];setDialogConfig(){let{project:e,parentProjectName:i,isProjectCategoryRestrictionEnabled:t}=this.config.data;this.project.set(e),this.parentProjectName.set(i||""),this.isProjectCategoryRestrictionEnabled.set(t)}close(){this.config?.data?this.dialogRef.close(A.CANCEL):this.dialogRef.close()}onSearchApprovers(e){let i=e.target.value.trim();this.approversSearchSubject$.next(i)}onClearApproverSearch(){this.approversSearchSubject$.next("")}saveProject(){if(this.projectForm.markAllAsTouched(),this.projectForm.invalid)return;this.showButtonLoader=!0,(this.isProjectCategoryRestrictionEnabled()?this.projectCategoryMultiSelectComponent()?.getRestrictedIds()||x(null):this.project()?x(this.project().category_ids):x(null)).pipe(k(i=>{let t={name:this.projectForm.controls.name.value,sub_project:this.projectForm.value.subProject,code:this.projectForm.value.code,description:this.projectForm.value.description,category_ids:i,approver_emails:[this.projectForm.value.approver1?.email,this.projectForm.value.approver2?.email]};this.isBillableEnabled()&&(t.default_billable=this.projectForm.value.default_billable);let r=this.getTextColumns();return t=this.utilityService.sanitizeStringKeysInPayload(t,r),this.project()&&(t.id=this.project().id),this.projectsService.post(C.ADMIN,t)}),q(i=>(this.handleError(i),me(()=>i))),U(()=>{this.showButtonLoader=!1}),b(this.componentDestroyed$)).subscribe(()=>{this.handleSuccess()})}ngOnInit(){this.config?.data&&this.setDialogConfig(),this.title=`${this.project()?this.translocoService.translate("projectDialog.edit"):this.translocoService.translate("projectDialog.add")} ${this.parentProjectName()?this.translocoService.translate("projectDialog.subproject"):this.translocoService.translate("projectDialog.project")}`,this.saveButtonLabel=`${this.project()?this.translocoService.translate("projectDialog.update"):this.translocoService.translate("projectDialog.add")} ${this.parentProjectName()?this.translocoService.translate("projectDialog.subproject"):this.translocoService.translate("projectDialog.project")}`,this.categoriesRemovedWarning=this.parentProjectName()?this.translocoService.translate("projectDialog.categoriesRemovedWarningSubproject"):this.translocoService.translate("projectDialog.categoriesRemovedWarningProject");let e=this.translocoService.translate("projectDialog.projectNameLabel")+(this.project()?.sub_project?` ${this.translocoService.translate("projectDialog.editAlertAndSubprojectName")}`:"");if(this.editProjectAlertMessage=this.translocoService.translate("projectDialog.editAlertCannotBeEditedFull",{entity:e}),this.isProjectCategoryRestrictionEnabled()||this.projectForm.removeControl("categoryIds"),this.project()){let i=this.project();this.projectForm.patchValue({name:i.name,subProject:i.sub_project,code:i.code,categoryIds:i.category_ids,description:i.description,approver1:null,approver2:null,default_billable:i.default_billable??null}),this.initialCategoryIds=i.category_ids}this.parentProjectName()&&!this.project()&&(this.projectForm.patchValue({name:this.parentProjectName(),default_billable:!1}),this.projectForm.controls.name.disable(),this.projectForm.controls.subProject.addValidators(ie.required)),this.loadInitialApprovers(),this.initializeApproversSearchSubscription(),this.initializeCheckDuplicateProjectsSubscription()}ngOnDestroy(){this.componentDestroyed$.next(),this.componentDestroyed$.complete()}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["feature-project-dialog"]],viewQuery:function(i,t){i&1&&et(t.projectCategoryMultiSelectComponent,di,5),i&2&&tt()},decls:50,vars:83,consts:[["projectFormElement",""],["itemTemplate",""],["selectedItemTemplate",""],["fdlTooltip",""],["multiSelect",""],[1,"tw:flex","tw:flex-col","tw:w-[450px]"],[3,"closeModal","title"],[1,"tw:flex","tw:flex-col","tw:px-spacing-24","tw:py-spacing-16","tw:max-h-[408px]","tw:overflow-x-hidden"],[1,"form-container",3,"formGroup"],[1,"tw:mb-spacing-28"],[3,"label","isMandatory"],["type","text","formControlName","code",1,"input-text",3,"placeholder"],[1,"tw:mb-spacing-14"],["formControlName","approver1",1,"tw:block",3,"searchEvent","clearSearch","options","optionLabel","placeholder","showClearIcon","showSearch","useApiForSearch","totalCount","dropdownSearchPlaceholder"],["formControlName","approver2",1,"tw:block",3,"searchEvent","clearSearch","options","optionLabel","placeholder","showClearIcon","showSearch","useApiForSearch","totalCount","dropdownSearchPlaceholder"],["rows","2","formControlName","description","pTextarea","",1,"textarea",3,"ngClass","placeholder"],[1,"tw:flex","tw:justify-between"],[1,"tw:text-text-disable","tw:text-size-12","tw:pt-spacing-2",3,"ngClass"],[1,"tw:flex","tw:justify-end","tw:border-0","tw:py-spacing-20","tw:px-spacing-24"],["defaultType","button",3,"buttonClick","label","buttonType"],["defaultType","submit",3,"buttonClick","validateForm","formToValidate","formElement","isDisabled","label","customClasses","buttonType","isLoading"],[1,"tw:mb-spacing-10",3,"fdlTooltip","tooltipDirection"],["type","text","formControlName","name","uiAutofocus","",1,"input-text",3,"ngClass","placeholder"],[1,"tw:mb-spacing-10"],["type","text","formControlName","subProject",1,"input-text",3,"ngClass","placeholder"],[1,"tw:mt-sp
1acing-10"],[1,"tw:text-text-danger","tw:pr-0"],[3,"type","message"],[3,"label","isMandatory","infoButtonTooltipText"],["type","text","disabled","true",1,"input-text",3,"value"],["formControlName","categoryIds",3,"placeholder","resourceType","restrictedIds"],[1,"tw:min-h-18-px"],[1,"tw:mt-spacing-10","tw:block",3,"type","message"],[1,"tw:flex","tw:items-center","tw:gap-spacing-16","tw:h-32-px"],[1,"tw:flex","tw:items-center","tw:gap-spacing-8","tw:w-[115px]"],["name","default_billable","inputId","default-billable-yes","formControlName","default_billable",3,"value"],["for","default-billable-yes",1,"tw:text-size-14","tw:text-text-label","tw:cursor-pointer"],["name","default_billable","inputId","default-billable-no","formControlName","default_billable",3,"value"],["for","default-billable-no",1,"tw:text-size-14","tw:text-text-label","tw:cursor-pointer"]],template:function(i,t){if(i&1&&(a(0,"div",5)(1,"ui-modal-header",6),_("closeModal",function(){return t.close()}),s(),a(2,"div",7)(3,"form",8,0),h(5,Si,26,43,"div")(6,Ci,7,10,"div"),a(7,"div",9),v(8,"ui-input-label",10),d(9,"transloco"),v(10,"input",11),d(11,"transloco"),s(),h(12,Pi,9,13,"div",12),a(13,"div",9),v(14,"ui-input-label",10),d(15,"transloco"),a(16,"ui-select",13),d(17,"transloco"),d(18,"transloco"),_("searchEvent",function(c){return t.onSearchApprovers(c)})("clearSearch",function(){return t.onClearApproverSearch()}),ke(19,wi,1,2,"ng-template",null,1,ue)(21,Di,1,2,"ng-template",null,2,ue),s()(),a(23,"div",9),v(24,"ui-input-label",10),d(25,"transloco"),a(26,"ui-select",14),d(27,"transloco"),d(28,"transloco"),_("searchEvent",function(c){return t.onSearchApprovers(c)})("clearSearch",function(){return t.onClearApproverSearch()}),ke(29,xi,1,2,"ng-template",null,1,ue)(31,Ti,1,2,"ng-template",null,2,ue),s(),h(33,Ei,1,1),s(),a(34,"div"),v(35,"ui-input-label",10),d(36,"transloco"),v(37,"textarea",15),d(38,"transloco"),a(39,"div",16)(40,"div"),h(41,Ai,1,1),s(),a(42,"div",17),j(43),d(44,"transloco"),s()()(),h(45,Ii,14,12,"div"),s()(),a(46,"div",18)(47,"ui-button",19),d(48,"transloco"),_("buttonClick",function(){return t.close()}),s(),a(49,"ui-button",20),_("buttonClick",function(){return t.saveProject()}),s()()()),i&2){let r=it(4);n(),l("title",t.title),n(2),l("formGroup",t.projectForm),n(2),f(t.project()?6:5),n(3),l("label",u(9,49,"projectDialog.labelProjectCode"))("isMandatory",!1),n(2),l("placeholder",K(u(11,51,"projectDialog.placeholderEnterProjectCode"))),n(2),f(t.isProjectCategoryRestrictionEnabled()?12:-1),n(2),l("label",u(15,53,t.parentProjectName()?"projectDialog.labelSubprojectApprover1":"projectDialog.labelProjectApprover1"))("isMandatory",!1),n(2),l("options",t.approverUsers())("optionLabel","full_name")("placeholder",u(17,55,t.parentProjectName()?"projectDialog.placeholderSelectSubprojectApprover1":"projectDialog.placeholderSelectProjectApprover1"))("showClearIcon",!0)("showSearch",!0)("useApiForSearch",!0)("totalCount",t.totalApproversCount())("dropdownSearchPlaceholder",ee(18,57,"projectDialog.searchApproverDropdownPlaceholder",M(75,Zt,t.totalApproversCount()))),n(8),l("label",u(25,60,t.parentProjectName()?"projectDialog.labelSubprojectApprover2":"projectDialog.labelProjectApprover2"))("isMandatory",!1),n(2),l("options",t.approverUsers())("optionLabel","full_name")("placeholder",u(27,62,t.parentProjectName()?"projectDialog.placeholderSelectSubprojectApprover2":"projectDialog.placeholderSelectProjectApprover2"))("showClearIcon",!0)("showSearch",!0)("useApiForSearch",!0)("totalCount",t.totalApproversCount())("dropdownSearchPlaceholder",ee(28,64,"projectDialog.searchApproverDropdownPlaceholder",M(77,Zt,t.totalApproversCount()))),n(7),f(t.projectForm.errors?33:-1),n(2),l("label",u(36,67,"projectDialog.labelDescription"))("isMandatory",!1),n(2),l("placeholder",K(u(38,69,"projectDialog.placeholderEnterDescription")))("ngClass",M(79,Re,t.projectForm.controls.description.touched&&t.projectForm.controls.description.invalid)),n(4),f(t.projectForm.controls.description.errors?41:-1),n(),l("ngClass",M(81,Be,t.projectForm.controls.description.errors==null?null:t.projectForm.controls.description.errors.maxlength)),n(),H("",(t.projectForm.controls.description.value==null?null:t.projectForm.controls.description.value.length)||0," ",u(44,71,"projectDialog.characterCountSuffix")),n(2),f(t.isBillableEnabled()?45:-1),n(2),l("label",u(48,73,"projectDialog.buttonCancel"))("buttonType",t.buttonType.OUTLINE_SECONDARY),n(2),l("validateForm",!0)("formToValidate",t.projectForm)("formElement",r)("isDisabled",t.buttonDisabled)("label",t.saveButtonLabel)("customClasses","tw:ml-spacing-16")("buttonType",t.buttonType.PRIMARY)("isLoading",t.showButtonLoader)}},dependencies:[fe,he,ne,mt,dt,re,ut,vt,ht,gt,Et,Te,ae,$,Pt,Wt,xt,bt,At,Mt,wt,Nt,It,W],styles:[`@layer properties;.textarea{resize:none;padding:var(--tw-padding-spacing-12, var(--size-12))}.textarea::placeholder{color:var(--tw-color-text-disable, var(--text-disable))}.input-text{max-height:34px;width:100%;border-radius:var(--tw-radius-border-radius-2xs, .25rem);border-style:var(--tw-border-style);border-width:1px;--tw-border-style: solid;border-style:solid;border-color:var(--tw-color-input-border-color, var(--input-border-color));padding-block:var(--tw-padding-spacing-10, var(--size-10));padding-left:var(--tw-padding-spacing-14, var(--size-14));color:var(--tw-color-text-secondary, var(--text-secondary))}.input-text:enabled:focus{border-color:var(--tw-color-label-text, var(--label-text))}.input-text.ng-valid,.input-text.ng-untouched{border-color:var(--tw-color-input-border-color, var(--input-border-color))}:is(.input-text.ng-valid,.input-text.ng-untouched):focus{border-color:var(--tw-color-label-text, var(--label-text))}.input-text.ng-touched.ng-invalid,.p-inputtext.ng-dirty.ng-invalid,.p-textarea.ng-dirty.ng-invalid{border-color:var(--tw-color-border-danger, var(--border-danger))}.input-label{padding-top:var(--tw-padding-spacing-8, var(--size-8));font-size:var(--tw-text-size-14, var(--size-14));color:var(--tw-color-text-label, var(--text-label))}input::placeholder{color:var(--tw-color-text-disable, var(--text-disable))}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}} 2/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ 3`],encapsulation:2})}return o}
3)();function Ni(o,m){if(o&1){let e=V();a(0,"ui-button",2),d(1,"transloco"),_("buttonClick",function(t){F(e);let r=g();return E(r.openAddSubProjectDialog(t.event,r.project()))}),s()}if(o&2){let e=g();l("buttonSize",e.buttonSize.SMALL)("buttonType",e.buttonType.OUTLINE_PRIMARY_TEXT)("customClasses","tw:text-size-14!")("label",u(1,4,"projectActionCell.addSubprojectLabel"))}}function ki(o,m){o&1&&j(0," - ")}var ei=(()=>{class o{project=S(null);buttonType=P;buttonSize=Se;dialogService=p(se);toastMessageService=p(X);routingService=p(oe);componentDestroyed$=new O;trackingService=p(J);translocoService=p(L);applyProjectEnabledFilter(){let e=[];this.routingService.getQueryParams().search_model&&(e=JSON.parse(atob(this.routingService.getQueryParams().search_model))),e=e.filter(r=>r.is_enabled===void 0),e=[...e,{is_enabled:!0}];let i=btoa(JSON.stringify(e)),t=N(w({},this.routingService.getQueryParams()),{search_model:i});this.routingService.navigate(this.routingService.getCurrentUrl(),t,{reload:!0})}openAddSubProjectDialog(e,i){if(!i.isHeaderRow)return;e.stopPropagation(),this.dialogService.open(Ee,{data:{parentProjectName:i.data.name,isProjectCategoryRestrictionEnabled:i.enable_category_restriction_settings??!1,source:"angular"}}).onClose.pipe(b(this.componentDestroyed$)).subscribe(r=>{r===A.SUCCESS?(this.trackingService.eventTrack("Subproject - added",{parentProjectId:i.data.id,parentProjectName:i.data.name}),this.toastMessageService.showSuccessToast(this.translocoService.translate("projectActionCell.subprojectAddedSuccessToast")),this.applyProjectEnabledFilter()):r===A.ERROR&&this.trackingService.eventTrack("Error on adding subproject",{parentProjectId:i.data.id,parentProjectName:i.data.name})})}gridCellInit(e){this.project.set(e.rowData)}ngOnDestroy(){this.componentDestroyed$.next(),this.componentDestroyed$.complete()}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["feature-project-action-cell"]],decls:3,vars:1,consts:[[1,"tw:w-full","tw:h-full","tw:flex","tw:items-center","tw:gap-spacing-6","tw:relative"],[3,"buttonSize","buttonType","customClasses","label"],[3,"buttonClick","buttonSize","buttonType","customClasses","label"]],template:function(i,t){i&1&&(a(0,"div",0),h(1,Ni,2,6,"ui-button",1)(2,ki,1,0),s()),i&2&&(n(),f(t.project().isHeaderRow?1:2))},dependencies:[$,ae,W],encapsulation:2})}return o})();function Ri(o,m){if(o&1){let e=V();a(0,"ui-switch",2),at("ngModelChange",function(t){F(e);let r=g();return nt(r.project().data.is_enabled,t)||(r.project().data.is_enabled=t),E(t)}),_("ngModelChange",function(){F(e);let t=g();return E(t.changeState(t.project()))})("click",function(t){return t.stopPropagation()}),s()}if(o&2){let e=g();l("showState",!0),rt("ngModel",e.project().data.is_enabled),l("ariaLabel",e.project().data.name)}}function Bi(o,m){o&1&&j(0," - ")}var ti=(()=>{class o{project=S(null);componentDestroyed$=new O;dialogService=p(se);toastMessageService=p(X);projectsService=p(G);routingService=p(oe);trackingService=p(J);dialogRef=p(Y,{optional:!0});sanitizer=p(ve);translocoService=p(L);router=p(je);updateProject(e,i,t){this.projectsService.post(C.ADMIN,this.projectsService.transformProjectGridToUpdate(e)).pipe(b(this.componentDestroyed$)).subscribe({next:()=>{this.toastMessageService.showSuccessToast(this.translocoService.translate("projectEnabledCell.toastSuccessMessage",{entity:i,finalState:t})),this.trackingService.eventTrack(`Project ${t} action row clicked`,{Page:"Settings projects",ProjectId:e.data.id}),this.routingService.reloadCurrentPage()},error:r=>{this.toastMessageService.showErrorToast(this.translocoService.translate("projectEnabledCell.toastErrorGeneric")),this.trackingService.eventTrack(`Project ${t} action failed`,{Page:"Settings projects",ProjectId:e.data.id,error:r});let c=this.project();c&&this.project.set(N(w({},c),{data:N(w({},c.data),{is_enabled:!c.data.is_enabled})}))}})}changeState(e){let i=e.data.is_enabled?this.translocoService.translate("projectEnabledCell.stateEnabled"):this.translocoService.translate("projectEnabledCell.stateDisabled"),t=e.isHeaderRow?this.translocoService.translate("projectEnabledCell.entityProject"):this.translocoService.translate("projectEnabledCell.entitySubproject");!e.data.is_enabled&&e.data.restricted_spender_user_ids?.length>0?(this.showDisableConfirmationDialog(),this.dialogRef?.onClose.pipe(b(this.componentDestroyed$)).subscribe(r=>{r?this.updateProject(e,t,i):e.data.is_enabled=!0})):this.updateProject(e,t,i)}showDisableConfirmationDialog(){let e=this.translocoService.translate("projectEnabledCell.confirmationDisableProjectMessageHtml");this.dialogRef=this.dialogService.openConfirmationModal({header:{title:this.translocoService.translate("projectEnabledCell.dialogHeaderTitleDisableProject"),type:te.WARNING},content:this.sanitizer.bypassSecurityTrustHtml(e),showConfirmationMessage:!0,actions:{primaryAction:{label:this.translocoService.translate("projectEnabledCell.buttonDisableLabel"),type:P.PRIMARY,callbackMethod:()=>{this.dialogRef?.close(!0)}},secondaryAction:{label:this.translocoService.translate("projectEnabledCell.buttonCancelLabel"),type:P.OUTLINE_SECONDARY,callbackMethod:()=>this.dialogRef?.close()}}}),setTimeout(()=>{let i=document.getElementById("manageEmployeesLink");i&&i.addEventListener("click",t=>{t.preventDefault(),this.dialogRef?.close(),this.router.navigateByUrl("settings/employees/manage_employees")})},0)}gridCellInit(e){this.project.set(e.rowData)}ngOnDestroy(){this.componentDestroyed$.next(),this.componentDestroyed$.complete()}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["feature-project-enabled-cell"]],decls:3,vars:1,consts:[[1,"tw:w-full","tw:h-full","tw:flex","tw:items-center","tw:gap-spacing-6","tw:relative"],[3,"showState","ngModel","ariaLabel"],[3,"ngModelChange","click","
3showState","ngModel","ariaLabel"]],template:function(i,t){i&1&&(a(0,"div",0),h(1,Ri,1,3,"ui-switch",1)(2,Bi,1,0),s()),i&2&&(n(),f(!t.project().isHeaderRow||t.project().isHeaderRow&&!t.project().isSubItemPresent?1:2))},dependencies:[ne,re,_e,kt,$],encapsulation:2})}return o})();function Li(o,m){if(o&1&&(a(0,"div",1),j(1),s()),o&2){let e=g();n(),y(e.project().data.name)}}function $i(o,m){if(o&1&&(a(0,"div",1),j(1),s()),o&2){let e=g(2);n(),y(e.project().data.sub_project)}}function Oi(o,m){o&1&&j(0," - ")}function zi(o,m){if(o&1&&(v(0,"ui-svg-sprite",2),h(1,$i,2,1,"div",1)(2,Oi,1,0)),o&2){let e=g();l("icon","arrow-enter")("classes","tw:flex tw:w-16-px tw:h-16-px tw:fill-icon-tertiary"),n(),f(e.project().isSubItemPresent?1:2)}}var ii=(()=>{class o{project=S(null);gridCellInit(e){this.project.set(e.rowData)}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["ui-project-name-cell"]],decls:3,vars:1,consts:[[1,"tw:w-full","tw:h-full","tw:flex","tw:items-center","tw:gap-spacing-8","tw:relative"],[1,"tw:text-text-secondary"],[3,"icon","classes"]],template:function(i,t){i&1&&(a(0,"div",0),h(1,Li,2,1,"div",1)(2,zi,3,3),s()),i&2&&(n(),f(t.project().isHeaderRow?1:2))},dependencies:[xe,$],encapsulation:2})}return o})();var oi=(()=>{class o{isBillableEnabled=B(()=>this.billableField()?.is_enabled||!1);employeeService=p(Pe);projectsService=p(G);translocoService=p(L);utilityService=p(we);expenseFieldsService=p(le);billableField=ye(this.expenseFieldsService.watchExpenseFieldByColumnName("is_billable",C.ADMIN),{initialValue:void 0});generateSearchQueryParamsForProjects(e){if(e){let i=this.utilityService.sanitizeSearchQuery(e);return{or:`(name.ilike."%${i}%",sub_project.ilike."%${i}%",code.ilike."%${i}%",description.ilike."%${i}%")`}}return{}}generateSortQueryParamsForProjects(e){return!e||!e.field?.includes("->")?{}:{order:`${e.field.split("->")[1]}.${e.order}`}}getDefaultColumns(){let e=[{name:this.translocoService.translate("services.projectsGrid.columnProjectName"),field:"data->name",id:"data->name",component:ii,group:this.translocoService.translate("services.projectsGrid.columnGroupFields"),styleClass:"tw:min-w-[130px]"},{name:this.translocoService.translate("services.projectsGrid.columnCode"),field:"data->code",id:"data->code",group:this.translocoService.translate("services.projectsGrid.columnGroupFields"),styleClass:"tw:min-w-[90px]"},{name:this.translocoService.translate("services.projectsGrid.columnApprover1"),field:"approver1_full_name",id:"approver1_full_name",styleClass:"tw:min-w-[120px]",group:this.translocoService.translate("services.projectsGrid.columnGroupFields")},{name:this.translocoService.translate("services.projectsGrid.columnApprover2"),field:"approver2_full_name",id:"approver2_full_name",styleClass:"tw:min-w-[120px]",group:this.translocoService.translate("services.projectsGrid.columnGroupFields")},{name:this.translocoService.translate("services.projectsGrid.columnDescription"),field:"data->description",id:"data->description",group:this.translocoService.translate("services.projectsGrid.columnGroupFields"),styleClass:"tw:min-w-[130px]"}];return this.isBillableEnabled()&&e.push({name:this.translocoService.translate("services.projectsGrid.columnBillable"),field:"data->default_billable",id:"data->default_billable",group:this.translocoService.translate("services.projectsGrid.columnGroupFields"),component:Gt,styleClass:"tw:min-w-[100px]"}),e}getColumns(){return[...this.getDefaultColumns(),{name:this.translocoService.translate("services.projectsGrid.columnEnabled"),field:"data->is_enabled",id:"data->is_enabled",group:this.translocoService.translate("services.projectsGrid.columnGroupFields"),component:ti,styleClass:"tw:min-w-[100px]"},{name:"",field:"action",id:"action",styleClass:"tw:min-w-[150px]",component:ei}]}getDefaultProjectFilters(){return[{label:this.translocoService.translate("services.projectsGrid.filterLabelProjectName"),field:"name",type:"MULTI_SELECT",styleClass:"tw:min-w-[160px]",loadOptionsBySearchQuery:i=>this.projectsService.getByParams(C.ADMIN,{name:`ilike.${i}%`,limit:10,offset:0}).pipe(T(t=>t.data.map(r=>({label:r.display_name,value:r.name})))),loadOptionsByIds:i=>this.projectsService.getByParams(C.ADMIN,{id:`in.(${i.map(t=>`"${t}"`).join(",")})`}).pipe(T(t=>t.data.map(r=>({label:r.display_name,value:r.name})))),queryParamsGenerator(i){return{and:`(${this.field}.in.(${i.map(t=>`"${t.value}"`).join(",")}))`}},filterValueGenerator(i){let t=i.and;if(!t||t.length===0)return null;let r=new RegExp(`\\(${this.field}\\.in.\\((.*?)\\)\\)`),c=t.find(Q=>r.test(Q));if(!c)return null;let D=c.match(r);if(!D||!D[1])return null;let Me=D[1].split(",").map(Q=>Q.replace(/"/g,"").trim()).map(Q=>({label:Q,value:Q}));return x(Me)}},{label:this.translocoService.translate("services.projectsGrid.filterLabelEnabled"),type:"BOOLEAN",showAsQuickFilter:!0,field:"is_enabled"},{label:this.translocoService.translate("services.projectsGrid.filterLabelDescription"),field:"description",type:"TEXT"},{label:this.translocoService.translate("services.projectsGrid.filterLabelCode"),field:"code",type:"MULTI_SELECT",styleClass:"tw:min-w-[160px]",loadOptionsBySearchQuery:i=>this.projectsService.getByParams(C.ADMIN,{code:`ilike.${i}%`,limit:10,offset:0}).pipe(T(t=>t.data.map(r=>({label:`${r.code} (${r.display_name})`,value:r.code||""})))),loadOptionsByIds:i=>this.projectsService.getByParams(C.ADMIN,{id:`in.(${i.map(t=>`"${t}"`).join(",")})`}).pipe(T(t=>t.data.map(r=>({label:`${r.code} (${r.display_name})`,value:r.code||""}))))}]}getApproverFilter(e,i){return{label:e,field:i,type:"MULTI_SELECT",styleClass:"tw:min-w-[160px]",loadOptionsBySearchQuery:t=>this.employeeService.getAllByParams(C.ADMIN,{order:"user->full_name.asc,user->email.asc",limit:10,or:`(user->full_name.ilike."${t}%",user->email.ilike."${t}%")`}).pipe(T(r=>r.map(c=>({label:c.user.full_name,value:c.user.id,metaText:c.user.email})))),loadOptionsByIds:t=>this.employeeService.getAllByParams(C.ADMIN,{user_id:`in.(${t.map(r=>`"${r}"`).join(",")})`}).pipe(T(r=>r.map(c=>({label:c.user.full_name,value:c.user.id,metaText:c.user.email}))))}}getEmployeeFilters(){return[this.getApproverFilter(this.translocoService.translate("services.projectsGrid.filterLabelApprover1"),"approver_users->0->id"),this.getApproverFilter(this.translocoService.translate("services.projectsGrid.filterLabelApprover2"),"approver_users->1->id")]}getDefaultAppliedFilters(){return[{is_enabled:!0}]}getFilters(){let e=[{group:this.translocoService.translate("services.projectsGrid.filterGroupFields"),filters:[...this.getDefaultProjectFilters()]}];return e.push({group:this.translocoService.translate("services.projectsGrid.filterGroupUserFields"),filters:this.getEmployeeFilters()}),e}getConfig(){return{defaultQueryParams:{},defaultAppliedFilters:this.getDefaultAppliedFilters(),defaultSortConfig:{field:"data->name",order:"asc"},columnDefs:this.getColumns(),filters:this.getFilters(),exportOnlyColumns:[]}}static \u0275fac=function(i){return new(i||o)};static \u0275prov=He({token:o,factory:o.\u0275fac,providedIn:"root"})}return o}
3)();var $e=o=>({count:o});function Ui(o,m){o&1&&(a(0,"div",3),v(1,"ui-spinner-loader"),s())}function Gi(o,m){if(o&1&&(a(0,"div",11),v(1,"ui-svg-sprite",12),a(2,"span"),j(3),d(4,"transloco"),s()()),o&2){let e=g(4);n(),l("icon","check"),n(2),y(ee(4,2,"deleteProjectsDialog.employeeRestrictionsBasedOnProjectDeleted",M(5,$e,e.deletableProjectIds.length)))}}function Vi(o,m){if(o&1&&(a(0,"div",10),h(1,Gi,5,7,"div",11),s()),o&2){let e=g(3);n(),f(e.isEmployeeProjectRestrictionEnabled?1:-1)}}function Qi(o,m){if(o&1&&(a(0,"div",7)(1,"div",9),j(2),s(),h(3,Vi,2,1,"div",10),s()),o&2){let e=g(2);n(2),y(e.deleteSummaryTitle),n(),f(e.isEmployeeProjectRestrictionEnabled?3:-1)}}function qi(o,m){if(o&1&&(a(0,"div",11),v(1,"ui-svg-sprite",12)(2,"span",14),s()),o&2){let e=g(3);n(),l("icon","check"),n(),l("innerHTML",e.nonDeletableProjectsSummary,Je)}}function Hi(o,m){if(o&1&&(a(0,"div",11),v(1,"ui-svg-sprite",12),a(2,"span"),j(3),d(4,"transloco"),s()()),o&2){let e=g(3);n(),l("icon","check"),n(2),y(ee(4,2,"deleteProjectsDialog.ensureNoExpensesLinkedToProject",M(5,$e,e.nonDeletableProjectsCount)))}}function Yi(o,m){if(o&1&&(a(0,"div",7)(1,"div",13)(2,"div",9),j(3),s(),a(4,"div"),j(5),d(6,"transloco"),s()(),a(7,"div",10),h(8,qi,3,2,"div",11)(9,Hi,5,7,"div",11),s()()),o&2){let e=g(2);n(3),de("",e.nonDeletableProjectsSummaryTitle,"\xA0"),n(2),y(ee(6,3,"deleteProjectsDialog.toDeleteSelectedProject",M(6,$e,e.nonDeletableProjectsCount))),n(3),f(e.nonDeletableProjectsSummary?8:9)}}function Wi(o,m){o&1&&(a(0,"div",8),j(1),d(2,"transloco"),s()),o&2&&(n(),y(u(2,1,"deleteProjectsDialog.actionCannotBeReversedContinue")))}function Ji(o,m){if(o&1&&(a(0,"div",4)(1,"div",6),h(2,Qi,4,2,"div",7),h(3,Yi,10,8,"div",7),s(),h(4,Wi,3,3,"div",8),s()),o&2){let e=g();n(2),f(e.deletableProjectIds.length>0?2:-1),n(),f(e.deletableProjectIds.length<e.projects.length?3:-1),n(),f(e.deletableProjectIds.length>0?4:-1)}}var ri=(()=>{class o{projects;orgSettings;modalSize=pt;modalHeaderTypes=te;deletableProjectIds=[];alertTypes=be;title;deleteSummaryTitle;nonDeletableProjectsSummaryTitle;nonDeletableProjectsSummary;nonDeletableProjectsCount;isSummaryLoading;isDeleteInProgress=!1;primaryAction;secondaryAction;isEmployeeProjectRestrictionEnabled;config=p(Ce);dialogRef=p(Y);orgSettingsService=p(De);projectsService=p(G);policyService=p(Lt);expenseRulesService=p(Rt);budgetsService=p(Qt);expenseFieldsService=p(le);trackingService=p(J);translocoService=p(L);destroy$=new O;trackDeleteSummary(e){let i=e.projects.map(t=>t.id);this.projects.length!==e.delete_count&&this.trackingService.eventTrack("Delete projects summary",{"Selected projects count":this.projects.length,"Excluded projects count":this.projects.length-e.delete_count,"Selected project names":this.projects.map(t=>t.name),"Excluded project names":this.projects.filter(t=>!i.includes(t.id)).map(t=>t.name)})}getNonDeletableProjectsSummary(){let e=this.projects.map(t=>t.id),i=`ov.{${e.join(",")}}`;return pe({policies:this.policyService.getByParams("admin",{is_retired:"eq.false",is_enabled:"eq.true",is_approver_policy:"eq.false"}),expenseRules:this.expenseRulesService.getExpenseRules(),budgetsCount:this.budgetsService.getBudgetCount({limit:0,project_ids:i,is_enabled:"eq.true"}),projectField:this.expenseFieldsService.getExpenseFieldByColumnName("project_id","admin"),dependentFields:this.expenseFieldsService.getAll("admin",{is_enabled:"eq.true",type:"eq.DEPENDENT_SELECT"})}).pipe(T(({policies:t,expenseRules:r,budgetsCount:c,projectField:D,dependentFields:z})=>{let Me=t.filter(I=>I.expense_project_ids?.some(Z=>e.includes(Z))??!1).length,Q=r.data.filter(I=>I.is_suggested!==!0&&I.is_suggestion_dismissed!==!0&&I.set?.project_id!==void 0&&e.includes(I.set.project_id)).length,ai=D?z.filter(I=>I.parent_field_id===D.id).length:0,si={policiesCount:Me,expenseRulesCount:Q,budgetsCount:c,dependentFieldsCount:ai},li=this.nonDeletableProjectsCount>1?this.translocoService.translate("deleteProjectsDialog.projectsAre"):this.translocoService.translate("deleteProjectsDialog.projectIs"),ci={policiesCount:this.translocoService.translate("deleteProjectsDialog.itemPolicy"),expenseRulesCount:this.translocoService.translate("deleteProjectsDialog.itemExpenseRule"),budgetsCount:this.translocoService.translate("deleteProjectsDialog.itemBudget"),dependentFieldsCount:this.translocoService.translate("deleteProjectsDialog.itemDependentFields")},Oe=Object.entries(si).filter(([I,Z])=>Z!==0);if(Oe.length>0){let I=Oe.map(([Ae,ze])=>ci[Ae]),Z="";if(I.length===1)Z=I[0];else{let Ae=I.slice(0,-1).join(", "),ze=I[I.length-1];Z=`${Ae} ${this.translocoService.translate("deleteProjectsDialog.conjunctionOr")} ${ze}`}return`${this.translocoService.translate("deleteProjectsDialog.ensureNotUsedInAnyPrefix")}${li}${this.translocoService.translate("deleteProjectsDialog.ensureNotUsedInAnySuffix",{itemList:Z})}`}return""}))}setDeletableSummary(e){return this.deletableProjectIds=e.projects,e.delete_count>0&&(this.projects.length===e.delete_count?this.deleteSummaryTitle=this.translocoService.translate("deleteProjectsDialog.countSelectedProjectBeingDeleted",{count:e.delete_count}):this.projects.length>1&&(this.deleteSummaryTitle=this.translocoService.translate("deleteProjectsDialog.deletableCountOfTotalSelectedProjectsAreBeingDeleted",{deletableCount:e.delete_count,totalCount:this.projects.length}))),e}setNonDeletableSummary(e){return e.delete_count<this.projects.length?(this.nonDeletableProjectsCount=this.projects.length-e.delete_count,this.nonDeletableProjectsSummaryTitle=this.translocoService.translate("deleteProjectsDialog.countProjectCannotBeDeleted",{count:this.nonDeletableProjectsCount}),this.getNonDeletableProjectsSummary().pipe(T(i=>this.nonDeletableProjectsSummary=i),T(()=>e))):x(e)}setActionState(){this.deletableProjectIds.length>0?(this.primaryAction={label:this.translocoService.translate("deleteProjectsDialog.primaryActionDelete"),type:P.PRIMARY,callbackMethod:this.deleteProjects.bind(this),loadingText:this.translocoService.translate("deleteProjectsDialog.primaryActionDeleting"),loading:this.isDeleteInProgress},this.secondaryAction={label:this.translocoService.translate("deleteProjectsDialog.secondaryActionCancel"),type:P.OUTLINE_SECONDARY,callbackMethod:this.closeDialog.bind(this),disabled:this.isDeleteInProgress}):(this.primaryAction={label:this.translocoService.translate("deleteProjectsDialog.primaryActionOk"),t
3ype:P.PRIMARY,callbackMethod:this.closeDialog.bind(this)},this.secondaryAction=void 0)}deleteProjects(){this.isDeleteInProgress=!0,this.setActionState();let e=this.deletableProjectIds.map(i=>i.id);this.projectsService.deleteBulk(C.ADMIN,e).pipe(q(i=>(this.config?.data?this.dialogRef.close({action:A.ERROR,error:i}):this.dialogRef.close(i),me(()=>i))),U(()=>{this.isDeleteInProgress=!1,this.setActionState()}),b(this.destroy$)).subscribe(()=>{this.config?.data?this.dialogRef.close({action:A.SUCCESS,deletedProjectIds:e}):this.dialogRef.close(e)})}setDialogConfig(){let{projects:e,orgSettings:i}=this.config.data;this.projects=e,this.orgSettings=i,this.isEmployeeProjectRestrictionEnabled=this.orgSettingsService.isEmployeeProjectRestrictionEnabled(this.orgSettings)}closeDialog(){this.config?.data?this.dialogRef.close(A.CANCEL):this.dialogRef.close()}ngOnInit(){this.config?.data&&this.setDialogConfig(),this.title=this.translocoService.translate("deleteProjectsDialog.deleteProjectTitle",{count:this.projects?.length});let e=this.projects.map(i=>i.id);this.isSummaryLoading=!0,this.projectsService.deleteSummary(C.ADMIN,e).pipe(k(i=>this.setNonDeletableSummary(i)),T(i=>this.setDeletableSummary(i)),ge(i=>{this.setActionState(),this.isSummaryLoading=!1,this.trackDeleteSummary(i)}),b(this.destroy$)).subscribe()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["feature-delete-projects-dialog"]],decls:7,vars:6,consts:[[1,"tw:w-[515px]","tw:rounded-sm","tw:flex","tw:flex-col","tw:justify-between"],[3,"closeModal","type","title"],[1,"tw:grow"],[1,"tw:flex","tw:flex-col","tw:items-center","tw:justify-center"],[1,"tw:text-text-secondary"],[3,"primaryAction","secondaryAction"],[1,"tw:flex","tw:flex-col","tw:gap-spacing-28"],[1,"tw:flex","tw:flex-col","tw:gap-spacing-16"],[1,"tw:mt-spacing-28"],[1,"tw:text-text-primary","tw:font-500"],[1,"tw:flex","tw:flex-col","tw:gap-spacing-12"],[1,"tw:flex","tw:items-center","tw:gap-spacing-12"],["classes","tw:w-18-px tw:h-18-px",3,"icon"],[1,"tw:flex"],[3,"innerHTML"]],template:function(i,t){i&1&&(a(0,"div",0)(1,"ui-modal-header",1),_("closeModal",function(){return t.closeDialog()}),s(),a(2,"ui-modal-content",2),h(3,Ui,2,0,"div",3),h(4,Ji,5,3,"div",4),s(),v(5,"ui-modal-actions",5)(6,"div"),s()),i&2&&(n(),l("type",t.modalHeaderTypes.DANGER)("title",t.title),n(2),f(t.isSummaryLoading?3:-1),n(),f(t.isSummaryLoading?-1:4),n(),l("primaryAction",t.primaryAction)("secondaryAction",t.secondaryAction))},dependencies:[Te,_t,xe,$,Ct,Fe,W],encapsulation:2})}return o})();var ni=o=>({"tw:opacity-50 tw:pointer-events-none":o});function Xi(o,m){if(o&1){let e=V();a(0,"ui-split-button",20),d(1,"transloco"),_("buttonClick",function(){F(e);let t=g();return E(t.openProjectsDialog())}),s()}if(o&2){let e=g();l("label",u(1,3,"projects.addProjectButton"))("icon","plus-square")("menuItems",e.menuItems)}}function Zi(o,m){if(o&1&&v(0,"ui-grid-actions",16),o&2){let e=g();l("actions",e.actions())}}function Ki(o,m){o&1&&(a(0,"div",21)(1,"div",22),v(2,"ui-shimmers",23),s(),a(3,"div",24),v(4,"ui-shimmers",23),s()()),o&2&&(n(2),ot("tw:w-[30px]"),l("height",24),n(2),l("height",24))}function eo(o,m){if(o&1&&Ze(0,Ki,5,4,"div",21,Xe),o&2){let e=g();Ke(e.gridShimmers())}}function to(o,m){if(o&1){let e=V();a(0,"ui-grid",25),_("columnSort",function(t){F(e);let r=g();return E(r.onColumnSort(t))})("currentSelection",function(t){F(e);let r=g();return E(r.onProjectSelected(t))})("selectAll",function(t){F(e);let r=g();return E(r.onSelectAllToggled(t))})("rowClicked",function(t){F(e);let r=g();return E(r.onRowClicked(t))})("manageColumns",function(t){F(e);let r=g();return E(r.onManageColumns(t))})("pageNumberChange",function(t){F(e);let r=g();return E(r.onPageNumberChange(t))})("pageSizeChange",function(t){F(e);let r=g();return E(r.onPageSizeChange(t))}),s()}if(o&2){let e=g();l("columnConfig",e.columns())("data",e.projects())("dataKey","id")("selectedRows",e.selectedProjects())("sortConfig",e.sortConfig())("currentPageNumber",e.pageNumber())("totalItemsCount",e.projectsCount())("showOpenInNewTab",!1)("enableRowSelection",!0)("isSelectAllOnThisPageDefault",!0)("showSelectAllDropdown",!1)("isSettingsGrid",!0)}}function io(o,m){if(o&1&&(a(0,"div",19),v(1,"ui-zero-state",26),d(2,"transloco"),s()),o&2){let e=g();n(),l("imageUrl","assets/images/search-empty-state.svg")("imageClass","tw:w-[160px] tw:h-[160px]")("noDataText",u(2,4,"projects.zeroStateLooksLikeYouveGot"))("noDataSubText",e.zeroStateMessage())}}function oo(o,m){if(o&1){let e=V();a(0,"div",27),v(1,"img",30),a(2,"div",31),j(3),d(4,"transloco"),s(),a(5,"div",32)(6,"ui-button",33),d(7,"transloco"),_("buttonClick",function(){F(e);let t=g(2);return E(t.openProjectsDialog())}),s(),a(8,"ui-button",33),d(9,"transloco"),_("buttonClick",function(){F(e);let t=g(2);return E(t.openBulkAddProjectsDialog())}),s()()()}if(o&2){let e=g(2);n(3),de(" ",u(4,13,"projects.zeroStateNoProjectsAdded")," "),n(3),l("buttonType",e.buttonType.PRIMARY)("label",u(7,15,"projects.addProjectButton"))("iconName","plus-square")("iconPos","left")("buttonSize",e.buttonSize.MEDIUM)("iconClasses","tw:flex tw:mr-spacing-8 tw:w-14-px tw:h-14-px tw:fill-icon-white"),n(2),l("buttonType",e.buttonType.OUTLINE_SECONDARY)("label",u(9,17,"projects.addMultipleProjects"))("iconName","plus-square")("iconPos","left")("buttonSize",e.buttonSize.MEDIUM)("iconClasses","tw:flex tw:mr-spacing-8 tw:w-14-px tw:h-14-px tw:fill-icon-brand-primary")}}function ro(o,m){o&1&&(a(0,"div",28)(1,"ui-spinner-loader",34),j(2),d(3,"transloco"),s()()),o&2&&(n(),l("styleClass","spinner-50"),n(),y(u(3,2,"projects.loading")))}function no(o,m){if(o&1){let e=V();a(0,"div",29)(1,"div",35),v(2,"img",30),s(),a(3,"h1",36),j(4),d(5,"transloco"),s(),a(6,"p",37),j(7),d(8,"transloco"),v(9,"ui-open-new-tab",38),s(),a(10,"ui-button",39),d(11,"transloco"),_("buttonClick",function(){F(e);let t=g(2);return E(t.toggleProjects())}),s()()}if(o&2){let e=g(2);n(4),y(u(5,6,"projects.projectsTitle")),n(3),de("",u(8,8,"projects.addProjectsForInsights")," "),n(2),l("url","https://www.fylehq.com/help/en/articles/1203423-add-projects"),n(),l("buttonType",e.buttonType.PRIMARY)("label",u(11,10,"projects.enableProjectsButton"))("buttonSize",e.buttonSize.MEDIUM)}}function ao(o,m){if(o&1&&(h(0,oo,10,19,"div",27),h(1,ro,4,4,"div",28),h(2,no,12,12,"div",29)),o&2){let e,i,t=g();
3f(!t.isProjectsLoading()&&((e=t.orgSettings().projects)!=null&&e.enabled)?0:-1),n(),f(t.isProjectsLoading()?1:-1),n(),f(!((i=t.orgSettings().projects)!=null&&i.enabled)&&!t.isProjectsLoading()?2:-1)}}var Hn=(()=>{class o{orgSettings=st.required();showHeader=S(!1);headerButtonLabel=S("");isProjectsToggleLoading=S(!1);showPrompt=S(!1);promptInputs={target:null,promptMsg:"",autoClose:!1,primaryBtnText:"",secondaryBtnText:"",styleClass:"tw:w-[204px]"};totalProjectsCount=S(0);projectsCount=S(0);searchQuery=S("");actions=B(()=>this.initializeActions());appliedFilters=S([]);filters=B(()=>this.config().filters);quickFilters=B(()=>this.flattenedFilters().filter(e=>e.showAsQuickFilter));config=B(()=>this.projectsGridSerice.getConfig());sortConfig=S(null);pageNumber=S(1);columnOrderMap=S({});columns=B(()=>this.gridService.getColumnsFromOrderMap(this.config().columnDefs,this.columnOrderMap()));isColumnConfigurationLoading=S(!1);projectsData=S([]);projects=S([]);isProjectsLoading=S(!1);selectedProjects=S([]);gridShimmers=S(Array.from({length:10}));zeroStateMessage=S("");menuItems;buttonType=P;buttonSize=Se;isSelectedAll=S(!1);flattenedFilters=B(()=>this.gridService.getFlattenedFilters(this.config().filters));queryParams=B(()=>w(w(w(w(w({},this.config().defaultQueryParams),this.projectsGridSerice.generateSearchQueryParamsForProjects(this.searchQuery())),this.projectsGridSerice.generateSortQueryParamsForProjects(this.sortConfig())),this.gridService.generatePaginationQueryParams(this.pageNumber(),this.pageSize())),this.gridService.generateFiltersQueryParams(this.flattenedFilters(),this.appliedFilters())));componentDestroyed$=new O;onboardingService=p(St);markImportDimensionsTaskAsComplete(e){return this.onboardingService.getAndCreateAdminOnboardingFeatureConfigFlag({feature:"ADMIN_ONBOARDING_TASKS",key:"IMPORT_DIMENSIONS",sub_feature:"PROJECTS",is_shared:!0},C.ADMIN).pipe(ge(i=>{i!==null&&this.trackingService.eventTrack(e)}),b(this.componentDestroyed$))}trackingService=p(J);projectsService=p(G);gridService=p(Ft);dateService=p(Tt);projectsGridSerice=p(oi);dialogService=p(se);routingService=p(oe);toastMessageService=p(X);dialogRef=p(Y,{optional:!0});sanitizer=p(ve);orgSettingsService=p(De);featureConfigService=p(jt);translocoService=p(L);pageSize=S(this.gridService.getPageSizeFromStorage());cdr=p(ct);document=p(Ye);router=p(je);constructor(){We(()=>{this.router.navigate([],{queryParams:N(w({},this.routingService.getQueryParams()),{sort_column:this.sortConfig()?.field,sort_dir:this.sortConfig()?.order,page_number:this.pageNumber(),page_size:this.pageSize(),search_query:btoa(this.searchQuery()),search_model:btoa(JSON.stringify(this.appliedFilters()))})})})}fetchTotalProjectsCount(){this.isProjectsLoading.set(!0),this.projectsService.getCount(C.ADMIN,{}).pipe(b(this.componentDestroyed$),U(()=>this.isProjectsLoading.set(!1))).subscribe(e=>{this.totalProjectsCount.set(e.count||0),this.showHeader.set(this.orgSettings().projects?.enabled||this.totalProjectsCount()>0)})}fetchProjects(){this.isProjectsLoading.set(!0),this.projectsService.getByParams(C.ADMIN,this.queryParams()).pipe(b(this.componentDestroyed$),U(()=>this.isProjectsLoading.set(!1))).subscribe(e=>{this.projectsCount.set(e.count||0),this.projectsData.set(e.data);let i=Math.ceil(this.projectsCount()/this.pageSize());if(this.pageNumber()>i&&i>0){this.pageNumber.set(i),this.fetchProjects();return}this.projects.set(this.projectsService.transformProjectDataToGrid(this.projectsData(),this.orgSettings()))})}applyProjectEnabledFilter(e,i){let t=[];this.routingService.getQueryParams()?.search_model&&(t=JSON.parse(atob(this.routingService.getQueryParams().search_model))),t=t.filter(D=>D.is_enabled===void 0),t=[...t,{is_enabled:e}];let r=btoa(JSON.stringify(t)),c=N(w({},this.routingService.getQueryParams()),{search_model:r});return Ge(this.router.navigate([],{queryParams:c})).pipe(k(()=>i?this.markImportDimensionsTaskAsComplete("Admin onboarding: import dimensions task complete - project added manually"):x(null)),k(()=>this.routingService.reloadCurrentPage()))}bulkPost(e,i){this.isProjectsLoading.set(!0);let t=i.map(r=>this.projectsService.transformProjectGridToUpdate(r));this.projectsService.bulkPost(C.ADMIN,t).pipe(b(this.componentDestroyed$),U(()=>this.isProjectsLoading.set(!1))).subscribe({next:()=>{let r=e?this.translocoService.translate("projects.enabledStatus"):this.translocoService.translate("projects.disabledStatus"),c=this.translocoService.translate("projects.projectsStatusSuccess",{action:r});this.trackingService.eventTrack(`Bulk projects ${r}`,{Grid_Action_Performed:`Bulk ${r}`,Page:"Settings projects"}),this.toastMessageService.showSuccessToast(c),this.routingService.reloadCurrentPage()},error:r=>{this.toastMessageService.showErrorToast(this.translocoService.translate("projects.genericError"));let c=e?"enable":"disable";this.trackingService.eventTrack(`Bulk projects ${c} failed`,{Grid_Action_Performed:`Bulk ${c}`,Page:"Settings projects",error:r})}})}bulkEnableOrDisable(e){return Ue(this,null,function*(){let i=this.selectedProjects().filter(r=>r.data.is_enabled!==e&&r.data.id&&!r.uiBasedRow).map(r=>N(w({},r),{data:N(w({},r.data),{is_enabled:e})}));if(i.length===0){this.toastMessageService.showInfoToast(this.translocoService.translate("projects.noModificationNeededInfo"));return}let t=i.some(r=>r.data.restricted_spender_user_ids?.length>0);this.orgSettings().advanced_projects.enable_individual_projects&&!e&&t?(this.showDisableConfirmationDialog(),this.dialogRef?.onClose.pipe(b(this.componentDestroyed$)).subscribe(r=>{if(r)this.bulkPost(e,i);else return})):this.bulkPost(e,i)})}showDisableConfirmationDialog(){let e=this.translocoService.translate("projects.disableProjectsConfirmationMessage");this.dialogRef=this.dialogService.openConfirmationModal({header:{title:this.translocoService.translate("projects.disableProjectsTitle"),type:te.WARNING},content:this.sanitizer.bypassSecurityTrustHtml(e),showConfirmationMessage:!0,actions:{primaryAction:{label:this.translocoService.translate("projects.disableButton"),type:P.PRIMARY,callbackMethod:()=>{this.dialogRef?.close(!0)}},secondaryAction:{label:this.translocoService.translate("projects.cancelButton"),type:P.OUTLINE_SECONDARY,callbackMethod:()=>this.dialogRef?.close()}}}),Qe(0).pipe(b(this.componentDestroyed$)).subscribe(()=>{let i=this.document.getElementById("manageEmployeesLink");i&&i.addEventListener("click",t=>{t.preventDefault(),this.dialogRef?.close(),this.router.navigateByUrl("settings/employees/manage_employees")})})}showDisableRestrictionConfirmationDialog(e,i,t){this.orgSettings().advanced_projects[e]=i;let r=this.dialogService.openConfirmationModal({header:{title:this.translocoService.translate("projects.areYouSureTitle"),type:te.WARNING},content:`<div>${this.translocoService.translate(t)}
3</div>`,showConfirmationMessage:!0,actions:{primaryAction:{label:this.translocoService.translate("projects.yesDisableButton"),type:P.PRIMARY,callbackMethod:()=>r.close(!0)},secondaryAction:{label:this.translocoService.translate("projects.noGoBackButton"),type:P.OUTLINE_SECONDARY,callbackMethod:()=>r.close(!1)}}});r?.onClose.pipe(b(this.componentDestroyed$)).subscribe(c=>{c?this.postRestrictionSettings(e,i):this.rollbackSetting(e)})}openProjectsDialog(e,i){let t=this.translocoService.translate(i?"projects.subprojectEntity":"projects.projectEntity"),r=this.translocoService.translate(e?"projects.modeEdited":"projects.modeAdded");this.trackingService.eventTrack(`${t} Dialog Opened`,{mode:r,project:e,parentProjectName:i}),this.dialogRef=this.dialogService.open(Ee,{data:{project:e?.data||null,isProjectCategoryRestrictionEnabled:this.orgSettings().advanced_projects?.enable_category_restriction||!1,parentProjectName:i||null,source:"angular"}}),this.dialogRef?.onClose.pipe(b(this.componentDestroyed$),k(c=>c!==A.SUCCESS?x(null):(this.trackingService.eventTrack(`${t} ${r} successfully`,{mode:r,project:e,parentProjectName:i}),this.toastMessageService.showSuccessToast(this.translocoService.translate("projects.entityModeSuccessToast",{entity:t,mode:r})),r===this.translocoService.translate("projects.modeAdded")?this.applyProjectEnabledFilter(!0,!0):(this.resetSelectedProjects(),this.fetchTotalProjectsCount(),this.fetchProjects(),x(null))))).subscribe()}openDeleteDialog(){let e=this.selectedProjects().filter(t=>!t.uiBasedRow).map(t=>({id:t.data.id,name:t.data.name,is_enabled:t.data.is_enabled,sub_project:t.data.sub_project}));this.trackingService.eventTrack("Projects - delete dialog opened",{Asset:"Webapp",Page:"Settings projects","Selected projects":e}),this.dialogService.open(ri,{data:{projects:this.selectedProjects().filter(t=>!t.uiBasedRow).map(t=>t.data),orgSettings:this.orgSettings()}}).onClose.pipe(b(this.componentDestroyed$)).subscribe(t=>{if(t.action===A.SUCCESS){let r=t.deletedProjectIds||[],c=e.filter(z=>r.includes(z.id));this.trackingService.eventTrack("Projects deleted",{Asset:"Webapp",Page:"Settings projects","Deleted projects":c});let D=r.length>1?"projects.multipleProjectsDeletedSuccess":"projects.singleProjectDeletedSuccess";this.toastMessageService.showSuccessToast(this.translocoService.translate(D)),this.routingService.reloadCurrentPage()}else t.action===A.ERROR&&(this.trackingService.eventTrack("Error on row click action - delete",{Asset:"Webapp",Page:"Settings projects","Selected projects":e,Error:t.error}),this.toastMessageService.showErrorToast(this.translocoService.translate("projects.genericError")))})}resetSelectedProjects(){this.selectedProjects.set([]),this.isSelectedAll.set(!1)}openBulkAddProjectsDialog(){this.trackingService.eventTrack("Bulk add projects dialog opened",{page:"Settings projects",source:"Bulk add projects dropdown - grid action"}),this.dialogService.open(qt,{data:{title:this.translocoService.translate("projects.projectsTitleCase"),headerTitle:this.translocoService.translate("projects.bulkUploadHeaderTitleAddOrUpdateMultiple"),modalTitle:"",downloadStepText:this.translocoService.translate("projects.bulkUploadDownloadStepText"),uploadButtonText:this.translocoService.translate("projects.bulkUploadUploadButtonText"),hideIcons:!0,headerMap:this.projectsService.projectsHeaderMap,sampleFileSource:"assets/resources/bulk-projects.xlsx",postMethod:i=>this.projectsService.bulkPost(C.ADMIN,i),formatData:i=>this.projectsService.generateFormattedProjects(i),infoMessage:this.translocoService.translate("projects.bulkUploadProjectUpdateInfo")}}).onClose.pipe(b(this.componentDestroyed$),k(i=>i!==A.SUCCESS?x(null):(this.trackingService.eventTrack("Bulk upload of projects successful"),this.markImportDimensionsTaskAsComplete("Admin onboarding: import dimensions task complete - projects bulk upload").pipe(k(()=>this.routingService.reloadCurrentPage()))))).subscribe()}onColumnSort(e){this.sortConfig.set(e),this.pageNumber.set(1),this.resetSelectedProjects(),this.fetchProjects()}onAppliedFilters(e){this.appliedFilters.set(e),this.pageNumber.set(1),this.resetSelectedProjects(),this.fetchProjects(),this.zeroStateMessage.set(this.translocoService.translate("projects.noResultsClearFilters"))}onClearedFilters(){this.appliedFilters.set([]),this.pageNumber.set(1),this.resetSelectedProjects(),this.fetchProjects()}onPageNumberChange(e){this.pageNumber.set(e),this.resetSelectedProjects(),this.fetchProjects()}onPageSizeChange(e){this.pageSize.set(e),this.pageNumber.set(1),this.resetSelectedProjects(),this.fetchProjects()}onProjectSelected(e){if(!e?.rowData){let r=e.selectedRows.map(c=>N(w({},c),{selected:!0}));if(r.length>0)this.projects.set(r);else{let c=this.projects().map(D=>N(w({},D),{selected:!1}));this.projects.set(c)}this.selectedProjects.set(r);return}let i=e.rowData;i.selected=e.selected;let t=this.gridService.toggleSelection(this.projects(),i).filter(r=>r.selected);this.selectedProjects.set([]),this.cdr.detectChanges(),this.selectedProjects.set([...t])}onRowClicked(e){!e.isHeaderRow&&e.isSubItemPresent?this.openProjectsDialog(e,e.data.name):(!e.isHeaderRow||e.isHeaderRow&&!e.isSubItemPresent)&&this.openProjectsDialog(e)}onSelectAllToggled(e){this.isSelectedAll.set(e)}onSearch(e){this.trackingService.eventTrack("ListView beta simple search",{Page:"Settings projects",SearchQuery:e}),this.searchQuery.set(e),this.pageNumber.set(1),this.resetSelectedProjects(),this.fetchProjects(),this.zeroStateMessage.set(this.translocoService.translate("projects.noResultsFound"))}initializeSearchQuery(){if(this.routingService.getQueryParams().search_query){let e=atob(this.routingService.getQueryParams().search_query);this.searchQuery.set(e)}}initializeSortConfig(){this.routingService.getQueryParams().sort_column&&this.routingService.getQueryParams().sort_dir?this.sortConfig.set({field:this.routingService.getQueryParams().sort_column,order:this.routingService.getQueryParams().sort_dir}):this.sortConfig.set(this.config().defaultSortConfig)}initializeAppliedFilters(){if(this.routingService.getQueryParams().search_model){let e=JSON.parse(atob(this.routingService.getQueryParams().search_model));e=this.dateService.fixDatesInAppliedFilters(e),this.appliedFilters.set(e)}else this.appliedFilters.set(this.config().defaultAppliedFilters)}initializePagination(){this.routingService.getQueryParams().page_number&&this.pageNumber.set(Number(this.routingService.getQueryParams().page_number)),this.routingService.getQueryParams().page_size&&this.pageSize.set(Number(this.routingService.getQueryParams().page_size))}initializeActions(){return[{label:this.translocoService.translate("projects.enableButton"),type:P.PRIMARY,visible:!this.appliedFilters().some(i=>i.is_enabled),nested:!1,callbackMethod:()=>{this.bulkEnableOrDisable(!0)}},{label:this.translocoService.translate("projects.disableButton"),type:P.PRIMARY,visible:this.appliedFilters().some(i=>i.is_enabled),nested:!1,callbackMethod:()=>{this.bulkEnableOrDisable(!1)}},{label:this.translocoService.translate("projects.disableButton"),type:P.OUTLINE_SECONDARY,visible:!this.appliedFilters().some(i=>i.hasOwnProperty("is_enabled")),nested:!1,callbackMethod:()=>{this.bulkEnableOrDisable(!1)}},{label:this.translocoService.translate("projects.deleteButton"),type:P.OUTLINE_DANGER,visible:this.selectedProjects().length>0,nested:!1,callbackMethod:()=>{this.openDeleteDialog()}}]}ngOnInit(){this.promptInputs.promptMsg=this.translocoService.translate("projects.manageEmployeesPromptMessage"),this.promptInputs.primaryBtnText=this.translocoService.translate("projects.manageEmployeesButton"),this.promptInputs.secondaryBtnText=this.translocoService.translate("projects.cancelButton"),this.menuItems=[{label:this.translocoService.translate("projects.addMultipleProjects"),icon:"plus-square",class:"tw:hover:bg-bg-tertiary-light tw:hover:cursor-pointer",command:()=>this.openBulkAddProjectsDialog()}],this.zeroStateMessage.set(this.translocoService.translate("projects.noProjectsYet")),this.trackingService.eventTrack("Settings projects beta page visited"),this.initializeSearchQuery(),this.initializeSortConfig(),this.initializePagination(),this.initializeAppliedFilters(),this.fetchColumnConfiguration(),this.fetchTotalProjectsCount(),this.fetchProjects();let e=this.orgSettings().projects.enabled?"projects.disableButton":this.orgSettings().projects.allowed?"projects.enableButton":null;e?this.headerButtonLabel.set(this.translocoService.translate(e)):this.headerButtonLabel.set("")}ngOnDestroy(){this.componentDestroyed$.next(),this.componentDestroyed$.complete()}toggleProjects(){this.isProjectsLoading.set(!0);let e=w({},this.orgSettings());e.projects=N(w({},this.orgSettings().projects),{enabled:!this.orgSettings().projects.enabled});let i=e.projects.enabled?this.translocoService.translate("projects.enabledStatus"):this.translocoService.translate("projects.disabledStatus");this.orgSettingsService.postProcessed(e).pipe(b(this.componentDestroyed$),U(()=>{this.isProjectsLoading.set(!1)})).subscribe({next:()=>{this.toastMessageService.showSuccessToast(this.translocoService.translate("projects.projectSettingsModeSuccessToast",{mode:i})),this.trackingService.eventTrack("Toggled projects settings",{mode:i}),this.routingService.reloadCurrentPage()},error:t=>{this.toastMessageService.showErrorToast(this.translocoService.translate("projects.genericError")),this.trackingService.eventTrack("Unable to toggle projects",{mode:i,error:t})}})}toggleRestrictionSettings(e,i){let t="projects.disableProjectRestrictionsWarning";e==="enable_category_restriction"&&(t="projects.disableCategoryRestrictionsWarning"),i?this.postRestrictionSettings(e,i):this.showDisableRestrictionConfirmationDialog(e,i,t)}rollbackSetting(e){this.orgSettings().advanced_projects[e]=!this.orgSettings().advanced_projects[e]}postRestrictionSettings(e,i){this.orgSettings().advanced_projects[e]=i,this.orgSettingsService.postProcessed(this.orgSettings()).pipe(b(this.componentDestroyed$),q(t=>(this.rollbackSetting(e),this.toastMessageService.showErrorToast(this.translocoService.translate("projects.genericError")),this.trackingService.eventTrack("Advanced projects settings restriction update failed",{page:"Settings projects",advancedProjectSettingsKey:e,isEnabled:i,source:"Project settings toggle button",error:t}),x(null)))).subscribe(t=>
3{if(this.trackingService.eventTrack("Advanced projects settings updated",{page:"Settings projects",advancedProjectSettingsKey:e,isEnabled:i,source:"Project settings toggle button"}),t){let r=i?this.translocoService.translate("projects.enabledStatus"):this.translocoService.translate("projects.disabledStatus");this.toastMessageService.showSuccessToast(this.translocoService.translate("projects.restrictionsStatusSuccessToast",{status:r}))}})}employeeRestrictionTogglePromptTarget(e){this.promptInputs.target=e.target||e.currentTarget,this.orgSettings().advanced_projects.enable_individual_projects&&this.promptToRestrictProjects()}promptToRestrictProjects(){let e={feature:"PROJECTS",key:"SHOWN_MANAGE_EMPLOYEE_POPUP"};this.featureConfigService.getByFeatureAndKey(e.feature,e.key,C.ADMIN).pipe(b(this.componentDestroyed$),k(i=>{i?.value||this.showPrompt.set(!0);let t=N(w({},e),{value:!0});return this.featureConfigService.saveFeatureConfig("/admin/feature_configs/bulk",t)})).pipe(b(this.componentDestroyed$)).subscribe()}onPromptClose(e){if(e==="primary"){let i="settings/employees/manage_employees",t={show_prompt:!0},r=this.routingService.getSavedSetupInProgressQueryParams(i,t);this.router.navigate([i],{queryParams:r})}}fetchColumnConfiguration(){this.isColumnConfigurationLoading.set(!0),this.gridService.getAndMigrateManageColumnsConfiguration(C.ADMIN,"SETTINGS_PROJECTS",this.translocoService.translate("projects.settingsProjectsGridContext"),this.columns()).pipe(U(()=>this.isColumnConfigurationLoading.set(!1)),b(this.componentDestroyed$)).subscribe(e=>{e&&this.columnOrderMap.set(e)})}onManageColumns(e){let i=e.filter(r=>r.field!=="action"),t={name:"",field:"action",id:"action",styleClass:"tw:min-w-[140px]",visible:!0,order:i.length};i.push(t),this.columnOrderMap.set(this.gridService.getColumnOrderMap(i)),this.gridService.saveManageColumnsConfiguration(C.ADMIN,"SETTINGS_PROJECTS",this.columnOrderMap()).pipe(b(this.componentDestroyed$)).subscribe()}static \u0275fac=function(i){return new(i||o)};static \u0275cmp=R({type:o,selectors:[["feature-projects"]],inputs:{orgSettings:[1,"orgSettings"]},decls:28,vars:51,consts:[[3,"showHeader","showToggles","showAlert","showUiGrid"],["header",""],["url","https://www.fylehq.com/help/en/articles/1203423-add-projects",3,"buttonClicked","title","description","buttonLabel","showLoaderOnButton"],["toggles","",3,"ngClass"],[1,"tw:border-b","tw:border-border-tertiary","tw:pb-spacing-24"],[3,"promptClose","toggleClicked","toggleContainerClicked","title","titleClasses","toggleState","helpIcon","helpIconStyleClass","helpIconToolTip","showPrompt","promptInputs"],[1,"tw:pt-spacing-24"],[3,"toggleClicked","title","titleClasses","toggleState","helpIcon","helpIconStyleClass","helpIconToolTip"],["grid","",3,"ngClass"],[1,"tw:p-spacing-24","tw:flex","tw:justify-between","tw:border-b","tw:border-border-tertiary"],[1,"tw:h-[66px]","tw:flex","tw:items-end","tw:gap-spacing-14"],[3,"ngModelChange","expandedView","ngModel","debounce"],[3,"applyFilters","quickFilters","appliedFilters"],[3,"applyFilters","clearFilters","filters","isSettingsGrid","appliedFilters"],[1,"tw:flex","tw:items-end"],[3,"label","icon","menuItems"],[3,"actions"],[1,"tw:p-spacing-24"],[3,"columnConfig","data","dataKey","selectedRows","sortConfig","currentPageNumber","totalItemsCount","showOpenInNewTab","enableRowSelection","isSelectAllOnThisPageDefault","showSelectAllDropdown","isSettingsGrid"],[1,"tw:flex-grow","tw:bg-bg-white","tw:flex","tw:items-center","tw:justify-center","tw:rounded-b-border-radius-2xs","tw:border-0"],[3,"buttonClick","label","icon","menuItems"],[1,"tw:border-0","tw:border-b","tw:border-solid","tw:border-lv-table-border-color","tw:flex","tw:items-center","tw:h-[70px]","tw:bg-lv-table-list-item-bg"],[1,"tw:w-[64px]","tw:flex","tw:justify-center"],[3,"height"],[1,"tw:px-spacing-24","tw:w-full"],[3,"columnSort","currentSelection","selectAll","rowClicked","manageColumns","pageNumberChange","pageSizeChange","columnConfig","data","dataKey","selectedRows","sortConfig","currentPageNumber","totalItemsCount","showOpenInNewTab","enableRowSelection","isSelectAllOnThisPageDefault","showSelectAllDropdown","isSettingsGrid"],[3,"imageUrl","imageClass","noDataText","noDataSubText"],[1,"tw:flex","tw:flex-col","tw:items-center","tw:text-center","tw:py-spacing-120","tw:mb-spacing-32","tw:border","t
3w:border-border-tertiary","tw:rounded-border-radius-lg","tw:bg-bg-white"],[1,"tw:my-[200px]"],[1,"tw:flex","tw:flex-col","tw:flex-[1_1_100%]","tw:items-center","tw:max-w-[400px]","tw:my-[60px]","tw:mx-auto"],["src","assets/images/projects.svg"],[1,"tw:my-spacing-32","tw:text-text-label","tw:leading-1.3"],[1,"tw:flex","tw:justify-center","tw:gap-spacing-32"],[3,"buttonClick","buttonType","label","iconName","iconPos","buttonSize","iconClasses"],[3,"styleClass"],[1,"tw:max-w-[240px]","tw:max-h-[240px]"],[1,"tw:m-0"],[1,"tw:text-text-tertiary"],[3,"url"],[3,"buttonClick","buttonType","label","buttonSize"]],template:function(i,t){i&1&&(a(0,"ui-settings-page",0)(1,"div",1)(2,"ui-page-header",2),d(3,"transloco"),d(4,"transloco"),_("buttonClicked",function(){return t.toggleProjects()}),s()(),a(5,"div",3)(6,"div",4)(7,"ui-feature-toggle-card",5),d(8,"transloco"),d(9,"transloco"),_("promptClose",function(c){return t.onPromptClose(c)})("toggleClicked",function(c){return t.toggleRestrictionSettings("enable_individual_projects",c)})("toggleContainerClicked",function(c){return t.employeeRestrictionTogglePromptTarget(c)}),s()(),a(10,"div",6)(11,"ui-feature-toggle-card",7),d(12,"transloco"),d(13,"transloco"),_("toggleClicked",function(c){return t.toggleRestrictionSettings("enable_category_restriction",c)}),s()()(),a(14,"div",8)(15,"div",9)(16,"div",10)(17,"ui-search-input",11),_("ngModelChange",function(c){return t.onSearch(c)}),s(),a(18,"ui-quick-filters",12),_("applyFilters",function(c){return t.onAppliedFilters(c)}),s(),a(19,"ui-advanced-filters",13),_("applyFilters",function(c){return t.onAppliedFilters(c)})("clearFilters",function(){return t.onClearedFilters()}),s()(),a(20,"div",14),h(21,Xi,2,5,"ui-split-button",15)(22,Zi,1,1,"ui-grid-actions",16),s()(),a(23,"div",17),h(24,eo,2,0)(25,to,1,12,"ui-grid",18)(26,io,3,6,"div",19),s()(),h(27,ao,3,3),s()),i&2&&(l("showHeader",t.showHeader())("showToggles",t.totalProjectsCount()>0)("showAlert",!1)("showUiGrid",t.totalProjectsCount()>0),n(2),l("title",u(3,35,"projects.pageHeaderTitle"))("description",u(4,37,"projects.pageHeaderDescription"))("buttonLabel",t.headerButtonLabel())("showLoaderOnButton",t.isProjectsToggleLoading()),n(3),l("ngClass",M(47,ni,!(t.orgSettings().projects&&t.orgSettings().projects.enabled))),n(2),l("title",u(8,39,"projects.restrictEmployeesToggleTitle"))("titleClasses","tw:text-size-16 tw:flex tw:gap-spacing-8 tw:items-center tw:tracking-[0.01em] tw:leading-1.25")("toggleState",t.orgSettings().advanced_projects.enable_individual_projects)("helpIcon","question-square-outline")("helpIconStyleClass","tw:w-18-px tw:h-18-px tw:fill-icon-tertiary tw:flex")("helpIconToolTip",u(9,41,"projects.restrictEmployeesTooltip"))("showPrompt",t.showPrompt())("promptInputs",t.promptInputs),n(4),l("title",u(12,43,"projects.restrictCategoriesToggleTitle"))("titleClasses","tw:text-size-16 tw:flex tw:gap-spacing-8 tw:items-center tw:tracking-[0.01em] tw:leading-1.25")("toggleState",t.orgSettings().advanced_projects.enable_category_restriction)("helpIcon","question-square-outline")("helpIconStyleClass","tw:w-18-px tw:h-18-px tw:fill-icon-tertiary tw:flex")("helpIconToolTip",u(13,45,"projects.restrictCategoriesTooltip")),n(3),l("ngClass",M(49,ni,!(t.orgSettings().projects&&t.orgSettings().projects.enabled))),n(3),l("expandedView",!1)("ngModel",t.searchQuery())("debounce",400),n(),l("quickFilters",t.quickFilters())("appliedFilters",t.appliedFilters()),n(),l("filters",t.filters())("isSettingsGrid",!0)("appliedFilters",t.appliedFilters()),n(2),f(t.selectedProjects().length===0?21:22),n(3),f(t.isProjectsLoading()?24:t.projects().length>0?25:26),n(3),f(t.totalProjectsCount()===0?27:-1))},dependencies:[fe,he,ne,re,_e,$t,zt,Dt,Vt,Bt,Ot,Ut,Jt,Xt,Ht,Yt,Fe,ae,yt,$,W],encapsulation:2})}return o})();export{Hn as FeatureProjectsComponent};
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.