@@ -46,6 +46,7 @@ import type { AssignmentOption, AssignmentType } from '@/components/chat/assignm
4646import { labelsService } from '@/services/contacts/labelsService' ;
4747import { useAppDataStore } from '@/store/appDataStore' ;
4848import type { Label } from '@/types/settings' ;
49+ import { conversationAPI } from '@/services/conversations/conversationService' ;
4950
5051const ContactSidebar = React . lazy ( ( ) => import ( '@/components/chat/contact-sidebar/ContactSidebar' ) ) ;
5152
@@ -103,6 +104,10 @@ const Chat = () => {
103104 const [ assignmentType , setAssignmentType ] = useState < AssignmentType > ( 'agent' ) ;
104105 const [ conversationToAssign , setConversationToAssign ] = useState < Conversation | null > ( null ) ;
105106
107+ // Bulk selection state
108+ const [ selectedConversationIds , setSelectedConversationIds ] = useState < Set < string > > ( new Set ( ) ) ;
109+ const [ isBulkResolving , setIsBulkResolving ] = useState ( false ) ;
110+
106111 // Dashboard Apps state (lazy loaded, not auto-fetched)
107112 const [ dashboardApps ] = useState < DashboardApp [ ] > ( [ ] ) ;
108113 const [ activeTab , setActiveTab ] = useState < string > ( 'chat' ) ;
@@ -132,6 +137,7 @@ const Chat = () => {
132137 // 🎯 FILTROS: Usar handlers dos hooks customizados (DEFINIR ANTES DOS useEffect)
133138 const handleApplyFilters = useCallback (
134139 async ( newFilters : BaseFilter [ ] ) => {
140+ setSelectedConversationIds ( new Set ( ) ) ;
135141 try {
136142 await filterHandlers . handleApplyFilters ( newFilters ) ;
137143 } catch ( error ) {
@@ -180,13 +186,51 @@ const Chat = () => {
180186 } , [ permissionsReady ] ) ;
181187
182188 const handleClearFilters = useCallback ( async ( ) => {
189+ setSelectedConversationIds ( new Set ( ) ) ;
183190 await filterHandlers . handleClearFilters ( ) ;
184191 } , [ filterHandlers ] ) ;
185192
186193 const reloadCurrentFilters = useCallback ( async ( ) => {
187194 await filterHandlers . reloadCurrentFilters ( ) ;
188195 } , [ filterHandlers ] ) ;
189196
197+ const handleToggleConversationSelection = useCallback ( ( displayId : string ) => {
198+ setSelectedConversationIds ( prev => {
199+ const next = new Set ( prev ) ;
200+ if ( next . has ( displayId ) ) {
201+ next . delete ( displayId ) ;
202+ } else {
203+ next . add ( displayId ) ;
204+ }
205+ return next ;
206+ } ) ;
207+ } , [ ] ) ;
208+
209+ const handleClearSelection = useCallback ( ( ) => {
210+ setSelectedConversationIds ( new Set ( ) ) ;
211+ } , [ ] ) ;
212+
213+ const handleBulkResolve = useCallback ( async ( ) => {
214+ if ( selectedConversationIds . size === 0 ) return ;
215+ const displayIds = Array . from ( selectedConversationIds ) ;
216+ const resolvedConversations = conversations . state . conversations
217+ . filter ( c => selectedConversationIds . has ( String ( c . display_id ) ) ) ;
218+ setIsBulkResolving ( true ) ;
219+ try {
220+ await conversationAPI . bulkResolve ( displayIds ) ;
221+ toast . success ( `${ displayIds . length } conversa(s) resolvida(s)` ) ;
222+ setSelectedConversationIds ( new Set ( ) ) ;
223+ for ( const conv of resolvedConversations ) {
224+ conversations . updateConversation ( { ...conv , status : 'resolved' } ) ;
225+ }
226+ } catch ( error ) {
227+ console . error ( 'Bulk resolve error:' , error ) ;
228+ toast . error ( 'Erro ao resolver conversas em lote' ) ;
229+ } finally {
230+ setIsBulkResolving ( false ) ;
231+ }
232+ } , [ selectedConversationIds , conversations ] ) ;
233+
190234 // 🔄 CARREGAMENTO SIMPLES: Apenas carregar mensagens quando conversa muda
191235 useEffect ( ( ) => {
192236 if ( conversations . state . selectedConversationId ) {
@@ -714,6 +758,11 @@ const Chat = () => {
714758 onAssignTeam = { handleAssignTeam }
715759 onAssignTag = { handleAssignTag }
716760 onDeleteConversation = { handleDeleteConversation }
761+ selectedConversationIds = { selectedConversationIds }
762+ onToggleSelect = { handleToggleConversationSelection }
763+ onClearSelection = { handleClearSelection }
764+ onBulkResolve = { handleBulkResolve }
765+ isBulkResolving = { isBulkResolving }
717766 />
718767
719768 { /* Chat Area */ }
0 commit comments