PageSourceSearch

https://english-ease.eu/assets/AdminSocialScheduler-CasTRDQw.js

js english-ease.eu collected 2026-10-03 18:44:37 UTC 11,605 bytes, 1 lines download raw bytes

1import{c as Z,j as e,r as c}from"./vendor-react-core-C1Dw5D_W.js";import{c as ne,u as oe,a as _}from"./vendor-query-DrkdRe4t.js";import{s as y,t as l,c as d,m as z,bu as de,d6 as ue,b7 as p,cI as me,dy as he,aS as xe,bx as pe,av as f,aw as I,dQ as ge,ax as je}from"./seo-leaves-BMSG-wqE.js";import{S as V}from"./skeleton-Bu4kpPtk.js";import{T as fe,a as ve,b as H,c as K}from"./tabs-CiK-3-QR.js";import{d as be,b as ye,T as k,c as u,e as Ne,a as n}from"./table-D7PYtuvh.js";import{R as we,l as Se,j as Pe,D as Te,i as Ce,o as _e,n as ze}from"./index-DLA-Kcn6.js";import{S as G,a as X,b as J,c as W,d as v}from"./select-DQg47it4.js";import{r as Ie}from"./ro-xZHXCqxv.js";import"./vendor-supabase-Ds0jIvEe.js";import"./vendor-utils-DRU7gPsF.js";import"./vendor-router-aghDRLMw.js";import"./vendor-motion-QAyZxYtn.js";import"./mistake-diagnostic-tags-D-s5KNjj.js";const w=y,S=2200,b={scheduled:"Programată",publishing:"Se publică",published:"Publicată",failed:"Eșuată",canceled:"Anulată"},ke=r=>{const t=Z.c(5),{status:m}=r;switch(m){case"published":{let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=e.jsx(p,{className:"bg-green-600 hover:bg-green-600 text-white",children:b.published}),t[0]=s):s=t[0],s}case"failed":{let s;return t[1]===Symbol.for("react.memo_cache_sentinel")?(s=e.jsx(p,{variant:"destructive",children:b.failed}),t[1]=s):s=t[1],s}case"canceled":{let s;return t[2]===Symbol.for("react.memo_cache_sentinel")?(s=e.jsx(p,{variant:"outline",children:b.canceled}),t[2]=s):s=t[2],s}case"publishing":{let s;return t[3]===Symbol.for("react.memo_cache_sentinel")?(s=e.jsx(p,{className:"animate-pulse",children:b.publishing}),t[3]=s):s=t[3],s}default:{let s;return t[4]===Symbol.for("react.memo_cache_sentinel")?(s=e.jsx(p,{variant:"secondary",children:b.scheduled}),t[4]=s):s=t[4],s}}},Ue=(r,t=60)=>r?r.length>t?`${r.slice(0,t)}…`:r:"—",De=/\.(jpe?g|png)$/i,Ee=/\.(mp4|mov)$/i,Y=()=>{const r=new Date(Date.now()+36e5);return r.setMinutes(r.getMinutes()-r.getTimezoneOffset()),r.toISOString().slice(0,16)},Re=()=>{const r=ne(),[t,m]=c.useState(!1),[s,U]=c.useState(!1),[D,E]=c.useState("instagram"),[h,R]=c.useState("image"),[x,N]=c.useState(""),[A,M]=c.useState(""),[g,F]=c.useState(""),[P,L]=c.useState(Y),[T,$]=c.useState(!1),j=c.useRef(null),{data:q,isLoading:ee}=oe({queryKey:["socialScheduledPosts"],queryFn:async()=>{const{data:a,error:i}=await w.from("social_scheduled_posts").select("*").order("scheduled_for",{ascending:!1}).limit(100);if(i)throw i;return a},refetchInterval:a=>a.state.data?.some(o=>o.status==="scheduled"||o.status==="publishing")?3e4:!1}),O=()=>{E("instagram"),R("image"),N(""),M(""),F(""),L(Y()),j.current&&(j.current.value="")},ae=async a=>{if(!(h==="image"?De.test(a.name):Ee.test(a.name))){l.error(h==="image"?"Pentru imagine acceptăm doar .jpg / .png":"Pentru reel acceptăm doar .mp4 / .mov");return}$(!0);try{const o=`${Date.now()}-${a.name}`,{error:B}=await y.storage.from("social-media-assets").upload(o,a);if(B)throw B;const{data:ce}=y.storage.from("social-media-assets").getPublicUrl(o);N(ce.publicUrl),l.success("Fișier încărcat")}catch{l.error("Eroare la încărcarea fișierului")}finally{$(!1)}},C=_({mutationFn:async()=>{const{data:{user:a}}=await y.auth.getUser(),{error:i}=await w.from("social_scheduled_posts").insert({platform:D,media_type:h,media_url:x,caption:g.trim(),scheduled_for:new Date(P).toISOString(),status:"scheduled",created_by:a?.id});if(i)throw i},onSuccess:()=>{r.invalidateQueries({queryKey:["socialScheduledPosts"]}),l.success("Postarea a fost programată"),m(!1),O()},onError:()=>{l.error("Eroare la programarea postării")}}),Q=_({mutationFn:async({id:a,patch:i})=>{const{error:o}=await w.from("social_scheduled_posts").update(i).eq("id",a);if(o)throw o},onSuccess:()=>{r.invalidateQueries({queryKey:["socialScheduledPosts"]}),l.success("Postarea a fost actualizată")},onError:()=>{l.error("Eroare la actualizarea postării")}}),se=_({mutationFn:async a=>{const{error:i}=await w.from("social_scheduled_posts").delete().eq("id",a);if(i)throw i},onSuccess:()=>{r.invalidateQueries({queryKey:["socialScheduledPosts"]}),l.success("Postarea a fost ștearsă")},onError:()=>{l.error("Eroare la ștergerea postării")}}),te=async()=>{U(!0);try{const{data:a,error:i}=await y.functions.invoke("social-publisher");if(i)throw i;l.success(`Publisher rulat: ${a?JSON.stringify(a):"fără detalii"}`),r.invalidateQueries({queryKey:["socialScheduledPosts"]})}catch{l.error("Eroare la rularea publisher-ului")}finally{U(!1)}},re=()=>{const a=A.trim();if(!/^https:\/\//.test(a)){l.error("URL-ul trebuie să înceapă cu https://");return}N(a),l.success("URL setat ca media")},ie=()=>{if(!x){l.error("Încarcă un fișier sau setează un URL media");return}if(g.length>S){l.error(`Caption-ul depășește limita de ${S} caractere`);return}if(!P){l.error("Alege data și ora publicării");return}C.mutate()},le=a=>{window.confirm("Ștergi definitiv această postare programată?")&&se.mutate(a.id)};return ee?e.jsxs("div",{className:"p-4 sm:p-6 space-y-4",children:[e.jsx(V,{className:"h-10 w-72"}),e.jsx(V,{className:"h-64 w-full"})]}):e.jsxs("div",{className:"p-4 sm:p-6 space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:"Programare postări social"}),e.jsx("p",{className:"text-muted-foreground",children:"Programează imagini și reels — publicate automat la ora stabilită"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(d,{variant:"outline",onClick:te,disabled:s,children:[s?e.jsx(z,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(de,{className:"h-4 w-4 mr-2"}),"Procesează acum"]}),e.jsxs(d,{onClick:()=>m(!0),children:[e.jsx(ue,{className:"h-4 w-4 mr-2"}),"Programează o postare"]})]})]}),e.jsx("div",{className:"bg-white rounded-lg border shadow-sm overflow-x-auto",children:e.jsxs(be,{children:[e.jsx(ye,{children:e.jsxs(k,{children:[e.jsx(u,{children:"Media"}),e.jsx(u,{children:"Platformă"}),e.jsx(u,{children:"Tip"}),e.jsx(u,{children:"Caption"}),e.jsx(u,{children:"Programată pentru"}),e.jsx(u,{children:"Status"}),e.jsx(u,{children:"Încercări"}),e.jsx(u,{className:"text-right",children:"Acțiuni"})]})}),e.jsx(Ne,{children:q?.length?q.map(a=>e.jsxs(k,{children:[e.jsx(n,{children:a.media_type==="image"?e.jsx("img",{src:a.media_url,alt:"",className:"h-12 w-12 rounded object-cover border",loading:"lazy"}):e.jsx("video",{src:a.media_url,className:"h-12 w-12 rounded object-cover border",muted:!0,preload:"metadata"})}),e.jsx(n,{children:e.jsx(p,{variant:"secondary",className:"capitalize",children:a.platform})}),e.jsx(n,{className:"text-sm",children:a.media_type==="image"?"Imagine":"Reel"}),e.jsx(n,{className:"text-sm max-w-[220px]",children:Ue(a.caption)}),e.jsx(n,{className:"text-sm whitespace-nowrap",children:me(new Date(a.scheduled_for),"d MMM yyyy, HH:mm",{locale:Ie})}),e.jsx(n,{children:e.jsxs("div",{className:"space-y-1",children:[e.jsx(ke,{status:a.status}),a.status==="failed"&&a.error_message&&e.jsx("p",{className:"text-xs text-red-600 max-w-[200px] truncate",title:a.error_message,children:a.error_message})]})}),e.jsx(n,{className:"text-sm",children:a.attempts}),e.jsx(n,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-1",children:[(a.status==="scheduled"||a.status==="publishing")&&e.jsx(d,{variant:"ghost",size:"icon",title:"Anulează",onClick:()=>Q.mutate({id:a.id,patch:{status:"canceled"}}),children:e.jsx(he,{className:"h-4 w-4 text-amber-600"})}),a.status==="failed"&&e.jsx(d,{variant:"ghost",size:"icon",title:"Reîncearcă",onClick:()=>Q.mutate({id:a.id,patch:{status:"scheduled",attempts:0,error_message:null}}),children:e.jsx(xe,{className:"h-4 w-4 text-blue-600"})}),(a.status==="canceled"||a.status==="failed")&&e.jsx(d,{variant:"ghost",size:"icon",title:"Șterge",onClick:()=>le(a),children:e.jsx(pe,{className:"h-4 w-4 text-red-500"})})]})})]},a.id)):e.jsx(k,{children:e.jsx(n,{colSpan:8,className:"text-center text-muted-foreground py-8",children:"Nicio postare programată 
1încă."})})})]})}),e.jsx(Se,{open:t,onOpenChange:a=>{m(a),a||O()},children:e.jsxs(Pe,{className:"max-w-lg max-h-[90vh] overflow-y-auto",children:[e.jsxs(Te,{children:[e.jsx(Ce,{children:"Programează o postare"}),e.jsx(_e,{children:"Postarea va fi publicată automat la data și ora alese."})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{children:"Platformă"}),e.jsxs(G,{value:D,onValueChange:a=>E(a),children:[e.jsx(X,{children:e.jsx(J,{})}),e.jsxs(W,{children:[e.jsx(v,{value:"instagram",children:"Instagram"}),e.jsx(v,{value:"facebook",children:"Facebook (se activează după aprobarea Meta)"}),e.jsx(v,{value:"tiktok",disabled:!0,children:"TikTok — se activează după aprobare"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{children:"Tip media"}),e.jsxs(G,{value:h,onValueChange:a=>{R(a),N(""),j.current&&(j.current.value="")},children:[e.jsx(X,{children:e.jsx(J,{})}),e.jsxs(W,{children:[e.jsx(v,{value:"image",children:"Imagine"}),e.jsx(v,{value:"reel",children:"Reel (video)"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{children:"Media"}),e.jsxs(fe,{defaultValue:"upload",children:[e.jsxs(ve,{className:"grid w-full grid-cols-2",children:[e.jsx(H,{value:"upload",children:"Încarcă fișier"}),e.jsx(H,{value:"url",children:"URL direct"})]}),e.jsxs(K,{value:"upload",className:"space-y-2",children:[e.jsx(I,{ref:j,type:"file",accept:h==="image"?".jpg,.jpeg,.png":".mp4,.mov",disabled:T,onChange:a=>{const i=a.target.files?.[0];i&&ae(i)}}),T&&e.jsxs("p",{className:"text-sm text-muted-foreground flex items-center gap-2",children:[e.jsx(z,{className:"h-4 w-4 animate-spin"}),"Se încarcă fișierul..."]})]}),e.jsxs(K,{value:"url",className:"space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(I,{value:A,onChange:a=>M(a.target.value),placeholder:"https://..."}),e.jsxs(d,{type:"button",variant:"outline",onClick:re,children:[e.jsx(ge,{className:"h-4 w-4 mr-2"}),"Setează"]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"URL public direct către imagine (.jpg/.png) sau video (.mp4/.mov)"})]})]}),x&&e.jsxs("div",{className:"space-y-1",children:[h==="image"?e.jsx("img",{src:x,alt:"Previzualizare",className:"max-h-48 rounded border object-contain"}):e.jsx("video",{src:x,controls:!0,className:"max-h-48 rounded border"}),e.jsx("p",{className:"text-xs text-muted-foreground break-all",children:x})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"post-caption",children:"Caption"}),e.jsx(je,{id:"post-caption",value:g,onChange:a=>F(a.target.value),rows:5,placeholder:"Textul postării..."}),e.jsxs("p",{className:`text-xs ${g.length>S?"text-red-600":"text-muted-foreground"}`,children:[g.length," / ",S," caractere"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(f,{htmlFor:"post-datetime",children:"Data și ora publicării"}),e.jsx(I,{id:"post-datetime",type:"datetime-local",value:P,onChange:a=>L(a.target.value)})]})]}),e.jsxs(ze,{children:[e.jsx(d,{variant:"outline",onClick:()=>m(!1),children:"Anulează"}),e.jsx(d,{onClick:ie,disabled:C.isPending||T,children:C.isPending?e.jsxs(e.Fragment,{children:[e.jsx(z,{className:"h-4 w-4 mr-2 animate-spin"}),"Se salvează..."]}):"Programează"})]})]})})]})},Je=()=>{const r=Z.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(we,{minimumRole:"staff",children:e.jsx(Re,{})}),r[0]=t):t=r[0],t};export{Je as default};

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.