UNPKG

violet-paginator

Version:

Display, paginate, sort, filter, and update items from the server. violet-paginator is a complete list management library for react/redux applications.

76 lines (62 loc) 1.8 kB
import { Map } from 'immutable' import { defaultPaginator } from '../reducer' import { translate, responseProps, recordProps } from '../pageInfoTranslator' const stateMap = {} const defaultLocator = listId => state => state[listId] const preload = { results: [] } const defaultPageParams = () => { const [totalCountProp, resultsProp] = responseProps() return { totalCountProp, resultsProp } } export function registerPaginator({ listId, fetch, initialSettings = {}, pageParams = {}, locator = defaultLocator(listId) }) { stateMap[listId] = { locator, fetch, initialSettings, params: { ...defaultPageParams(), ...pageParams } } return stateMap[listId] } export function getPaginator(listId, state) { const config = stateMap[listId] || { locator: defaultLocator(listId) } return config.locator(state) || defaultPaginator } export function getItem(state, listId, itemId) { return getPaginator(listId, state).get('results').find( r => r.get(recordProps().identifier) === itemId, undefined, Map() ) } export function listConfig(listId) { return stateMap[listId] } export function preloadedPaginator(state, listId, preloaded = preload) { const paginator = getPaginator(listId, state) return paginator.equals(defaultPaginator) ? paginator.merge(preloaded) : paginator } export function isUpdating(state, listId, itemId) { const paginator = getPaginator(listId, state) return paginator.get('updating').includes(itemId) || paginator.get('massUpdating').includes(itemId) } export function isRemoving(state, listId, itemId) { return getPaginator(listId, state).get('removing').includes(itemId) } export function currentQuery(state, listId) { return translate(getPaginator(listId, state)) }