@@ -1,10 +1,10 @@
1<script lang="ts">
1<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'
4 import pageName from 'stores/pageName';
3 import pageName from 'stores/pageName';
5 import { SearchAnalysis } from 'lib/id';
4 import { SearchAnalysis } from 'lib/id';
6 import { SigilQuery } from 'lib/sigil';
5 import { SigilQuery } from 'lib/sigil';
6+ import { buildQuerystring } from 'lib/utils';
7− import { linkToShip, linkToChart } from 'lib/link';
7+ import { linkToShip, linkToChart, linkToSearch } from 'lib/link';
8 import SearchBar from "@/search/SearchBar.svelte";
8 import SearchBar from "@/search/SearchBar.svelte";
9 import SearchResults from "@/search/SearchResults.svelte";
9 import SearchResults from "@/search/SearchResults.svelte";
10 import ShipView from '@/ShipView.svelte';
10 import ShipView from '@/ShipView.svelte';
@@ -14,26 +14,30 @@
14 export let params: any = {};
14 export let params: any = {};
15 let analysis: SearchAnalysis = new SearchAnalysis();
15 let analysis: SearchAnalysis = new SearchAnalysis();
16 let sigilQuery: SigilQuery = new SigilQuery('planet');
16 let sigilQuery: SigilQuery = new SigilQuery('planet');
17− let showSigilInput: boolean = false;
18− $: searchMode = showSigilInput ? 'sigil' : 'patp';
19 let navigating = false;
17 let navigating = false;
21− let search: string = (new URLSearchParams($querystring)).get('search') || params.arg || '';
19+ let searchParams = new URLSearchParams($querystring);
20+ function getUrlSearchMode(searchParams) {
21+ return (searchParams.get('mode') == 'sigil') ? 'sigil' : 'patp';
23+ let searchMode: ('patp' | 'sigil') = getUrlSearchMode(searchParams);
24+ let search: string = searchParams.get('search') || params.arg || '';
25+ let patp: string = undefined;
22 let urlSearch = search;
26 let urlSearch = search;
23− // let urlChanged;
27+ let urlSearchMode = searchMode;
24− let urlChangedSinceAnalysisPatp = false;
28+ let urlChangedSinceShipQuery = false;
26− const potentialUrlSearch = (new URLSearchParams($querystring)).get('search') || params.arg || '';
30+ const searchParams = new URLSearchParams($querystring);
31+ const potentialUrlSearch = searchParams.get('search') || params.arg || '';
27 if (($location + $querystring).includes(potentialUrlSearch)) {
32 if (($location + $querystring).includes(potentialUrlSearch)) {
28 urlSearch = potentialUrlSearch;
33 urlSearch = potentialUrlSearch;
29− // urlChanged = Date.now();
34+ urlSearchMode = getUrlSearchMode(searchParams);
30− urlChangedSinceAnalysisPatp = true;
35+ urlChangedSinceShipQuery = true;
31 navigating = false;
36 navigating = false;
35− // analysisPatpChanged = (analysis.patp || true) && Date.now();
40+ urlChangedSinceShipQuery = (search || true) && searchMode && false;
36− urlChangedSinceAnalysisPatp = (analysis.patp || true) && false;
38 function nav(path, addToHistory = false) {
42 function nav(path, addToHistory = false) {
39 (addToHistory ? push : replace)(path);
43 (addToHistory ? push : replace)(path);
@@ -41,24 +45,28 @@
41 function navHome(addToHistory = false) {
45 function navHome(addToHistory = false) {
42 params.mode = null;
46 params.mode = null;
43 params.arg = null;
47 params.arg = null;
48+ if (searchMode == 'patp') {
44− nav('/', addToHistory);
49+ nav('/', addToHistory);
51+ nav('/' + buildQuerystring({ mode: searchMode }), addToHistory);
46 function navToShipView(addToHistory = false) {
54 function navToShipView(addToHistory = false) {
47 params.mode = 'ship';
55 params.mode = 'ship';
48− params.arg = analysis.patp;
56+ params.arg = patp;
49− if (analysis.patp === search) {
57+ if (patp === search) {
50− nav(linkToShip(analysis.patp), addToHistory);
58+ nav(linkToShip(patp), addToHistory);
52− nav(linkToShip(analysis.patp, { search }), addToHistory);
60+ nav(linkToShip(patp, { search, mode: searchMode }), addToHistory);
55 function navToSearch(addToHistory = false) {
63 function navToSearch(addToHistory = false) {
56 if (!search) {
64 if (!search) {
57 navHome(addToHistory);
65 navHome(addToHistory);
58− } else if (analysis.queryIsValid) {
66+ } else {
59 params.mode = 'search';
67 params.mode = 'search';
60 params.arg = search;
68 params.arg = search;
61− nav(`/search/${search}`, addToHistory);
69+ nav(linkToSearch(search, { mode: searchMode }), addToHistory);
64 function navToChart(addToHistory = true) {
72 function navToChart(addToHistory = true) {
@@ -79,26 +87,27 @@
79 navHome(addToHistory);
87 navHome(addToHistory);
82− // $: urlChangedSinceAnalysisPatp = (urlChanged - analysisPatpChanged) > 1000;
83 function autoNav() {
90 function autoNav() {
84− if (search !== urlSearch) {
91+ if ((search !== urlSearch || searchMode !== urlSearchMode)) {
85− if (urlChangedSinceAnalysisPatp) {
92+ if (urlChangedSinceShipQuery) {
86 search = urlSearch;
93 search = urlSearch;
87− } else if (analysis.search === search) {
94+ searchMode = urlSearchMode;
88 navigating = true;
96 navigating = true;
89 if (params.mode === 'chart') {
97 if (params.mode === 'chart') {
90 navToChart(analysis.patpIsValid);
98 navToChart(analysis.patpIsValid);
92− if (analysis.patpIsValid) {
100+ if (patp) {
93 navToShipView(true);
101 navToShipView(true);
95− navToSearch(params.mode === 'ship');
103+ const fromShipMode = params.mode === 'ship';
104+ navToSearch(fromShipMode);
101− $: urlSearch, analysis, autoNav();
110+ $: urlSearch, urlSearchMode, search, searchMode, autoNav();
103 let properMode = params.mode;
112 let properMode = params.mode;
104 if (properMode === 'chart') {
113 if (properMode === 'chart') {
@@ -140,19 +149,31 @@
142<div class="p-4 space-y-4 min-h-full flex flex-col items-center 2xs:p-8 2xs:space-y-8">
151<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} />
152+ <SearchBar bind:analysis bind:sigilQuery bind:search bind:searchMode bind:patp {placeholderText} />
144− <!-- <p class="bg-white">navigating</p> -->
153+ <!-- <div class="bg-white">
158+ URL Search: {urlSearch}
161+ Search mode: {searchMode}
145 {#if params.mode == "chart"}
167 {#if params.mode == "chart"}
146− <StarChart patp={analysis.patpIsValid ? analysis.patp : null} />
168+ <StarChart patp={patp || null} />
147− {:else if analysis.patpIsValid}
169+ {:else if patp}
148− <ShipView patp={analysis.patp} />
170+ <ShipView {patp} />
149− {:else if (searchMode === 'patp' && analysis.queryIsValid) || (searchMode == 'sigil' && sigilQuery.isWorthSearching)}
171+ {:else if (searchMode === 'patp' && analysis.queryIsValid) || (searchMode === 'sigil' && sigilQuery.isWorthSearching)}
150 <SearchResults regexQuery={analysis.query} sigilQuery={sigilQuery}
172 <SearchResults regexQuery={analysis.query} sigilQuery={sigilQuery}
151 patpSearch={analysis.search} {searchMode} />
173 patpSearch={analysis.search} {searchMode} />
152− {:else if (analysis.search.length > 0)}
174+ {:else if (analysis.search.length > 0 && analysis.queryProblems.length > 0)}
153 <ValidationProblems problems={analysis.queryProblems} />
175 <ValidationProblems problems={analysis.queryProblems} />
155 <HomeScreenTiles />
177 <HomeScreenTiles />