<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 09:15:37 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MGNLUI-4333] Re-enable select all checkbox in Pulse</title>
                <link>https://jira.magnolia-cms.com/browse/MGNLUI-4333</link>
                <project id="10625" key="MGNLUI">Magnolia UI</project>
                    <description>&lt;p&gt;Selecting all rows in Pulse has been disabled when upgrading to Vaadin 8. Reason is that, due to the nature of Vaadin&apos;s &lt;tt&gt;AbstractBackEndDataProvider&lt;/tt&gt; we use there, all rows would be put in memory if we were to enable the select all checkbox, which would cause severe performance issues with a large enough dataset.&lt;/p&gt;

&lt;p&gt;Some ideas to tackle this:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;What we could do is to simply add a button &quot;Remove all messages&quot; - this way we&apos;ll allow them to erase all the stuff, but also will avoid the possible performance problems, cause we wouldn&apos;t query anything at all.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Found this by chance but don&apos;t know if it&apos;s doable (and not too complicated) in Java&lt;br/&gt;
&lt;a href=&quot;https://cdn.vaadin.com/vaadin-elements/latest/vaadin-grid/demo/selection.html#custom-select-all-with-data-provider&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://cdn.vaadin.com/vaadin-elements/latest/vaadin-grid/demo/selection.html#custom-select-all-with-data-provider&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#8212;&lt;br/&gt;
Solution eventually implemented is the following:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;make the &lt;b&gt;select all checkbox configurable&lt;/b&gt; and enable it by default&lt;/li&gt;
	&lt;li&gt;make an item &lt;b&gt;threshold configurable&lt;/b&gt; (e.g. 1000 items by default)&lt;/li&gt;
	&lt;li&gt;if a user tries to select all items AND the total item size is &amp;gt; threshold, emit a message saying something like &quot;operation can&apos;t be carried out due to possible memory issues. Contact admin if needed&quot;&lt;br/&gt;
