Skip to content

Commit ab81c75

Browse files
ngonzalezpazFCjavier-godoy
authored andcommitted
feat: add click event to chip
Close #7
1 parent 2cd7344 commit ab81c75

File tree

4 files changed

+55
-23
lines changed

4 files changed

+55
-23
lines changed

src/main/java/com/flowingcode/vaadin/addons/chipfield/Chip.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
@JavaScript("./paper-chip.js")
4242
public class Chip extends Component {
4343

44+
public static final String CHIP_LABEL = "event.detail.chipLabel";
4445
private String label;
4546
private boolean closable;
4647
private Icon icon;

src/main/java/com/flowingcode/vaadin/addons/chipfield/ChipField.java

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,6 @@
1919
*/
2020
package com.flowingcode.vaadin.addons.chipfield;
2121

22-
import java.util.ArrayList;
23-
import java.util.Arrays;
24-
import java.util.HashMap;
25-
import java.util.List;
26-
import java.util.Map;
27-
import java.util.Optional;
28-
import java.util.concurrent.atomic.AtomicInteger;
29-
import java.util.stream.Collectors;
30-
import java.util.stream.Stream;
31-
3222
import com.vaadin.flow.component.AbstractField;
3323
import com.vaadin.flow.component.AttachEvent;
3424
import com.vaadin.flow.component.ComponentEvent;
@@ -48,10 +38,18 @@
4838
import com.vaadin.flow.data.provider.Query;
4939
import com.vaadin.flow.function.SerializableFunction;
5040
import com.vaadin.flow.shared.Registration;
51-
5241
import elemental.json.JsonArray;
5342
import elemental.json.JsonObject;
5443
import elemental.json.impl.JreJsonFactory;
44+
import java.util.ArrayList;
45+
import java.util.Arrays;
46+
import java.util.HashMap;
47+
import java.util.List;
48+
import java.util.Map;
49+
import java.util.Optional;
50+
import java.util.concurrent.atomic.AtomicInteger;
51+
import java.util.stream.Collectors;
52+
import java.util.stream.Stream;
5553

5654
@SuppressWarnings("serial")
5755
@Tag("paper-chip-input-autocomplete")
@@ -119,6 +117,10 @@ private void configure() {
119117
T itemToRemove = selectedItems.remove(chipLabel);
120118
getValue().remove(itemToRemove);
121119
}).addEventData(CHIP_LABEL);
120+
getElement().addEventListener("chip-clicked", e -> {
121+
JsonObject eventData = e.getEventData();
122+
String chipLabel = eventData.get(CHIP_LABEL).asString();
123+
}).addEventData(CHIP_LABEL);
122124
}
123125

124126
private void configureItems() {
@@ -327,4 +329,24 @@ public void removeSelectedItem(T itemToRemove) {
327329
this.fireEvent(new ChipRemovedEvent<>(this, false, itemLabelGenerator.apply(itemToRemove)));
328330
}
329331

332+
@DomEvent("chip-clicked")
333+
public static class ChipClickedEvent<T> extends ComponentEvent<ChipField<T>> {
334+
335+
private final String chipLabel;
336+
337+
public ChipClickedEvent(ChipField<T> source, boolean fromClient, @EventData(CHIP_LABEL) String chipLabel) {
338+
super(source, fromClient);
339+
this.chipLabel = chipLabel;
340+
}
341+
342+
public String getChipLabel() {
343+
return chipLabel;
344+
}
345+
}
346+
347+
@SuppressWarnings({ "unchecked", "rawtypes" })
348+
public Registration addChipClickedListener(ComponentEventListener<ChipClickedEvent<T>> listener) {
349+
return addListener(ChipClickedEvent.class, (ComponentEventListener) listener);
350+
}
351+
330352
}

src/main/resources/META-INF/frontend/paper-chip.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class PaperChip extends PolymerElement {
165165
}
166166
</style>
167167
168-
<div class\$="[[_computePaperChipClass(noHover, selected)]]">
168+
<div on-click="_clicked" class\$="[[_computePaperChipClass(noHover, selected)]]">
169169
<span class="avatar"><slot name="avatar"></slot></span>
170170
<span class="label">[[label]]</span>
171171
<div hidden\$="[[!closable]]" class="closeIcon" on-click="_remove">
@@ -186,18 +186,27 @@ class PaperChip extends PolymerElement {
186186
}
187187

188188
_remove(event) {
189-
this.dispatchEvent(new CustomEvent('chip-removed', {
189+
event.stopPropagation();
190+
this._dispatch('chip-removed');
191+
if (!this.noAutoDomRemoval && this.parentNode.id != 'slot2' && this.parentNode.querySelector("dom-repeat") === null) {
192+
this.parentNode.removeChild(this);
193+
}
194+
}
195+
196+
_clicked(event){
197+
event.stopPropagation();
198+
this._dispatch('chip-clicked');
199+
}
200+
201+
_dispatch(eventName){
202+
this.dispatchEvent(new CustomEvent(eventName, {
190203
detail: {
191204
'chipLabel': this.label
192205
},
193206
composed: true,
194207
bubbles: true
195208
}));
196-
if (!this.noAutoDomRemoval && this.parentNode.id != 'slot2' && this.parentNode.querySelector("dom-repeat") === null) {
197-
this.parentNode.removeChild(this);
198-
}
199-
}
200-
209+
}
201210
}
202211

203212
window.customElements.define(PaperChip.is, PaperChip);

src/test/java/com/flowingcode/vaadin/addons/chipfield/DemoView.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@
1919
*/
2020
package com.flowingcode.vaadin.addons.chipfield;
2121

22-
import java.util.ArrayList;
23-
import java.util.Arrays;
24-
import java.util.List;
25-
import java.util.stream.Collectors;
26-
2722
import com.vaadin.flow.component.button.Button;
2823
import com.vaadin.flow.component.notification.Notification;
2924
import com.vaadin.flow.component.notification.Notification.Position;
@@ -32,6 +27,10 @@
3227
import com.vaadin.flow.data.binder.Binder;
3328
import com.vaadin.flow.data.provider.ListDataProvider;
3429
import com.vaadin.flow.router.Route;
30+
import java.util.ArrayList;
31+
import java.util.Arrays;
32+
import java.util.List;
33+
import java.util.stream.Collectors;
3534

3635
@SuppressWarnings("serial")
3736
@Route("")
@@ -61,6 +60,7 @@ public DemoView() {
6160

6261
chf.addChipCreatedListener(ev->Notification.show("Chip: " + ev.getChipLabel() + " Created by client: " + ev.isFromClient() + "!",5000,Position.BOTTOM_END));
6362
chf.addChipRemovedListener(ev->Notification.show("Chip: " + ev.getChipLabel() + " Removed by client: " + ev.isFromClient() + "!",5000,Position.BOTTOM_END));
63+
chf.addChipClickedListener(ev->Notification.show("Chip: " + ev.getChipLabel() + " Clicked!", 5000, Position.BOTTOM_END));
6464

6565
VerticalLayout vl = new VerticalLayout(chf,new HorizontalLayout(b,b2));
6666
add(vl);

0 commit comments

Comments
 (0)