refactor: project configuration
This commit is contained in:
@@ -247,6 +247,7 @@ module.exports = function (webpackEnv) {
|
|||||||
.map((ext) => `.${ext}`)
|
.map((ext) => `.${ext}`)
|
||||||
.filter((ext) => useTypeScript || !ext.includes("ts")),
|
.filter((ext) => useTypeScript || !ext.includes("ts")),
|
||||||
alias: {
|
alias: {
|
||||||
|
"@": path.resolve(__dirname, "../src"),
|
||||||
// Allows for better profiling with ReactDevTools
|
// Allows for better profiling with ReactDevTools
|
||||||
...(isEnvProductionProfile && {
|
...(isEnvProductionProfile && {
|
||||||
"react-dom$": "react-dom/profiling",
|
"react-dom$": "react-dom/profiling",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vocechat-web",
|
"name": "vocechat-web",
|
||||||
"version": "0.3.61",
|
"version": "0.3.62",
|
||||||
"homepage": "https://voce.chat",
|
"homepage": "https://voce.chat",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emoji-mart/react": "^1.1.1",
|
"@emoji-mart/react": "^1.1.1",
|
||||||
|
|||||||
+2
-2
@@ -12,11 +12,11 @@ let prices: Price[] = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
const official_dev = `https://dev.voce.chat`;
|
const official_dev = `https://dev.voce.chat`;
|
||||||
|
// const local_dev = `http://localhost:3000`;
|
||||||
const local_dev = official_dev;
|
const local_dev = official_dev;
|
||||||
|
|
||||||
// const local_dev = `http://07333.qicp.vip:3030`;
|
// const local_dev = `http://07333.qicp.vip:3030`;
|
||||||
// const local_dev = `https://im.ttt.td`;
|
// const local_dev = `https://im.ttt.td`;
|
||||||
// const local_dev = `http://localhost:3333`;
|
|
||||||
export const BASE_ORIGIN = process.env.REACT_APP_RELEASE
|
export const BASE_ORIGIN = process.env.REACT_APP_RELEASE
|
||||||
? `${location.origin}`
|
? `${location.origin}`
|
||||||
: local_dev;
|
: local_dev;
|
||||||
@@ -103,7 +103,7 @@ export const firebaseConfig = {
|
|||||||
};
|
};
|
||||||
export const ChatPrefixes = {
|
export const ChatPrefixes = {
|
||||||
channel: "#",
|
channel: "#",
|
||||||
user: "@"
|
dm: "@"
|
||||||
};
|
};
|
||||||
export const vapidKey = `BOmzyZhw-DcIGYQ77mzQUVqLlcvn0bm_76P_kc7rpwRxzXNbui-JP8iPyEQYfyoxyJeq43Ud4IiIsJSMNHNujn0`;
|
export const vapidKey = `BOmzyZhw-DcIGYQ77mzQUVqLlcvn0bm_76P_kc7rpwRxzXNbui-JP8iPyEQYfyoxyJeq43Ud4IiIsJSMNHNujn0`;
|
||||||
export const tokenHeader = "X-API-Key";
|
export const tokenHeader = "X-API-Key";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import localforage from "localforage";
|
import localforage from "localforage";
|
||||||
import { Channel } from "../../types/channel";
|
import { Channel } from "@/types/channel";
|
||||||
import clearTable from "./clear.handler";
|
import clearTable from "./clear.handler";
|
||||||
interface Params {
|
interface Params {
|
||||||
data: any;
|
data: any;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import localforage from "localforage";
|
import localforage from "localforage";
|
||||||
import { ContactStatus, User } from "../../types/user";
|
import { ContactStatus, User } from "@/types/user";
|
||||||
import clearTable from "./clear.handler";
|
import clearTable from "./clear.handler";
|
||||||
|
|
||||||
export default async function handler({ operation, data, payload }) {
|
export default async function handler({ operation, data, payload }) {
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import {
|
|||||||
LoginCredential,
|
LoginCredential,
|
||||||
RenewTokenDTO,
|
RenewTokenDTO,
|
||||||
RenewTokenResponse
|
RenewTokenResponse
|
||||||
} from "../../types/auth";
|
} from "@/types/auth";
|
||||||
import { UserRegDTO, UserRegResponse } from "../../types/user";
|
import { UserRegDTO, UserRegResponse } from "@/types/user";
|
||||||
|
|
||||||
const getDeviceId = () => {
|
const getDeviceId = () => {
|
||||||
let d = localStorage.getItem(KEY_DEVICE_ID);
|
let d = localStorage.getItem(KEY_DEVICE_ID);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import dayjs from "dayjs";
|
|||||||
import { updateToken, resetAuthData } from "../slices/auth.data";
|
import { updateToken, resetAuthData } from "../slices/auth.data";
|
||||||
import BASE_URL, { tokenHeader } from "../config";
|
import BASE_URL, { tokenHeader } from "../config";
|
||||||
import { RootState } from "../store";
|
import { RootState } from "../store";
|
||||||
import { getLocalAuthData } from "../../common/utils";
|
import { getLocalAuthData } from "@/utils";
|
||||||
|
|
||||||
const whiteList = [
|
const whiteList = [
|
||||||
"guestLogin",
|
"guestLogin",
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import { removeMessage } from "../slices/message";
|
|||||||
import { removeChannelSession } from "../slices/message.channel";
|
import { removeChannelSession } from "../slices/message.channel";
|
||||||
import { removeReactionMessage } from "../slices/message.reaction";
|
import { removeReactionMessage } from "../slices/message.reaction";
|
||||||
import { onMessageSendStarted } from "./handlers";
|
import { onMessageSendStarted } from "./handlers";
|
||||||
import { Channel, ChannelDTO, CreateChannelDTO } from "../../types/channel";
|
import { Channel, ChannelDTO, CreateChannelDTO } from "@/types/channel";
|
||||||
import { RootState } from "../store";
|
import { RootState } from "../store";
|
||||||
import { ContentTypeKey } from "../../types/message";
|
import { ContentTypeKey } from "@/types/message";
|
||||||
|
|
||||||
export const channelApi = createApi({
|
export const channelApi = createApi({
|
||||||
reducerPath: "channelApi",
|
reducerPath: "channelApi",
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { batch } from "react-redux";
|
import { batch } from "react-redux";
|
||||||
|
|
||||||
import { ContentTypes } from "../config";
|
import { ContentTypes } from "../config";
|
||||||
import { addChannelMsg, removeChannelMsg } from "../slices/message.channel";
|
import { addChannelMsg, removeChannelMsg } from "../slices/message.channel";
|
||||||
import { addUserMsg, removeUserMsg } from "../slices/message.user";
|
import { addUserMsg, removeUserMsg } from "../slices/message.user";
|
||||||
import { addMessage, removeMessage, updateMessage } from "../slices/message";
|
import { addMessage, removeMessage, updateMessage } from "../slices/message";
|
||||||
// import { ContentType } from "../../types/message";
|
|
||||||
|
|
||||||
export const onMessageSendStarted = async (
|
export const onMessageSendStarted = async (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ import { ContentTypes } from "../config";
|
|||||||
import { updateReadChannels, updateReadUsers, upsertOG } from "../slices/footprint";
|
import { updateReadChannels, updateReadUsers, upsertOG } from "../slices/footprint";
|
||||||
import { fillFavorites, populateFavorite, addFavorite, deleteFavorite } from "../slices/favorites";
|
import { fillFavorites, populateFavorite, addFavorite, deleteFavorite } from "../slices/favorites";
|
||||||
import { onMessageSendStarted } from "./handlers";
|
import { onMessageSendStarted } from "./handlers";
|
||||||
import { normalizeArchiveData } from "../../common/utils";
|
import { normalizeArchiveData } from "@/utils";
|
||||||
import baseQuery from "./base.query";
|
import baseQuery from "./base.query";
|
||||||
import { Archive, FavoriteArchive, OG } from "../../types/resource";
|
import { Archive, FavoriteArchive, OG } from "@/types/resource";
|
||||||
import { ChatMessage, ContentTypeKey, UploadFileResponse } from "../../types/message";
|
import { ChatMessage, ContentTypeKey, UploadFileResponse } from "@/types/message";
|
||||||
import handleChatMessage from "../../common/hook/useStreaming/chat.handler";
|
import { ChatContext } from "@/types/common";
|
||||||
|
import handleChatMessage from "@/hooks/useStreaming/chat.handler";
|
||||||
import { RootState } from "../store";
|
import { RootState } from "../store";
|
||||||
import { upsertArchiveMessage } from "../slices/message.archive";
|
import { upsertArchiveMessage } from "../slices/message.archive";
|
||||||
import { ChatContext } from "../../types/common";
|
|
||||||
|
|
||||||
export const messageApi = createApi({
|
export const messageApi = createApi({
|
||||||
reducerPath: "messageApi",
|
reducerPath: "messageApi",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import BASE_URL, { ContentTypes, IS_OFFICIAL_DEMO, PAYMENT_URL_PREFIX } from "..
|
|||||||
import { updateInfo } from "../slices/server";
|
import { updateInfo } from "../slices/server";
|
||||||
import baseQuery from "./base.query";
|
import baseQuery from "./base.query";
|
||||||
import { RootState } from "../store";
|
import { RootState } from "../store";
|
||||||
import { User } from "../../types/user";
|
import { User } from "@/types/user";
|
||||||
import {
|
import {
|
||||||
FirebaseConfig,
|
FirebaseConfig,
|
||||||
GoogleAuthConfig,
|
GoogleAuthConfig,
|
||||||
@@ -21,9 +21,9 @@ import {
|
|||||||
AgoraVoicingListResponse,
|
AgoraVoicingListResponse,
|
||||||
SystemCommon,
|
SystemCommon,
|
||||||
AgoraChannelUsersResponse
|
AgoraChannelUsersResponse
|
||||||
} from "../../types/server";
|
} from "@/types/server";
|
||||||
import { Channel } from "../../types/channel";
|
import { Channel } from "@/types/channel";
|
||||||
import { ContentTypeKey } from "../../types/message";
|
import { ContentTypeKey } from "@/types/message";
|
||||||
import { upsertVoiceList } from "../slices/voice";
|
import { upsertVoiceList } from "../slices/voice";
|
||||||
|
|
||||||
const defaultExpireDuration = 2 * 24 * 60 * 60;
|
const defaultExpireDuration = 2 * 24 * 60 * 60;
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import { updateAutoDeleteSetting, updateMute } from "../slices/footprint";
|
|||||||
import { fillUsers, updateContactStatus as updateStatus } from "../slices/users";
|
import { fillUsers, updateContactStatus as updateStatus } from "../slices/users";
|
||||||
import BASE_URL, { ContentTypes } from "../config";
|
import BASE_URL, { ContentTypes } from "../config";
|
||||||
import { onMessageSendStarted } from "./handlers";
|
import { onMessageSendStarted } from "./handlers";
|
||||||
import { AutoDeleteMsgDTO, BotAPIKey, ContactAction, ContactResponse, ContactStatus, User, UserCreateDTO, UserDTO, UserForAdmin, UserForAdminDTO } from "../../types/user";
|
import { AutoDeleteMsgDTO, BotAPIKey, ContactAction, ContactResponse, ContactStatus, User, UserCreateDTO, UserDTO, UserForAdmin, UserForAdminDTO } from "@/types/user";
|
||||||
import { ContentTypeKey, MuteDTO } from "../../types/message";
|
import { ContentTypeKey, MuteDTO } from "@/types/message";
|
||||||
import { RootState } from "../store";
|
import { RootState } from "../store";
|
||||||
|
|
||||||
export const userApi = createApi({
|
export const userApi = createApi({
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
KEY_TOKEN,
|
KEY_TOKEN,
|
||||||
KEY_UID
|
KEY_UID
|
||||||
} from "../config";
|
} from "../config";
|
||||||
import { AuthData, RenewTokenResponse } from "../../types/auth";
|
import { AuthData, RenewTokenResponse } from "@/types/auth";
|
||||||
import { StoredUser } from "./users";
|
import { StoredUser } from "./users";
|
||||||
// import { updateUsersByLogs } from './users';
|
// import { updateUsersByLogs } from './users';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
import { isNull, omitBy } from "lodash";
|
import { isNull, omitBy } from "lodash";
|
||||||
import BASE_URL from "../config";
|
import BASE_URL from "../config";
|
||||||
import { Channel, UpdateChannelDTO, UpdatePinnedMessageDTO } from "../../types/channel";
|
import { Channel, UpdateChannelDTO, UpdatePinnedMessageDTO } from "@/types/channel";
|
||||||
// import { updateVoicingInfo } from "./voice";
|
// import { updateVoicingInfo } from "./voice";
|
||||||
|
|
||||||
interface StoredChannel extends Channel {
|
interface StoredChannel extends Channel {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
import { MuteDTO } from "../../types/message";
|
import { MuteDTO } from "@/types/message";
|
||||||
import { OG } from "../../types/resource";
|
import { OG } from "@/types/resource";
|
||||||
import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUser, AutoDeleteSettingForChannels, AutoDeleteSettingForUsers, PinChat, PinChatTarget } from "../../types/sse";
|
import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUser, AutoDeleteSettingForChannels, AutoDeleteSettingForUsers, PinChat, PinChatTarget } from "@/types/sse";
|
||||||
import { resetAuthData } from "./auth.data";
|
import { resetAuthData } from "./auth.data";
|
||||||
import { ChatContext } from "../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
type ChannelAside = "members" | "voice" | "voice_fullscreen" | null;
|
type ChannelAside = "members" | "voice" | "voice_fullscreen" | null;
|
||||||
type DMAside = "voice" | null;
|
type DMAside = "voice" | null;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
// import { ContentTypes } from "../config";
|
// import { ContentTypes } from "../config";
|
||||||
// import { normalizeFileMessage } from "../../common/utils";
|
// import { normalizeFileMessage } from "../../common/utils";
|
||||||
// import { ContentType } from "../../types/message";
|
// import { ContentType } from "@/types/message";
|
||||||
import { Archive } from "../../types/resource";
|
import { Archive } from "@/types/resource";
|
||||||
export interface State {
|
export interface State {
|
||||||
[key: string]: Archive;
|
[key: string]: Archive;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
// import { ContentTypes } from "../config";
|
// import { ContentTypes } from "../config";
|
||||||
import { normalizeFileMessage } from "../../common/utils";
|
import { normalizeFileMessage } from "@/utils";
|
||||||
import { ContentType } from "../../types/message";
|
import { ContentType } from "@/types/message";
|
||||||
export interface MessagePayload {
|
export interface MessagePayload {
|
||||||
mid: number;
|
mid: number;
|
||||||
from_uid?: number;
|
from_uid?: number;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
import { Server } from "../../types/server";
|
import { Server } from "@/types/server";
|
||||||
|
|
||||||
export interface StoredServer extends Server {
|
export interface StoredServer extends Server {
|
||||||
version: string,
|
version: string,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||||
import { isNull, omitBy } from "lodash";
|
import { isNull, omitBy } from "lodash";
|
||||||
import BASE_URL from "../config";
|
import BASE_URL from "../config";
|
||||||
import { Contact, ContactStatus } from "../../types/user";
|
import { Contact, ContactStatus } from "@/types/user";
|
||||||
import { UserLog, UserState } from "../../types/sse";
|
import { UserLog, UserState } from "@/types/sse";
|
||||||
|
|
||||||
type DMAside = "voice" | null;
|
type DMAside = "voice" | null;
|
||||||
export interface StoredUser extends Contact {
|
export interface StoredUser extends Contact {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|||||||
import { KEY_UID } from "../config";
|
import { KEY_UID } from "../config";
|
||||||
import { ConnectionState } from "agora-rtc-sdk-ng";
|
import { ConnectionState } from "agora-rtc-sdk-ng";
|
||||||
import { resetAuthData } from "./auth.data";
|
import { resetAuthData } from "./auth.data";
|
||||||
import { ChatContext } from "../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
export type VoiceBasicInfo = {
|
export type VoiceBasicInfo = {
|
||||||
context: ChatContext,
|
context: ChatContext,
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
import { useDispatch } from "react-redux";
|
|
||||||
import { resetFootprint } from "../../app/slices/footprint";
|
|
||||||
import { resetChannels } from "../../app/slices/channels";
|
|
||||||
import { resetUsers } from "../../app/slices/users";
|
|
||||||
import { resetChannelMsg } from "../../app/slices/message.channel";
|
|
||||||
import { resetUserMsg } from "../../app/slices/message.user";
|
|
||||||
import { resetReactionMessage } from "../../app/slices/message.reaction";
|
|
||||||
import { resetFileMessage } from "../../app/slices/message.file";
|
|
||||||
import { resetMessage } from "../../app/slices/message";
|
|
||||||
import { useLazyLogoutQuery } from "../../app/services/auth";
|
|
||||||
export default function useLogout() {
|
|
||||||
const dispatch = useDispatch();
|
|
||||||
const [logout, { isLoading, isSuccess }] = useLazyLogoutQuery();
|
|
||||||
const clearLocalData = () => {
|
|
||||||
dispatch(resetFootprint());
|
|
||||||
dispatch(resetChannelMsg());
|
|
||||||
dispatch(resetUserMsg());
|
|
||||||
dispatch(resetChannels());
|
|
||||||
dispatch(resetUsers());
|
|
||||||
dispatch(resetMessage());
|
|
||||||
dispatch(resetReactionMessage());
|
|
||||||
dispatch(resetFileMessage());
|
|
||||||
};
|
|
||||||
|
|
||||||
return { clearLocalData, logout, exited: isSuccess, exiting: isLoading };
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { hideAll } from "tippy.js";
|
import { hideAll } from "tippy.js";
|
||||||
import { useAppSelector } from "../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import IconInvite from "../../assets/icons/add.person.svg";
|
import IconInvite from "@/assets/icons/add.person.svg";
|
||||||
import IconMention from "../../assets/icons/mention.svg";
|
import IconMention from "@/assets/icons/mention.svg";
|
||||||
import IconSearch from "../../assets/icons/search.svg";
|
import IconSearch from "@/assets/icons/search.svg";
|
||||||
import ChannelIcon from "./ChannelIcon";
|
import ChannelIcon from "./ChannelIcon";
|
||||||
import ChannelModal from "./ChannelModal";
|
import ChannelModal from "./ChannelModal";
|
||||||
import UsersModal from "./UsersModal";
|
import UsersModal from "./UsersModal";
|
||||||
@@ -2,13 +2,13 @@ import { useState, useEffect } from 'react';
|
|||||||
import { toast } from 'react-hot-toast';
|
import { toast } from 'react-hot-toast';
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { useUpdateAutoDeleteMsgMutation } from "../../app/services/user";
|
import { useUpdateAutoDeleteMsgMutation } from "@/app/services/user";
|
||||||
import { useAppSelector } from '../../app/store';
|
import { useAppSelector } from '../app/store';
|
||||||
import SaveTip from "./SaveTip";
|
import SaveTip from "./SaveTip";
|
||||||
import StyledRadio from "./styled/Radio";
|
import StyledRadio from "./styled/Radio";
|
||||||
import { ChatContext } from '../../types/common';
|
import { ChatContext } from '../types/common';
|
||||||
import StyledButton from "../../common/component/styled/Button";
|
import StyledButton from "./styled/Button";
|
||||||
import { useLazyClearChannelMessageQuery } from '../../app/services/channel';
|
import { useLazyClearChannelMessageQuery } from '../app/services/channel';
|
||||||
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ChangeEvent, FC, useState } from "react";
|
import { ChangeEvent, FC, useState } from "react";
|
||||||
import Avatar from "./Avatar";
|
import Avatar from "./Avatar";
|
||||||
import uploadIcon from "../../assets/icons/upload.image.svg?url";
|
import uploadIcon from "@/assets/icons/upload.image.svg?url";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
|
||||||
@@ -5,13 +5,13 @@ import Linkify from "linkify-react";
|
|||||||
|
|
||||||
import ChannelModal from "./ChannelModal";
|
import ChannelModal from "./ChannelModal";
|
||||||
import InviteModal from "./InviteModal";
|
import InviteModal from "./InviteModal";
|
||||||
import IconEdit from "../../assets/icons/edit.svg";
|
import IconEdit from "@/assets/icons/edit.svg";
|
||||||
import IconChat from "../../assets/icons/placeholder.chat.svg";
|
import IconChat from "@/assets/icons/placeholder.chat.svg";
|
||||||
import IconAsk from "../../assets/icons/placeholder.question.svg";
|
import IconAsk from "@/assets/icons/placeholder.question.svg";
|
||||||
import IconInvite from "../../assets/icons/placeholder.invite.svg";
|
import IconInvite from "@/assets/icons/placeholder.invite.svg";
|
||||||
import IconDownload from "../../assets/icons/placeholder.download.svg";
|
import IconDownload from "@/assets/icons/placeholder.download.svg";
|
||||||
import UsersModal from "./UsersModal";
|
import UsersModal from "./UsersModal";
|
||||||
import { useAppSelector } from "../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Avatar from "./Avatar";
|
import Avatar from "./Avatar";
|
||||||
import { useAppSelector } from "../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import HashIcon from "../../assets/icons/channel.svg";
|
import HashIcon from "@/assets/icons/channel.svg";
|
||||||
import LockHashIcon from "../../assets/icons/channel.private.svg";
|
import LockHashIcon from "@/assets/icons/channel.private.svg";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
personal?: boolean;
|
personal?: boolean;
|
||||||
@@ -9,12 +9,12 @@ import Button from "../styled/Button";
|
|||||||
import ChannelIcon from "../ChannelIcon";
|
import ChannelIcon from "../ChannelIcon";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
import StyledCheckbox from "../styled/Checkbox";
|
import StyledCheckbox from "../styled/Checkbox";
|
||||||
import StyledToggle from "../../component/styled/Toggle";
|
import StyledToggle from "../styled/Toggle";
|
||||||
import useFilteredUsers from "../../hook/useFilteredUsers";
|
import useFilteredUsers from "@/hooks/useFilteredUsers";
|
||||||
import { useCreateChannelMutation, useSendChannelMsgMutation } from "../../../app/services/channel";
|
import { useCreateChannelMutation, useSendChannelMsgMutation } from "@/app/services/channel";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { CreateChannelDTO } from "../../../types/channel";
|
import { CreateChannelDTO } from "@/types/channel";
|
||||||
import i18n from "../../../i18n";
|
import i18n from "@/i18n";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
personal?: boolean;
|
personal?: boolean;
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import { FC, useState } from "react";
|
import { FC, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import useDeleteMessage from "../hook/useDeleteMessage";
|
import useDeleteMessage from "@/hooks/useDeleteMessage";
|
||||||
import StyledModal from "./styled/Modal";
|
import StyledModal from "./styled/Modal";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
import Modal from "./Modal";
|
import Modal from "./Modal";
|
||||||
@@ -8,9 +8,9 @@ import {
|
|||||||
CodePreview,
|
CodePreview,
|
||||||
DocPreview
|
DocPreview
|
||||||
} from "./preview";
|
} from "./preview";
|
||||||
import { getFileIcon, formatBytes, fromNowTime } from "../../utils";
|
import { getFileIcon, formatBytes, fromNowTime } from "@/utils";
|
||||||
import IconDownload from "../../../assets/icons/download.svg";
|
import IconDownload from "@/assets/icons/download.svg";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Data {
|
interface Data {
|
||||||
file_type: string;
|
file_type: string;
|
||||||
+3
-2
@@ -1,8 +1,9 @@
|
|||||||
import { FC, useEffect, useState } from "react";
|
import { FC, useEffect, useState } from "react";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { LineWobble } from "@uiball/loaders";
|
|
||||||
import { useLazyPreCheckFileFromUrlQuery } from "../../../../app/services/message";
|
|
||||||
import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query";
|
import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query";
|
||||||
|
import { LineWobble } from "@uiball/loaders";
|
||||||
|
|
||||||
|
import { useLazyPreCheckFileFromUrlQuery } from "@/app/services/message";
|
||||||
interface Props {
|
interface Props {
|
||||||
url: string;
|
url: string;
|
||||||
alt?: string;
|
alt?: string;
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { formatBytes } from '../../utils';
|
import { formatBytes } from '../../utils';
|
||||||
import IconDownload from "../../../assets/icons/download.svg";
|
import IconDownload from "@/assets/icons/download.svg";
|
||||||
import IconAudio from "../../../assets/icons/file.audio.svg";
|
import IconAudio from "@/assets/icons/file.audio.svg";
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import { useState, useEffect, FC } from "react";
|
import { useState, useEffect, FC } from "react";
|
||||||
import { Ping, LineWobble } from '@uiball/loaders';
|
import { Ping, LineWobble } from '@uiball/loaders';
|
||||||
import { getDefaultSize, isMobile } from "../../utils";
|
import { getDefaultSize, isMobile } from "@/utils";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
uploading: boolean;
|
uploading: boolean;
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
import { SyntheticEvent, useState } from 'react';
|
import { SyntheticEvent, useState } from 'react';
|
||||||
import { Orbit } from "@uiball/loaders";
|
import { Orbit } from "@uiball/loaders";
|
||||||
import { formatBytes } from '../../utils';
|
import { formatBytes } from '../../utils';
|
||||||
import IconDownload from "../../../assets/icons/download.svg";
|
import IconDownload from "@/assets/icons/download.svg";
|
||||||
import IconVideo from "../../../assets/icons/file.video.svg";
|
import IconVideo from "@/assets/icons/file.video.svg";
|
||||||
// import clsx from 'clsx';
|
// import clsx from 'clsx';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
import { FC, useEffect, useState } from "react";
|
import { FC, useEffect, useState } from "react";
|
||||||
import ImageMessage from "./ImageMessage";
|
import ImageMessage from "./ImageMessage";
|
||||||
import useRemoveLocalMessage from "../../hook/useRemoveLocalMessage";
|
import useRemoveLocalMessage from "@/hooks/useRemoveLocalMessage";
|
||||||
import useUploadFile from "../../hook/useUploadFile";
|
import useUploadFile from "@/hooks/useUploadFile";
|
||||||
import useSendMessage from "../../hook/useSendMessage";
|
import useSendMessage from "@/hooks/useSendMessage";
|
||||||
import Progress from "./Progress";
|
import Progress from "./Progress";
|
||||||
import { getFileIcon, formatBytes, isImage, getImageSize, fromNowTime } from "../../utils";
|
import { getFileIcon, formatBytes, isImage, getImageSize, fromNowTime } from "@/utils";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import IconDownload from "../../../assets/icons/download.svg";
|
import IconDownload from "@/assets/icons/download.svg";
|
||||||
import IconClose from "../../../assets/icons/close.circle.svg";
|
import IconClose from "@/assets/icons/close.circle.svg";
|
||||||
import VideoMessage from "./VideoMessage";
|
import VideoMessage from "./VideoMessage";
|
||||||
import AudioMessage from "./AudioMessage";
|
import AudioMessage from "./AudioMessage";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
const isLocalFile = (content: string) => {
|
const isLocalFile = (content: string) => {
|
||||||
return content.startsWith("blob:");
|
return content.startsWith("blob:");
|
||||||
@@ -7,11 +7,11 @@ import Input from "../styled/Input";
|
|||||||
import Channel from "../Channel";
|
import Channel from "../Channel";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
import Reply from "../Message/Reply";
|
import Reply from "../Message/Reply";
|
||||||
import useForwardMessage from "../../hook/useForwardMessage";
|
import useForwardMessage from "@/hooks/useForwardMessage";
|
||||||
import useSendMessage from "../../hook/useSendMessage";
|
import useSendMessage from "@/hooks/useSendMessage";
|
||||||
import useFilteredChannels from "../../hook/useFilteredChannels";
|
import useFilteredChannels from "@/hooks/useFilteredChannels";
|
||||||
import useFilteredUsers from "../../hook/useFilteredUsers";
|
import useFilteredUsers from "@/hooks/useFilteredUsers";
|
||||||
import CloseIcon from "../../../assets/icons/close.circle.svg";
|
import CloseIcon from "@/assets/icons/close.circle.svg";
|
||||||
import StyledCheckbox from "../styled/Checkbox";
|
import StyledCheckbox from "../styled/Checkbox";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
interface IProps {
|
interface IProps {
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { FC, useEffect } from "react";
|
import { FC, useEffect } from "react";
|
||||||
import IconGithub from "../../assets/icons/github.svg";
|
import IconGithub from "@/assets/icons/github.svg";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useMatch, useNavigate } from 'react-router-dom';
|
import { useMatch, useNavigate } from 'react-router-dom';
|
||||||
import IconArrow from '../../assets/icons/arrow.left.svg';
|
import IconArrow from '@/assets/icons/arrow.left.svg';
|
||||||
type Props = {
|
type Props = {
|
||||||
path?: string,
|
path?: string,
|
||||||
className?: string
|
className?: string
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { FC, Suspense, useEffect, useState } from "react";
|
import { FC, Suspense, useEffect, useState } from "react";
|
||||||
import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google";
|
import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { KEY_LOCAL_MAGIC_TOKEN } from "../../app/config";
|
import { KEY_LOCAL_MAGIC_TOKEN } from "@/app/config";
|
||||||
import IconGoogle from "../../assets/icons/google.svg";
|
import IconGoogle from "@/assets/icons/google.svg";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
import { useLoginMutation } from "../../app/services/auth";
|
import { useLoginMutation } from "@/app/services/auth";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { FC, ReactElement, useEffect } from "react";
|
import { FC, ReactElement, useEffect } from "react";
|
||||||
import { Navigate } from "react-router-dom";
|
import { Navigate } from "react-router-dom";
|
||||||
import { useGetInitializedQuery, useLazyGuestLoginQuery } from "../../app/services/auth";
|
import { useGetInitializedQuery, useLazyGuestLoginQuery } from "@/app/services/auth";
|
||||||
import { useGetLoginConfigQuery } from "../../app/services/server";
|
import { useGetLoginConfigQuery } from "@/app/services/server";
|
||||||
import { useAppSelector } from "../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
children: ReactElement;
|
children: ReactElement;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import ImagePreviewModal, { PreviewImageData } from "../../common/component/ImagePreviewModal";
|
import ImagePreviewModal, { PreviewImageData } from "./ImagePreviewModal";
|
||||||
type Props = {
|
type Props = {
|
||||||
context?: "chat" | "markdown",
|
context?: "chat" | "markdown",
|
||||||
container: HTMLElement | null
|
container: HTMLElement | null
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FC, useEffect } from "react";
|
import { FC, useEffect } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import useStreaming from "../hook/useStreaming";
|
import useStreaming from "@/hooks/useStreaming";
|
||||||
// import clsx from "clsx";
|
// import clsx from "clsx";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import useInviteLink from "../hook/useInviteLink";
|
import useInviteLink from "@/hooks/useInviteLink";
|
||||||
import Input from "./styled/Input";
|
import Input from "./styled/Input";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
import QRCode from "./QRCode";
|
import QRCode from "./QRCode";
|
||||||
import IconQuestion from '../../assets/icons/question.svg';
|
import IconQuestion from '@/assets/icons/question.svg';
|
||||||
|
|
||||||
type Props = {};
|
type Props = {};
|
||||||
const InviteLink: FC<Props> = () => {
|
const InviteLink: FC<Props> = () => {
|
||||||
+4
-4
@@ -4,10 +4,10 @@ import Button from "../styled/Button";
|
|||||||
import Input from "../styled/Input";
|
import Input from "../styled/Input";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
import StyledCheckbox from "../styled/Checkbox";
|
import StyledCheckbox from "../styled/Checkbox";
|
||||||
import { useAddMembersMutation } from "../../../app/services/channel";
|
import { useAddMembersMutation } from "@/app/services/channel";
|
||||||
import CloseIcon from "../../../assets/icons/close.svg";
|
import CloseIcon from "@/assets/icons/close.svg";
|
||||||
import useFilteredUsers from "../../hook/useFilteredUsers";
|
import useFilteredUsers from "@/hooks/useFilteredUsers";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
cid?: number;
|
cid?: number;
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
import { useEffect, useState, ChangeEvent, FC, useRef } from "react";
|
import { useEffect, useState, ChangeEvent, FC, useRef } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useSendLoginMagicLinkMutation } from "../../../app/services/auth";
|
import { useSendLoginMagicLinkMutation } from "@/app/services/auth";
|
||||||
import useInviteLink from "../../hook/useInviteLink";
|
import useInviteLink from "@/hooks/useInviteLink";
|
||||||
import QRCode from "../QRCode";
|
import QRCode from "../QRCode";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
import Input from "../styled/Input";
|
import Input from "../styled/Input";
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import InviteByEmail from "./InviteByEmail";
|
import InviteByEmail from "./InviteByEmail";
|
||||||
import AddMembers from "./AddMembers";
|
import AddMembers from "./AddMembers";
|
||||||
import CloseIcon from "../../../assets/icons/close.svg";
|
import CloseIcon from "@/assets/icons/close.svg";
|
||||||
import Modal from "../Modal";
|
import Modal from "../Modal";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import { useEffect, FC } from "react";
|
import { useEffect, FC } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import useLeaveChannel from "../../hook/useLeaveChannel";
|
import useLeaveChannel from "@/hooks/useLeaveChannel";
|
||||||
import Modal from "../Modal";
|
import Modal from "../Modal";
|
||||||
import StyledModal from "../styled/Modal";
|
import StyledModal from "../styled/Modal";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
+1
-1
@@ -2,7 +2,7 @@ import { useEffect, useState, FC } from "react";
|
|||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import Modal from "../Modal";
|
import Modal from "../Modal";
|
||||||
import useLeaveChannel from "../../hook/useLeaveChannel";
|
import useLeaveChannel from "@/hooks/useLeaveChannel";
|
||||||
import StyledModal from "../styled/Modal";
|
import StyledModal from "../styled/Modal";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
@@ -2,7 +2,7 @@ import { FC, useState, useEffect, memo } from "react";
|
|||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { Ring } from "@uiball/loaders";
|
import { Ring } from "@uiball/loaders";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
import useLogout from "../hook/useLogout";
|
import useLogout from "@/hooks/useLogout";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
reload?: boolean;
|
reload?: boolean;
|
||||||
+7
-7
@@ -4,14 +4,14 @@ import { hideAll } from "tippy.js";
|
|||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { ViewportList } from 'react-viewport-list';
|
import { ViewportList } from 'react-viewport-list';
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useUpdateUserMutation } from "../../../app/services/user";
|
import { useUpdateUserMutation } from "@/app/services/user";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
import IconMore from "../../../assets/icons/more.svg";
|
import IconMore from "@/assets/icons/more.svg";
|
||||||
import IconOwner from "../../../assets/icons/owner.svg";
|
import IconOwner from "@/assets/icons/owner.svg";
|
||||||
import IconArrowDown from "../../../assets/icons/arrow.down.mini.svg";
|
import IconArrowDown from "@/assets/icons/arrow.down.mini.svg";
|
||||||
import IconCheck from "../../../assets/icons/check.sign.svg";
|
import IconCheck from "@/assets/icons/check.sign.svg";
|
||||||
import useUserOperation from "../../hook/useUserOperation";
|
import useUserOperation from "@/hooks/useUserOperation";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
cid?: number;
|
cid?: number;
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import InviteLink from "../InviteLink";
|
import InviteLink from "../InviteLink";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import MemberList from "./MemberList";
|
import MemberList from "./MemberList";
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import Modal from "../Modal";
|
import Modal from "../Modal";
|
||||||
import IconClose from "../../../assets/icons/close.svg";
|
import IconClose from "@/assets/icons/close.svg";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { useEffect, useState, FC } from "react";
|
import { useEffect, useState, FC } from "react";
|
||||||
import Prompt from "./Prompt";
|
import Prompt from "./Prompt";
|
||||||
import usePWAInstallPrompt from "../../hook/usePWAInstallPrompt";
|
import usePWAInstallPrompt from "@/hooks/usePWAInstallPrompt";
|
||||||
import { BeforeInstallPromptEvent } from "../../../types/global";
|
import { BeforeInstallPromptEvent } from "@/types/global";
|
||||||
interface IProps {}
|
interface IProps { }
|
||||||
const Manifest: FC<IProps> = () => {
|
const Manifest: FC<IProps> = () => {
|
||||||
const { setCanceled, prompted, setDeferredPrompt, showPrompt } = usePWAInstallPrompt();
|
const { setCanceled, prompted, setDeferredPrompt, showPrompt } = usePWAInstallPrompt();
|
||||||
const [popup, setPopup] = useState(false);
|
const [popup, setPopup] = useState(false);
|
||||||
+2
-2
@@ -6,9 +6,9 @@ import '@toast-ui/editor/dist/theme/toastui-editor-dark.css';
|
|||||||
import "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css";
|
import "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css";
|
||||||
import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight-all.js";
|
import codeSyntaxHighlight from "@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight-all.js";
|
||||||
|
|
||||||
import useUploadFile from "../../hook/useUploadFile";
|
import useUploadFile from "@/hooks/useUploadFile";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
import { isDarkMode } from "../../utils";
|
import { isDarkMode } from "@/utils";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
updateDraft?: (draft: string) => void;
|
updateDraft?: (draft: string) => void;
|
||||||
@@ -3,25 +3,25 @@ import { useDispatch } from "react-redux";
|
|||||||
import Tippy from "@tippyjs/react";
|
import Tippy from "@tippyjs/react";
|
||||||
import { hideAll } from "tippy.js";
|
import { hideAll } from "tippy.js";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { updateSelectMessages } from "../../../app/slices/ui";
|
import { updateSelectMessages } from "@/app/slices/ui";
|
||||||
import ContextMenu, { Item } from "../ContextMenu";
|
import ContextMenu, { Item } from "../ContextMenu";
|
||||||
import Tooltip from "../Tooltip";
|
import Tooltip from "../Tooltip";
|
||||||
import useFavMessage from "../../hook/useFavMessage";
|
import useFavMessage from "@/hooks/useFavMessage";
|
||||||
import useSendMessage from "../../hook/useSendMessage";
|
import useSendMessage from "@/hooks/useSendMessage";
|
||||||
import ReactionPicker from "./ReactionPicker";
|
import ReactionPicker from "./ReactionPicker";
|
||||||
import replyIcon from "../../../assets/icons/reply.svg?url";
|
import replyIcon from "@/assets/icons/reply.svg?url";
|
||||||
import reactIcon from "../../../assets/icons/reaction.svg?url";
|
import reactIcon from "@/assets/icons/reaction.svg?url";
|
||||||
import editIcon from "../../../assets/icons/edit.svg?url";
|
import editIcon from "@/assets/icons/edit.svg?url";
|
||||||
import IconBookmark from "../../../assets/icons/bookmark.add.svg";
|
import IconBookmark from "@/assets/icons/bookmark.add.svg";
|
||||||
import IconPin from "../../../assets/icons/pin.svg";
|
import IconPin from "@/assets/icons/pin.svg";
|
||||||
import IconForward from "../../../assets/icons/forward.svg";
|
import IconForward from "@/assets/icons/forward.svg";
|
||||||
import IconSelect from "../../../assets/icons/select.svg";
|
import IconSelect from "@/assets/icons/select.svg";
|
||||||
import IconDelete from "../../../assets/icons/delete.svg";
|
import IconDelete from "@/assets/icons/delete.svg";
|
||||||
import moreIcon from "../../../assets/icons/more.svg?url";
|
import moreIcon from "@/assets/icons/more.svg?url";
|
||||||
import useMessageOperation from "./useMessageOperation";
|
import useMessageOperation from "./useMessageOperation";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
type Props = {
|
type Props = {
|
||||||
isSelf: boolean;
|
isSelf: boolean;
|
||||||
context: ChatContext;
|
context: ChatContext;
|
||||||
+10
-10
@@ -2,18 +2,18 @@ import { FC, ReactElement } from "react";
|
|||||||
import Tippy from "@tippyjs/react";
|
import Tippy from "@tippyjs/react";
|
||||||
import { useDispatch } from "react-redux";
|
import { useDispatch } from "react-redux";
|
||||||
import ContextMenu, { Item } from "../ContextMenu";
|
import ContextMenu, { Item } from "../ContextMenu";
|
||||||
import IconDelete from "../../../assets/icons/delete.svg";
|
import IconDelete from "@/assets/icons/delete.svg";
|
||||||
import IconEdit from "../../../assets/icons/edit.svg";
|
import IconEdit from "@/assets/icons/edit.svg";
|
||||||
import IconReply from "../../../assets/icons/reply.svg";
|
import IconReply from "@/assets/icons/reply.svg";
|
||||||
import IconForward from "../../../assets/icons/forward.svg";
|
import IconForward from "@/assets/icons/forward.svg";
|
||||||
import IconPin from "../../../assets/icons/pin.svg";
|
import IconPin from "@/assets/icons/pin.svg";
|
||||||
import IconCopy from "../../../assets/icons/copy.svg";
|
import IconCopy from "@/assets/icons/copy.svg";
|
||||||
import IconSelect from "../../../assets/icons/select.svg";
|
import IconSelect from "@/assets/icons/select.svg";
|
||||||
import { updateSelectMessages } from "../../../app/slices/ui";
|
import { updateSelectMessages } from "@/app/slices/ui";
|
||||||
import useSendMessage from "../../hook/useSendMessage";
|
import useSendMessage from "@/hooks/useSendMessage";
|
||||||
import useMessageOperation from "./useMessageOperation";
|
import useMessageOperation from "./useMessageOperation";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
type Props = {
|
type Props = {
|
||||||
context: ChatContext;
|
context: ChatContext;
|
||||||
contextId: number;
|
contextId: number;
|
||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
import { useState, useRef, useEffect, ChangeEvent, KeyboardEvent, FC } from "react";
|
import { useState, useRef, useEffect, ChangeEvent, KeyboardEvent, FC } from "react";
|
||||||
import TextareaAutosize from "react-textarea-autosize";
|
import TextareaAutosize from "react-textarea-autosize";
|
||||||
import { useKey } from "rooks";
|
import { useKey } from "rooks";
|
||||||
import { useEditMessageMutation } from "../../../app/services/message";
|
import { useEditMessageMutation } from "@/app/services/message";
|
||||||
import { ContentTypes } from "../../../app/config";
|
import { ContentTypes } from "@/app/config";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
mid: number;
|
mid: number;
|
||||||
+5
-5
@@ -1,11 +1,11 @@
|
|||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { FC, useEffect, useState, useCallback } from 'react';
|
import { FC, useEffect, useState, useCallback } from 'react';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
import { removeMessage } from '../../../app/slices/message';
|
import { removeMessage } from '../../app/slices/message';
|
||||||
import { removeChannelMsg } from '../../../app/slices/message.channel';
|
import { removeChannelMsg } from '../../app/slices/message.channel';
|
||||||
import { removeUserMsg } from '../../../app/slices/message.user';
|
import { removeUserMsg } from '../../app/slices/message.user';
|
||||||
import IconTimer from '../../../assets/icons/timer.svg';
|
import IconTimer from '@/assets/icons/timer.svg';
|
||||||
import { ChatContext } from '../../../types/common';
|
import { ChatContext } from '../../types/common';
|
||||||
type Props = {
|
type Props = {
|
||||||
context: ChatContext,
|
context: ChatContext,
|
||||||
contextId: number,
|
contextId: number,
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import { FC, ReactElement, useEffect, useState } from "react";
|
import { FC, ReactElement, useEffect, useState } from "react";
|
||||||
import renderContent from "./renderContent";
|
import renderContent from "./renderContent";
|
||||||
import Avatar from "../Avatar";
|
import Avatar from "../Avatar";
|
||||||
import useFavMessage from "../../hook/useFavMessage";
|
import useFavMessage from "@/hooks/useFavMessage";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
id?: string;
|
id?: string;
|
||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
import { useEffect, useState, FC, ReactElement } from "react";
|
import { useEffect, useState, FC, ReactElement } from "react";
|
||||||
import renderContent from "./renderContent";
|
import renderContent from "./renderContent";
|
||||||
import Avatar from "../Avatar";
|
import Avatar from "../Avatar";
|
||||||
import IconForward from "../../../assets/icons/forward.svg";
|
import IconForward from "@/assets/icons/forward.svg";
|
||||||
import useNormalizeMessage from "../../hook/useNormalizeMessage";
|
import useNormalizeMessage from "@/hooks/useNormalizeMessage";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
context: ChatContext;
|
context: ChatContext;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// import { FC, ReactNode } from "react";
|
// import { FC, ReactNode } from "react";
|
||||||
import Tippy from "@tippyjs/react";
|
import Tippy from "@tippyjs/react";
|
||||||
import Profile from "../Profile";
|
import Profile from "../Profile";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
uid: number;
|
uid: number;
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import usePinMessage from "../../hook/usePinMessage";
|
import usePinMessage from "@/hooks/usePinMessage";
|
||||||
import StyledModal from "../styled/Modal";
|
import StyledModal from "../styled/Modal";
|
||||||
import Button from "../styled/Button";
|
import Button from "../styled/Button";
|
||||||
import Modal from "../Modal";
|
import Modal from "../Modal";
|
||||||
+1
-1
@@ -2,7 +2,7 @@ import { FC } from "react";
|
|||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import renderContent from "./renderContent";
|
import renderContent from "./renderContent";
|
||||||
import Avatar from "../Avatar";
|
import Avatar from "../Avatar";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
mid?: number;
|
mid?: number;
|
||||||
@@ -4,9 +4,9 @@ import { hideAll } from "tippy.js";
|
|||||||
import ReactionItem, { Emojis, ReactionMap } from "../ReactionItem";
|
import ReactionItem, { Emojis, ReactionMap } from "../ReactionItem";
|
||||||
import ReactionPicker from "./ReactionPicker";
|
import ReactionPicker from "./ReactionPicker";
|
||||||
import Tooltip from "../Tooltip";
|
import Tooltip from "../Tooltip";
|
||||||
import { useReactMessageMutation } from "../../../app/services/message";
|
import { useReactMessageMutation } from "@/app/services/message";
|
||||||
import IconAddEmoji from "../../../assets/icons/add.emoji.svg";
|
import IconAddEmoji from "@/assets/icons/add.emoji.svg";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
|
|
||||||
const ReactionDetails = ({
|
const ReactionDetails = ({
|
||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { useReactMessageMutation } from "../../../app/services/message";
|
import { useReactMessageMutation } from "@/app/services/message";
|
||||||
import { Emojis } from "../../../app/config";
|
import { Emojis } from "@/app/config";
|
||||||
import Emoji from "../ReactionItem";
|
import Emoji from "../ReactionItem";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
mid: number;
|
mid: number;
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import React, { MouseEvent, FC } from "react";
|
import React, { MouseEvent, FC } from "react";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import MarkdownRender from "../MarkdownRender";
|
import MarkdownRender from "../MarkdownRender";
|
||||||
import { ContentTypes } from "../../../app/config";
|
import { ContentTypes } from "@/app/config";
|
||||||
import { getFileIcon, isImage } from "../../utils";
|
import { getFileIcon, isImage } from "@/utils";
|
||||||
import LinkifyText from '../LinkifyText';
|
import LinkifyText from '../LinkifyText';
|
||||||
|
|
||||||
import Avatar from "../Avatar";
|
import Avatar from "../Avatar";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { MessagePayload } from "../../../app/slices/message";
|
import { MessagePayload } from "@/app/slices/message";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
const renderContent = (data: MessagePayload) => {
|
const renderContent = (data: MessagePayload) => {
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { useDispatch } from "react-redux";
|
import { useDispatch } from "react-redux";
|
||||||
import { useLazyGetOGInfoQuery } from "../../../app/services/message";
|
import { useLazyGetOGInfoQuery } from "@/app/services/message";
|
||||||
import { upsertOG } from "../../../app/slices/footprint";
|
import { upsertOG } from "@/app/slices/footprint";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
|
|
||||||
|
|
||||||
export default function URLPreview({ url = "" }) {
|
export default function URLPreview({ url = "" }) {
|
||||||
@@ -13,12 +13,12 @@ import EditMessage from "./EditMessage";
|
|||||||
import renderContent from "./renderContent";
|
import renderContent from "./renderContent";
|
||||||
import Tooltip from "../Tooltip";
|
import Tooltip from "../Tooltip";
|
||||||
import ContextMenu from "./ContextMenu";
|
import ContextMenu from "./ContextMenu";
|
||||||
import useContextMenu from "../../hook/useContextMenu";
|
import useContextMenu from "@/hooks/useContextMenu";
|
||||||
import usePinMessage from "../../hook/usePinMessage";
|
import usePinMessage from "@/hooks/usePinMessage";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import ExpireTimer from "./ExpireTimer";
|
import ExpireTimer from "./ExpireTimer";
|
||||||
import IconInfo from '../../../assets/icons/info.svg';
|
import IconInfo from '@/assets/icons/info.svg';
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
readOnly?: boolean;
|
readOnly?: boolean;
|
||||||
+4
-4
@@ -1,14 +1,14 @@
|
|||||||
// import React from "react";
|
// import React from "react";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import i18n from '../../../i18n';
|
import i18n from "@/i18n";
|
||||||
import { ContentTypes } from "../../../app/config";
|
import { ContentTypes } from "@/app/config";
|
||||||
import ForwardedMessage from "./ForwardedMessage";
|
import ForwardedMessage from "./ForwardedMessage";
|
||||||
import MarkdownRender from "../MarkdownRender";
|
import MarkdownRender from "../MarkdownRender";
|
||||||
import FileMessage from "../FileMessage";
|
import FileMessage from "../FileMessage";
|
||||||
import { ContentType } from "../../../types/message";
|
import { ContentType } from "@/types/message";
|
||||||
import LinkifyText from '../LinkifyText';
|
import LinkifyText from '../LinkifyText';
|
||||||
import VoiceMessage from "../VoiceMessage";
|
import VoiceMessage from "../VoiceMessage";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
context: ChatContext;
|
context: ChatContext;
|
||||||
+5
-5
@@ -3,11 +3,11 @@ import toast from "react-hot-toast";
|
|||||||
import DeleteMessageConfirm from "../DeleteMessageConfirm";
|
import DeleteMessageConfirm from "../DeleteMessageConfirm";
|
||||||
import ForwardModal from "../ForwardModal";
|
import ForwardModal from "../ForwardModal";
|
||||||
import PinMessageModal from "./PinMessageModal";
|
import PinMessageModal from "./PinMessageModal";
|
||||||
import { ContentTypes } from "../../../app/config";
|
import { ContentTypes } from "@/app/config";
|
||||||
import useCopy from "../../hook/useCopy";
|
import useCopy from "@/hooks/useCopy";
|
||||||
import usePinMessage from "../../hook/usePinMessage";
|
import usePinMessage from "@/hooks/usePinMessage";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
|
|
||||||
interface Params {
|
interface Params {
|
||||||
mid: number;
|
mid: number;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { Helmet } from "react-helmet";
|
import { Helmet } from "react-helmet";
|
||||||
import BASE_URL from "../../app/config";
|
import BASE_URL from "@/app/config";
|
||||||
import { useGetServerQuery } from "../../app/services/server";
|
import { useGetServerQuery } from "@/app/services/server";
|
||||||
type Props = {};
|
type Props = {};
|
||||||
const Meta: FC<Props> = () => {
|
const Meta: FC<Props> = () => {
|
||||||
const { data, isSuccess } = useGetServerQuery();
|
const { data, isSuccess } = useGetServerQuery();
|
||||||
@@ -18,12 +18,12 @@ import {
|
|||||||
} from "@udecode/plate";
|
} from "@udecode/plate";
|
||||||
import { createComboboxPlugin } from "@udecode/plate-combobox";
|
import { createComboboxPlugin } from "@udecode/plate-combobox";
|
||||||
import { ReactEditor } from "slate-react";
|
import { ReactEditor } from "slate-react";
|
||||||
import useUploadFile from "../../hook/useUploadFile";
|
import useUploadFile from "@/hooks/useUploadFile";
|
||||||
import { CONFIG } from "./config";
|
import { CONFIG } from "./config";
|
||||||
import User from "../User";
|
import User from "../User";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { isMobile } from "../../utils";
|
import { isMobile } from "@/utils";
|
||||||
import { ChatContext } from "../../../types/common";
|
import { ChatContext } from "@/types/common";
|
||||||
export const TEXT_EDITOR_PREFIX = "_text_editor";
|
export const TEXT_EDITOR_PREFIX = "_text_editor";
|
||||||
|
|
||||||
let components = createPlateUI({
|
let components = createPlateUI({
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { FC, useState, useEffect } from "react";
|
import { FC, useState, useEffect } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { Trans, useTranslation } from "react-i18next";
|
import { Trans, useTranslation } from "react-i18next";
|
||||||
import { KEY_MOBILE_APP_TIP } from "../../app/config";
|
import { KEY_MOBILE_APP_TIP } from "@/app/config";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
|
|
||||||
interface ContainerProps {
|
interface ContainerProps {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { FC, useEffect } from "react";
|
import { FC, useEffect } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { Trans, useTranslation } from "react-i18next";
|
import { Trans, useTranslation } from "react-i18next";
|
||||||
import { KEY_MOBILE_APP_TIP } from "../../app/config";
|
import { KEY_MOBILE_APP_TIP } from "@/app/config";
|
||||||
import Button from "./styled/Button";
|
import Button from "./styled/Button";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { useEffect, memo } from "react";
|
import { useEffect, memo } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import useDeviceToken from "./useDeviceToken";
|
import useDeviceToken from "./useDeviceToken";
|
||||||
import { vapidKey } from "../../../app/config";
|
import { vapidKey } from "@/app/config";
|
||||||
import { useUpdateDeviceTokenMutation } from "../../../app/services/auth";
|
import { useUpdateDeviceTokenMutation } from "@/app/services/auth";
|
||||||
let updated = false;
|
let updated = false;
|
||||||
let updating = false;
|
let updating = false;
|
||||||
const Notification = () => {
|
const Notification = () => {
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { initializeApp } from "firebase/app";
|
import { initializeApp } from "firebase/app";
|
||||||
import { getToken, getMessaging } from "firebase/messaging";
|
import { getToken, getMessaging } from "firebase/messaging";
|
||||||
import { firebaseConfig, KEY_DEVICE_TOKEN } from "../../../app/config";
|
import { firebaseConfig, KEY_DEVICE_TOKEN } from "@/app/config";
|
||||||
let requesting = false;
|
let requesting = false;
|
||||||
let error = false;
|
let error = false;
|
||||||
const useDeviceToken = (vapidKey: string) => {
|
const useDeviceToken = (vapidKey: string) => {
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
import { FC } from "react";
|
||||||
|
|
||||||
import renderContent from "./Message/renderContent";
|
import renderContent from "./Message/renderContent";
|
||||||
import Avatar from "./Avatar";
|
import Avatar from "./Avatar";
|
||||||
import { useAppSelector } from "../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { FC } from "react";
|
import { PinnedMessage } from "@/types/channel";
|
||||||
import { PinnedMessage } from "../../types/channel";
|
|
||||||
import { normalizeFileMessage } from "../utils";
|
import { normalizeFileMessage } from "../utils";
|
||||||
import { MessagePayload } from "../../app/slices/message";
|
import { MessagePayload } from "@/app/slices/message";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
data: PinnedMessage
|
data: PinnedMessage
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import { FC, memo } from "react";
|
import { FC, memo } from "react";
|
||||||
import { NavLink } from "react-router-dom";
|
import { NavLink } from "react-router-dom";
|
||||||
import Tippy from "@tippyjs/react";
|
import Tippy from "@tippyjs/react";
|
||||||
import IconMessage from "../../../assets/icons/message.svg";
|
import IconMessage from "@/assets/icons/message.svg";
|
||||||
import IconMore from "../../../assets/icons/more.svg";
|
import IconMore from "@/assets/icons/more.svg";
|
||||||
import Avatar from "../Avatar";
|
import Avatar from "../Avatar";
|
||||||
import useUserOperation from "../../hook/useUserOperation";
|
import useUserOperation from "@/hooks/useUserOperation";
|
||||||
import { useAppSelector } from "../../../app/store";
|
import { useAppSelector } from "@/app/store";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// import React from 'react';
|
// import React from 'react';
|
||||||
import QR from 'qrcode.react';
|
import QR from 'qrcode.react';
|
||||||
import { useAppSelector } from '../../app/store';
|
import { useAppSelector } from '@/app/store';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
link: string,
|
link: string,
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import { FC, useEffect } from "react";
|
import { FC, useEffect } from "react";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import Modal from "../../common/component/Modal";
|
import Modal from "./Modal";
|
||||||
import StyledModal from "../../common/component/styled/Modal";
|
import StyledModal from "./styled/Modal";
|
||||||
import Button from "../../common/component/styled/Button";
|
import Button from "./styled/Button";
|
||||||
import useLogout from "../../common/hook/useLogout";
|
import useLogout from "@/hooks/useLogout";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useDispatch } from "react-redux";
|
import { useDispatch } from "react-redux";
|
||||||
import { updateRoleChanged } from "../../app/slices/auth.data";
|
import { updateRoleChanged } from "@/app/slices/auth.data";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
reasonType?: "role_changed",
|
reasonType?: "role_changed",
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import { FC, ReactElement } from "react";
|
import { FC, ReactElement } from "react";
|
||||||
import EmojiThumbUp from "../../assets/icons/emoji.thumb.up.svg";
|
import EmojiThumbUp from "@/assets/icons/emoji.thumb.up.svg";
|
||||||
import EmojiThumbDown from "../../assets/icons/emoji.thumb.down.svg";
|
import EmojiThumbDown from "@/assets/icons/emoji.thumb.down.svg";
|
||||||
import EmojiSmile from "../../assets/icons/emoji.smile.svg";
|
import EmojiSmile from "@/assets/icons/emoji.smile.svg";
|
||||||
import EmojiCelebrate from "../../assets/icons/emoji.celebrate.svg";
|
import EmojiCelebrate from "@/assets/icons/emoji.celebrate.svg";
|
||||||
import EmojiUnhappy from "../../assets/icons/emoji.unhappy.svg";
|
import EmojiUnhappy from "@/assets/icons/emoji.unhappy.svg";
|
||||||
import EmojiHeart from "../../assets/icons/emoji.heart.svg";
|
import EmojiHeart from "@/assets/icons/emoji.heart.svg";
|
||||||
import EmojiRocket from "../../assets/icons/emoji.rocket.svg";
|
import EmojiRocket from "@/assets/icons/emoji.rocket.svg";
|
||||||
import EmojiLook from "../../assets/icons/emoji.look.svg";
|
import EmojiLook from "@/assets/icons/emoji.look.svg";
|
||||||
|
|
||||||
export interface Emojis {
|
export interface Emojis {
|
||||||
"👍": ReactElement;
|
"👍": ReactElement;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user