mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-15 09:46:16 +01:00
reduce minimum app size
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import injectSheet from "react-jss";
|
import injectSheet from "react-jss";
|
||||||
import Tooltip from './Tooltip';
|
import classNames from "classnames";
|
||||||
import HelpIcon from './HelpIcon';
|
import Tooltip from "./Tooltip";
|
||||||
|
import HelpIcon from "./HelpIcon";
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
tooltip: {
|
tooltip: {
|
||||||
@@ -14,21 +15,22 @@ const styles = {
|
|||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
message: string,
|
message: string,
|
||||||
|
className?: 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, className, classes } = this.props;
|
||||||
return (
|
return (
|
||||||
<Tooltip className={classes.tooltip} message={message}>
|
<Tooltip
|
||||||
|
className={classNames(classes.tooltip, className)}
|
||||||
|
message={message}
|
||||||
|
>
|
||||||
<HelpIcon />
|
<HelpIcon />
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default injectSheet(styles)(Help);
|
export default injectSheet(styles)(Help);
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ type Props = {
|
|||||||
icon?: string,
|
icon?: string,
|
||||||
label: string,
|
label: string,
|
||||||
title?: string,
|
title?: string,
|
||||||
onClick?: () => void
|
onClick?: () => void,
|
||||||
|
onRemove?: () => void
|
||||||
};
|
};
|
||||||
|
|
||||||
class Tag extends React.Component<Props> {
|
class Tag extends React.Component<Props> {
|
||||||
@@ -17,25 +18,41 @@ class Tag extends React.Component<Props> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { className, color, icon, label, title, onClick } = this.props;
|
const {
|
||||||
|
className,
|
||||||
|
color,
|
||||||
|
icon,
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
onClick,
|
||||||
|
onRemove
|
||||||
|
} = this.props;
|
||||||
let showIcon = null;
|
let showIcon = null;
|
||||||
if (icon) {
|
if (icon) {
|
||||||
showIcon = (
|
showIcon = (
|
||||||
<>
|
<>
|
||||||
<i className={classNames("fas", `fa-${icon}`)} />
|
<i className={classNames("fas", `fa-${icon}`)} />
|
||||||
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
let showDelete = null;
|
||||||
|
if (onRemove) {
|
||||||
|
showDelete = <a className="tag is-delete" onClick={onRemove} />;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span
|
<>
|
||||||
className={classNames("tag", `is-${color}`, className)}
|
<span
|
||||||
title={title}
|
className={classNames("tag", `is-${color}`, className)}
|
||||||
onClick={onClick}
|
title={title}
|
||||||
>
|
onClick={onClick}
|
||||||
{showIcon}
|
>
|
||||||
{label}
|
{showIcon}
|
||||||
</span>
|
{label}
|
||||||
|
</span>
|
||||||
|
{showDelete}
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
65
scm-ui-components/packages/ui-components/src/TagGroup.js
Normal file
65
scm-ui-components/packages/ui-components/src/TagGroup.js
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
//@flow
|
||||||
|
import * as React from "react";
|
||||||
|
import injectSheet from "react-jss";
|
||||||
|
import { Help, Tag } from "./index";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
items: string[],
|
||||||
|
label: string,
|
||||||
|
helpText?: string,
|
||||||
|
onRemove: (string[]) => void,
|
||||||
|
|
||||||
|
// context props
|
||||||
|
classes: Object
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = {
|
||||||
|
help: {
|
||||||
|
position: "relative"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TagGroup extends React.Component<Props> {
|
||||||
|
render() {
|
||||||
|
const { items, label, helpText, classes } = this.props;
|
||||||
|
let help = null;
|
||||||
|
if (helpText) {
|
||||||
|
help = <Help className={classes.help} message={helpText} />;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<div className="field is-grouped is-grouped-multiline">
|
||||||
|
{label && items ? (
|
||||||
|
<div className="control">
|
||||||
|
<strong>
|
||||||
|
{label}
|
||||||
|
{help}
|
||||||
|
{items.length > 0 ? ":" : ""}
|
||||||
|
</strong>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
""
|
||||||
|
)}
|
||||||
|
{items.map(item => {
|
||||||
|
return (
|
||||||
|
<div className="control">
|
||||||
|
<div className="tags has-addons">
|
||||||
|
<Tag
|
||||||
|
color="info"
|
||||||
|
label={item}
|
||||||
|
onRemove={this.removeEntry}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeEntry = (item: string) => {
|
||||||
|
const newItems = this.props.items.filter(name => name !== item);
|
||||||
|
this.props.onRemove(newItems);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default injectSheet(styles)(TagGroup);
|
||||||
@@ -2,44 +2,30 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { translate } from "react-i18next";
|
import { translate } from "react-i18next";
|
||||||
import RemoveEntryOfTableButton from "../buttons/RemoveEntryOfTableButton";
|
import RemoveEntryOfTableButton from "../buttons/RemoveEntryOfTableButton";
|
||||||
|
import TagGroup from "../TagGroup";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
members: string[],
|
members: string[],
|
||||||
t: string => string,
|
memberListChanged: (string[]) => void,
|
||||||
memberListChanged: (string[]) => void
|
t: string => string
|
||||||
};
|
};
|
||||||
|
|
||||||
type State = {};
|
class MemberNameTable extends React.Component<Props> {
|
||||||
|
|
||||||
class MemberNameTable extends React.Component<Props, State> {
|
|
||||||
render() {
|
render() {
|
||||||
const { t } = this.props;
|
const { members, t } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<table className="table is-hoverable is-fullwidth">
|
<TagGroup
|
||||||
<tbody>
|
items={members}
|
||||||
{this.props.members.map(member => {
|
label={t("group.members")}
|
||||||
return (
|
helpText={t("groupForm.help.memberHelpText")}
|
||||||
<tr key={member}>
|
onRemove={() => this.removeEntry}
|
||||||
<td key={member}>{member}</td>
|
/>
|
||||||
<td>
|
|
||||||
<RemoveEntryOfTableButton
|
|
||||||
entryname={member}
|
|
||||||
removeEntry={this.removeEntry}
|
|
||||||
disabled={false}
|
|
||||||
label={t("remove-member-button.label")}
|
|
||||||
/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
removeEntry = (membername: string) => {
|
removeEntry = (member: string[]) => {
|
||||||
const newMembers = this.props.members.filter(name => name !== membername);
|
this.props.memberListChanged(member);
|
||||||
this.props.memberListChanged(newMembers);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export { default as ProtectedRoute } from "./ProtectedRoute.js";
|
|||||||
export { default as Help } from "./Help";
|
export { default as Help } from "./Help";
|
||||||
export { default as HelpIcon } from "./HelpIcon";
|
export { default as HelpIcon } from "./HelpIcon";
|
||||||
export { default as Tag } from "./Tag";
|
export { default as Tag } from "./Tag";
|
||||||
|
export { default as TagGroup } from "./TagGroup";
|
||||||
export { default as Tooltip } from "./Tooltip";
|
export { default as Tooltip } from "./Tooltip";
|
||||||
// TODO do we need this? getPageFromMatch is already exported by urls
|
// TODO do we need this? getPageFromMatch is already exported by urls
|
||||||
export { getPageFromMatch } from "./urls";
|
export { getPageFromMatch } from "./urls";
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ $green: #00c79b;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
min-height: calc(100vh - 260px);
|
min-height: calc(100vh - 300px);
|
||||||
}
|
}
|
||||||
|
|
||||||
// shown in top section when pageactions set
|
// shown in top section when pageactions set
|
||||||
|
|||||||
Reference in New Issue
Block a user