In extreme cases, an admin can either increase the threshold or use a Groovy script to perform bulk operations w/o using the UI.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The advantage of all this would be that (in probably 99% of cases) users would keep on using a familiar and effective UX pattern.&lt;br/&gt;
Also, from Magnolia&apos;s perspective this solution seems easier to implement and maintain.&lt;/p&gt;</description>
                <environment></environment>
        <key id="63087">MGNLUI-4333</key>
            <summary>Re-enable select all checkbox in Pulse</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="3" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/major.svg">Major</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="fgrilli">Federico Grilli</assignee>
                                    <reporter username="fgrilli">Federico Grilli</reporter>
                        <labels>
                            <label>regression</label>
                            <label>ux</label>
                    </labels>
                <created>Mon, 4 Dec 2017 14:18:47 +0100</created>
                <updated>Thu, 16 Sep 2021 15:17:07 +0200</updated>
                            <resolved>Fri, 19 Jan 2018 15:35:55 +0100</resolved>
                                    <version>5.6</version>
                                    <fixVersion>5.6.2</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="153943" author="fgrilli" created="Tue, 9 Jan 2018 15:43:37 +0100"  >&lt;p&gt;&quot;Remove all messages&quot; only solves part of the problem. Bulk actions also involve claiming, aborting and archiving tasks. I tried to reintroduce a &quot;Select all&quot;  button and then programmatically set all items as selected (see  &lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://jira.magnolia-cms.com/secure/attachment/42412/42412_select-all.m4v&quot; title=&quot;select-all.m4v attached to MGNLUI-4333&quot;&gt;select-all.m4v&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt; ) but this eventually triggers the DataProvider to fetch all objects in memory anyway. Possibly one way around this is to create a custom &lt;tt&gt;SelectionModel&lt;/tt&gt; for the &lt;tt&gt;Grid&lt;/tt&gt; but this means extending the grid.&lt;/p&gt;

&lt;p&gt;If we&apos;re fine with the &quot;Remove all&quot; option we need to decide what this means for tasks (archive?). Also this would involve exposing new ad hoc methods for Task/MessageStore and Task/MessageManager which would efficiently remove/archive all messages/tasks for a given user w/o first fetching all items in memory. See example of UX interaction  &lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://jira.magnolia-cms.com/secure/attachment/42421/42421_clear-all.m4v&quot; title=&quot;clear-all.m4v attached to MGNLUI-4333&quot;&gt;clear-all.m4v&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://jira.magnolia-cms.com/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;</comment>
                            <comment id="154036" author="fgrilli" created="Wed, 10 Jan 2018 18:18:49 +0100"  >&lt;p&gt;Another option would be to have an action dropdown  preceded by an &quot;apply to: &quot; dropdown with options like &quot;selection&quot;, &quot;all&quot;. See attached screenshots  &lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;42430_thumb&quot; href=&quot;https://jira.magnolia-cms.com/secure/attachment/42430/42430_selected.png&quot; title=&quot;selected.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;42430&quot; file-preview-title=&quot;selected.png&quot;&gt;&lt;img src=&quot;https://jira.magnolia-cms.com/secure/thumbnail/42430/_thumb_42430.png&quot; style=&quot;border: 0px solid black&quot; role=&quot;presentation&quot;/&gt;&lt;/a&gt;&lt;/span&gt;  &lt;br/&gt;
&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;42429_thumb&quot; href=&quot;https://jira.magnolia-cms.com/secure/attachment/42429/42429_all.png&quot; title=&quot;all.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;42429&quot; file-preview-title=&quot;all.png&quot;&gt;&lt;img src=&quot;https://jira.magnolia-cms.com/secure/thumbnail/42429/_thumb_42429.png&quot; style=&quot;border: 0px solid black&quot; role=&quot;presentation&quot;/&gt;&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;</comment>
                            <comment id="154192" author="fgrilli" created="Sun, 14 Jan 2018 13:53:56 +0100"  >&lt;p&gt;After implementing the action dropdown option above and looking closer at how data are retrieved, I think this is more of a theoretical issue than an actual one. Besides, after trying the new UX patten, imho, it feels clunky.&lt;/p&gt;

&lt;p&gt;Regarding performance: messages and tasks are usually filtered by type so, when &lt;tt&gt;dataProvider.fetch(..)&lt;/tt&gt; is invoked, only a subset of data is loaded in memory.&lt;br/&gt;
One would need to pile up ten of thousand of items without never acting on them and then try to select them all from the &lt;tt&gt;All tasks/messages&lt;/tt&gt; tab in order to possibly cause trouble on the server. This seems very unlikely to me and so far it has never happened in production (I realized we basically have the same issue in the 5.4.x and 5.5.x series where selecting all items is enabled).  &lt;br/&gt;
Still, I agree it&apos;s better to be on the cautious side. My proposal therefore would be &lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;make the &lt;b&gt;select all&lt;/b&gt; checkbox configurable and enable it by default&lt;/li&gt;
	&lt;li&gt;make an item &lt;b&gt;threshold&lt;/b&gt; configurable (e.g. 5000 items by default)&lt;/li&gt;
	&lt;li&gt;if a user tries to select all items AND the total item size is &amp;gt; threshold, emit a message saying something like &quot;Dude, this would possibly cause a memory issue, please select less than &apos;%threshold&apos; items! If you feel this sucks, please contact your admin&quot; (wording may need adjustment).&lt;br/&gt;
In extreme cases, an admin can either increase the threshold or use a Groovy script to perform bulk operations w/o using the UI.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The advantage of all this, imo, would be that (in probably 99% of cases) users would keep on using a familiar and effective UX pattern.&lt;br/&gt;
Also, from Magnolia&apos;s perspective this solution seems easier to implement and maintain: &lt;br/&gt;
the dropdown solution would entail adding more methods to interfaces and deprecate others, also I still have to sort out how to enable/disable action availability as a Vaadin dropdown can&apos;t have items disabled. &lt;/p&gt;

&lt;p&gt;UPDATE&lt;br/&gt;
-----------&lt;br/&gt;
Quickly discussed this solution with &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=avongunten&quot; class=&quot;user-hover&quot; rel=&quot;avongunten&quot;&gt;avongunten&lt;/a&gt; and got UX approval.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10030">
                    <name>Cloners</name>
                                                                <inwardlinks description="is cloned by">
                                        <issuelink>
            <issuekey id="71217">MGNLUI-4776</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10040">
                    <name>causality</name>
                                            <outwardlinks description="caused by">
                                        <issuelink>
            <issuekey id="61560">MGNLUI-4292</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="42429" name="all.png" size="339422" author="fgrilli" created="Wed, 10 Jan 2018 18:13:48 +0100"/>
                            <attachment id="42421" name="clear-all.m4v" size="1565176" author="fgrilli" created="Wed, 10 Jan 2018 11:22:04 +0100"/>
                            <attachment id="42579" name="config-example.png" size="463530" author="fgrilli" created="Mon, 22 Jan 2018 12:25:35 +0100"/>
                            <attachment id="42723" name="impossibleToSelect.png" size="91479" author="mdrapela" created="Tue, 30 Jan 2018 10:31:24 +0100"/>
                            <attachment id="42412" name="select-all.m4v" size="817087" author="fgrilli" created="Tue, 9 Jan 2018 15:26:31 +0100"/>
                            <attachment id="42430" name="selected.png" size="447278" author="fgrilli" created="Wed, 10 Jan 2018 18:13:49 +0100"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Tue, 30 Jan 2018 10:31:43 +0100</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12130" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Documentation update required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="13300"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>avongunten</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            6 years, 5 weeks ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>fgrilli</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i07n1i:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10220" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Release notes required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10490"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10245" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="634">Basel 129</customfieldvalue>
    <customfieldvalue id="639">Basel 130</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>