43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
// License: LGPL-3.0-or-later
|
|
const R = require('ramda')
|
|
const h = require('flimflam/h')
|
|
const search = require('./search')
|
|
|
|
const map = R.addIndex(R.map)
|
|
|
|
const table = (data=[], header, row) =>
|
|
h('table.width-full', R.concat(header, map(row, data)))
|
|
|
|
const showMore = state => {
|
|
if(!state.hasMoreResults$()) return ''
|
|
return h('div.py-3.border-top.border-color-grey', [
|
|
h('button', {
|
|
attrs: {disabled: state.loading$()}
|
|
, on: {click: [ state.searchLessQuery$, {
|
|
page: state.searchLessQuery$().page + 1
|
|
, search: ''
|
|
, page_length: state.pageLength
|
|
}]}}, 'Show more')
|
|
])
|
|
}
|
|
|
|
const searchForm = (state, placeholder) =>
|
|
h('div.clearfix.py-3', [
|
|
h('form.right', {on: {submit: state.submitSearch$}}, [
|
|
search(state.loading$(), placeholder)
|
|
])
|
|
])
|
|
|
|
const view = (state, header, row, placeholder) => {
|
|
return h('div', [
|
|
h('div', [searchForm(state, placeholder)])
|
|
, state.data$().length && state.data$()[0]
|
|
? table(state.data$(), header, row)
|
|
: h('div.py-2.color-grey', state.loading$() ? 'Loading...' : 'No results')
|
|
, showMore(state)
|
|
, state.loading$() ? h('div.loader') : ''
|
|
])
|
|
}
|
|
|
|
module.exports = view
|
|
|