on main help sign in
fixing some bugs and doing some cleanup
commite9137b1b357059dd4b56cffde7de1fb0c120bb58 authorJohn Hyde <johnhydefour@gmail.com> dateFri 17 Jun 2022, 00:17 (4 years ago) parent23a05e0
4 files changed+41−10
desk/app/astrolabe.hoon+7−5 desk/lib/search.hoon+2−1 ui/src/components/SearchResults.svelte+27−3 ui/src/lib/id.ts+5−1
desk/app/astrolabe.hoon+7−5
@@ -254,7 +254,7 @@
254254 (switch-words result)
255255 =. result (to-p result)
256256 (put:((on @ @) gte) agg result ~)
257− ~& "returning {<~(wyt by agg.res)>} of {<count.res>} results"
257+ :: ~& "returning {<~(wyt by agg.res)>} of {<count.res>} results"
258258 res
259259++ search-opoints
260260 |= [=search-text expand-search=?]
@@ -263,14 +263,16 @@
263263 ?: expand-search
264264 (search-text-to-fulls search-text)
265265 ~[(search-text-to-full search-text)]
266− ~& (turn search-fulls |=(=search-full search-syls.search-full))
266+ :: ~& (turn search-fulls |=(=search-full search-syls.search-full))
267267 =/ mr-searches (maybe-reverse-searches search-fulls 2.820)
268− ~& (turn mr-searches |=(=mr-search pain.mr-search))
268+ :: ~& (turn mr-searches |=(=mr-search pain.mr-search))
269+ :: ~& mr-searches
269270 ?~ mr-searches ~|(%search-predicted-too-broad !!)
270− =/ results
271+ =/ res
271272 %+ roll `(list mr-search)`mr-searches
272273 run-mr-search
273− (turn ~(tap in agg.results) head)
274+ ~& "search for {<search-text>} returning {<~(wyt by agg.res)>} of {<count.res>} results"
275+ (turn ~(tap in agg.res) head)
274276::
275277++ sponsor-chain
276278 |= [=ship =unpoint]
desk/lib/search.hoon+2−1
@@ -221,7 +221,8 @@
221221 :: =? cand =(cand ~)
222222 :: `(lest @)`~[0]
223223 ?~ cand
224− ?& (syl-equals i.search 0)
224+ :: ?& (syl-equals i.search 0)
225+ ?& (syl-matches i.search 0)
225226 $(search t.search)
226227 ==
227228 :: =/ nncand ^- (lest @)
ui/src/components/SearchResults.svelte+27−3
@@ -15,9 +15,17 @@
1515 let selectedShipIndex: number;
1616 let page: number = 0;
1717 let pageSize: number = 50;
18+ let totalPages, firstItemOnPage;
1819 let searchStatus: ('init' | 'prog' | 'done' | 'fail') = 'init';
1920 let notification: string = null;
20− $: { searchedContacts.search(query) }
21+
22+ let timer;
23+ $: {
24+ clearTimeout(timer);
25+ timer = setTimeout(() => {
26+ searchedContacts.search(query);
27+ }, 1000);
28+ }
2129 $: searchedPointsP = searchPoints(search);
2230 $: {
2331 searchStatus = 'prog';
@@ -56,8 +64,15 @@
5664 selectedShipIndex = null;
5765 }
5866 }
59− $: totalPages = Math.ceil(combinedSearchResults.length / pageSize);
60− $: firstItemOnPage = page * pageSize
67+ $: {
68+ totalPages = Math.ceil(combinedSearchResults.length / pageSize);
69+ firstItemOnPage = page * pageSize;
70+ if (firstItemOnPage >= combinedSearchResults.length) {
71+ page = totalPages - 1;
72+ } else if (firstItemOnPage < 0) {
73+ page = 0;
74+ }
75+ }
6176 $: pageResults = combinedSearchResults.slice(firstItemOnPage, (page + 1) * pageSize);
6277 $: itemRangeText = pageResults.length == combinedSearchResults.length ? 'all' :
6378 `${firstItemOnPage + 1}-${firstItemOnPage + pageResults.length}`;
@@ -96,5 +111,14 @@
96111 ships={pageResults}
97112 linkToShips differentiateContacts
98113 />
114+ {#if pageResults.length >= 5}
115+ <SearchResultsNavButtons {page} {pageSize} {totalPages}
116+ on:updatePage={({ detail }) => page = detail.page}
117+ >
118+ <p class="px-4 py-8 text-center">
119+ Showing {itemRangeText} of {combinedSearchResults.length} results
120+ </p>
121+ </SearchResultsNavButtons>
122+ {/if}
99123 </div>
100124{/if}
ui/src/lib/id.ts+5−1
@@ -455,7 +455,11 @@ function convertSearchTextToRegex(str: string, { checkStart = false, checkEnd =
455455 if (checkEnd) {
456456 str = str + '$';
457457 }
458− return new RegExp(str);
458+ try {
459+ return new RegExp(str);
460+ } catch {
461+ return /a^/; // matches nothing
462+ }
459463}
460464
461465function expandAbbreviatedId(patp: string): string {