diff --git a/src/common/DayjsSetting.ts b/src/common/DayjsSetting.ts new file mode 100644 index 00000000..cb9d3446 --- /dev/null +++ b/src/common/DayjsSetting.ts @@ -0,0 +1,8 @@ +import dayjs from "dayjs"; +import relativeTime from "dayjs/plugin/relativeTime"; +import isToday from "dayjs/plugin/isToday"; +import isYesterday from "dayjs/plugin/isYesterday"; + +dayjs.extend(relativeTime); +dayjs.extend(isToday); +dayjs.extend(isYesterday); diff --git a/src/common/TippySetting.ts b/src/common/TippySetting.ts new file mode 100644 index 00000000..f000eca1 --- /dev/null +++ b/src/common/TippySetting.ts @@ -0,0 +1,7 @@ +import tippy, { followCursor } from "tippy.js"; + +tippy.setDefaultProps({ + duration: 0, + delay: [0, 0], + plugins: [followCursor] +}); diff --git a/src/common/component/FileBox/index.tsx b/src/common/component/FileBox/index.tsx index 5a1cec47..10add21a 100644 --- a/src/common/component/FileBox/index.tsx +++ b/src/common/component/FileBox/index.tsx @@ -1,6 +1,5 @@ import { FC, ReactElement } from "react"; import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; import Styled from "./styled"; import { VideoPreview, @@ -14,9 +13,6 @@ import { getFileIcon, formatBytes } from "../../utils"; import IconDownload from "../../../assets/icons/download.svg"; import { useAppSelector } from "../../../app/store"; -// todo: move to root file -dayjs.extend(relativeTime); - interface Data { file_type: string; name: string; diff --git a/src/common/component/FileMessage/index.tsx b/src/common/component/FileMessage/index.tsx index bf2214c5..8fef62dc 100644 --- a/src/common/component/FileMessage/index.tsx +++ b/src/common/component/FileMessage/index.tsx @@ -1,6 +1,5 @@ import { FC, useEffect, useState } from "react"; import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; import Styled from "./styled"; import ImageMessage from "./ImageMessage"; import useRemoveLocalMessage from "../../hook/useRemoveLocalMessage"; @@ -8,15 +7,10 @@ import useUploadFile from "../../hook/useUploadFile"; import useSendMessage from "../../hook/useSendMessage"; import Progress from "./Progress"; import { getFileIcon, formatBytes, isImage, getImageSize, ImageSize } from "../../utils"; -// import { ReactComponent as IconDownload } from "../../../assets/icons/download.svg"; -// import { ReactComponent as IconClose } from "../../../assets/icons/close.circle.svg"; import { useAppSelector } from "../../../app/store"; import IconDownload from "../../../assets/icons/download.svg"; import IconClose from "../../../assets/icons/close.circle.svg"; -// todo: move to root file -dayjs.extend(relativeTime); - const isLocalFile = (content: string) => { return content.startsWith("blob:"); }; diff --git a/src/common/component/Message/index.tsx b/src/common/component/Message/index.tsx index 63be51b8..87b855d0 100644 --- a/src/common/component/Message/index.tsx +++ b/src/common/component/Message/index.tsx @@ -1,7 +1,6 @@ import React, { useRef, useState, useEffect, FC } from "react"; import dayjs from "dayjs"; -import isToday from "dayjs/plugin/isToday"; -import isYesterday from "dayjs/plugin/isYesterday"; + import useInView from "./useInView"; import Tippy from "@tippyjs/react"; import Reaction from "./Reaction"; @@ -18,9 +17,6 @@ import useContextMenu from "../../hook/useContextMenu"; import usePinMessage from "../../hook/usePinMessage"; import { useAppSelector } from "../../../app/store"; -// todo: move to root file -dayjs.extend(isToday); -dayjs.extend(isYesterday); interface IProps { readOnly?: boolean; contextId: number; diff --git a/src/common/component/TippyDefault.tsx b/src/common/component/TippyDefault.tsx deleted file mode 100644 index d551a0d3..00000000 --- a/src/common/component/TippyDefault.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import tippy, { followCursor } from "tippy.js"; - -export default function TippyDefault() { - tippy.setDefaultProps({ - duration: 0, - delay: [0, 0], - plugins: [followCursor] - }); - return null; -} diff --git a/src/index.tsx b/src/index.tsx index 18f7c85e..cddb8697 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,29 +1,27 @@ -import ReactDOM from 'react-dom/client'; -import toast, { Toaster } from 'react-hot-toast'; -import { Reset } from 'styled-reset'; -import { DndProvider } from 'react-dnd'; -import { HTML5Backend } from 'react-dnd-html5-backend'; -import './assets/base.css'; -import 'animate.css'; -import * as serviceWorkerRegistration from './serviceWorkerRegistration'; -import TippyDefault from './common/component/TippyDefault'; -import MarkdownStyleOverride from './common/component/MarkdownStyleOverride'; -import ReduxRoutes from './routes'; -import NewVersion from './common/component/NewVersion'; +import ReactDOM from "react-dom/client"; +import toast, { Toaster } from "react-hot-toast"; +import { Reset } from "styled-reset"; +import { DndProvider } from "react-dnd"; +import { HTML5Backend } from "react-dnd-html5-backend"; +import "./assets/base.css"; +import "animate.css"; +import "./common/DayjsSetting"; +import "./common/TippySetting"; +import * as serviceWorkerRegistration from "./serviceWorkerRegistration"; +import MarkdownStyleOverride from "./common/component/MarkdownStyleOverride"; +import ReduxRoutes from "./routes"; +import NewVersion from "./common/component/NewVersion"; -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); +const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); root.render( <> - - - + + - + - + ); @@ -37,9 +35,9 @@ serviceWorkerRegistration.register({ window.location.reload(); }); }; - toast((t) => , { + toast((t) => , { duration: Infinity, - position: 'top-right' + position: "top-right" }); } }); diff --git a/src/routes/chat/DMList/NavItem.tsx b/src/routes/chat/DMList/NavItem.tsx index e264a4a6..70c2ed3e 100644 --- a/src/routes/chat/DMList/NavItem.tsx +++ b/src/routes/chat/DMList/NavItem.tsx @@ -5,14 +5,12 @@ import { useDispatch } from "react-redux"; import { NativeTypes } from "react-dnd-html5-backend"; import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; import Tippy from "@tippyjs/react"; import { useReadMessageMutation } from "../../../app/services/message"; import { removeUserSession } from "../../../app/slices/message.user"; import useNormalizeMessage from "../../../common/hook/useNormalizeMessage"; import useContextMenu from "../../../common/hook/useContextMenu"; import ContextMenu from "../../../common/component/ContextMenu"; -dayjs.extend(relativeTime); import { renderPreviewMessage } from "../utils"; import User from "../../../common/component/User"; import { ContentTypes } from "../../../app/config"; diff --git a/src/routes/chat/SessionList/Session.tsx b/src/routes/chat/SessionList/Session.tsx index 3a1bbb67..2c9abfa4 100644 --- a/src/routes/chat/SessionList/Session.tsx +++ b/src/routes/chat/SessionList/Session.tsx @@ -2,20 +2,16 @@ import { useState, useEffect, FC } from "react"; import dayjs from "dayjs"; import { useDrop } from "react-dnd"; import { NativeTypes } from "react-dnd-html5-backend"; -import relativeTime from "dayjs/plugin/relativeTime"; import ContextMenu from "./ContextMenu"; import getUnreadCount, { renderPreviewMessage } from "../utils"; import User from "../../../common/component/User"; import Avatar from "../../../common/component/Avatar"; -// import iconChannel from "../../../assets/icons/channel.svg?url"; import IconLock from "../../../assets/icons/lock.svg"; import useContextMenu from "../../../common/hook/useContextMenu"; import { useNavigate, NavLink } from "react-router-dom"; import useUploadFile from "../../../common/hook/useUploadFile"; import { useAppSelector } from "../../../app/store"; -// todo: move to root file -dayjs.extend(relativeTime); interface IProps { type?: "user" | "channel"; id: number;