Renaming, styling and polishing
Renamed FirstMeetingCalendarEvent to MyCalendarEvent. Added link to the projects detail page. Changed styling of the calendar.
This commit is contained in:
parent
db291ebace
commit
2ef8efbaee
core/src/main/java/se/su/dsv/scipro/firstmeeting
FirstMeetingCalendarEvent.javaFirstMeetingService.javaFirstMeetingServiceImpl.javaMyCalendarEvent.java
view/src/main
java/se/su/dsv/scipro/supervisor/panels
webapp
@ -1,11 +0,0 @@
|
||||
package se.su.dsv.scipro.firstmeeting;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public record FirstMeetingCalendarEvent(
|
||||
String title,
|
||||
LocalDate date,
|
||||
String room,
|
||||
String projectTitle,
|
||||
Long projectId
|
||||
) {}
|
@ -9,7 +9,7 @@ import se.su.dsv.scipro.system.User;
|
||||
public interface FirstMeetingService {
|
||||
Optional<ProjectFirstMeeting> findByProject(Project project);
|
||||
|
||||
List<FirstMeetingCalendarEvent> findFirstMeetingsBySupervisor(User supervisor);
|
||||
List<MyCalendarEvent> findFirstMeetingsBySupervisor(User supervisor);
|
||||
|
||||
ProjectFirstMeeting schedule(Project project, Date date, String room, String description);
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public class FirstMeetingServiceImpl
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FirstMeetingCalendarEvent> findFirstMeetingsBySupervisor(User supervisor) {
|
||||
public List<MyCalendarEvent> findFirstMeetingsBySupervisor(User supervisor) {
|
||||
JPAQuery<ProjectFirstMeeting> firstMeetingsQuery = createQuery()
|
||||
.select(QProjectFirstMeeting.projectFirstMeeting)
|
||||
.from(QProjectFirstMeeting.projectFirstMeeting)
|
||||
@ -57,7 +57,7 @@ public class FirstMeetingServiceImpl
|
||||
return projectFirstMeetings
|
||||
.stream()
|
||||
.map(projectFirstMeeting ->
|
||||
new FirstMeetingCalendarEvent(
|
||||
new MyCalendarEvent(
|
||||
projectFirstMeeting.getActivity().getTitle(),
|
||||
projectFirstMeeting
|
||||
.getActivity()
|
||||
|
@ -0,0 +1,5 @@
|
||||
package se.su.dsv.scipro.firstmeeting;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public record MyCalendarEvent(String title, LocalDate date, String room, String projectTitle, Long projectId) {}
|
@ -29,12 +29,12 @@
|
||||
<wicket:container wicket:id="rows">
|
||||
<div wicket:id="cells" class="calendar-cell">
|
||||
<div wicket:id="day-number" class="day-number"></div>
|
||||
<wicket:container wicket:id="calendar-events">
|
||||
<div wicket:id="eventContainer">
|
||||
<div wicket:id="eventLabel"></div>
|
||||
<div wicket:id="roomLabel"></div>
|
||||
</div>
|
||||
</wicket:container>
|
||||
<div wicket:id="calendar-events">
|
||||
<a wicket:id="projectLink" class="d-block">
|
||||
<span wicket:id="eventLabel"></span><br>
|
||||
<span wicket:id="roomLabel"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</wicket:container>
|
||||
</div>
|
||||
|
@ -1,11 +1,6 @@
|
||||
package se.su.dsv.scipro.supervisor.panels;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.wicket.AttributeModifier;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
@ -14,17 +9,28 @@ import org.apache.wicket.markup.head.IHeaderResponse;
|
||||
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.markup.repeater.RepeatingView;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingCalendarEvent;
|
||||
import org.apache.wicket.request.mapper.parameter.PageParameters;
|
||||
import se.su.dsv.scipro.firstmeeting.FirstMeetingService;
|
||||
import se.su.dsv.scipro.firstmeeting.MyCalendarEvent;
|
||||
import se.su.dsv.scipro.project.Project;
|
||||
import se.su.dsv.scipro.session.SciProSession;
|
||||
import se.su.dsv.scipro.supervisor.pages.SupervisorProjectDetailsPage;
|
||||
import se.su.dsv.scipro.system.User;
|
||||
import se.su.dsv.scipro.system.UserService;
|
||||
import se.su.dsv.scipro.util.PageParameterKeys;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MyCalendarPanel extends Panel {
|
||||
|
||||
@ -81,9 +87,9 @@ public class MyCalendarPanel extends Panel {
|
||||
renderCalendar(calendarBody);
|
||||
}
|
||||
|
||||
private List<FirstMeetingCalendarEvent> findCalendarEvents() {
|
||||
private List<MyCalendarEvent> findCalendarEvents() {
|
||||
User user = SciProSession.get().getUser();
|
||||
List<FirstMeetingCalendarEvent> events = firstMeetingService.findFirstMeetingsBySupervisor(user);
|
||||
List<MyCalendarEvent> events = firstMeetingService.findFirstMeetingsBySupervisor(user);
|
||||
return events;
|
||||
}
|
||||
|
||||
@ -113,7 +119,7 @@ public class MyCalendarPanel extends Panel {
|
||||
days.add(date);
|
||||
}
|
||||
|
||||
IModel<List<FirstMeetingCalendarEvent>> events = LoadableDetachableModel.of(this::findCalendarEvents);
|
||||
IModel<List<MyCalendarEvent>> events = LoadableDetachableModel.of(this::findCalendarEvents);
|
||||
|
||||
DayOfWeek firstDayOfWeek = DayOfWeek.MONDAY;
|
||||
int offset = (firstDayOfMonth.getDayOfWeek().getValue() - firstDayOfWeek.getValue() + 7) % 7;
|
||||
@ -134,24 +140,30 @@ public class MyCalendarPanel extends Panel {
|
||||
dayLabel.add(new AttributeModifier("class", dayClass)); // AttributeModifiler.append?
|
||||
cell.add(dayLabel);
|
||||
|
||||
ListView<FirstMeetingCalendarEvent> eventView = new ListView<>(
|
||||
ListView<MyCalendarEvent> eventView = new ListView<>(
|
||||
"calendar-events",
|
||||
events.map(eventList -> eventList.stream().filter(event -> event.date().equals(day)).toList())
|
||||
) {
|
||||
@Override
|
||||
protected void populateItem(ListItem<FirstMeetingCalendarEvent> item) {
|
||||
FirstMeetingCalendarEvent event = item.getModelObject();
|
||||
protected void populateItem(ListItem<MyCalendarEvent> item) {
|
||||
MyCalendarEvent event = item.getModelObject();
|
||||
|
||||
WebMarkupContainer eventContainer = new WebMarkupContainer("eventContainer");
|
||||
eventContainer.add(new AttributeModifier("class", "calendar-event-container"));
|
||||
eventContainer.add(new AttributeModifier("title", event.projectTitle()));
|
||||
item.add(new AttributeModifier("class", "calendar-event-container"));
|
||||
item.add(new AttributeModifier("title", event.projectTitle()));
|
||||
|
||||
PageParameters pp = new PageParameters();
|
||||
pp.add(PageParameterKeys.MAP.get(Project.class), event.projectId());
|
||||
BookmarkablePageLink<Void> projectLink = new BookmarkablePageLink<>(
|
||||
"projectLink",
|
||||
SupervisorProjectDetailsPage.class,
|
||||
pp
|
||||
);
|
||||
|
||||
Label eventLabel = new Label("eventLabel", event.title());
|
||||
Label roomLabel = new Label("roomLabel", event.room());
|
||||
|
||||
eventContainer.add(eventLabel);
|
||||
eventContainer.add(roomLabel);
|
||||
item.add(eventContainer);
|
||||
projectLink.add(eventLabel);
|
||||
projectLink.add(roomLabel);
|
||||
item.add(projectLink);
|
||||
}
|
||||
};
|
||||
|
||||
@ -171,17 +183,17 @@ public class MyCalendarPanel extends Panel {
|
||||
return cell;
|
||||
}
|
||||
|
||||
private static List<FirstMeetingCalendarEvent> generateSampleEvents(YearMonth yearMonth) {
|
||||
List<FirstMeetingCalendarEvent> events = new ArrayList<>();
|
||||
events.add(new FirstMeetingCalendarEvent("event2", yearMonth.atDay(8), "room1", "Project 1", 1l));
|
||||
events.add(new FirstMeetingCalendarEvent("event1", yearMonth.atDay(3), "room2", "Project 2", 2l));
|
||||
events.add(new FirstMeetingCalendarEvent("event3", yearMonth.atDay(8), "room1", "Project 3", 3l));
|
||||
events.add(new FirstMeetingCalendarEvent("event4", yearMonth.atDay(10), "room4", "Project 4", 4l));
|
||||
events.add(new FirstMeetingCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 5", 5l));
|
||||
events.add(new FirstMeetingCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 6", 6l));
|
||||
events.add(new FirstMeetingCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 7", 7l));
|
||||
events.add(new FirstMeetingCalendarEvent("event5", yearMonth.atDay(16), "room2", "Project 8", 8l));
|
||||
events.add(new FirstMeetingCalendarEvent("event5", yearMonth.atDay(16), "rooom2", "Project 9", 9l));
|
||||
private static List<MyCalendarEvent> generateSampleEvents(YearMonth yearMonth) {
|
||||
List<MyCalendarEvent> events = new ArrayList<>();
|
||||
events.add(new MyCalendarEvent("event2", yearMonth.atDay(8), "room1", "Project 1", 1l));
|
||||
events.add(new MyCalendarEvent("event1", yearMonth.atDay(3), "room2", "Project 2", 2l));
|
||||
events.add(new MyCalendarEvent("event3", yearMonth.atDay(8), "room1", "Project 3", 3l));
|
||||
events.add(new MyCalendarEvent("event4", yearMonth.atDay(10), "room4", "Project 4", 4l));
|
||||
events.add(new MyCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 5", 5l));
|
||||
events.add(new MyCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 6", 6l));
|
||||
events.add(new MyCalendarEvent("event5", yearMonth.atDay(16), "room1", "Project 7", 7l));
|
||||
events.add(new MyCalendarEvent("event5", yearMonth.atDay(16), "room2", "Project 8", 8l));
|
||||
events.add(new MyCalendarEvent("event5", yearMonth.atDay(16), "rooom2", "Project 9", 9l));
|
||||
return events;
|
||||
}
|
||||
}
|
||||
|
@ -7,14 +7,14 @@
|
||||
/* Core grid layout: 7 days */
|
||||
.calendar-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(7, 1fr);
|
||||
grid-template-columns: repeat(7, minmax(0, 1fr));
|
||||
background-color: transparent; /* removes gray gaps */
|
||||
}
|
||||
|
||||
/* Headers */
|
||||
.calendar-header {
|
||||
background-color: #002F5F;
|
||||
color: #FFFFFF;
|
||||
background-color: #EBF0F5;
|
||||
/*color: #FFFFFF;*/
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
padding: 6px;
|
||||
@ -37,7 +37,11 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
height: 100%;
|
||||
min-height: 8em;
|
||||
}
|
||||
.calendar-cell a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Top and left borders added only to first row/column */
|
||||
@ -75,14 +79,11 @@
|
||||
.calendar-event-container {
|
||||
display: block;
|
||||
padding: 2px 4px;
|
||||
font-size: 0.75em;
|
||||
background-color: #a5c995;
|
||||
border-left: 3px solid #007acc;
|
||||
border-radius: 2px;
|
||||
color: #1a1a1a;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Spacing between events */
|
||||
@ -99,7 +100,7 @@
|
||||
justify-content: space-between;
|
||||
grid-template-columns: 1fr auto 1fr;
|
||||
align-items: center;
|
||||
background-color: #002F5F;
|
||||
background-color: #DCE4EE;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
|
||||
@ -120,10 +121,9 @@
|
||||
}
|
||||
|
||||
.calendar-nav-button {
|
||||
color: white;
|
||||
/*color: white;*/
|
||||
border: none;
|
||||
padding: 8px 12px;
|
||||
font-size: 1em;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
margin: 0 5px;
|
||||
@ -139,5 +139,5 @@
|
||||
.calendar-title {
|
||||
font-size: 1.3em;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
/*color: white;*/
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ function normalizeCalendarHeights() {
|
||||
});
|
||||
|
||||
cells.forEach((cell) => {
|
||||
cell.style.height = maxHeight + "px";
|
||||
//cell.style.height = maxHeight + "px";
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user