move changesets and avatar components to ui-components

This commit is contained in:
Sebastian Sdorra
2018-12-10 08:45:59 +01:00
parent 8d622f548d
commit 97c4b0998b
18 changed files with 74 additions and 47 deletions

View File

@@ -0,0 +1,8 @@
// @flow
export type Person = {
name: string,
mail?: string
};
export const EXTENSION_POINT = "avatar.factory";

View File

@@ -1,26 +1,28 @@
//@flow //@flow
import React from "react"; import React from "react";
import {binder} from "@scm-manager/ui-extensions"; import {binder} from "@scm-manager/ui-extensions";
import type {Changeset} from "@scm-manager/ui-types"; import {Image} from "..";
import {Image} from "@scm-manager/ui-components"; import type { Person } from "./Avatar";
import { EXTENSION_POINT } from "./Avatar";
type Props = { type Props = {
changeset: Changeset person: Person
}; };
class AvatarImage extends React.Component<Props> { class AvatarImage extends React.Component<Props> {
render() { render() {
const { changeset } = this.props; const { person } = this.props;
const avatarFactory = binder.getExtension("changeset.avatar-factory"); const avatarFactory = binder.getExtension(EXTENSION_POINT);
if (avatarFactory) { if (avatarFactory) {
const avatar = avatarFactory(changeset); const avatar = avatarFactory(person);
return ( return (
<Image <Image
className="has-rounded-border" className="has-rounded-border"
src={avatar} src={avatar}
alt={changeset.author.name} alt={person.name}
/> />
); );
} }

View File

@@ -1,6 +1,7 @@
//@flow //@flow
import * as React from "react"; import * as React from "react";
import {binder} from "@scm-manager/ui-extensions"; import {binder} from "@scm-manager/ui-extensions";
import { EXTENSION_POINT } from "./Avatar";
type Props = { type Props = {
children: React.Node children: React.Node
@@ -8,7 +9,7 @@ type Props = {
class AvatarWrapper extends React.Component<Props> { class AvatarWrapper extends React.Component<Props> {
render() { render() {
if (binder.hasExtension("changeset.avatar-factory")) { if (binder.hasExtension(EXTENSION_POINT)) {
return <>{this.props.children}</>; return <>{this.props.children}</>;
} }
return null; return null;

View File

@@ -0,0 +1,4 @@
// @flow
export { default as AvatarWrapper } from "./AvatarWrapper";
export { default as AvatarImage } from "./AvatarImage";

View File

@@ -27,9 +27,11 @@ export { default as Autocomplete} from "./Autocomplete";
export { apiClient, NOT_FOUND_ERROR_MESSAGE, UNAUTHORIZED_ERROR_MESSAGE } from "./apiclient.js"; export { apiClient, NOT_FOUND_ERROR_MESSAGE, UNAUTHORIZED_ERROR_MESSAGE } from "./apiclient.js";
export * from "./avatar";
export * from "./buttons"; export * from "./buttons";
export * from "./config"; export * from "./config";
export * from "./forms"; export * from "./forms";
export * from "./layout"; export * from "./layout";
export * from "./modals"; export * from "./modals";
export * from "./navigation"; export * from "./navigation";
export * from "./repos";

View File

@@ -1,13 +1,12 @@
//@flow //@flow
import React from "react"; import React from "react";
import type { Changeset } from "@scm-manager/ui-types"; import type {Changeset} from "@scm-manager/ui-types";
type Props = { type Props = {
changeset: Changeset changeset: Changeset
}; };
export default class ChangesetAuthor extends React.Component<Props> { class ChangesetAuthor extends React.Component<Props> {
render() { render() {
const { changeset } = this.props; const { changeset } = this.props;
if (!changeset.author) { if (!changeset.author) {
@@ -35,3 +34,5 @@ export default class ChangesetAuthor extends React.Component<Props> {
} }
} }
} }
export default ChangesetAuthor;

View File

@@ -1,8 +1,8 @@
// @flow // @flow
import ChangesetRow from "./ChangesetRow"; import ChangesetRow from "./ChangesetRow";
import React from "react"; import React from "react";
import type { Changeset, Repository } from "@scm-manager/ui-types"; import type { Changeset, Repository } from "@scm-manager/ui-types";
import classNames from "classnames";
type Props = { type Props = {
repository: Repository, repository: Repository,
@@ -21,7 +21,7 @@ class ChangesetList extends React.Component<Props> {
/> />
); );
}); });
return <div className={classNames("box")}>{content}</div>; return <div className="box">{content}</div>;
} }
} }

View File

@@ -1,17 +1,17 @@
//@flow //@flow
import React from "react"; import React from "react";
import type {Changeset, Repository, Tag} from "@scm-manager/ui-types"; import type { Changeset, Repository, Tag } from "@scm-manager/ui-types";
import classNames from "classnames"; import classNames from "classnames";
import {Interpolate, translate} from "react-i18next"; import {Interpolate, translate} from "react-i18next";
import ChangesetId from "./ChangesetId"; import ChangesetId from "./ChangesetId";
import injectSheet from "react-jss"; import injectSheet from "react-jss";
import {DateFromNow} from "@scm-manager/ui-components"; import {DateFromNow} from "../..";
import ChangesetAuthor from "./ChangesetAuthor"; import ChangesetAuthor from "./ChangesetAuthor";
import ChangesetTag from "./ChangesetTag"; import ChangesetTag from "./ChangesetTag";
import {compose} from "redux";
import {parseDescription} from "./changesets"; import {parseDescription} from "./changesets";
import AvatarWrapper from "./AvatarWrapper"; import {AvatarWrapper, AvatarImage} from "../../avatar";
import AvatarImage from "./AvatarImage";
const styles = { const styles = {
pointer: { pointer: {
@@ -56,7 +56,7 @@ class ChangesetRow extends React.Component<Props> {
<div> <div>
<figure className="media-left"> <figure className="media-left">
<p className="image is-64x64"> <p className="image is-64x64">
<AvatarImage changeset={changeset} /> <AvatarImage person={changeset.author} />
</p> </p>
</figure> </figure>
</div> </div>
@@ -95,7 +95,4 @@ class ChangesetRow extends React.Component<Props> {
}; };
} }
export default compose( export default injectSheet(styles)(translate("repos")(ChangesetRow));
injectSheet(styles),
translate("repos")
)(ChangesetRow);

View File

@@ -0,0 +1,9 @@
// @flow
import * as changesets from "./changesets";
export { changesets };
export { default as ChangesetAuthor } from "./ChangesetAuthor";
export { default as ChangesetId } from "./ChangesetId";
export { default as ChangesetList } from "./ChangesetList";
export { default as ChangesetRow } from "./ChangesetRow";
export { default as ChangesetTag } from "./ChangesetTag";

View File

@@ -0,0 +1,3 @@
// @flow
export * from "./changesets";

View File

@@ -1,8 +1,7 @@
// @flow // @flow
import React from "react"; import React from "react";
import AvatarWrapper from "../repos/components/changesets/AvatarWrapper";
import type { Me } from "@scm-manager/ui-types"; import type { Me } from "@scm-manager/ui-types";
import { MailLink } from "@scm-manager/ui-components"; import { MailLink, AvatarWrapper, AvatarImage } from "@scm-manager/ui-components";
import { compose } from "redux"; import { compose } from "redux";
import { translate } from "react-i18next"; import { translate } from "react-i18next";
@@ -23,9 +22,7 @@ class ProfileInfo extends React.Component<Props, State> {
<div> <div>
<figure className="media-left"> <figure className="media-left">
<p className="image is-64x64"> <p className="image is-64x64">
{ <AvatarImage person={ me }/>
// TODO: add avatar
}
</p> </p>
</figure> </figure>
</div> </div>

View File

@@ -3,14 +3,18 @@ import React from "react";
import type { Changeset, Repository } from "@scm-manager/ui-types"; import type { Changeset, Repository } from "@scm-manager/ui-types";
import { Interpolate, translate } from "react-i18next"; import { Interpolate, translate } from "react-i18next";
import injectSheet from "react-jss"; import injectSheet from "react-jss";
import ChangesetTag from "./ChangesetTag";
import ChangesetAuthor from "./ChangesetAuthor"; import {
import { parseDescription } from "./changesets"; DateFromNow,
import { DateFromNow } from "@scm-manager/ui-components"; ChangesetId,
import AvatarWrapper from "./AvatarWrapper"; ChangesetTag,
import AvatarImage from "./AvatarImage"; ChangesetAuthor,
AvatarWrapper,
AvatarImage,
changesets
} from "@scm-manager/ui-components";
import classNames from "classnames"; import classNames from "classnames";
import ChangesetId from "./ChangesetId";
import type { Tag } from "@scm-manager/ui-types"; import type { Tag } from "@scm-manager/ui-types";
import ScmDiff from "../../containers/ScmDiff"; import ScmDiff from "../../containers/ScmDiff";
@@ -31,12 +35,12 @@ class ChangesetDetails extends React.Component<Props> {
render() { render() {
const { changeset, repository, classes } = this.props; const { changeset, repository, classes } = this.props;
const description = parseDescription(changeset.description); const description = changesets.parseDescription(changeset.description);
const id = ( const id = (
<ChangesetId repository={repository} changeset={changeset} link={false} /> <ChangesetId repository={repository} changeset={changeset} link={false}/>
); );
const date = <DateFromNow date={changeset.date} />; const date = <DateFromNow date={changeset.date}/>;
return ( return (
<div> <div>
@@ -45,12 +49,12 @@ class ChangesetDetails extends React.Component<Props> {
<article className="media"> <article className="media">
<AvatarWrapper> <AvatarWrapper>
<p className={classNames("image", "is-64x64", classes.spacing)}> <p className={classNames("image", "is-64x64", classes.spacing)}>
<AvatarImage changeset={changeset} /> <AvatarImage changeset={changeset}/>
</p> </p>
</AvatarWrapper> </AvatarWrapper>
<div className="media-content"> <div className="media-content">
<p> <p>
<ChangesetAuthor changeset={changeset} /> <ChangesetAuthor changeset={changeset}/>
</p> </p>
<p> <p>
<Interpolate <Interpolate
@@ -67,14 +71,14 @@ class ChangesetDetails extends React.Component<Props> {
return ( return (
<span key={key}> <span key={key}>
{item} {item}
<br /> <br/>
</span> </span>
); );
})} })}
</p> </p>
</div> </div>
<div> <div>
<ScmDiff changeset={changeset} sideBySide={false} /> <ScmDiff changeset={changeset} sideBySide={false}/>
</div> </div>
</div> </div>
); );
@@ -91,7 +95,7 @@ class ChangesetDetails extends React.Component<Props> {
return ( return (
<div className="level-item"> <div className="level-item">
{tags.map((tag: Tag) => { {tags.map((tag: Tag) => {
return <ChangesetTag key={tag.name} tag={tag} />; return <ChangesetTag key={tag.name} tag={tag}/>;
})} })}
</div> </div>
); );

View File

@@ -12,8 +12,7 @@ import {
} from "../modules/changesets"; } from "../modules/changesets";
import {connect} from "react-redux"; import {connect} from "react-redux";
import ChangesetList from "../components/changesets/ChangesetList"; import {ErrorNotification, getPageFromMatch, LinkPaginator, ChangesetList, Loading} from "@scm-manager/ui-components";
import {ErrorNotification, getPageFromMatch, LinkPaginator, Loading} from "@scm-manager/ui-components";
import {compose} from "redux"; import {compose} from "redux";
type Props = { type Props = {

View File

@@ -9,10 +9,10 @@ import type {
import { import {
ErrorNotification, ErrorNotification,
Loading, Loading,
StatePaginator StatePaginator,
ChangesetList
} from "@scm-manager/ui-components"; } from "@scm-manager/ui-components";
import { getHistory } from "./history"; import { getHistory } from "./history";
import ChangesetList from "../../components/changesets/ChangesetList";
type Props = { type Props = {
file: File, file: File,