| Name | +Category | +Continent | +Weeks | +Cost | + + + +
|---|
+
+ ${errors[error]}
`); + }) + $statusMessages.css('display', 'block'); +} + +const events = { + showNewTripForm() { + $('#new-trip-modal').css('display', 'block'); + }, + addTrip(event){ + event.preventDefault(); + const tripData = {}; + + fields.forEach( (field) => { + const val = $(`input[name=${field}]`).val(); + if (val !== '' ) { + tripData[field] = val; + } + }); + + const trip = new Trip(tripData); + + if (trip.isValid()) { + trip.save({}, { + success: events.successfullSave, + error: events.failedSave, + }); + } else { + renderErrors(trip.validationError); + } + }, + successfullSave(trip) { + $statusMessages.empty(); + $statusMessages.append(`${trip.get('name')} added!
`); + $statusMessages.css('display', 'block'); + }, + failedSave(trip, response) { + renderErrors(response.responseJSON.errors); + trip.destroy(); + }, + successReservation(reservation) { + $statusMessages.empty(); + $statusMessages.append(`${reservation.get('name')} added!
`); + $statusMessages.css('display', 'block'); + }, + failedReservation(reservation, response) { + renderErrors(response.responseJSON.errors) + reservation.destroy(); + }, + sortTrips() { + $('.current-sort-field').removeClass('current-sort-field'); + + // get the class list of the selected element + const classes = $(this).attr('class').split(/\s+/); + + classes.forEach((className) => { + if (fields.includes(className)) { + if (className === tripList.comparator) { + tripList.models.reverse(); + tripList.trigger('sort', tripList); + } else { + tripList.comparator = className; + tripList.sort(); + } + } + }); + + $('.current-sort-field').removeClass('current-sort-field'); + $(this).addClass('current-sort-field'); + }, + filterTrips(event) { + event.preventDefault(); + const $tripQuery = $('#trip-query option:selected'); + const query = $tripQuery.val(); + + const $queryValue = $('#query-value'); + const queryValue = $queryValue.val(); + let filteredTrips = tripList; + + if (query == 'weeks' || query == 'cost') { + filteredTrips = tripList.filter(trip => trip.get(query) <= queryValue); + } else { + filteredTrips = tripList.filter(function(trip) { + const attr_value = trip.attributes[query].toLowerCase(); + const search_term = queryValue.toLowerCase(); + + if (attr_value.includes(search_term)) { + return true; + } + }); + } + render(filteredTrips); + }, + clearModals() { + const modal = document.getElementById('res-modal'); + const modal2 = document.getElementById('new-trip-modal'); + const modal3 = document.getElementById('status-messages-modal'); + + if (event.target == modal || event.target == modal2 || event.target == modal3) { + (event.target).style.display = 'none'; + modal3.style.display = 'none'; + } + }, + getTrip() { + const trip = new Trip({ id: $(this).attr('data-id') }) + $tripDescription.empty(); + trip.fetch().done(() => { + $tripDescription.append(tripDetailsTemplate(trip.attributes)); + }); + }, + showResForm() { + const tripID = $(this).attr('data-id'); + $resForm.append(``); + $resModal.css('display', 'block'); + }, + addReservation() { + event.preventDefault(); + const resData = {}; + const formfields = ['name', 'age', 'email', 'tripID'] + + formfields.forEach( (field) => { + const val = $(`form input[name=res-${field}]`).val(); + if (val !== '') { + resData[field] = val; + } + }); + + const reservation = new Reservation(resData) + + if (reservation.isValid()) { + reservation.save({}, { + success: events.successReservation, + error: events.failedReservation, + }); + } else { + renderErrors(reservation.validationError); + } + } +} $(document).ready( () => { - $('main').html('