You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
| import React, { useEffect, useState } from 'react';
 | |
| 
 | |
| import { SessionRadio } from './SessionRadio';
 | |
| 
 | |
| interface Props {
 | |
|   // tslint:disable: react-unused-props-and-state
 | |
|   initialItem: string;
 | |
|   items: Array<any>;
 | |
|   group: string;
 | |
|   onClick: (selectedValue: string) => any;
 | |
| }
 | |
| 
 | |
| export const SessionRadioGroup = (props: Props) => {
 | |
|   const [activeItem, setActiveItem] = useState('');
 | |
|   const { items, group, initialItem } = props;
 | |
| 
 | |
|   useEffect(() => {
 | |
|     setActiveItem(initialItem);
 | |
|   }, []);
 | |
| 
 | |
|   return (
 | |
|     <div className="session-radio-group">
 | |
|       <fieldset id={group}>
 | |
|         {items.map(item => {
 | |
|           const itemIsActive = item.value === activeItem;
 | |
| 
 | |
|           return (
 | |
|             <SessionRadio
 | |
|               key={item.value}
 | |
|               label={item.label}
 | |
|               active={itemIsActive}
 | |
|               value={item.value}
 | |
|               group={group}
 | |
|               onClick={(value: string) => {
 | |
|                 setActiveItem(value);
 | |
|                 props.onClick(value);
 | |
|               }}
 | |
|             />
 | |
|           );
 | |
|         })}
 | |
|       </fieldset>
 | |
|     </div>
 | |
|   );
 | |
| };
 |