diff --git a/frontend/themes/apus/views/future-session-view.css b/frontend/themes/apus/views/future-session-view.css new file mode 100644 index 0000000..39b0caf --- /dev/null +++ b/frontend/themes/apus/views/future-session-view.css @@ -0,0 +1,17 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ diff --git a/frontend/themes/apus/views/future-sessions-view.css b/frontend/themes/apus/views/future-sessions-view.css new file mode 100644 index 0000000..39b0caf --- /dev/null +++ b/frontend/themes/apus/views/future-sessions-view.css @@ -0,0 +1,17 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ diff --git a/frontend/themes/apus/views/running-session-view.css b/frontend/themes/apus/views/running-session-view.css new file mode 100644 index 0000000..39b0caf --- /dev/null +++ b/frontend/themes/apus/views/running-session-view.css @@ -0,0 +1,17 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ diff --git a/frontend/themes/apus/views/running-sessions-view.css b/frontend/themes/apus/views/running-sessions-view.css new file mode 100644 index 0000000..39b0caf --- /dev/null +++ b/frontend/themes/apus/views/running-sessions-view.css @@ -0,0 +1,17 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ diff --git a/frontend/themes/apus/views/sessions-view.css b/frontend/themes/apus/views/sessions-view.css new file mode 100644 index 0000000..39b0caf --- /dev/null +++ b/frontend/themes/apus/views/sessions-view.css @@ -0,0 +1,17 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ diff --git a/src/main/bundles/dev.bundle b/src/main/bundles/dev.bundle index 07dc3b2..35fcb72 100644 Binary files a/src/main/bundles/dev.bundle and b/src/main/bundles/dev.bundle differ diff --git a/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java new file mode 100644 index 0000000..44d1902 --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java @@ -0,0 +1,36 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.ui.view; + +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.html.H4; +import com.vaadin.flow.component.html.Paragraph; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.conference.Session; + +@CssImport(value = "./themes/apus/views/future-session-view.css") +public class FutureSessionView extends VerticalLayout { + + public FutureSessionView(@NotNull final Session session) { + add(new H4(session.title())); + add(new Paragraph(session.speaker())); + add(new Paragraph(String.format("starts at %s", session.startDate().toLocalTime()))); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java new file mode 100644 index 0000000..6631a5e --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java @@ -0,0 +1,39 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.ui.view; + +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.html.H3; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.conference.Session; +import swiss.fihlon.apus.service.ConferenceService; + +@CssImport(value = "./themes/apus/views/future-sessions-view.css") +public class FutureSessionsView extends VerticalLayout { + + public FutureSessionsView(@NotNull final ConferenceService conferenceService) { + final HorizontalLayout futureSessions = new HorizontalLayout(); + for (final Session session : conferenceService.getFutureSessions()) { + futureSessions.add(new FutureSessionView(session)); + } + add(new H3("Future Sessions"), futureSessions); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java new file mode 100644 index 0000000..160a4a7 --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java @@ -0,0 +1,42 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.ui.view; + +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.html.H4; +import com.vaadin.flow.component.html.Paragraph; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.conference.Session; + +import java.time.Duration; +import java.time.LocalDateTime; + +@CssImport(value = "./themes/apus/views/running-session-view.css") +public class RunningSessionView extends VerticalLayout { + + public RunningSessionView(@NotNull final Session session) { + final Duration duration = Duration.between(LocalDateTime.now(), session.endDate()); + final long timeLeft = Math.round(duration.getSeconds() / 60f); + final String timeUnit = timeLeft == 1 ? "minute" : "minutes"; + add(new H4(session.title())); + add(new Paragraph(session.speaker())); + add(new Paragraph(String.format("%d %s left", timeLeft, timeUnit))); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java new file mode 100644 index 0000000..ca3f3e1 --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java @@ -0,0 +1,39 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.ui.view; + +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.html.H3; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.conference.Session; +import swiss.fihlon.apus.service.ConferenceService; + +@CssImport(value = "./themes/apus/views/running-sessions-view.css") +public class RunningSessionsView extends VerticalLayout { + + public RunningSessionsView(@NotNull final ConferenceService conferenceService) { + final HorizontalLayout runningSessions = new HorizontalLayout(); + for (final Session session : conferenceService.getRunningSessions()) { + runningSessions.add(new RunningSessionView(session)); + } + add(new H3("Running Sessions"), runningSessions); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java new file mode 100644 index 0000000..c26116f --- /dev/null +++ b/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java @@ -0,0 +1,33 @@ +/* + * Apus - A social wall for conferences with additional features. + * Copyright (C) Marcus Fihlon and the individual contributors to Apus. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package swiss.fihlon.apus.ui.view; + +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.service.ConferenceService; + +@CssImport(value = "./themes/apus/views/sessions-view.css") +public class SessionsView extends VerticalLayout { + + public SessionsView(@NotNull final ConferenceService conferenceService) { + add(new RunningSessionsView(conferenceService)); + add(new FutureSessionsView(conferenceService)); + } + +} diff --git a/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java b/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java index 0471b2e..3cd64ae 100644 --- a/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java +++ b/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java @@ -22,6 +22,8 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.Route; +import org.jetbrains.annotations.NotNull; +import swiss.fihlon.apus.service.ConferenceService; import java.io.Serial; @@ -32,10 +34,10 @@ public class SocialWall extends VerticalLayout { @Serial private static final long serialVersionUID = 7909437130138135008L; - public SocialWall() { + public SocialWall(@NotNull final ConferenceService conferenceService) { setId("social-wall"); add(new HorizontalLayout( - new Div("Agenda"), + new SessionsView(conferenceService), new Div("Posts"))); add(new Div("Footer")); }