houdini/app/javascript/legacy/components/show-more-button.es6
2020-04-23 14:09:14 -05:00

35 lines
1,022 B
JavaScript

// License: LGPL-3.0-or-later
/*
A 'Show More' button component, useful for placing at the bottom of a listing of ajax'd data.
the showMore button's state uses the following properties:
moreLoading: boolean (you might want general "loading" and a separate "moreLoading" states)
remaining: integer (count of how many results are not shown and still left. If 0, the show more button hides)
*/
const view = require('vvvview')
const h = require("virtual-dom/h")
const flyd = require('flyd')
var $ = {
nextPageClicks: flyd.stream()
}
const root = (moreLoading, remaining) => {
var buttonContent = moreLoading
? h('span', [h('i.fa.fa-spin.fa-spinner'), ' Loading... '])
: h('span', ' Show More ')
return h('div.moreResults.group', {style: {display: remaining ? 'block' : 'none'}}, [
h('button.button--micro.details', {disabled: moreLoading, onclick: $.nextPageClicks}, [
buttonContent,
]),
' ',
h('a.button--micro.details', {href: '#'}, 'Back to Top')
])
}
module.exports = {root: root, $streams: $}