Merged 2.0.0-m3

This commit is contained in:
Philipp Czora
2018-11-14 14:31:17 +01:00
239 changed files with 3495 additions and 5560 deletions

View File

@@ -1,39 +1,33 @@
//@flow
import React from "react";
import injectSheet from "react-jss";
import classNames from "classnames";
import Tooltip from './Tooltip';
import HelpIcon from './HelpIcon';
const styles = {
img: {
display: "block"
},
q: {
float: "left",
paddingLeft: "3px",
float: "right"
tooltip: {
display: "inline-block",
paddingLeft: "3px"
}
};
type Props = {
message: string,
classes: any
};
}
class Help extends React.Component<Props> {
render() {
const { message, classes } = this.props;
const multiline = message.length > 60 ? "is-tooltip-multiline" : "";
return (
<div
className={classNames("tooltip is-tooltip-right", multiline, classes.q)}
data-tooltip={message}
>
<i
className={classNames("fa fa-question has-text-info", classes.img)}
/>
</div>
<Tooltip className={classes.tooltip} message={message}>
<HelpIcon />
</Tooltip>
);
}
}
export default injectSheet(styles)(Help);

View 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;

View File

@@ -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;

View File

@@ -1,10 +1,14 @@
//@flow
import React from "react";
import { translate } from "react-i18next";
import injectSheet from "react-jss";
import Image from "./Image";
const styles = {
minHeightContainer: {
minHeight: "256px"
},
wrapper: {
position: "relative"
},
@@ -34,14 +38,16 @@ class Loading extends React.Component<Props> {
render() {
const { message, t, classes } = this.props;
return (
<div className={classes.wrapper}>
<div className={classes.loading}>
<Image
className={classes.image}
src="/images/loading.svg"
alt={t("loading.alt")}
/>
<p className="has-text-centered">{message}</p>
<div className={classes.minHeightContainer}>
<div className={classes.wrapper}>
<div className={classes.loading}>
<Image
className={classes.image}
src="/images/loading.svg"
alt={t("loading.alt")}
/>
<p className="has-text-centered">{message}</p>
</div>
</div>
</div>
);

View 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;

View File

@@ -10,7 +10,9 @@ type Props = {
disabled?: boolean,
helpText?: string
};
class Checkbox extends React.Component<Props> {
onCheckboxChange = (event: SyntheticInputEvent<HTMLInputElement>) => {
if (this.props.onChange) {
this.props.onChange(event.target.checked, this.props.name);
@@ -20,12 +22,8 @@ class Checkbox extends React.Component<Props> {
renderHelp = () => {
const helpText = this.props.helpText;
if (helpText) {
return (
<div className="control columns is-vcentered">
<Help message={helpText} />
</div>
);
} else return null;
return <Help message={helpText} />;
}
};
render() {
@@ -39,10 +37,11 @@ class Checkbox extends React.Component<Props> {
onChange={this.onCheckboxChange}
disabled={this.props.disabled}
/>
{" "}
{this.props.label}
{this.renderHelp()}
</label>
</div>
{this.renderHelp()}
</div>
);
}

View File

@@ -1,7 +1,7 @@
//@flow
import React from "react";
import classNames from "classnames";
import { LabelWithHelpIcon } from "../index";
import LabelWithHelpIcon from "./LabelWithHelpIcon";
type Props = {
label?: string,

View File

@@ -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;

View File

@@ -1,7 +1,7 @@
//@flow
import React from "react";
import classNames from "classnames";
import { LabelWithHelpIcon } from "../index";
import LabelWithHelpIcon from "./LabelWithHelpIcon";
export type SelectItem = {
value: string,

View File

@@ -1,6 +1,6 @@
//@flow
import React from "react";
import { LabelWithHelpIcon } from "../index";
import LabelWithHelpIcon from "./LabelWithHelpIcon";
export type SelectItem = {
value: string,
@@ -8,10 +8,11 @@ export type SelectItem = {
};
type Props = {
name?: string,
label?: string,
placeholder?: SelectItem[],
value?: string,
onChange: string => void,
onChange: (value: string, name?: string) => void,
helpText?: string
};
@@ -19,7 +20,7 @@ class Textarea extends React.Component<Props> {
field: ?HTMLTextAreaElement;
handleInput = (event: SyntheticInputEvent<HTMLTextAreaElement>) => {
this.props.onChange(event.target.value);
this.props.onChange(event.target.value, this.props.name);
};
render() {

View File

@@ -6,4 +6,5 @@ export { default as InputField } from "./InputField.js";
export { default as Select } from "./Select.js";
export { default as Textarea } from "./Textarea.js";
export { default as PasswordConfirmation } from "./PasswordConfirmation.js";
export { default as LabelWithHelpIcon } from "./LabelWithHelpIcon";

View File

@@ -17,8 +17,9 @@ export { default as Notification } from "./Notification.js";
export { default as Paginator } from "./Paginator.js";
export { default as LinkPaginator } from "./LinkPaginator.js";
export { default as ProtectedRoute } from "./ProtectedRoute.js";
export { default as Help } from "./Help.js";
export { default as LabelWithHelpIcon } from "./LabelWithHelpIcon.js";
export { default as Help } from "./Help";
export { default as HelpIcon } from "./HelpIcon";
export { default as Tooltip } from "./Tooltip";
export { getPageFromMatch } from "./urls";
export { apiClient, NOT_FOUND_ERROR, UNAUTHORIZED_ERROR } from "./apiclient.js";