From dbe8e8e358769f20556369f0ce1d8aa2938ebdee Mon Sep 17 00:00:00 2001 From: jude Date: Mon, 4 Mar 2024 20:36:37 +0000 Subject: [PATCH] Add mentioning for channels --- .../src/components/App/Mentions.tsx | 42 +++++++ .../src/components/App/useGuild.tsx | 4 +- .../src/components/App/useMentions.tsx | 28 ----- .../src/components/Reminder/Content.tsx | 7 +- .../src/components/Reminder/Embed/Author.tsx | 6 +- .../components/Reminder/Embed/Description.tsx | 6 +- .../Reminder/Embed/Fields/Field.tsx | 6 +- .../src/components/Reminder/Embed/Footer.tsx | 6 +- .../src/components/Reminder/Embed/Title.tsx | 7 +- .../Reminder/{TopBar.tsx => TopBar/Guild.tsx} | 25 +++-- .../src/components/Reminder/TopBar/User.tsx | 51 +++++++++ .../src/components/Reminder/TopBar/index.tsx | 13 +++ .../src/components/User/UserReminders.tsx | 106 +++++++++++++++++- 13 files changed, 251 insertions(+), 56 deletions(-) create mode 100644 reminder-dashboard/src/components/App/Mentions.tsx delete mode 100644 reminder-dashboard/src/components/App/useMentions.tsx rename reminder-dashboard/src/components/Reminder/{TopBar.tsx => TopBar/Guild.tsx} (75%) create mode 100644 reminder-dashboard/src/components/Reminder/TopBar/User.tsx create mode 100644 reminder-dashboard/src/components/Reminder/TopBar/index.tsx diff --git a/reminder-dashboard/src/components/App/Mentions.tsx b/reminder-dashboard/src/components/App/Mentions.tsx new file mode 100644 index 0000000..1c5e972 --- /dev/null +++ b/reminder-dashboard/src/components/App/Mentions.tsx @@ -0,0 +1,42 @@ +import { useEffect, useMemo } from "preact/hooks"; +import { useQuery } from "react-query"; +import { fetchGuildChannels, fetchGuildRoles } from "../../api"; +import Tribute from "tributejs"; +import { useGuild } from "./useGuild"; + +export const Mentions = ({ input }) => { + const guild = useGuild(); + + const { data: roles } = useQuery(fetchGuildRoles(guild)); + const { data: channels } = useQuery(fetchGuildChannels(guild)); + + const tribute = useMemo(() => { + return new Tribute({ + collection: [ + { + trigger: "@", + values: (roles || []).map(({ id, name }) => ({ key: name, value: id })), + allowSpaces: true, + selectTemplate: (item) => `<@&${item.original.value}>`, + menuItemTemplate: (item) => `@${item.original.key}`, + }, + { + trigger: "#", + values: (channels || []).map(({ id, name }) => ({ key: name, value: id })), + allowSpaces: true, + selectTemplate: (item) => `<#${item.original.value}>`, + menuItemTemplate: (item) => `#${item.original.key}`, + }, + ], + }); + }, [roles, channels]); + + useEffect(() => { + tribute.detach(input.current); + if (input.current !== null) { + tribute.attach(input.current); + } + }, [tribute]); + + return <>; +}; diff --git a/reminder-dashboard/src/components/App/useGuild.tsx b/reminder-dashboard/src/components/App/useGuild.tsx index 5be8de0..408dd41 100644 --- a/reminder-dashboard/src/components/App/useGuild.tsx +++ b/reminder-dashboard/src/components/App/useGuild.tsx @@ -1,6 +1,6 @@ import { useParams } from "wouter"; export const useGuild = () => { - const { guild } = useParams() as { guild: string }; - return guild; + const { guild } = useParams() as { guild?: string }; + return guild || null; }; diff --git a/reminder-dashboard/src/components/App/useMentions.tsx b/reminder-dashboard/src/components/App/useMentions.tsx deleted file mode 100644 index 855148d..0000000 --- a/reminder-dashboard/src/components/App/useMentions.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { useEffect, useMemo } from "preact/hooks"; -import { useQuery } from "react-query"; -import { fetchGuildRoles } from "../../api"; -import Tribute from "tributejs"; -import { useGuild } from "./useGuild"; - -export const useMentions = (input) => { - const guild = useGuild(); - - const { data: roles } = useQuery(fetchGuildRoles(guild)); - - const tribute = useMemo(() => { - return new Tribute({ - values: (roles || []).map(({ id, name }) => ({ key: name, value: id })), - allowSpaces: true, - selectTemplate: (item) => { - return `<@&${item.original.value}>`; - }, - }); - }, [roles]); - - useEffect(() => { - tribute.detach(input.current); - if (input.current !== null) { - tribute.attach(input.current); - } - }, [tribute]); -}; diff --git a/reminder-dashboard/src/components/Reminder/Content.tsx b/reminder-dashboard/src/components/Reminder/Content.tsx index 3e9d6c9..11bda66 100644 --- a/reminder-dashboard/src/components/Reminder/Content.tsx +++ b/reminder-dashboard/src/components/Reminder/Content.tsx @@ -1,15 +1,16 @@ import { useReminder } from "./ReminderContext"; import { useRef } from "preact/hooks"; -import { useMentions } from "../App/useMentions"; +import { Mentions } from "../App/Mentions"; +import { useGuild } from "../App/useGuild"; export const Content = () => { + const guild = useGuild(); const [reminder, setReminder] = useReminder(); - const input = useRef(null); - useMentions(input); return ( <> + {guild && }