import type { Poast } from "@/types/trill"; import yeschad from "@/assets/reacts/yeschad.png"; import cringe from "@/assets/reacts/cringe.png"; import cry from "@/assets/reacts/cry.png"; import doom from "@/assets/reacts/doom.png"; import galaxy from "@/assets/reacts/galaxy.png"; import gigachad from "@/assets/reacts/gigachad.png"; import pepechin from "@/assets/reacts/pepechin.png"; import pepeeyes from "@/assets/reacts/pepeeyes.png"; import pepegmi from "@/assets/reacts/pepegmi.png"; import pepesad from "@/assets/reacts/pepesad.png"; import pink from "@/assets/reacts/pink.png"; import soy from "@/assets/reacts/soy.png"; import chad from "@/assets/reacts/chad.png"; import pika from "@/assets/reacts/pika.png"; import facepalm from "@/assets/reacts/facepalm.png"; import Icon from "@/components/Icon"; import emojis from "@/logic/emojis.json"; import Modal from "../modals/Modal"; import useLocalState from "@/state/state"; export function ReactModal({ send }: { send: (s: string) => Promise }) { const { setModal } = useLocalState((s) => ({ setModal: s.setModal })); async function sendReact(e: React.MouseEvent, s: string) { e.stopPropagation(); const res = await send(s); if (res) setModal(null); } // todo one more meme return (
sendReact(e, "❤️")}>️️❤️ sendReact(e, "🤔")}>🤔 sendReact(e, "😅")}>😅 sendReact(e, "🤬")}>🤬 sendReact(e, "😂")}>😂️ sendReact(e, "🫡")}>🫡️ sendReact(e, "🤢")}>🤢 sendReact(e, "😭")}>😭 sendReact(e, "😱")}>😱 sendReact(e, "facepalm")} src={facepalm} alt="" /> sendReact(e, "👍")}>👍️ sendReact(e, "👎")}>👎️ sendReact(e, "☝")}>☝️ sendReact(e, "🤝")}>🤝 sendReact(e, "🙏")}>🙏 sendReact(e, "🤡")}>🤡 sendReact(e, "👀")}>👀 sendReact(e, "🎤")}>🎤 sendReact(e, "💯")}>💯 sendReact(e, "🔥")}>🔥 sendReact(e, "yeschad")} src={yeschad} alt="" /> sendReact(e, "gigachad")} src={gigachad} alt="" /> sendReact(e, "pika")} src={pika} alt="" /> sendReact(e, "cringe")} src={cringe} alt="" /> sendReact(e, "pepegmi")} src={pepegmi} alt="" /> sendReact(e, "pepesad")} src={pepesad} alt="" /> sendReact(e, "galaxy")} src={galaxy} alt="" /> sendReact(e, "pink")} src={pink} alt="" /> sendReact(e, "soy")} src={soy} alt="" /> sendReact(e, "cry")} src={cry} alt="" /> sendReact(e, "doom")} src={doom} alt="" />
); } export function stringToReact(s: string) { const em = (emojis as Record)[s.replace(/\:/g, "")]; if (s === "yeschad") return ; if (s === "facepalm") return ; if (s === "yes.jpg") return ; if (s === "gigachad") return ; if (s === "pepechin") return ; if (s === "pepeeyes") return ; if (s === "pepegmi") return ; if (s === "pepesad") return ; if (s === "") return ; if (s === "cringe") return ; if (s === "cry") return ; if (s === "crywojak") return ; if (s === "doom") return ; if (s === "galaxy") return ; if (s === "pink") return ; if (s === "pinkwojak") return ; if (s === "soy") return ; if (s === "chad") return ; if (s === "pika") return ; if (em) return {em}; else if (s.length > 2) return ; else return {s}; } export function TrillReactModal({ poast }: { poast: Poast }) { const { api, addNotification } = useLocalState((s) => ({ api: s.api, addNotification: s.addNotification, })); const our = api!.airlock.our!; async function sendReact(s: string) { const result = await api!.addReact(poast.host, poast.id, s); // Only add notification if reacting to someone else's post if (result && poast.author !== our) { addNotification({ type: "react", from: our, message: `You reacted to ${poast.author}'s post`, reaction: s, postId: poast.id, }); } return result; } return ; }