From e04f66a832c3a9cadf5b07eb9ad9b995eaf83a09 Mon Sep 17 00:00:00 2001 From: Johan Ohly Date: Tue, 1 Oct 2024 15:59:40 +0200 Subject: [PATCH] feat: flight info lookup --- .../form-fields/AirlineField.svelte | 13 +++ .../form-fields/AirportField.svelte | 19 +++- .../modals/add-flight/AddFlightModal.svelte | 2 + .../add-flight/FlightInformation.svelte | 87 ++++++++----------- .../modals/add-flight/FlightNumber.svelte | 74 ++++++++++++++++ .../modals/edit-flight/EditFlightModal.svelte | 9 +- 6 files changed, 153 insertions(+), 51 deletions(-) create mode 100644 src/lib/components/modals/add-flight/FlightNumber.svelte diff --git a/src/lib/components/form-fields/AirlineField.svelte b/src/lib/components/form-fields/AirlineField.svelte index 7a65afb..b1373b0 100644 --- a/src/lib/components/form-fields/AirlineField.svelte +++ b/src/lib/components/form-fields/AirlineField.svelte @@ -38,6 +38,19 @@ $formData.airline = item?.value ?? null; }); + // If the field is updated externally, update the selected value + formData.subscribe((data) => { + if (data['airline'] === $selected?.value) return; + selected.set( + data['airline'] + ? { + label: airlineFromICAO(data['airline'])?.name, + value: data['airline'], + } + : undefined, + ); + }); + $effect(() => { if (!$open) { $inputValue = $selected?.label ?? ''; diff --git a/src/lib/components/form-fields/AirportField.svelte b/src/lib/components/form-fields/AirportField.svelte index fc88f74..2531125 100644 --- a/src/lib/components/form-fields/AirportField.svelte +++ b/src/lib/components/form-fields/AirportField.svelte @@ -9,7 +9,11 @@ import { z } from 'zod'; import type { flightSchema } from '$lib/zod/flight'; import { writable } from 'svelte/store'; - import { type Airport, airportFromICAO, airportSearchCache } from '$lib/utils/data/airports'; + import { + type Airport, + airportFromICAO, + airportSearchCache, + } from '$lib/utils/data/airports'; let { field, @@ -42,6 +46,19 @@ } }); + // If the field is updated externally, update the selected value + formData.subscribe((data) => { + if (data[field] === $selected?.value) return; + selected.set( + data[field] + ? { + label: airportFromICAO(data[field])?.name, + value: data[field], + } + : undefined, + ); + }); + $effect(() => { if (!$open) { $inputValue = $selected?.label ?? ''; diff --git a/src/lib/components/modals/add-flight/AddFlightModal.svelte b/src/lib/components/modals/add-flight/AddFlightModal.svelte index 8e80c98..5737919 100644 --- a/src/lib/components/modals/add-flight/AddFlightModal.svelte +++ b/src/lib/components/modals/add-flight/AddFlightModal.svelte @@ -9,6 +9,7 @@ import FlightInformation from './FlightInformation.svelte'; import SeatInformation from './SeatInformation.svelte'; import { page } from '$app/stores'; + import FlightNumber from '$lib/components/modals/add-flight/FlightNumber.svelte'; let { open = $bindable(), @@ -49,6 +50,7 @@ >

Add Flight

+ diff --git a/src/lib/components/modals/add-flight/FlightInformation.svelte b/src/lib/components/modals/add-flight/FlightInformation.svelte index 59475d1..fde19e1 100644 --- a/src/lib/components/modals/add-flight/FlightInformation.svelte +++ b/src/lib/components/modals/add-flight/FlightInformation.svelte @@ -21,55 +21,9 @@

Flight Information

- - -
- - - Flight Reason - { - if (value) { - if (value.value === $formData.flightReason) { - $formData.flightReason = null; - } else { - $formData.flightReason = value.value; - } - } - }} - > - - - - - - - - - - - - - - - - - Flight Number - - - - - +
+ + Aircraft Registration @@ -77,6 +31,41 @@
+ + + + Flight Reason + { + if (value) { + if (value.value === $formData.flightReason) { + $formData.flightReason = null; + } else { + $formData.flightReason = value.value; + } + } + }} + > + + + + + + + + + + + + + + Notes diff --git a/src/lib/components/modals/add-flight/FlightNumber.svelte b/src/lib/components/modals/add-flight/FlightNumber.svelte new file mode 100644 index 0000000..6a01822 --- /dev/null +++ b/src/lib/components/modals/add-flight/FlightNumber.svelte @@ -0,0 +1,74 @@ + + + + + Flight Number +
+ + +
+
+
diff --git a/src/lib/components/modals/edit-flight/EditFlightModal.svelte b/src/lib/components/modals/edit-flight/EditFlightModal.svelte index 186653c..19c19ba 100644 --- a/src/lib/components/modals/edit-flight/EditFlightModal.svelte +++ b/src/lib/components/modals/edit-flight/EditFlightModal.svelte @@ -13,6 +13,7 @@ import SeatInformation from '$lib/components/modals/add-flight/SeatInformation.svelte'; import FlightInformation from '$lib/components/modals/add-flight/FlightInformation.svelte'; import { toISOString } from '$lib/utils/index.js'; + import FlightNumber from '$lib/components/modals/add-flight/FlightNumber.svelte'; const timeFormatter = new Intl.DateTimeFormat(undefined, { timeZone: 'UTC', @@ -75,7 +76,13 @@

Edit Flight

- + +