// @flow
import * as React from 'react'
import { colors } from '../global-colors'
import Color from 'color'
import RoleStyled from './role.styled'
import Tooltip from '../tooltip'
// import logger from '../../../logger'
// const log = logger(__filename)
const fromColors = (colors) => Object.entries(colors).reduce(
(acc, [v, val]) => ({ ...acc, [`--role-color-${v}`]: val })
, {})
export type RoleData = {
color: string,
name: string,
}
export type RoleProps = {
active?: boolean, // is lit up as if it's in use
disabled?: boolean, // is interaction-disabled
type?: 'drag' | 'button',
role: RoleData,
isDragging?: boolean,
onToggle?: (nextState: boolean, lastState: boolean) => void,
connectDragSource?: (component: React.Node) => void
}
// const tooltip = ({ show = true, text, ...rest }) =>
{text}
type RoleState = {
hovering: boolean
}
export default class Role extends React.Component {
state = {
hovering: false
}
onToggle = () => {
if (!this.props.disabled && this.props.onToggle) {
const { active = false } = this.props
this.props.onToggle(!active, active)
}
}
onMouseOver = () => {
// log.debug('caught hovering')
if (this.props.disabled && this.state.hovering === false) {
// log.debug('set hovering')
this.setState({ hovering: true })
}
}
onMouseOut = () => {
// log.debug('out hovering')
this.setState({ hovering: false })
}
render () {
let color = Color(this.props.role.color)
if (this.props.role.color === 0) {
color = colors.white
}
const roleColors = {
'outline': Color(color).alpha(0.7).hsl().string(),
'outline-alt': Color(color).alpha(0.4).hsl().string(),
'active': Color(color).lighten(0.1).hsl().string(),
'base': Color(color).hsl().string()
}
const name = (this.props.role.name !== '') ? this.props.role.name : ' '
return
{name}
{ (this.props.disabled && this.state.hovering) && This role has unsafe permissions. }
}
}