@@ -1,5 +1,6 @@
11<script lang="ts">
2− import { link, push, replace, querystring } from 'svelte-spa-router'
2+ import Router from 'svelte-spa-router';
3+ import { link, push, replace, location, querystring } from 'svelte-spa-router'
34 import pageName from '../stores/pageName';
45 import { SearchAnalysis } from '../lib/id';
56 import { linkToShip } from '../lib/link';
@@ -10,41 +11,107 @@
1011 import HomeScreenTiles from '../components/HomeScreenTiles.svelte';
1112 export let params: any = {};
1213 let analysis: SearchAnalysis = new SearchAnalysis();
14+ let navigating = false;
1315
14− $: querySearch = (new URLSearchParams($querystring)).get('search');
15− function getSearch() {
16− return querySearch || params.search || params.patp || '';
16+ let search: string = (new URLSearchParams($querystring)).get('search') || params.arg || '';
17+ let urlSearch = search;
18+ // let urlChanged;
19+ let urlChangedSinceAnalysisPatp = false;
20+ $: {
21+ const potentialUrlSearch = (new URLSearchParams($querystring)).get('search') || params.arg || '';
22+ if (($location + $querystring).includes(potentialUrlSearch)) {
23+ urlSearch = potentialUrlSearch;
24+ // urlChanged = Date.now();
25+ urlChangedSinceAnalysisPatp = true;
26+ navigating = false;
27+ }
1728 }
18− $: urlSearch = querySearch || params.search || params.patp || '';
19− let search: string = getSearch();
20− $: urlChanged = (urlSearch || true) && Date.now();
21− $: analysisPatpChanged = (analysis.patp || true) && Date.now();
22− $: urlChangedSinceAnalysisPatp = (urlChanged - analysisPatpChanged) > 1000;
2329 $: {
30+ // analysisPatpChanged = (analysis.patp || true) && Date.now();
31+ urlChangedSinceAnalysisPatp = (analysis.patp || true) && false;
32+ }
33+ function nav(path, addToHistory = false) {
34+ (addToHistory ? push : replace)(path);
35+ }
36+ function navHome(addToHistory = false) {
37+ params.mode = null;
38+ params.arg = null;
39+ nav('/', addToHistory);
40+ }
41+ function navToShipView(addToHistory = false) {
42+ params.mode = 'ship';
43+ params.arg = analysis.patp;
44+ if (analysis.patp === search) {
45+ nav(linkToShip(analysis.patp), addToHistory);
46+ } else {
47+ nav(linkToShip(analysis.patp, { search }), addToHistory);
48+ }
49+ }
50+ function navToSearch(addToHistory = false) {
51+ if (!search) {
52+ navHome(addToHistory);
53+ } else if (analysis.queryIsValid) {
54+ params.mode = 'search';
55+ params.arg = search;
56+ nav(`/search/${search}`, addToHistory);
57+ }
58+ }
59+
60+ function navToMode(mode, addToHistory = false) {
61+ switch (mode) {
62+ case 'ship':
63+ navToShipView(addToHistory);
64+ break;
65+ case 'search':
66+ navToSearch(addToHistory);
67+ break;
68+ default:
69+ navHome(addToHistory);
70+ }
71+ }
72+ // $: urlChangedSinceAnalysisPatp = (urlChanged - analysisPatpChanged) > 1000;
73+ function doStuff() {
2474 if (search !== urlSearch) {
2575 if (urlChangedSinceAnalysisPatp) {
2676 search = urlSearch;
2777 } else if (analysis.search === search) {
78+ navigating = true;
2879 if (analysis.patpIsValid) {
29− if (analysis.patp === search) {
30− push(linkToShip(analysis.patp));
31− } else {
32− push(linkToShip(analysis.patp, { search }));
33− }
80+ navToShipView(true);
3481 } else {
35− const nav = params.patp !== undefined ? push : replace;
36− if (!search) {
37− nav('/');
38− } else if (analysis.queryIsValid) {
39− nav(`/search/${search}`);
40− }
82+ navToSearch(params.mode === 'ship');
4183 }
4284 }
4385 }
4486 }
87+ $: urlSearch, analysis, doStuff();
88+ $: {
89+ if (analysis.search === search) {
90+ let properMode = null;
91+ if (analysis.patpIsValid) {
92+ properMode = 'ship';
93+ } else if (analysis.search.length > 0) {
94+ properMode = 'search';
95+ }
96+ if (params.mode !== properMode) {
97+ navToMode(properMode, false);
98+ }
99+ }
100+ }
45101
46102 $: {
47− $pageName = params.patp !== undefined ? params.patp : (search ? 'Search' : null);
103+ if (analysis.search === urlSearch) {
104+ switch (params.mode) {
105+ case 'ship':
106+ $pageName = params.arg;
107+ break;
108+ case 'search':
109+ $pageName = 'Search';
110+ break;
111+ default:
112+ $pageName = null;
113+ }
114+ }
48115 }
49116
50117
@@ -52,13 +119,17 @@
52119
53120<div class="m-4 flex flex-col items-center space-y-8 2xs:m-8">
54121 <SearchBar bind:analysis bind:search />
122+ <!-- <p class="bg-white">navigating</p> -->
55123 {#if analysis.patpIsValid}
56− <ShipView patp={analysis.patp} />
57− {:else if (analysis.queryIsValid)}
58− <SearchResults query={analysis.query} search={analysis.search} />
59− {:else if (analysis.search.length > 0)}
60− <ValidationProblems problems={analysis.queryProblems} />
61− {:else}
62− <HomeScreenTiles />
63− {/if}
124+ <!-- {#if analysis.search === urlSearch} -->
125+ <ShipView patp={analysis.patp} />
126+ <!-- {/if} -->
127+ {:else if (analysis.queryIsValid)}
128+ <SearchResults query={analysis.query} search={analysis.search} />
129+ {:else if (analysis.search.length > 0)}
130+ <ValidationProblems problems={analysis.queryProblems} />
131+ {:else}
132+ <HomeScreenTiles />
133+ {/if}
134+ <!-- {/if} -->
64135</div>