+
+
+
{transportation.name}
+
+ {$t(`transportation.modes.${transportation.type}`)}
+
+
+
+
+
{#if transportation.from_location}
-
{transportation.from_location}
+
+
{$t('adventures.from')}:
+
{transportation.from_location}
+
{/if}
{#if transportation.to_location}
-
-
{transportation.to_location}
- {/if}
-
-
- {#if transportation.date}
-
{new Date(transportation.date).toLocaleString(undefined, { timeZone: 'UTC' })}
- {/if}
- {#if transportation.end_date}
-
-
{new Date(transportation.end_date).toLocaleString(undefined, { timeZone: 'UTC' })}
+
+
+
{$t('adventures.to')}:
+
+
{transportation.to_location}
+
{/if}
+
+
+ {#if transportation.date}
+
+
{$t('adventures.start')}:
+
{new Date(transportation.date).toLocaleString(undefined, { timeZone: 'UTC' })}
+
+ {/if}
+ {#if transportation.end_date}
+
+
{$t('adventures.end')}:
+
{new Date(transportation.end_date).toLocaleString(undefined, { timeZone: 'UTC' })}
+
+ {/if}
+
+
+
{#if transportation.user_id == user?.uuid || (collection && user && collection.shared_with.includes(user.uuid))}
-
-
+
{/if}
diff --git a/frontend/src/lib/components/TransportationModal.svelte b/frontend/src/lib/components/TransportationModal.svelte
new file mode 100644
index 0000000..41515e1
--- /dev/null
+++ b/frontend/src/lib/components/TransportationModal.svelte
@@ -0,0 +1,562 @@
+
+
+
diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts
index 181017b..aadf545 100644
--- a/frontend/src/lib/types.ts
+++ b/frontend/src/lib/types.ts
@@ -127,8 +127,12 @@ export type Transportation = {
flight_number: string | null;
from_location: string | null;
to_location: string | null;
+ origin_latitude: number | null;
+ origin_longitude: number | null;
+ destination_latitude: number | null;
+ destination_longitude: number | null;
is_public: boolean;
- collection: Collection | null;
+ collection: Collection | null | string;
created_at: string; // ISO 8601 date string
updated_at: string; // ISO 8601 date string
};
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 54dc04f..5e46cc0 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -216,8 +216,18 @@
"copy_failed": "Copy failed",
"show": "Show",
"hide": "Hide",
+ "clear_location": "Clear Location",
+ "starting_airport": "Starting Airport",
+ "ending_airport": "Ending Airport",
+ "no_location_found": "No location found",
+ "from": "From",
+ "to": "To",
+ "start": "Start",
+ "end": "End",
"emoji_picker": "Emoji Picker",
"download_calendar": "Download Calendar",
+ "date_information": "Date Information",
+ "flight_information": "Flight Information",
"preview": "Preview",
"md_instructions": "Write your markdown here...",
"days": "days",
diff --git a/frontend/src/routes/collections/[id]/+page.svelte b/frontend/src/routes/collections/[id]/+page.svelte
index 10bc85b..c0da75c 100644
--- a/frontend/src/routes/collections/[id]/+page.svelte
+++ b/frontend/src/routes/collections/[id]/+page.svelte
@@ -12,8 +12,6 @@
import NotFound from '$lib/components/NotFound.svelte';
import { DefaultMarker, MapLibre, Popup } from 'svelte-maplibre';
import TransportationCard from '$lib/components/TransportationCard.svelte';
- import EditTransportation from '$lib/components/EditTransportation.svelte';
- import NewTransportation from '$lib/components/NewTransportation.svelte';
import NoteCard from '$lib/components/NoteCard.svelte';
import NoteModal from '$lib/components/NoteModal.svelte';
@@ -26,6 +24,7 @@
import ChecklistCard from '$lib/components/ChecklistCard.svelte';
import ChecklistModal from '$lib/components/ChecklistModal.svelte';
import AdventureModal from '$lib/components/AdventureModal.svelte';
+ import TransportationModal from '$lib/components/TransportationModal.svelte';
export let data: PageData;
console.log(data);
@@ -108,9 +107,8 @@
}
let adventureToEdit: Adventure | null = null;
- let transportationToEdit: Transportation;
+ let transportationToEdit: Transportation | null = null;
let isAdventureModalOpen: boolean = false;
- let isTransportationEditModalOpen: boolean = false;
let isNoteModalOpen: boolean = false;
let noteToEdit: Note | null;
let checklistToEdit: Checklist | null;
@@ -122,17 +120,12 @@
isAdventureModalOpen = true;
}
- function saveNewTransportation(event: CustomEvent
) {
- transportations = transportations.map((transportation) => {
- if (transportation.id === event.detail.id) {
- return event.detail;
- }
- return transportation;
- });
- isTransportationEditModalOpen = false;
+ function editTransportation(event: CustomEvent) {
+ transportationToEdit = event.detail;
+ isShowingTransportationModal = true;
}
- function saveOrCreate(event: CustomEvent) {
+ function saveOrCreateAdventure(event: CustomEvent) {
if (adventures.find((adventure) => adventure.id === event.detail.id)) {
adventures = adventures.map((adventure) => {
if (adventure.id === event.detail.id) {
@@ -145,6 +138,22 @@
}
isAdventureModalOpen = false;
}
+
+ function saveOrCreateTransportation(event: CustomEvent) {
+ if (transportations.find((transportation) => transportation.id === event.detail.id)) {
+ // Update existing transportation
+ transportations = transportations.map((transportation) => {
+ if (transportation.id === event.detail.id) {
+ return event.detail;
+ }
+ return transportation;
+ });
+ } else {
+ // Create new transportation
+ transportations = [event.detail, ...transportations];
+ }
+ isShowingTransportationModal = false;
+ }
{#if isShowingLinkModal}
@@ -157,13 +166,12 @@
/>
{/if}
-{#if isTransportationEditModalOpen}
- (isTransportationEditModalOpen = false)}
- on:saveEdit={saveNewTransportation}
- startDate={collection.start_date}
- endDate={collection.end_date}
+ on:close={() => (isShowingTransportationModal = false)}
+ on:save={saveOrCreateTransportation}
+ {collection}
/>
{/if}
@@ -171,7 +179,7 @@
(isAdventureModalOpen = false)}
- on:save={saveOrCreate}
+ on:save={saveOrCreateAdventure}
{collection}
/>
{/if}
@@ -221,19 +229,6 @@
/>
{/if}
-{#if isShowingTransportationModal}
- (isShowingTransportationModal = false)}
- on:add={(event) => {
- transportations = [event.detail, ...transportations];
- isShowingTransportationModal = false;
- }}
- {collection}
- startDate={collection.start_date}
- endDate={collection.end_date}
- />
-{/if}
-
{#if notFound}
{
+ // Reset the transportation object for creating a new one
+ transportationToEdit = null;
isShowingTransportationModal = true;
newType = '';
}}
@@ -415,10 +412,7 @@
on:delete={(event) => {
transportations = transportations.filter((t) => t.id != event.detail);
}}
- on:edit={(event) => {
- transportationToEdit = event.detail;
- isTransportationEditModalOpen = true;
- }}
+ on:edit={editTransportation}
{collection}
/>
{/each}
@@ -534,7 +528,7 @@
}}
on:edit={(event) => {
transportationToEdit = event.detail;
- isTransportationEditModalOpen = true;
+ isShowingTransportationModal = true;
}}
/>
{/each}
diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte
index 2ad898b..0c0b10a 100644
--- a/frontend/src/routes/settings/+page.svelte
+++ b/frontend/src/routes/settings/+page.svelte
@@ -7,6 +7,7 @@
import { browser } from '$app/environment';
import { t } from 'svelte-i18n';
import TotpModal from '$lib/components/TOTPModal.svelte';
+ import { appTitle, appVersion } from '$lib/config.js';
export let data;
let user: User;
@@ -154,195 +155,220 @@
/>
{/if}
-
-
-
-