Introduces APIs and UI for bulk actions in contacts table. The initial action available will be assign labels Fixes: #8536 #12253 ## Screens <img width="1350" height="747" alt="Screenshot 2025-10-29 at 4 05 08 PM" src="https://github.com/user-attachments/assets/0792dff5-0371-4b2e-bdfb-cd32db773402" /> <img width="1345" height="717" alt="Screenshot 2025-10-29 at 4 05 19 PM" src="https://github.com/user-attachments/assets/ae510404-c6de-4c15-a720-f6d10cdac25b" /> --------- Co-authored-by: Muhsin <muhsinkeramam@gmail.com> Co-authored-by: iamsivin <iamsivin@gmail.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
33 lines
692 B
Ruby
33 lines
692 B
Ruby
class Contacts::BulkActionService
|
|
def initialize(account:, user:, params:)
|
|
@account = account
|
|
@user = user
|
|
@params = params.deep_symbolize_keys
|
|
end
|
|
|
|
def perform
|
|
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 ids
|
|
Array(@params[:ids]).compact
|
|
end
|
|
|
|
def labels_to_add
|
|
@labels_to_add ||= Array(@params.dig(:labels, :add)).reject(&:blank?)
|
|
end
|
|
end
|