{ "version": 3, "sources": ["../../../src/controls/slick.pager.ts"], "sourcesContent": ["import type { PagingInfo } from '../models/index';\nimport { BindingEventService as BindingEventService_, SlickGlobalEditorLock as SlickGlobalEditorLock_, Utils as Utils_ } from '../slick.core';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickGlobalEditorLock = IIFE_ONLY ? Slick.GlobalEditorLock : SlickGlobalEditorLock_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport interface GridPagerOption {\n showAllText: string;\n showPageText: string;\n showCountText: string;\n showCount: boolean;\n pagingOptions: Array<{ data: number; name: string; ariaLabel: string; }>;\n showPageSizes: boolean;\n}\n\nexport class SlickGridPager {\n // --\n // public API\n\n // --\n // protected props\n protected _container: HTMLElement; // the container might be a string, a jQuery object or a native element\n protected _statusElm!: HTMLElement;\n protected _bindingEventService: BindingEventService_;\n protected _options: GridPagerOption;\n protected _defaults: GridPagerOption = {\n showAllText: 'Showing all {rowCount} rows',\n showPageText: 'Showing page {pageNum} of {pageCount}',\n showCountText: 'From {countBegin} to {countEnd} of {rowCount} rows',\n showCount: false,\n pagingOptions: [\n { data: 0, name: 'All', ariaLabel: 'Show All Pages' },\n { data: -1, name: 'Auto', ariaLabel: 'Auto Page Size' },\n { data: 25, name: '25', ariaLabel: 'Show 25 rows per page' },\n { data: 50, name: '50', ariaLabel: 'Show 50 rows per page' },\n { data: 100, name: '100', ariaLabel: 'Show 100 rows per page' },\n ],\n showPageSizes: false\n };\n\n constructor(protected readonly dataView: SlickDataView, protected readonly grid: SlickGrid, selectorOrElm: HTMLElement | string, options?: Partial) {\n this._container = this.getContainerElement(selectorOrElm) as HTMLElement;\n this._options = Utils.extend(true, {}, this._defaults, options);\n this._bindingEventService = new BindingEventService();\n this.init();\n }\n\n init() {\n this.constructPagerUI();\n this.updatePager(this.dataView.getPagingInfo());\n this.dataView.onPagingInfoChanged.subscribe((_e, pagingInfo) => {\n this.updatePager(pagingInfo);\n });\n }\n\n /** Destroy function when element is destroyed */\n destroy() {\n this.setPageSize(0);\n this._bindingEventService.unbindAll();\n this._container.innerHTML = '';\n }\n\n protected getNavState() {\n const cannotLeaveEditMode = !SlickGlobalEditorLock.commitCurrentEdit();\n const pagingInfo = this.dataView.getPagingInfo();\n const lastPage = pagingInfo.totalPages - 1;\n\n return {\n canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,\n canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,\n canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,\n canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,\n pagingInfo: pagingInfo\n };\n }\n\n protected setPageSize(n: number) {\n this.dataView.setRefreshHints({\n isFilterUnchanged: true\n });\n this.dataView.setPagingOptions({ pageSize: n });\n }\n\n protected gotoFirst() {\n if (this.getNavState().canGotoFirst) {\n this.dataView.setPagingOptions({ pageNum: 0 });\n }\n }\n\n protected gotoLast() {\n const state = this.getNavState();\n if (state.canGotoLast) {\n this.dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 });\n }\n }\n\n protected gotoPrev() {\n const state = this.getNavState();\n if (state.canGotoPrev) {\n this.dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 });\n }\n }\n\n protected gotoNext() {\n const state = this.getNavState();\n if (state.canGotoNext) {\n this.dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 });\n }\n }\n\n protected getContainerElement(selectorOrElm: object | HTMLElement | string) {\n // the container might be a string, a jQuery object or a native element\n return typeof selectorOrElm === 'string'\n ? document.querySelector(selectorOrElm)\n : typeof selectorOrElm === 'object' && (selectorOrElm as any)[0]\n ? (selectorOrElm as any)[0] as HTMLElement\n : selectorOrElm;\n }\n\n protected constructPagerUI() {\n // the container might be a string, a jQuery object or a native element\n const container = this.getContainerElement(this._container) as HTMLElement | HTMLElement[];\n if (!container || ((container as any).jquery && !(container as HTMLElement[])[0])) return;\n\n const navElm = document.createElement('span');\n navElm.className = 'slick-pager-nav';\n\n const settingsElm = document.createElement('span');\n settingsElm.className = 'slick-pager-settings';\n\n this._statusElm = document.createElement('span');\n this._statusElm.className = 'slick-pager-status';\n\n const pagerSettingsElm = document.createElement('span');\n pagerSettingsElm.className = 'slick-pager-settings-expanded';\n pagerSettingsElm.textContent = 'Show: ';\n\n for (let o = 0; o < this._options.pagingOptions.length; o++) {\n const p = this._options.pagingOptions[o];\n\n const anchorElm = document.createElement('a');\n anchorElm.textContent = p.name;\n anchorElm.ariaLabel = p.ariaLabel;\n anchorElm.dataset.val = String(p.data);\n pagerSettingsElm.appendChild(anchorElm);\n\n this._bindingEventService.bind(anchorElm, 'click', ((e: any) => {\n const pagesize = e.target.dataset.val;\n if (pagesize !== undefined) {\n if (Number(pagesize) === -1) {\n const vp = this.grid.getViewport();\n this.setPageSize(vp.bottom - vp.top);\n } else {\n this.setPageSize(parseInt(pagesize));\n }\n }\n }));\n }\n\n pagerSettingsElm.style.display = this._options.showPageSizes ? 'block' : 'none';\n\n settingsElm.appendChild(pagerSettingsElm);\n\n // light bulb icon\n const displayPaginationContainer = document.createElement('span');\n const displayIconElm = document.createElement('span');\n displayPaginationContainer.className = 'sgi-container';\n displayIconElm.ariaLabel = 'Show Pagination Options';\n displayIconElm.role = 'button';\n displayIconElm.className = 'sgi sgi-lightbulb';\n displayPaginationContainer.appendChild(displayIconElm);\n\n this._bindingEventService.bind(displayIconElm, 'click', () => {\n const styleDisplay = pagerSettingsElm.style.display;\n pagerSettingsElm.style.display = styleDisplay === 'none' ? 'inline-flex' : 'none';\n });\n settingsElm.appendChild(displayPaginationContainer);\n\n const pageButtons = [\n { key: 'start', ariaLabel: 'First Page', callback: this.gotoFirst },\n { key: 'left', ariaLabel: 'Previous Page', callback: this.gotoPrev },\n { key: 'right', ariaLabel: 'Next Page', callback: this.gotoNext },\n { key: 'end', ariaLabel: 'Last Page', callback: this.gotoLast },\n ];\n\n pageButtons.forEach(pageBtn => {\n const iconElm = document.createElement('span');\n iconElm.className = 'sgi-container';\n\n const innerIconElm = document.createElement('span');\n innerIconElm.role = 'button';\n innerIconElm.ariaLabel = pageBtn.ariaLabel;\n innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`;\n this._bindingEventService.bind(innerIconElm, 'click', pageBtn.callback.bind(this));\n\n iconElm.appendChild(innerIconElm);\n navElm.appendChild(iconElm);\n });\n\n const slickPagerElm = document.createElement('div');\n slickPagerElm.className = 'slick-pager';\n\n slickPagerElm.appendChild(navElm);\n slickPagerElm.appendChild(this._statusElm);\n slickPagerElm.appendChild(settingsElm);\n\n (container as HTMLElement).appendChild(slickPagerElm);\n }\n\n protected updatePager(pagingInfo: PagingInfo) {\n if (!this._container || ((this._container as any).jquery && !(this._container as any)[0])) return;\n const state = this.getNavState();\n\n // remove disabled class on all icons\n this._container.querySelectorAll('.slick-pager-nav span')\n .forEach(pagerIcon => pagerIcon.classList.remove('sgi-state-disabled'));\n\n // add back disabled class to only necessary icons\n if (!state.canGotoFirst) {\n this._container!.querySelector('.sgi-chevron-start')!.classList.add('sgi-state-disabled');\n }\n if (!state.canGotoLast) {\n this._container!.querySelector('.sgi-chevron-end')!.classList.add('sgi-state-disabled');\n }\n if (!state.canGotoNext) {\n this._container!.querySelector('.sgi-chevron-right')!.classList.add('sgi-state-disabled');\n }\n if (!state.canGotoPrev) {\n this._container!.querySelector('.sgi-chevron-left')!.classList.add('sgi-state-disabled');\n }\n\n if (pagingInfo.pageSize === 0) {\n this._statusElm.textContent = (this._options.showAllText.replace('{rowCount}', pagingInfo.totalRows + '').replace('{pageCount}', pagingInfo.totalPages + ''));\n } else {\n this._statusElm.textContent = (this._options.showPageText.replace('{pageNum}', pagingInfo.pageNum + 1 + '').replace('{pageCount}', pagingInfo.totalPages + ''));\n }\n\n if (this._options.showCount && pagingInfo.pageSize !== 0) {\n const pageBegin = pagingInfo.pageNum * pagingInfo.pageSize;\n let currentText = this._statusElm.textContent;\n\n if (currentText) {\n currentText += ' - ';\n }\n\n this._statusElm.textContent =\n currentText +\n this._options.showCountText\n .replace('{rowCount}', String(pagingInfo.totalRows))\n .replace('{countBegin}', String(pageBegin + 1))\n .replace('{countEnd}', String(Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows)));\n }\n }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n window.Slick.Controls = window.Slick.Controls || {};\n window.Slick.Controls.Pager = SlickGridPager;\n}\n\n"], "mappings": "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", "names": [] }