summaryrefslogtreecommitdiff
path: root/front/src/components/feed/Post.tsx
blob: 1211a970b75730fc4f08ec967a6f109f2c57abb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import type { PostID, Poast, Reference } from "@/types/trill";

import Header from "./Header";
import Body from "./Body";
import Footer from "./Footer";
import { useLocation } from "wouter";
import useLocalState from "@/state/state";
import RP from "./RP";
import ShipModal from "../modals/ShipModal";
import type { Ship } from "@/types/urbit";
import Sigil from "../Sigil";

export interface PostProps {
  poast: Poast;
  fake?: boolean;
  rter?: Ship;
  rtat?: number;
  rtid?: PostID;
  nest?: number;
  refetch: Function;
}
function Post(props: PostProps) {
  const { poast } = props;
  console.log({ poast });
  if (!poast || poast.contents === null) {
    return null;
  }
  const isRP =
    poast.contents.length === 1 &&
    "ref" in poast.contents[0] &&
    poast.contents[0].ref.type === "trill";
  if (isRP) {
    const ref = (poast.contents[0] as Reference).ref;
    return (
      <RP
        host={ref.ship}
        id={ref.path.slice(1)}
        rter={poast.author}
        rtat={poast.time}
        rtid={poast.id}
      />
    );
  } else return <TrillPost {...props} />;
}
export default Post;

function TrillPost(props: PostProps) {
  const { poast, fake } = props;
  const { setModal } = useLocalState();
  const [_, navigate] = useLocation();
  function openThread(_e: React.MouseEvent) {
    const sel = window.getSelection()?.toString();
    if (!sel) navigate(`/feed/${poast.host}/${poast.id}`);
  }

  function openModal(e: React.MouseEvent) {
    e.stopPropagation();
    setModal(<ShipModal ship={poast.author} />);
  }
  const avatar = (
    <div className="avatar-w sigil cp" role="link" onMouseUp={openModal}>
      <Sigil patp={poast.author} size={42} />
    </div>
  );
  return (
    <div
      className={`timeline-post trill-post cp`}
      role="link"
      onMouseUp={openThread}
    >
      <div className="left">{avatar}</div>
      <div className="right">
        <Header {...props} />
        <Body {...props} />
        {!fake && <Footer {...props} />}
      </div>
    </div>
  );
}