|
@@ -1,18 +1,21 @@
|
|
|
-import React, { useCallback, useMemo } from 'react';
|
|
|
|
|
-import PropTypes from 'prop-types';
|
|
|
|
|
|
|
+import React, {
|
|
|
|
|
+ FC, memo, useCallback, useMemo,
|
|
|
|
|
+} from 'react';
|
|
|
|
|
|
|
|
import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
|
|
import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
|
|
|
|
|
|
|
|
-/**
|
|
|
|
|
- *
|
|
|
|
|
- * @author Mikitaka Itizawa <itizawa@weseek.co.jp>
|
|
|
|
|
- *
|
|
|
|
|
- * @export
|
|
|
|
|
- * @class PaginationWrapper
|
|
|
|
|
- * @extends {React.Component}
|
|
|
|
|
- */
|
|
|
|
|
|
|
|
|
|
-const PaginationWrapper = React.memo((props) => {
|
|
|
|
|
|
|
+type Props = {
|
|
|
|
|
+ activePage: number,
|
|
|
|
|
+ changePage?: (number) => void,
|
|
|
|
|
+ totalItemsCount: number,
|
|
|
|
|
+ pagingLimit?: number,
|
|
|
|
|
+ align?: string,
|
|
|
|
|
+ size?: string,
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+const PaginationWrapper: FC<Props> = memo((props: Props) => {
|
|
|
const {
|
|
const {
|
|
|
activePage, changePage, totalItemsCount, pagingLimit, align,
|
|
activePage, changePage, totalItemsCount, pagingLimit, align,
|
|
|
} = props;
|
|
} = props;
|
|
@@ -59,7 +62,7 @@ const PaginationWrapper = React.memo((props) => {
|
|
|
* this function set << & <
|
|
* this function set << & <
|
|
|
*/
|
|
*/
|
|
|
const generateFirstPrev = useCallback(() => {
|
|
const generateFirstPrev = useCallback(() => {
|
|
|
- const paginationItems = [];
|
|
|
|
|
|
|
+ const paginationItems: JSX.Element[] = [];
|
|
|
if (activePage !== 1) {
|
|
if (activePage !== 1) {
|
|
|
paginationItems.push(
|
|
paginationItems.push(
|
|
|
<PaginationItem key="painationItemFirst">
|
|
<PaginationItem key="painationItemFirst">
|
|
@@ -89,7 +92,7 @@ const PaginationWrapper = React.memo((props) => {
|
|
|
* this function set numbers
|
|
* this function set numbers
|
|
|
*/
|
|
*/
|
|
|
const generatePaginations = useCallback(() => {
|
|
const generatePaginations = useCallback(() => {
|
|
|
- const paginationItems = [];
|
|
|
|
|
|
|
+ const paginationItems: JSX.Element[] = [];
|
|
|
for (let number = paginationStart; number <= maxViewPageNum; number++) {
|
|
for (let number = paginationStart; number <= maxViewPageNum; number++) {
|
|
|
paginationItems.push(
|
|
paginationItems.push(
|
|
|
<PaginationItem key={`paginationItem-${number}`} active={number === activePage}>
|
|
<PaginationItem key={`paginationItem-${number}`} active={number === activePage}>
|
|
@@ -108,7 +111,7 @@ const PaginationWrapper = React.memo((props) => {
|
|
|
* this function set > & >>
|
|
* this function set > & >>
|
|
|
*/
|
|
*/
|
|
|
const generateNextLast = useCallback(() => {
|
|
const generateNextLast = useCallback(() => {
|
|
|
- const paginationItems = [];
|
|
|
|
|
|
|
+ const paginationItems: JSX.Element[] = [];
|
|
|
if (totalPage !== activePage) {
|
|
if (totalPage !== activePage) {
|
|
|
paginationItems.push(
|
|
paginationItems.push(
|
|
|
<PaginationItem key="painationItemNext">
|
|
<PaginationItem key="painationItemNext">
|
|
@@ -133,7 +136,7 @@ const PaginationWrapper = React.memo((props) => {
|
|
|
}, [activePage, changePage, totalPage]);
|
|
}, [activePage, changePage, totalPage]);
|
|
|
|
|
|
|
|
const getListClassName = useMemo(() => {
|
|
const getListClassName = useMemo(() => {
|
|
|
- const listClassNames = [];
|
|
|
|
|
|
|
+ const listClassNames: string[] = [];
|
|
|
|
|
|
|
|
if (align === 'center') {
|
|
if (align === 'center') {
|
|
|
listClassNames.push('justify-content-center');
|
|
listClassNames.push('justify-content-center');
|
|
@@ -157,15 +160,6 @@ const PaginationWrapper = React.memo((props) => {
|
|
|
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-PaginationWrapper.propTypes = {
|
|
|
|
|
- activePage: PropTypes.number.isRequired,
|
|
|
|
|
- changePage: PropTypes.func,
|
|
|
|
|
- totalItemsCount: PropTypes.number.isRequired,
|
|
|
|
|
- pagingLimit: PropTypes.number,
|
|
|
|
|
- align: PropTypes.string,
|
|
|
|
|
- size: PropTypes.string,
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
PaginationWrapper.defaultProps = {
|
|
PaginationWrapper.defaultProps = {
|
|
|
align: 'left',
|
|
align: 'left',
|
|
|
size: 'md',
|
|
size: 'md',
|