@shakthillc/components
Version:
React generic components for shakthi products
78 lines (73 loc) • 2.33 kB
JavaScript
import React from "react";
import PropTypes from "prop-types";
import style from "./RadioGroupAvatar.module.css";
import Avatar from "./../Avatar/Avatar";
export default class RadioGroupAvatar extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedOption: props.selectedOption,
};
}
handleOptionChange(id, data) {
var { onChange } = this.props;
this.setState({
selectedOption: id,
});
onChange && onChange(id, data);
}
componentDidUpdate(prevProps, prevState) {
const { selectedOption,options } = this.props;
if (options.length> 0 && (prevProps.selectedOption == "" || prevProps.selectedOption != selectedOption)) {
this.setState({ selectedOption });
}
}
render() {
let { options,id="defaultRadio" } = this.props;
let optionHtml = options.map((obj, i) => {
return (
<label key={i} className={style["radio-button"]}>
<div className={style["radio-button__holder"]}>
<Avatar size="32px" imageUrl={obj.url} text={obj.value} />
<div style={{ cursor: "pointer" }}>{obj.value}</div>
</div>
<input
type="radio"
checked={this.state.selectedOption === obj.id}
name="radio"
onClick={this.handleOptionChange.bind(this, obj.id, obj)}
/>
<span
className={style["radio-button__checkmark"]}
value={obj.value}
id={obj.id}
data-id={'option'+i}
></span>
</label>
);
});
return <div data-id={id} className={style["radio-group"]}>{optionHtml}</div>;
}
}
RadioGroupAvatar.defaultProps = {
isChecked: false,
disabled: false,
dataId: "checkBoxComp",
label: "CheckBox",
onChange: function (id, data) {
console.log("inbuilt", id, data);
},
options: [
{ id: "option1", value: "Kevin" },
{ id: "option2", value: "rick", url: "https://picsum.photos/200/300" },
{ id: "option3", value: "morty" },
{ id: "option4", value: "Jenny", url: "" },
],
};
RadioGroupAvatar.propTypes = {
isChecked: PropTypes.bool,
disabled: PropTypes.bool,
dataId: PropTypes.string,
label: PropTypes.string,
options: PropTypes.array,
};