From 61f61b4ffeae0221eec483e94e1df7ab26afa4ae Mon Sep 17 00:00:00 2001 From: Reinder Kraaij <kraaij@astron.nl> Date: Wed, 15 Nov 2023 21:44:04 +0100 Subject: [PATCH] Improve filtering and grouping of reservations --- .../src/routes/Timeline/WeekView.js | 21 +++++++++++++------ .../Timeline/components/toolbar/Filters.js | 9 +++++++- .../helpers/toolbar/filters.helper.js | 13 +++++++++--- .../Timeline/helpers/week.view.helper.js | 2 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js index 2d4836c73b0..a52164c4d95 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js @@ -167,6 +167,7 @@ export default function WeekView() { const [items, setItems] = useState({ schedulingUnitItems: [], schedulingAdditionalGroupingItems: [], + reservationAdditionalGroupingItems:[], reservationItems: [], sunTimingsItems: [] }) @@ -323,18 +324,26 @@ export default function WeekView() { // when the data update, has updatet the items, we have all the groups in expect station grouping // this is due to the fact that this is a LARGE amount of data - function refreshGrouping(grouper = grouping, schedulingUnitItems = items.schedulingUnitItems) { - const groupsplittedItems = expandTimeLineRowsForGrouping(schedulingUnitItems, grouper); - let combinedItems = [...schedulingUnitItems, ...groupsplittedItems] + function refreshGrouping(grouper = grouping, schedulingUnitItems = items.schedulingUnitItems, reserVationUnitItems = items.reservationItems) { + const groupsplittedItemsScheduling = expandTimeLineRowsForGrouping(schedulingUnitItems, grouper); + const groupsplittedItemsReservations = expandTimeLineRowsForGrouping(reserVationUnitItems, grouper); + let combinedItems = [...schedulingUnitItems, ...groupsplittedItemsScheduling, ...groupsplittedItemsReservations] let groupupdates = getGroups(grouper, startTime, combinedItems); setGroups(groupupdates.groups); refreshSunsettings(groupupdates.groups, groupupdates.itemGroupKey); - if (groupsplittedItems?.length > 0) { + if (groupsplittedItemsScheduling?.length > 0) { setItems(prevData => ({ ...prevData, - schedulingAdditionalGroupingItems: groupsplittedItems + schedulingAdditionalGroupingItems: groupsplittedItemsScheduling + })); + } + + if (groupsplittedItemsReservations?.length > 0) { + setItems(prevData => ({ + ...prevData, + reservationAdditionalGroupingItems: groupsplittedItemsReservations })); } @@ -425,7 +434,7 @@ export default function WeekView() { className={timelineClassName} groups={groups} keys={keys} - items={[...items.sunTimingsItems, ...items.schedulingUnitItems, ...items.schedulingAdditionalGroupingItems, ...items.reservationItems]} + items={[...items.sunTimingsItems, ...items.schedulingUnitItems, ...items.schedulingAdditionalGroupingItems, ...items.reservationItems, ...items.reservationAdditionalGroupingItems]} defaultTimeStart={startTime} defaultTimeEnd={endTime} visibleTimeStart={visibleTime.start.valueOf()} diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js index 375e57dfd16..6376969ec79 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js @@ -37,16 +37,23 @@ function Toggle(props) { //TODO: extract to separate class } function filterReservations(reservations, visibleStartTime, reservationFilter, projectFilter,endTime,startTime) { + + let reservationItems = reservations.flatMap(reservation => splitObjectIfSpanIsMultipleDays(reservation, false,startTime,endTime)) .map((reservation, index) => getReservationItem(reservation, index, moment(visibleStartTime).format(UIConstants.CALENDAR_DEFAULTDATE_FORMAT))) .filter(reservationItem => reservationFilter.includes(reservationItem.reason)) + if (projectFilter.length) { reservationItems = reservationItems.filter(reservationItem => reservationItem.project === null || projectFilter.includes(reservationItem.project)) } else { //only show items that don't have a project reservationItems = reservationItems.filter(reservationItem => reservationItem.project === null) } - return reservationItems; + + let datefiltered_reservationItems = reservationItems.filter(reservationItem => reservationItem.reservation_start_time>=startTime) + datefiltered_reservationItems = datefiltered_reservationItems.filter(reservationItem => reservationItem.reservation_start_time<=endTime) + + return datefiltered_reservationItems; } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js index ca328828242..8b78832f98d 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js @@ -143,6 +143,7 @@ export function getTimelineItem(suBlueprint, displayDate, includeStationsInfo, i suId: suBlueprint.id, project: suBlueprint.project, project_group: suBlueprint.project + '#' + currentGrouping, + project_task_group : suBlueprint.project + '#' + currentGrouping + "#tasks", name: suBlueprint.name, name_group: suBlueprint.name + '#' + currentGrouping, antenna_set: suBlueprint.antenna_set, @@ -222,6 +223,7 @@ export function getReservationItem(reservation, index, displayDate) { const stations = getStationsInfo(specificationsDoc?.resources?.stations); const currentGroup = moment(reservation.start_time).format(UIConstants.CALENDAR_GROUP_FORMAT) const currentGrouping = moment(reservation.start_time).format(UIConstants.CALENDAR_DEFAULTDATE_FORMAT) + let timeLineRow = { id: reservation.id + "~" + index, reservationId: reservation.id, @@ -230,7 +232,7 @@ export function getReservationItem(reservation, index, displayDate) { group: currentGroup, name: reservation.name, project: reservation.project_id, - + reservation_start_time : moment(reservation.start_time), type: 'RESERVATION', activity_type: `${type}${reservation.project_id ? (" - " + reservation.project_id) : ""}`, reason: type, @@ -246,11 +248,16 @@ export function getReservationItem(reservation, index, displayDate) { selectedBgColor: blockColor.bgColor, color: blockColor.color }; - timeLineRow.specified_stations = reservation.stations; + + timeLineRow.specified_stations = specificationsDoc?.resources?.stations; + + + timeLineRow.name_group = timeLineRow.name + '#' + currentGrouping timeLineRow.project_group = timeLineRow.project + '#' + currentGrouping timeLineRow.project_task_group = timeLineRow.project + '#' + currentGrouping ; // we do not have tasks, but we need to be visible. - + timeLineRow.stationsgroups = stations.stationsgroups; + timeLineRow.groupingSuffix = '#' + currentGrouping; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js index e1073018cfe..fc3a1eb3826 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js @@ -255,7 +255,7 @@ export async function getSunTimingItems(startTime, groups, groupkey) { const sunTimingItems = [] for (const group of groups) { - + const groupDay = moment(group.date); -- GitLab