Class: Avo::Index::ResourceTableComponent
- Inherits:
-
BaseComponent
- Object
- ViewComponent::Base
- BaseComponent
- Avo::Index::ResourceTableComponent
- Includes:
- ApplicationHelper
- Defined in:
- app/components/avo/index/resource_table_component.rb
Constant Summary
Constants included from Concerns::FindAssociationField
Concerns::FindAssociationField::ASSOCIATIONS
Instance Attribute Summary collapse
-
#pagy ⇒ Object
readonly
Returns the value of attribute pagy.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
Instance Method Summary collapse
- #before_render ⇒ Object
- #cache_table_rows ⇒ Object
- #encrypted_query ⇒ Object
- #generate_table_row_components ⇒ Object
- #selected_all_label ⇒ Object
- #selected_page_label ⇒ Object
Methods included from ApplicationHelper
#a_button, #a_link, #button_classes, #card_classes, #chart_color, #container_classes, #container_is_full_width?, #d, #decode_filter_params, #e, #empty_state, #encode_filter_params, #frame_id, #get_model_class, #input_classes, #mount_path, #number_to_social, #pagy_major_version, #possibly_rails_authentication?, #render_license_warning, #root_path_without_url, #svg, #white_panel_classes
Methods included from ResourcesHelper
#field_wrapper, #filter_wrapper, #index_field_wrapper, #item_selector_data_attributes, #record_path, #record_title, #resource_for_record, #resource_grid, #resource_show_path, #resource_table
Methods inherited from BaseComponent
#component_name, #has_with_trial
Methods included from Concerns::FindAssociationField
Instance Attribute Details
#pagy ⇒ Object (readonly)
Returns the value of attribute pagy.
5 6 7 |
# File 'app/components/avo/index/resource_table_component.rb', line 5 def pagy @pagy end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
5 6 7 |
# File 'app/components/avo/index/resource_table_component.rb', line 5 def query @query end |
Instance Method Details
#before_render ⇒ Object
7 8 9 |
# File 'app/components/avo/index/resource_table_component.rb', line 7 def before_render @header_fields, @table_row_components = cache_table_rows end |
#cache_table_rows ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/components/avo/index/resource_table_component.rb', line 47 def cache_table_rows # Cache the execution of the following block if caching is enabled in Avo configuration cache_if Avo.configuration.cache_resources_on_index_view, @resource.cache_hash(@parent_record), expires_in: 1.day do header_fields, table_row_components = generate_table_row_components # Create an array of header field labels used for each row to render values on the right column header_fields_ids = header_fields.map(&:table_header_label) # Assign header field IDs to each TableRowComponent # We assign it here because only complete header fields array after last table row. table_row_components.map { |table_row_component| table_row_component.header_fields = header_fields_ids } # Return header fields and table row components return [header_fields, table_row_components] end end |
#encrypted_query ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'app/components/avo/index/resource_table_component.rb', line 20 def encrypted_query # TODO: move this to the resource where we can apply the adapter pattern if Module.const_defined?("Ransack::Search") && @query.instance_of?(Ransack::Search) @query = @query.result end Avo::Services::EncryptionService.encrypt(message: @query, purpose: :select_all, serializer: Marshal) rescue disable_select_all end |
#generate_table_row_components ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'app/components/avo/index/resource_table_component.rb', line 64 def generate_table_row_components # Initialize arrays to hold header fields and table row components header_fields = [] table_row_components = [] # Loop through each resource in @resources @resources.each_with_index do |resource, index| # Get fields for the current resource and concat them to the @header_fields row_fields = resource.get_fields(reflection: @reflection, only_root: true) header_fields.concat row_fields # Create a TableRowComponent instance for the resource and add it to @table_row_components table_row_components << resource.resolve_component(Avo::Index::TableRowComponent).new( resource: resource, fields: row_fields, reflection: @reflection, parent_record: @parent_record, parent_resource: @parent_resource, actions: @actions, index: ) end # Remove duplicate header fields based on table_header_label header_fields.uniq!(&:table_header_label) [header_fields, table_row_components] end |
#selected_all_label ⇒ Object
39 40 41 42 43 44 45 |
# File 'app/components/avo/index/resource_table_component.rb', line 39 def selected_all_label if @resource.pagination_type.countless? t "avo.records_selected_from_all_pages_html" else t "avo.x_records_selected_from_all_pages_html", count: @pagy.count end end |
#selected_page_label ⇒ Object
31 32 33 34 35 36 37 |
# File 'app/components/avo/index/resource_table_component.rb', line 31 def selected_page_label if @resource.pagination_type.countless? t "avo.x_records_selected_from_page_html", selected: @pagy.in else t "avo.x_records_selected_from_a_total_of_x_html", selected: @pagy.in, count: @pagy.count end end |