aboutsummaryrefslogtreecommitdiff
path: root/src/view/client/main.ts
diff options
context:
space:
mode:
authorJoris2023-09-16 18:28:16 +0200
committerJoris2023-09-16 18:31:24 +0200
commit06f045e90bb57c36738e58ee6830e2a2391bc6a3 (patch)
treea5b65b048c103b4ea0e5d3c0fa5e115cbaf3cf5f /src/view/client/main.ts
parent230f2e0623d22af6e68466884bd5dea5dcb846dc (diff)
Migrate CLI to python
Diffstat (limited to 'src/view/client/main.ts')
-rw-r--r--src/view/client/main.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/view/client/main.ts b/src/view/client/main.ts
new file mode 100644
index 0000000..5885871
--- /dev/null
+++ b/src/view/client/main.ts
@@ -0,0 +1,46 @@
+import { h, withVar, mount, Html } from 'lib/rx'
+import * as Search from 'lib/search'
+import * as Functions from 'lib/functions'
+import * as I18n from 'lib/i18n'
+import * as Filters from 'view/filters'
+import * as Books from 'view/books'
+import * as Book from 'book'
+
+// @ts-ignore
+const sortedBookLibrary: Array<Book> = (bookLibrary as Array<Book.Book>).sort((a, b) =>
+ a.authorsSort == b.authorsSort
+ ? a.date > b.date
+ : a.authorsSort > b.authorsSort)
+
+mount(withVar<Filters.Model>({}, (filters, updateFilters) =>
+ withVar('', (search, updateSearch) => {
+ const filteredBooks = filters.flatMap(f => search.map(s =>
+ sortedBookLibrary.filter(book =>
+ (f.read === undefined || book.read === f.read)
+ && (s === '' || matchSearch(book, s))
+ )
+ ))
+
+ return [
+ h('aside', Filters.view({ filteredBooks, filters, updateFilters })),
+ h('main',
+ h('header',
+ h('input',
+ { className: 'g-Search',
+ oninput: Functions.debounce(
+ (event: Event) => updateSearch(_ => (event.target as HTMLInputElement).value),
+ 500
+ )
+ }
+ ),
+ filteredBooks.map(fb => I18n.unit(fb.length, 'livre', 'livres'))
+ ),
+ Books.view(filteredBooks)
+ )
+ ]
+ })
+))
+
+function matchSearch(book: Book.Book, search: string): boolean {
+ return Search.match(search, book.title, book.subtitle, ...book.authors)
+}