/* * Vencord, a modification for Discord's desktop app * Copyright (c) 2023 Vendicated and contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import "./styles.css"; import { addPreSendListener, removePreSendListener } from "@api/MessageEvents"; import { classNameFactory } from "@api/Styles"; import { Devs } from "@utils/constants"; import { getTheme, Theme } from "@utils/discord"; import { Margins } from "@utils/margins"; import { closeModal, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, openModal } from "@utils/modal"; import definePlugin from "@utils/types"; import { Button, ButtonLooks, ButtonWrapperClasses, ComponentDispatch, Forms, Parser, Select, Tooltip, useMemo, useState } from "@webpack/common"; function parseTime(time: string) { const cleanTime = time.slice(1, -1).replace(/(\d)(AM|PM)$/i, "$1 $2"); let ms = new Date(`${new Date().toDateString()} ${cleanTime}`).getTime() / 1000; if (isNaN(ms)) return time; // add 24h if time is in the past if (Date.now() / 1000 > ms) ms += 86400; return ``; } const Formats = ["", "t", "T", "d", "D", "f", "F", "R"] as const; type Format = typeof Formats[number]; const cl = classNameFactory("vc-st-"); function PickerModal({ rootProps, close }: { rootProps: ModalProps, close(): void; }) { const [value, setValue] = useState(); const [format, setFormat] = useState(""); const time = Math.round((new Date(value!).getTime() || Date.now()) / 1000); const formatTimestamp = (time: number, format: Format) => ``; const [formatted, rendered] = useMemo(() => { const formatted = formatTimestamp(time, format); return [formatted, Parser.parse(formatted)]; }, [time, format]); return ( Timestamp Picker setValue(e.currentTarget.value)} style={{ colorScheme: getTheme() === Theme.Light ? "light" : "dark", }} /> Timestamp Format