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 = (bookLibrary as Array).sort((a, b) =>
a.authorsSort == b.authorsSort
? a.date > b.date
: a.authorsSort > b.authorsSort)
mount(withVar({}, (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)
}