1import{a as ae}from"./chunk-QIOURN4K.js";import{a as Q}from"./chunk-EB6TJ75L.js";import{D as oe,b as Y,c as K,g as X,l as Z,n as $,t as ee,u as te,v as ne,z as ie}from"./chunk-FOJCKIWO.js";import{a as J}from"./chunk-AB6CKZTE.js";import{h as O}from"./chunk-3QVSKJ3X.js";import{D as H,G as q,I as z,p as j,r as N,s as G}from"./chunk-ERUCNOOT.js";import{$b as A,Cc as g,Dc as x,Ec as v,Jb as m,Jc as R,Qc as T,Sc as I,Vb as n,Wb as i,Xb as h,Yb as S,Z as L,Zb as V,_a as D,ca as F,da as E,db as r,fc as f,gc as c,la as p,ma as u,p as b,sb as U,tc as l,uc as w,vc as y,yb as _}from"./chunk-DBE7WQEG.js";import{a as W,b as B,g as C}from"./chunk-W7GRJBO5.js";var M=class a{constructor(t){this.http=t}baseUrl=`${J.api}/api/admin/announcements`;findAll(){return b(this.http.get(this.baseUrl))}create(t){return b(this.http.post(this.baseUrl,t))}update(t,e){return b(this.http.patch(`${this.baseUrl}/${t}`,e))}remove(t){return b(this.http.delete(`${this.baseUrl}/${t}`))}stats(t){return b(this.http.get(`${this.baseUrl}/${t}/stats`))}uploadImage(t){let e=new FormData;return e.append("file",t),b(this.http.post(`${this.baseUrl}/upload-image`,e))}static \u0275fac=function(e){return new(e||a)(F(O))};static \u0275prov=L({token:a,factory:a.\u0275fac,providedIn:"root"})};var se=(a,t,e)=>({"bg-success":a,"bg-secondary":t,"bg-warning text-dark":e});function de(a,t){if(a&1){let e=A();n(0,"button",8),f("click",function(){p(e);let o=c();return u(o.newAnnouncement())}),h(1,"i",9),l(2," Nouvelle annonce "),i()}}function ce(a,t){if(a&1&&(n(0,"option",49),l(1),i()),a&2){let e=t.$implicit;m("value",e),r(),y(" ",e," ")}}function me(a,t){if(a&1&&h(0,"img",50),a&2){let e=c(2);m("src",e.edit.imageUrl,D)}}function pe(a,t){if(a&1){let e=A();n(0,"div",18)(1,"label",15),l(2,"Texte du bouton"),i(),n(3,"input",55),v("ngModelChange",function(o){p(e);let s=c(3);return x(s.edit.ctaLabel,o)||(s.edit.ctaLabel=o),u(o)}),i()()}if(a&2){let e=c(3);r(3),g("ngModel",e.edit.ctaLabel)}}function ue(a,t){if(a&1&&(n(0,"option",49),l(1),i()),a&2){let e=t.$implicit;m("value",e),r(),y(" ",e," ")}}function _e(a,t){if(a&1){let e=A();S(0),_(1,pe,4,1,"div",51),n(2,"div",52)(3,"label",15),l(4,"Action"),i(),n(5,"select",19),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.ctaActionType,o)||(s.edit.ctaActionType=o),u(o)}),_(6,ue,2,2,"option",20),i()(),n(7,"div",53)(8,"label",15),l(9,"Cible (URL ou route)"),i(),n(10,"input",54),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.ctaActionValue,o)||(s.edit.ctaActionValue=o),u(o)}),i()(),V()}if(a&2){let e=c(2);r(),m("ngIf",e.edit.tapBehavior==="button"),r(4),g("ngModel",e.edit.ctaActionType),r(),m("ngForOf",e.actionTypes),r(),m("ngClass",e.edit.tapBehavior==="button"?"col-md-2":"col-md-6"),r(3),g("ngModel",e.edit.ctaActionValue)}}function ge(a,t){if(a&1&&(n(0,"option",49),l(1),i()),a&2){let e=t.$implicit;m("value",e),r(),y(" ",e," ")}}function xe(a,t){if(a&1){let e=A();S(0),n(1,"div",18)(2,"label",15),l(3,"Lien secondaire (texte)"),i(),n(4,"input",56),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.secondaryLabel,o)||(s.edit.secondaryLabel=o),u(o)}),i()(),n(5,"div",40)(6,"label",15),l(7,"Action"),i(),n(8,"select",19),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.secondaryActionType,o)||(s.edit.secondaryActionType=o),u(o)}),_(9,ge,2,2,"option",20),i()(),n(10,"div",57)(11,"label",15),l(12,"Cible"),i(),n(13,"input",28),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.secondaryActionValue,o)||(s.edit.secondaryActionValue=o),u(o)}),i()(),V()}if(a&2){let e=c(2);r(4),g("ngModel",e.edit.secondaryLabel),r(4),g("ngModel",e.edit.secondaryActionType),r(),m("ngForOf",e.actionTypes),r(4),g("ngModel",e.edit.secondaryActionValue)}}function ve(a,t){if(a&1&&(n(0,"option",49),l(1),i()),a&2){let e=t.$implicit;m("value",e),r(),y(" ",e," ")}}function ye(a,t){if(a&1){let e=A();n(0,"div",63)(1,"input",64),f("change",function(){let o=p(e).$implicit,s=c(3);return u(s.toggle(s.edit.targetGenders,o))}),i(),n(2,"label",65),l(3),i()()}if(a&2){let e=t.$implicit,d=c(3);r(),m("id","g-"+e)("checked",d.isChecked(d.edit.targetGenders,e)),r(),m("for","g-"+e),r(),w(e)}}function fe(a,t){if(a&1){let e=A();n(0,"div",63)(1,"input",64),f("change",function(){let o=p(e).$implicit,s=c(3);return u(s.toggle(s.edit.targetAgeRanges,o))}),i(),n(2,"label",65),l(3),i()()}if(a&2){let e=t.$implicit,d=c(3);r(),m("id","a-"+e)("checked",d.isChecked(d.edit.targetAgeRanges,e)),r(),m("for","a-"+e),r(),w(e)}}function Ae(a,t){if(a&1){let e=A();n(0,"div",63)(1,"input",64),f("change",function(){let o=p(e).$implicit,s=c(3);return u(s.toggle(s.edit.targetPlatforms,o))}),i(),n(2,"label",65),l(3),i()()}if(a&2){let e=t.$implicit,d=c(3);r(),m("id","p-"+e)("checked",d.isChecked(d.edit.targetPlatforms,e)),r(),m("for","p-"+e),r(),w(e)}}function he(a,t){if(a&1){let e=A();S(0),n(1,"div",58)(2,"label",15),l(3,"Pays (codes ISO2, s\xE9par\xE9s par des virgules)"),i(),n(4,"input",59),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.countriesText,o)||(s.edit.countriesText=o),u(o)}),i()(),n(5,"div",58)(6,"label",15),l(7,"Langues (s\xE9par\xE9es par des virgules)"),i(),n(8,"input",60),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.languagesText,o)||(s.edit.languagesText=o),u(o)}),i()(),n(9,"div",18)(10,"label",61),l(11,"Genre"),i(),_(12,ye,4,4,"div",62),i(),n(13,"div",57)(14,"label",61),l(15,"\xC2ge"),i(),_(16,fe,4,4,"div",62),i(),n(17,"div",40)(18,"label",61),l(19,"Plateforme"),i(),_(20,Ae,4,4,"div",62),i(),V()}
1if(a&2){let e=c(2);r(4),g("ngModel",e.edit.countriesText),r(4),g("ngModel",e.edit.languagesText),r(4),m("ngForOf",e.genders),r(4),m("ngForOf",e.ageRanges),r(4),m("ngForOf",e.platforms)}}function we(a,t){if(a&1){let e=A();S(0),n(1,"div",40)(2,"label",15),l(3,"Build min"),i(),n(4,"input",66),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.minAppBuild,o)||(s.edit.minAppBuild=o),u(o)}),i()(),n(5,"div",40)(6,"label",15),l(7,"Build max"),i(),n(8,"input",42),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.maxAppBuild,o)||(s.edit.maxAppBuild=o),u(o)}),i()(),n(9,"div",40)(10,"label",15),l(11,"Cap impressions / user"),i(),n(12,"input",42),v("ngModelChange",function(o){p(e);let s=c(2);return x(s.edit.maxImpressionsPerUser,o)||(s.edit.maxImpressionsPerUser=o),u(o)}),i()(),V()}if(a&2){let e=c(2);r(4),g("ngModel",e.edit.minAppBuild),r(4),g("ngModel",e.edit.maxAppBuild),r(4),g("ngModel",e.edit.maxImpressionsPerUser)}}function Ce(a,t){if(a&1){let e=A();n(0,"div",10)(1,"div",11)(2,"h2",12),l(3),i(),n(4,"div",13)(5,"div",14)(6,"label",15),l(7," Titre "),n(8,"span",16),l(9,"(optionnel \u2014 laisser vide pour une pub image seule)"),i()(),n(10,"input",17),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.title,o)||(s.edit.title=o),u(o)}),i()(),n(11,"div",18)(12,"label",15),l(13,"Statut"),i(),n(14,"select",19),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.status,o)||(s.edit.status=o),u(o)}),_(15,ce,2,2,"option",20),i()(),n(16,"div",21)(17,"label",15),l(18,"Message"),i(),n(19,"textarea",22),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.body,o)||(s.edit.body=o),u(o)}),i()(),n(20,"div",14)(21,"label",15),l(22," Image "),n(23,"span",16),l(24),i()(),n(25,"div",23)(26,"label",24),h(27,"i",25),l(28),n(29,"input",26),f("change",function(o){p(e);let s=c();return u(s.onImageSelected(o))}),i()(),n(30,"span",27),l(31,"ou colle une URL :"),i()(),n(32,"input",28),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.imageUrl,o)||(s.edit.imageUrl=o),u(o)}),i(),_(33,me,1,1,"img",29),i(),n(34,"div",18)(35,"label",15),l(36,"Emplacement"),i(),n(37,"select",19),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.placement,o)||(s.edit.placement=o),u(o)}),n(38,"option",30),l(39,"Popup"),i(),n(40,"option",31),l(41," Banni\xE8re marketplace (bient\xF4t) "),i(),n(42,"option",32),l(43," Carte dans le feed (bient\xF4t) "),i()(),n(44,"div",33),l(45),i()(),n(46,"div",18)(47,"label",15),l(48,"Comportement au tap"),i(),n(49,"select",19),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.tapBehavior,o)||(s.edit.tapBehavior=o),u(o)}),n(50,"option",34),l(51,"Bouton CTA"),i(),n(52,"option",35),l(53,"Popup enti\xE8re cliquable"),i(),n(54,"option",36),l(55,"Aucune action (info)"),i()()(),_(56,_e,11,5,"ng-container",6),n(57,"div",21)(58,"div",37)(59,"input",38),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.showSecondary,o)||(s.edit.showSecondary=o),u(o)}),i(),n(60,"label",39),l(61," Ajouter un lien secondaire en bas "),i()()(),_(62,xe,14,4,"ng-container",6),n(63,"div",40)(64,"label",15),l(65,"D\xE9but"),i(),n(66,"input",41),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.startsAt,o)||(s.edit.startsAt=o),u(o)}),i()(),n(67,"div",40)(68,"label",15),l(69,"Fin"),i(),n(70,"input",41),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.endsAt,o)||(s.edit.endsAt=o),u(o)}),i()(),n(71,"div",40)(72,"label",15),l(73,"Fr\xE9quence"),i(),n(74,"select",19),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.displayMode,o)||(s.edit.displayMode=o),u(o)}),_(75,ve,2,2,"option",20),i()(),n(76,"div",40)(77,"label",15),l(78,"Priorit\xE9"),i(),n(79,"input",42),v("ngModelChange",function(o){p(e);let s=c();return x(s.edit.priority,o)||(s.edit.priority=o),u(o)}),i()(),n(80,"div",21),h(81,"hr",43),n(82,"button",44),f("click",function(){p(e);let o=c();return u(o.showTargeting=!o.showTargeting)}),h(83,"i",45),l(84," Ciblage "),n(85,"span",27),l(86,"\u2014 vide = tout le monde"),i()()(),_(87,he,21,5,"ng-container",6),n(88,"div",21),h(89,"hr",43),n(90,"button",44),f("click",function(){p(e);let o=c();return u(o.showCompat=!o.showCompat)}),h(91,"i",45),l(92," Avanc\xE9 (compatibilit\xE9 & cap) "),i()(),_(93,we,13,3,"ng-container",6),i(),n(94,"div",46)(95,"button",47),f("click",function(){p(e);let o=c();return u(o.cancelEdit())}),l(96," Annuler "),i(),n(97,"button",48),f("click",function(){p(e);let o=c();return u(o.save())}),l(98),i()()()()}if(a&2){let e=c();r(3),y(" ",e.editingId?"Modifier l\u2019annonce":"Nouvelle annonce"," "),r(7),g("ngModel",e.edit.title),r(4),g("ngModel",e.edit.status),r(),m("ngForOf",e.statuses),r(4),g("ngModel",e.edit.body),r(5),y("\u2014 ",e.imageSpec,""),r(4),y(" ",e.uploading?"T\xE9l\xE9versement\u2026":"T\xE9l\xE9verser"," "),r(),m("disabled",e.uploading),r(3),g("ngModel",e.edit.imageUrl),r(),m("ngIf",e.edit.imageUrl),r(4),g("ngModel",e.edit.placement),r(8),y(" \u{1F4D0} Image conseill\xE9e : ",e.imageSpec," "),r(4),g("ngModel",e.edit.tapBehavior),r(7),m("ngIf",e.edit.tapBehavior!=="none"),r(3),g("ngModel",e.edit.showSecondary),r(3),m("ngIf",e.edit.showSecondary),r(4),g("ngModel",e.edit.startsAt),r(4),g("ngModel",e.edit.endsAt),r(4),g("ngModel",e.edit.displayMode),r(),m("ngForOf",e.displayModes),r(4),g("ngModel",e.edit.priority),r(4),m("ngClass",e.showTargeting?"pi-chevron-down":"pi-chevron-right"),r(4),m("ngIf",e.showTargeting),r(4),m("ngClass",e.showCompat?"pi-chevron-down":"pi-chevron-right"),r(2),m("ngIf",e.showCompat),r(2),m("disabled",e.saving),r(2),m("disabled",e.saving),r(),y(" ",e.saving?"Enregistrement\u2026":e.editingId?"Enregistrer":"Cr\xE9er"," ")}}function be(a,t){a&1&&(n(0,"div",70),l(1,"Chargement\u2026"),i())}function Se(a,t){a&1&&(n(0,"div",71),l(1," Aucune annonce. Clique sur \xAB Nouvelle annonce \xBB pour en cr\xE9er une. "),i())}function Ve(a,t){if(a&1&&(n(0,"div",81),l(1),i()),a&2){let e=c().$implicit;r(),y(" \u2192 ",e.ctaActionValue," ")}}function Ee(a,t){if(a&1&&(n(0,"span"),l(1),i()),a&2){let e=c().$implicit;r(),y("\u{1F30D} ",e.targetCountries==null?null:e.targetCountries.join(", ")," ")}}function Te(a,t){if(a&1&&(n(0,"span"),l(1),i()),a&2){let e=c().$implicit;r(),y("\u{1F5E3} ",e.targetLanguages==null?null:e.targetLanguages.join(", ")," ")}}function Ie(a,t){if(a&1&&(n(0,"span"),l(1),i()),a&2){let e=c().$implicit;r(),y("\u26A7 ",e.targetGenders==null?null:e.targetGenders.join(", ")," ")}}function Me(a,t){if(a&1&&(n(0,"span"),l(1),i()),a&2){let e=c().$implicit;r(),y("\u{1F382} ",e.targetAgeRanges==null?null:e.targetAgeRanges.join(", ")," ")}}function Pe(a,t){a&1&&(n(0,"span"),l(1,"tous"),i())}function ke(a,t){if(a&1&&(n(0,"span"),l(1),T(2,"date"),i()),a&2){let e=c().$implicit;r(),w(I(2,1,e.startsAt,"dd/MM/yy HH:mm"))}}function We(a,t){a&1&&(n(0,"span"),l(1," \u2192 "),i())}function Be(a,t){if(a&1&&(n(0,"span"),l(1),T(2,"date"),i()),a&2){let e=c().$implicit;r(),w(I(2,1,e.endsAt,"dd/MM/yy HH:mm"))}}function Le(a,t){a&1&&(n(0,"span"),l(1,"\u2014"),i())}function Fe(a,t){if(a&1){let e=A();n(0,"tr")(1,"td")(2,"div",77),l(3),i(),_(4,Ve,2,1,"div",78),i(),n(5,"td")(6,"span",79),l(7),i()(),n(8,"td",80),l(9),i(),n(10,"td",81),_(11,Ee,2,1,"span",6)(12,Te,2,1,"span",6)(13,Ie,2,1,"span",6)(14,Me,2,1,"span",6)(15,Pe,2,0,"span",6),i(),n(16,"td",81),_(17,ke,3,4,"span",6)(18,We,2,0,"span",6)(19,Be,3,4,"span",6)(20,Le,2,0,"span",6),i(),n(21,"td",75)(22,"button",82),f("click",function(){let o=p(e).$implicit,s=c(3);return u(s.showStats(o))}),h(23,"i",83),i(),n(24,"button",84),f("click",function(){let o=p(e).$implicit,s=c(3);return u(s.editAnnouncement(o))}),h(25,"i",85),i(),n(26,"button",86),f("click",function(){let o=p(e).$implicit,s=c(3);return u(s.remove(o))}),h(27,"i",87),i()()()}if(a&2){let e=t.$implicit;r(3),w(e.title),r(),m("ngIf",e.ctaActionValue),r(2),m("ngClass",R(14,se,e.status==="active",e.status==="draft"||e.status==="archived",e.status==="paused"||e.status==="scheduled")),r(),w(e.status),r(2),w(e.placement),r(2),m("ngIf",e.targetCountries==null?null:e.targetCountries.length),r(),m("ngIf",e.targetLanguages==null?null:e.targetLanguages.length),r(),m("ngIf",e.targetGenders==null?null:e.targetGenders.length),r(),m("ngIf",e.targetAgeRanges==null?null:e.targetAgeRanges.length),r(),m("ngIf",!(e.targetCountries!=null&&e.targetCountries.length)&&!(e.targetLanguages!=null&&e.targetLanguages.length)&&!(e.targetGenders!=null&&e.targetGenders.length)&&!(e.targetAgeRanges!=null&&e.targetAgeRanges.length)),r(2),m("ngIf",e.startsAt),r(),m("ngIf",e.startsAt||e.endsAt),r(),m("ngIf",e.endsAt),r(),m("ngIf",!e.startsAt&&!e.endsAt)}}function De(a,t){if(a&1&&(n(0,"div",72)(1,"table",73)(2,"thead",74)(3,"tr")(4,"th"),l(5,"Titre"),i(),n(6,"th"),l(7,"Statut"),i(),n(8,"th"),l(9,"Emplacement"),i(),n(10,"th"),l(11,"Ciblage"),i(),n(12,"th"),l(13,"Fen\xEAtre"),i(),n(14,"th",75),l(15,"Actions"),i()()(),n(16,"tbody"),_(17,Fe,28,18,"tr",76),i()()()),a&2){let e=c(2);r(17),m("ngForOf",e.list)}}function Ue(a,t){if(a&1&&(n(0,"div"),_(1,be,2,0,"div",67)(2,Se,2,0,"div",68)(3,De,18,1,"div",69),i()),a&2){let e=c();r(),m("ngIf",e.loading),r(),m("ngIf",!e.loading&&e.list.length===0),r(),m("ngIf",!e.loading&&e.list.length>0)}}function Re(a,t){a&1&&(n(0,"div",95),l(1,"Chargement\u2026"),i())}function Oe(a,t){a&1&&(n(0,"div",81),l(1," Pas encore de donn\xE9es. "),i())}function je(a,t){if(a&1&&(n(0,"tr")(1,"td"),l(2),i(),n(3,"td"),l(4),i(),n(5,"td",75),l(6),i()()),a&2){let e=t.$implicit;r(2),w(e.country||"\u2014"),r(2),w(e.type),r(2),w(e.count)}}function Ne(a,t){if(a&1&&(n(0,"table",101)(1,"thead")(2,"tr")(3,"th"),l(4,"Pays"),i(),n(5,"th"),l(6,"Type"),i(),n(7,"th",75),l(8,"Count"),i()()(),n(9,"tbody"),_(10,je,7,3,"tr",76),i()()),a&2){let e=c(3);r(10),m("ngForOf",e.stats.byCountry)}}function Ge(a,t){if(a&1&&(n(0,"div")(1,"div",96)(2,"div",97)(3,"div",98)(4,"div",99),l(5),i(),n(6,"div",81),l(7,"Impressions"),i()()(),n(8,"div",97)(9,"div",98)(10,"div",99),l(11),i(),n(12,"div",81),l(13,"Clics"),i()()(),n(14,"div",97)(15,"div",98)(16,"div",99),l(17),i(),n(18,"div",81),l(19,"Skip"),i()()(),n(20,"div",97)(21,"div",98)(22,"div",99),l(23),T(24,"number"),i(),n(25,"div",81),l(26,"CTR"),i()()()(),n(27,"h3",81),l(28,"Par pays"),i(),_(29,Oe,2,0,"div",78)(30,Ne,11,1,"table",100),i()),a&2){let e=c(2);r(5),y(" ",e.statCount("impression")," "),r(6),y(" ",e.statCount("click")," "),r(6),y(" ",e.statCount("skip")," "),r(6),y(" ",I(24,6,e.stats.ctr*100,"1.0-1"),"% "),r(6),m("ngIf",(e.stats.byCountry==null?null:e.stats.byCountry.length)===0),r(),m("ngIf",e.stats.byCountry==null?null:e.stats.byCountry.length)}}function He(a,t){if(a&1){let e=A();n(0,"div",88),f("click",function(){p(e);let o=c();return u(o.closeStats())}),n(1,"div",89),f("click",function(o){return p(e),u(o.stopPropagation())}),n(2,"div",11)(3,"div",90)(4,"h2",91),l(5),i(),n(6,"button",92),f("click",function(){p(e);let o=c();return u(o.closeStats())}),h(7,"i",93),i()(),_(8,Re,2,0,"div",94)(9,Ge,31,9,"div",6),i()()()}if(a&2){let e=c();r(5),y("Stats \u2014 ",e.statsFor.title,""),r(3),m("ngIf",!e.stats),r(),m("ngIf",e.stats)}}var re=class a{service=E(M);
1toast=E(Q);confirm=E(ae);loading=!1;saving=!1;uploading=!1;list=[];edit=null;editingId=null;showTargeting=!1;showCompat=!1;statsFor=null;stats=null;statuses=["draft","scheduled","active","paused","archived"];actionTypes=["open_url","open_route"];displayModes=["once","daily","session","always"];genders=["male","female","other","unknown"];ageRanges=["13-17","18-24","25-34","35-44","45-54","55+"];platforms=["ios","android","web"];placementImageSpecs={popup:"1080 \xD7 1080 px \xB7 ratio 1:1 \xB7 PNG/JPG/WebP, < 8 Mo",banner_marketplace:"1200 \xD7 300 px \xB7 ratio 4:1",feed_card:"1200 \xD7 675 px \xB7 ratio 16:9"};get imageSpec(){return this.placementImageSpecs[this.edit?.placement||"popup"]||""}ngOnInit(){return C(this,null,function*(){yield this.load()})}load(){return C(this,null,function*(){this.loading=!0;try{this.list=yield this.service.findAll()}catch{this.toast.error("Erreur lors du chargement des annonces")}finally{this.loading=!1}})}newAnnouncement(){this.editingId=null,this.showTargeting=!1,this.showCompat=!1,this.edit={title:"",body:"",imageUrl:"",placement:"popup",tapBehavior:"button",ctaLabel:"",ctaActionType:"open_url",ctaActionValue:"",showSecondary:!1,secondaryLabel:"",secondaryActionType:"open_url",secondaryActionValue:"",status:"draft",priority:0,displayMode:"once",targetGenders:[],targetAgeRanges:[],targetPlatforms:[],countriesText:"",languagesText:"",schemaVersion:1}}editAnnouncement(t){this.editingId=t.id;let e="none";t.ctaLabel?e="button":t.ctaActionType&&t.ctaActionValue&&(e="full"),this.edit=B(W({},t),{tapBehavior:e,ctaActionType:t.ctaActionType||"open_url",showSecondary:!!(t.secondaryActionType&&t.secondaryActionValue),secondaryActionType:t.secondaryActionType||"open_url",startsAt:this.toLocalInput(t.startsAt),endsAt:this.toLocalInput(t.endsAt),targetGenders:[...t.targetGenders??[]],targetAgeRanges:[...t.targetAgeRanges??[]],targetPlatforms:[...t.targetPlatforms??[]],countriesText:(t.targetCountries??[]).join(", "),languagesText:(t.targetLanguages??[]).join(", ")}),this.showTargeting=!!(t.targetCountries?.length||t.targetLanguages?.length||t.targetGenders?.length||t.targetAgeRanges?.length||t.targetPlatforms?.length),this.showCompat=!!(t.minAppBuild||t.maxAppBuild||t.maxImpressionsPerUser)}cancelEdit(){this.edit=null,this.editingId=null}onImageSelected(t){return C(this,null,function*(){let e=t.target,d=e.files?.[0];if(!(!d||!this.edit)){this.uploading=!0;try{let{url:o}=yield this.service.uploadImage(d);this.edit.imageUrl=o,this.toast.success("Image t\xE9l\xE9vers\xE9e")}catch(o){this.toast.error(o?.error?.message||"\xC9chec du t\xE9l\xE9versement")}finally{this.uploading=!1,e.value=""}}})}toggle(t,e){if(!t)return;let d=t.indexOf(e);d>=0?t.splice(d,1):t.push(e)}isChecked(t,e){return!!t&&t.includes(e)}save(){return C(this,null,function*(){if(this.edit){if(!this.edit.title?.trim()&&!this.edit.imageUrl?.trim()){this.toast.error("Ajoute au moins un titre ou une image");return}this.saving=!0;try{let t=this.buildDto(this.edit);this.editingId?(yield this.service.update(this.editingId,t),this.toast.success("Annonce mise \xE0 jour")):(yield this.service.create(t),this.toast.success("Annonce cr\xE9\xE9e")),this.cancelEdit(),yield this.load()}catch(t){this.toast.error(t?.error?.message||"Erreur lors de l\u2019enregistrement")}finally{this.saving=!1}}})}remove(t){return C(this,null,function*(){if(yield this.confirm.confirm({message:`Supprimer l\u2019annonce <strong>${t.title}</strong> ? Les stats associ\xE9es seront perdues.`,isHtml:!0,header:"Supprimer cette annonce ?",severity:"danger",acceptLabel:"Supprimer",rejectLabel:"Annuler"}))try{yield this.service.remove(t.id),this.toast.success("Annonce supprim\xE9e"),yield this.load()}catch{this.toast.error("Erreur lors de la suppression")}})}showStats(t){return C(this,null,function*(){this.statsFor=t,this.stats=null;try{this.stats=yield this.service.stats(t.id)}catch{this.toast.error("Erreur lors du chargement des stats")}})}closeStats(){this.statsFor=null,this.stats=null}statCount(t){return this.stats?.totals?.[t]?.count??0}buildDto(t){let e=this.splitCsv(t.countriesText),d=this.splitCsv(t.languagesText),o=null,s=null,P=null;t.tapBehavior==="button"?(o=t.ctaLabel?.trim()||null,s=t.ctaActionType||null,P=t.ctaActionValue?.trim()||null):t.tapBehavior==="full"&&(s=t.ctaActionType||null,P=t.ctaActionValue?.trim()||null);let k=t.showSecondary;return{title:(t.title??"").trim(),body:t.body?.trim()||null,imageUrl:t.imageUrl?.trim()||null,placement:t.placement,ctaLabel:o,ctaActionType:s,ctaActionValue:P,secondaryLabel:k&&t.secondaryLabel?.trim()||null,secondaryActionType:k&&t.secondaryActionType||null,secondaryActionValue:k&&t.secondaryActionValue?.trim()||null,status:t.status,priority:Number(t.priority)||0,startsAt:t.startsAt?new Date(t.startsAt).toISOString():null,endsAt:t.endsAt?new Date(t.endsAt).toISOString():null,displayMode:t.displayMode,maxImpressionsPerUser:t.maxImpressionsPerUser?Number(t.maxImpressionsPerUser):null,targetCountries:e.length?e:null,targetLanguages:d.length?d:null,targetGenders:t.targetGenders?.length?t.targetGenders:null,targetAgeRanges:t.targetAgeRanges?.length?t.targetAgeRanges:null,targetPlatforms:t.targetPlatforms?.length?t.targetPlatforms:null,minAppBuild:t.minAppBuild?Number(t.minAppBuild):null,maxAppBuild:t.maxAppBuild?Number(t.maxAppBuild):null}}splitCsv(t){return(t||"").split(",").map(e=>
1e.trim()).filter(Boolean)}toLocalInput(t){if(!t)return;let e=new Date(t);if(isNaN(e.getTime()))return;let d=o=>`${o}`.padStart(2,"0");return`${e.getFullYear()}-${d(e.getMonth()+1)}-${d(e.getDate())}T${d(e.getHours())}:${d(e.getMinutes())}`}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=U({type:a,selectors:[["app-view-admin-announcements"]],decls:11,vars:4,consts:[[1,"p-3","p-md-4"],[1,"d-flex","justify-content-between","align-items-center","mb-4","gap-2","flex-wrap"],[1,"h4","mb-1"],[1,"text-muted","small","mb-0"],["class","btn btn-primary",3,"click",4,"ngIf"],["class","card border-0 shadow-sm mb-4",4,"ngIf"],[4,"ngIf"],["class","stats-overlay",3,"click",4,"ngIf"],[1,"btn","btn-primary",3,"click"],[1,"pi","pi-plus","me-1"],[1,"card","border-0","shadow-sm","mb-4"],[1,"card-body"],[1,"h6","mb-3"],[1,"row","g-3"],[1,"col-md-8"],[1,"form-label"],[1,"text-muted","small","fw-normal"],["type","text","maxlength","255","placeholder","On a un Discord \u{1F389}",1,"form-control",3,"ngModelChange","ngModel"],[1,"col-md-4"],[1,"form-select",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[1,"col-12"],["rows","3","placeholder","Rejoins la communaut\xE9 Hou.la : entraide, support, FAQ\u2026",1,"form-control",3,"ngModelChange","ngModel"],[1,"d-flex","gap-2","align-items-center","mb-2"],[1,"btn","btn-outline-secondary","btn-sm","mb-0"],[1,"pi","pi-upload","me-1"],["type","file","accept","image/*","hidden","",3,"change","disabled"],[1,"text-muted","small"],["type","text","placeholder","https://\u2026",1,"form-control",3,"ngModelChange","ngModel"],["alt","Aper\xE7u","class","img-fluid rounded mt-2 border","style","max-height: 120px",3,"src",4,"ngIf"],["value","popup"],["value","banner_marketplace","disabled",""],["value","feed_card","disabled",""],[1,"form-text"],["value","button"],["value","full"],["value","none"],[1,"form-check"],["type","checkbox","id","sec-toggle",1,"form-check-input",3,"ngModelChange","ngModel"],["for","sec-toggle",1,"form-check-label"],[1,"col-md-3"],["type","datetime-local",1,"form-control",3,"ngModelChange","ngModel"],["type","number",1,"form-control",3,"ngModelChange","ngModel"],[1,"my-1"],["type","button",1,"btn","btn-link","p-0","text-decoration-none",3,"click"],[1,"pi","me-1",3,"ngClass"],[1,"d-flex","justify-content-end","gap-2","mt-4"],[1,"btn","btn-outline-secondary",3,"click","disabled"],[1,"btn","btn-primary",3,"click","disabled"],[3,"value"],["alt","Aper\xE7u",1,"img-fluid","rounded","mt-2","border",2,"max-height","120px",3,"src"],["class","col-md-4",4,"ngIf"],[1,"col-md-2"],[3,"ngClass"],["type","text","placeholder","https://hou.la/discord",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","Rejoindre le Discord",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","En savoir plus",1,"form-control",3,"ngModelChange","ngModel"],[1,"col-md-5"],[1,"col-md-6"],["type","text","placeholder","FR, BE, CH",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","fr, en",1,"form-control",3,"ngModelChange","ngModel"],[1,"form-label","d-block"],["class","form-check form-check-inline",4,"ngFor","ngForOf"],[1,"form-check","form-check-inline"],["type","checkbox",1,"form-check-input",3,"change","id","checked"],[1,"form-check-label",3,"for"],["type","number","placeholder","ex 20260700",1,"form-control",3,"ngModelChange","ngModel"],["class","text-muted py-4",4,"ngIf"],["class","text-muted py-5 text-center",4,"ngIf"],["class","border rounded",4,"ngIf"],[1,"text-muted","py-4"],[1,"text-muted","py-5","text-center"],[1,"border","rounded"],[1,"table","table-hover","mb-0","align-middle"],[1,"table-light"],[1,"text-end"],[4,"ngFor","ngForOf"],[1,"fw-semibold"],["class","small text-muted",4,"ngIf"],[1,"badge",3,"ngClass"],[1,"small"],[1,"small","text-muted"],["title","Stats",1,"btn","btn-sm","btn-link","text-secondary","p-1",3,"click"],[1,"pi","pi-chart-bar"],["title","Modifier",1,"btn","btn-sm","btn-link","text-primary","p-1",3,"click"],[1,"pi","pi-pencil"],["title","Supprimer",1,"btn","btn-sm","btn-link","text-danger","p-1",3,"click"],[1,"pi","pi-trash"],[1,"stats-overlay",3,"click"],[1,"stats-panel","card","shadow",3,"click"],[1,"d-flex","justify-content-between","align-items-start","mb-3"],[1,"h6","mb-0"],[1,"btn","btn-sm","btn-link","text-muted","p-0",3,"click"],[1,"pi","pi-times"],["class","text-muted",4,"ngIf"],[1,"text-muted"],[1,"row","g-2","text-center","mb-3"],[1,"col"],[1,"border","rounded","py-2"],[1,"fs-5","fw-bold"],["class","table table-sm",4,"ngIf"],[1,"table","table-sm"]],template:function(e,d){e&1&&(n(0,"div",0)(1,"div",1)(2,"div")(3,"h1",2),l(4,"Annonces in-app"),i(),n(5,"p",3),l(6," Popups server-driven affich\xE9s dans l\u2019app Flutter \u2014 ciblage, programmation, stats. "),i()(),_(7,de,3,0,"button",4),i(),_(8,Ce,99,28,"div",5)(9,Ue,4,3,"div",6)(10,He,10,3,"div",7),i()),e&2&&(r(7),m("ngIf",!d.edit),r(),m("ngIf",d.edit),r(),m("ngIf",!d.edit),r(),m("ngIf",d.statsFor))},dependencies:[z,j,N,G,q,H,oe,te,ne,K,$,Y,ee,X,ie,Z],styles:[".stats-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1050;padding:16px}.stats-panel[_ngcontent-%COMP%]{width:100%;max-width:560px;max-height:85vh;overflow-y:auto}"]})};export{re as ViewAdminAnnouncementsComponent};
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.