Skip to content

Commit ece6500

Browse files
committed
✨ Add onlick event to achievement list entries
1 parent fcf96f3 commit ece6500

File tree

7 files changed

+71
-5
lines changed

7 files changed

+71
-5
lines changed

frontend/src/achievement.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Achievement extends PolymerElement {
1414
width: 360px;
1515
border-radius: 5px;
1616
padding: 8px;
17+
cursor: pointer;
1718
}
1819
1920
#footer {
Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,54 @@
11
package org.cleancode.journal.component;
22

3-
import com.vaadin.flow.component.Tag;
3+
import com.vaadin.flow.component.*;
44
import com.vaadin.flow.component.dependency.JsModule;
55
import com.vaadin.flow.component.dependency.NpmPackage;
66
import com.vaadin.flow.component.polymertemplate.PolymerTemplate;
7+
import com.vaadin.flow.shared.Registration;
78

89
@Tag("achievement-line")
910
@JsModule("./src/achievement.js")
1011
@NpmPackage(value = "@polymer/iron-icons", version = "3.0.0")
1112
public class AchievementComponent extends PolymerTemplate<AchievementModel> {
1213

13-
public AchievementComponent() {
14+
private final String achievementId;
15+
16+
public AchievementComponent(String achievementId) {
17+
this.achievementId = achievementId;
1418
setId("achievement");
1519
}
1620

21+
public String getAchievementId() {
22+
return achievementId;
23+
}
24+
1725
@Override
1826
public AchievementModel getModel() {
1927
return super.getModel();
2028
}
29+
30+
public Registration addClickListener(ComponentEventListener<ClickEvent> listener) {
31+
return addListener(ClickEvent.class, listener);
32+
}
33+
34+
@DomEvent("click")
35+
public static class ClickEvent extends ComponentEvent<AchievementComponent> {
36+
37+
private int x, y;
38+
39+
public ClickEvent(AchievementComponent source, boolean fromClient, @EventData("event.offsetX") int x, @EventData("event.offsetY") int y) {
40+
super(source, fromClient);
41+
this.x = x;
42+
this.y = y;
43+
}
44+
45+
public int getX() {
46+
return x;
47+
}
48+
49+
public int getY() {
50+
return y;
51+
}
52+
53+
}
2154
}

src/main/java/org/cleancode/journal/component/LogEntryComponent.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ public LogEntryComponent() {
1616
public LogEntryModel getModel() {
1717
return super.getModel();
1818
}
19+
1920
}

src/main/java/org/cleancode/journal/service/AchievementService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import javax.annotation.PostConstruct;
88
import java.io.InputStreamReader;
9+
import java.util.HashMap;
910
import java.util.List;
1011
import java.util.Map;
1112
import java.util.stream.Collectors;
@@ -14,12 +15,14 @@
1415
public class AchievementService implements IAchievementService {
1516

1617
private List<Achievement> achievements;
18+
private HashMap<String, Achievement> achievementsById = new HashMap<>();
1719

1820
@PostConstruct
1921
private void loadAchievementsFromFile() {
2022
Gson gson = new Gson();
2123
String gradeFilePath = "/achievements.json";
2224
achievements = List.of(gson.fromJson(new InputStreamReader(getClass().getResourceAsStream(gradeFilePath)), Achievement[].class));
25+
achievements.forEach(achievement -> achievementsById.put(achievement.getId(), achievement));
2326
}
2427

2528
@Override
@@ -32,6 +35,11 @@ public Map<Achievement.Group, List<Achievement>> loadAllAchievementsInGroups() {
3235
return loadAllAchievements().stream().collect(Collectors.groupingBy(Achievement::getGroup));
3336
}
3437

38+
@Override
39+
public Achievement loadAchievementById(String achievementId) {
40+
return achievementsById.get(achievementId);
41+
}
42+
3543
@Override
3644
public List<Achievement> loadAllAchievementsByGroup(Achievement.Group group) {
3745
return loadAllAchievementsInGroups().get(group);

src/main/java/org/cleancode/journal/service/IAchievementService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ public interface IAchievementService extends Serializable {
1313

1414
Map<Achievement.Group, List<Achievement>> loadAllAchievementsInGroups();
1515

16+
Achievement loadAchievementById(String achievementId);
17+
1618
List<Achievement> loadAllAchievementsByGroup(Achievement.Group group);
1719
}

src/main/java/org/cleancode/journal/view/AchievementDialog.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ public AchievementDialog(IAchievementService achievementService, Profile profile
9393
content.add(actions);
9494
}
9595

96+
public AchievementDialog(IAchievementService achievementService, Profile profile) {
97+
this(achievementService, profile, null);
98+
}
99+
100+
public void setSelectedAchievemt(Achievement achievement) {
101+
groupSelect.setValue(achievement.getGroup());
102+
achievementSelect.setValue(achievement);
103+
}
104+
96105
private void selectedGroup(Achievement.Group group) {
97106
achievementSelect.setEnabled(true);
98107
achievementSelect.setItems(achievementService.loadAllAchievementsByGroup(group));

src/main/java/org/cleancode/journal/view/AchievementsView.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.cleancode.journal.view;
22

3+
import com.vaadin.flow.component.ComponentEventListener;
34
import com.vaadin.flow.component.html.H3;
45
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
56
import com.vaadin.flow.router.Route;
67
import org.cleancode.journal.component.AchievementComponent;
8+
import org.cleancode.journal.component.AchievementComponent.ClickEvent;
79
import org.cleancode.journal.component.AddSpeedDial;
810
import org.cleancode.journal.domain.Achievement;
911
import org.cleancode.journal.domain.Profile;
@@ -17,7 +19,12 @@
1719
@Route(layout = MainView.class)
1820
public class AchievementsView extends VerticalLayout {
1921

22+
private final Profile profile;
23+
private final IAchievementService achievementService;
24+
2025
public AchievementsView(Profile profile, IGradeService gradeService, IAchievementService achievementService) {
26+
this.profile = profile;
27+
this.achievementService = achievementService;
2128

2229
Map<Achievement.Group, List<Achievement>> achievements = achievementService.loadAllAchievementsInGroups();
2330

@@ -34,18 +41,23 @@ public void addAchievements(List<Achievement> achievements) {
3441
}
3542

3643
public void addAchievement(Achievement achievement) {
37-
38-
AchievementComponent achievementLine = new AchievementComponent();
44+
AchievementComponent achievementLine = new AchievementComponent(achievement.getId());
3945
achievementLine.getModel().setTitle(getTranslation(achievement.getId()));
4046
Score score = achievement.getScore();
4147
achievementLine.getModel().setExperience("+" + score.getExperience() + " XP");
4248
achievementLine.getModel().setSkills(score.getSkills());
49+
achievementLine.addClickListener((ComponentEventListener<ClickEvent>) event -> openAchievementDialog(achievement));
4350
add(achievementLine);
4451
}
4552

53+
private void openAchievementDialog(Achievement achievement) {
54+
AchievementDialog achievementDialog = new AchievementDialog(achievementService, profile);
55+
achievementDialog.setSelectedAchievemt(achievement);
56+
achievementDialog.open();
57+
}
58+
4659
private String getTranslation(Achievement.Group group) {
4760
return getTranslation("achievement.group." + group.name().toLowerCase());
4861
}
4962

50-
5163
}

0 commit comments

Comments
 (0)