// @flow
import { capitalize } from "lodash";
import * as React from "react";
import { Link } from "react-router-dom";
import styled from "styled-components";
import Event from "models/Event";
import Avatar from "components/Avatar";
import ListItem from "components/List/Item";
import Time from "components/Time";
type Props = {
event: Event,
};
const description = (event) => {
switch (event.name) {
case "api_keys.create":
return (
<>
Created the API token {event.data.name}
>
);
case "api_keys.delete":
return (
<>
Revoked the API token {event.data.name}
>
);
case "teams.create":
return "Created the team";
case "shares.create":
case "shares.revoke":
return (
<>
{capitalize(event.verbPastTense)} a{" "}
share link to the{" "}
{event.data.name}{" "}
document
>
);
case "shares.update":
return (
<>
{event.data.published ? (
<>
Published a document{" "}
share link
>
) : (
<>
Unpublished a document{" "}
share link
>
)}
>
);
case "users.create":
return <>{event.data.name} created an account>;
case "users.invite":
return (
<>
{capitalize(event.verbPastTense)} {event.data.name} (
{event.data.email || ""}
)
>
);
case "users.suspend":
return (
<>
Suspended {event.data.name}’s account
>
);
case "users.activate":
return (
<>
Unsuspended {event.data.name}’s account
>
);
case "users.promote":
return (
<>
Made {event.data.name} an admin
>
);
case "users.demote":
return (
<>
Made {event.data.name} a member
>
);
case "users.delete":
return "Deleted their account";
case "groups.create":
return (
<>
Created the group {event.data.name}
>
);
case "groups.update":
return (
<>
Update the group {event.data.name}
>
);
case "groups.delete":
return (
<>
Deleted the group {event.data.name}
>
);
case "collections.add_user":
case "collections.add_group":
return (
<>
Granted {event.data.name} access to a{" "}
collection
>
);
case "collections.remove_user":
case "collections.remove_group":
return (
<>
Revoked {event.data.name} access to a{" "}
collection
>
);
default:
}
if (event.documentId) {
if (event.name === "documents.delete") {
return (
<>
Deleted the {event.data.title} document
>
);
}
if (event.name === "documents.create") {
return (
<>
{capitalize(event.verbPastTense)} the{" "}
{event.data.title || "Untitled"}
{" "}
document{" "}
{event.data.templateId && (
<>
from a template
>
)}
>
);
}
return (
<>
{capitalize(event.verbPastTense)} the{" "}
{event.data.title || "Untitled"}
{" "}
document
>
);
}
if (event.collectionId) {
if (event.name === "collections.delete") {
return (
<>
Deleted the {event.data.name} collection
>
);
}
return (
<>
{capitalize(event.verbPastTense)} the{" "}
{event.data.name}
{" "}
collection
>
);
}
if (event.userId) {
return (
<>
{capitalize(event.verbPastTense)} the user {event.data.name}
>
);
}
return "";
};
const EventListItem = ({ event }: Props) => {
return (
}
subtitle={
<>
{description(event)} ago ·{" "}
{event.name}
>
}
actions={
event.actorIpAddress ? (
{event.actorIpAddress}
) : undefined
}
/>
);
};
const IP = styled("span")`
color: ${(props) => props.theme.textTertiary};
font-size: 12px;
`;
export default EventListItem;