mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-07 14:05:44 +01:00
fix bouncing help icons on mobiles devices
This commit is contained in:
@@ -1,39 +1,33 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import injectSheet from "react-jss";
|
import injectSheet from "react-jss";
|
||||||
import classNames from "classnames";
|
import Tooltip from './Tooltip';
|
||||||
|
import HelpIcon from './HelpIcon';
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
img: {
|
tooltip: {
|
||||||
display: "block"
|
display: "inline-block",
|
||||||
},
|
paddingLeft: "3px"
|
||||||
q: {
|
|
||||||
float: "left",
|
|
||||||
paddingLeft: "3px",
|
|
||||||
float: "right"
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
message: string,
|
message: string,
|
||||||
classes: any
|
classes: any
|
||||||
};
|
}
|
||||||
|
|
||||||
class Help extends React.Component<Props> {
|
class Help extends React.Component<Props> {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { message, classes } = this.props;
|
const { message, classes } = this.props;
|
||||||
const multiline = message.length > 60 ? "is-tooltip-multiline" : "";
|
|
||||||
return (
|
return (
|
||||||
<div
|
<Tooltip className={classes.tooltip} message={message}>
|
||||||
className={classNames("tooltip is-tooltip-right", multiline, classes.q)}
|
<HelpIcon />
|
||||||
data-tooltip={message}
|
</Tooltip>
|
||||||
>
|
|
||||||
<i
|
|
||||||
className={classNames("fa fa-question has-text-info", classes.img)}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default injectSheet(styles)(Help);
|
export default injectSheet(styles)(Help);
|
||||||
|
|
||||||
|
|||||||
14
scm-ui-components/packages/ui-components/src/HelpIcon.js
Normal file
14
scm-ui-components/packages/ui-components/src/HelpIcon.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
//@flow
|
||||||
|
import React from "react";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
};
|
||||||
|
|
||||||
|
class HelpIcon extends React.Component<Props> {
|
||||||
|
render() {
|
||||||
|
return <i className={classNames("fa fa-question has-text-info")} />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HelpIcon;
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
//@flow
|
|
||||||
import React from "react";
|
|
||||||
import { Help } from "./index";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
label: string,
|
|
||||||
helpText?: string
|
|
||||||
};
|
|
||||||
|
|
||||||
class LabelWithHelpIcon extends React.Component<Props> {
|
|
||||||
renderLabel = () => {
|
|
||||||
const label = this.props.label;
|
|
||||||
if (label) {
|
|
||||||
return <label className="label">{label}</label>;
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
};
|
|
||||||
|
|
||||||
renderHelp = () => {
|
|
||||||
const helpText = this.props.helpText;
|
|
||||||
if (helpText) {
|
|
||||||
return (
|
|
||||||
<div className="control columns is-vcentered">
|
|
||||||
<Help message={helpText} />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
renderLabelWithHelpIcon = () => {
|
|
||||||
if (this.props.label) {
|
|
||||||
return (
|
|
||||||
<div className="field is-grouped">
|
|
||||||
<div className="control">{this.renderLabel()}</div>
|
|
||||||
{this.renderHelp()}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return this.renderLabelWithHelpIcon();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default LabelWithHelpIcon;
|
|
||||||
26
scm-ui-components/packages/ui-components/src/Tooltip.js
Normal file
26
scm-ui-components/packages/ui-components/src/Tooltip.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//@flow
|
||||||
|
import * as React from "react";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
message: string,
|
||||||
|
className: string,
|
||||||
|
children: React.Node
|
||||||
|
};
|
||||||
|
|
||||||
|
class Tooltip extends React.Component<Props> {
|
||||||
|
render() {
|
||||||
|
const { className, message, children } = this.props;
|
||||||
|
const multiline = message.length > 60 ? "is-tooltip-multiline" : "";
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames("tooltip", "is-tooltip-right", multiline, className)}
|
||||||
|
data-tooltip={message}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Tooltip;
|
||||||
@@ -10,7 +10,9 @@ type Props = {
|
|||||||
disabled?: boolean,
|
disabled?: boolean,
|
||||||
helpText?: string
|
helpText?: string
|
||||||
};
|
};
|
||||||
|
|
||||||
class Checkbox extends React.Component<Props> {
|
class Checkbox extends React.Component<Props> {
|
||||||
|
|
||||||
onCheckboxChange = (event: SyntheticInputEvent<HTMLInputElement>) => {
|
onCheckboxChange = (event: SyntheticInputEvent<HTMLInputElement>) => {
|
||||||
if (this.props.onChange) {
|
if (this.props.onChange) {
|
||||||
this.props.onChange(event.target.checked, this.props.name);
|
this.props.onChange(event.target.checked, this.props.name);
|
||||||
@@ -20,12 +22,8 @@ class Checkbox extends React.Component<Props> {
|
|||||||
renderHelp = () => {
|
renderHelp = () => {
|
||||||
const helpText = this.props.helpText;
|
const helpText = this.props.helpText;
|
||||||
if (helpText) {
|
if (helpText) {
|
||||||
return (
|
return <Help message={helpText} />;
|
||||||
<div className="control columns is-vcentered">
|
}
|
||||||
<Help message={helpText} />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else return null;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@@ -39,10 +37,11 @@ class Checkbox extends React.Component<Props> {
|
|||||||
onChange={this.onCheckboxChange}
|
onChange={this.onCheckboxChange}
|
||||||
disabled={this.props.disabled}
|
disabled={this.props.disabled}
|
||||||
/>
|
/>
|
||||||
|
{" "}
|
||||||
{this.props.label}
|
{this.props.label}
|
||||||
|
{this.renderHelp()}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
{this.renderHelp()}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { LabelWithHelpIcon } from "../index";
|
import LabelWithHelpIcon from "./LabelWithHelpIcon";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
label?: string,
|
label?: string,
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
//@flow
|
||||||
|
import React from "react";
|
||||||
|
import Help from '../Help';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
label?: string,
|
||||||
|
helpText?: string
|
||||||
|
};
|
||||||
|
|
||||||
|
class LabelWithHelpIcon extends React.Component<Props> {
|
||||||
|
|
||||||
|
renderHelp() {
|
||||||
|
const { helpText } = this.props;
|
||||||
|
if (helpText) {
|
||||||
|
return (
|
||||||
|
<Help message={helpText} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const {label } = this.props;
|
||||||
|
|
||||||
|
if (label) {
|
||||||
|
const help = this.renderHelp();
|
||||||
|
return (
|
||||||
|
<label className="label">
|
||||||
|
{label} { help }
|
||||||
|
</label>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LabelWithHelpIcon;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { LabelWithHelpIcon } from "../index";
|
import LabelWithHelpIcon from "./LabelWithHelpIcon";
|
||||||
|
|
||||||
export type SelectItem = {
|
export type SelectItem = {
|
||||||
value: string,
|
value: string,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { LabelWithHelpIcon } from "../index";
|
import LabelWithHelpIcon from "./LabelWithHelpIcon";
|
||||||
|
|
||||||
export type SelectItem = {
|
export type SelectItem = {
|
||||||
value: string,
|
value: string,
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ export { default as Checkbox } from "./Checkbox.js";
|
|||||||
export { default as InputField } from "./InputField.js";
|
export { default as InputField } from "./InputField.js";
|
||||||
export { default as Select } from "./Select.js";
|
export { default as Select } from "./Select.js";
|
||||||
export { default as Textarea } from "./Textarea.js";
|
export { default as Textarea } from "./Textarea.js";
|
||||||
|
export { default as LabelWithHelpIcon } from "./LabelWithHelpIcon";
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,9 @@ export { default as Notification } from "./Notification.js";
|
|||||||
export { default as Paginator } from "./Paginator.js";
|
export { default as Paginator } from "./Paginator.js";
|
||||||
export { default as LinkPaginator } from "./LinkPaginator.js";
|
export { default as LinkPaginator } from "./LinkPaginator.js";
|
||||||
export { default as ProtectedRoute } from "./ProtectedRoute.js";
|
export { default as ProtectedRoute } from "./ProtectedRoute.js";
|
||||||
export { default as Help } from "./Help.js";
|
export { default as Help } from "./Help";
|
||||||
export { default as LabelWithHelpIcon } from "./LabelWithHelpIcon.js";
|
export { default as HelpIcon } from "./HelpIcon";
|
||||||
|
export { default as Tooltip } from "./Tooltip";
|
||||||
export { getPageFromMatch } from "./urls";
|
export { getPageFromMatch } from "./urls";
|
||||||
|
|
||||||
export { apiClient, NOT_FOUND_ERROR, UNAUTHORIZED_ERROR } from "./apiclient.js";
|
export { apiClient, NOT_FOUND_ERROR, UNAUTHORIZED_ERROR } from "./apiclient.js";
|
||||||
|
|||||||
Reference in New Issue
Block a user