Skip to content

Commit 9c4a76b

Browse files
Added CustomizationDegree. Extended ChipBadgeExtension with new customization degree property. Added the customization degree to the filter component. Adjusted demo.
1 parent 0da5b5a commit 9c4a76b

File tree

4 files changed

+128
-11
lines changed

4 files changed

+128
-11
lines changed

vaadin-simple-grid-filter-demo/src/main/java/software/xdev/vaadin/ui/MainView.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import software.xdev.vaadin.comparators.NotEqualComparator;
2020
import software.xdev.vaadin.daterange_picker.business.DateRangeModel;
2121
import software.xdev.vaadin.daterange_picker.business.SimpleDateRanges;
22+
import software.xdev.vaadin.model.CustomizationDegree;
2223
import software.xdev.vaadin.model.Department;
2324
import software.xdev.vaadin.model.Person;
2425
import software.xdev.vaadin.model.SimpleFilterField;
@@ -85,7 +86,7 @@ private void initUI()
8586
.withDatePickerI18n(datePickerI18n)
8687
.withDateTimePickerLocale(Locale.GERMANY)
8788
.withFilterButtonText("Add filter")
88-
.withUrlParameters("filter1")
89+
// .withUrlParameters("filter1")
8990
.withCustomDateRangeModel(
9091
new DateRangeModel<>(LocalDate.now(), LocalDate.now().plusDays(5), SimpleDateRanges.FREE),
9192
List.of(SimpleDateRanges.allValues()))
@@ -100,7 +101,8 @@ private void initUI()
100101
EqualComparator.getInstance(),
101102
"true",
102103
false,
103-
true
104+
true,
105+
CustomizationDegree.INPUT_VALUE
104106
);
105107

106108
this.add(filterComponent, this.dataGrid);

vaadin-simple-grid-filter/src/main/java/software/xdev/vaadin/FilterComponent.java

Lines changed: 89 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import software.xdev.vaadin.daterange_picker.ui.DateRangePicker;
7777
import software.xdev.vaadin.model.ChipBadge;
7878
import software.xdev.vaadin.model.ChipBadgeExtension;
79+
import software.xdev.vaadin.model.CustomizationDegree;
7980
import software.xdev.vaadin.model.FilterCondition;
8081
import software.xdev.vaadin.model.FilterField;
8182
import 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++;

vaadin-simple-grid-filter/src/main/java/software/xdev/vaadin/model/ChipBadgeExtension.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class ChipBadgeExtension<T> extends ChipBadge<T>
3030

3131
protected final Button btnEdit = new Button(VaadinIcon.PENCIL.create());
3232

33+
private CustomizationDegree customizationDegree = CustomizationDegree.EVERYTHING;
34+
3335
public ChipBadgeExtension(final T item)
3436
{
3537
super(item);
@@ -76,6 +78,16 @@ public boolean isBtnDeleteEnabled()
7678
return this.btnDelete.isEnabled();
7779
}
7880

81+
public CustomizationDegree getCustomizationRating()
82+
{
83+
return this.customizationDegree;
84+
}
85+
86+
public void setCustomizationRating(final CustomizationDegree customizationDegree)
87+
{
88+
this.customizationDegree = customizationDegree;
89+
}
90+
7991
public Registration addBtnEditClickListener(final ComponentEventListener<ClickEvent<Button>> listener)
8092
{
8193
return this.btnEdit.addClickListener(listener);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright © 2024 XDEV Software (https://xdev.software)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package software.xdev.vaadin.model;
17+
18+
public enum CustomizationDegree
19+
{
20+
EVERYTHING,
21+
CONDITION_AND_INPUT_VALUE,
22+
INPUT_VALUE
23+
}

0 commit comments

Comments
 (0)