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.
		
		
		
		
		
			
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
import { MouseEvent } from 'react';
 | 
						|
import { useDispatch } from 'react-redux';
 | 
						|
import styled from 'styled-components';
 | 
						|
import { updateConfirmModal } from '../../state/ducks/modalDialog';
 | 
						|
 | 
						|
const StyledKnob = styled.div<{ active: boolean }>`
 | 
						|
  position: absolute;
 | 
						|
  top: ${props => (props.active ? '1px' : '0.5px')};
 | 
						|
  left: ${props => (props.active ? '2px' : '0.5px')};
 | 
						|
  height: 21px;
 | 
						|
  width: 21px;
 | 
						|
  border-radius: 28px;
 | 
						|
  background-color: var(--toggle-switch-ball-color);
 | 
						|
  box-shadow: ${props =>
 | 
						|
    props.active
 | 
						|
      ? '-2px 1px 3px var(--toggle-switch-ball-shadow-color);'
 | 
						|
      : '2px 1px 3px var(--toggle-switch-ball-shadow-color);'};
 | 
						|
 | 
						|
  transition:
 | 
						|
    transform var(--default-duration) ease,
 | 
						|
    background-color var(--default-duration) ease;
 | 
						|
 | 
						|
  transform: ${props => (props.active ? 'translateX(25px)' : '')};
 | 
						|
`;
 | 
						|
 | 
						|
const StyledSessionToggle = styled.div<{ active: boolean }>`
 | 
						|
  width: 51px;
 | 
						|
  height: 25px;
 | 
						|
  background-color: (--toggle-switch-off-background-color);
 | 
						|
  border: 1px solid var(--toggle-switch-off-border-color);
 | 
						|
  border-radius: 16px;
 | 
						|
  position: relative;
 | 
						|
  cursor: pointer;
 | 
						|
  transition: var(--default-duration);
 | 
						|
  flex-shrink: 0;
 | 
						|
 | 
						|
  background-color: ${props =>
 | 
						|
    props.active
 | 
						|
      ? 'var(--toggle-switch-on-background-color)'
 | 
						|
      : 'var(--toggle-switch-off-background-color)'};
 | 
						|
  border-color: ${props =>
 | 
						|
    props.active
 | 
						|
      ? 'var(--toggle-switch-on-border-color)'
 | 
						|
      : 'var(--toggle-switch-off-border-color)'};
 | 
						|
`;
 | 
						|
 | 
						|
type Props = {
 | 
						|
  active: boolean;
 | 
						|
  onClick: () => void;
 | 
						|
  confirmationDialogParams?: any | undefined;
 | 
						|
  dataTestId?: string;
 | 
						|
};
 | 
						|
 | 
						|
export const SessionToggle = (props: Props) => {
 | 
						|
  const dispatch = useDispatch();
 | 
						|
 | 
						|
  const clickHandler = (event: MouseEvent<HTMLDivElement>) => {
 | 
						|
    const stateManager = (e: any) => {
 | 
						|
      e.stopPropagation();
 | 
						|
      props.onClick();
 | 
						|
    };
 | 
						|
 | 
						|
    if (props.confirmationDialogParams) {
 | 
						|
      // If item needs a confirmation dialog to turn ON, render it
 | 
						|
      const closeConfirmModal = () => {
 | 
						|
        dispatch(updateConfirmModal(null));
 | 
						|
      };
 | 
						|
 | 
						|
      dispatch(
 | 
						|
        updateConfirmModal({
 | 
						|
          onClickOk: () => {
 | 
						|
            stateManager(event);
 | 
						|
            closeConfirmModal();
 | 
						|
          },
 | 
						|
          onClickClose: () => {
 | 
						|
            updateConfirmModal(null);
 | 
						|
          },
 | 
						|
          ...props.confirmationDialogParams,
 | 
						|
          updateConfirmModal,
 | 
						|
        })
 | 
						|
      );
 | 
						|
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    stateManager(event);
 | 
						|
  };
 | 
						|
 | 
						|
  return (
 | 
						|
    <StyledSessionToggle
 | 
						|
      role="button"
 | 
						|
      onClick={clickHandler}
 | 
						|
      active={props.active}
 | 
						|
      data-testid={props.dataTestId}
 | 
						|
    >
 | 
						|
      <StyledKnob active={props.active} />
 | 
						|
    </StyledSessionToggle>
 | 
						|
  );
 | 
						|
};
 |