46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import PropTypes from 'prop-types';
 | 
						|
import { useCallback } from 'react';
 | 
						|
 | 
						|
import { defineMessages, useIntl } from 'react-intl';
 | 
						|
 | 
						|
import ExpandLessIcon from '@/material-icons/400-24px/expand_less.svg?react';
 | 
						|
 | 
						|
import { IconButton } from './icon_button';
 | 
						|
 | 
						|
const messages = defineMessages({
 | 
						|
  collapse: { id: 'status.collapse', defaultMessage: 'Collapse' },
 | 
						|
  uncollapse: { id: 'status.uncollapse', defaultMessage: 'Uncollapse' },
 | 
						|
});
 | 
						|
 | 
						|
export const CollapseButton = ({ collapsed, setCollapsed }) => {
 | 
						|
  const intl = useIntl();
 | 
						|
 | 
						|
  const handleCollapsedClick = useCallback((e) => {
 | 
						|
    if (e.button === 0) {
 | 
						|
      setCollapsed(!collapsed);
 | 
						|
      e.preventDefault();
 | 
						|
    }
 | 
						|
  }, [collapsed, setCollapsed]);
 | 
						|
 | 
						|
  return (
 | 
						|
    <IconButton
 | 
						|
      className='status__collapse-button'
 | 
						|
      animate
 | 
						|
      active={collapsed}
 | 
						|
      title={
 | 
						|
        collapsed ?
 | 
						|
          intl.formatMessage(messages.uncollapse) :
 | 
						|
          intl.formatMessage(messages.collapse)
 | 
						|
      }
 | 
						|
      icon='angle-double-up'
 | 
						|
      iconComponent={ExpandLessIcon}
 | 
						|
      onClick={handleCollapsedClick}
 | 
						|
    />
 | 
						|
  );
 | 
						|
};
 | 
						|
 | 
						|
CollapseButton.propTypes = {
 | 
						|
  collapsed: PropTypes.bool,
 | 
						|
  setCollapsed: PropTypes.func.isRequired,
 | 
						|
};
 |