// @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)} } actions={ event.actorIpAddress ? ( {event.actorIpAddress} ) : ( undefined ) } /> ); }; const IP = styled("span")` color: ${props => props.theme.textTertiary}; font-size: 12px; `; export default EventListItem;