@@ -1,10 +1,10 @@
11<script lang="ts">
2− import Router from 'svelte-spa-router';
3− import { link, push, replace, location, querystring } from 'svelte-spa-router'
2+ import { push, replace, location, querystring } from 'svelte-spa-router'
43 import pageName from 'stores/pageName';
54 import { SearchAnalysis } from 'lib/id';
65 import { SigilQuery } from 'lib/sigil';
7− import { linkToShip, linkToChart } from 'lib/link';
6+ import { buildQuerystring } from 'lib/utils';
7+ import { linkToShip, linkToChart, linkToSearch } from 'lib/link';
88 import SearchBar from "@/search/SearchBar.svelte";
99 import SearchResults from "@/search/SearchResults.svelte";
1010 import ShipView from '@/ShipView.svelte';
@@ -14,26 +14,30 @@
1414 export let params: any = {};
1515 let analysis: SearchAnalysis = new SearchAnalysis();
1616 let sigilQuery: SigilQuery = new SigilQuery('planet');
17− let showSigilInput: boolean = false;
18− $: searchMode = showSigilInput ? 'sigil' : 'patp';
1917 let navigating = false;
20−
21− let search: string = (new URLSearchParams($querystring)).get('search') || params.arg || '';
18+
19+ let searchParams = new URLSearchParams($querystring);
20+ function getUrlSearchMode(searchParams) {
21+ return (searchParams.get('mode') == 'sigil') ? 'sigil' : 'patp';
22+ }
23+ let searchMode: ('patp' | 'sigil') = getUrlSearchMode(searchParams);
24+ let search: string = searchParams.get('search') || params.arg || '';
25+ let patp: string = undefined;
2226 let urlSearch = search;
23− // let urlChanged;
24− let urlChangedSinceAnalysisPatp = false;
27+ let urlSearchMode = searchMode;
28+ let urlChangedSinceShipQuery = false;
2529 $: {
26− const potentialUrlSearch = (new URLSearchParams($querystring)).get('search') || params.arg || '';
30+ const searchParams = new URLSearchParams($querystring);
31+ const potentialUrlSearch = searchParams.get('search') || params.arg || '';
2732 if (($location + $querystring).includes(potentialUrlSearch)) {
2833 urlSearch = potentialUrlSearch;
29− // urlChanged = Date.now();
30− urlChangedSinceAnalysisPatp = true;
34+ urlSearchMode = getUrlSearchMode(searchParams);
35+ urlChangedSinceShipQuery = true;
3136 navigating = false;
3237 }
3338 }
3439 $: {
35− // analysisPatpChanged = (analysis.patp || true) && Date.now();
36− urlChangedSinceAnalysisPatp = (analysis.patp || true) && false;
40+ urlChangedSinceShipQuery = (search || true) && searchMode && false;
3741 }
3842 function nav(path, addToHistory = false) {
3943 (addToHistory ? push : replace)(path);
@@ -41,24 +45,28 @@
4145 function navHome(addToHistory = false) {
4246 params.mode = null;
4347 params.arg = null;
44− nav('/', addToHistory);
48+ if (searchMode == 'patp') {
49+ nav('/', addToHistory);
50+ } else {
51+ nav('/' + buildQuerystring({ mode: searchMode }), addToHistory);
52+ }
4553 }
4654 function navToShipView(addToHistory = false) {
4755 params.mode = 'ship';
48− params.arg = analysis.patp;
49− if (analysis.patp === search) {
50− nav(linkToShip(analysis.patp), addToHistory);
56+ params.arg = patp;
57+ if (patp === search) {
58+ nav(linkToShip(patp), addToHistory);
5159 } else {
52− nav(linkToShip(analysis.patp, { search }), addToHistory);
60+ nav(linkToShip(patp, { search, mode: searchMode }), addToHistory);
5361 }
5462 }
5563 function navToSearch(addToHistory = false) {
5664 if (!search) {
5765 navHome(addToHistory);
58− } else if (analysis.queryIsValid) {
66+ } else {
5967 params.mode = 'search';
6068 params.arg = search;
61− nav(`/search/${search}`, addToHistory);
69+ nav(linkToSearch(search, { mode: searchMode }), addToHistory);
6270 }
6371 }
6472 function navToChart(addToHistory = true) {
@@ -79,26 +87,27 @@
7987 navHome(addToHistory);
8088 }
8189 }
82− // $: urlChangedSinceAnalysisPatp = (urlChanged - analysisPatpChanged) > 1000;
8390 function autoNav() {
84− if (search !== urlSearch) {
85− if (urlChangedSinceAnalysisPatp) {
91+ if ((search !== urlSearch || searchMode !== urlSearchMode)) {
92+ if (urlChangedSinceShipQuery) {
8693 search = urlSearch;
87− } else if (analysis.search === search) {
94+ searchMode = urlSearchMode;
95+ } else {
8896 navigating = true;
8997 if (params.mode === 'chart') {
9098 navToChart(analysis.patpIsValid);
9199 } else {
92− if (analysis.patpIsValid) {
100+ if (patp) {
93101 navToShipView(true);
94102 } else {
95− navToSearch(params.mode === 'ship');
103+ const fromShipMode = params.mode === 'ship';
104+ navToSearch(fromShipMode);
96105 }
97106 }
98107 }
99108 }
100109 }
101− $: urlSearch, analysis, autoNav();
110+ $: urlSearch, urlSearchMode, search, searchMode, autoNav();
102111 $: {
103112 let properMode = params.mode;
104113 if (properMode === 'chart') {
@@ -140,19 +149,31 @@
140149</script>
141150
142151<div class="p-4 space-y-4 min-h-full flex flex-col items-center 2xs:p-8 2xs:space-y-8">
143− <SearchBar bind:analysis bind:sigilQuery bind:search bind:showSigilInput {placeholderText} />
144− <!-- <p class="bg-white">navigating</p> -->
152+ <SearchBar bind:analysis bind:sigilQuery bind:search bind:searchMode bind:patp {placeholderText} />
153+ <!-- <div class="bg-white">
154+ <p>
155+ Search: {search}
156+ </p>
157+ <p>
158+ URL Search: {urlSearch}
159+ </p>
160+ <p>
161+ Search mode: {searchMode}
162+ </p>
163+ <p>
164+ Patp: {patp}
165+ </p>
166+ </div> -->
145167 {#if params.mode == "chart"}
146− <StarChart patp={analysis.patpIsValid ? analysis.patp : null} />
147− {:else if analysis.patpIsValid}
148− <ShipView patp={analysis.patp} />
149− {:else if (searchMode === 'patp' && analysis.queryIsValid) || (searchMode == 'sigil' && sigilQuery.isWorthSearching)}
168+ <StarChart patp={patp || null} />
169+ {:else if patp}
170+ <ShipView {patp} />
171+ {:else if (searchMode === 'patp' && analysis.queryIsValid) || (searchMode === 'sigil' && sigilQuery.isWorthSearching)}
150172 <SearchResults regexQuery={analysis.query} sigilQuery={sigilQuery}
151173 patpSearch={analysis.search} {searchMode} />
152− {:else if (analysis.search.length > 0)}
174+ {:else if (analysis.search.length > 0 && analysis.queryProblems.length > 0)}
153175 <ValidationProblems problems={analysis.queryProblems} />
154176 {:else}
155177 <HomeScreenTiles />
156178 {/if}
157− <!-- {/if} -->
158179</div>