We encountered this strange error using WiceGrid: on some occasions when paginating to the second page, we actually lost the filtering, but not for all columns.
WiceGrid offers to define columns which are only rendered when creating html or exporting to csv. For us specifically, in some cases we want to show some pretty html when rendering html but just show the text when rendering/exporting to csv. For instance:
g.column name: 'Status', attribute: 'status', in_csv: false do |plan|
render 'grid_status_label', plan_request: plan, history: true
end
g.column name: 'Status', attribute: 'status', in_html: false
When rendering html, it will render a partial called grid_status_label
, when rendering csv it will just show the status-text.
However, when defining the same column twice, this also has an effect on the filter. Either because we "exclude" one of definitions the column or because the column is defined twice, I am not sure. The easy way would be to know if we are rendering csv before defining the column so we don't define it twice at all and not confuse WiceGrid
.
Luckily, we can ask the @grid
if it is outputting csv. So if in your controller you write something like
@grid = initialize_grid(SomethingWithAStatus, ...)
in the view you can just ask @grid.output_csv?
to know if we are currently exporting to csv instead of html.
So with that knowledge, in your view you can write
<%= grid(@grid) do |g|
[.. your other columns ..]
g.column name: 'Status', attribute: 'status', in_csv: false do |plan|
render 'grid_status_label', plan_request: plan, history: true
end
if @grid.output_csv?
g.column name: 'Status', attribute: 'status', in_html: false
end
end -%>
... and pagination while filtering on status
will work!!
I really love(d) using WiceGrid
but unfortunately it is no longer maintained actively. There is a somewhat active branch, but it only works for rails 5 and not entirely sure what the status is there. So this is at least a fix so we can keep using WiceGrid
in our current projects for now.
Not quite sure how I would like to proceed with WiceGrid
, because the code-base is really large and there are some things I do not really like (e.g. having to use erb, the dsl is sometimes a bit heavy, there is no test-coverage --there is a separate test-project but mmmm, the layout is pretty much fixed). But on the other hand it has proven extremely easy and robust and extensible (define your own column-filter and render types). I will probably try to fork or restart with something similar.