|
|
- <template>
- <div class="picker-wrap">
- <v-select :options="testlist" label="slug">
- <template #option="option">
- <span>{{ option.slug }}</span>
- <span>{{ option.title }}</span>
- </template>
- </v-select>
- <v-select :options="airports" label="iata" :filter-by="filterBy" @input="setSelectedOrigin">
- <template #no-options="{ search, searching }">
- <template v-if="searching">
- No results found for <em>{{ search }}</em>.
- </template>
- <em v-else style="opacity: 0.5;">Start typing to search for an airport.</em>
- </template>
- <template #option="option">
- <div class="picker-item">
- <div class="picker-item__section">
- <div class="picker-item__iata">
- {{ option.iata }}
- </div>
- </div>
- <div class="picker-item__section">
- <div class="picker-item__name">
- {{ option.name }}
- </div>
- <div class="picker-item__muni">
- {{ option.municipality }}
- </div>
- </div>
- </div>
- </template>
- </v-select>
- </div>
- </template>
-
- <script>
- export default {
- props: {
- testlist: {
- type: [Array, Object],
- default () {
- return []
- }
- }
- },
- data () {
- return {
- mountains: [],
- airports: [],
- airportFetch_url: 'https://api.airtable.com/v0/appiQwfVZixRgRICe/Airports_IATA',
- airportFetch_filterFormula: 'AND(Is_Origin=1,{IsCurrent-AsOrigin}=\'Yes\')',
- airportFetch_fields: [
- 'Airport_IATA',
- 'Icon_Url',
- 'Latitude_Deg',
- 'Longitude_Deg',
- 'Municipality',
- 'Airport_Name',
- 'Type',
- 'Search_Field'
- ],
- airportFetch_sort: '&sort[0][field]=Airport_IATA&sort[0][direction]=asc',
- filterBy: (option, label, search) => {
- const temp = search.toLowerCase()
- return option.search.toLowerCase().includes(temp)
- },
- selectedOrigin: {},
- selectedDestination: {}
- }
- },
- async fetch () {
- let response2 = {}
- let mapData2 = {}
-
- const response = await fetch(`${this.airportFetch_url}?filterByFormula=${this.airportFetch_filterFormula}${this.airportFetch_fields_string}${this.airportFetch_sort}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- Authorization: 'Bearer keyJ2ht64ZSN57AG1'
- }
- })
-
- if (await response.offset) {
- response2 = fetch(`${this.airportFetch_url}?filterByFormula=${this.filterFormula}${this.airportFetch_fields_string}${this.airportFetch_sort}&offset=${response.offset}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- Authorization: 'Bearer keyJ2ht64ZSN57AG1'
- }
- })
- mapData2 = await response2.json()
- }
-
- const mapData = await response.json()
-
- const r1 = mapData.records
- const r2 = mapData2.records
-
- console.log(r2)
-
- // const mapDataTotal = [...r1, ...r2]
-
- const mapDataTotal = [...r1]
-
- this.airports = mapDataTotal.map((record) => {
- return {
- iata: record.fields.Airport_IATA,
- lat: record.fields.Latitude_Deg,
- long: record.fields.Longitude_Deg,
- icon: record.fields.Icon_Url,
- name: record.fields.Airport_Name,
- municipality: record.fields.Municipality,
- type: record.fields.Type,
- search: record.fields.Search_Field
- }
- })
- },
- computed: {
- airportFetch_fields_string () {
- const vm = this
- const array = vm.airportFetch_fields.map((field) => {
- return '&fields[]=' + field
- })
- return array.join('')
- }
- },
- methods: {
- setSelectedOrigin (value) {
- this.selectedOrigin = value
- this.$router.push('/go/' + value.iata)
- },
- setSelectedDestination (value) {
- this.selectedDestination = value
- this.$router.push('/go/' + this.selectedOrigin + '/' + value.iata)
- }
- }
- }
- </script>
-
- <style>
- html {
- color: black;
- }
-
- .picker-wrap {
- margin: 1rem;
- }
-
- .vs__search {
- font-size: 2rem !important;
- }
-
- .picker-item {
- padding: 0.5rem;
- display: flex;
- flex-direction: row;
- align-items: center;
- gap: 1rem;
- }
-
- .picker-item__section {
- display: flex;
- flex-direction: column;
- }
-
- .picker-item__name {
- font-size: 1rem;
- }
-
- .picker-item__muni {
- color: blue;
- }
-
- .picker-item__iata {
- font-size: 3rem;
- }
- </style>
|