All files / packages/design-system/ui/components/button-icons/menu index.jsx

100% Statements 6/6
75% Branches 6/8
100% Functions 0/0
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63                      3x 3x                             2x           3x 3x                                           2x            
// Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
// Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license
 
import React from 'react';
import PropTypes from 'prop-types';
import SvgIcon from '../../../shared/svg-icon';
import { Button } from '../../buttons/base/example';
import ButtonIcon from '../';
import classNames from 'classnames';
 
const ButtonText = props => {
  const { label, assistiveText, type } = props;
  return (
    <Button aria-haspopup role={type === 'tabs' && 'tab'}>
      {label}
      {assistiveText && (
        <span className="slds-assistive-text">{assistiveText}</span>
      )}
      <SvgIcon
        className="slds-button__icon slds-button__icon_x-small slds-button__icon_right"
        sprite="utility"
        symbol="down"
      />
    </Button>
  );
};
 
ButtonText.propTypes = {
  label: PropTypes.string,
  assistiveText: PropTypes.string
};
 
export const ButtonMenu = props => {
  const { isOpen, label, symbol, assistiveText, children, type } = props;
  return (
    <div
      className={classNames(
        'slds-dropdown-trigger slds-dropdown-trigger_click',
        isOpen && 'slds-is-open'
      )}
    >
      {label ? (
        <ButtonText label={label} assistiveText={assistiveText} type={type} />
      ) : (
        <ButtonIcon
          isOpen
          hasDropdown
          symbol={symbol}
          assistiveText={assistiveText}
        />
      )}
      {children}
    </div>
  );
};
 
ButtonMenu.propTypes = {
  isOpen: PropTypes.bool,
  symbol: PropTypes.string,
  assistiveText: PropTypes.string,
  children: PropTypes.node
};