PageSourceSearch

https://portal.easymarine.com.br/assets/CancellationForms_80738768.js

js easymarine.com.br collected 2026-09-24 13:44:34 UTC 15,019 bytes, 1 lines download raw bytes

1import{R as N,a6 as q,b2 as T,a5 as p,e$ as A,a0 as h,O as u,L as e,a2 as _,ax as b,ay as k,az as I,aA as D,aB as y,aa as R,ab as M,ac as P,ad as U,ae as V,a3 as H,Z as x,cK as E,bu as W,a4 as K,c6 as F,ag as G,cg as X,ch as Z,ci as J,cj as ee,ck as se,cl as ae,cm as te,cn as ne,by as O,ej as re,ek as ie,el as oe,em as f,fg as ce,ba as le,am as de,aU as ue}from"./index_ec3ba43a.js";import{a as me,C as xe,T as $,b as pe,u as he}from"./CloneTemplateDialog_fe6e1af3.js";import{u as ge}from"./useCompanySelectCompanies_4476b9fa.js";import"./radio-group_40170f7f.js";import z from"./link-2_32794a74.js";import fe from"./circle-x_7eac93d2.js";import{C as je}from"./CancellationInterviewDialog_a205f236.js";import ve from"./ellipsis-vertical_7d1c71f3.js";import ye from"./phone-call_cd4bdcd4.js";import _e from"./list-checks_a8d668b4.js";import Ne from"./pencil_83058099.js";import Ce from"./plus_f3170890.js";import"./disabled-action-tooltip_e55845a3.js";import"./request-fields_8158406e.js";import"./file-up_18576b3f.js";import"./arrow-up_3bfea50a.js";import"./arrow-down_a55143db.js";import"./useCompanyOrganizations_26757f65.js";import"./companyPhases_d5a7cf05.js";import"./RequestFieldInput_198b93d6.js";const L=["request-form-invites"],we=["request-templates-admin"],be=["request-templates"];function ke(){const s=q();return T({mutationFn:async({id:a,allowPortal:n})=>{const{error:r}=await h.from("request_form_templates").update({allow_portal:n}).eq("id",a);if(r)throw r;return n},onSuccess:a=>{s.invalidateQueries({queryKey:we}),s.invalidateQueries({queryKey:be}),p.success(a?"Disponível no portal do cliente":"Removido do portal")},onError:a=>p.error(A(a))})}function Ie(){return N({queryKey:["request-form-submission-counts"],queryFn:async()=>{const{data:s,error:a}=await h.from("request_form_submissions").select("template_id").limit(5e3);if(a)throw a;const n=new Map;for(const r of s??[])r.template_id&&n.set(r.template_id,(n.get(r.template_id)??0)+1);return n}})}function De(){const s=q();return T({mutationFn:async a=>{const n=new Date(Date.now()+a.validity_days*864e5).toISOString(),{data:r,error:t}=await h.from("request_form_invites").insert({template_id:a.template_id,organization_id:a.organization_id,company_id:a.company_id,contact_id:a.contact_id,expires_at:n}).select("id, token").single();if(t)throw t;return r},onSuccess:()=>{s.invalidateQueries({queryKey:L})},onError:a=>p.error(A(a))})}function Se(){const s=q();return T({mutationFn:async a=>{const{error:n}=await h.from("request_form_invites").update({revoked_at:new Date().toISOString()}).eq("id",a).is("used_at",null).is("revoked_at",null);if(n)throw n},onSuccess:()=>{s.invalidateQueries({queryKey:L}),p.success("Link revogado")},onError:a=>p.error(A(a))})}const B=[7,15,30],qe={pending:"Aguardando resposta",submitted:"Respondido",expired:"Expirado",revoked:"Revogado"};function Te(s){return s.revoked_at?"revoked":s.used_at?"submitted":new Date(s.expires_at).getTime()<Date.now()?"expired":"pending"}function Ae(s){return`/solicitacao/${s}`}function Q(s,a){var c;const n=Ae(a),r=(c=s==null?void 0:s.portal_custom_domain)==null?void 0:c.trim();return r?`https://${r.replace(/^https?:\/\//i,"").replace(/\/+$/,"")}${n}`:`${typeof window<"u"?window.location.origin:""}${n}`}function Ee(s,a){const[n,r]=u.useState(""),[t,c]=u.useState(""),[o,d]=u.useState(B[0]),[l,i]=u.useState(null),{data:g=[],isLoading:C}=ge(a||void 0),{data:j=[]}=N({queryKey:["invite-contacts",n],enabled:!!n,queryFn:async()=>{const{data:m,error:v}=await h.from("contacts").select("id, nome_completo").eq("company_id",n).eq("is_active",!0).order("nome_completo");if(v)throw v;return m??[]}}),w=De();return u.useEffect(()=>{r(""),c(""),i(null)},[s]),u.useEffect(()=>{c("")},[n]),{companies:g,loadingCompanies:C,contacts:j,companyId:n,setCompanyId:r,contactId:t,setContactId:c,validityDays:o,setValidityDays:d,generatedUrl:l,setGeneratedUrl:i,createInvite:w}}const S="__none__";function Le({companies:s,loadingCompanies:a,contacts:n,companyId:r,setCompanyId:t,contactId:c,setContactId:o,validityDays:d,setValidityDays:l}){return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{children:"Cliente (empresa) *"}),e.jsxs(b,{value:r,onValueChange:t,children:[e.jsx(k,{children:e.jsx(I,{placeholder:a?"Carregando...":"Selecione a empresa"})}),e.jsx(D,{className:"bg-popover z-50",children:s.map(i=>e.jsx(y,{value:i.id,children:i.nome_fantasia||i.razao_social},i.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{children:"Contato (opcional)"}),e.jsxs(b,{value:c||S,onValueChange:i=>o(i===S?"":i),disabled:!r,children:[e.jsx(k,{children:e.jsx(I,{placeholder:"Sem c
1ontato específico"})}),e.jsxs(D,{className:"bg-popover z-50",children:[e.jsx(y,{value:S,children:"Sem contato específico"}),n.map(i=>e.jsx(y,{value:i.id,children:i.nome_completo},i.id))]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(_,{children:"Validade do link"}),e.jsxs(b,{value:String(d),onValueChange:i=>l(Number(i)),children:[e.jsx(k,{children:e.jsx(I,{})}),e.jsx(D,{className:"bg-popover z-50",children:B.map(i=>e.jsxs(y,{value:String(i),children:[i," dias · 1 envio"]},i))})]})]})]})}function Fe({template:s,organization:a,onOpenChange:n}){const r=(s==null?void 0:s.organization_id)??"",t=Ee(s==null?void 0:s.id,r),c=u.useMemo(()=>(a==null?void 0:a.nome_fantasia)||(a==null?void 0:a.razao_social)||"",[a]);if(!s)return null;const o=async()=>{const l=await t.createInvite.mutateAsync({template_id:s.id,organization_id:r,company_id:t.companyId,contact_id:t.contactId||null,validity_days:t.validityDays});t.setGeneratedUrl(Q(a,l.token))},d=async()=>{t.generatedUrl&&(await navigator.clipboard.writeText(t.generatedUrl),p.success("Link copiado"))};return e.jsx(R,{open:!0,onOpenChange:n,children:e.jsxs(M,{className:"max-w-lg",children:[e.jsxs(P,{children:[e.jsx(U,{children:"Gerar link para o cliente"}),e.jsxs(V,{children:[s.name," · ",c,". O link é privado, de uso único e não exige login."]})]}),t.generatedUrl?e.jsxs("div",{className:"space-y-3",children:[e.jsxs(_,{children:["Link gerado (válido por ",t.validityDays," dias, 1 envio)"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(H,{readOnly:!0,value:t.generatedUrl,className:"text-xs"}),e.jsx(x,{type:"button",variant:"outline",size:"icon",onClick:d,children:e.jsx(E,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Envie este link ao cliente. A resposta entra na fila do Atendimento."})]}):e.jsx(Le,{companies:t.companies,loadingCompanies:t.loadingCompanies,contacts:t.contacts,companyId:t.companyId,setCompanyId:t.setCompanyId,contactId:t.contactId,setContactId:t.setContactId,validityDays:t.validityDays,setValidityDays:t.setValidityDays}),e.jsxs(W,{children:[e.jsx(x,{type:"button",variant:"outline",onClick:()=>n(!1),children:"Fechar"}),!t.generatedUrl&&e.jsxs(x,{type:"button",onClick:o,disabled:!t.companyId||t.createInvite.isPending,className:"gap-1.5",children:[t.createInvite.isPending?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(z,{className:"h-4 w-4"}),"Gerar link"]})]})]})})}function Oe(s){return N({queryKey:[...L,s??"none"],enabled:!!s,queryFn:async()=>{const{data:a,error:n}=await h.from("request_form_invites").select("*, company:companies(nome_fantasia, razao_social), contact:contacts(nome_completo)").eq("template_id",s).order("created_at",{ascending:!1}).limit(200);if(n)throw n;return a??[]}})}const Re={pending:"default",submitted:"secondary",expired:"outline",revoked:"destructive"};function Me({templateId:s,organization:a}){const{data:n=[],isLoading:r}=Oe(s),t=Se();if(r)return e.jsx("div",{className:"flex justify-center py-6",children:e.jsx(K,{className:"h-5 w-5 animate-spin text-muted-foreground"})});if(n.length===0)return e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:"Nenhum link gerado ainda."});const c=async o=>{await navigator.clipboard.writeText(Q(a,o)),p.success("Link copiado")};return e.jsx("div",{className:"max-h-80 space-y-2 overflow-y-auto pr-1",children:n.map(o=>{var l,i,g;const d=Te(o);return e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-md border p-3",children:[e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsxs("p",{className:"truncate text-sm font-medium",children:[((l=o.company)==null?void 0:l.nome_fantasia)||((i=o.company)==null?void 0:i.razao_social)||"—",(g=o.contact)!=null&&g.nome_completo?` · ${o.contact.nome_completo}`:""]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Criado em ",F(o.created_at)," · válido até"," ",F(o.expires_at)]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsx(G,{variant:Re[d],children:qe[d]}),d==="pending"&&e.jsxs(e.Fragment,{children:[e.jsx(x,{type:"button",variant:"ghost",size:"icon",title:"Copiar link",onClick:()=>c(o.token),children:e.jsx(E,{className:"h-4 w-4"})}),e.jsx(x,{type:"button",variant:"ghost",size:"icon",title:"Revogar link",disabled:t.isPending,onClick:()=>t.mutate(o.id),children:e.jsx(fe,{className:"h-4 w-4 text-destructive"})})]})]})]},o.id)})})}function Pe({template:s,organization:a,submissionCount:n,open:r,setOpen:t}){const c=me();return e.jsxs(e.Fragment,{children:[r.invite&&e.jsx(Fe,{template:s,organization:a,onOpenChange:o=>t("invite",o)}),e.jsx(R,{open:r.list,onOpenChange:o=>t("list",o),children:e.jsxs(M,{className:"max-w-2xl",children:[e.jsxs(P,{children:[e.jsx(U,{children:"Links gerados"}),e.jsxs(V,{children:[s.name," · links privados enviados aos clientes."]})]}),e.jsx(Me,{templateId:s.id,organization:a})]})}),r.clone&&e.jsx(xe,{template:s,onOpenChange:o=>t("clone",o)}),r.edit&&e.jsx($,{open:r.edit,onOpenChange:o=>t("edit",o),template:s}),e.jsx(X,{open:r.remove,onOpenChange:o=>t("remove",o),children:e.jsxs(Z,{children:[e.jsxs(J,{children:[e.jsx(ee,{children:"Excluir modelo?"}),e.jsx(se,{children:n>0?`Este modelo possui ${n} resposta(s) registrada(s). A exclusão é permanente e remove o histórico vinculado.`:"A exclusão é permanente."})]}),e.jsxs(ae,{children:[e.jsx(te,{children:"Cancelar"}),e.jsx(ne,{onClick:()=>c.mutate(s.id),className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Excluir"})]})]})})]})}
1const Ue={invite:!1,list:!1,clone:!1,edit:!1,remove:!1};function Ve(s){var n,r,t;const a=s.split(/\s+/).filter(Boolean);return((((n=a[0])==null?void 0:n[0])??"")+(((r=a[1])==null?void 0:r[0])??((t=a[0])==null?void 0:t[1])??"")).toUpperCase()}function Ke({template:s,organization:a,submissionCount:n,isSuperadmin:r}){const[t,c]=u.useState(Ue),[o,d]=u.useState(!1),l=(m,v)=>c(Y=>({...Y,[m]:v})),i=pe(),g=ke(),C=n>0,j=(a==null?void 0:a.nome_fantasia)||(a==null?void 0:a.razao_social)||"Sem organização",w=s.is_active&&!!a;return e.jsxs("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-3 px-4 py-3 transition-colors hover:bg-muted/40",children:[e.jsxs("div",{className:"flex min-w-40 items-center gap-2.5",children:[e.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-md bg-primary/10 text-xs font-bold text-primary",children:Ve(j)}),e.jsx("span",{className:"truncate text-sm font-semibold",children:j})]}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:s.name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[s.fields.length," pergunta(s) · ",n," resposta(s)"]})]}),e.jsx(G,{variant:s.is_active?"default":"secondary",children:s.is_active?"Ativo":"Inativo"}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(O,{checked:s.is_active,onCheckedChange:m=>i.mutate({id:s.id,isActive:m})}),"Modelo ativo"]}),e.jsxs("label",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(O,{checked:s.allow_portal,onCheckedChange:m=>g.mutate({id:s.id,allowPortal:m})}),"No portal"]})]}),e.jsxs(re,{children:[e.jsx(ie,{asChild:!0,children:e.jsx(x,{type:"button",variant:"ghost",size:"icon","aria-label":"Ações do modelo",children:e.jsx(ve,{className:"h-4 w-4"})})}),e.jsxs(oe,{align:"end",className:"z-50 bg-popover",children:[e.jsxs(f,{onClick:()=>d(!0),disabled:!a,children:[e.jsx(ye,{className:"mr-2 h-4 w-4"})," Abrir cancelamento (entrevista)"]}),e.jsxs(f,{onClick:()=>l("invite",!0),disabled:!w,children:[e.jsx(z,{className:"mr-2 h-4 w-4"})," Gerar link para cliente"]}),e.jsxs(f,{onClick:()=>l("list",!0),children:[e.jsx(_e,{className:"mr-2 h-4 w-4"})," Links gerados"]}),e.jsxs(f,{onClick:()=>l("edit",!0),children:[e.jsx(Ne,{className:"mr-2 h-4 w-4"})," Editar"]}),e.jsxs(f,{onClick:()=>l("clone",!0),children:[e.jsx(E,{className:"mr-2 h-4 w-4"})," Duplicar p/ outra organização"]}),(!C||r)&&e.jsxs(e.Fragment,{children:[e.jsx(ce,{}),e.jsxs(f,{className:"text-destructive focus:text-destructive",onClick:()=>l("remove",!0),children:[e.jsx(le,{className:"mr-2 h-4 w-4"})," Excluir"]})]})]})]}),o&&e.jsx(je,{template:s,organizationId:s.organization_id,open:o,onOpenChange:d}),e.jsx(Pe,{template:s,organization:a,submissionCount:n,open:t,setOpen:l})]})}function Ge(){return N({queryKey:["organizations-with-portal"],queryFn:async()=>{const{data:s,error:a}=await h.from("organizations").select("id, razao_social, nome_fantasia, slug, portal_custom_domain").eq("is_active",!0).eq("group_type","tech").order("razao_social");if(a)throw a;return s??[]}})}function ds(){const{data:s=[],isLoading:a}=he(),{data:n=[]}=Ge(),{data:r}=Ie(),{data:t}=de(),[c,o]=u.useState(!1),d=u.useMemo(()=>s.filter(i=>i.routing_target==="support"&&i.is_cancellation),[s]),l=u.useMemo(()=>new Map(n.map(i=>[i.id,i])),[n]);return e.jsxs("div",{className:"container mx-auto space-y-6 p-4 sm:p-6",children:[e.jsxs("header",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ue,{className:"h-6 w-6 text-primary"}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Formulários de cancelamento"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Modelos por organização, links privados para clientes e liberação no portal."})]})]}),e.jsxs(x,{type:"button",className:"gap-1.5",onClick:()=>o(!0),children:[e.jsx(Ce,{className:"h-4 w-4"})," Novo modelo"]})]}),a?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando modelos..."}):d.length===0?e.jsx("p",{className:"rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground",children:"Nenhum formulário de cancelamento configurado. Crie um novo ou duplique um modelo existente para outra organização."}):e.jsx("div",{className:"divide-y rounded-lg border",children:d.map(i=>e.jsx(Ke,{template:i,organization:i.organization_id?l.get(i.organization_id):void 0,submissionCount:(r==null?void 0:r.get(i.id))??0,isSuperadmin:!!(t!=null&&t.isSuperadmin)},i.id))}),c&&e.jsx($,{open:c,onOpenChange:o,template:null})]})}
1export{ds 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.