1import{bJ as e,b7 as a,bY as s,J as n,b$ as l,F as t,W as i,K as r,aS as c,ar as o,aI as d,bg as u,eD as m,ay as h,fZ as x,eG as p,cw as g,c4 as v,eH as y}from"./B7N87Dgv.js";import{ah as j,o as b,r as f,w as _,x as w,y as N,z as C,n as S,S as k,F as T,B as z,d2 as A,L as B,h as F,i as O,j as $,k as D,l as E,a2 as I,a4 as K,c as q,D as P,b as L,d as M,e as H,g as V}from"./C8tXTfP_.js";import{C as W}from"./DhK4rdno.js";import{T as Q}from"./SmFzU6mE.js";import{c as G}from"./sjZp5jap.js";import{D as J}from"./Cs5O5OmG.js";import{M as R}from"./Cv9pRzeb.js";import"./wXrpDM_j.js";import"./21rcAoiV.js";const U=async()=>(await j.post("/v1/telegram/channels/link")).data,Y=async({channelId:e,add_company_ids:a,remove_company_ids:s})=>(await j.put(`/v1/telegram/channels/${e}/companies`,{add_company_ids:a,remove_company_ids:s})).data,Z=async e=>(await j.delete(`/v1/telegram/channels/${e}`)).data,X=async({channelId:e,is_enabled:a})=>(await j.put(`/v1/telegram/channels/${e}/status`,{is_enabled:a})).data;function ee({channel:u,open:m,onOpenChange:h}){const x=a(),p=l({defaultValues:{company_ids:[]}}),{data:g,isLoading:v}=(b=m?(null==u?void 0:u.id)??null:null,e({queryKey:["services","telegram-channel-companies",b],queryFn:()=>(async e=>(await j.get(`/v1/telegram/channels/${e}/companies`)).data)(b),enabled:Boolean(b)})),y=t.useMemo(()=>(null==g?void 0:g.data.companies.map(e=>e.company_id))??[],[null==g?void 0:g.data.companies]);var b;t.useEffect(()=>{m&&g&&p.reset({company_ids:y})},[g,p,y,m]);const{mutate:A,isPending:B}=s({mutationFn:Y,onSuccess:async()=>{await Promise.all([x.invalidateQueries({queryKey:["services","telegram-channels"]}),x.invalidateQueries({queryKey:["services","telegram-channel-companies",null==u?void 0:u.id]})]),n.success("Channel companies updated"),h(!1)},onError:()=>n.error("Failed to update channel companies")}),F="active"===(null==u?void 0:u.connection_status);return i.jsx(f,{open:m,onOpenChange:h,children:i.jsxs(_,{className:"flex w-full flex-col gap-0 p-0 sm:max-w-2xl",children:[i.jsxs(w,{className:"border-b px-6 py-3",children:[i.jsx(N,{className:"text-xl",children:"Channel info"}),i.jsx(C,{className:"sr-only",children:"View channel information and manage assigned companies."})]}),i.jsxs("div",{className:"h-fit flex-1 space-y-6 overflow-y-auto p-6",children:[u&&i.jsxs("div",{className:"grid grid-cols-2 gap-x-8 gap-y-5 rounded-xl bg-gray-50 p-5 dark:bg-gray-900",children:[i.jsx(ae,{label:"Name",value:u.title,valueClassName:"text-blue-600"}),i.jsx(ae,{label:"Type",value:u.chat_type,valueClassName:"capitalize"}),i.jsx(ae,{label:"Status",value:i.jsx(S,{variant:u.is_enabled?"success-secondary":"destructive-secondary",children:u.is_enabled?"Active":"Inactive"})}),i.jsx(ae,{label:"Connection",value:i.jsx(S,{variant:F?"success-secondary":"destructive-secondary",className:"capitalize",children:F?"Connected":u.connection_status})}),i.jsx(ae,{label:"Who added",value:u.tg_added_by_username||"â"}),i.jsx(ae,{label:"Added date",value:r(new Date(u.created_at),"dd.MM.yyyy HH:mm:ss")})]}),v?i.jsx(k,{className:"h-80 w-full"}):i.jsx("form",{id:"channel-companies-form",onSubmit:p.handleSubmit(({company_ids:e})=>{if(!u)return;const a=new Set(y),s=new Set(e),n=e.filter(e=>!a.has(e)),l=y.filter(e=>!s.has(e));0!==n.length||0!==l.length?A({channelId:u.id,add_company_ids:n,remove_company_ids:l}):h(!1)}),children:i.jsx(c,{name:"company_ids",control:p.control,render:({field:e})=>i.jsx(R,{value:e.value,onChange:e.onChange,label:"Companies",placeholder:"Search by name",maxSelectedLabels:2,disabled:B})})})]}),i.jsxs(T,{className:"mt-auto grid grid-cols-2 gap-4 border-t p-6",children:[i.jsx(z,{type:"button",variant:"outline",onClick:()=>h(!1),disabled:B,children:"Close"}),i.jsxs(z,{type:"submit",form:"channel-companies-form",disabled:v||B,children:[B&&i.jsx(o,{icon:d,className:"animate-spin"}),"Save changes"]})]})]})})}function ae({label:e,value:a,valueClassName:s}){return i.jsxs("div",{className:"border-b pb-4 last:border-b-0",children:[i.jsxs("div",{className:"text-sm text-gray-500",children:[e,":"]}),i.jsx("div",{className:`mt-1 font-medium ${s??""}`,children:a})]})}function se(e){const a=e.split("?")[0];return a.length<=24?`${a}${"*".repeat(18)}`:`${a.slice(0,24)}${"*".repeat(18)}`}function ne(){var l,c;const x=A.useSearch(),f=u(),[_,w]=t.useState(null),[N,C]=t.useState(!1),[k,T]=t.useState(null),[q,P]=t.useState(null),[L,M]=t.useState(null),{data:H,isLoading:V,isFetching:W,refetch:R}=(a=>{const s=b(e=>e.hasPermission);return e({queryKey:["services","telegram-channels",a],queryFn:()=>(async({search:e,chat_type:a,page:s=1,limit:n=20}={})=>(await j.get("/v1/telegram/channels",{params:{page:s,size:n,...e?{search:e}:{},...a?{chat_type:a}:{}}})).data)(a),enabled:s("VIEW_TENANT_INTEGRATION")})})(x),Y=t.useMemo(()=>{return e=T,a=P,s=M,[{header:"No",cell:({row:e})=>e.index+1,size:64},{header:"Channel name",cell:({row:e})=>i.jsx("span",{className:"font-medium text-blue-600",children:e.original.title})},{header:"Type",cell:({row:e})=>i.jsx("span",{className:"capitalize",children:e.original.chat_type})},{header:"Added companies",accessorKey:"companies_count"},{header:"Date",cell:({row:e})=>r(new Date(e.original.created_at),"dd.MM.yyyy HH:mm:ss")},{header:"Who added",cell:({row:e})=>i.jsx("span",{className:"font-medium",children:e.original.tg_added_by_username||"â"})},{header:"Status",cell:({row:e})=>i.jsx(S,{variant:e.original.is_enabled?"success-secondary":"destructive-secondary",children:e.original.is_enabled?"Active":"Inactive"})},{header:"Connection",cell:({row:e})=>i.jsx(S,{variant:"active"===e.original.connection_status?"success-secondary":"destructive-secondary",className:"capitalize",children:"active"===e.original.connection_status?"Connected":e.original.connection_status})},{id:"actions",cell:({row:n})=>i.jsxs(Q,{contentClassName:"w-52 p-2",children:[i.jsxs(G,{onSelect:()=>e(n.original),children:[i.jsx(o,{icon:p})," Edit info"]}),i.jsxs(G,{onSelect:()=>a(n.original),children:[i.jsx(o,{icon:g})," Delete"]}),i.jsxs(G,{variant:n.original.is_enabled?"destructive":"default",onSelect:()=>s(n.original),children:[i.jsx(o,{icon:n.original.is_enabled?v:y}),n.original.is_enabled?"Deactivate":"Activate"]})]})}];var e,a,s},[]),{mutate:ae,isPending:se}=s({mutationFn:U,onSuccess:e=>{var a;const s=null==(a=e.data)?void 0:a.start_url;s?(w(s),C(!0)):n.error("Telegram link was not returned")},onError:()=>n.error("Failed to create Telegram link")}),{mutate:ne,isPending:te}=(()=>{const e=a();return s({mutationKey:["delete-telegram-channel"],mutationFn:Z,onSuccess:async()=>
1{await e.invalidateQueries({queryKey:["services","telegram-channels"]}),n.success("Channel deleted")},onError:()=>{n.error("Failed to delete channel")}})})(),{mutate:ie,isPending:ce}=(()=>{const e=a();return s({mutationKey:["update-telegram-channel-status"],mutationFn:X,onSuccess:async(a,s)=>{await e.invalidateQueries({queryKey:["services","telegram-channels"]}),n.success("Channel "+(s.is_enabled?"activated":"deactivated"))},onError:()=>{n.error("Failed to update channel status")}})})(),oe=Boolean(x.search||x.chat_type);return i.jsxs("div",{className:"w-table flex flex-col gap-4",children:[i.jsxs("div",{className:"flex w-full items-end justify-between gap-4",children:[i.jsxs("div",{className:"flex w-full items-end gap-2",children:[i.jsx(J,{id:"service-search",label:"Search",value:x.search,onChange:e=>f({to:".",search:a=>({...a,search:e,page:1})}),placeholder:"Search by name"}),i.jsxs("div",{className:"grid flex-1 shrink-0 basis-45 gap-2 sm:flex-0 sm:basis-64",children:[i.jsx(B,{children:"Type"}),i.jsxs(F,{value:x.chat_type||"all",onValueChange:e=>f({to:".",search:a=>({...a,chat_type:"all"===e?"":e,page:1})}),children:[i.jsx(O,{className:"w-full",children:i.jsx($,{placeholder:"Select type"})}),i.jsxs(D,{children:[i.jsx(E,{value:"all",children:"All types"}),i.jsx(E,{value:"channel",children:"Channel"}),i.jsx(E,{value:"group",children:"Group"}),i.jsx(E,{value:"supergroup",children:"Supergroup"})]})]})]}),i.jsx(z,{variant:"outline",disabled:W,onClick:()=>R(),children:i.jsx(o,{icon:m,className:W?"animate-spin":""})}),oe&&i.jsxs(z,{variant:"ghost",onClick:()=>f({to:".",search:e=>({...e,search:"",chat_type:"",page:1})}),children:[i.jsx(o,{icon:h}),"Reset"]})]}),i.jsx("div",{className:"flex items-center gap-2",children:i.jsxs(z,{disabled:se,onClick:()=>ae(),children:[se&&i.jsx(o,{icon:d,className:"animate-spin"}),"Connect"]})})]}),"table"===x.view?i.jsx(I,{columns:Y,data:(null==H?void 0:H.data.channels)??[],isLoading:V,page:x.page,limit:x.limit,totalPages:(null==(c=null==(l=null==H?void 0:H.data)?void 0:l.paging)?void 0:c.totalPages)??1,emptyState:i.jsxs("div",{className:"flex min-h-[520px] flex-col items-center justify-center px-4 py-16",children:[i.jsx("h2",{className:"text-2xl font-semibold text-gray-900 dark:text-gray-50",children:"No channels are connected"}),i.jsx("p",{className:"mt-2 max-w-sm text-center text-base text-gray-500 dark:text-gray-400",children:"This section shows channels or groups where you've added the bot."}),i.jsxs(z,{className:"mt-5",disabled:se,onClick:()=>ae(),children:[se&&i.jsx(o,{icon:d,className:"animate-spin"}),"Connect Telegram Bot"]})]})}):i.jsx(re,{onClick:()=>f({to:".",search:e=>({...e,view:"table"})})}),i.jsx(le,{open:N,onOpenChange:C,url:_}),i.jsx(ee,{channel:k,open:Boolean(k),onOpenChange:e=>{e||T(null)}}),i.jsx(K,{isOpen:Boolean(q),setOpenChange:e=>{e||P(null)},title:"Delete channel",description:`Are you sure you want to delete ${(null==q?void 0:q.title)??"this channel"}? This action cannot be undone.`,isLoading:te,shouldCloseOnConfirm:!1,onConfirm:()=>{q&&ne(q.id,{onSuccess:()=>P(null)})}}),i.jsx(K,{isOpen:Boolean(L),setOpenChange:e=>{e||M(null)},title:((null==L?void 0:L.is_enabled)?"Deactivate":"Activate")+" channel",description:`Are you sure you want to ${(null==L?void 0:L.is_enabled)?"deactivate":"activate"} ${(null==L?void 0:L.title)??"this channel"}?`,confirmButtonText:(null==L?void 0:L.is_enabled)?"Deactivate":"Activate",confirmButtonVariant:(null==L?void 0:L.is_enabled)?"destructive":"default",isLoading:ce,shouldCloseOnConfirm:!1,onConfirm:()=>{L&&ie({channelId:L.id,is_enabled:!L.is_enabled},{onSuccess:()=>M(null)})}})]})}function le({open:e,onOpenChange:a,url:s}){return i.jsx(P,{open:e&&Boolean(s),onOpenChange:a,children:i.jsxs(L,{className:"gap-5 bg-white p-6 sm:max-w-[555px] dark:bg-gray-950",children:[i.jsxs(M,{className:"gap-4",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx(te,{className:"size-14",iconSize:30}),i.jsx(H,{className:"text-xl font-semibold text-gray-900 dark:text-gray-50",children:"Telegram Bot"})]}),i.jsx(V,{className:"max-w-[460px] text-left text-sm leading-5 text-gray-600 dark:text-gray-400",children:"This bot will connect your profile and
1you can notify all violation and errors."})]}),s&&i.jsx(ie,{url:s}),i.jsx(z,{type:"button",variant:"outline",onClick:()=>a(!1),className:"h-10 w-full bg-white font-medium dark:bg-gray-950",children:"Close"})]})})}function te({className:e,iconSize:a=28}){return i.jsx("div",{className:q("flex size-15 items-center justify-center rounded-full bg-[#0BA5EC] text-white",e),children:i.jsx(o,{icon:x,size:a})})}function ie({url:e}){return i.jsxs("div",{className:"flex h-12 items-center gap-3 rounded-lg border bg-white px-3 shadow-xs dark:bg-gray-950",children:[i.jsx("a",{href:e,target:"_blank",rel:"noreferrer",className:"min-w-0 flex-1 truncate text-sm font-medium text-blue-500 hover:underline",children:se(e)}),i.jsx(W,{text:e,iconSize:20,className:"text-gray-400 hover:text-blue-600"})]})}function re({onClick:e}){return i.jsx("div",{children:i.jsxs("button",{type:"button",onClick:e,className:"min-h-[248px] cursor-pointer rounded-lg bg-white p-5 text-left shadow-xs transition hover:shadow-sm focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:outline-none dark:bg-gray-950",children:[i.jsx(te,{}),i.jsx("h2",{className:"mt-4 text-xl font-semibold text-gray-900 dark:text-gray-50",children:"Telegram Bot"}),i.jsx("p",{className:"mt-2 max-w-[360px] text-sm leading-5 text-gray-600 dark:text-gray-400",children:"This bot will connect your profile and you can notify all violation and errors."})]})})}export{re as TelegramConnectCard,ne 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.