switch to PatternFly Tooltip everywhere

This commit is contained in:
Keith Grant 2019-03-12 15:24:36 -04:00
parent 601214f6d4
commit 188eaede43
6 changed files with 8 additions and 173 deletions

View File

@ -1,69 +0,0 @@
import React from 'react';
import { mount } from 'enzyme';
import Tooltip from '../../src/components/Tooltip';
describe('<Tooltip />', () => {
let elem;
let content;
let mouseOverHandler;
let mouseOutHandler;
const child = (<span>foo</span>);
const message = 'hi';
test('initially renders without crashing', () => {
elem = mount(
<Tooltip message={message}>
{child}
</Tooltip>
);
expect(elem.length).toBe(1);
});
test('shows/hides with mouse over and leave', () => {
elem = mount(
<Tooltip message={message}>
{child}
</Tooltip>
);
mouseOverHandler = elem.find('.mouseOverHandler');
mouseOutHandler = elem.find('.mouseOutHandler');
expect(elem.state().isDisplayed).toBe(false);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(0);
mouseOverHandler.props().onMouseOver();
expect(elem.state().isDisplayed).toBe(true);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(1);
mouseOutHandler.props().onMouseLeave();
expect(elem.state().isDisplayed).toBe(false);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(0);
});
test('shows/hides with focus and blur', () => {
elem = mount(
<Tooltip message={message}>
{child}
</Tooltip>
);
mouseOverHandler = elem.find('.mouseOverHandler');
mouseOutHandler = elem.find('.mouseOutHandler');
expect(elem.state().isDisplayed).toBe(false);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(0);
mouseOverHandler.props().onFocus();
expect(elem.state().isDisplayed).toBe(true);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(1);
mouseOutHandler.props().onBlur();
expect(elem.state().isDisplayed).toBe(false);
elem.update();
content = elem.find('.pf-c-tooltip__content');
expect(content.length).toBe(0);
});
});

View File

@ -216,6 +216,10 @@
--pf-c-tooltip__content--PaddingBottom: 0.71rem;
--pf-c-tooltip__content--PaddingLeft: 0.71rem;
}
// higher specificity needed to override PF styles added dynamically to page
.pf-c-tooltip .pf-c-tooltip__content {
text-align: left;
}
//
// pf empty state overrides

View File

@ -15,6 +15,7 @@ import {
Toolbar,
ToolbarGroup,
ToolbarItem,
Tooltip,
} from '@patternfly/react-core';
import {
BarsIcon,
@ -30,7 +31,6 @@ import {
Link
} from 'react-router-dom';
import Tooltip from '../Tooltip';
import VerticalSeparator from '../VerticalSeparator';
const flexGrowStyling = {
@ -291,7 +291,7 @@ class DataListToolbar extends React.Component {
<LevelItem>
{ showDelete && (
<Tooltip
message={i18n._(t`Delete`)}
content={i18n._(t`Delete`)}
position="top"
>
<Button

View File

@ -1,9 +1,8 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { Button } from '@patternfly/react-core';
import { Button, Tooltip } from '@patternfly/react-core';
import { TimesIcon } from '@patternfly/react-icons';
import Tooltip from '../Tooltip';
import './tabs.scss';
const Tabs = ({ children, labelText, closeButton }) => (
@ -17,7 +16,7 @@ const Tabs = ({ children, labelText, closeButton }) => (
{closeButton
&& (
<Tooltip
message={closeButton.text}
content={closeButton.text}
position="top"
>
<Link to={closeButton.link}>

View File

@ -1,96 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
const toolTipContent = {
padding: '10px',
minWidth: '100px',
};
class Tooltip extends React.Component {
transforms = {
top: {
bottom: '100%',
left: '50%',
transform: 'translate(-50%, -25%)'
},
bottom: {
top: '100%',
left: '50%',
transform: 'translate(-50%, 25%)'
},
left: {
top: '50%',
right: '100%',
transform: 'translate(-25%, -50%)'
},
right: {
bottom: '100%',
left: '50%',
transform: 'translate(25%, 50%)'
},
};
constructor (props) {
super(props);
this.state = {
isDisplayed: false
};
}
render () {
const {
children,
message,
position,
} = this.props;
const {
isDisplayed
} = this.state;
if (message === '') {
return null;
}
return (
<span
style={{ position: 'relative' }}
className="mouseOutHandler"
onMouseLeave={() => this.setState({ isDisplayed: false })}
onBlur={() => this.setState({ isDisplayed: false })}
>
{ isDisplayed
&& (
<div
style={{ position: 'absolute', zIndex: '10', ...this.transforms[position] }}
className={`pf-c-tooltip pf-m-${position}`}
>
<div className="pf-c-tooltip__arrow" />
<div className="pf-c-tooltip__content" style={toolTipContent}>
{ message }
</div>
</div>
)
}
<span
className="mouseOverHandler"
onMouseOver={() => this.setState({ isDisplayed: true })}
onFocus={() => this.setState({ isDisplayed: true })}
>
{ children }
</span>
</span>
);
}
}
Tooltip.propTypes = {
children: PropTypes.element.isRequired,
message: PropTypes.string.isRequired,
position: PropTypes.string,
};
Tooltip.defaultProps = {
position: 'top',
};
export default Tooltip;

View File

@ -1,3 +0,0 @@
import Tooltip from './Tooltip';
export default Tooltip;