{"version":3,"sources":["webpack:///./React/components/Shared/PVPaging.js"],"names":["getVisiblePages","currentPage","pageSize","totalPages","prevNext","allPages","Array","fill","map","x","i","p","page","display","key","visiblePages","leader","trailer","length","splice","Math","min","concat","prev","disable","next","PVPaging","props","totalRecords","activeClass","disabledClass","handleClick","handleHoverPage","useState","setVisiblePages","isMounted","useRef","useEffect","current","ceil","getClasses","className","type","onClick","propTypes","PropTypes","number","isRequired","string","func","arrayOf","defaultProps"],"mappings":"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","file":"bundle.5.47a6d9f9.js","sourcesContent":["/* eslint-disable no-unused-vars */\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nconst getVisiblePages = (currentPage, pageSize, totalPages, prevNext) => {\n    const allPages = Array(totalPages)\n        .fill()\n        .map((x, i) => i + 1)\n        .map((p) => {\n            return { page: p, display: p, key: p };\n        });\n\n    let visiblePages = [...allPages];\n\n    const firstPage = allPages[0];\n    const lastPage = allPages[allPages.length - 1];\n    const leader = [firstPage, { page: currentPage - 2, display: '...', key: 'leader' }];\n    const trailer = [{ page: currentPage + 2, display: '...', key: 'trailer' }, lastPage];\n    if (totalPages > 5) {\n        if (currentPage <= 4) {\n            visiblePages = visiblePages.splice(0, Math.min(totalPages, 5));\n            if (totalPages > 5) {\n                visiblePages = visiblePages.concat(trailer);\n            }\n        } else if (totalPages - currentPage > 5) {\n            visiblePages = leader.concat(visiblePages.splice(currentPage - 2, 3)).concat(trailer);\n        } else {\n            visiblePages = leader.concat(visiblePages.splice(totalPages - 5, 5));\n        }\n    } else {\n        visiblePages = visiblePages.splice(0, totalPages);\n    }\n\n    if (prevNext && prevNext.length === 2 && totalPages > 1) {\n        const prev = {\n            page: currentPage - 1,\n            display: prevNext[0],\n            key: 'prev',\n            disable: currentPage === 1,\n        };\n        const next = {\n            page: currentPage + 1,\n            display: prevNext[1],\n            disable: currentPage === totalPages,\n            key: 'next',\n        };\n        visiblePages = [prev].concat(visiblePages).concat([next]);\n    }\n    return visiblePages;\n};\n\nconst PVPaging = (props) => {\n    const {\n        pageSize,\n        currentPage,\n        totalRecords,\n        activeClass,\n        disabledClass,\n        handleClick,\n        handleHoverPage,\n        prevNext,\n    } = props;\n\n    const [visiblePages, setVisiblePages] = useState([]);\n    const isMounted = useRef(null);\n\n    useEffect(() => {\n        isMounted.current = true;\n        return () => {\n            isMounted.current = false;\n        };\n    }, []);\n\n    useEffect(() => {\n        if (totalRecords > 0) {\n            const totalPages = Math.ceil(totalRecords / pageSize);\n            if (isMounted.current) {\n                setVisiblePages(getVisiblePages(currentPage, pageSize, totalPages, prevNext) || []);\n            }\n        }\n    }, [totalRecords, pageSize, currentPage]);\n\n    const getClasses = (p) => {\n        if (p.disable) {\n            return disabledClass;\n        }\n        if (p.page === currentPage) {\n            return activeClass;\n        }\n        return '';\n    };\n\n    return (\n        <div className=\"row\">\n            <div className=\"pagination col col-xs-8\">\n                {totalRecords > 0 && totalRecords / pageSize > 1 && (\n                    <div className=\"nav-links\">\n                        {visiblePages.map((p) => {\n                            return (\n                                <button\n                                    type=\"button\"\n                                    key={p.key}\n                                    className={getClasses(p)}\n                                    onClick={() => {\n                                        handleClick(p.page);\n                                    }}\n                                    // onMouseOver={() => handleHoverPage(p.page)}\n                                >\n                                    <span className={getClasses(p)}>{p.display}</span>\n                                </button>\n                            );\n                        })}\n                    </div>\n                )}\n            </div>\n            <div className=\"pagination col col-xs-4\">\n                <span className=\"show-result pull-right\">\n                    {totalRecords > 0 && `${(currentPage - 1) * pageSize + 1}-`}\n                    {Math.min(currentPage * pageSize, totalRecords)} of {totalRecords} items\n                </span>\n            </div>\n        </div>\n    );\n};\n\nPVPaging.propTypes = {\n    totalRecords: PropTypes.number.isRequired,\n    pageSize: PropTypes.number,\n    currentPage: PropTypes.number.isRequired,\n    activeClass: PropTypes.string,\n    disabledClass: PropTypes.string,\n    handleClick: PropTypes.func.isRequired,\n    handleHoverPage: PropTypes.func,\n    prevNext: PropTypes.arrayOf(PropTypes.string),\n};\nPVPaging.defaultProps = {\n    pageSize: 25,\n    activeClass: 'active',\n    disabledClass: 'disabled',\n    handleHoverPage: () => {},\n    prevNext: [],\n};\n\nexport default PVPaging;\n"],"sourceRoot":""}