react-rating-tooltip
v1.3.1
Published
React Star Rating/Review Component with tooltip support
Downloads
7,361
Readme
React-Rating-Tooltip
React-rating-tooltip is a simple to use yet completely customizable component for getting use Rating/Reviews.
- Fully CSS customizable - Styles of Rating Counter, star-container, selected status and tooltip style
- Custom position of rating counter and selected status around the Rating
- Active(Selected) & Inactive(Unselected) components of the rating
- Customize Tooltip, clear rating etc.
Installation
This requires [React.js and Prop-Types] to run.
npm i react-rating-tooltip
Demo
How to Use
Install and import react-rating-tooltip and pass the props as per the below table
import React from 'react';
import Rating from 'react-rating-tooltip';
import 'font-awesome/css/font-awesome.min.css';
class SampleRating extends React.Component{
constructor(props) {
super(props);
this.state = {
max: 4,
defaultRating: 2,
counterPosition: 'left',
clearRating: true,
textPosition: 'right',
tooltipContent: ["Very Bad", "Bad", "Fair", "Good", "Very Good"],
ratingValue: ["Very Bad", "Bad", "Fair", "Good", "Very Good"],
starStyle: {
height: '28px',
backgroundColor: '#F2F2F2',
paddingLeft: '2px',
paddingRight: '2px',
color: '#F58220',
lineHeight: '28px',
marginLeft: '5px',
marginRight: '5px',
},
styleConfig: {
counterStyle: {
height: '28px',
backgroundColor: '#F58220',
paddingLeft: '12px',
paddingRight: '12px',
color: '#FFF',
lineHeight: '28px',
},
starContainer: {
fontSize: '24px',
backgroundColor: '#F2F2F2',
height: '28px',
},
statusStyle: {
height: '28px',
backgroundColor: '#F58220',
paddingLeft: '12px',
paddingRight: '12px',
color: '#FFF',
lineHeight: '28px',
minWidth: '100px',
fontSize: '18px',
textAlign: 'center',
},
tooltipStyle: {
fontSize: '14px',
padding: '5px',
}
}
}
}
handleChange = (RatingIndex, RatingValue) => {
console.log(RatingIndex, RatingValue);
}
render() {
return(
<Rating
max = {this.state.max}
defaultRating = {this.state.defaultRating}
counterPosition = {this.state.counterPosition}
clearRating = {this.state.clearRating}
textPosition = {this.state.textPosition}
tooltipContent = {this.state.tooltipContent}
ratingValue={this.state.ratingValue}
styleConfig = {this.state.styleConfig}
onChange={this.handleChange}
ActiveComponent={<i className="fa fa-star" style={this.state.starStyle} />}
InActiveComponent={<i className="fa fa-star-o" style={this.state.starStyle} />}
/>
);
}
}
export default SampleRating;
Prop-Types
Details of the Props to be passed:
| Prop-name | Type | Description |
| ----------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| max | Number | Required
. This determines the maximum number of Stars or Rating in the Component. |
| defaultRating | Number | Default value - 0
. This determines the current number of selected Stars or Rating in the Component. |
| counterPosition | String | Possible Values - ['left', 'right']
. This determines the position of the Rating Count in the Component. If not passed, Count will not be displayed. |
| textPosition | String | Possible Values - ['left', 'right']
. This determines the position of the Rating Value (Status) in the Component. If not passed, Select value will not be displayed. |
| clearRating | Boolean | Default Value - true
. This determines whether the rating can be cleared/reset. If passed true, clicking again on the same rating count will clear the rating. |
| disabled | Boolean | Default Value - false
. This determines whether the rating can be enabled/disabled. If passed true, the rating component will be disabled and act as Read only component |
| tooltipContent | Array | The Array of values as tooltip. Tooltips Values are matched to Rating count based on index. If not passed, tooltip will not be added |
| ratingValue | Array | The Array of values for Rating count. Rating Values are matched to Rating count based on index. If not passed, Values will not be set |
| onChange | Function | Required
. A callback function which gets two arguements on every change of Rating - Rating count, Rating Value (if passed)
|
| ActiveComponent | React/HTML Element | Required
. The component or element to be considered as Selected rating |
| InActiveComponent | React/HTML Element | Required
. The component or element to be considered as Left-out rating |
| styleConfig | Object | See the below table for more details
. Its a Nested object with specific styles for specific parts of the Component |
styleConfig Details
Details of the styleConfig:
| Prop-name | Type | Description | | ------------- | ------ | --------------------------------------------------------------------------------------------------- | | counterStyle | Object | CSS styles to be applied to the Part of the component where the Rating count is displayed | | starContainer | Object | CSS styles to be applied to the Part of the component container where the stars/Rating is displayed | | statusStyle | Object | CSS styles to be applied to the Part of the component where the Rating value/status is displayed | | tooltipStyle | Object | CSS styles to be applied to the tooltips of the component |
Please check the example for styleConfig
Props:
Prop-Types:
{
max: PropTypes.number.isRequired,
defaultRating: PropTypes.number,
counterPosition: PropTypes.oneOf(['left', 'right']),
clearRating: PropTypes.bool,
disabled: PropTypes.bool,
textPosition: PropTypes.oneOf(['left', 'right']),
tooltipContent: PropTypes.array,
ratingValue: PropTypes.array,
styleConfig: PropTypes.shape({
counterStyle: PropTypes.object,
starContainer: PropTypes.object,
statusStyle: PropTypes.object,
tooltipStyle: PropTypes.object,
}),
onChange: PropTypes.func.isRequired,
ActiveComponent: PropTypes.oneOfType([
PropTypes.node,
PropTypes.element
]).isRequired,
InActiveComponent: PropTypes.oneOfType([
PropTypes.node,
PropTypes.element
]).isRequired,
}
Default-Props
{
clearRating: true,
disabled: false,
defaultRating: 0,
styleConfig: {
counterStyle: {
height: '28px',
backgroundColor: '#F58220',
paddingLeft: '12px',
paddingRight: '12px',
color: '#FFF',
lineHeight: '28px',
},
starContainer: {
fontSize: '24px',
backgroundColor: '#F2F2F2',
height: '28px',
},
statusStyle: {
height: '28px',
backgroundColor: '#F58220',
paddingLeft: '12px',
paddingRight: '12px',
color: '#FFF',
lineHeight: '28px',
minWidth: '100px',
fontSize: '18px',
textAlign: 'center',
},
tooltipStyle: {
fontSize: '14px',
padding: '5px',
}
}
}
Contribution
You are welcome to raise issues and PRs in the repository.