ctucx.git: trainsearch

web based trip-planner, fork of https://cyberchaos.dev/yuka/trainsearch

commit 57e7da9c0e7274dc2b5a2919ef8a3c4d9598ccfa
parent e70c746f4cbf6d48cb5f3eab4012f5235080476a
Author: Yureka <yuka@yuka.dev>
Date: Sat, 10 Sep 2022 15:43:46 +0200

redirect to search page on errors
4 files changed, 41 insertions(+), 26 deletions(-)
M
src/app_functions.js
|
1
+
M
src/journeyView.js
|
6
++++--
M
src/journeysView.js
|
8
+++++++-
M
src/overlays.js
|
52
+++++++++++++++++++++++++++++-----------------------
diff --git a/src/app_functions.js b/src/app_functions.js
@@ -84,6 +84,7 @@ const processJourney = journey => {
 
 export const getJourneys = async slug => {
 	let data = await db.getJourneysOverview(slug);
+	if (!data) return null;
 	return {
 		...data,
 		journeys: await Promise.all(data.journeys.map(x => getJourney(x, data.profile))),
diff --git a/src/journeyView.js b/src/journeyView.js
@@ -194,8 +194,10 @@ export const journeyView = async (match, isUpdate) => {
 		refreshToken = decodeURIComponent(match[1]);
 		data = await getJourney(refreshToken, profile);
 	} catch(e) {
-		showAlertModal(e.toString());
-		throw e;
+		console.error(e);
+		await showAlertModal(e.toString());
+		go('/');
+		return;
 	}
 	hideOverlay();
 
diff --git a/src/journeysView.js b/src/journeysView.js
@@ -136,9 +136,15 @@ export const journeysView = async (match, isUpdate) => {
 	try {
 		data = await getJourneys(slug);
 	} catch(e) {
-		showAlertModal(e.toString());
+		await showAlertModal(e.toString());
+		go('/');
 		throw e;
 	}
+	if (!data) {
+		await showAlertModal(html`journeys overview id invalid. <br />journeys overview links can not be shared across devices in TrainSearch :(`);
+		go('/');
+		return;
+	}
 	hideOverlay();
 
 	render(journeysTemplate(data), ElementById('content'));
diff --git a/src/overlays.js b/src/overlays.js
@@ -3,41 +3,47 @@ import { html, render } from 'lit-html';
 
 export const showAlertModal = (text) => {
 	showDiv('overlay');
-	render(html`
-		<div class="modal">
-			<div class="box alert">
-				${text}
-				<div class="button" @click=${hideOverlay}>OK</div>
+	return new Promise(resolve => {
+		render(html`
+			<div class="modal">
+				<div class="box alert">
+					${text}
+					<div class="button" @click=${() => { hideOverlay(); resolve(); }}>OK</div>
+				</div>
 			</div>
-		</div>
-	`, ElementById('overlay'));
+		`, ElementById('overlay'));
+	});
 };
 
 export const showSelectModal = (content) => {
 	showDiv('overlay');
-	render(html`
-		<div class="modal">
-			<div class="box select">
-				${content}
-				<a @click=${hideOverlay}>Close</a>
+	return new Promise(resolve => {
+		render(html`
+			<div class="modal">
+				<div class="box select">
+					${content}
+					<a @click=${() => { hideOverlay(); resolve(); }}>Close</a>
+				</div>
 			</div>
-		</div>
-	`, ElementById('overlay'));
+		`, ElementById('overlay'));
+	});
 };
 
 export const showModal = (title, content) => {
 	showDiv('overlay');
-	render(html`
-		<div class="modal-dialog">
-			<div id="modal-content" class="modal-content">
-				<div class="modal-header">
-					<div class="modal-close" @click=${() => hideDiv('overlay')}></div>
-					<h4 class="modal-title">${title}</h4>
+	return new Promise(resolve => {
+		render(html`
+			<div class="modal-dialog">
+				<div id="modal-content" class="modal-content">
+					<div class="modal-header">
+						<div class="modal-close" @click=${() => { hideOverlay(); resolve(); }}></div>
+						<h4 class="modal-title">${title}</h4>
+					</div>
+					<div class="modal-body">${content}</div>
 				</div>
-				<div class="modal-body">${content}</div>
 			</div>
-		</div>
-	`, ElementById('overlay'));
+		`, ElementById('overlay'));
+	});
 };
 
 export const showLoader = () => {