Closed edulima closed 2 years ago
Your description is pretty unclear: see its hard to understand the difference between "a table" and "my table".
Can you share the grid source code? Can you try to reproduce the issue in console and send me the snippet?
How do you generate columns from attributes array? Are you using column_names
attribute?
@bogdan here is the same questions more elaborated I posted on Stackoverflow https://stackoverflow.com/questions/73120544/unable-to-change-column-position-dynamically-datagrid-rails-gem/73120805#73120805
Here is how the columns are generated. There are some custom methods there too. But I don't see an issue with them.
user_layout = UserLayout.find_by(user_id: Current.user.id)
if !user_layout.blank?
// returns and array of columns names ['Is available', 'Created at'] etc
user_layout = user_layout.layout['unit']['table'].split(",")
else
user_layout = ["Address1", "Property", "Created at", "Updated at"]
end
user_layout.each do |a|
case a
when 'Is available'
boolean_column(:is_available)
when 'Date available'
column(:date_available)
when 'Is advertised'
boolean_column(:is_advertised)
when 'Date advertised'
column(:date_advertised)
when 'Is vacant'
boolean_column(:is_vacant)
when 'Date vacant'
column(:date_vacant)
when 'Created at'
datetime_column(:created_at)
when 'Updated at'
datetime_column(:updated_at)
end
end
Try this
class PropertyGrid
include Datagrid
scope { ... }
def define_layout(user_layout)
user_layout.each do |a|
case a
when 'Is available'
boolean_column(:is_available)
when 'Date available'
column(:date_available)
when 'Is advertised'
boolean_column(:is_advertised)
when 'Date advertised'
column(:date_advertised)
when 'Is vacant'
boolean_column(:is_vacant)
when 'Date vacant'
column(:date_vacant)
when 'Created at'
datetime_column(:created_at)
when 'Updated at'
datetime_column(:updated_at)
end
end
class MyController
def index
user_layout = UserLayout.find_by(user_id: Current.user.id)
if !user_layout.blank?
// returns and array of columns names ['Is available', 'Created at'] etc
user_layout = user_layout.layout['unit']['table'].split(",")
else
user_layout = ["Address1", "Property", "Created at", "Updated at"]
end
@grid = PropertyGrid.new(params[:property_grid])
@grid.define_layout(user_layout)
end
end
This works @bogdan thanks for your help. Can you please point me to the documentation where I would be able to find this solutions? Just want to read a make sure I understand it. Thanks
@bogdan I am trying to generate the columns of my table with data coming from a table that stores the order of each column that was created when the user rearrange the columns. e.g in my property_grid.rb file I am trying to generate the columns from
["Attribute 1", "Attribute 2", "Attribute 3"]
. This works great the first time I reload the page but when the attribute array becomes["Attribute 3", "Attribute 2", "Attribute 1"]
it doesn't change. If I add a comment or anything else to the property_grid.rb file than it seems to work. I don't understand why it only works if I manually add something to this file. Any idea why this is happening?