@@ -19,6 +19,7 @@ export default class FieldLimitsSettingsPage extends PageModification {
1919 popupTable : 'jh-field-limits-table' ,
2020 popupTableBody : 'jh-field-limits-tbody' ,
2121 popupTableAddLimitRow : 'jh-field-limits-add-btn' ,
22+ popupTableEditLimitRow : 'jh-field-limits-edit-btn' ,
2223 inputFieldValue : 'jh-input-field-value' ,
2324 visualNameInput : 'jh-input-visual-name' ,
2425 columnsSelectId : 'jh-columns-select' ,
@@ -30,9 +31,12 @@ export default class FieldLimitsSettingsPage extends PageModification {
3031 } ;
3132
3233 static classes = {
34+ editRowBtn : 'jh-edit-row-btn' ,
3335 deleteRowBtn : 'jh-delete-row-btn' ,
3436 } ;
3537
38+ static limitKeyOfEditable = undefined ;
39+
3640 async shouldApply ( ) {
3741 return ( await getSettingsTab ( ) ) === 'cardLayout' ;
3842 }
@@ -132,6 +136,7 @@ export default class FieldLimitsSettingsPage extends PageModification {
132136 tableId : FieldLimitsSettingsPage . ids . popupTable ,
133137 tableBodyId : FieldLimitsSettingsPage . ids . popupTableBody ,
134138 addLimitBtnId : FieldLimitsSettingsPage . ids . popupTableAddLimitRow ,
139+ editLimitBtnId : FieldLimitsSettingsPage . ids . popupTableEditLimitRow ,
135140 fieldValueInputId : FieldLimitsSettingsPage . ids . inputFieldValue ,
136141 visualNameInputId : FieldLimitsSettingsPage . ids . visualNameInput ,
137142 columnsSelectId : FieldLimitsSettingsPage . ids . columnsSelectId ,
@@ -167,10 +172,10 @@ export default class FieldLimitsSettingsPage extends PageModification {
167172 const isSelected = row . querySelector ( 'input[type="checkbox"]:checked' ) ;
168173 if ( ! isSelected ) return ;
169174
170- const id = row . getAttribute ( 'data-field-project-row' ) ;
175+ const limitKey = row . getAttribute ( 'data-field-project-row' ) ;
171176
172- this . settings . limits [ id ] = {
173- ...this . settings . limits [ id ] ,
177+ this . settings . limits [ limitKey ] = {
178+ ...this . settings . limits [ limitKey ] ,
174179 ...mergedRowObj ,
175180 } ;
176181 } ) ;
@@ -188,14 +193,22 @@ export default class FieldLimitsSettingsPage extends PageModification {
188193 } ) ;
189194 }
190195
191- handleAddFieldLimitRowClick ( ) {
192- this . addEventListener ( document . getElementById ( FieldLimitsSettingsPage . ids . popupTableAddLimitRow ) , 'click' , ( ) => {
196+ handleButtonsFieldLimitRowClick ( ) {
197+ const btnAdd = document . getElementById ( FieldLimitsSettingsPage . ids . popupTableAddLimitRow ) ;
198+ const btnEdit = document . getElementById ( FieldLimitsSettingsPage . ids . popupTableEditLimitRow ) ;
199+
200+ const setValuesToTable = limitKey => {
193201 const { fieldId, fieldValue, visualValue, limit } = this . getInputValues ( ) ;
194202 const { columns, swimlanes } = this . getSelectedSwimlanesAndColumnsOptions ( ) ;
195- const id = limitsKey . encode ( fieldValue , fieldId ) ;
203+ const isEdit = limitKey != null ;
196204
197- if ( ! this . settings . limits [ id ] ) {
198- this . settings . limits [ id ] = {
205+ if ( ! isEdit ) {
206+ limitKey = limitsKey . encode ( fieldValue , fieldId ) ;
207+ }
208+
209+ if ( ! this . settings . limits [ limitKey ] || isEdit ) {
210+ this . settings . limits [ limitKey ] = {
211+ ...this . settings . limits [ limitKey ] ,
199212 visualValue,
200213 fieldValue,
201214 fieldId,
@@ -206,6 +219,20 @@ export default class FieldLimitsSettingsPage extends PageModification {
206219 }
207220
208221 this . renderRows ( ) ;
222+ btnEdit . disabled = true ;
223+ this . limitKeyOfEditable = undefined ;
224+ } ;
225+
226+ this . addEventListener ( btnAdd , 'click' , ( ) => {
227+ setValuesToTable ( null ) ;
228+ } ) ;
229+
230+ this . addEventListener ( btnEdit , 'click' , ( ) => {
231+ if ( this . limitKeyOfEditable == null ) {
232+ btnEdit . disabled = true ;
233+ return ;
234+ }
235+ setValuesToTable ( this . limitKeyOfEditable ) ;
209236 } ) ;
210237 }
211238
@@ -231,7 +258,7 @@ export default class FieldLimitsSettingsPage extends PageModification {
231258 const { limit, columns, swimlanes, fieldId, fieldValue, visualValue, bkgColor } = this . settings . limits [ limitKey ] ;
232259
233260 this . renderLimitRow ( {
234- id : limitKey ,
261+ limitKey,
235262 fieldValue,
236263 visualValue,
237264 bkgColor,
@@ -242,19 +269,19 @@ export default class FieldLimitsSettingsPage extends PageModification {
242269 } ) ;
243270 } ) ;
244271
245- this . handleAddFieldLimitRowClick ( ) ;
272+ this . handleButtonsFieldLimitRowClick ( ) ;
246273 this . handleAppliesLimitsToRows ( ) ;
247274 }
248275
249- renderLimitRow ( { id , fieldValue, visualValue, bkgColor, fieldId, limit, columns, swimlanes } ) {
276+ renderLimitRow ( { limitKey , fieldValue, visualValue, bkgColor, fieldId, limit, columns, swimlanes } ) {
250277 const nzFieldIdSettings = this . normalizedFields . byId [ fieldId ] ;
251278
252279 const fieldName = nzFieldIdSettings ? nzFieldIdSettings . name : `[${ fieldId } ]` ;
253280 const row = this . insertHTML (
254281 document . getElementById ( FieldLimitsSettingsPage . ids . popupTableBody ) ,
255282 'beforeend' ,
256283 fieldRowTemplate ( {
257- id ,
284+ limitKey ,
258285 fieldValue,
259286 visualValue,
260287 bkgColor,
@@ -263,13 +290,22 @@ export default class FieldLimitsSettingsPage extends PageModification {
263290 limit,
264291 columns : columns . map ( columnId => this . normalizedColumns . byId [ columnId ] || `column [${ fieldId } ]` ) ,
265292 swimlanes : swimlanes . map ( swimlaneId => this . normalizedSwimlanes . byId [ swimlaneId ] || `swimlane [${ fieldId } ]` ) ,
293+ editClassBtn : FieldLimitsSettingsPage . classes . editRowBtn ,
266294 deleteClassBtn : FieldLimitsSettingsPage . classes . deleteRowBtn ,
267295 } )
268296 ) ;
269297
270- this . addEventListener ( row . querySelector ( `.${ FieldLimitsSettingsPage . classes . deleteRowBtn } ` ) , 'click' , ( ) => {
271- delete this . settings . limits [ id ] ;
298+ this . addEventListener ( row . querySelector ( `.${ FieldLimitsSettingsPage . classes . editRowBtn } ` ) , 'click' , event => {
299+ this . setInputValues ( limitKey ) ;
300+ event . stopPropagation ( ) ;
301+ event . stopPropagation ( ) ;
302+ } ) ;
303+
304+ this . addEventListener ( row . querySelector ( `.${ FieldLimitsSettingsPage . classes . deleteRowBtn } ` ) , 'click' , event => {
305+ delete this . settings . limits [ limitKey ] ;
272306 row . remove ( ) ;
307+ event . stopPropagation ( ) ;
308+ event . stopPropagation ( ) ;
273309 } ) ;
274310 }
275311
@@ -289,6 +325,31 @@ export default class FieldLimitsSettingsPage extends PageModification {
289325 } ;
290326 }
291327
328+ setInputValues ( limitKey ) {
329+ const { fieldValue, visualValue, limit, fieldId, columns, swimlanes } = this . settings . limits [ limitKey ] ;
330+
331+ this . limitKeyOfEditable = limitKey ;
332+ document . getElementById ( FieldLimitsSettingsPage . ids . popupTableEditLimitRow ) . disabled = false ;
333+
334+ document . getElementById ( FieldLimitsSettingsPage . ids . inputFieldValue ) . value = fieldValue ;
335+ document . getElementById ( FieldLimitsSettingsPage . ids . visualNameInput ) . value = visualValue ;
336+ document . getElementById ( FieldLimitsSettingsPage . ids . wipLimitInputId ) . value = limit ;
337+ document . getElementById ( FieldLimitsSettingsPage . ids . fieldSelectId ) . value = fieldId ;
338+ this . setSelectedSwimlanesAndColumnsOptions ( columns , swimlanes ) ;
339+ }
340+
341+ setSelectedSwimlanesAndColumnsOptions ( columns , swimlanes ) {
342+ const columnsOptions = document . getElementById ( FieldLimitsSettingsPage . ids . columnsSelectId ) . options ;
343+ const swimlaneOptions = document . getElementById ( FieldLimitsSettingsPage . ids . swimlanesSelectId ) . options ;
344+
345+ columnsOptions . forEach ( option => {
346+ option . selected = columns . includes ( option . value ) ;
347+ } ) ;
348+ swimlaneOptions . forEach ( option => {
349+ option . selected = swimlanes . includes ( option . value ) ;
350+ } ) ;
351+ }
352+
292353 getSelectedSwimlanesAndColumnsOptions ( ) {
293354 const columnsOptions = document . getElementById ( FieldLimitsSettingsPage . ids . columnsSelectId ) . selectedOptions ;
294355 const swimlaneOptions = document . getElementById ( FieldLimitsSettingsPage . ids . swimlanesSelectId ) . selectedOptions ;
0 commit comments