ShowTimeoutDetails: Add timeout duration to popout (why wasn't this here?)

This commit is contained in:
Sqaaakoi 2024-09-04 05:17:23 +12:00
parent d0f048f81d
commit cfb4972394
No known key found for this signature in database
3 changed files with 18 additions and 6 deletions

View file

@ -7,15 +7,16 @@
import { SafetyIcon } from "@components/Icons"; import { SafetyIcon } from "@components/Icons";
import { classes, Margins } from "@utils/index"; import { classes, Margins } from "@utils/index";
import { findByPropsLazy, findComponentByCodeLazy } from "@webpack"; import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { Button, Dialog, GuildStore, i18n, Parser, PermissionsBits, PermissionStore, Text, Tooltip, UserStore, useState, useStateFromStores } from "@webpack/common"; import { Button, Dialog, GuildMemberStore, GuildStore, i18n, Parser, PermissionsBits, PermissionStore, Text, Tooltip, UserStore, useState, useStateFromStores } from "@webpack/common";
import { Message } from "discord-types/general"; import { Message } from "discord-types/general";
import { CountDown } from "..";
import { useTimeoutReason } from "../TimeoutReasonStore"; import { useTimeoutReason } from "../TimeoutReasonStore";
const PopoutClasses = findByPropsLazy("container", "scroller", "list"); const PopoutClasses = findByPropsLazy("container", "scroller", "list");
const rowClasses = findByPropsLazy("row", "rowIcon", "rowGuildName"); const rowClasses = findByPropsLazy("row", "rowIcon", "rowGuildName");
const TimeoutIcon = findComponentByCodeLazy("M12 23c.08 0 .14-.08.11-.16a2.88 2.88 0 0 1 .29-2.31l2.2-3.85");
const ChannelIcon = findComponentByCodeLazy("h4.97l-.8 4.84a1 1 0 0 0 1.97.32l.86-5.16H20a1"); const ChannelIcon = findComponentByCodeLazy("h4.97l-.8 4.84a1 1 0 0 0 1.97.32l.86-5.16H20a1");
const CustomAutoModRuleIcon = findComponentByCodeLazy("a1 1 0 0 1 1-1h8a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1ZM3 19a1 1 0 1 0 0 2h8a1 1 0 0 0 0-2H3Z"); const CustomAutoModRuleIcon = findComponentByCodeLazy("a1 1 0 0 1 1-1h8a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1ZM3 19a1 1 0 1 0 0 2h8a1 1 0 0 0 0-2H3Z");
const MessageIcon = findComponentByCodeLazy('"M12 22a10 10 0 1 0-8.45-4.64c.13.19.11.44-.04.61l-2.06 2.37A1 1 0 0 0 2.2 22H12Z"'); const MessageIcon = findComponentByCodeLazy('"M12 22a10 10 0 1 0-8.45-4.64c.13.19.11.44-.04.61l-2.06 2.37A1 1 0 0 0 2.2 22H12Z"');
@ -24,6 +25,7 @@ const { setCommunicationDisabledUntil } = findByPropsLazy("setCommunicationDisab
export default function TimeoutDetailsPopout({ closePopout, guildId, userId, message }: { closePopout(): void; guildId: string; userId: string; message: Message; }) { export default function TimeoutDetailsPopout({ closePopout, guildId, userId, message }: { closePopout(): void; guildId: string; userId: string; message: Message; }) {
const user = UserStore.getUser(userId); const user = UserStore.getUser(userId);
const member = GuildMemberStore.getMember(guildId, userId);
const reason = useTimeoutReason(guildId, userId); const reason = useTimeoutReason(guildId, userId);
const hasModerationPermission = useStateFromStores([PermissionStore], () => PermissionStore.canManageUser(PermissionsBits.MODERATE_MEMBERS, userId, GuildStore.getGuild(guildId))); const hasModerationPermission = useStateFromStores([PermissionStore], () => PermissionStore.canManageUser(PermissionsBits.MODERATE_MEMBERS, userId, GuildStore.getGuild(guildId)));
const parse = (text: string) => Parser.parse(text, true, { const parse = (text: string) => Parser.parse(text, true, {
@ -40,6 +42,16 @@ export default function TimeoutDetailsPopout({ closePopout, guildId, userId, mes
Timeout details for {user.username} Timeout details for {user.username}
</Text> </Text>
<div className={Margins.bottom8} /> <div className={Margins.bottom8} />
<div className={rowClasses.row}>
<Tooltip text="Remaining time in timeout">
{p => <TimeoutIcon {...p} className={rowClasses.rowIcon} height="24" width="24" />}
</Tooltip>
<CountDown
deadline={new Date(member.communicationDisabledUntil!)}
showUnits
stopAtOneSec
/>
</div>
{(reason.moderator || reason.automod) && <div className={rowClasses.row}> {(reason.moderator || reason.automod) && <div className={rowClasses.row}>
<Tooltip text="Moderator"> <Tooltip text="Moderator">
{p => <SafetyIcon {...p} className={rowClasses.rowIcon} height="24" width="24" />} {p => <SafetyIcon {...p} className={rowClasses.rowIcon} height="24" width="24" />}

View file

@ -5,17 +5,15 @@
*/ */
import { classes, Margins } from "@utils/index"; import { classes, Margins } from "@utils/index";
import { findByPropsLazy, findComponentLazy } from "@webpack"; import { findByPropsLazy } from "@webpack";
import { ChannelStore, GuildMemberStore, i18n, Popout, Text, Tooltip } from "@webpack/common"; import { ChannelStore, GuildMemberStore, i18n, Popout, Text, Tooltip } from "@webpack/common";
import { Message } from "discord-types/general"; import { Message } from "discord-types/general";
import { FunctionComponent, ReactNode } from "react"; import { FunctionComponent, ReactNode } from "react";
import { DisplayStyle, settings } from ".."; import { CountDown, DisplayStyle, settings } from "..";
import { useTimeoutReason } from "../TimeoutReasonStore"; import { useTimeoutReason } from "../TimeoutReasonStore";
import TimeoutDetailsPopout from "./TimeoutDetailsPopout"; import TimeoutDetailsPopout from "./TimeoutDetailsPopout";
const CountDown = findComponentLazy(m => m.prototype?.render?.toString().includes(".MAX_AGE_NEVER"));
const clickableClasses = findByPropsLazy("clickable", "avatar", "username"); const clickableClasses = findByPropsLazy("clickable", "avatar", "username");
export default function TooltipWrapper({ message, children, text }: { message: Message; children: FunctionComponent<any>; text: ReactNode; }) { export default function TooltipWrapper({ message, children, text }: { message: Message; children: FunctionComponent<any>; text: ReactNode; }) {

View file

@ -10,10 +10,12 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary"; import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types"; import definePlugin, { OptionType } from "@utils/types";
import { findComponentLazy } from "@webpack";
import TooltipWrapper from "./components/TooltipWrapper"; import TooltipWrapper from "./components/TooltipWrapper";
import { TimeoutReasonStore } from "./TimeoutReasonStore"; import { TimeoutReasonStore } from "./TimeoutReasonStore";
export const CountDown = findComponentLazy(m => m.prototype?.render?.toString().includes(".MAX_AGE_NEVER"));
export const enum DisplayStyle { export const enum DisplayStyle {
Tooltip = "tooltip", Tooltip = "tooltip",