Skip to content

Commit a3b3ccc

Browse files
committed
fix: form components refactor:
- add specific components: CTextarea, CInputCheckbox, CInputRadio, CInputFile - CLabel inherits CCol, api rewrite, - CFormGroup variant prop instead of 'check' (more cases) - CFormText: delete inline prop - delete tag in feedback, inputgroup, addon - split addon into append and prepend - smaller refactors and clean
1 parent ef444f0 commit a3b3ccc

9 files changed

+249
-330
lines changed

src/CFormFeedback.js

+15-25
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,33 @@
1-
import React from 'react';
2-
import PropTypes from 'prop-types';
3-
import classNames from 'classnames';
4-
import {tagPropType, mapToCssModules} from './Shared/helper.js';
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
import classNames from 'classnames'
4+
import { mapToCssModules } from './Shared/helper.js'
55

66
//component - CoreUI / CFormFeedback
77

8-
const CFormFeedback = props=>{
8+
const CFormFeedback = props => {
99

1010
const {
11-
tag: Tag,
1211
className,
1312
cssModule,
1413
//
1514
innerRef,
1615
valid,
1716
tooltip,
1817
...attributes
19-
} = props;
18+
} = props
2019

2120
//render
21+
const validMode = tooltip ? 'tooltip' : 'feedback'
22+
const classes = mapToCssModules(classNames(
23+
valid ? `valid-${validMode}` : `invalid-${validMode}`,
24+
className
25+
),cssModule)
2226

23-
const validMode = tooltip ? 'tooltip' : 'feedback';
24-
const classes = mapToCssModules(
25-
classNames(
26-
className,
27-
valid ? `valid-${validMode}` : `invalid-${validMode}`
28-
),
29-
cssModule
30-
);
31-
32-
return <Tag {...attributes} className={classes} ref={innerRef} />;
33-
27+
return <div className={classes} {...attributes} ref={innerRef} />
3428
}
3529

3630
CFormFeedback.propTypes = {
37-
tag: tagPropType,
3831
children: PropTypes.node,
3932
className: PropTypes.string,
4033
cssModule: PropTypes.object,
@@ -44,9 +37,6 @@ CFormFeedback.propTypes = {
4437
tooltip: PropTypes.bool
4538
};
4639

47-
CFormFeedback.defaultProps = {
48-
tag: 'div',
49-
valid: undefined
50-
};
51-
52-
export default CFormFeedback;
40+
// export const CValidFeedback = props => <CFormFeedback {...props} valid/>
41+
// export const CInvalidFeedback = props => <CFormFeedback {...props} valid={false}/>
42+
export default CFormFeedback

src/CFormGroup.js

+21-23
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,54 @@
1-
import React from 'react';
2-
import PropTypes from 'prop-types';
3-
import classNames from 'classnames';
4-
import {tagPropType, mapToCssModules} from './Shared/helper.js';
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
import classNames from 'classnames'
4+
import { mapToCssModules } from './Shared/helper.js'
55

66
//component - CoreUI / CFormGroup
7-
8-
const CFormGroup = props=>{
7+
const CFormGroup = props => {
98

109
const {
11-
tag: Tag,
1210
className,
1311
cssModule,
1412
//
1513
innerRef,
1614
row,
1715
disabled,
18-
check,
16+
variant,
1917
inline,
2018
...attributes
21-
} = props;
19+
} = props
2220

2321
//render
22+
const checkClass = variant && variant.includes('custom') ? 'custom-control' : 'form-check'
2423

2524
const classes = mapToCssModules(classNames(
26-
className,
27-
row ? 'row' : false,
28-
check ? 'form-check' : 'form-group',
29-
check && inline ? 'form-check-inline' : false,
30-
check && disabled ? 'disabled' : false
31-
), cssModule);
25+
row && 'row',
26+
!variant && 'form-group',
27+
variant && checkClass,
28+
variant === 'custom-radio' && 'custom-radio',
29+
variant === 'custom-checkbox' && 'custom-checkbox',
30+
variant && inline && `${checkClass}-inline`,
31+
variant && disabled && 'disabled',
32+
className
33+
), cssModule)
3234

3335
return (
34-
<Tag {...attributes} className={classes} ref={innerRef} />
35-
);
36+
<div className={classes} {...attributes} ref={innerRef}/>
37+
)
3638

3739
}
3840

3941
CFormGroup.propTypes = {
40-
tag: tagPropType,
4142
children: PropTypes.node,
4243
className: PropTypes.string,
4344
cssModule: PropTypes.object,
4445
//
4546
innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),
4647
row: PropTypes.bool,
47-
check: PropTypes.bool,
48+
variant: PropTypes.oneOf(['checkbox', 'custom-checkbox', 'custom-radio']),
4849
inline: PropTypes.bool,
4950
disabled: PropTypes.bool
5051
};
5152

52-
CFormGroup.defaultProps = {
53-
tag: 'div',
54-
};
5553

56-
export default CFormGroup;
54+
export default CFormGroup

src/CFormText.js

+12-17
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
1-
import React from 'react';
2-
import PropTypes from 'prop-types';
3-
import classNames from 'classnames';
4-
import {tagPropType, mapToCssModules} from './Shared/helper.js';
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
import classNames from 'classnames'
4+
import { tagPropType, mapToCssModules } from './Shared/helper.js'
55

66
//component - CoreUI / CFormText
7-
8-
const CFormText = props=>{
7+
const CFormText = props => {
98

109
const {
1110
tag: Tag,
1211
className,
1312
cssModule,
1413
innerRef,
1514
//
16-
inline,
1715
color,
1816
...attributes
19-
} = props;
17+
} = props
2018

2119
//render
2220

2321
const classes = mapToCssModules(classNames(
24-
className,
25-
!inline ? 'form-text' : false,
26-
color ? `text-${color}` : false
27-
), cssModule);
22+
'form-text', color && `text-${color}`, className
23+
), cssModule)
2824

2925
return (
30-
<Tag {...attributes} className={classes} ref={innerRef} />
31-
);
26+
<Tag className={classes} {...attributes} ref={innerRef}/>
27+
)
3228

3329
}
3430

@@ -39,13 +35,12 @@ CFormText.propTypes = {
3935
cssModule: PropTypes.object,
4036
//
4137
innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),
42-
inline: PropTypes.bool,
4338
color: PropTypes.string
4439
};
4540

4641
CFormText.defaultProps = {
4742
tag: 'small',
48-
color: 'muted',
43+
color: 'muted'
4944
};
5045

51-
export default CFormText;
46+
export default CFormText

0 commit comments

Comments
 (0)