{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/pagination/index.tsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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","sourcesContent":["import renderer, { create, tsx, diffProperty } from '@dojo/framework/core/vdom';\nimport { createICacheMiddleware } from '@dojo/framework/core/middleware/icache';\nimport i18n from '@dojo/framework/core/middleware/i18n';\nimport theme from '../middleware/theme';\nimport dimensions from '@dojo/framework/core/middleware/dimensions';\nimport resize from '@dojo/framework/core/middleware/resize';\nimport { RenderResult } from '@dojo/framework/core/interfaces';\nimport {\n\tcreateResourceMiddleware,\n\tcreateResourceTemplate\n} from '@dojo/framework/core/middleware/resources';\nimport global from '@dojo/framework/shim/global';\n\nimport Icon from '../icon';\nimport Select from '../select';\n\nimport bundle from './nls/Pagination';\nimport * as css from '../theme/default/pagination.m.css';\nimport { ListOption } from '../list';\n\nexport interface PaginationProperties {\n\t/** The initial page number */\n\tinitialPage?: number;\n\n\t/** Controlled page property */\n\tpage?: number;\n\n\t/** The initial page size */\n\tinitialPageSize?: number;\n\n\t/** Controlled page size property */\n\tpageSize?: number;\n\n\t/** Callback fired when the page number is changed */\n\tonPage?(page: number): void;\n\n\t/** Callback fired when the page size is changed */\n\tonPageSize?(pageSize: number): void;\n\n\t/** Page size options to display in the page size selector */\n\tpageSizes?: number[];\n\n\t/** Number of always visible page links before and after the current page. When unset, siblings will be added to consume the available space. */\n\tsiblingCount?: number;\n\n\t/** Total number of pages */\n\ttotal: number;\n}\n\ninterface PaginationCache {\n\tinitialPage?: number;\n\tinitialPageSize?: number;\n\tcurrentPage: number;\n\tfixedWidth: number;\n\tsiblingWidth: number;\n\tpageSize: number;\n\tpageSizes: number[];\n}\n\nconst pageSizesTemplate = createResourceTemplate<ListOption>('value');\n\nfunction getRenderedWidth(dnode: RenderResult, wrapperClass?: string): number {\n\tif (dnode === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst r = renderer(() => dnode);\n\tconst div = global.document.createElement('div');\n\tdiv.className = wrapperClass || '';\n\tdiv.style.position = 'absolute';\n\tglobal.document.body.appendChild(div);\n\tr.mount({ domNode: div, sync: true });\n\tconst dimensions = div.getBoundingClientRect();\n\tglobal.document.body.removeChild(div);\n\treturn dimensions.width;\n}\n\nconst icache = createICacheMiddleware<PaginationCache>();\nconst resource = createResourceMiddleware();\nconst factory = create({\n\ttheme,\n\ticache,\n\ti18n,\n\tdimensions,\n\tresize,\n\tdiffProperty,\n\tresource\n}).properties<PaginationProperties>();\n\nexport default factory(function Pagination({\n\tid,\n\tmiddleware: { theme, icache, i18n, dimensions, resize, diffProperty, resource },\n\tproperties\n}) {\n\tdiffProperty('theme', (current, next) => {\n\t\tif (current !== next) {\n\t\t\ticache.delete('fixedWidth', false);\n\t\t\ticache.delete('siblingWidth', false);\n\t\t}\n\t});\n\tresize.get('root');\n\n\tconst {\n\t\tinitialPage,\n\t\tinitialPageSize,\n\t\tonPage,\n\t\tonPageSize,\n\t\tpageSizes,\n\t\tsiblingCount,\n\t\ttotal\n\t} = properties();\n\tconst classes = theme.classes(css);\n\tconst { messages } = i18n.localize(bundle);\n\n\tlet { page, pageSize } = properties();\n\n\tif (\n\t\tpage === undefined &&\n\t\tinitialPage !== undefined &&\n\t\tinitialPage !== icache.get('initialPage')\n\t) {\n\t\ticache.set('initialPage', initialPage);\n\t\ticache.set('currentPage', initialPage);\n\t}\n\n\tconst currentPage = page === undefined ? icache.getOrSet('currentPage', 1) : page;\n\tif (\n\t\tpageSize === undefined &&\n\t\tinitialPageSize !== undefined &&\n\t\tinitialPageSize !== icache.get('initialPageSize')\n\t) {\n\t\ticache.set('initialPageSize', initialPageSize);\n\t\ticache.set('pageSize', initialPageSize);\n\t}\n\tconst currentPageSize = pageSize === undefined ? icache.getOrSet('pageSize', 10) : pageSize;\n\n\tif (pageSizes !== undefined && pageSizes !== icache.get('pageSizes')) {\n\t\ticache.set('pageSizes', pageSizes);\n\t}\n\n\tconst showPrev = currentPage > 1;\n\tconst prevLink = (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tkey=\"prev\"\n\t\t\tclasses={[classes.prev, classes.link]}\n\t\t\tonclick={(e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ticache.set('currentPage', currentPage - 1);\n\t\t\t\tonPage && onPage(currentPage - 1);\n\t\t\t}}\n\t\t>\n\t\t\t<div classes={classes.icon}>\n\t\t\t\t<Icon type=\"leftIcon\" />\n\t\t\t</div>\n\t\t\t<div classes={classes.label}>{messages.previous}</div>\n\t\t</button>\n\t);\n\n\tconst showNext = currentPage < total;\n\tconst nextLink = (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tkey=\"next\"\n\t\t\tclasses={[classes.next, classes.link]}\n\t\t\tonclick={(e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ticache.set('currentPage', currentPage + 1);\n\t\t\t\tonPage && onPage(currentPage + 1);\n\t\t\t}}\n\t\t>\n\t\t\t<div classes={classes.icon}>\n\t\t\t\t<Icon type=\"rightIcon\" />\n\t\t\t</div>\n\t\t\t<div classes={classes.label}>{messages.next}</div>\n\t\t</button>\n\t);\n\n\tconst leadingSiblings: RenderResult[] = [];\n\tconst trailingSiblings: RenderResult[] = [];\n\tconst containerWidth = dimensions.get('links').size.width;\n\n\tif (containerWidth) {\n\t\tconst fixedWidth = icache.getOrSet(\n\t\t\t'fixedWidth',\n\t\t\tgetRenderedWidth(prevLink, theme.variant()) +\n\t\t\t\tgetRenderedWidth(nextLink, theme.variant()) +\n\t\t\t\tgetRenderedWidth(\n\t\t\t\t\t<div classes={classes.currentPage}>{total.toString()}</div>,\n\t\t\t\t\ttheme.variant()\n\t\t\t\t)\n\t\t);\n\t\tconst siblingWidth = icache.getOrSet(\n\t\t\t'siblingWidth',\n\t\t\tgetRenderedWidth(\n\t\t\t\t<button classes={[classes.numberedLink, classes.link]}>{total.toString()}</button>,\n\t\t\t\ttheme.variant()\n\t\t\t)\n\t\t);\n\n\t\tlet availableSpace = (containerWidth - fixedWidth) / siblingWidth;\n\n\t\tconst maxLeading = siblingCount ? Math.min(siblingCount, currentPage - 1) : currentPage - 1;\n\t\tconst maxTrailing = siblingCount\n\t\t\t? Math.min(siblingCount, total - currentPage)\n\t\t\t: total - currentPage;\n\n\t\tfor (let i = 1; i <= Math.max(maxLeading, maxTrailing); i++) {\n\t\t\tconst showLeading = i <= maxLeading;\n\t\t\tconst showTrailing = i <= maxTrailing;\n\n\t\t\tlet spaceNeeded = 0;\n\t\t\tif (showLeading) {\n\t\t\t\tspaceNeeded++;\n\t\t\t}\n\t\t\tif (showTrailing) {\n\t\t\t\tspaceNeeded++;\n\t\t\t}\n\n\t\t\tif (availableSpace >= spaceNeeded) {\n\t\t\t\tconst leadingPageNumber = currentPage - i;\n\t\t\t\tconst trailingPageNumber = currentPage + i;\n\n\t\t\t\tif (showLeading) {\n\t\t\t\t\tleadingSiblings.unshift(\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tkey={`numberedLink-${leadingPageNumber}`}\n\t\t\t\t\t\t\tclasses={[classes.numberedLink, classes.link]}\n\t\t\t\t\t\t\tonclick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\ticache.set('currentPage', leadingPageNumber);\n\t\t\t\t\t\t\t\tonPage && onPage(leadingPageNumber);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingPageNumber.toString()}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (showTrailing) {\n\t\t\t\t\ttrailingSiblings.push(\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tkey={`numberedLink-${trailingPageNumber}`}\n\t\t\t\t\t\t\tclasses={[classes.numberedLink, classes.link]}\n\t\t\t\t\t\t\tonclick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\ticache.set('currentPage', trailingPageNumber);\n\t\t\t\t\t\t\t\tonPage && onPage(trailingPageNumber);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingPageNumber.toString()}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tavailableSpace -= spaceNeeded;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\ttotal > 1 && (\n\t\t\t<div key=\"root\" classes={[theme.variant(), classes.root]}>\n\t\t\t\t<div\n\t\t\t\t\tkey=\"links\"\n\t\t\t\t\tclasses={classes.linksWrapper}\n\t\t\t\t\tstyles={{\n\t\t\t\t\t\topacity: containerWidth ? '1' : '0'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{showPrev && prevLink}\n\t\t\t\t\t{...leadingSiblings}\n\t\t\t\t\t<div key=\"current\" classes={classes.currentPage}>\n\t\t\t\t\t\t{currentPage.toString()}\n\t\t\t\t\t</div>\n\t\t\t\t\t{...trailingSiblings}\n\t\t\t\t\t{showNext && nextLink}\n\t\t\t\t</div>\n\t\t\t\t{pageSizes && pageSizes.length > 0 && (\n\t\t\t\t\t<div classes={classes.selectWrapper}>\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tkey=\"page-size-select\"\n\t\t\t\t\t\t\tinitialValue={\n\t\t\t\t\t\t\t\tpageSize === undefined ? currentPageSize.toString() : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={pageSize === undefined ? undefined : pageSize.toString()}\n\t\t\t\t\t\t\tresource={resource({\n\t\t\t\t\t\t\t\ttemplate: pageSizesTemplate({\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tdata: pageSizes.map((ps) => ({\n\t\t\t\t\t\t\t\t\t\tvalue: `${ps}`,\n\t\t\t\t\t\t\t\t\t\tlabel: `${ps}`\n\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tonValue={(value) => {\n\t\t\t\t\t\t\t\tonPageSize && onPageSize(parseInt(value.value, 10));\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t)\n\t);\n});\n"]}