7676import software .xdev .vaadin .daterange_picker .ui .DateRangePicker ;
7777import software .xdev .vaadin .model .ChipBadge ;
7878import software .xdev .vaadin .model .ChipBadgeExtension ;
79+ import software .xdev .vaadin .model .CustomizationDegree ;
7980import software .xdev .vaadin .model .FilterCondition ;
8081import software .xdev .vaadin .model .FilterField ;
8182import software .xdev .vaadin .model .FilterFieldEnumExtension ;
@@ -296,9 +297,6 @@ else if(this.selOperations.getValue() != null)
296297
297298 private void onShowFilterInput ()
298299 {
299- // Needed if the previous condition was an editable initial condition
300- // The editable initial condition makes the cancel button invisible
301- this .btnCancelFilter .setVisible (true );
302300
303301 if (this .hlFilter .getChildren ().findAny ().isEmpty ())
304302 {
@@ -307,8 +305,10 @@ private void onShowFilterInput()
307305 this .btnCancelFilter .setVisible (true );
308306
309307 this .selFields .setValue (null );
308+ this .selFields .setReadOnly (false );
310309 this .selOperations .setItems (Collections .emptyList ());
311310 this .selOperations .setEnabled (false );
311+ this .selOperations .setReadOnly (false );
312312 this .btnAcceptFilter .setEnabled (false );
313313 this .txtSearchQuery .clear ();
314314 this .nmbSearchQuery .clear ();
@@ -318,7 +318,6 @@ private void onShowFilterInput()
318318 this .setInputComponentVisibility (String .class );
319319
320320 this .hlFilter .add (
321-
322321 this .selFields ,
323322 this .selOperations ,
324323 this .txtSearchQuery ,
@@ -333,6 +332,30 @@ private void onShowFilterInput()
333332 }
334333 }
335334
335+ /**
336+ * Method used to make the select field and select condition dependent on the customization degree readonly.
337+ *
338+ * @param usedCustomizationDegree Used to set which input field is readonly.
339+ */
340+ private void setUsedCustomizationDegreeForComponents (final CustomizationDegree usedCustomizationDegree )
341+ {
342+ if (usedCustomizationDegree .equals (CustomizationDegree .INPUT_VALUE ))
343+ {
344+ this .selFields .setReadOnly (true );
345+ this .selOperations .setReadOnly (true );
346+ }
347+ else if (usedCustomizationDegree .equals (CustomizationDegree .CONDITION_AND_INPUT_VALUE ))
348+ {
349+ this .selFields .setReadOnly (true );
350+ this .selOperations .setReadOnly (false );
351+ }
352+ else
353+ {
354+ this .selFields .setReadOnly (false );
355+ this .selOperations .setReadOnly (false );
356+ }
357+ }
358+
336359 /**
337360 * Clicking on the accept filter button.
338361 */
@@ -341,6 +364,7 @@ private void onAcceptFilter()
341364 final String userInput = this .getValueFromVisibleComponent ();
342365
343366 final ChipBadgeExtension <FilterCondition <T , ?>> badge ;
367+ CustomizationDegree customizationDegree = CustomizationDegree .EVERYTHING ;
344368 final boolean deletable ;
345369 final boolean editable ;
346370
@@ -349,6 +373,14 @@ private void onAcceptFilter()
349373 {
350374 deletable = this .deletingBadgeEnabled ;
351375 editable = this .editingBadgeEnabled ;
376+
377+ // Get customization rating from initial condition
378+ customizationDegree = this .initialChipBadges
379+ .stream ()
380+ .filter (e -> e .getBadgeId ().equals (this .editingBadgeId ))
381+ .toList ()
382+ .get (0 )
383+ .getCustomizationRating ();
352384 }
353385 else
354386 {
@@ -361,7 +393,8 @@ private void onAcceptFilter()
361393 this .selOperations .getValue (),
362394 userInput ,
363395 deletable ,
364- editable );
396+ editable ,
397+ customizationDegree );
365398
366399 if (!this .identifier .isBlank ())
367400 {
@@ -390,7 +423,8 @@ private void onAcceptFilter()
390423 final FilterComparator selOperation ,
391424 final String userInput ,
392425 final boolean deletableCondition ,
393- final boolean editableCondition )
426+ final boolean editableCondition ,
427+ final CustomizationDegree customizationDegree )
394428 {
395429 final ChipBadgeExtension <FilterCondition <T , ?>> badge = new ChipBadgeExtension <>(
396430 new FilterCondition <>(
@@ -426,6 +460,9 @@ private void onAcceptFilter()
426460 // Make the cancel button invisible
427461 this .btnCancelFilter .setVisible (false );
428462
463+ // Set the customization rating for the filter select and condition select
464+ this .setUsedCustomizationDegreeForComponents (customizationDegree );
465+
429466 // Just activated when the url parameters are activated
430467 if (!this .identifier .isBlank ())
431468 {
@@ -841,15 +878,30 @@ private void createConditionsFromQueryParameters()
841878 {
842879 if (!this .queryBadgeIdList .get (i ).equals (DELETED_INITIAL_CONDITION_STRING ))
843880 {
881+ final String badgeId = this .queryBadgeIdList .get (i );
882+ CustomizationDegree customizationDegree = CustomizationDegree .EVERYTHING ;
883+
884+ // Check if it's an initial condition
885+ final List <ChipBadgeExtension <FilterCondition <T , ?>>> cD = this .initialChipBadges
886+ .stream ()
887+ .filter (e -> e .getBadgeId ().equals (badgeId ))
888+ .toList ();
889+
890+ if (!cD .isEmpty ())
891+ {
892+ customizationDegree = cD .get (0 ).getCustomizationRating ();
893+ }
894+
844895 final ChipBadgeExtension <FilterCondition <T , ?>> chipBadgeExtension =
845896 this .createBadgeConditionAndApplyFilter (
846897 filterField ,
847898 comparatorOptional .get (),
848899 this .queryInputFieldList .get (i ),
849900 Boolean .parseBoolean (this .queryBadgeDeletableList .get (i )),
850- Boolean .parseBoolean (this .queryBadgeEditableList .get (i )));
901+ Boolean .parseBoolean (this .queryBadgeEditableList .get (i )),
902+ customizationDegree );
851903
852- chipBadgeExtension .setBadgeId (this . queryBadgeIdList . get ( i ) );
904+ chipBadgeExtension .setBadgeId (badgeId );
853905 }
854906 else
855907 {
@@ -1349,6 +1401,7 @@ public FilterComponent<T> withInitialFilter(
13491401 final String searchQuery ,
13501402 final boolean conditionDeletable ,
13511403 final boolean conditionEditable ,
1404+ final CustomizationDegree customizationDegree ,
13521405 final String badgeId )
13531406 {
13541407 FilterField <T , ?> finalFilterField = filterField ;
@@ -1381,11 +1434,14 @@ public FilterComponent<T> withInitialFilter(
13811434 selectedCondition ,
13821435 searchQuery ,
13831436 conditionDeletable ,
1384- conditionEditable );
1437+ conditionEditable ,
1438+ customizationDegree );
13851439
13861440 // Just needed if the url parameters are activated
13871441 chipBadge .setBadgeId (badgeId );
13881442
1443+ chipBadge .setCustomizationRating (customizationDegree );
1444+
13891445 // Needed for resetting the conditions
13901446 this .initialChipBadges .add (chipBadge );
13911447
@@ -1414,6 +1470,30 @@ public FilterComponent<T> withInitialFilter(
14141470 searchQuery ,
14151471 conditionDeletable ,
14161472 conditionEditable ,
1473+ CustomizationDegree .EVERYTHING ,
1474+ String .valueOf (this .initialConditionIdCounter ));
1475+
1476+ this .initialConditionIdCounter ++;
1477+
1478+ return filterComponent ;
1479+ }
1480+
1481+ public FilterComponent <T > withInitialFilter (
1482+ final FilterField <T , ?> filterField ,
1483+ final FilterComparator selectedCondition ,
1484+ final String searchQuery ,
1485+ final boolean conditionDeletable ,
1486+ final boolean conditionEditable ,
1487+ final CustomizationDegree customizationDegree )
1488+ {
1489+ final FilterComponent <T > filterComponent =
1490+ this .withInitialFilter (
1491+ filterField ,
1492+ selectedCondition ,
1493+ searchQuery ,
1494+ conditionDeletable ,
1495+ conditionEditable ,
1496+ customizationDegree ,
14171497 String .valueOf (this .initialConditionIdCounter ));
14181498
14191499 this .initialConditionIdCounter ++;
0 commit comments