v1 Release

This commit is contained in:
2026-07-11 18:44:40 +10:00
parent 85eeba982f
commit 5ac580bb06
15 changed files with 171 additions and 72 deletions
@@ -148,11 +148,10 @@ const copied = ref(false)
to places you might never have otherwise considered.
</p>
<p>
Most letters are possible to visit somewhat organically if you fly enough, but some will be difficult. <b>Q</b> is probably the most difficult letter to obtain -
there's no rules against having a code starting with Q, but due to many aviation terms starting with Q (such as QNH), very few airports use it.
Most letters are possible to visit somewhat organically if you fly enough, but some will be difficult. Based on our airport database, it is actually possible to obtain every letter except <b>V</b> without leaving China.
</p>
<p>
Based on our airport database, it is actually possible to obtain every letter except <b>V</b> without leaving China.
<b>Q</b> is probably the most difficult letter to obtain - there's no rules against having a code starting with Q, but due to many aviation terms starting with Q (such as QNH), very few airports use it.
</p>
<p>
At time of writing, there are just 2 major airports that have daily scheduled service by major airlines, and 4 airports with any commercial service at all.
@@ -162,7 +161,7 @@ const copied = ref(false)
<li><b>QRO</b> in Mexico - a fantastic place to visit and with flights from around Mexico and the US.</li>
<li><b>QSZ</b> in China is also a very interesting place to visit and is served well from Urumqi and Xi'an.</li>
<li><b>QBC</b> is a small airport in Canada and has daily runs on commuter aircraft from Vancouver.</li>
<li><b>QSR</b> is probably most promising recently - it did not have commercial service for 10 years and is having good growth now with European low cost carriers.</li>
<li><b>QSR</b> in Italy is probably most promising recently - it did not have commercial service for 10 years and is having good growth now with European low cost carriers.</li>
</ul>
<p>
Other potential candidates do not seem so promising
+2 -3
View File
@@ -22,7 +22,6 @@ const props = defineProps<{
followStatus: string
canEdit: boolean
canView: boolean
otherUsersOnFlight: string[]
}>()
</script>
@@ -44,11 +43,11 @@ const props = defineProps<{
<RoutePanel :flight="flight" />
<Panel label="Flight Details">
<BoardingPass :user="user" :showToolTips="false" style="width:100%;max-width:600px; margin:0 auto" :flight="flight" :canEdit="canEdit" />
<DetailRows v-if="otherUsersOnFlight.length > 0">
<DetailRows v-if="flight.other_users_on_flight.length > 0">
<PanelLabel>Other Users On This Flight</PanelLabel>
<div class="d-flex flex-wrap ga-2">
<v-chip
v-for="userName in otherUsersOnFlight"
v-for="userName in flight.other_users_on_flight"
:key="userName"
:href="route('profile.view', userName)"
color="primary"
+9 -1
View File
@@ -57,6 +57,7 @@ const selectedSeatTypes = ref<number[]>([])
const selectedManufacturers = ref<string[]>([])
const selectedAircraftModels = ref<number[]>([])
const selectedAirportRegions = ref<number[]>([])
const selectedOtherUsers = ref<string[]>([])
const activeFilterCount = computed(() =>
selectedYears.value.length +
@@ -73,7 +74,8 @@ const activeFilterCount = computed(() =>
selectedSeatTypes.value.length +
selectedManufacturers.value.length +
selectedAircraftModels.value.length +
selectedAirportRegions.value.length
selectedAirportRegions.value.length +
selectedOtherUsers.value.length
)
function onFiltersChange(filters: {
@@ -92,6 +94,7 @@ function onFiltersChange(filters: {
manufacturers: string[]
aircraftModels: number[]
airportRegions: number[]
otherUsers: string[]
}) {
localSelectedFlightId.value = null
selectedYears.value = filters.years
@@ -109,6 +112,7 @@ function onFiltersChange(filters: {
selectedManufacturers.value = filters.manufacturers
selectedAircraftModels.value = filters.aircraftModels
selectedAirportRegions.value = filters.airportRegions
selectedOtherUsers.value = filters.otherUsers
}
// ── Filtering ─────────────────────────────────────────────────────────────────
@@ -143,6 +147,10 @@ function matchesFilters(f: Flight): boolean {
if (!selectedAirportRegions.value.includes(depRegion ?? -1) &&
!selectedAirportRegions.value.includes(arrRegion ?? -1)) return false
}
if (selectedOtherUsers.value.length) {
const names = f.other_users_on_flight ?? []
if (!selectedOtherUsers.value.some(name => names.includes(name))) return false
}
return true
}