gab-social/app/javascript/gabsocial/components/status_action_bar_item.js

86 lines
1.9 KiB
JavaScript
Raw Normal View History

import React from 'react'
import PropTypes from 'prop-types'
import {
CX,
BREAKPOINT_SMALL,
} from '../constants'
import Responsive from '../features/ui/util/responsive_component'
2020-04-02 17:57:04 +01:00
import Button from './button'
import Text from './text'
2020-02-28 15:20:47 +00:00
class StatusActionBarItem extends React.PureComponent {
2020-02-28 15:20:47 +00:00
render() {
2020-03-25 03:08:43 +00:00
const {
title,
onClick,
icon,
active,
disabled,
2020-04-07 02:53:23 +01:00
buttonRef,
altTitle,
isCompact,
2020-03-25 03:08:43 +00:00
} = this.props
2020-02-28 15:20:47 +00:00
2020-05-01 06:50:27 +01:00
const btnClasses = CX({
jcCenter: 1,
aiCenter: 1,
px10: !isCompact,
2020-04-29 23:32:49 +01:00
bgSubtle_onHover: !disabled,
2020-02-28 15:20:47 +00:00
})
2020-05-01 06:50:27 +01:00
const iconClasses = CX({
d: 1,
2020-05-01 06:50:27 +01:00
inheritFill: 1,
mr10: !!title && !isCompact,
2020-05-01 06:50:27 +01:00
})
2020-04-02 17:57:04 +01:00
const color = active ? 'brand' : 'secondary'
const weight = active ? 'bold' : 'medium'
2020-02-28 15:20:47 +00:00
return (
<div className={[_s.d, _s.px5, _s.flexNormal].join(' ')}>
2020-04-02 17:57:04 +01:00
<Button
2020-04-23 07:13:29 +01:00
isBlock
2020-04-02 17:57:04 +01:00
radiusSmall
backgroundColor='none'
2020-04-07 02:53:23 +01:00
title={altTitle}
2020-04-02 17:57:04 +01:00
color={color}
buttonRef={buttonRef}
2020-02-28 15:20:47 +00:00
className={btnClasses}
onClick={onClick}
2020-04-23 07:13:29 +01:00
isDisabled={disabled}
2020-04-02 17:57:04 +01:00
icon={icon}
iconSize='16px'
2020-05-01 06:50:27 +01:00
iconClassName={iconClasses}
>
{
!!title && !isCompact &&
<Responsive min={BREAKPOINT_SMALL}>
<Text color='inherit' size='small' weight={weight}>
{title}
</Text>
</Responsive>
2020-05-01 06:50:27 +01:00
}
2020-04-02 17:57:04 +01:00
</Button>
2020-02-28 15:20:47 +00:00
</div>
)
}
2020-05-15 03:31:24 +01:00
}
StatusActionBarItem.propTypes = {
title: PropTypes.string.isRequired,
altTitle: PropTypes.string,
onClick: PropTypes.func.isRequired,
icon: PropTypes.string.isRequired,
active: PropTypes.bool,
disabled: PropTypes.bool,
isCompact: PropTypes.bool,
buttonRef: PropTypes.oneOf([
PropTypes.func,
PropTypes.node,
]),
}
export default StatusActionBarItem