-
-
Notifications
You must be signed in to change notification settings - Fork 268
/
Copy pathCPaginationLink.js
114 lines (96 loc) · 2.2 KB
/
CPaginationLink.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import React, {useContext} from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import {tagPropType, mapToCssModules} from './Shared/helper.js';
import {Context} from './CPagination';
//component - CoreUI / CPaginationLink
const CPaginationLink = props=>{
let {
tag: Tag,
className,
cssModule,
//
innerRef,
next,
previous,
onClick,
type,
n,
...attributes
} = props;
const context = useContext(Context);
const linkClick = (e)=>{
onClick && onClick(e, type, n);
context.paginationClick && context.paginationClick(e, type, n);
}
//render
const classes = mapToCssModules(classNames(
className,
'page-link'
), cssModule);
let defaultAriaLabel;
if (previous) {
defaultAriaLabel = 'Previous';
} else if (next) {
defaultAriaLabel = 'Next';
}
const ariaLabel = props['aria-label'] || defaultAriaLabel;
let defaultCaret;
if (previous) {
defaultCaret = <React.Fragment>‹</React.Fragment>;
} else if (next) {
defaultCaret = <React.Fragment>›</React.Fragment>;
}
let children = props.children;
if (children && Array.isArray(children) && children.length === 0) {
children = null;
}
if (!attributes.href && Tag === 'a') {
Tag = 'button';
}
if (previous || next) {
children = [
<span
aria-hidden="true"
key="caret"
>
{children || defaultCaret}
</span>,
<span
className="sr-only"
key="sr"
>
{ariaLabel}
</span>,
];
}
return (
<Tag
{...attributes}
className={classes}
onClick={linkClick}
aria-label={ariaLabel}
ref={innerRef}
>
{children}
</Tag>
);
}
CPaginationLink.propTypes = {
tag: tagPropType,
children: PropTypes.node,
className: PropTypes.string,
cssModule: PropTypes.object,
//
innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),
next: PropTypes.bool,
type: PropTypes.string,
n: PropTypes.number,
previous: PropTypes.bool,
onClick: PropTypes.func,
'aria-label': PropTypes.string
};
CPaginationLink.defaultProps = {
tag: 'a',
};
export default CPaginationLink;