You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
class BulkUploadErrorSummaryTableComponent < ViewComponent::Base |
|
DISPLAY_THRESHOLD = 16 |
|
|
|
attr_reader :bulk_upload |
|
|
|
delegate :question_for_field, to: :row_parser_class |
|
|
|
def initialize(bulk_upload:) |
|
@bulk_upload = bulk_upload |
|
|
|
super |
|
end |
|
|
|
def sorted_errors |
|
@sorted_errors ||= setup_errors.presence || bulk_upload |
|
.bulk_upload_errors |
|
.group(:col, :field, :error) |
|
.having("count(*) >= ?", display_threshold) |
|
.order_by_col |
|
.count |
|
end |
|
|
|
def errors? |
|
sorted_errors.present? |
|
end |
|
|
|
def intro |
|
if setup_errors.present? |
|
"This summary shows important questions that have errors. See full error report for more details." |
|
else |
|
"This summary shows questions that have more than #{BulkUploadErrorSummaryTableComponent::DISPLAY_THRESHOLD - 1} errors. See full error report for more details." |
|
end |
|
end |
|
|
|
private |
|
|
|
def setup_errors |
|
@setup_errors ||= bulk_upload |
|
.bulk_upload_errors |
|
.where(category: "setup") |
|
.group(:col, :field, :error) |
|
.order_by_col |
|
.count |
|
end |
|
|
|
def display_threshold |
|
DISPLAY_THRESHOLD |
|
end |
|
|
|
def row_parser_class |
|
bulk_upload.prefix_namespace::RowParser |
|
end |
|
end
|
|
|