Introduces a new bulk action `delete` for contacts ref: https://github.com/chatwoot/chatwoot/pull/12763 ## Screens <img width="1492" height="973" alt="Screenshot 2025-10-31 at 6 27 21 PM" src="https://github.com/user-attachments/assets/30dab1bb-2c2c-4168-9800-44e0eb5f8e3a" /> <img width="1492" height="985" alt="Screenshot 2025-10-31 at 6 27 32 PM" src="https://github.com/user-attachments/assets/5be610c4-b19e-4614-a164-103b22337382" />
45 lines
937 B
Ruby
45 lines
937 B
Ruby
class Contacts::BulkActionService
|
|
def initialize(account:, user:, params:)
|
|
@account = account
|
|
@user = user
|
|
@params = params.deep_symbolize_keys
|
|
end
|
|
|
|
def perform
|
|
return delete_contacts if delete_requested?
|
|
return assign_labels if labels_to_add.any?
|
|
|
|
Rails.logger.warn("Unknown contact bulk operation payload: #{@params.keys}")
|
|
{ success: false, error: 'unknown_operation' }
|
|
end
|
|
|
|
private
|
|
|
|
def assign_labels
|
|
Contacts::BulkAssignLabelsService.new(
|
|
account: @account,
|
|
contact_ids: ids,
|
|
labels: labels_to_add
|
|
).perform
|
|
end
|
|
|
|
def delete_contacts
|
|
Contacts::BulkDeleteService.new(
|
|
account: @account,
|
|
contact_ids: ids
|
|
).perform
|
|
end
|
|
|
|
def ids
|
|
Array(@params[:ids]).compact
|
|
end
|
|
|
|
def labels_to_add
|
|
@labels_to_add ||= Array(@params.dig(:labels, :add)).reject(&:blank?)
|
|
end
|
|
|
|
def delete_requested?
|
|
@params[:action_name] == 'delete'
|
|
end
|
|
end
|