react-image-zoom
Version:
react based image zoomer on mouse hover
48 lines (40 loc) • 1.24 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import './styles.scss';
import {StoreContext, UPDATE_OPTIONS} from '../../reducer';
export function Option({name, options}) {
const {dispatch} = React.useContext(StoreContext);
const onRadioBtnChange = (e) => {
const newOptions = {...options};
Object.keys(newOptions).forEach((key) => {
newOptions[key].checked = false;
});
newOptions[e.target.value].checked = true;
dispatch({
type: UPDATE_OPTIONS, payload: {
key: name,
value: newOptions,
},
});
};
const renderOption = ({key, value, checked}) => (
<label key={value} className='option__property'>
<input type="radio" id={key} name={key} value={value} checked={checked} onChange={onRadioBtnChange}/>
<div className='option__property_caption'>{value}</div>
</label>
);
return (
<div className='option'>
<div className='option__name'>
{`${name}: `}
</div>
<div className='option__options'>
{Object.keys(options).map((key) => renderOption(options[key]))}
</div>
</div>
);
}
Option.propTypes = {
name: PropTypes.string.isRequired,
options: PropTypes.object.isRequired,
};