PageSourceSearch

https://deblo.ai/_app/immutable/nodes/19.q1vbJnIo.js

js deblo.ai collected 2026-10-01 14:25:44 UTC 13,626 bytes, 2 lines download raw bytes

1import"../chunks/Cu8NcaqY.js";import{o as mt,a as ft}from"../chunks/f-wUHtzb.js";import{p as bt,k as H,i as b,u as Ue,g as e,s as n,t as y,a as v,b as _t,e as o,h as l,j as f,d as Ne,n as Q,r,f as Re,o as xt,c as gt}from"../chunks/rhkUP96i.js";import{d as yt,s as x}from"../chunks/D8T4iVgi.js";import{i as q}from"../chunks/DNikmNGR.js";import{e as R,i as F}from"../chunks/B0ezZpuM.js";import{b as h,c as O,r as Fe,a as De}from"../chunks/Dry2qJan.js";import{b as X}from"../chunks/BlRkb2_w.js";import{g as ht}from"../chunks/Dvw-hdFL.js";import{apiFetch as wt}from"../chunks/D2mP4ypb.js";import{a as Tt,b as At}from"../chunks/7gOqVZ_t.js";import{A as Et}from"../chunks/CDSMX7z-.js";import{M as St}from"../chunks/CB7SVnPU.js";(function(){try{var S=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};S.SENTRY_RELEASE={id:"2c2f6f44af8b47e387232642c241dd34"};var $=new S.Error().stack;$&&(S._sentryDebugIds=S._sentryDebugIds||{},S._sentryDebugIds[$]="c149048d-4378-4dea-9efc-8e122c549d06",S._sentryDebugIdIdentifier="sentry-dbid-c149048d-4378-4dea-9efc-8e122c549d06")}catch{}})();
1var Ct=f('<span class="text-xs text-slate-400">Calcul…</span>'),Lt=f('<span class="text-xs text-red-600"> </span>'),kt=f('<span> </span> <span class="text-xs text-slate-500 ml-1"> </span>',1),Nt=f("<option> </option>"),Rt=f("<option> </option>"),Ft=f("<option> </option>"),Dt=f('<div class="space-y-2 border-l-4 border-emerald-100 pl-3"><div class="text-xs font-semibold text-slate-700"> </div> <div class="space-y-1"><label class="text-xs font-medium text-slate-500"> </label> <input type="text" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"/></div> <div class="space-y-1"><label class="text-xs font-medium text-slate-500"> </label> <textarea rows="3" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none resize-none"></textarea></div></div>'),It=f(`<p class="text-xs text-slate-500">Saisissez le texte pour chaque langue. Les utilisateurs reçoivent la version
2				correspondant à leur langue préférée, avec fallback FR si non rempli.</p> <!>`,1),Mt=f("<option>Chargement…</option>"),jt=f("<option>Aucun template disponible</option>"),Bt=f("<option> </option>"),Gt=f('<div class="space-y-1"><label class="text-xs text-slate-500"> </label> <input type="text" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"/></div>'),qt=f('<div class="space-y-1"><div class="text-xs font-medium text-slate-500">Variables du template</div> <div class="grid grid-cols-1 gap-2 sm:grid-cols-2"></div></div>'),Ot=f('<div class="space-y-3"><div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="bc-template">Template</label> <select id="bc-template" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none disabled:opacity-50"><!></select></div> <!> <p class="text-xs text-slate-500">Le template sera rendu dans la langue de chaque utilisateur. La variable <code class="font-mono bg-slate-100 px-1 rounded"></code> sera vide pour les broadcasts (rendering batché par langue).</p></div>'),$t=f('<div class="rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700"> </div>'),Kt=f(`<div class="space-y-6"><a href="/admin-7f3a9c2d/broadcasts" class="inline-flex items-center gap-1.5 text-sm text-slate-500 hover:text-slate-900"><!> Retour aux campagnes</a> <div class="flex items-center gap-2"><!> <h1 class="text-2xl font-bold text-slate-900">Nouvelle campagne push</h1></div> <section class="rounded-2xl border border-slate-200 bg-white p-5 space-y-3"><h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Identification</h2> <div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="bc-name">Nom (interne)</label> <input id="bc-name" type="text" placeholder="Ex : Lancement nouvelle UI K12 - mai 2026" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"/></div></section> <section class="rounded-2xl border border-slate-200 bg-white p-5 space-y-4"><div class="flex items-center justify-between gap-4"><h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Audience</h2> <div class="text-right"><!></div></div> <div class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"><div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="aud-lang">Langue préférée</label> <select id="aud-lang" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"><option>Toutes</option><!></select></div> <div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="aud-class">Classe</label> <select id="aud-class" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"><option>Toutes</option><!></select></div> <div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="aud-country">Pays</label> <select id="aud-country" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"></select></div> <div class="space-y-1"><label class="text-xs font-medium text-slate-500" for="aud-active">Activité récente</label> <select id="aud-active" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 focus:border-emerald-600 focus:outline-none"><option>Toute période</option><option>≤ 7 jours</option><option>≤ 30 jours</option><option>≤ 90 jours</option></select></div></div></section> <section class="rounded-2xl border border-slate-200 bg-white p-5 space-y-4"><h2 class="text-sm font-semibold uppercase tracking-wide text-slate-500">Contenu</h2> <div class="flex gap-2"><button type="button">Texte personnalisé</button> <button type="button">Template existant</button></div> <!></section> <!> <div class="flex flex-wrap items-center gap-3"><button class="rounded-xl bg-emerald-600 px-5 py-2.5 text-sm font-semibold text-white hover:bg-emerald-700 disabled:opacity-50 disabled:cursor-not-allowed"> </button> <a href="/admin-7f3a9c2d/broadcasts" class="rounded-xl border border-slate-200 bg-white px-5 py-2.5 text-sm font-semibold text-slate-700 hover:bg-slate-50">Annuler</a> <span class="text-xs text-slate-500">Le brouillon sera créé. L'envoi se fait depuis la page de détail (avec preview multi-langue).</span></div></div>`);function aa(S,$){bt($,!0);const D=["fr","en","ar"],Ie={fr:"Français",en:"English",ar:"العربية"},Ve=["cp","ce1","ce2","cm1","cm2","6e","5e","4e","3e","2nde","1ere","tle"],We=[{code:"",label:"Tous"},{code:"CI",label:"Côte d'Ivoire"},{code:"SN",label:"Sénégal"},{code:"CM",label:"Cameroun"},{code:"BJ",label:"Bénin"},{code:"BF",label:"Burkina Faso"},{code:"TG",label:"Togo"},{code:"ML",label:"Mali"},{code:"NE",label:"Niger"},{code:"GN",label:"Guinée"},{code:"CD",label:"RD Congo"},{code:"GA",label:"Gabon"},{code:"FR",label:"France"}];let K=b(""),w=b("custom"),T=b("admin_broadcast"),Z=b(""),ee=b(""),te=b(""),P=b("");const Ye=!0;let I=H({fr:"",en:"",ar:""}),M=H({fr:"",en:"",ar:""}),ae=b(H([])),z=b(!1),se=H({}),j=b(null),re=b(!1),J=b(""),B=null,U=b(!1),G=b("");const oe=Ne(()=>Array.from(new Set(e(ae).map(t=>t.notif_type))).filter(t=>t!=="admin_broadcast")),Me=Ne(()=>He(e(ae),e(T))),je=Ne(()=>({lang:e(Z)||void 0,preferred_class:e(ee)||void 0,country:e(te)||void 0,active_within_days:e(P)?Number(e(P)):void 0,has_push_token:Ye}));Ue(()=>{const t=JSON.stringify(e(je));B&&clearTimeout(B),B=setTimeout(async()=>{n(re,!0),n(J,"");try{n(j,await Tt(JSON.parse(t)),!0)}catch(a){const s=a;n(J,s.detail??s.message??"Erreur",!0)}finally{n(re,!1)}},500)}),Ue(()=>{e(w)==="custom"?n(T,"admin_broadcast"):e(w)==="template"&&e(T)==="admin_broadcast"&&n(T,e(oe)[0]??"",!0)}),mt(()=>{B&&clearTimeout(B)}),ft(async()=>{n(z,!0);try{const t=await wt("/admin/notification-templates");n(ae,await t.json(),!0)}catch(t){console.error("Erreur chargement templates",t)}finally{n(z,!1)}});function He(t,a){if(!a||a==="admin_broadcast")return[];const s=t.find(m=>m.notif_type===a&&m.lang==="fr")??t.find(m=>m.notif_type===a);if(!s)return[];const d=`${s.title_tpl} ${s.body_tpl}`,i=Array.from(d.matchAll(/\{(\w+)\}/g)).map(m=>m[1]),p=new Set(["name_greeting","name_greeting_cap","name","title","message"]);return Array.from(new Set(i.filter(m=>!p.has(m))))}
2function Qe(t){return t.toLocaleString("fr-FR")}function Xe(){if(!e(K).trim())return"Le nom de la campagne est requis.";if(e(w)==="custom"){const t=D.some(s=>I[s].trim()),a=D.some(s=>M[s].trim());if(!t)return"Au moins un titre (FR, EN ou AR) est requis.";if(!a)return"Au moins un message (FR, EN ou AR) est requis."}else if(!e(T)||e(T)==="admin_broadcast")return"Sélectionnez un template.";return null}async function Ze(){const t=Xe();if(t){n(G,t,!0);return}n(G,""),n(U,!0);try{const a={name:e(K).trim(),notif_type:e(T),audience_filter:e(je)};if(e(w)==="custom")a.custom_title=Be(I),a.custom_body=Be(M);else{const d={};for(const[i,p]of Object.entries(se))p!==""&&p!==void 0&&p!==null&&(d[i]=p);a.template_kwargs=d}const s=await At(a);ht(`/admin-7f3a9c2d/broadcasts/${s.id}`)}catch(a){const s=a;n(G,s.detail??s.message??"Erreur",!0)}finally{n(U,!1)}}function Be(t){const a={};for(const[s,d]of Object.entries(t))d.trim()&&(a[s]=d.trim());return a}var le=Kt(),ie=o(le),et=o(ie);Et(et,{class:"h-4 w-4"}),Q(),r(ie);var ne=l(ie,2),tt=o(ne);St(tt,{class:"h-6 w-6 text-emerald-600"}),Q(2),r(ne);var de=l(ne,2),Ge=l(o(de),2),ce=l(o(Ge),2);Fe(ce),h(ce,"maxlength",120),r(Ge),r(de);var ue=l(de,2),ve=o(ue),qe=l(o(ve),2),at=o(qe);{var st=t=>{var a=Ct();v(t,a)},rt=t=>{var a=Lt(),s=o(a,!0);r(a),y(()=>x(s,e(J))),v(t,a)},ot=t=>{var a=kt(),s=Re(a),d=o(s,!0);r(s);var i=l(s,2),p=o(i);r(i),y(m=>{De(s,1,`text-2xl font-bold ${e(j).requires_confirmation?"text-amber-600":"text-emerald-600"}`),x(d,m),x(p,`utilisateur${e(j).count>1?"s":""}`)},[()=>Qe(e(j).count)]),v(t,a)};q(at,t=>{e(re)?t(st):e(J)?t(rt,1):e(j)&&t(ot,2)})}r(qe),r(ve);var Oe=l(ve,2),pe=o(Oe),me=l(o(pe),2),fe=o(me);fe.value=fe.__value="";var lt=l(fe);R(lt,17,()=>D,F,(t,a)=>{var s=Nt(),d=o(s,!0);r(s);var i={};y(()=>{x(d,Ie[e(a)]),i!==(i=e(a))&&(s.value=(s.__value=e(a))??"")}),v(t,s)}),r(me),r(pe);var be=l(pe,2),_e=l(o(be),2),xe=o(_e);xe.value=xe.__value="";var it=l(xe);R(it,17,()=>Ve,F,(t,a)=>{var s=Rt(),d=o(s,!0);r(s);var i={};y(p=>{x(d,p),i!==(i=e(a))&&(s.value=(s.__value=e(a))??"")},[()=>e(a).toUpperCase()]),v(t,s)}),r(_e),r(be);var ge=l(be,2),ye=l(o(ge),2);R(ye,21,()=>We,F,(t,a)=>{var s=Ft(),d=o(s,!0);r(s);var i={};y(()=>{x(d,e(a).label),i!==(i=e(a).code)&&(s.value=(s.__value=e(a).code)??"")}),v(t,s)}),r(ye),r(ge);var $e=l(ge,2),he=l(o($e),2),we=o(he);we.value=we.__value="";var Te=l(we);Te.value=Te.__value="7";var Ae=l(Te);Ae.value=Ae.__value="30";var Ke=l(Ae);Ke.value=Ke.__value="90",r(he),r($e),r(Oe),r(ue);var Ee=l(ue,2),Se=l(o(Ee),2),Ce=o(Se);Ce.__click=()=>n(w,"custom");var Pe=l(Ce,2);Pe.__click=()=>n(w,"template"),r(Se);var nt=l(Se,2);{var dt=t=>{var a=It(),s=l(Re(a),2);R(s,17,()=>D,F,(d,i)=>{var p=Dt(),m=o(p),Le=o(m,!0);r(m);var C=l(m,2),L=o(C),W=o(L);r(L);var A=l(L,2);Fe(A),h(A,"maxlength",200),r(C);var u=l(C,2),c=o(u),k=o(c);r(c);var g=l(c,2);xt(g),h(g,"maxlength",500),r(u),r(p),y(()=>{x(Le,Ie[e(i)]),h(L,"for",`title-${e(i)??""}`),x(W,`Titre (${I[e(i)].length??""}/200)`),h(A,"id",`title-${e(i)??""}`),h(A,"dir",e(i)==="ar"?"rtl":"ltr"),A.dir=A.dir,h(c,"for",`body-${e(i)??""}`),x(k,`Message (${M[e(i)].length??""}/500)`),h(g,"id",`body-${e(i)??""}`),h(g,"dir",e(i)==="ar"?"rtl":"ltr"),g.dir=g.dir}),X(A,()=>I[e(i)],_=>I[e(i)]=_),X(g,()=>M[e(i)],_=>M[e(i)]=_),v(d,p)}),v(t,a)},ct=t=>{var a=Ot(),s=o(a),d=l(o(s),2),i=o(d);{var p=u=>{var c=Mt();c.value=c.__value="",v(u,c)},m=u=>{var c=jt();c.value=c.__value="",v(u,c)},Le=u=>{var c=gt(),k=Re(c);R(k,17,()=>e(oe),F,(g,_)=>{var E=Bt(),N=o(E,!0);r(E);var Y={};y(()=>{x(N,e(_)),Y!==(Y=e(_))&&(E.value=(E.__value=e(_))??"")}),v(g,E)}),v(u,c)};q(i,u=>{e(z)?u(p):e(oe).length===0?u(m,1):u(Le,!1)})}r(d),r(s);var C=l(s,2);{var L=u=>{var c=qt(),k=l(o(c),2);R(k,21,()=>e(Me),F,(g,_)=>{var E=Gt(),N=o(E),Y=o(N,!0);r(N);var ke=l(N,2);Fe(ke),r(E),y(()=>{h(N,"for",`kw-${e(_)??""}`),x(Y,e(_)),h(ke,"id",`kw-${e(_)??""}`)}),X(ke,()=>se[e(_)],pt=>se[e(_)]=pt),v(g,E)}),r(k),r(c),v(u,c)};q(C,u=>{e(Me).length>0&&u(L)})}var W=l(C,2),A=l(o(W));A.textContent="{name_greeting}",Q(),r(W),r(a),y(()=>d.disabled=e(z)),O(d,()=>e(T),u=>n(T,u)),v(t,a)};q(nt,t=>{e(w)==="custom"?t(dt):t(ct,!1)})}r(Ee);var ze=l(Ee,2);{var ut=t=>{var a=$t(),s=o(a,!0);r(a),y(()=>x(s,e(G))),v(t,a)};q(ze,t=>{e(G)&&t(ut)})}var Je=l(ze,2),V=o(Je);V.__click=Ze;var vt=o(V,!0);r(V),Q(4),r(Je),r(le),y(()=>{De(Ce,1,`rounded-lg px-4 py-2 text-sm font-semibold transition-colors ${e(w)==="custom"?"bg-slate-900 text-white":"bg-slate-100 text-slate-600 hover:bg-slate-200"}`),De(Pe,1,`rounded-lg px-4 py-2 text-sm font-semibold transition-colors ${e(w)==="template"?"bg-slate-900 text-white":"bg-slate-100 text-slate-600 hover:bg-slate-200"}`),V.disabled=e(U),x(vt,e(U)?"Création…":"Créer le brouillon")}),X(ce,()=>e(K),t=>n(K,t)),O(me,()=>e(Z),t=>n(Z,t)),O(_e,()=>e(ee),t=>n(ee,t)),O(ye,()=>e(te),t=>n(te,t)),O(he,()=>e(P),t=>n(P,t)),v(S,le),_t()}yt(["click"]);export{aa as component};

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.