]> Untitled Git - lemmy-ui.git/blob - src/shared/components/common/moment-time.tsx
eefeeda3659205c4b32827b814d32e261eb4d8cd
[lemmy-ui.git] / src / shared / components / common / moment-time.tsx
1 import { capitalizeFirstLetter } from "@utils/helpers";
2 import format from "date-fns/format";
3 import formatDistanceToNow from "date-fns/formatDistanceToNow";
4 import parseISO from "date-fns/parseISO";
5 import { Component } from "inferno";
6 import { I18NextService } from "../../services";
7 import { Icon } from "./icon";
8
9 interface MomentTimeProps {
10   published: string;
11   updated?: string;
12   showAgo?: boolean;
13   ignoreUpdated?: boolean;
14 }
15
16 function momentFormat(input: string) {
17   return format(parseISO(input), "PPPPpppp");
18 }
19
20 export class MomentTime extends Component<MomentTimeProps, any> {
21   constructor(props: any, context: any) {
22     super(props, context);
23   }
24
25   createdAndModifiedTimes() {
26     const updated = this.props.updated;
27     let line = `${capitalizeFirstLetter(
28       I18NextService.i18n.t("created")
29     )}: ${momentFormat(this.props.published)}`;
30     if (updated) {
31       line += `\n\n\n${capitalizeFirstLetter(
32         I18NextService.i18n.t("modified")
33       )} ${momentFormat(updated)}`;
34     }
35     return line;
36   }
37
38   render() {
39     if (!this.props.ignoreUpdated && this.props.updated) {
40       return (
41         <span
42           data-tippy-content={this.createdAndModifiedTimes()}
43           className="moment-time font-italics pointer unselectable"
44         >
45           <Icon icon="edit-2" classes="icon-inline me-1" />
46           {formatDistanceToNow(parseISO(this.props.updated))}
47         </span>
48       );
49     } else {
50       const published = this.props.published;
51       return (
52         <span
53           className="moment-time pointer unselectable"
54           data-tippy-content={momentFormat(published)}
55         >
56           {formatDistanceToNow(parseISO(published))}
57         </span>
58       );
59     }
60   }
61 }