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 )
. count
. sort_by { | el | el [ 0 ] [ 0 ] . rjust ( 3 , " 0 " ) }
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 )
. count
. sort_by { | el | el [ 0 ] [ 0 ] . rjust ( 3 , " 0 " ) }
end
def display_threshold
DISPLAY_THRESHOLD
end
def row_parser_class
bulk_upload . prefix_namespace :: RowParser
end
end