add displayName functionality to reuse component in scm-review-plugin.

This commit is contained in:
Florian Scholdei
2019-09-25 13:33:11 +02:00
parent fcde3b8e61
commit 1a0a250866
6 changed files with 25 additions and 12 deletions

View File

@@ -1,7 +1,8 @@
//@flow //@flow
import React from "react"; import React from "react";
import { translate } from "react-i18next"; import { translate } from "react-i18next";
import TagGroup from "../TagGroup"; import type { DisplayedUser } from "@scm-manager/ui-types";
import TagGroup from "./TagGroup";
type Props = { type Props = {
members: string[], members: string[],
@@ -12,10 +13,12 @@ type Props = {
class MemberNameTagGroup extends React.Component<Props> { class MemberNameTagGroup extends React.Component<Props> {
render() { render() {
const { members, t } = this.props; const { members, t } = this.props;
const membersExtended = members.map(id => {
return { id, displayName: id, mail: "" };
});
return ( return (
<TagGroup <TagGroup
items={members} items={membersExtended}
label={t("group.members")} label={t("group.members")}
helpText={t("groupForm.help.memberHelpText")} helpText={t("groupForm.help.memberHelpText")}
onRemove={this.removeEntry} onRemove={this.removeEntry}
@@ -23,8 +26,11 @@ class MemberNameTagGroup extends React.Component<Props> {
); );
} }
removeEntry = (member: string[]) => { removeEntry = (membersExtended: DisplayedUser[]) => {
this.props.memberListChanged(member); const members = membersExtended.map(function(item) {
return item["id"];
});
this.props.memberListChanged(members);
}; };
} }

View File

@@ -1,13 +1,14 @@
//@flow //@flow
import * as React from "react"; import * as React from "react";
import injectSheet from "react-jss"; import injectSheet from "react-jss";
import { Help, Tag } from "./index"; import type { DisplayedUser } from "@scm-manager/ui-types";
import { Help, Tag } from "../index";
type Props = { type Props = {
items: string[], items: DisplayedUser[],
label: string, label: string,
helpText?: string, helpText?: string,
onRemove: (string[]) => void, onRemove: (DisplayedUser[]) => void,
// context props // context props
classes: Object classes: Object
@@ -45,7 +46,7 @@ class TagGroup extends React.Component<Props> {
<div className="tags has-addons"> <div className="tags has-addons">
<Tag <Tag
color="info is-outlined" color="info is-outlined"
label={item} label={item.displayName}
onRemove={() => this.removeEntry(item)} onRemove={() => this.removeEntry(item)}
/> />
</div> </div>
@@ -56,7 +57,7 @@ class TagGroup extends React.Component<Props> {
); );
} }
removeEntry = (item: string) => { removeEntry = item => {
const newItems = this.props.items.filter(name => name !== item); const newItems = this.props.items.filter(name => name !== item);
this.props.onRemove(newItems); this.props.onRemove(newItems);
}; };

View File

@@ -2,6 +2,7 @@
export { default as AddEntryToTableField } from "./AddEntryToTableField.js"; export { default as AddEntryToTableField } from "./AddEntryToTableField.js";
export { default as AutocompleteAddEntryToTableField } from "./AutocompleteAddEntryToTableField.js"; export { default as AutocompleteAddEntryToTableField } from "./AutocompleteAddEntryToTableField.js";
export { default as TagGroup } from "./TagGroup.js";
export { default as MemberNameTagGroup } from "./MemberNameTagGroup.js"; export { default as MemberNameTagGroup } from "./MemberNameTagGroup.js";
export { default as Checkbox } from "./Checkbox.js"; export { default as Checkbox } from "./Checkbox.js";
export { default as Radio } from "./Radio.js"; export { default as Radio } from "./Radio.js";

View File

@@ -24,7 +24,6 @@ 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";

View File

@@ -1,6 +1,12 @@
//@flow //@flow
import type { Links } from "./hal"; import type { Links } from "./hal";
export type DisplayedUser = {
id: string,
displayName: string,
mail: string
};
export type User = { export type User = {
displayName: string, displayName: string,
name: string, name: string,

View File

@@ -3,7 +3,7 @@ export type { Action } from "./Action";
export type { Link, Links, Collection, PagedCollection } from "./hal"; export type { Link, Links, Collection, PagedCollection } from "./hal";
export type { Me } from "./Me"; export type { Me } from "./Me";
export type { User } from "./User"; export type { DisplayedUser, User } from "./User";
export type { Group, Member } from "./Group"; export type { Group, Member } from "./Group";
export type { Repository, RepositoryCollection, RepositoryGroup } from "./Repositories"; export type { Repository, RepositoryCollection, RepositoryGroup } from "./Repositories";