Skip to content

Commit

Permalink
fix: table cache (#2734)
Browse files Browse the repository at this point in the history
* fiix: table cache

* revert
  • Loading branch information
Paul-Bob authored and gabrielgiroe1 committed May 8, 2024
1 parent 9a608fa commit 0ebf0c2
Showing 1 changed file with 20 additions and 13 deletions.
33 changes: 20 additions & 13 deletions app/components/avo/index/resource_table_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ class Avo::Index::ResourceTableComponent < Avo::BaseComponent
include Avo::ApplicationHelper
attr_reader :pagy, :query

def before_render = cache_table_rows
def before_render
@header_fields, @table_row_components = cache_table_rows
end

def initialize(resources: nil, resource: nil, reflection: nil, parent_record: nil, parent_resource: nil, pagy: nil, query: nil, actions: nil)
@resources = resources
Expand Down Expand Up @@ -45,33 +47,33 @@ def selected_all_label
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
# Initialize arrays to hold header fields and table row components
@header_fields = []
@table_row_components = []

generate_table_row_components

# Remove duplicate header fields based on table_header_label
@header_fields.uniq!(&:table_header_label)
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)
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 }
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

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 do |resource|
# 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
header_fields.concat row_fields

# Create a TableRowComponent instance for the resource and add it to @table_row_components
@table_row_components << Avo::Index::TableRowComponent.new(
table_row_components << Avo::Index::TableRowComponent.new(
resource: resource,
fields: row_fields,
reflection: @reflection,
Expand All @@ -80,5 +82,10 @@ def generate_table_row_components
actions: @actions
)
end

# Remove duplicate header fields based on table_header_label
header_fields.uniq!(&:table_header_label)

[header_fields, table_row_components]
end
end

0 comments on commit 0ebf0c2

Please sign in to comment.