// @flow
import * as React from "react";
import { Link } from "react-router-dom";
import { capitalize } from "lodash";
import styled from "styled-components";
import Time from "components/Time";
import ListItem from "components/List/Item";
import Avatar from "components/Avatar";
import Event from "models/Event";
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{" "}
public link to the{" "}
{event.data.name}{" "}
document
);
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
);
}
return (
{capitalize(event.verbPastTense)} the{" "}
{event.data.title} 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;