From 498c8ee092bb54b3e5e3c202a1358e145c69e4e0 Mon Sep 17 00:00:00 2001 From: Marcus Fihlon Date: Sat, 30 Mar 2024 22:02:52 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor=20for=20better=20?= =?UTF-8?q?maintainability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcus Fihlon --- .../fihlon/apus/ui/view/SessionView.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/swiss/fihlon/apus/ui/view/SessionView.java b/src/main/java/swiss/fihlon/apus/ui/view/SessionView.java index 4decd30..a7519e4 100644 --- a/src/main/java/swiss/fihlon/apus/ui/view/SessionView.java +++ b/src/main/java/swiss/fihlon/apus/ui/view/SessionView.java @@ -56,27 +56,51 @@ public SessionView(@NotNull final String room, @Nullable final LocalTime startTime, @Nullable final LocalTime endTime) { addClassName("session-view"); + add(new H3(new Text(title == null ? "CLOSED" : title))); - add(new Div(speakers.isEmpty() ? nbsp() : new Text(String.format("\uD83D\uDC64 %s", - speakers.stream() - .map(Speaker::fullName) - .collect(Collectors.joining(", ")))))); - add(new Div(new Text(String.format("\uD83D\uDCCD %s", room)))); + add(createSpeakersComponent(speakers)); + add(createRoomComponent(room)); + add(createTimeComponent(startTime, endTime)); + } + + @NotNull + private static Component createSpeakersComponent(@NotNull final List speakers) { + final var speakersComponent = new Div(); + if (speakers.isEmpty()) { + speakersComponent.add(nbsp()); + } else { + final var joinedSpeakers = speakers.stream() + .map(Speaker::fullName) + .collect(Collectors.joining(", ")); + speakersComponent.add(new Text(String.format("\uD83D\uDC64 %s", joinedSpeakers))); + } + return speakersComponent; + } + @NotNull + private static Component createRoomComponent(@NotNull final String room) { + return new Div(new Text(String.format("\uD83D\uDCCD %s", room))); + } + + @NotNull + private Component createTimeComponent(@Nullable final LocalTime startTime, + @Nullable final LocalTime endTime) { + final var timeComponent = new Div(); final var now = LocalTime.now(); if (startTime == null || endTime == null) { // empty session - add(new Div(nbsp())); + timeComponent.add(nbsp()); addClassName("empty-session"); } else if (startTime.isBefore(now) && endTime.isAfter(now)) { // running session final Duration duration = Duration.between(now, endTime); final long timeLeft = Math.round(duration.getSeconds() / 60f); final String timeUnit = timeLeft == 1 ? "minute" : "minutes"; - add(new Div(new Text(String.format("⌛ %d %s left", timeLeft, timeUnit)))); + timeComponent.add(new Text(String.format("⌛ %d %s left", timeLeft, timeUnit))); addClassName("running-session"); } else { // next session - add(new Div(new Text(String.format("⌚ %s - %s", startTime, endTime)))); + timeComponent.add(new Text(String.format("⌚ %s - %s", startTime, endTime))); addClassName("next-session"); } + return timeComponent; } @NotNull