From 548fb245d0622af183781add229e57fc97e99e20 Mon Sep 17 00:00:00 2001 From: Phil Cline Date: Wed, 22 Sep 2021 09:54:50 -0400 Subject: [PATCH 1/3] fix(saveEntity, saveTripsForCalendar): Resolve missing defaults with GTFS spec change fix #716, #717 --- lib/editor/actions/active.js | 23 +++++++++++++++++------ lib/editor/actions/trip.js | 10 +++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/editor/actions/active.js b/lib/editor/actions/active.js index 49b74d68a..f7bf8fc37 100644 --- a/lib/editor/actions/active.js +++ b/lib/editor/actions/active.js @@ -6,10 +6,8 @@ import {createAction, type ActionType} from 'redux-actions' import {createVoidPayloadAction, secureFetch} from '../../common/actions' import {ENTITY} from '../constants' -import {newGtfsEntity, fetchBaseGtfs} from './editor' import {fetchFeedSourceAndProject} from '../../manager/actions/feeds' import {fetchGTFSEntities} from '../../manager/actions/versions' -import {saveTripPattern} from './tripPattern' import { getEditorNamespace, getTableById, @@ -18,10 +16,12 @@ import { subSubComponentList } from '../util/gtfs' import {getMapFromGtfsStrategy, entityIsNew} from '../util/objects' - import type {Entity, Feed} from '../../types' import type {dispatchFn, getStateFn, AppState} from '../../types/reducers' +import {saveTripPattern} from './tripPattern' +import {newGtfsEntity, fetchBaseGtfs} from './editor' + export const clearGtfsContent = createVoidPayloadAction('CLEAR_GTFSEDITOR_CONTENT') const receivedNewEntity = createAction( 'RECEIVE_NEW_ENTITY', @@ -331,14 +331,25 @@ export function saveEntity ( return } dispatch(savingActiveGtfsEntity()) - const notNew = !entityIsNew(entity) + // Add default vals for component + const defaults = {} + if (component === 'route') { + defaults.continuous_pickup = 1 // Default value for no continuous pickup + defaults.continuous_drop_off = 1 // Default value for no continuous drop off + } else if (component === 'feedinfo') { + defaults.default_lang = '' + defaults.feed_contact_url = '' + defaults.feed_contact_email = '' + } + const entityWithDefaults = {...defaults, ...(entity: any)} // add defaults, if any. + const notNew = !entityIsNew(entityWithDefaults) const method = notNew ? 'put' : 'post' - const idParam = notNew ? `/${entity.id || ''}` : '' + const idParam = notNew ? `/${entityWithDefaults.id || ''}` : '' const {sessionId} = getState().editor.data.lock const route = component === 'fare' ? 'fareattribute' : component const url = `/api/editor/secure/${route}${idParam}?feedId=${feedId}&sessionId=${sessionId || ''}` const mappingStrategy = getMapFromGtfsStrategy(component) - const data = mappingStrategy(entity) + const data = mappingStrategy(entityWithDefaults) return dispatch(secureFetch(url, method, data)) .then(res => res.json()) .then(savedEntity => { diff --git a/lib/editor/actions/trip.js b/lib/editor/actions/trip.js index 8b25515c6..6f65a0cb9 100644 --- a/lib/editor/actions/trip.js +++ b/lib/editor/actions/trip.js @@ -7,7 +7,6 @@ import {createVoidPayloadAction, fetchGraphQL, secureFetch} from '../../common/a import {setErrorMessage} from '../../manager/actions/status' import {entityIsNew} from '../util/objects' import {getEditorNamespace} from '../util/gtfs' - import type {Pattern, TimetableColumn, Trip} from '../../types' import type {dispatchFn, getStateFn, TripCounts} from '../../types/reducers' @@ -159,6 +158,15 @@ export function saveTripsForCalendar ( trips = trips.map(snakeCaseKeys) return Promise.all(trips.filter(t => t).map((trip, index) => { const tripExists = !entityIsNew(trip) && trip.id !== null + const tripCopy: any = (trip: any) + // Add default value to continuous pickup if not provided + const defaults = { + continuous_pickup: 1, + continuous_drop_off: 1 + } + tripCopy.stop_times = tripCopy.stop_times.map((stopTime, index) => { + return {...defaults, ...(stopTime: any)} + }) const method = tripExists ? 'put' : 'post' const url = tripExists && trip.id ? `/api/editor/secure/trip/${trip.id}?feedId=${feedId}&sessionId=${sessionId}` From c48bb1826bdeb075763a93734a394a61ed9ba3af Mon Sep 17 00:00:00 2001 From: Phil Cline Date: Wed, 22 Sep 2021 12:26:58 -0400 Subject: [PATCH 2/3] refactor(fetchBaseGtfs, saveTripsForCalendar): Fix fetch of new spec fields, address comments --- lib/editor/actions/editor.js | 7 +++++-- lib/editor/actions/trip.js | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/editor/actions/editor.js b/lib/editor/actions/editor.js index 62f2f6a75..6d1d97bde 100644 --- a/lib/editor/actions/editor.js +++ b/lib/editor/actions/editor.js @@ -8,7 +8,6 @@ import {createAction, type ActionType} from 'redux-actions' import {createVoidPayloadAction, fetchGraphQL, secureFetch} from '../../common/actions' import {generateUID} from '../../common/util/util' -import {clearGtfsContent, saveActiveGtfsEntity, setActiveGtfsEntity} from './active' import {ENTITY} from '../constants' import { generateNullProps, @@ -17,7 +16,6 @@ import { getTableById } from '../util/gtfs' import {fetchGTFSEntities} from '../../manager/actions/versions' - import type { dispatchFn, getStateFn, @@ -26,6 +24,8 @@ import type { LockState } from '../../types/reducers' +import {clearGtfsContent, saveActiveGtfsEntity, setActiveGtfsEntity} from './active' + export const updateEntitySort = createAction('UPDATE_ENTITY_SORT') const createGtfsEntity = createAction( @@ -384,6 +384,9 @@ export function fetchBaseGtfs ({ feed_version default_route_color default_route_type + default_lang + feed_contact_url + feed_contact_email } agency (limit: -1) { id diff --git a/lib/editor/actions/trip.js b/lib/editor/actions/trip.js index 6f65a0cb9..752001496 100644 --- a/lib/editor/actions/trip.js +++ b/lib/editor/actions/trip.js @@ -1,5 +1,5 @@ // @flow - +import clone from 'lodash/cloneDeep' import {createAction, type ActionType} from 'redux-actions' import {snakeCaseKeys} from '../../common/util/map-keys' @@ -158,8 +158,9 @@ export function saveTripsForCalendar ( trips = trips.map(snakeCaseKeys) return Promise.all(trips.filter(t => t).map((trip, index) => { const tripExists = !entityIsNew(trip) && trip.id !== null - const tripCopy: any = (trip: any) + const tripCopy: any = clone((trip: any)) // Add default value to continuous pickup if not provided + // Editing continuous pickup/drop off is not currently supported in the schedule editor const defaults = { continuous_pickup: 1, continuous_drop_off: 1 From cda4f65a8dc80f555e1e0aaf167621ffa0cbac0a Mon Sep 17 00:00:00 2001 From: Phil Cline Date: Wed, 22 Sep 2021 14:45:38 -0400 Subject: [PATCH 3/3] refactor(saveTripsForCalendar): Fix missing tripCopy ref --- lib/editor/actions/trip.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/actions/trip.js b/lib/editor/actions/trip.js index 752001496..ddef25d49 100644 --- a/lib/editor/actions/trip.js +++ b/lib/editor/actions/trip.js @@ -172,7 +172,7 @@ export function saveTripsForCalendar ( const url = tripExists && trip.id ? `/api/editor/secure/trip/${trip.id}?feedId=${feedId}&sessionId=${sessionId}` : `/api/editor/secure/trip?feedId=${feedId}&sessionId=${sessionId}` - return dispatch(secureFetch(url, method, trip)) + return dispatch(secureFetch(url, method, tripCopy)) .then(res => res.json()) .catch(err => { console.warn(err)