ICEfaces
  1. ICEfaces
  2. ICE-9531

ace:dataTable column pinning should survive row level updates

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.3
    • Fix Version/s: 4.3
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      *
    • Affects:
      Documentation (User Guide, Ref. Guide, etc.)

      Description

      This component sets the calculated pinning styling on the individual cells, so when a row update occurs the styling is lost. Setting the styling in a dynamic stylesheet would allow the styling to survive past the row update.

      In a related issue the dynamic stylesheet approach must be confirmed on firefox for multiple stylesheets.

        Issue Links

          Activity

          Nils Lundquist created issue -
          Nils Lundquist made changes -
          Field Original Value New Value
          Assignee Nils Lundquist [ nils.lundquist ]
          Nils Lundquist made changes -
          Link This issue blocks ICE-8888 [ ICE-8888 ]
          Ken Fyten made changes -
          Assignee Nils Lundquist [ nils.lundquist ]
          Ken Fyten made changes -
          Fix Version/s 4.1 [ 11375 ]
          Ken Fyten made changes -
          Fix Version/s 4.2 [ 12870 ]
          Fix Version/s 4.1 [ 11375 ]
          Ken Fyten made changes -
          Fix Version/s EE-4.2.0.GA [ 13071 ]
          Fix Version/s 4.2 [ 12870 ]
          Ken Fyten made changes -
          Fix Version/s 4.3 [ 13096 ]
          Fix Version/s EE-4.2.0.GA [ 13071 ]
          Ken Fyten made changes -
          Assignee Arturo Zambrano [ artzambrano ]
          Hide
          Arturo Zambrano added a comment -

          r52088: initial commit: moved as much as possible of the styling required for the pinned columns functionality to dynamic stylesheets, instead of adding styling directly to the style attribute of each cell

          Show
          Arturo Zambrano added a comment - r52088: initial commit: moved as much as possible of the styling required for the pinned columns functionality to dynamic stylesheets, instead of adding styling directly to the style attribute of each cell
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52088 Thu Nov 16 15:54:48 MST 2017 art.zambrano ICE-9531 initial commit: moved as much as possible of the styling required for the pinned columns functionality to dynamic stylesheets, instead of adding styling directly to the style attribute of each cell
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableRowRenderer.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Hide
          Arturo Zambrano added a comment - - edited

          To test this and to see that the pinned styling survives row-level updates, you can modify the pinned columns demo in the showcase dataTablePinning.xhtml and add a checkbox outside the table, like this:

                          <ace:checkboxButton id="checkBox" value="#{checkboxButton.selected}">
                              <ace:ajax />
                          </ace:checkboxButton>
          

          And then add #{checkboxButton.selected} by itself inside a column (not as the value of a component or inside another component, just as it is). Then try pinning and unpinning this column on the browser while checking and unchecking the checkbox to cause row-level updates.

          Show
          Arturo Zambrano added a comment - - edited To test this and to see that the pinned styling survives row-level updates, you can modify the pinned columns demo in the showcase dataTablePinning.xhtml and add a checkbox outside the table, like this: <ace:checkboxButton id= "checkBox" value= "#{checkboxButton.selected}" > <ace:ajax /> </ace:checkboxButton> And then add #{checkboxButton.selected} by itself inside a column (not as the value of a component or inside another component, just as it is). Then try pinning and unpinning this column on the browser while checking and unchecking the checkbox to cause row-level updates.
          Hide
          Arturo Zambrano added a comment -

          r52089: fix for alignment issues when pinning the same column again

          Show
          Arturo Zambrano added a comment - r52089: fix for alignment issues when pinning the same column again
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52089 Fri Nov 17 17:01:52 MST 2017 art.zambrano ICE-9531 fix for alignment issues when pinning the same column again
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Hide
          Arturo Zambrano added a comment -

          r52096: fix for restoring pinned columns to their original position when unpinned, by having a separate dynamic stylesheet that only handles the table's left margin

          Show
          Arturo Zambrano added a comment - r52096: fix for restoring pinned columns to their original position when unpinned, by having a separate dynamic stylesheet that only handles the table's left margin
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52096 Tue Nov 21 11:10:44 MST 2017 art.zambrano ICE-9531 fix for restoring pinned columns to their original position when unpinned, by having a separate dynamic stylesheet that only handles the table's left margin
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Hide
          Arturo Zambrano added a comment -

          When working on this issue and other column pinning issues, I found out that the column pinning feature has never worked before in conjunction with other data table features, like with row selection and when using the 'binding' attribute on the <ace:dataTable component, not to mention other cases that we already knew about like when using multiple row column headers and with row expansion.

          Also, column pinning doesn't work either if the table is not scrollable. The wiki doesn't say anything about this, but some CSS classes related to the scrollable table functionality are used in the column pinning code, which implies that column pinning has to be used with the scrollable table functionality. All of our column pinning demos and test pages use the scrollable table functionality as well.

          Show
          Arturo Zambrano added a comment - When working on this issue and other column pinning issues, I found out that the column pinning feature has never worked before in conjunction with other data table features, like with row selection and when using the 'binding' attribute on the <ace:dataTable component, not to mention other cases that we already knew about like when using multiple row column headers and with row expansion. Also, column pinning doesn't work either if the table is not scrollable. The wiki doesn't say anything about this, but some CSS classes related to the scrollable table functionality are used in the column pinning code, which implies that column pinning has to be used with the scrollable table functionality. All of our column pinning demos and test pages use the scrollable table functionality as well.
          Hide
          Arturo Zambrano added a comment - - edited

          r52119: added clarification in TLD documentation that column pinning requires the scrollable table functionality to work.

          Added note to the wiki page as well.

          Show
          Arturo Zambrano added a comment - - edited r52119: added clarification in TLD documentation that column pinning requires the scrollable table functionality to work. Added note to the wiki page as well.
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52119 Thu Nov 30 14:59:26 MST 2017 art.zambrano ICE-9531 added clarification in TLD documentation that column pinning requires the scrollable table functionality to work
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableMeta.java
          Hide
          Arturo Zambrano added a comment -

          r52122: modified code to avoid using the 'pinned' CSS class for a cleaner approach that preserves pinned columns styling after row-level updates

          Show
          Arturo Zambrano added a comment - r52122: modified code to avoid using the 'pinned' CSS class for a cleaner approach that preserves pinned columns styling after row-level updates
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52122 Tue Dec 05 14:16:51 MST 2017 art.zambrano ICE-9531 modified code to avoid using the 'pinned' CSS class for a cleaner approach that preserves pinned columns styling after row-level updates
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableHeadRenderer.java
          Hide
          Arturo Zambrano added a comment -

          r52124: fix to make row selection work with column pinning

          Show
          Arturo Zambrano added a comment - r52124: fix to make row selection work with column pinning
          Arturo Zambrano made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52124 Tue Dec 05 15:36:56 MST 2017 art.zambrano ICE-9531 fix to make row selection work with column pinning
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Hide
          Arturo Zambrano added a comment -

          r52129: cleaned up code, removed temporary comments and commented out code

          Show
          Arturo Zambrano added a comment - r52129: cleaned up code, removed temporary comments and commented out code
          Hide
          Arturo Zambrano added a comment -

          Summary of features that work and don't work in conjunction with column pinning.

          Working

          • selection
          • sorting
          • filtering (the whole table is slightly shifted to the right after filtering a pinned column, no more shifting on subsequent filtering actions)
          • panel expansion
          • row expansion
          • row listener

          Not Working

          • paginator (misalignments after paginating when at least one column is pinned, it seems like applying resizeScrolling() afterwards fixes them)
          • column reordering (misalignments when reordering a column when at least one column is pinned)
          • column resizing (column resizing functionality not possible at all on scrollable tables, not directly related to column pinning)
          • grouping, column group (as expected)
          • live scrolling (misalignments occur after the first live scrollling dynamic update)
          • cell editor (pinned columns are moved to the left edge of the page when activating the cell editor)
          • table config panel (changes to table structure or table order won't work, but sorting and name changes will work)
          Show
          Arturo Zambrano added a comment - Summary of features that work and don't work in conjunction with column pinning. Working selection sorting filtering (the whole table is slightly shifted to the right after filtering a pinned column, no more shifting on subsequent filtering actions) panel expansion row expansion row listener Not Working paginator (misalignments after paginating when at least one column is pinned, it seems like applying resizeScrolling() afterwards fixes them) column reordering (misalignments when reordering a column when at least one column is pinned) column resizing (column resizing functionality not possible at all on scrollable tables, not directly related to column pinning) grouping, column group (as expected) live scrolling (misalignments occur after the first live scrollling dynamic update) cell editor (pinned columns are moved to the left edge of the page when activating the cell editor) table config panel (changes to table structure or table order won't work, but sorting and name changes will work)
          Hide
          Arturo Zambrano added a comment - - edited

          r48601: added another advanced test for column pinning to test various features working in conjunction

          The test page is http://localhost:8080/dataTable/views/columnPinningAdvanced2.jsf

          The test shows how column pinning works with sorting, filtering and selection. It also shows how the pinning order is saved after reloading the page, and it shows how the pinning styling and structure is preserved after dynamically updating all the rows (i.e. all <tr> elements and their children).

          Show
          Arturo Zambrano added a comment - - edited r48601: added another advanced test for column pinning to test various features working in conjunction The test page is http://localhost:8080/dataTable/views/columnPinningAdvanced2.jsf The test shows how column pinning works with sorting, filtering and selection. It also shows how the pinning order is saved after reloading the page, and it shows how the pinning styling and structure is preserved after dynamically updating all the rows (i.e. all <tr> elements and their children).
          Hide
          Ken Fyten added a comment -

          Re-opened.

          1. I can't find any Wiki docs that mention pinning. We should be documenting what works and what doesn't with it.
          2. Should we consider adding the advanced test functionality to the pinning demo (filtering, sorting, etc.)?

          A few issues:

          • It would be better if the pinning icon as always on it's own row, below the column headings to ensure a consistent layout/presentation.
          • On my mac at least, if you scroll the showcase demo table all the way to the right the columns mis-align. See pinTableIssue.png attached.
          Show
          Ken Fyten added a comment - Re-opened. 1. I can't find any Wiki docs that mention pinning. We should be documenting what works and what doesn't with it. 2. Should we consider adding the advanced test functionality to the pinning demo (filtering, sorting, etc.)? A few issues: It would be better if the pinning icon as always on it's own row, below the column headings to ensure a consistent layout/presentation. On my mac at least, if you scroll the showcase demo table all the way to the right the columns mis-align. See pinTableIssue.png attached.
          Ken Fyten made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Affects Documentation (User Guide, Ref. Guide, etc.) [ 10003 ]
          Ken Fyten made changes -
          Attachment PinTableIssue.png [ 22898 ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #52456 Thu May 17 11:55:43 MDT 2018 art.zambrano ICE-9531 fix to always render pinning controls below the column name; fix to invoke resizeScrolling() when pinning and when unpinning a column, in order to keep columns aligned
          Files Changed
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableConstants.java
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.js
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/resources/icefaces.ace/datatable/datatable.css
          Commit graph MODIFY /icefaces4/trunk/icefaces/ace/component/src/org/icefaces/ace/component/datatable/DataTableHeadRenderer.java
          Hide
          Arturo Zambrano added a comment -

          r52456: fix to always render pinning controls below the column name; fix to invoke resizeScrolling() when pinning and when unpinning a column, in order to keep columns aligned

          Show
          Arturo Zambrano added a comment - r52456: fix to always render pinning controls below the column name; fix to invoke resizeScrolling() when pinning and when unpinning a column, in order to keep columns aligned
          Hide
          Arturo Zambrano added a comment -

          Added information to the DataTable wiki page regarding the features that work and don't work with column pinning.

          As for including sorting and filtering in the demo, while all those features can work in conjunction, there's still, unfortunately, an issue with the whole table slightly shifting to the right on a first filtering request per column and on a first sorting request per column, when such column is pinned.

          Show
          Arturo Zambrano added a comment - Added information to the DataTable wiki page regarding the features that work and don't work with column pinning. As for including sorting and filtering in the demo, while all those features can work in conjunction, there's still, unfortunately, an issue with the whole table slightly shifting to the right on a first filtering request per column and on a first sorting request per column, when such column is pinned.
          Arturo Zambrano made changes -
          Status Reopened [ 4 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Ken Fyten made changes -
          Status Resolved [ 5 ] Closed [ 6 ]

            People

            • Assignee:
              Arturo Zambrano
              Reporter:
              Nils Lundquist
            • Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: