refactor: project configuration

This commit is contained in:
Tristan Yang
2023-05-15 16:46:50 +08:00
parent 187ffd24d1
commit 20b907aae4
293 changed files with 991 additions and 964 deletions
+3 -3
View File
@@ -1,10 +1,10 @@
import { useEffect, FC } from 'react';
import { KEY_LOCAL_MAGIC_TOKEN } from "../../app/config";
import { useLoginMutation } from "../../app/services/auth";
import { KEY_LOCAL_MAGIC_TOKEN } from "@/app/config";
import { useLoginMutation } from "@/app/services/auth";
import toast from "react-hot-toast";
import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query";
import { useTranslation } from 'react-i18next';
import StyledButton from '../../common/component/styled/Button';
import StyledButton from '../../components/styled/Button';
export type GithubLoginSource = "widget" | "webapp"
type Props = {
+3 -3
View File
@@ -1,7 +1,7 @@
import { useEffect } from "react";
import { useLazyGetGeneratedLicenseQuery } from "../../app/services/server";
import useLicense from "../../common/hook/useLicense";
import Button from "../../common/component/styled/Button";
import { useLazyGetGeneratedLicenseQuery } from "@/app/services/server";
import useLicense from "@/hooks/useLicense";
import Button from "@/components/styled/Button";
import { useNavigate } from "react-router-dom";
import { useTranslation } from "react-i18next";
+3 -3
View File
@@ -1,9 +1,9 @@
import { useRef, useState } from 'react';
import { ViewportList } from 'react-viewport-list';
import { useTranslation } from 'react-i18next';
import User from "../../../common/component/User";
import IconAdd from "../../../assets/icons/add.svg";
import InviteModal from "../../../common/component/InviteModal";
import User from "@/components/User";
import IconAdd from "@/assets/icons/add.svg";
import InviteModal from "@/components/InviteModal";
type Props = {
+4 -4
View File
@@ -1,9 +1,9 @@
import { FC, FormEvent } from "react";
import usePinMessage from "../../../common/hook/usePinMessage";
import IconSurprise from "../../../assets/icons/emoji.surprise.svg";
import IconClose from "../../../assets/icons/close.svg";
import usePinMessage from "@/hooks/usePinMessage";
import IconSurprise from "@/assets/icons/emoji.surprise.svg";
import IconClose from "@/assets/icons/close.svg";
import { useTranslation } from "react-i18next";
import PinnedMessage from "../../../common/component/PinnedMessage";
import PinnedMessage from "@/components/PinnedMessage";
type Props = {
id: number;
+10 -10
View File
@@ -6,20 +6,20 @@ import { useDispatch } from "react-redux";
import PinList from "./PinList";
import FavList from "../FavList";
import { updateRememberedNavs } from "../../../app/slices/ui";
import ChannelIcon from "../../../common/component/ChannelIcon";
import Tooltip from "../../../common/component/Tooltip";
import { updateRememberedNavs } from "@/app/slices/ui";
import ChannelIcon from "@/components/ChannelIcon";
import Tooltip from "@/components/Tooltip";
import Layout from "../Layout";
import IconFav from "../../../assets/icons/bookmark.svg";
import IconPeople from "../../../assets/icons/people.svg";
import IconPin from "../../../assets/icons/pin.svg";
import { useAppSelector } from "../../../app/store";
import GoBackNav from "../../../common/component/GoBackNav";
import IconFav from "@/assets/icons/bookmark.svg";
import IconPeople from "@/assets/icons/people.svg";
import IconPin from "@/assets/icons/pin.svg";
import { useAppSelector } from "@/app/store";
import GoBackNav from "@/components/GoBackNav";
import Members from "./Members";
import VoiceChat from "../VoiceChat";
import { updateChannelVisibleAside } from "../../../app/slices/footprint";
import { updateChannelVisibleAside } from "@/app/slices/footprint";
import Dashboard from "../VoiceChat/Dashboard";
import ServerVersionChecker from "../../../common/component/ServerVersionChecker";
import ServerVersionChecker from "@/components/ServerVersionChecker";
type Props = {
cid?: number;
dropFiles?: File[];
+6 -6
View File
@@ -2,13 +2,13 @@ import { FC, useEffect } from "react";
import { useNavigate } from "react-router-dom";
import Tippy from "@tippyjs/react";
import FavList from "../FavList";
import Tooltip from "../../../common/component/Tooltip";
import FavIcon from "../../../assets/icons/bookmark.svg";
import User from "../../../common/component/User";
import Tooltip from "@/components/Tooltip";
import FavIcon from "@/assets/icons/bookmark.svg";
import User from "@/components/User";
import Layout from "../Layout";
import { useAppSelector } from "../../../app/store";
import GoBackNav from "../../../common/component/GoBackNav";
import ServerVersionChecker from "../../../common/component/ServerVersionChecker";
import { useAppSelector } from "@/app/store";
import GoBackNav from "@/components/GoBackNav";
import ServerVersionChecker from "@/components/ServerVersionChecker";
import VoiceChat from "../VoiceChat";
type Props = {
uid: number;
+4 -4
View File
@@ -1,9 +1,9 @@
import { MouseEvent, FC } from "react";
import { useTranslation } from "react-i18next";
import FavoredMessage from "../../common/component/Message/FavoredMessage";
import IconSurprise from "../../assets/icons/emoji.surprise.svg";
import IconRemove from "../../assets/icons/close.svg";
import useFavMessage from "../../common/hook/useFavMessage";
import FavoredMessage from "@/components/Message/FavoredMessage";
import IconSurprise from "@/assets/icons/emoji.surprise.svg";
import IconRemove from "@/assets/icons/close.svg";
import useFavMessage from "@/hooks/useFavMessage";
type Props = { cid?: number; uid?: number };
const FavList: FC<Props> = ({ cid = null, uid = null }) => {
+6 -6
View File
@@ -2,12 +2,12 @@
import { useTranslation } from "react-i18next";
import { useDispatch } from "react-redux";
import { useNavigate } from "react-router-dom";
import { BASE_ORIGIN } from "../../app/config";
import { resetAuthData } from "../../app/slices/auth.data";
import { useAppSelector } from "../../app/store";
import QRCode from "../../common/component/QRCode";
import Button from "../../common/component/styled/Button";
import useLogout from "../../common/hook/useLogout";
import { BASE_ORIGIN } from "@/app/config";
import { resetAuthData } from "@/app/slices/auth.data";
import { useAppSelector } from "@/app/store";
import QRCode from "@/components/QRCode";
import Button from "@/components/styled/Button";
import useLogout from "@/hooks/useLogout";
// type Props = {};
const GuestBlankPlaceholder = () => {
+3 -3
View File
@@ -1,10 +1,10 @@
// import { useState, useEffect } from "react";
// import { NavLink } from "react-router-dom";
// import { useTranslation } from "react-i18next";
import ChannelIcon from "../../../common/component/ChannelIcon";
import ChannelIcon from "@/components/ChannelIcon";
import Layout from "../Layout";
import { useAppSelector } from "../../../app/store";
import GoBackNav from "../../../common/component/GoBackNav";
import { useAppSelector } from "@/app/store";
import GoBackNav from "@/components/GoBackNav";
type Props = {
cid?: number;
+3 -3
View File
@@ -2,10 +2,10 @@
import { useState, useEffect, FC } from "react";
import clsx from "clsx";
import { renderPreviewMessage } from "../../chat/utils";
import Avatar from "../../../common/component/Avatar";
import Avatar from "@/components/Avatar";
import { NavLink } from "react-router-dom";
import { useAppSelector } from "../../../app/store";
import { fromNowTime } from "../../../common/utils";
import { useAppSelector } from "@/app/store";
import { fromNowTime } from "@/utils";
interface IProps {
id: number;
+1 -1
View File
@@ -1,7 +1,7 @@
import { FC } from "react";
import { useState, useEffect } from "react";
import Session from "./Session";
import { useAppSelector } from "../../../app/store";
import { useAppSelector } from "@/app/store";
import LoginTip from "../Layout/LoginTip";
export interface ChatSession {
key: string;
+2 -2
View File
@@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next';
import IconAdd from '../../../assets/icons/add.person.svg';
import IconBlock from '../../../assets/icons/block.svg';
import IconAdd from '@/assets/icons/add.person.svg';
import IconBlock from '@/assets/icons/block.svg';
import { useAppSelector } from '../../../app/store';
import { useUpdateContactStatusMutation } from '../../../app/services/user';
import { ContactAction } from '../../../types/user';
+13 -13
View File
@@ -4,19 +4,19 @@ import { useTranslation } from "react-i18next";
import { useDispatch } from "react-redux";
import clsx from "clsx";
import { useAppSelector } from "../../../app/store";
import Tooltip from "../../../common/component/Tooltip";
import IconCallOff from '../../../assets/icons/call.off.svg';
import IconCallAnswer from '../../../assets/icons/call.svg';
import IconMicOff from '../../../assets/icons/mic.off.svg';
import IconMic from '../../../assets/icons/mic.on.svg';
import IconCamera from '../../../assets/icons/camera.svg';
import IconCameraOff from '../../../assets/icons/camera.off.svg';
import IconScreen from '../../../assets/icons/share.screen.svg';
import { VoicingInfo, updateCalling } from "../../../app/slices/voice";
import { useVoice } from "../../../common/component/Voice";
import { playAgoraVideo } from "../../../common/utils";
import Avatar from "../../../common/component/Avatar";
import { useAppSelector } from "@/app/store";
import Tooltip from "@/components/Tooltip";
import IconCallOff from '@/assets/icons/call.off.svg';
import IconCallAnswer from '@/assets/icons/call.svg';
import IconMicOff from '@/assets/icons/mic.off.svg';
import IconMic from '@/assets/icons/mic.on.svg';
import IconCamera from '@/assets/icons/camera.svg';
import IconCameraOff from '@/assets/icons/camera.off.svg';
import IconScreen from '@/assets/icons/share.screen.svg';
import { VoicingInfo, updateCalling } from "@/app/slices/voice";
import { useVoice } from "@/components/Voice";
import { playAgoraVideo } from "@/utils";
import Avatar from "@/components/Avatar";
type VoicingMember = {
id: number,
+2 -2
View File
@@ -1,7 +1,7 @@
// import { useEffect } from "react";
import { ChatPrefixes } from "../../../app/config";
import { ChatPrefixes } from "@/app/config";
import { useTranslation } from "react-i18next";
import { ChatContext } from "../../../types/common";
import { ChatContext } from "@/types/common";
type Props = {
context: ChatContext,
name: string
@@ -1,7 +1,7 @@
// import { useEffect } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import Button from "../../../common/component/styled/Button";
import Button from "@/components/styled/Button";
// type Props = {};
const LicenseUpgradeTip = () => {
+3 -3
View File
@@ -3,9 +3,9 @@ import clsx from "clsx";
import { useTranslation } from "react-i18next";
import { useDispatch } from "react-redux";
import { useNavigate } from "react-router-dom";
import { resetAuthData } from "../../../app/slices/auth.data";
import Button from "../../../common/component/styled/Button";
import useLogout from "../../../common/hook/useLogout";
import { resetAuthData } from "@/app/slices/auth.data";
import Button from "@/components/styled/Button";
import useLogout from "@/hooks/useLogout";
type Props = {
placement?: "session" | "chat"
};
+11 -11
View File
@@ -1,17 +1,17 @@
import { FC, useState } from "react";
import { useKey } from "rooks";
import toast from "react-hot-toast";
import useDeleteMessage from "../../../common/hook/useDeleteMessage";
import useFavMessage from "../../../common/hook/useFavMessage";
import { updateSelectMessages } from "../../../app/slices/ui";
import IconForward from "../../../assets/icons/forward.svg";
import IconBookmark from "../../../assets/icons/bookmark.svg";
import IconDelete from "../../../assets/icons/delete.svg";
import IconClose from "../../../assets/icons/close.circle.svg";
import ForwardModal from "../../../common/component/ForwardModal";
import DeleteMessageConfirmModal from "../../../common/component/DeleteMessageConfirm";
import { useAppDispatch, useAppSelector } from "../../../app/store";
import { ChatContext } from "../../../types/common";
import useDeleteMessage from "@/hooks/useDeleteMessage";
import useFavMessage from "@/hooks/useFavMessage";
import { updateSelectMessages } from "@/app/slices/ui";
import IconForward from "@/assets/icons/forward.svg";
import IconBookmark from "@/assets/icons/bookmark.svg";
import IconDelete from "@/assets/icons/delete.svg";
import IconClose from "@/assets/icons/close.circle.svg";
import ForwardModal from "@/components/ForwardModal";
import DeleteMessageConfirmModal from "@/components/DeleteMessageConfirm";
import { useAppDispatch, useAppSelector } from "@/app/store";
import { ChatContext } from "@/types/common";
type Props = {
context: ChatContext;
@@ -1,10 +1,10 @@
import { Waveform } from '@uiball/loaders';
import clsx from 'clsx';
// import React from 'react'
import { useTranslation } from 'react-i18next';
import { NavLink, useLocation } from 'react-router-dom';
import { useAppSelector } from '../../../../app/store';
import EditIcon from "../../../../assets/icons/edit.svg";
import clsx from 'clsx';
import { useTranslation } from 'react-i18next';
import { Waveform } from '@uiball/loaders';
import { useAppSelector } from '@/app/store';
import EditIcon from "@/assets/icons/edit.svg";
type ChannelHeaderProps = {
cid: number
@@ -4,15 +4,15 @@ import { useEffect, useRef, useCallback, useState } from 'react';
import { useDebounce } from 'rooks';
import { Virtuoso, VirtuosoHandle } from 'react-virtuoso';
import { useLazyLoadMoreMessagesQuery, useReadMessageMutation } from '../../../../app/services/message';
import { useAppSelector } from '../../../../app/store';
import { useLazyLoadMoreMessagesQuery, useReadMessageMutation } from '@/app/services/message';
import { useAppSelector } from '@/app/store';
import { renderMessageFragment } from '../../utils';
import NewMessageBottomTip from "../NewMessageBottomTip";
import CustomList from './CustomList';
import CustomHeader from './CustomHeader';
import { useDispatch } from 'react-redux';
import { updateHistoryMark } from '../../../../app/slices/footprint';
import { ChatContext } from '../../../../types/common';
import { updateHistoryMark } from '@/app/slices/footprint';
import { ChatContext } from '@/types/common';
type Props = {
context: ChatContext,
id: number
+7 -7
View File
@@ -5,21 +5,21 @@ import clsx from "clsx";
import { toast } from "react-hot-toast";
import Send from "../../../common/component/Send";
import Send from "@/components/Send";
import Operations from "./Operations";
import useUploadFile from "../../../common/hook/useUploadFile";
import { useAppSelector } from "../../../app/store";
import useUploadFile from "@/hooks/useUploadFile";
import { useAppSelector } from "@/app/store";
import LoginTip from "./LoginTip";
import useLicense from "../../../common/hook/useLicense";
import useLicense from "@/hooks/useLicense";
import LicenseUpgradeTip from "./LicenseOutdatedTip";
import DnDTip from "./DnDTip";
import IconWarning from '../../../assets/icons/warning.svg';
import ImagePreview from "../../../common/component/ImagePreview";
import IconWarning from '@/assets/icons/warning.svg';
import ImagePreview from "@/components/ImagePreview";
import VirtualMessageFeed from "./VirtualMessageFeed";
import DMVoice from "./DMVoicing";
import AddContactTip from "./AddContactTip";
import { ChatContext } from "../../../types/common";
import { ChatContext } from "@/types/common";
interface Props {
readonly?: boolean;
+12 -12
View File
@@ -2,18 +2,18 @@
import { useTranslation } from 'react-i18next';
import clsx from 'clsx';
import { useAppSelector } from '../../app/store';
import User from '../../common/component/User';
import IconMic from '../../assets/icons/mic.on.svg';
import IconMicOff from '../../assets/icons/mic.off.svg';
import IconCallOff from '../../assets/icons/headphone.svg';
import IconSoundOn from '../../assets/icons/sound.on.svg';
import IconSoundOff from '../../assets/icons/sound.off.svg';
// import IconCameraOff from '../../assets/icons/camera.off.svg';
import IconCamera from '../../assets/icons/camera.svg';
import IconScreen from '../../assets/icons/share.screen.svg';
import { useVoice } from '../../common/component/Voice';
import Signal from '../../common/component/Signal';
import Tooltip from '../../common/component/Tooltip';
import User from '../../components/User';
import IconMic from '@/assets/icons/mic.on.svg';
import IconMicOff from '@/assets/icons/mic.off.svg';
import IconCallOff from '@/assets/icons/headphone.svg';
import IconSoundOn from '@/assets/icons/sound.on.svg';
import IconSoundOff from '@/assets/icons/sound.off.svg';
// import IconCameraOff from '@/assets/icons/camera.off.svg';
import IconCamera from '@/assets/icons/camera.svg';
import IconScreen from '@/assets/icons/share.screen.svg';
import { useVoice } from '../../components/Voice';
import Signal from '../../components/Signal';
import Tooltip from '../../components/Tooltip';
import { ChatContext } from '../../types/common';
type Props = {
+8 -8
View File
@@ -2,15 +2,15 @@ import { FC, ReactElement } from "react";
import Tippy from "@tippyjs/react";
import { useDispatch } from "react-redux";
import { useNavigate, useLocation, useMatch } from "react-router-dom";
import { usePinChatMutation, useUnpinChatMutation, useUpdateMuteSettingMutation } from "../../../app/services/user";
import { useReadMessageMutation } from "../../../app/services/message";
import { removeUserSession } from "../../../app/slices/message.user";
import ContextMenu, { Item } from "../../../common/component/ContextMenu";
import useUserOperation from "../../../common/hook/useUserOperation";
import { useAppSelector } from "../../../app/store";
import { usePinChatMutation, useUnpinChatMutation, useUpdateMuteSettingMutation } from "@/app/services/user";
import { useReadMessageMutation } from "@/app/services/message";
import { removeUserSession } from "@/app/slices/message.user";
import ContextMenu, { Item } from "@/components/ContextMenu";
import useUserOperation from "@/hooks/useUserOperation";
import { useAppSelector } from "@/app/store";
import { useTranslation } from "react-i18next";
import { ChatContext } from "../../../types/common";
import { compareVersion } from "../../../common/utils";
import { ChatContext } from "@/types/common";
import { compareVersion } from "@/utils";
type Props = {
context: ChatContext;
pinned: boolean;
+10 -10
View File
@@ -6,16 +6,16 @@ import { NativeTypes } from "react-dnd-html5-backend";
import { useNavigate, NavLink, useMatch } from "react-router-dom";
import ContextMenu from "./ContextMenu";
import getUnreadCount, { renderPreviewMessage } from "../utils";
import User from "../../../common/component/User";
import Avatar from "../../../common/component/Avatar";
import IconLock from "../../../assets/icons/lock.svg";
import IconMute from "../../../assets/icons/mute.svg";
import IconVoicing from "../../../assets/icons/voicing.svg";
import useContextMenu from "../../../common/hook/useContextMenu";
import useUploadFile from "../../../common/hook/useUploadFile";
import { useAppSelector } from "../../../app/store";
import { fromNowTime } from "../../../common/utils";
import { ChatContext } from "../../../types/common";
import User from "@/components/User";
import Avatar from "@/components/Avatar";
import IconLock from "@/assets/icons/lock.svg";
import IconMute from "@/assets/icons/mute.svg";
import IconVoicing from "@/assets/icons/voicing.svg";
import useContextMenu from "@/hooks/useContextMenu";
import useUploadFile from "@/hooks/useUploadFile";
import { useAppSelector } from "@/app/store";
import { fromNowTime } from "@/utils";
import { ChatContext } from "@/types/common";
interface IProps {
type?: ChatContext;
+4 -4
View File
@@ -3,10 +3,10 @@ import { useState, useEffect } from "react";
import { ViewportList } from "react-viewport-list";
import Session from "./Session";
import DeleteChannelConfirmModal from "../../settingChannel/DeleteConfirmModal";
import InviteModal from "../../../common/component/InviteModal";
import { useAppSelector } from "../../../app/store";
import { ChatContext } from "../../../types/common";
import { PinChatTargetChannel, PinChatTargetUser } from "../../../types/sse";
import InviteModal from "@/components/InviteModal";
import { useAppSelector } from "@/app/store";
import { ChatContext } from "@/types/common";
import { PinChatTargetChannel, PinChatTargetUser } from "@/types/sse";
export interface ChatSession {
type: ChatContext;
id: number;
+1 -1
View File
@@ -1,7 +1,7 @@
// import { useEffect } from 'react';
// import { useDispatch } from 'react-redux';
import VoiceManagement from './VoiceManagement';
import { useVoice } from '../../../common/component/Voice';
import { useVoice } from '../../../components/Voice';
import { ChatContext } from '../../../types/common';
type Props = {
+13 -13
View File
@@ -4,19 +4,19 @@ import { useTranslation } from 'react-i18next';
import { VoicingInfo, updatePin } from '../../../app/slices/voice';
import { useAppSelector } from '../../../app/store';
import Avatar from '../../../common/component/Avatar';
// import IconHeadphone from '../../../assets/icons/sound.on.svg';
// import IconHeadphoneOff from '../../../assets/icons/sound.off.svg';
import IconMic from '../../../assets/icons/mic.on.svg';
import IconMicOff from '../../../assets/icons/mic.off.svg';
import IconCameraOff from '../../../assets/icons/camera.off.svg';
import IconCamera from '../../../assets/icons/camera.svg';
import IconFullscreen from '../../../assets/icons/fullscreen.svg';
import IconScreen from '../../../assets/icons/share.screen.svg';
import IconCallOff from '../../../assets/icons/call.off.svg';
import StyledButton from '../../../common/component/styled/Button';
import Tooltip from '../../../common/component/Tooltip';
import { playAgoraVideo } from '../../../common/utils';
import Avatar from '../../../components/Avatar';
// import IconHeadphone from '@/assets/icons/sound.on.svg';
// import IconHeadphoneOff from '@/assets/icons/sound.off.svg';
import IconMic from '@/assets/icons/mic.on.svg';
import IconMicOff from '@/assets/icons/mic.off.svg';
import IconCameraOff from '@/assets/icons/camera.off.svg';
import IconCamera from '@/assets/icons/camera.svg';
import IconFullscreen from '@/assets/icons/fullscreen.svg';
import IconScreen from '@/assets/icons/share.screen.svg';
import IconCallOff from '@/assets/icons/call.off.svg';
import StyledButton from '../../../components/styled/Button';
import Tooltip from '../../../components/Tooltip';
import { playAgoraVideo } from '@/utils';
import { ChatContext } from '../../../types/common';
import { updateChannelVisibleAside } from '../../../app/slices/footprint';
import { useDispatch } from 'react-redux';
+3 -3
View File
@@ -5,9 +5,9 @@ import { useTranslation } from 'react-i18next';
import { useDispatch } from 'react-redux';
import { updateChannelVisibleAside, updateDMVisibleAside } from '../../../app/slices/footprint';
import { useAppSelector } from '../../../app/store';
import IconHeadphone from '../../../assets/icons/headphone.svg';
import Tooltip from '../../../common/component/Tooltip';
import { useVoice } from '../../../common/component/Voice';
import IconHeadphone from '@/assets/icons/headphone.svg';
import Tooltip from '../../../components/Tooltip';
import { useVoice } from '../../../components/Voice';
import { useGetAgoraStatusQuery } from '../../../app/services/server';
import { ChatContext } from '../../../types/common';
import { updateCalling } from '../../../app/slices/voice';
+13 -13
View File
@@ -2,22 +2,22 @@ import { useEffect, useState, MouseEvent } from 'react';
import { useDispatch } from 'react-redux';
import { useTranslation } from 'react-i18next';
import clsx from 'clsx';
import IconMic from '../../assets/icons/mic.on.svg';
import IconMicOff from '../../assets/icons/mic.off.svg';
import IconCameraOff from '../../assets/icons/camera.off.svg';
import IconPin from '../../assets/icons/pin.svg';
import IconCamera from '../../assets/icons/camera.svg';
import IconScreen from '../../assets/icons/share.screen.svg';
import IconExitScreen from '../../assets/icons/fullscreen.exit.svg';
import IconCallOff from '../../assets/icons/call.off.svg';
import IconMic from '@/assets/icons/mic.on.svg';
import IconMicOff from '@/assets/icons/mic.off.svg';
import IconCameraOff from '@/assets/icons/camera.off.svg';
import IconPin from '@/assets/icons/pin.svg';
import IconCamera from '@/assets/icons/camera.svg';
import IconScreen from '@/assets/icons/share.screen.svg';
import IconExitScreen from '@/assets/icons/fullscreen.exit.svg';
import IconCallOff from '@/assets/icons/call.off.svg';
import { ChatContext } from '../../types/common';
import { useAppSelector } from '../../app/store';
import Avatar from '../../common/component/Avatar';
import { playAgoraVideo } from '../../common/utils';
import Avatar from '../../components/Avatar';
import { playAgoraVideo } from '../../utils';
import { updateChannelVisibleAside } from '../../app/slices/footprint';
import Tooltip from '../../common/component/Tooltip';
import { useVoice } from '../../common/component/Voice';
import StyledButton from '../../common/component/styled/Button';
import Tooltip from '../../components/Tooltip';
import { useVoice } from '../../components/Voice';
import StyledButton from '../../components/styled/Button';
import { updatePin } from '../../app/slices/voice';
type Props = {
+6 -6
View File
@@ -2,18 +2,18 @@ import { memo, useState } from "react";
import { useMatch, useParams } from "react-router-dom";
import clsx from "clsx";
import BlankPlaceholder from "../../common/component/BlankPlaceholder";
import Server from "../../common/component/Server";
import BlankPlaceholder from "@/components/BlankPlaceholder";
import Server from "@/components/Server";
import ChannelChat from "./ChannelChat";
import DMChat from "./DMChat";
import UsersModal from "../../common/component/UsersModal";
import ChannelModal from "../../common/component/ChannelModal";
import UsersModal from "@/components/UsersModal";
import ChannelModal from "@/components/ChannelModal";
import SessionList from "./SessionList";
import { useAppSelector } from "../../app/store";
import { useAppSelector } from "@/app/store";
import GuestBlankPlaceholder from "./GuestBlankPlaceholder";
import GuestChannelChat from "./GuestChannelChat";
import GuestSessionList from "./GuestSessionList";
import ErrorCatcher from "../../common/component/ErrorCatcher";
import ErrorCatcher from "@/components/ErrorCatcher";
import RTCWidget from "./RTCWidget";
import VoiceFullscreen from "./VoiceFullscreen";
+9 -9
View File
@@ -1,16 +1,16 @@
import React from "react";
import dayjs from "dayjs";
import { useDispatch } from "react-redux";
import { isImage } from "../../common/utils";
import { ContentTypes } from "../../app/config";
import Checkbox from "../../common/component/styled/Checkbox";
import Divider from "../../common/component/Divider";
import Message from "../../common/component/Message";
import { updateSelectMessages } from "../../app/slices/ui";
import { useAppSelector } from "../../app/store";
import LinkifyText from "../../common/component/LinkifyText";
import { isImage } from "@/utils";
import { ContentTypes } from "@/app/config";
import Checkbox from "@/components/styled/Checkbox";
import Divider from "@/components/Divider";
import Message from "@/components/Message";
import { updateSelectMessages } from "@/app/slices/ui";
import { useAppSelector } from "@/app/store";
import LinkifyText from "@/components/LinkifyText";
import i18n from "../../i18n";
import { ChatContext } from "../../types/common";
import { ChatContext } from "@/types/common";
export function getUnreadCount({
mids = [],
+13 -11
View File
@@ -1,20 +1,22 @@
import { useState, useEffect, MouseEvent } from "react";
import FavoredMessage from "../../common/component/Message/FavoredMessage";
import dayjs from "dayjs";
import IconAudio from "../../assets/icons/file.audio.svg";
import IconVideo from "../../assets/icons/file.video.svg";
import IconUnknown from "../../assets/icons/file.unknown.svg";
import IconImage from "../../assets/icons/file.image.svg";
import IconChannel from "../../assets/icons/channel.svg";
import IconRemove from "../../assets/icons/close.svg";
import { ContentTypes } from "../../app/config";
import { useAppSelector } from "../../app/store";
import { Favorite } from "../../app/slices/favorites";
import { useTranslation } from "react-i18next";
import clsx from "clsx";
import useFavMessage from "../../common/hook/useFavMessage";
import FavoredMessage from "@/components/Message/FavoredMessage";
import IconAudio from "@/assets/icons/file.audio.svg";
import IconVideo from "@/assets/icons/file.video.svg";
import IconUnknown from "@/assets/icons/file.unknown.svg";
import IconImage from "@/assets/icons/file.image.svg";
import IconChannel from "@/assets/icons/channel.svg";
import IconRemove from "@/assets/icons/close.svg";
import { ContentTypes } from "@/app/config";
import { useAppSelector } from "@/app/store";
import { Favorite } from "@/app/slices/favorites";
import useFavMessage from "@/hooks/useFavMessage";
type filter = "audio" | "video" | "image" | "";
function FavsPage() {
const { t } = useTranslation("fav");
const [filter, setFilter] = useState<filter>("");
+2 -2
View File
@@ -1,7 +1,7 @@
import { FC } from "react";
import { NavLink, useLocation } from "react-router-dom";
import Tooltip from "../../common/component/Tooltip";
import IconSetting from "../../assets/icons/setting.svg";
import Tooltip from "@/components/Tooltip";
import IconSetting from "@/assets/icons/setting.svg";
type Props = {};
const Menu: FC<Props> = () => {
const { pathname } = useLocation();
+3 -3
View File
@@ -3,9 +3,9 @@ import React from 'react';
import { NavLink, useLocation, useMatch } from 'react-router-dom';
import { useAppSelector } from '../../app/store';
import ChatIcon from "../../assets/icons/chat.svg";
import UserIcon from "../../assets/icons/user.svg";
import SettingIcon from "../../assets/icons/setting.svg";
import ChatIcon from "@/assets/icons/chat.svg";
import UserIcon from "@/assets/icons/user.svg";
import SettingIcon from "@/assets/icons/setting.svg";
// type Props = {}
+2 -2
View File
@@ -1,7 +1,7 @@
import { FC } from "react";
import { NavLink, useLocation } from "react-router-dom";
import Avatar from "../../common/component/Avatar";
import { useAppSelector } from "../../app/store";
import Avatar from "@/components/Avatar";
import { useAppSelector } from "@/app/store";
interface Props {
uid: number;
+15 -15
View File
@@ -4,23 +4,23 @@ import { useTranslation } from "react-i18next";
import { useDispatch } from "react-redux";
import User from "./User";
import Loading from "../../common/component/Loading";
import Loading from "@/components/Loading";
import Menu from "./Menu";
import usePreload from "../../common/hook/usePreload";
import Tooltip from "../../common/component/Tooltip";
import Notification from "../../common/component/Notification";
import Manifest from "../../common/component/Manifest";
import ChatIcon from "../../assets/icons/chat.svg";
import UserIcon from "../../assets/icons/user.svg";
import FavIcon from "../../assets/icons/bookmark.svg";
import FolderIcon from "../../assets/icons/folder.svg";
import { useAppSelector } from "../../app/store";
import usePreload from "@/hooks/usePreload";
import Tooltip from "@/components/Tooltip";
import Notification from "@/components/Notification";
import Manifest from "@/components/Manifest";
import ChatIcon from "@/assets/icons/chat.svg";
import UserIcon from "@/assets/icons/user.svg";
import FavIcon from "@/assets/icons/bookmark.svg";
import FolderIcon from "@/assets/icons/folder.svg";
import { useAppSelector } from "@/app/store";
import MobileNavs from "./MobileNavs";
import { updateRememberedNavs } from "../../app/slices/ui";
import UnreadTabTip from "../../common/component/UnreadTabTip";
import ReLoginModal from "../../common/component/ReLoginModal";
import Voice from "../../common/component/Voice";
import ServerVersionChecker from "../../common/component/ServerVersionChecker";
import { updateRememberedNavs } from "@/app/slices/ui";
import UnreadTabTip from "@/components/UnreadTabTip";
import ReLoginModal from "@/components/ReLoginModal";
import Voice from "@/components/Voice";
import ServerVersionChecker from "@/components/ServerVersionChecker";
function HomePage() {
+5 -5
View File
@@ -25,14 +25,14 @@ const ResourceManagement = lazy(() => import("./resources"));
const GuestLogin = lazy(() => import("./guest"));
const ChatPage = lazy(() => import("./chat"));
const HomePage = lazy(() => import("./home"));
import RequireAuth from "../common/component/RequireAuth";
import RequireNoAuth from "../common/component/RequireNoAuth";
import Meta from "../common/component/Meta";
import RequireAuth from "@/components/RequireAuth";
import RequireNoAuth from "@/components/RequireNoAuth";
import Meta from "@/components/Meta";
import LazyIt from './lazy';
import store, { useAppSelector } from "../app/store";
import useDeviceToken from "../common/component/Notification/useDeviceToken";
import useDeviceToken from "@/components/Notification/useDeviceToken";
import { vapidKey } from "../app/config";
import RequireSingleTab from "../common/component/RequireSingleTab";
import RequireSingleTab from "@/components/RequireSingleTab";
import InvitePrivate from "./invitePrivate";
let toastId: string;
const PageRoutes = () => {
+1 -1
View File
@@ -1,7 +1,7 @@
import { useEffect } from 'react';
import { useNavigate, useParams, useSearchParams } from 'react-router-dom';
import { useJoinPrivateChannelMutation, useLazyGetChannelQuery } from '../../app/services/channel';
import StyledButton from '../../common/component/styled/Button';
import StyledButton from '../../components/styled/Button';
import { useCheckMagicTokenValidMutation } from '../../app/services/auth';
import { useAppSelector } from '../../app/store';
+1 -1
View File
@@ -1,5 +1,5 @@
import { ReactNode, Suspense, FC } from "react";
import Loading from "../common/component/Loading";
import Loading from "@/components/Loading";
type Props = {
children?: ReactNode;
+1 -1
View File
@@ -1,5 +1,5 @@
import { useNavigate } from "react-router-dom";
import Button from "../../common/component/styled/Button";
import Button from "@/components/styled/Button";
export default function MagicLinkLogin() {
const navigate = useNavigate();
+5 -5
View File
@@ -1,12 +1,12 @@
/* eslint-disable no-undef */
import { useState, useEffect, useRef } from "react";
import MetaMaskOnboarding from "@metamask/onboarding";
import { useLazyGetMetamaskNonceQuery } from "../../app/services/auth";
import metamaskSvg from "../../assets/icons/metamask.svg?url";
import { LoginCredential } from "../../types/auth";
import { useLazyGetMetamaskNonceQuery } from "@/app/services/auth";
import metamaskSvg from "@/assets/icons/metamask.svg?url";
import { LoginCredential } from "@/types/auth";
import { useTranslation } from "react-i18next";
import { AuthType } from "../../types/common";
import Button from "../../common/component/styled/Button";
import { AuthType } from "@/types/common";
import Button from "@/components/styled/Button";
// import toast from "react-hot-toast";
export default function MetamaskLoginButton({
+6 -6
View File
@@ -1,13 +1,13 @@
/* eslint-disable no-undef */
import { FC, useState } from "react";
import StyledModal from "../../common/component/styled/Modal";
import Modal from "../../common/component/Modal";
import StyledButton from "../../common/component/styled/Button";
import StyledModal from "@/components/styled/Modal";
import Modal from "@/components/Modal";
import StyledButton from "@/components/styled/Button";
import OidcLoginEntry from "./OidcLoginEntry";
import { OIDCConfig } from "../../types/auth";
import { OIDCConfig } from "@/types/auth";
import { useTranslation } from "react-i18next";
import { AuthType } from "../../types/common";
import Button from "../../common/component/styled/Button";
import { AuthType } from "@/types/common";
import Button from "@/components/styled/Button";
interface IProps {
issuers?: OIDCConfig[];
type?: AuthType
+3 -3
View File
@@ -1,7 +1,7 @@
import { useEffect, FC } from "react";
import { useGetOpenidMutation } from "../../app/services/auth";
import Button from "../../common/component/styled/Button";
import { OIDCConfig } from "../../types/auth";
import { useGetOpenidMutation } from "@/app/services/auth";
import Button from "@/components/styled/Button";
import { OIDCConfig } from "@/types/auth";
const OidcLoginEntry: FC<{ issuer: OIDCConfig }> = ({ issuer }) => {
const [getOpenId, { data, isLoading, isSuccess }] = useGetOpenidMutation();
+5 -5
View File
@@ -1,10 +1,10 @@
import { useEffect } from 'react';
import toast from 'react-hot-toast';
import { useGetLoginConfigQuery } from "../../app/services/server";
import useGithubAuthConfig from "../../common/hook/useGithubAuthConfig";
import useGoogleAuthConfig from "../../common/hook/useGoogleAuthConfig";
import GoogleLoginButton from "../../common/component/GoogleLoginButton";
import GithubLoginButton from "../../common/component/GithubLoginButton";
import { useGetLoginConfigQuery } from "@/app/services/server";
import useGithubAuthConfig from "@/hooks/useGithubAuthConfig";
import useGoogleAuthConfig from "@/hooks/useGoogleAuthConfig";
import GoogleLoginButton from "@/components/GoogleLoginButton";
import GithubLoginButton from "@/components/GithubLoginButton";
import MetamaskLoginButton from "./MetamaskLoginButton";
import OidcLoginButton from "./OidcLoginButton";
import { useLoginMutation } from '../../app/services/auth';
+8 -8
View File
@@ -1,20 +1,20 @@
/* eslint-disable no-undef */
import { useState, useEffect, FormEvent, ChangeEvent } from "react";
import toast from "react-hot-toast";
import BASE_URL from "../../app/config";
import BASE_URL from "@/app/config";
import Input from "../../common/component/styled/Input";
import Button from "../../common/component/styled/Button";
import Input from "@/components/styled/Input";
import Button from "@/components/styled/Button";
import MagicLinkLogin from "./MagicLinkLogin";
import SignUpLink from "./SignUpLink";
import { useLoginMutation } from "../../app/services/auth";
import { useGetLoginConfigQuery, useGetSMTPStatusQuery } from "../../app/services/server";
import useGoogleAuthConfig from "../../common/hook/useGoogleAuthConfig";
import { useLoginMutation } from "@/app/services/auth";
import { useGetLoginConfigQuery, useGetSMTPStatusQuery } from "@/app/services/server";
import useGoogleAuthConfig from "@/hooks/useGoogleAuthConfig";
import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query";
import { useTranslation } from "react-i18next";
import SocialLoginButtons from "./SocialLoginButtons";
import Divider from "../../common/component/Divider";
import { useAppSelector } from "../../app/store";
import Divider from "@/components/Divider";
import { useAppSelector } from "@/app/store";
export default function LoginPage() {
const serverName = useAppSelector(store => store.server.name);
+2 -2
View File
@@ -1,9 +1,9 @@
import { useState, useEffect } from "react";
import { useDispatch } from "react-redux";
import { useNavigate, useParams } from "react-router-dom";
import { useLoginMutation } from "../../app/services/auth";
import { useLoginMutation } from "@/app/services/auth";
import toast from "react-hot-toast";
import { setAuthData } from "../../app/slices/auth.data";
import { setAuthData } from "@/app/slices/auth.data";
import { useTranslation } from "react-i18next";
export default function OAuthPage() {
@@ -1,9 +1,9 @@
import { useState, useEffect, ChangeEvent } from 'react';
import { toast } from "react-hot-toast";
import StyledInput from "../../../common/component/styled/Input";
import StyledButton from "../../../common/component/styled/Button";
import { useGetFrontendUrlQuery, useUpdateFrontendUrlMutation } from "../../../app/services/server";
import InfoIcon from '../../../assets/icons/info.svg';
import StyledInput from "@/components/styled/Input";
import StyledButton from "@/components/styled/Button";
import { useGetFrontendUrlQuery, useUpdateFrontendUrlMutation } from "@/app/services/server";
import InfoIcon from '@/assets/icons/info.svg';
import { useTranslation } from 'react-i18next';
@@ -1,16 +1,16 @@
import { useEffect, useState, FC, useRef } from "react";
import toast from "react-hot-toast";
import { useDispatch } from "react-redux";
import StyledInput from "../../../common/component/styled/Input";
import StyledButton from "../../../common/component/styled/Button";
import StyledInput from "@/components/styled/Input";
import StyledButton from "@/components/styled/Button";
import {
useCreateAdminMutation,
useGetServerQuery,
useUpdateServerMutation
} from "../../../app/services/server";
import { useLoginMutation } from "../../../app/services/auth";
import { updateInitialized } from "../../../app/slices/auth.data";
import { useAppSelector } from "../../../app/store";
} from "@/app/services/server";
import { useLoginMutation } from "@/app/services/auth";
import { updateInitialized } from "@/app/slices/auth.data";
import { useAppSelector } from "@/app/store";
import { useTranslation } from "react-i18next";
import { useWizard } from "react-use-wizard";
+2 -2
View File
@@ -1,6 +1,6 @@
import { useNavigate } from "react-router-dom";
import StyledButton from "../../../common/component/styled/Button";
import PlayIcon from "../../../assets/icons/play.svg?url";
import StyledButton from "@/components/styled/Button";
import PlayIcon from "@/assets/icons/play.svg?url";
import { Trans, useTranslation } from "react-i18next";
+4 -4
View File
@@ -1,10 +1,10 @@
import { useTranslation } from "react-i18next";
import { useWizard } from "react-use-wizard";
import StyledInput from "../../../common/component/styled/Input";
import StyledButton from "../../../common/component/styled/Button";
import useInviteLink from "../../../common/hook/useInviteLink";
import ServerVersionChecker from "../../../common/component/ServerVersionChecker";
import StyledInput from "@/components/styled/Input";
import StyledButton from "@/components/styled/Button";
import useInviteLink from "@/hooks/useInviteLink";
import ServerVersionChecker from "@/components/ServerVersionChecker";
import UpdateFrontendURL from "./UpdateFrontendURL";
export default function InviteLink() {
+2 -2
View File
@@ -1,7 +1,7 @@
import { FC } from "react";
import toast from "react-hot-toast";
import StyledInput from "../../../common/component/styled/Input";
import StyledButton from "../../../common/component/styled/Button";
import StyledInput from "@/components/styled/Input";
import StyledButton from "@/components/styled/Button";
import { useTranslation } from "react-i18next";
import { useWizard } from "react-use-wizard";
+2 -2
View File
@@ -1,5 +1,5 @@
import StyledButton from "../../../common/component/styled/Button";
import PlayIcon from "../../../assets/icons/play.svg?url";
import StyledButton from "@/components/styled/Button";
import PlayIcon from "@/assets/icons/play.svg?url";
import { useTranslation } from "react-i18next";
import { useWizard } from "react-use-wizard";
@@ -1,9 +1,9 @@
import { useEffect, useState } from "react";
import toast from "react-hot-toast";
import StyledRadio from "../../../common/component/styled/Radio";
import StyledButton from "../../../common/component/styled/Button";
import { useGetLoginConfigQuery, useUpdateLoginConfigMutation } from "../../../app/services/server";
import { WhoCanSignUp } from "../../../types/server";
import StyledRadio from "@/components/styled/Radio";
import StyledButton from "@/components/styled/Button";
import { useGetLoginConfigQuery, useUpdateLoginConfigMutation } from "@/app/services/server";
import { WhoCanSignUp } from "@/types/server";
import { useTranslation } from "react-i18next";
import { useWizard } from "react-use-wizard";
+5 -5
View File
@@ -3,12 +3,12 @@ import { useDispatch } from "react-redux";
import { useTranslation } from "react-i18next";
import { useParams } from "react-router-dom";
import toast from "react-hot-toast";
import { setAuthData } from "../../app/slices/auth.data";
import Input from "../../common/component/styled/Input";
import Button from "../../common/component/styled/Button";
import { useLoginMutation, useCheckMagicTokenValidMutation } from "../../app/services/auth";
import { setAuthData } from "@/app/slices/auth.data";
import Input from "@/components/styled/Input";
import Button from "@/components/styled/Button";
import { useLoginMutation, useCheckMagicTokenValidMutation } from "@/app/services/auth";
import ExpiredTip from "./ExpiredTip";
import { useRegisterMutation } from "../../app/services/auth";
import { useRegisterMutation } from "@/app/services/auth";
import { useMagicToken } from "./index";
const RegWithUsername: FC = () => {
+8 -8
View File
@@ -2,19 +2,19 @@ import { useState, useEffect, ChangeEvent, FormEvent } from "react";
import toast from "react-hot-toast";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import BASE_URL, { KEY_LOCAL_MAGIC_TOKEN } from "../../app/config";
import Input from "../../common/component/styled/Input";
import Button from "../../common/component/styled/Button";
import { useLazyCheckEmailQuery, useRegisterMutation, useSendRegMagicLinkMutation } from "../../app/services/auth";
import BASE_URL, { KEY_LOCAL_MAGIC_TOKEN } from "@/app/config";
import Input from "@/components/styled/Input";
import Button from "@/components/styled/Button";
import { useLazyCheckEmailQuery, useRegisterMutation, useSendRegMagicLinkMutation } from "@/app/services/auth";
import EmailNextTip from "./EmailNextStepTip";
import SignInLink from "./SignInLink";
import Divider from "../../common/component/Divider";
import Divider from "@/components/Divider";
import { useGetLoginConfigQuery } from "../../app/services/server";
import { useGetLoginConfigQuery } from "@/app/services/server";
import SocialLoginButtons from "../login/SocialLoginButtons";
import { setAuthData } from "../../app/slices/auth.data";
import { setAuthData } from "@/app/slices/auth.data";
import { useDispatch } from "react-redux";
import { useAppSelector } from "../../app/store";
import { useAppSelector } from "@/app/store";
import { useMagicToken } from "./index";
interface AuthForm {
+1 -1
View File
@@ -1,7 +1,7 @@
import { useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { NavLink, useSearchParams } from 'react-router-dom';
import { isMobile } from '../../common/utils';
import { isMobile } from '../../utils';
export default function SignInLink({ token }: { token?: string }) {
const { t } = useTranslation("auth");
+3 -3
View File
@@ -1,8 +1,8 @@
import { FC } from "react";
import CheckSign from "../../../assets/icons/check.sign.svg";
import ChannelIcon from "../../../common/component/ChannelIcon";
import CheckSign from "@/assets/icons/check.sign.svg";
import ChannelIcon from "@/components/ChannelIcon";
import Search from "../Search";
import useFilteredChannels from "../../../common/hook/useFilteredChannels";
import useFilteredChannels from "@/hooks/useFilteredChannels";
type Props = {
select: number;
+1 -1
View File
@@ -1,5 +1,5 @@
import { FC } from "react";
import CheckSign from "../../../assets/icons/check.sign.svg";
import CheckSign from "@/assets/icons/check.sign.svg";
export const Dates = {
+3 -3
View File
@@ -1,8 +1,8 @@
import { FC } from "react";
import Search from "../Search";
import CheckSign from "../../../assets/icons/check.sign.svg";
import User from "../../../common/component/User";
import useFilteredUsers from "../../../common/hook/useFilteredUsers";
import CheckSign from "@/assets/icons/check.sign.svg";
import User from "@/components/User";
import useFilteredUsers from "@/hooks/useFilteredUsers";
type Props = {
select: number;
+8 -8
View File
@@ -1,11 +1,11 @@
import IconPdf from "../../../assets/icons/file.pdf.svg";
import IconAudio from "../../../assets/icons/file.audio.svg";
import IconVideo from "../../../assets/icons/file.video.svg";
import IconUnknown from "../../../assets/icons/file.unknown.svg";
import IconDoc from "../../../assets/icons/file.doc.svg";
import IconCode from "../../../assets/icons/file.code.svg";
import IconImage from "../../../assets/icons/file.image.svg";
import CheckSign from "../../../assets/icons/check.sign.svg";
import IconPdf from "@/assets/icons/file.pdf.svg";
import IconAudio from "@/assets/icons/file.audio.svg";
import IconVideo from "@/assets/icons/file.video.svg";
import IconUnknown from "@/assets/icons/file.unknown.svg";
import IconDoc from "@/assets/icons/file.doc.svg";
import IconCode from "@/assets/icons/file.code.svg";
import IconImage from "@/assets/icons/file.image.svg";
import CheckSign from "@/assets/icons/check.sign.svg";
import { FC } from "react";
export const FileTypes = {
+3 -3
View File
@@ -2,13 +2,13 @@ import { useState } from "react";
import Tippy from "@tippyjs/react";
import clsx from "clsx";
import { useTranslation } from "react-i18next";
import Avatar from "../../../common/component/Avatar";
import Avatar from "@/components/Avatar";
import FilterDate, { Dates } from "./Date";
import FilterFrom from "./From";
import FilterChannel from "./Channel";
import FilterType, { FileTypes } from "./Type";
import ArrowDown from "../../../assets/icons/arrow.down.svg";
import { useAppSelector } from "../../../app/store";
import ArrowDown from "@/assets/icons/arrow.down.svg";
import { useAppSelector } from "@/app/store";
const getClass = (selected: boolean) => {
return clsx(`cursor-pointer flex items-center gap-1 md:gap-2 shadow rounded-lg p-1 md:py-2 md:px-3 text-xs text-gray-900 dark:text-gray-200`, selected ? 'text-white bg-primary-400' : 'border border-solid border-gray-300 dark:border-gray-400 ');
+1 -1
View File
@@ -1,7 +1,7 @@
import clsx from "clsx";
import { ChangeEvent, FC } from "react";
import { useTranslation } from "react-i18next";
import IconSearch from "../../assets/icons/search.svg";
import IconSearch from "@/assets/icons/search.svg";
interface Props {
value?: string;
updateSearchValue?: (value: string) => void;
+3 -3
View File
@@ -1,8 +1,8 @@
import { MouseEvent } from "react";
import { useDispatch } from "react-redux";
import { updateFileListView } from "../../app/slices/ui";
import IconList from "../../assets/icons/file.list.svg";
import IconGrid from "../../assets/icons/file.grid.svg";
import { updateFileListView } from "@/app/slices/ui";
import IconList from "@/assets/icons/file.list.svg";
import IconGrid from "@/assets/icons/file.grid.svg";
import clsx from "clsx";
const getClass = (selected: boolean) => clsx(`cursor-pointer p-2 box-border flex-center`, selected && `border border-solid border-primary-400 shadow rounded-lg`);
+2 -2
View File
@@ -4,8 +4,8 @@ import Masonry from "masonry-layout";
import View from "./View";
import Search from "./Search";
import Filter from "./Filter";
import FileBox from "../../common/component/FileBox";
import { useAppSelector } from "../../app/store";
import FileBox from "@/components/FileBox";
import { useAppSelector } from "@/app/store";
import clsx from "clsx";
const checkFilter = (data, filter, channelMessage) => {
let selected = true;
+1 -1
View File
@@ -1,4 +1,4 @@
import Button from "../../common/component/styled/Button";
import Button from "@/components/styled/Button";
import { FC, MouseEvent } from "react";
import { useTranslation } from "react-i18next";
+6 -6
View File
@@ -1,16 +1,16 @@
import { useState, useEffect, ChangeEvent, FormEvent } from "react";
import { useNavigate } from "react-router-dom";
import toast from "react-hot-toast";
import BASE_URL from "../../app/config";
import Input from "../../common/component/styled/Input";
import Button from "../../common/component/styled/Button";
import { useSendLoginMagicLinkMutation } from "../../app/services/auth";
import BASE_URL from "@/app/config";
import Input from "@/components/styled/Input";
import Button from "@/components/styled/Button";
import { useSendLoginMagicLinkMutation } from "@/app/services/auth";
import SentTip from "./SentTip";
import { useTranslation } from "react-i18next";
import SocialLoginButtons from "../login/SocialLoginButtons";
import Divider from "../../common/component/Divider";
import Divider from "@/components/Divider";
import SignInLink from "../reg/SignInLink";
import { useAppSelector } from "../../app/store";
import { useAppSelector } from "@/app/store";
export default function SendMagicLinkPage() {
const { t } = useTranslation("auth");
+6 -6
View File
@@ -2,15 +2,15 @@ import { useEffect } from "react";
import Tippy from "@tippyjs/react";
import toast from "react-hot-toast";
import { hideAll } from "tippy.js";
import Input from "../../common/component/styled/Input";
import Toggle from "../../common/component/styled/Toggle";
import Button from "../../common/component/styled/Button";
import Input from "@/components/styled/Input";
import Toggle from "@/components/styled/Toggle";
import Button from "@/components/styled/Button";
import {
useGetThirdPartySecretQuery,
useUpdateThirdPartySecretMutation
} from "../../app/services/server";
import useConfig from "../../common/hook/useConfig";
import { LoginConfig } from "../../types/server";
} from "@/app/services/server";
import useConfig from "@/hooks/useConfig";
import { LoginConfig } from "@/types/server";
import { useTranslation } from "react-i18next";
+2 -2
View File
@@ -1,8 +1,8 @@
// import React from 'react';
import { useTranslation } from 'react-i18next';
import { useAppSelector } from '../../app/store';
import IconCopy from '../../assets/icons/copy.svg';
import useCopy from '../../common/hook/useCopy';
import IconCopy from '@/assets/icons/copy.svg';
import useCopy from '../../hooks/useCopy';
// type Props = {}
const APIUrl = `${location.origin}/api/swagger`;
const APIDocument = () => {
+2 -2
View File
@@ -3,8 +3,8 @@ import dayjs from 'dayjs';
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useGetBotAPIKeysQuery } from '../../../app/services/user';
import IconDelete from '../../../assets/icons/delete.svg';
import IconAdd from '../../../assets/icons/add.svg';
import IconDelete from '@/assets/icons/delete.svg';
import IconAdd from '@/assets/icons/add.svg';
import CreateAPIKeyModal from './CreateAPIKeyModal';
import DeleteAPIKeyModal from './DeleteAPIKeyModal';
import clsx from 'clsx';
@@ -2,11 +2,11 @@ import { useRef, useEffect } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import { useCreateBotAPIKeyMutation } from '../../../app/services/user';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import Input from '../../../common/component/styled/Input';
import StyledModal from '../../../common/component/styled/Modal';
import useCopy from '../../../common/hook/useCopy';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import Input from '../../../components/styled/Input';
import StyledModal from '../../../components/styled/Modal';
import useCopy from '../../../hooks/useCopy';
type Props = {
uid: number,
+4 -4
View File
@@ -2,10 +2,10 @@ import { useRef, useState, useEffect } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import { useCreateUserMutation } from '../../../app/services/user';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import Input from '../../../common/component/styled/Input';
import StyledModal from '../../../common/component/styled/Modal';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import Input from '../../../components/styled/Input';
import StyledModal from '../../../components/styled/Modal';
import { BASE_ORIGIN } from '../../../app/config';
type Props = {
@@ -2,9 +2,9 @@ import { useEffect } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import { useLazyDeleteBotAPIKeyQuery } from '../../../app/services/user';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import StyledModal from '../../../common/component/styled/Modal';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import StyledModal from '../../../components/styled/Modal';
type Props = {
uid: number,
+3 -3
View File
@@ -2,9 +2,9 @@ import { useEffect } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import { useLazyDeleteUserQuery } from '../../../app/services/user';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import StyledModal from '../../../common/component/styled/Modal';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import StyledModal from '../../../components/styled/Modal';
type Props = {
uid: number,
@@ -1,10 +1,10 @@
import { useEffect, useRef, useState } from 'react';
// import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import Textarea from '../../../common/component/styled/Textarea';
import StyledModal from '../../../common/component/styled/Modal';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import Textarea from '../../../components/styled/Textarea';
import StyledModal from '../../../components/styled/Modal';
import { useLazyGetBotRelatedChannelsQuery, useSendMessageByBotMutation } from '../../../app/services/server';
import clsx from 'clsx';
import { MessageTypes } from '../../../app/config';
+3 -3
View File
@@ -3,9 +3,9 @@ import { useState, useEffect, useRef } from 'react';
import { toast } from 'react-hot-toast';
import { Orbit } from "@uiball/loaders";
import { useGetUserByAdminQuery, useUpdateUserMutation } from '../../../app/services/user';
import IconEdit from '../../../assets/icons/edit.svg';
import IconSave from '../../../assets/icons/save.svg';
import IconCancel from '../../../assets/icons/close.circle.svg';
import IconEdit from '@/assets/icons/edit.svg';
import IconSave from '@/assets/icons/save.svg';
import IconCancel from '@/assets/icons/close.circle.svg';
type Props = {
uid: number
}
@@ -2,10 +2,10 @@ import { useRef, useState, useEffect, ChangeEvent } from 'react';
import { toast } from 'react-hot-toast';
import { useTranslation } from 'react-i18next';
import { useUpdateUserMutation } from '../../../app/services/user';
import Modal from '../../../common/component/Modal';
import Button from '../../../common/component/styled/Button';
import Input from '../../../common/component/styled/Input';
import StyledModal from '../../../common/component/styled/Modal';
import Modal from '../../../components/Modal';
import Button from '../../../components/styled/Button';
import Input from '../../../components/styled/Input';
import StyledModal from '../../../components/styled/Modal';
type Props = {
uid: number,
+4 -4
View File
@@ -4,10 +4,10 @@ import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useUpdateAvatarByAdminMutation } from '../../../app/services/user';
import { useAppSelector } from '../../../app/store';
import AvatarUploader from '../../../common/component/AvatarUploader';
import Button from '../../../common/component/styled/Button';
import IconDelete from '../../../assets/icons/delete.svg';
// import IconTest from '../../../assets/icons/test.svg';
import AvatarUploader from '../../../components/AvatarUploader';
import Button from '../../../components/styled/Button';
import IconDelete from '@/assets/icons/delete.svg';
// import IconTest from '@/assets/icons/test.svg';
import CreateModal from './CreateModal';
import WebhookEdit from './WebhookEdit';
import WebhookModal from './WebhookModal';
@@ -1,19 +1,19 @@
import { ChangeEvent, FC, useState } from "react";
import toast from "react-hot-toast";
import * as linkify from 'linkifyjs';
import Modal from "../../../common/component/Modal";
import StyledModal from "../../../common/component/styled/Modal";
import Button from "../../../common/component/styled/Button";
import StyledRadio from "../../../common/component/styled/Radio";
import Input from "../../../common/component/styled/Input";
import Modal from "@/components/Modal";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import StyledRadio from "@/components/styled/Radio";
import Input from "@/components/styled/Input";
import { useGetLicensePaymentUrlMutation } from "../../../app/services/server";
import { getLicensePriceList } from "../../../app/config";
import { useGetLicensePaymentUrlMutation } from "@/app/services/server";
import { getLicensePriceList } from "@/app/config";
import { useTranslation } from "react-i18next";
import dayjs from "dayjs";
import { PriceSubscriptionDuration, PriceType } from "../../../types/common";
import { PriceSubscriptionDuration, PriceType } from "@/types/common";
import Tippy from "@tippyjs/react";
// import { LicenseMetadata, RenewLicense } from "../../types/server";
// import { LicenseMetadata, RenewLicense } from "@/types/server";
interface Props {
closeModal: () => void;
@@ -1,9 +1,9 @@
import { ChangeEvent, FC, useState, useEffect } from "react";
import toast from "react-hot-toast";
import Modal from "../../../common/component/Modal";
import StyledModal from "../../../common/component/styled/Modal";
import Button from "../../../common/component/styled/Button";
import Textarea from "../../../common/component/styled/Textarea";
import Modal from "@/components/Modal";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import Textarea from "@/components/styled/Textarea";
import { useTranslation } from "react-i18next";
interface Props {
+2 -2
View File
@@ -1,7 +1,7 @@
import { useState, HTMLAttributes } from "react";
import dayjs from "dayjs";
import Button from "../../../common/component/styled/Button";
import useLicense from "../../../common/hook/useLicense";
import Button from "@/components/styled/Button";
import useLicense from "@/hooks/useLicense";
import LicensePriceListModal from "./LicensePriceListModal";
import clsx from "clsx";
import { useTranslation } from "react-i18next";
+5 -5
View File
@@ -1,10 +1,10 @@
import { ChangeEvent, FC, useEffect, useState } from "react";
import toast from "react-hot-toast";
import Modal from "../../common/component/Modal";
import StyledModal from "../../common/component/styled/Modal";
import Button from "../../common/component/styled/Button";
import Checkbox from "../../common/component/styled/Checkbox";
import useLogout from "../../common/hook/useLogout";
import Modal from "@/components/Modal";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import Checkbox from "@/components/styled/Checkbox";
import useLogout from "@/hooks/useLogout";
import { useTranslation } from "react-i18next";
+4 -4
View File
@@ -1,12 +1,12 @@
import { useEffect, useState, MouseEvent } from "react";
import toast from "react-hot-toast";
import { useUpdateAvatarMutation } from "../../app/services/user";
import AvatarUploader from "../../common/component/AvatarUploader";
import Button from "../../common/component/styled/Button";
import { useUpdateAvatarMutation } from "@/app/services/user";
import AvatarUploader from "@/components/AvatarUploader";
import Button from "@/components/styled/Button";
import ProfileBasicEditModal from "./ProfileBasicEditModal";
import RemoveAccountConfirmModal from "./RemoveAccountConfirmModal";
import UpdatePasswordModal from "./UpdatePasswordModal";
import { useAppSelector } from "../../app/store";
import { useAppSelector } from "@/app/store";
import { useTranslation } from "react-i18next";
type EditField = "name" | "email" | "";
+1 -1
View File
@@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next';
import { useGetSystemCommonQuery, useUpdateSystemCommonMutation } from '../../../app/services/server';
import { useEffect } from 'react';
import { toast } from 'react-hot-toast';
import StyledRadio from "../../../common/component/styled/Radio";
import StyledRadio from "@/components/styled/Radio";
import { useAppSelector } from '../../../app/store';
import SettingBlock from './SettingBlock';
import { ChatLayout } from '../../../types/server';
@@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next';
import { useGetSystemCommonQuery, useUpdateSystemCommonMutation } from '../../../app/services/server';
import { useEffect } from 'react';
import { toast } from 'react-hot-toast';
import StyledRadio from "../../../common/component/styled/Radio";
import StyledRadio from "@/components/styled/Radio";
import { useAppSelector } from '../../../app/store';
import SettingBlock from './SettingBlock';
// type Props = {}
+1 -1
View File
@@ -1,6 +1,6 @@
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import Radio from '../../../common/component/styled/Radio';
import Radio from '../../../components/styled/Radio';
import { Theme } from '../../../types/common';
import SettingBlock from './SettingBlock';
+2 -2
View File
@@ -2,8 +2,8 @@
import { useTranslation } from 'react-i18next';
import { toast } from 'react-hot-toast';
import { useGetFrontendUrlQuery, useUpdateFrontendUrlMutation } from '../../../app/services/server';
import StyledInput from "../../../common/component/styled/Input";
import StyledButton from "../../../common/component/styled/Button";
import StyledInput from "@/components/styled/Input";
import StyledButton from "@/components/styled/Button";
import { ChangeEvent, useState, useEffect } from 'react';
import SettingBlock from './SettingBlock';
// type Props = {}
+1 -1
View File
@@ -1,6 +1,6 @@
// import React from 'react'
import { useTranslation } from 'react-i18next';
import StyledRadio from "../../../common/component/styled/Radio";
import StyledRadio from "@/components/styled/Radio";
import SettingBlock from './SettingBlock';
// type Props = {}
+1 -1
View File
@@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next';
import { useGetSystemCommonQuery, useUpdateSystemCommonMutation } from '../../../app/services/server';
import { useEffect } from 'react';
import { toast } from 'react-hot-toast';
import StyledRadio from "../../../common/component/styled/Radio";
import StyledRadio from "@/components/styled/Radio";
import { useAppSelector } from '../../../app/store';
import SettingBlock from './SettingBlock';
// type Props = {}
+5 -5
View File
@@ -2,11 +2,11 @@ import { ChangeEvent, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import toast from "react-hot-toast";
import { useUpdateLogoMutation, useUpdateServerMutation } from '../../../app/services/server';
import LogoUploader from "../../../common/component/AvatarUploader";
import Input from "../../../common/component/styled/Input";
import Label from "../../../common/component/styled/Label";
import Textarea from "../../../common/component/styled/Textarea";
import SaveTip from '../../../common/component/SaveTip';
import LogoUploader from "@/components/AvatarUploader";
import Input from "@/components/styled/Input";
import Label from "@/components/styled/Label";
import Textarea from "@/components/styled/Textarea";
import SaveTip from '../../../components/SaveTip';
import { useAppSelector } from '../../../app/store';
const Index = () => {
+5 -5
View File
@@ -1,14 +1,14 @@
// import { useState, useEffect, ChangeEvent } from "react";
import { useTranslation } from "react-i18next";
import StyledRadio from "../../../common/component/styled/Radio";
import { useAppSelector } from "../../../app/store";
import { LoginConfig, WhoCanSignUp } from "../../../types/server";
import useConfig from "../../../common/hook/useConfig";
import StyledRadio from "@/components/styled/Radio";
import { useAppSelector } from "@/app/store";
import { LoginConfig, WhoCanSignUp } from "@/types/server";
import useConfig from "@/hooks/useConfig";
import Server from './Server';
import Language from './Language';
import FrontendURL from "./FrontendURL";
import DarkMode from "./DarkMode";
import ServerVersionChecker from "../../../common/component/ServerVersionChecker";
import ServerVersionChecker from "@/components/ServerVersionChecker";
import OnlineStatus from "./OnlineStatus";
import ChatLayout from "./ChatLayout";
import SettingBlock from "./SettingBlock";
+1 -1
View File
@@ -1,6 +1,6 @@
// import React from 'react'
import { useTranslation } from 'react-i18next';
import StyledRadio from "../../../common/component/styled/Radio";
import StyledRadio from "@/components/styled/Radio";
import SettingBlock from './SettingBlock';
// type Props = {}
+5 -5
View File
@@ -2,11 +2,11 @@ import { ChangeEvent, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import toast from "react-hot-toast";
import { useUpdateLogoMutation, useUpdateServerMutation } from '../../../app/services/server';
import LogoUploader from "../../../common/component/AvatarUploader";
import Input from "../../../common/component/styled/Input";
import Label from "../../../common/component/styled/Label";
import Textarea from "../../../common/component/styled/Textarea";
import SaveTip from '../../../common/component/SaveTip';
import LogoUploader from "@/components/AvatarUploader";
import Input from "@/components/styled/Input";
import Label from "@/components/styled/Label";
import Textarea from "@/components/styled/Textarea";
import SaveTip from '../../../components/SaveTip';
import { useAppSelector } from '../../../app/store';
const Index = () => {
+5 -5
View File
@@ -1,10 +1,10 @@
import { ChangeEvent, FC, useEffect, useState, useRef } from "react";
import toast from "react-hot-toast";
import Input from "../../common/component/styled/Input";
import { useUpdateInfoMutation } from "../../app/services/user";
import StyledModal from "../../common/component/styled/Modal";
import Button from "../../common/component/styled/Button";
import Modal from "../../common/component/Modal";
import Input from "@/components/styled/Input";
import { useUpdateInfoMutation } from "@/app/services/user";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import Modal from "@/components/Modal";
import { useTranslation } from "react-i18next";
@@ -1,9 +1,9 @@
import { FC } from "react";
import toast from "react-hot-toast";
import Modal from "../../common/component/Modal";
import StyledModal from "../../common/component/styled/Modal";
import Button from "../../common/component/styled/Button";
import { useLazyDeleteCurrentAccountQuery } from "../../app/services/auth";
import Modal from "@/components/Modal";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import { useLazyDeleteCurrentAccountQuery } from "@/app/services/auth";
import { useTranslation } from "react-i18next";
interface Props {
+5 -5
View File
@@ -1,10 +1,10 @@
import { ChangeEvent, useEffect, useState, FC } from "react";
import toast from "react-hot-toast";
import Input from "../../common/component/styled/Input";
import { useUpdatePasswordMutation, useGetCredentialsQuery } from "../../app/services/auth";
import StyledModal from "../../common/component/styled/Modal";
import Button from "../../common/component/styled/Button";
import Modal from "../../common/component/Modal";
import Input from "@/components/styled/Input";
import { useUpdatePasswordMutation, useGetCredentialsQuery } from "@/app/services/auth";
import StyledModal from "@/components/styled/Modal";
import Button from "@/components/styled/Button";
import Modal from "@/components/Modal";
import { useTranslation } from "react-i18next";
+4 -4
View File
@@ -4,10 +4,10 @@ import { useTranslation } from 'react-i18next';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
import { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism';
import { useAppSelector } from '../../app/store';
import Button from '../../common/component/styled/Button';
import Input from '../../common/component/styled/Input';
import useCopy from '../../common/hook/useCopy';
import IconQuestion from '../../assets/icons/question.svg';
import Button from '../../components/styled/Button';
import Input from '../../components/styled/Input';
import useCopy from '../../hooks/useCopy';
import IconQuestion from '@/assets/icons/question.svg';
const Row = ({ paramKey, paramDefault, remarks }: { paramKey: string, paramDefault: string | number, remarks: string }) => {
+7 -6
View File
@@ -1,10 +1,11 @@
import Input from "../../../common/component/styled/Input";
import Label from "../../../common/component/styled/Label";
import Toggle from "../../../common/component/styled/Toggle";
import SaveTip from "../../../common/component/SaveTip";
import useConfig from "../../../common/hook/useConfig";
import { ChangeEvent } from "react";
import { AgoraConfig } from "../../../types/server";
import Input from "@/components/styled/Input";
import Label from "@/components/styled/Label";
import Toggle from "@/components/styled/Toggle";
import SaveTip from "@/components/SaveTip";
import useConfig from "@/hooks/useConfig";
import { AgoraConfig } from "@/types/server";
export default function ConfigAgora() {
const { changed, reset, values, setValues, toggleEnable, updateConfig } = useConfig("agora");
+7 -7
View File
@@ -1,12 +1,12 @@
import { ChangeEvent } from "react";
import Input from "../../../common/component/styled/Input";
import Textarea from "../../../common/component/styled/Textarea";
import Label from "../../../common/component/styled/Label";
import SaveTip from "../../../common/component/SaveTip";
import useConfig from "../../../common/hook/useConfig";
import StyledRadio from "../../../common/component/styled/Radio";
import Input from "@/components/styled/Input";
import Textarea from "@/components/styled/Textarea";
import Label from "@/components/styled/Label";
import SaveTip from "@/components/SaveTip";
import useConfig from "@/hooks/useConfig";
import StyledRadio from "@/components/styled/Radio";
import { FirebaseConfig } from "../../../types/server";
import { FirebaseConfig } from "@/types/server";
import { useTranslation } from "react-i18next";
interface IOptions {
@@ -1,11 +1,11 @@
import { ChangeEvent, FC, useState } from "react";
import { useTranslation } from "react-i18next";
import Select, { Option } from "../../../../common/component/styled/Select";
import Button from "../../../../common/component/styled/Button";
import Input from "../../../../common/component/styled/Input";
import Toggle from "../../../../common/component/styled/Toggle";
import Select, { Option } from "@/components/styled/Select";
import Button from "@/components/styled/Button";
import Input from "@/components/styled/Input";
import Toggle from "@/components/styled/Toggle";
import options from "./items.json";
import IconMinus from "../../../../assets/icons/minus.circle.svg";
import IconMinus from "@/assets/icons/minus.circle.svg";
interface Issuer {
domain: string;
+8 -8
View File
@@ -1,15 +1,15 @@
import { ChangeEvent } from "react";
import toast from "react-hot-toast";
import Toggle from "../../../common/component/styled/Toggle";
import Label from "../../../common/component/styled/Label";
import Input from "../../../common/component/styled/Input";
import SaveTip from "../../../common/component/SaveTip";
import useConfig from "../../../common/hook/useConfig";
import Toggle from "@/components/styled/Toggle";
import Label from "@/components/styled/Label";
import Input from "@/components/styled/Input";
import SaveTip from "@/components/SaveTip";
import useConfig from "@/hooks/useConfig";
import Tooltip from "./Tooltip";
import IssuerList from "./IssuerList";
import useGoogleAuthConfig from "../../../common/hook/useGoogleAuthConfig";
import useGithubAuthConfig from "../../../common/hook/useGithubAuthConfig";
import { LoginConfig } from "../../../types/server";
import useGoogleAuthConfig from "@/hooks/useGoogleAuthConfig";
import useGithubAuthConfig from "@/hooks/useGithubAuthConfig";
import { LoginConfig } from "@/types/server";
import { useTranslation } from "react-i18next";
export default function Logins() {
+9 -9
View File
@@ -2,15 +2,15 @@ import { useState, useEffect, ChangeEvent } from "react";
import toast from "react-hot-toast";
import { useTranslation } from "react-i18next";
import { useSendTestEmailMutation } from "../../../app/services/server";
import IconQuestion from "../../../assets/icons/question.svg";
import useConfig from "../../../common/hook/useConfig";
import Input from "../../../common/component/styled/Input";
import Button from "../../../common/component/styled/Button";
import Toggle from "../../../common/component/styled/Toggle";
import Label from "../../../common/component/styled/Label";
import SaveTip from "../../../common/component/SaveTip";
import { SMTPConfig } from "../../../types/server";
import { useSendTestEmailMutation } from "@/app/services/server";
import IconQuestion from "@/assets/icons/question.svg";
import useConfig from "@/hooks/useConfig";
import Input from "@/components/styled/Input";
import Button from "@/components/styled/Button";
import Toggle from "@/components/styled/Toggle";
import Label from "@/components/styled/Label";
import SaveTip from "@/components/SaveTip";
import { SMTPConfig } from "@/types/server";
export default function ConfigSMTP() {
const { t } = useTranslation("setting", { keyPrefix: "smtp" });

Some files were not shown because too many files have changed in this diff Show More