// License: LGPL-3.0-or-later
const h = require('virtual-dom/h')
const thunk = require('vdom-thunk')
const formToObj = require('../../common/form-to-object')
const flyd = require('flyd')
const filterStream = require('flyd/module/filter')

// Uses an immutable state object with 'page' and 'search' keys
// Will also use a 'loading' key for loading animations
// Optionally pass in a 'placeholder' key for the placeholder text

// Searches are streams of objects like {page: 1, search: 'xxyy'}

// Whenever they blank out the search field, immediately re-request
var $searchKeyups = flyd.stream()
var $clearOuts = flyd.map(
	() => ({page: 1, search: ''}),
	filterStream(
		ev => !ev.target.value.length, // all blank values
		$searchKeyups))

// Search form submissions
var $searchSubmits = flyd.stream()
flyd.on(ev => ev.preventDefault(), $searchSubmits)
var $searches = flyd.merge(
	$clearOuts,
	flyd.map(
		ev => formToObj(ev.target),
		$searchSubmits))


const root = state =>
	h('form.table-meta-search', {
		onsubmit: $searchSubmits
	}, [
		h('input', {type: 'hidden', name: 'page', value: 1}),
		h('input', {
			type: 'text',
			name: 'search',
			placeholder: state.get('placeholder') || 'Search',
			value: state.get('search'),
			onkeyup: $searchKeyups,
		}),
		h('button.button--input', {type: 'submit', disabled: state.get('loading')}, [
			h('i.fa.fa-search', {style: {display: state.get('loading') ? 'none' : ''}}),
			h('i.fa.fa-spin.fa-spinner', {style: {display: state.get('loading') ? '' : 'none'}})
		])
	])

module.exports = {root: root, $streams: {searches: $searches}}