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;