From 70076811c88fd54ef341dff89c7d7e15501c39f2 Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 28 Jan 2025 17:28:32 -0800 Subject: [PATCH] DBC22-2802: payload integration --- .../apps/authentication/serializers.py | 14 +++++--- src/frontend/src/Components/data/routes.js | 2 +- .../src/Components/routing/RouteDetails.js | 18 +++++++--- .../routing/forms/NotificationDateTime.js | 35 +++++++++++++++++++ .../routing/forms/NotificationEventType.js | 6 ++++ 5 files changed, 65 insertions(+), 10 deletions(-) diff --git a/src/backend/apps/authentication/serializers.py b/src/backend/apps/authentication/serializers.py index 7efc9381f..439da2584 100644 --- a/src/backend/apps/authentication/serializers.py +++ b/src/backend/apps/authentication/serializers.py @@ -11,13 +11,17 @@ class Meta: class SavedRoutesSerializer(SafeStringMixin, serializers.ModelSerializer): - class Meta: model = SavedRoutes - fields = ('id', 'label', 'distance', 'distance_unit', - 'start', 'start_point', 'end', 'end_point', - 'validated', 'thumbnail', 'route', 'criteria', - 'searchTimestamp', 'notification') + fields = ( + 'id', 'label', 'distance', 'distance_unit', + 'start', 'start_point', 'end', 'end_point', + 'validated', 'thumbnail', 'route', 'criteria', + 'searchTimestamp', 'notification', 'notification_types', + 'notification_days', 'notification_start_date', + 'notification_end_date', 'notification_start_time', + 'notification_end_time', + ) def save(self): ''' Save the route with the requesting user. ''' diff --git a/src/frontend/src/Components/data/routes.js b/src/frontend/src/Components/data/routes.js index 73546993f..5326fb33d 100644 --- a/src/frontend/src/Components/data/routes.js +++ b/src/frontend/src/Components/data/routes.js @@ -161,7 +161,7 @@ export const patchRoute = async (route, selectedRoute, dispatch, body) => { } const savedRoute = await response.json(); - const payload = {...route, notification: savedRoute.notification}; + const payload = {...route, ...savedRoute}; if (selectedRoute && selectedRoute.id === route.id) { dispatch(updateSelectedRoute(payload)); } diff --git a/src/frontend/src/Components/routing/RouteDetails.js b/src/frontend/src/Components/routing/RouteDetails.js index 3eb7d6bf7..fb190907c 100644 --- a/src/frontend/src/Components/routing/RouteDetails.js +++ b/src/frontend/src/Components/routing/RouteDetails.js @@ -388,10 +388,20 @@ export default function RouteDetails(props) { return; } - // const body = { notification: true }; - // const response = await patchRoute(route, selectedRoute, dispatch, body); - // setNotificationsEnabled(response.notification); - // setShowNotificationForm(false); + const defaultPayload = { notification: true }; + const eventTypePayload = EventTypeFormRef.current.getPayload(); + const dateTimePayload = DateTimeFormRef.current.getPayload(); + const payload = { + ...defaultPayload, + ...eventTypePayload, + ...dateTimePayload + }; + + console.log('payload', payload); + + const response = await patchRoute(route, selectedRoute, dispatch, payload); + setNotificationsEnabled(response.notification); + setShowNotificationForm(false); } // Main components diff --git a/src/frontend/src/Components/routing/forms/NotificationDateTime.js b/src/frontend/src/Components/routing/forms/NotificationDateTime.js index 15f38b55c..f3f47009a 100644 --- a/src/frontend/src/Components/routing/forms/NotificationDateTime.js +++ b/src/frontend/src/Components/routing/forms/NotificationDateTime.js @@ -138,6 +138,41 @@ const NotificationDateTime = forwardRef((props, ref) => { setErrorMessages(errors); return errors.length === 0; + }, + + getPayload() { + const payload = { + notification_days: [], + notification_start_date: null, + notification_end_date: null, + notification_start_time: null, + notification_end_time: null + } + + // Send immediately and all the time + if (!showSpecificTimeDate) { + return payload; + } + + // Time range for all date/day options + payload.notification_start_time = startTime; + payload.notification_end_time = endTime; + + // Specific date + if (specificDateOption === 'Specific date') { + payload.notification_start_date = startDate; + + // Date range + } else if (specificDateOption === 'Date range') { + payload.notification_start_date = startDate; + payload.notification_end_date = endDate; + + // Days of the week + } else { + payload.notification_days = Object.keys(dayOfWeek).filter(day => dayOfWeek[day]); + } + + return payload; } })); diff --git a/src/frontend/src/Components/routing/forms/NotificationEventType.js b/src/frontend/src/Components/routing/forms/NotificationEventType.js index 1bf64f19d..9c002bf85 100644 --- a/src/frontend/src/Components/routing/forms/NotificationEventType.js +++ b/src/frontend/src/Components/routing/forms/NotificationEventType.js @@ -34,6 +34,12 @@ const NotificationEventType = forwardRef((props, ref) => { setErrorMessage(''); } return isValid; + }, + + getPayload() { + return { + notification_types: Object.keys(notificationEventTypes).filter(type => notificationEventTypes[type]) + }; } }));