PageSourceSearch

https://camaraaraci.ba.gov.br/assets/Banners-Bh9S0e2M.js

js camaraaraci.ba.gov.br collected 2026-09-25 10:20:25 UTC 11,382 bytes, 1 lines download raw bytes

1import{c as me,u as ue,b as y,j as e}from"./vendor-query-CAW0R6Fd.js";import{r as o}from"./vendor-react-BIBNHc4z.js";import{a as ge}from"./upload.service-F-3d7jjz.js";import{a1 as pe,c1 as xe,B as g,au as he,a2 as je,a3 as be,a4 as fe,L as m,c2 as J,b7 as q,c3 as ve,c4 as W,aS as Ne,ax as V,j as X,b6 as we,c5 as Ce,c6 as ye,q as v,aA as u,c7 as ke,c8 as Ue,c9 as Se,ca as Be}from"./index-DxX8Lkqr.js";import{I as h}from"./input-CeFgxTaw.js";import{I as Y}from"./ImageCropDialog-B8OC_6Z4.js";import{c as Ie}from"./imageCompression-Ch4aVlpm.js";import"./storage-qMEd4SuO.js";import"./ui-radix-CMPBktV5.js";import"./utils-objBp_8x.js";const Le=["image/jpeg","image/png","image/webp"],Re=2*1024*1024,Z=x=>Le.includes(x.type)?x.size>Re?(u.error("Arquivo muito grande. Máximo permitido: 2MB."),!1):!0:(u.error("Formato não suportado. Use JPG, PNG ou WebP."),!1),Ae=()=>{const x=me(),[$,N]=o.useState(!1),[ee,k]=o.useState(!1),[ae,U]=o.useState(!1),[S,B]=o.useState(null),[I,L]=o.useState(null),[r,z]=o.useState(null),[w,R]=o.useState(null),[n,D]=o.useState(null),[T,F]=o.useState(null),[c,M]=o.useState(null),[d,j]=o.useState({titulo:"",subtitulo:"",link_url:"",ativo:!0});o.useEffect(()=>()=>{n&&URL.revokeObjectURL(n),c&&URL.revokeObjectURL(c)},[n,c]);const{data:t,isLoading:se}
1=ue({queryKey:v.banners.heroAdmin(),queryFn:Be}),C=async a=>{const s=new File([a],"banner.jpg",{type:a.type||"image/jpeg"}),l=await Ie(s,200),i=`banner-${Date.now()}.jpg`,f=new File([l],i,{type:"image/jpeg"});return(await ge({bucket:"banners",path:i,file:f,contentType:"image/jpeg"})).publicUrl},P=y({mutationFn:async a=>{const{imageBlob:s,mobileImageBlob:l,...i}=a,f=await C(s);let p;return l&&(p=await C(l)),await ye({...i,imagem_url:f,imagem_mobile_url:p})},onSuccess:()=>{x.invalidateQueries({queryKey:v.banners.all}),u.success("Banner criado com sucesso!"),b()},onError:()=>{u.error("Erro ao criar banner")}}),_=y({mutationFn:async a=>{const{imageBlob:s,mobileImageBlob:l,id:i,...f}=a;let p={...f};if(s){const E=await C(s);p.imagem_url=E}if(l){const E=await C(l);p.imagem_mobile_url=E}else l===null&&(p.imagem_mobile_url=null);return await ke(i,p)},onSuccess:()=>{x.invalidateQueries({queryKey:v.banners.all}),u.success("Banner atualizado com sucesso!"),b()},onError:()=>{u.error("Erro ao atualizar banner")}}),O=y({mutationFn:Ue,onSuccess:()=>{x.invalidateQueries({queryKey:v.banners.all}),u.success("Banner deletado com sucesso!"),b()},onError:()=>{u.error("Erro ao deletar banner")}}),A=y({mutationFn:Se,onSuccess:()=>{x.invalidateQueries({queryKey:v.banners.all}),u.success("Ordem atualizada!")}}),K=a=>{var l;const s=(l=a.target.files)==null?void 0:l[0];if(s){if(!Z(s)){a.target.value="";return}const i=new FileReader;i.onload=()=>{B(i.result),k(!0)},i.readAsDataURL(s)}},G=a=>{var l;const s=(l=a.target.files)==null?void 0:l[0];if(s){if(!Z(s)){a.target.value="";return}const i=new FileReader;i.onload=()=>{L(i.result),U(!0)},i.readAsDataURL(s)}},te=a=>{n&&URL.revokeObjectURL(n),R(a),D(URL.createObjectURL(a))},re=a=>{c&&URL.revokeObjectURL(c),F(a),M(URL.createObjectURL(a))},le=()=>{if(r)_.mutate({id:r.id,...d,imageBlob:w||void 0,mobileImageBlob:T||void 0});else{if(!w){u.error("Selecione e recorte uma imagem");return}P.mutate({...d,imageBlob:w,mobileImageBlob:T||void 0})}},b=()=>{j({titulo:"",subtitulo:"",link_url:"",ativo:!0}),z(null),N(!1),B(null),L(null),n&&URL.revokeObjectURL(n),c&&URL.revokeObjectURL(c),R(null),D(null),F(null),M(null)},ie=a=>{n&&URL.revokeObjectURL(n),c&&URL.revokeObjectURL(c),R(null),D(null),F(null),M(null),B(null),L(null),z(a),j({titulo:a.titulo,subtitulo:a.subtitulo||"",link_url:a.link_url||"",ativo:a.ativo}),N(!0)},oe=a=>{a||b(),N(a)},ne=()=>{r&&confirm("Deseja realmente excluir este banner? Esta ação não pode ser desfeita.")&&O.mutate(r.id)},ce=a=>{if(a===0||!t)return;const s=[{id:t[a].id,ordem:t[a-1].ordem},{id:t[a-1].id,ordem:t[a].ordem}];A.mutate(s)},de=a=>{if(!t||a===t.length-1)return;const s=[{id:t[a].id,ordem:t[a+1].ordem},{id:t[a+1].id,ordem:t[a].ordem}];A.mutate(s)},Q=n||(r==null?void 0:r.imagem_url),H=c||(r==null?void 0:r.imagem_mobile_url);return se?e.jsx("div",{className:"p-8",children:"Carregando..."}):e.jsxs("div",{className:"p-8",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Banners do Hero"}),e.jsx("p",{className:"text-muted-foreground mt-2",children:"Gerencie os banners exibidos no topo da página inicial"})]}),e.jsxs(pe,{open:$,onOpenChange:oe,children:[e.jsx(xe,{asChild:!0,children:e.jsxs(g,{onClick:()=>{b(),N(!0)},children:[e.jsx(he,{className:"w-4 h-4 mr-2"}),"Novo Banner"]})}),e.jsxs(je,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsx(be,{children:e.jsx(fe,{children:r?"Editar Banner":"Novo Banner"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(m,{children:"Imagem Desktop *"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-2",children:"1920×600px recomendado"}),Q?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"relative rounded-lg overflow-hidden border",children:[e.jsx("img",{src:Q,alt:"Preview",className:"w-full h-28 object-cover"}),n&&e.jsx("span",{className:"absolute top-1 left-1 bg-primary text-primary-foreground text-xs px-1.5 py-0.5 rounded",children:"Novo recorte"})]}),e.jsxs("div",{className:"flex gap-2",children:[S&&e.jsxs(g,{type:"button",variant:"outline",size:"sm",onClick:()=>k(!0),children:[e.jsx(J,{className:"w-4 h-4 mr-1"}),"Recortar"]}),e.jsxs(m,{htmlFor:"imagem-change",className:"inline-flex items-center justify-center gap-1 rounded-md text-sm font-medium border border-input bg-background hover:bg-accent hover:text-accent-foreground h-8 px-3 cursor-pointer",children:[e.jsx(q,{className:"w-4 h-4"}),"Trocar"]}),e.jsx(h,{id:"imagem-change",type:"file",accept:"image/jpeg,image/png,image/webp",onChange:K,className:"hidden"})]})]}):e.jsxs("div",{children:[e.jsxs(m,{htmlFor:"imagem",className:"flex flex-col items-center justify-center w-full h-28 border-2 border-dashed rounded-lg cursor-pointer bg-muted/50 hover:bg-muted",children:[e.jsx(q,{className:"w-6 h-6 text-muted-foreground mb-1"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"Selecionar imagem"})]}),e.jsx(h,{id:"imagem",type:"file",accept:"image/jpeg,image/png,image/webp",onChange:K,className:"hidden"})]})]}),e.jsxs("div",{children:[e.jsx(m,{children:"Imagem Mobile"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-2",children:"800×1000px recomendado (opcional)"}),H?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"relative rounded-lg overflow-hidden border w-24",children:[e.jsx("img",{src:H,alt:"Preview Mobile",className:"w-24 h-28 object-cover"}),c&&e.jsx("span",{className:"absolute top-1 left-1 bg-primary text-primary-foreground text-xs px-1 py-0.5 rounded",children:"Novo"})]}),e.jsxs("div",{className:"flex gap-2",children:[I&&e.jsxs(g,{type:"button",variant:"outline",size:"sm",onClick:()=>U(!0),children:[e.jsx(J,{className:"w-4 h-4 mr-1"}),"Recortar"]}),e.jsxs(m,{htmlFor:"imagem-mobile-change",className:"inline-flex items-center justify-center gap-1 rounded-md text-sm font-medium border border-input bg-background hover:bg-accent hover:text-accent-foreground h-8 px-3 cursor-pointer",children:[e.jsx(q,{className:"w-4 h-4"}),"Trocar"]}),e.jsx(h,{id:"imagem-mobile-change",type:"file",accept:"image/jpeg,image/png,image/webp",onChange:G,className:"hidden"})]})]}):e.jsxs("div",{children:[e.jsxs(m,{htmlFor:"imagem-mobile",className:"flex flex-col items-center justify-center w-24 h-28 border-2 border-dashed rounded-lg cursor-pointer bg-muted/50 hover:bg-muted",children:[e.jsx(ve,{className:"w-5 h-5 text-muted-foreground mb-1"}),e.jsx("span",{className:"text-xs text-muted-foreground text-center",children:"Mobile"})]}),e.jsx(h,{id:"imagem-mobile",type:"file",accept:"image/jpeg,image/png,image/webp",onChange:G,className:"hidden"})]})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground bg-muted/50 rounded px-3 py-2",children:"JPG, PNG ou WebP · Máx. 2MB · Comprimido automaticamente para ~200KB"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(m,{htmlFor:"titulo",children:"Título"}),e.jsx(h,{id:"titulo",value:d.titulo,onChange:a=>j({...d,titulo:a.target.value}),placeholder:"Título do banner (opcional)"})]}),e.jsxs("div",{children:[e.jsx(m,{htmlFor:"subtitulo",children:"Subtítulo"}),e.jsx(h,{id:"subtitulo",value:d.subtitulo,onChange:a=>j({...d,subtitulo:a.target.value}),placeholder:"Subtítulo (opcional)"})]})]}),e.jsxs("div",{children:[e.jsx(m,{htmlFor:"link_url",children:"Link (URL)"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(W,{className:"w-5 h-5 mt-2 shrink-0"}),e.jsx(h,{id:"link_url",value:d.link_url,onChange:a=>j({...d,link_url:a.target.value}),placeholder:"https://exemplo.com"})]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Ne,{id:"ativo",checked:d.ativo,onCheckedChange:a=>j({...d,ativo:a})}),e.jsx(m,{htmlFor:"ativo",children:"Banner ativo"})]}),e.jsxs("div",{className:"flex gap-3 pt-2",children:[r&&e.jsxs(g,{type:"button",variant:"destructive",onClick:ne,disabled:O.isPending,children:[e.jsx(V,{className:"w-4 h-4 mr-2"}),"Excluir"]}),e.jsx(g,{type:"button",className:"flex-1",disabled:!r&&!w||P.isPending||_.isPending,onClick:le,children:P.isPending||_.isPending?"Salvando...":r?"
1Salvar Alterações":"Criar Banner"})]})]})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[t==null?void 0:t.map((a,s)=>e.jsx(X,{className:"p-4",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(g,{variant:"ghost",size:"sm",onClick:()=>ce(s),disabled:s===0,children:"↑"}),e.jsx(we,{className:"w-5 h-5 text-muted-foreground"}),e.jsx(g,{variant:"ghost",size:"sm",onClick:()=>de(s),disabled:s===t.length-1,children:"↓"})]}),e.jsx("img",{src:a.imagem_url,alt:a.titulo||"Banner",className:"w-32 h-20 object-cover rounded"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"font-semibold",children:a.titulo||e.jsx("span",{className:"text-muted-foreground italic",children:"Sem título"})}),a.subtitulo&&e.jsx("p",{className:"text-sm text-muted-foreground",children:a.subtitulo}),a.link_url&&e.jsxs("p",{className:"text-xs text-muted-foreground flex items-center gap-1 mt-1",children:[e.jsx(W,{className:"w-3 h-3"}),a.link_url]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:a.ativo?"✓ Ativo":"✗ Inativo"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(g,{variant:"outline",size:"sm",onClick:()=>ie(a),children:e.jsx(Ce,{className:"w-4 h-4"})}),e.jsx(g,{variant:"destructive",size:"sm",onClick:()=>{confirm("Deseja realmente deletar este banner?")&&O.mutate(a.id)},children:e.jsx(V,{className:"w-4 h-4"})})]})]})},a.id)),(t==null?void 0:t.length)===0&&e.jsx(X,{className:"p-8 text-center",children:e.jsx("p",{className:"text-muted-foreground",children:'Nenhum banner cadastrado. Clique em "Novo Banner" para começar.'})})]}),S&&e.jsx(Y,{open:ee,onOpenChange:k,imageSrc:S,onCropComplete:te,aspect:1920/600}),I&&e.jsx(Y,{open:ae,onOpenChange:U,imageSrc:I,onCropComplete:re,aspect:4/5})]})};export{Ae 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.