/*
* Copyright (c) 2020 - present Cloudogu GmbH
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
import { storiesOf } from "@storybook/react";
import * as React from "react";
import styled from "styled-components";
import { MemoryRouter } from "react-router-dom";
import repository from "../../__resources__/repository";
import ChangesetRow from "./ChangesetRow";
import { five, four, one, three, two } from "../../__resources__/changesets";
import { Binder, BinderContext } from "@scm-manager/ui-extensions";
// @ts-ignore
import hitchhiker from "../../__resources__/hitchhiker.png";
import { Person } from "../../avatar/Avatar";
import { Changeset } from "@scm-manager/ui-types";
import { Replacement } from "@scm-manager/ui-text";
import ChangesetList from "./ChangesetList";
import { ShortcutDocsContextProvider } from "@scm-manager/ui-shortcuts";
const Wrapper = styled.div`
margin: 25rem 4rem;
`;
const robohash = (person: Person) => {
return `https://robohash.org/${person.mail}`;
};
const withAvatarFactory = (factory: (person: Person) => string, changeset: Changeset) => {
const binder = new Binder("changeset stories");
binder.bind("avatar.factory", factory);
return (
);
};
const withReplacements = (
replacements: ((changeset: Changeset, value: string) => Replacement[])[],
changeset: Changeset
) => {
const binder = new Binder("changeset stories");
replacements.forEach((replacement) => binder.bind("changeset.description.tokens", replacement));
return (
);
};
function copy(input: T): T {
return JSON.parse(JSON.stringify(input));
}
storiesOf("Repositories/Changesets", module)
.addDecorator((story) => {story()})
.addDecorator((storyFn) => {storyFn()})
.add("Default", () => )
.add("With Committer", () => )
.add("With Committer and Co-Author", () => )
.add("With multiple Co-Authors", () => )
.add("With avatar", () => {
return withAvatarFactory(() => hitchhiker, three);
})
.add("Commiter and Co-Authors with avatar", () => {
return withAvatarFactory(robohash, one);
})
.add("Co-Authors with avatar", () => {
return withAvatarFactory(robohash, four);
})
.add("Replacements", () => {
const link = HOG-42;
const mail = Arthur;
return withReplacements(
[
() => [{ textToReplace: "HOG-42", replacement: link }],
() => [{ textToReplace: "arthur@guide.galaxy", replacement: mail }],
],
five
);
})
.add("With unknown signature", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "NOT_FOUND",
},
];
return ;
})
.add("With valid signature", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "VERIFIED",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("With unowned signature", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "VERIFIED",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("With contactless signature", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "VERIFIED",
owner: "trillian",
},
];
return ;
})
.add("With invalid signature", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "INVALID",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("With multiple signatures and invalid status", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x912389FJIQW8W223",
type: "gpg",
status: "INVALID",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "VERIFIED",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
{
keyId: "0x9123891239VFIA33",
type: "gpg",
status: "NOT_FOUND",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("With multiple signatures and valid status", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x912389FJIQW8W223",
type: "gpg",
status: "NOT_FOUND",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
{
keyId: "0x247E908C6FD35473",
type: "gpg",
status: "VERIFIED",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
{
keyId: "0x9123891239VFIA33",
type: "gpg",
status: "NOT_FOUND",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("With multiple signatures and not found status", () => {
const changeset = copy(three);
changeset.signatures = [
{
keyId: "0x912389FJIQW8W223",
type: "gpg",
status: "NOT_FOUND",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
{
keyId: "0x9123891239VFIA33",
type: "gpg",
status: "NOT_FOUND",
owner: "trillian",
contacts: [
{
name: "Tricia Marie McMilla",
mail: "trillian@hitchhiker.com",
},
],
},
];
return ;
})
.add("List with navigation", () => (
));