import * as React from 'react'; import { getPaginationRange } from 'mmviz'; import { MmuiCommonComponent, MmuiProps, MmuiState } from '../common'; export interface MmuiPaginationRangeProps extends MmuiProps { rangeSize?: number; pageNumber?: number; totalPages: number; } export interface MmuiPaginationRangeState extends MmuiState { rangeSize: number; pageNumber: number; totalPages: number; } export class MmuiPaginationRangeComponent< P extends MmuiPaginationRangeProps, S extends MmuiPaginationRangeState > extends MmuiCommonComponent
{ /** * Constructor * @param props * props.summaryRenderMode: Options "text" or "token". * Specifying "text" the summary of selected choices is display as text. * Specifying "token" the summary of selected choices is display as tokens. */ constructor(props) { super(props); } getInitialComponentState(): any { const state: any = { rangeSize: 7, pageNumber: 1, }; if (this.props.rangeSize !== undefined) { state.rangeSize = this.props.rangeSize; } if (this.props.pageNumber !== undefined) { state.pageNumber = this.props.pageNumber; } state.totalPages = this.props.totalPages; return state; } pageClick(e: React.SyntheticEvent) { e.preventDefault(); const pageLinkElmt = e.target as HTMLElement, pageNumber = parseInt(pageLinkElmt.dataset.page); this.mergeComponentState({ pageNumber: pageNumber, updatedAt: new Date() }); } onPageClick = (e: React.SyntheticEvent) => { this.pageClick(e); }; /** * Render the Component */ render() { let state = this.getComponentState(), firstElmt, prevElmt, nextElmt, lastElmt, pageRangeElements, rangeArray = []; if (state.pageNumber && state.totalPages) { rangeArray = getPaginationRange( state.totalPages, state.rangeSize, state.pageNumber ); pageRangeElements = rangeArray.map((r) => { let elmt, key = `page-link-${r}`; if (r === state.pageNumber) { elmt = (