]> Untitled Git - lemmy-ui.git/blob - src/shared/components/common/moment-time.tsx
fix submodule error
[lemmy-ui.git] / src / shared / components / common / moment-time.tsx
1 import { capitalizeFirstLetter, formatPastDate } from "@utils/helpers";
2 import { format } from "date-fns";
3 import parseISO from "date-fns/parseISO";
4 import { Component } from "inferno";
5 import { I18NextService } from "../../services";
6 import { Icon } from "./icon";
7
8 interface MomentTimeProps {
9   published: string;
10   updated?: string;
11   showAgo?: boolean;
12   ignoreUpdated?: boolean;
13 }
14
15 function formatDate(input: string) {
16   const parsed = parseISO(input + "Z");
17   return format(parsed, "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     )}: ${formatDate(this.props.published)}`;
30     if (updated) {
31       line += `\n\n\n${capitalizeFirstLetter(
32         I18NextService.i18n.t("modified"),
33       )} ${formatDate(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 fst-italic pointer unselectable"
44         >
45           <Icon icon="edit-2" classes="icon-inline me-1" />
46           {formatPastDate(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={formatDate(published)}
55         >
56           {formatPastDate(published)}
57         </span>
58       );
59     }
60   }
61 }