|
|
- <template>
- <div class="white-bkg">
- <header>
- <div class="header__col">
- <button class="btn btn--primary" @click="goBack">
- <svg
- xmlns="http://www.w3.org/2000/svg"
- class="icon icon-tabler icon-tabler-chevrons-left"
- width="24"
- height="24"
- viewBox="0 0 24 24"
- stroke-width="3"
- stroke="#ffffff"
- fill="none"
- stroke-linecap="round"
- stroke-linejoin="round"
- >
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
- <polyline points="11 7 6 12 11 17" />
- <polyline points="17 7 12 12 17 17" />
- </svg> back
- </button>
- </div>
- <div class="header__col">
- <Logo />
- </div>
- <div class="header__col" />
- </header>
- <main class="main-with-header">
- <ChosenFlights
- :selected-orig="selectedOrig"
- :selected-dest="selectedDest"
- style="margin: 0 1rem;"
- />
- <!-- <pre>
- {{ schedules }}
- </pre> -->
- <DatePicker
- :starting-date="startingDate"
- :selected-dows="selectedDows"
- />
- </main>
- </div>
- </template>
-
- <script>
- export default {
- data () {
- return {
- schedules: [],
- startingDate: new Date(),
- selectedSchedule: {},
- selectedDays: [],
- selectedOrig: {},
- selectedDest: {}
- }
- },
- async fetch () {
- // console.log(this.$route.params.o)
-
- const today = new Date().toLocaleDateString('en-CA')
-
- const scheduleFetchFilterFormula = `AND(Is_Current="Yes",Origin_IATA="${this.$route.params.o}",Destination_IATA="${this.$route.params.d}",Effective_End>"${today}")`
- const scheduleFetchSort = '&sort[0][field]=Departure_TimeL&sort[0][direction]=asc'
-
- const response = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/Schedule?filterByFormula=${scheduleFetchFilterFormula}${scheduleFetchSort}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- Authorization: 'Bearer keyJ2ht64ZSN57AG1'
- }
- })
-
- const data = await response.json()
-
- // console.log(data)
-
- this.schedules = [...data.records]
- },
- computed: {
- selectedDows () {
- const mappedDows = this.schedules.map((schedule) => {
- // console.log(schedule.fields)
- return {
- Flight_Number: schedule.fields.Flight_Number,
- DowsList: this.daysList(schedule.fields.Frequency_Convert),
- Effective_Start: schedule.fields.Effective_Start,
- Effective_End: schedule.fields.Effective_End,
- Departure_TimeL: schedule.fields.Departure_TimeL
- }
- })
- return mappedDows
- }
- },
- mounted () {
- //this.$segment.page('dates');
- this.$segment.track('dates__mount-page', {
- origin: this.$route.params.o,
- destination: this.$route.params.d
- });
- const emailCookie = this.$cookies.get('email')
- if(emailCookie){
- this.$segment.identify(emailCookie, {
- email: emailCookie
- });
- }
- },
- created () {
- // console.log(this.$route.path)
-
- if (this.$route && this.$route.params && this.$route.params.o) {
- this.fetchSingleAirport(this.$route.params.o, true)
- }
- if (this.$route && this.$route.params && this.$route.params.d) {
- this.fetchSingleAirport(this.$route.params.d, false)
- }
- },
- methods: {
- daysList (days) {
- const list = days.split(', ').map((day) => {
- const name = day.toLowerCase().slice(0, -1)
-
- let num
- switch (name) {
- case 'su':
- num = 0
- break
-
- case 'mo':
- num = 1
- break
-
- case 'tu':
- num = 2
- break
-
- case 'we':
- num = 3
- break
-
- case 'th':
- num = 4
- break
-
- case 'fr':
- num = 5
- break
-
- case 'sa':
- num = 6
- break
-
- default:
- break
- }
- return {
- name,
- num
- }
- })
-
- return list.sort(function (a, b) {
- return a.num - b.num
- })
- },
- goBack () {
- this.$segment.track('dates__go_back',{
- origin: this.$route.params.o,
- destination: this.$route.params.d
- })
-
- //this.$router.go(-1)
-
- this.$router.push({
- path: '/go/' + this.$route.params.o + "/" + this.$route.params.d
- })
- },
- book (schedule) {
- if (schedule.fields.IsExpedia[0] === 'true') {
- this.startingDate = new Date()
- this.selectedSchedule = schedule.fields
- this.selectedDays = this.daysList(schedule.fields.Frequency_Convert)
- } else {
- window.open(schedule.fields['BookingLink (from Carriers_Alaska)'][0])
- }
- },
- clearSelectedSchedule () {
- //console.log('clear')
- this.startingDate = ''
- this.selectedSchedule = {}
- },
- async fetchSingleAirport (iata, isOrig) {
- const airportFetchFilterFormula =
- isOrig
- ? `AND(Is_Origin=1,{IsCurrent-AsOrigin}="Yes",Airport_IATA="${iata}")`
- : `AND(Is_Destination=1,{IsCurrent-AsDest}="Yes",Airport_IATA="${iata}")`
-
- const response = await fetch(`https://api.airtable.com/v0/appiQwfVZixRgRICe/Airports_IATA?filterByFormula=${airportFetchFilterFormula}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- Authorization: 'Bearer keyJ2ht64ZSN57AG1'
- }
- })
-
- const mapData = await response.json()
-
- const thisAirport = {
- iata: mapData.records[0].fields.Airport_IATA,
- lat: mapData.records[0].fields.Latitude_Deg,
- long: mapData.records[0].fields.Longitude_Deg,
- icon: mapData.records[0].fields.Icon_Url,
- name: mapData.records[0].fields.Airport_Name,
- municipality: mapData.records[0].fields.Municipality,
- type: mapData.records[0].fields.Type,
- search: mapData.records[0].fields.Search_Field
- }
-
- switch (isOrig) {
- case true:
- this.selectedOrig = { ...thisAirport }
- break
-
- case false:
- this.selectedDest = { ...thisAirport }
- break
-
- default:
- break
- }
- }
- }
- }
- </script>
-
- <style lang="scss" scoped>
- .main-with-header {
- margin-top: clamp(20px + 1.75rem, 4rem + 1.75rem, 50px + 1.75rem);
- }
- </style>
|