From 20b907aae4622f7408cf3adfcdc33fb01ae6ed72 Mon Sep 17 00:00:00 2001 From: Tristan Yang Date: Mon, 15 May 2023 16:46:50 +0800 Subject: [PATCH] refactor: project configuration --- config/webpack.config.js | 1 + package.json | 2 +- src/app/config.ts | 4 +-- .../listener.middleware/handler.channels.ts | 2 +- src/app/listener.middleware/handler.users.ts | 2 +- src/app/services/auth.ts | 4 +-- src/app/services/base.query.ts | 2 +- src/app/services/channel.ts | 4 +-- src/app/services/handlers.ts | 2 +- src/app/services/message.ts | 10 +++---- src/app/services/server.ts | 8 ++--- src/app/services/user.ts | 4 +-- src/app/slices/auth.data.ts | 2 +- src/app/slices/channels.ts | 2 +- src/app/slices/footprint.ts | 8 ++--- src/app/slices/message.archive.ts | 4 +-- src/app/slices/message.ts | 4 +-- src/app/slices/server.ts | 2 +- src/app/slices/users.ts | 4 +-- src/app/slices/voice.ts | 2 +- src/common/hook/useLogout.ts | 26 ---------------- .../AddEntriesMenu.tsx | 8 ++--- .../AutoDeleteMessages.tsx | 10 +++---- .../component => components}/Avatar.tsx | 0 .../AvatarUploader.tsx | 2 +- .../BlankPlaceholder.tsx | 12 ++++---- .../component => components}/Channel.tsx | 2 +- .../component => components}/ChannelIcon.tsx | 4 +-- .../ChannelModal/index.tsx | 12 ++++---- .../component => components}/ContextMenu.tsx | 0 .../DeleteMessageConfirm.tsx | 2 +- .../component => components}/Divider.tsx | 0 .../component => components}/ErrorCatcher.tsx | 0 .../FileBox/index.tsx | 6 ++-- .../FileBox/preview/Audio.tsx | 0 .../FileBox/preview/Code.tsx | 0 .../FileBox/preview/Doc.tsx | 0 .../FileBox/preview/Image.tsx | 5 ++-- .../FileBox/preview/Pdf.tsx | 0 .../FileBox/preview/Video.tsx | 0 .../FileBox/preview/index.tsx | 0 .../FileMessage/AudioMessage.tsx | 4 +-- .../FileMessage/ImageMessage.tsx | 2 +- .../FileMessage/Progress.tsx | 0 .../FileMessage/VideoMessage.tsx | 4 +-- .../FileMessage/index.tsx | 16 +++++----- .../ForwardModal/index.tsx | 10 +++---- .../GithubLoginButton.tsx | 2 +- .../component => components}/GoBackNav.tsx | 2 +- .../GoogleLoginButton.tsx | 6 ++-- .../component => components}/GuestOnly.tsx | 6 ++-- .../component => components}/ImagePreview.tsx | 2 +- .../ImagePreviewModal.tsx | 0 .../InactiveScreen.tsx | 2 +- .../component => components}/InviteLink.tsx | 4 +-- .../InviteModal/AddMembers.tsx | 8 ++--- .../InviteModal/InviteByEmail.tsx | 4 +-- .../InviteModal/index.tsx | 4 +-- .../LeaveChannel/LeaveConfirmModal.tsx | 2 +- .../LeaveChannel/TransferOwnerModal.tsx | 2 +- .../LeaveChannel/index.tsx | 0 .../component => components}/LinkifyText.tsx | 0 .../component => components}/Loading.tsx | 2 +- .../ManageMembers/MemberList.tsx | 14 ++++----- .../ManageMembers/index.tsx | 2 +- .../Manifest/Prompt.tsx | 2 +- .../Manifest/index.tsx | 6 ++-- .../MarkdownEditor/index.tsx | 4 +-- .../MarkdownRender.tsx | 0 .../Message/Commands.tsx | 26 ++++++++-------- .../Message/ContextMenu.tsx | 20 ++++++------- .../Message/EditMessage.tsx | 6 ++-- .../Message/ExpireTimer.tsx | 10 +++---- .../Message/FavoredMessage.tsx | 2 +- .../Message/ForwardedMessage.tsx | 6 ++-- .../Message/Mention.tsx | 2 +- .../Message/PinMessageModal.tsx | 2 +- .../Message/PreviewMessage.tsx | 2 +- .../Message/Reaction.tsx | 6 ++-- .../Message/ReactionPicker.tsx | 6 ++-- .../Message/Reply.tsx | 8 ++--- .../Message/URLPreview.tsx | 6 ++-- .../Message/index.tsx | 10 +++---- .../Message/renderContent.tsx | 8 ++--- .../Message/useInView.ts | 0 .../Message/useMessageOperation.tsx | 10 +++---- src/{common/component => components}/Meta.tsx | 4 +-- .../MixedInput/config.ts | 0 .../MixedInput/index.tsx | 8 ++--- .../MixedInput/plugins.ts | 0 .../component => components}/MobileAppTip.tsx | 2 +- .../component => components}/Modal.tsx | 0 .../component => components}/NewVersion.tsx | 2 +- .../Notification/index.tsx | 4 +-- .../Notification/useDeviceToken.ts | 2 +- .../PinnedMessage.tsx | 9 +++--- .../Profile/index.tsx | 8 ++--- .../component => components}/QRCode.tsx | 2 +- .../component => components}/ReLoginModal.tsx | 10 +++---- .../component => components}/ReactionItem.tsx | 16 +++++----- .../component => components}/RequireAuth.tsx | 8 ++--- .../RequireNoAuth.tsx | 4 +-- .../RequireSingleTab.tsx | 2 +- .../component => components}/SaveTip.tsx | 2 +- .../component => components}/SearchUser.tsx | 16 +++++----- .../Send/EmojiPicker.tsx | 12 ++++---- .../Send/Replying.tsx | 16 +++++----- .../component => components}/Send/Toolbar.tsx | 14 ++++----- .../Send/UploadFileList/EditFileDetails.tsx | 2 +- .../Send/UploadFileList/index.tsx | 14 ++++----- .../component => components}/Send/index.tsx | 18 +++++------ .../component => components}/Server.tsx | 4 +-- .../ServerVersionChecker.tsx | 2 +- .../component => components}/Signal.tsx | 0 .../StyledSettingContainer.tsx | 6 ++-- .../TextInput/index.tsx | 0 .../component => components}/Tooltip.tsx | 0 .../component => components}/UnreadTabTip.tsx | 4 +-- .../User/ContextMenu.tsx | 2 +- .../component => components}/User/index.tsx | 8 ++--- .../component => components}/UsersModal.tsx | 2 +- .../component => components}/Version.tsx | 4 +-- .../Voice/DMCalling.tsx | 10 +++---- .../component => components}/Voice/index.tsx | 6 ++-- .../Voice/useVoice.ts | 14 ++++----- .../component => components}/VoiceMessage.tsx | 8 ++--- src/components/readme.md | 1 + .../styled/Button.tsx | 0 .../styled/Checkbox.tsx | 0 .../component => components}/styled/Input.tsx | 4 +-- .../component => components}/styled/Label.tsx | 0 .../component => components}/styled/Modal.tsx | 0 .../component => components}/styled/Radio.tsx | 0 .../styled/Select.tsx | 4 +-- .../styled/Textarea.tsx | 0 .../styled/Toggle.tsx | 0 src/hooks/readme.md | 1 + .../hook => hooks}/useAddLocalFileMessage.ts | 8 ++--- src/{common/hook => hooks}/useChatScroll.ts | 0 src/{common/hook => hooks}/useConfig.ts | 4 +-- src/{common/hook => hooks}/useContextMenu.tsx | 2 +- src/{common/hook => hooks}/useCopy.ts | 0 .../hook => hooks}/useDeleteMessage.ts | 4 +-- src/{common/hook => hooks}/useDraft.ts | 6 ++-- src/{common/hook => hooks}/useFavMessage.ts | 18 +++++------ .../hook => hooks}/useFilteredChannels.ts | 4 +-- .../hook => hooks}/useFilteredUsers.ts | 4 +-- .../hook => hooks}/useForwardMessage.ts | 6 ++-- .../hook => hooks}/useGithubAuthConfig.ts | 4 +-- .../hook => hooks}/useGoogleAuthConfig.ts | 2 +- src/{common/hook => hooks}/useInviteLink.ts | 6 ++-- src/{common/hook => hooks}/useLeaveChannel.ts | 4 +-- src/{common/hook => hooks}/useLicense.ts | 4 +-- src/hooks/useLogout.ts | 26 ++++++++++++++++ .../hook => hooks}/useNormalizeMessage.ts | 6 ++-- .../hook => hooks}/usePWAInstallPrompt.ts | 4 +-- src/{common/hook => hooks}/usePinMessage.ts | 6 ++-- src/{common/hook => hooks}/usePreload.ts | 12 ++++---- .../hook => hooks}/useRemoveLocalMessage.ts | 10 +++---- src/{common/hook => hooks}/useSendMessage.ts | 14 ++++----- .../useStreaming/chat.handler.ts | 18 +++++------ .../hook => hooks}/useStreaming/index.ts | 24 +++++++-------- src/{common/hook => hooks}/useTabBroadcast.ts | 0 src/{common/hook => hooks}/useUploadFile.ts | 14 ++++----- .../hook => hooks}/useUserOperation.ts | 10 +++---- src/index-widget.tsx | 5 ++-- src/index.tsx | 12 ++++---- src/{common => libs}/DayjsSetting.ts | 0 src/{common => libs}/TippySetting.ts | 0 src/{common => libs}/polyfills.js | 0 src/libs/readme.md | 1 + src/routes/callback/GithubCallback.tsx | 6 ++-- src/routes/callback/PaymentSuccess.tsx | 6 ++-- src/routes/chat/ChannelChat/Members.tsx | 6 ++-- src/routes/chat/ChannelChat/PinList.tsx | 8 ++--- src/routes/chat/ChannelChat/index.tsx | 20 ++++++------- src/routes/chat/DMChat/index.tsx | 12 ++++---- src/routes/chat/FavList.tsx | 8 ++--- src/routes/chat/GuestBlankPlaceholder.tsx | 12 ++++---- src/routes/chat/GuestChannelChat/index.tsx | 6 ++-- src/routes/chat/GuestSessionList/Session.tsx | 6 ++-- src/routes/chat/GuestSessionList/index.tsx | 2 +- src/routes/chat/Layout/AddContactTip.tsx | 4 +-- src/routes/chat/Layout/DMVoicing.tsx | 26 ++++++++-------- src/routes/chat/Layout/DnDTip.tsx | 4 +-- src/routes/chat/Layout/LicenseOutdatedTip.tsx | 2 +- src/routes/chat/Layout/LoginTip.tsx | 6 ++-- src/routes/chat/Layout/Operations.tsx | 22 +++++++------- .../VirtualMessageFeed/CustomHeader.tsx | 12 ++++---- .../chat/Layout/VirtualMessageFeed/index.tsx | 8 ++--- src/routes/chat/Layout/index.tsx | 14 ++++----- src/routes/chat/RTCWidget.tsx | 24 +++++++-------- src/routes/chat/SessionList/ContextMenu.tsx | 16 +++++----- src/routes/chat/SessionList/Session.tsx | 20 ++++++------- src/routes/chat/SessionList/index.tsx | 8 ++--- src/routes/chat/VoiceChat/Dashboard.tsx | 2 +- src/routes/chat/VoiceChat/VoiceManagement.tsx | 26 ++++++++-------- src/routes/chat/VoiceChat/index.tsx | 6 ++-- src/routes/chat/VoiceFullscreen.tsx | 26 ++++++++-------- src/routes/chat/index.tsx | 12 ++++---- src/routes/chat/utils.tsx | 18 +++++------ src/routes/favs/index.tsx | 24 ++++++++------- src/routes/home/Menu.tsx | 4 +-- src/routes/home/MobileNavs.tsx | 6 ++-- src/routes/home/User.tsx | 4 +-- src/routes/home/index.tsx | 30 +++++++++---------- src/routes/index.tsx | 10 +++---- src/routes/invitePrivate/index.tsx | 2 +- src/routes/lazy.tsx | 2 +- src/routes/login/MagicLinkLogin.tsx | 2 +- src/routes/login/MetamaskLoginButton.tsx | 10 +++---- src/routes/login/OidcLoginButton.tsx | 12 ++++---- src/routes/login/OidcLoginEntry.tsx | 6 ++-- src/routes/login/SocialLoginButtons.tsx | 10 +++---- src/routes/login/index.tsx | 16 +++++----- src/routes/oauth/index.tsx | 4 +-- .../onboarding/steps/UpdateFrontendURL.tsx | 8 ++--- src/routes/onboarding/steps/admin-account.tsx | 12 ++++---- src/routes/onboarding/steps/done-page.tsx | 4 +-- src/routes/onboarding/steps/invite-link.tsx | 8 ++--- src/routes/onboarding/steps/server-name.tsx | 4 +-- src/routes/onboarding/steps/welcome-page.tsx | 4 +-- .../onboarding/steps/who-can-sign-up.tsx | 8 ++--- src/routes/reg/RegWithUsername.tsx | 10 +++---- src/routes/reg/Register.tsx | 16 +++++----- src/routes/reg/SignInLink.tsx | 2 +- src/routes/resources/Filter/Channel.tsx | 6 ++-- src/routes/resources/Filter/Date.tsx | 2 +- src/routes/resources/Filter/From.tsx | 6 ++-- src/routes/resources/Filter/Type.tsx | 16 +++++----- src/routes/resources/Filter/index.tsx | 6 ++-- src/routes/resources/Search.tsx | 2 +- src/routes/resources/View.tsx | 6 ++-- src/routes/resources/index.tsx | 4 +-- src/routes/sendMagicLink/SentTip.tsx | 2 +- src/routes/sendMagicLink/index.tsx | 12 ++++---- src/routes/setting/APIConfig.tsx | 12 ++++---- src/routes/setting/APIDocument.tsx | 4 +-- src/routes/setting/BotConfig/BotAPIKeys.tsx | 4 +-- .../setting/BotConfig/CreateAPIKeyModal.tsx | 10 +++---- src/routes/setting/BotConfig/CreateModal.tsx | 8 ++--- .../setting/BotConfig/DeleteAPIKeyModal.tsx | 6 ++-- src/routes/setting/BotConfig/DeleteModal.tsx | 6 ++-- .../setting/BotConfig/TestAPIKeyModal.tsx | 8 ++--- src/routes/setting/BotConfig/WebhookEdit.tsx | 6 ++-- src/routes/setting/BotConfig/WebhookModal.tsx | 8 ++--- src/routes/setting/BotConfig/index.tsx | 8 ++--- .../setting/License/LicensePriceListModal.tsx | 18 +++++------ .../setting/License/UpdateLicenseModal.tsx | 8 ++--- src/routes/setting/License/index.tsx | 4 +-- src/routes/setting/LogoutConfirmModal.tsx | 10 +++---- src/routes/setting/MyAccount.tsx | 8 ++--- src/routes/setting/Overview/ChatLayout.tsx | 2 +- .../setting/Overview/ContactVerification.tsx | 2 +- src/routes/setting/Overview/DarkMode.tsx | 2 +- src/routes/setting/Overview/FrontendURL.tsx | 4 +-- src/routes/setting/Overview/Language.tsx | 2 +- src/routes/setting/Overview/OnlineStatus.tsx | 2 +- src/routes/setting/Overview/Server.tsx | 10 +++---- src/routes/setting/Overview/index.tsx | 10 +++---- src/routes/setting/Overview/language.tsx | 2 +- src/routes/setting/Overview/server.tsx | 10 +++---- src/routes/setting/ProfileBasicEditModal.tsx | 10 +++---- .../setting/RemoveAccountConfirmModal.tsx | 8 ++--- src/routes/setting/UpdatePasswordModal.tsx | 10 +++---- src/routes/setting/Widget.tsx | 8 ++--- src/routes/setting/config/Agora.tsx | 13 ++++---- src/routes/setting/config/Firebase.tsx | 14 ++++----- .../setting/config/IssuerList/index.tsx | 10 +++---- src/routes/setting/config/Logins.tsx | 16 +++++----- src/routes/setting/config/SMTP.tsx | 18 +++++------ src/routes/setting/config/Tooltip.tsx | 2 +- src/routes/setting/index.tsx | 5 ++-- src/routes/setting/navs.tsx | 8 ++--- .../settingChannel/DeleteConfirmModal.tsx | 8 ++--- src/routes/settingChannel/Overview.tsx | 20 ++++++------- src/routes/settingChannel/index.tsx | 6 ++-- src/routes/settingChannel/navs.tsx | 4 +-- src/routes/settingDM/DeleteConfirmModal.tsx | 8 ++--- src/routes/settingDM/Overview.tsx | 2 +- src/routes/settingDM/index.tsx | 4 +-- src/routes/settingDM/navs.tsx | 2 +- src/routes/users/Search.tsx | 12 ++++---- src/routes/users/index.tsx | 14 ++++----- src/types/readme.md | 1 + src/{common => }/utils.tsx | 21 ++++++------- src/widget/Popup/Login/index.tsx | 14 ++++----- src/widget/Popup/MessageInput.tsx | 4 +-- src/widget/WidgetContext.tsx | 2 +- src/widget/readme.md | 1 + src/widget/useSSE.ts | 2 +- tsconfig.json | 3 +- tsconfig.paths.json | 8 +++++ 293 files changed, 991 insertions(+), 964 deletions(-) delete mode 100644 src/common/hook/useLogout.ts rename src/{common/component => components}/AddEntriesMenu.tsx (93%) rename src/{common/component => components}/AutoDeleteMessages.tsx (91%) rename src/{common/component => components}/Avatar.tsx (100%) rename src/{common/component => components}/AvatarUploader.tsx (96%) rename src/{common/component => components}/BlankPlaceholder.tsx (91%) rename src/{common/component => components}/Channel.tsx (96%) rename src/{common/component => components}/ChannelIcon.tsx (78%) rename src/{common/component => components}/ChannelModal/index.tsx (95%) rename src/{common/component => components}/ContextMenu.tsx (100%) rename src/{common/component => components}/DeleteMessageConfirm.tsx (96%) rename src/{common/component => components}/Divider.tsx (100%) rename src/{common/component => components}/ErrorCatcher.tsx (100%) rename src/{common/component => components}/FileBox/index.tsx (94%) rename src/{common/component => components}/FileBox/preview/Audio.tsx (100%) rename src/{common/component => components}/FileBox/preview/Code.tsx (100%) rename src/{common/component => components}/FileBox/preview/Doc.tsx (100%) rename src/{common/component => components}/FileBox/preview/Image.tsx (95%) rename src/{common/component => components}/FileBox/preview/Pdf.tsx (100%) rename src/{common/component => components}/FileBox/preview/Video.tsx (100%) rename src/{common/component => components}/FileBox/preview/index.tsx (100%) rename src/{common/component => components}/FileMessage/AudioMessage.tsx (91%) rename src/{common/component => components}/FileMessage/ImageMessage.tsx (97%) rename src/{common/component => components}/FileMessage/Progress.tsx (100%) rename src/{common/component => components}/FileMessage/VideoMessage.tsx (95%) rename src/{common/component => components}/FileMessage/index.tsx (92%) rename src/{common/component => components}/ForwardModal/index.tsx (95%) rename src/{common/component => components}/GithubLoginButton.tsx (96%) rename src/{common/component => components}/GoBackNav.tsx (94%) rename src/{common/component => components}/GoogleLoginButton.tsx (94%) rename src/{common/component => components}/GuestOnly.tsx (89%) rename src/{common/component => components}/ImagePreview.tsx (95%) rename src/{common/component => components}/ImagePreviewModal.tsx (100%) rename src/{common/component => components}/InactiveScreen.tsx (96%) rename src/{common/component => components}/InviteLink.tsx (93%) rename src/{common/component => components}/InviteModal/AddMembers.tsx (93%) rename src/{common/component => components}/InviteModal/InviteByEmail.tsx (95%) rename src/{common/component => components}/InviteModal/index.tsx (92%) rename src/{common/component => components}/LeaveChannel/LeaveConfirmModal.tsx (96%) rename src/{common/component => components}/LeaveChannel/TransferOwnerModal.tsx (97%) rename src/{common/component => components}/LeaveChannel/index.tsx (100%) rename src/{common/component => components}/LinkifyText.tsx (100%) rename src/{common/component => components}/Loading.tsx (96%) rename src/{common/component => components}/ManageMembers/MemberList.tsx (94%) rename src/{common/component => components}/ManageMembers/index.tsx (94%) rename src/{common/component => components}/Manifest/Prompt.tsx (95%) rename src/{common/component => components}/Manifest/index.tsx (90%) rename src/{common/component => components}/MarkdownEditor/index.tsx (96%) rename src/{common/component => components}/MarkdownRender.tsx (100%) rename src/{common/component => components}/Message/Commands.tsx (87%) rename src/{common/component => components}/Message/ContextMenu.tsx (82%) rename src/{common/component => components}/Message/EditMessage.tsx (93%) rename src/{common/component => components}/Message/ExpireTimer.tsx (89%) rename src/{common/component => components}/Message/FavoredMessage.tsx (97%) rename src/{common/component => components}/Message/ForwardedMessage.tsx (93%) rename src/{common/component => components}/Message/Mention.tsx (93%) rename src/{common/component => components}/Message/PinMessageModal.tsx (96%) rename src/{common/component => components}/Message/PreviewMessage.tsx (96%) rename src/{common/component => components}/Message/Reaction.tsx (94%) rename src/{common/component => components}/Message/ReactionPicker.tsx (89%) rename src/{common/component => components}/Message/Reply.tsx (94%) rename src/{common/component => components}/Message/URLPreview.tsx (93%) rename src/{common/component => components}/Message/index.tsx (96%) rename src/{common/component => components}/Message/renderContent.tsx (92%) rename src/{common/component => components}/Message/useInView.ts (100%) rename src/{common/component => components}/Message/useMessageOperation.tsx (93%) rename src/{common/component => components}/Meta.tsx (77%) rename src/{common/component => components}/MixedInput/config.ts (100%) rename src/{common/component => components}/MixedInput/index.tsx (97%) rename src/{common/component => components}/MixedInput/plugins.ts (100%) rename src/{common/component => components}/MobileAppTip.tsx (96%) rename src/{common/component => components}/Modal.tsx (100%) rename src/{common/component => components}/NewVersion.tsx (94%) rename src/{common/component => components}/Notification/index.tsx (90%) rename src/{common/component => components}/Notification/useDeviceToken.ts (94%) rename src/{common/component => components}/PinnedMessage.tsx (91%) rename src/{common/component => components}/Profile/index.tsx (93%) rename src/{common/component => components}/QRCode.tsx (95%) rename src/{common/component => components}/ReLoginModal.tsx (83%) rename src/{common/component => components}/ReactionItem.tsx (73%) rename src/{common/component => components}/RequireAuth.tsx (88%) rename src/{common/component => components}/RequireNoAuth.tsx (83%) rename src/{common/component => components}/RequireSingleTab.tsx (87%) rename src/{common/component => components}/SaveTip.tsx (95%) rename src/{common/component => components}/SearchUser.tsx (95%) rename src/{common/component => components}/Send/EmojiPicker.tsx (86%) rename src/{common/component => components}/Send/Replying.tsx (85%) rename src/{common/component => components}/Send/Toolbar.tsx (87%) rename src/{common/component => components}/Send/UploadFileList/EditFileDetails.tsx (96%) rename src/{common/component => components}/Send/UploadFileList/index.tsx (87%) rename src/{common/component => components}/Send/index.tsx (92%) rename src/{common/component => components}/Server.tsx (95%) rename src/{common/component => components}/ServerVersionChecker.tsx (96%) rename src/{common/component => components}/Signal.tsx (100%) rename src/{common/component => components}/StyledSettingContainer.tsx (95%) rename src/{common/component => components}/TextInput/index.tsx (100%) rename src/{common/component => components}/Tooltip.tsx (100%) rename src/{common/component => components}/UnreadTabTip.tsx (95%) rename src/{common/component => components}/User/ContextMenu.tsx (97%) rename src/{common/component => components}/User/index.tsx (95%) rename src/{common/component => components}/UsersModal.tsx (96%) rename src/{common/component => components}/Version.tsx (90%) rename src/{common/component => components}/Voice/DMCalling.tsx (94%) rename src/{common/component => components}/Voice/index.tsx (98%) rename src/{common/component => components}/Voice/useVoice.ts (96%) rename src/{common/component => components}/VoiceMessage.tsx (95%) create mode 100644 src/components/readme.md rename src/{common/component => components}/styled/Button.tsx (100%) rename src/{common/component => components}/styled/Checkbox.tsx (100%) rename src/{common/component => components}/styled/Input.tsx (95%) rename src/{common/component => components}/styled/Label.tsx (100%) rename src/{common/component => components}/styled/Modal.tsx (100%) rename src/{common/component => components}/styled/Radio.tsx (100%) rename src/{common/component => components}/styled/Select.tsx (93%) rename src/{common/component => components}/styled/Textarea.tsx (100%) rename src/{common/component => components}/styled/Toggle.tsx (100%) create mode 100644 src/hooks/readme.md rename src/{common/hook => hooks}/useAddLocalFileMessage.ts (67%) rename src/{common/hook => hooks}/useChatScroll.ts (100%) rename src/{common/hook => hooks}/useConfig.ts (98%) rename src/{common/hook => hooks}/useContextMenu.tsx (96%) rename src/{common/hook => hooks}/useCopy.ts (100%) rename src/{common/hook => hooks}/useDeleteMessage.ts (89%) rename src/{common/hook => hooks}/useDraft.ts (79%) rename src/{common/hook => hooks}/useFavMessage.ts (80%) rename src/{common/hook => hooks}/useFilteredChannels.ts (89%) rename src/{common/hook => hooks}/useFilteredUsers.ts (90%) rename src/{common/hook => hooks}/useForwardMessage.ts (88%) rename src/{common/hook => hooks}/useGithubAuthConfig.ts (92%) rename src/{common/hook => hooks}/useGoogleAuthConfig.ts (96%) rename src/{common/hook => hooks}/useInviteLink.ts (88%) rename src/{common/hook => hooks}/useLeaveChannel.ts (91%) rename src/{common/hook => hooks}/useLicense.ts (94%) create mode 100644 src/hooks/useLogout.ts rename src/{common/hook => hooks}/useNormalizeMessage.ts (81%) rename src/{common/hook => hooks}/usePWAInstallPrompt.ts (93%) rename src/{common/hook => hooks}/usePinMessage.ts (91%) rename src/{common/hook => hooks}/usePreload.ts (90%) rename src/{common/hook => hooks}/useRemoveLocalMessage.ts (58%) rename src/{common/hook => hooks}/useSendMessage.ts (86%) rename src/{common/hook => hooks}/useStreaming/chat.handler.ts (86%) rename src/{common/hook => hooks}/useStreaming/index.ts (95%) rename src/{common/hook => hooks}/useTabBroadcast.ts (100%) rename src/{common/hook => hooks}/useUploadFile.ts (92%) rename src/{common/hook => hooks}/useUserOperation.ts (93%) rename src/{common => libs}/DayjsSetting.ts (100%) rename src/{common => libs}/TippySetting.ts (100%) rename src/{common => libs}/polyfills.js (100%) create mode 100644 src/libs/readme.md create mode 100644 src/types/readme.md rename src/{common => }/utils.tsx (95%) create mode 100644 src/widget/readme.md create mode 100644 tsconfig.paths.json diff --git a/config/webpack.config.js b/config/webpack.config.js index 3e80fe46..b5cb125d 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -247,6 +247,7 @@ module.exports = function (webpackEnv) { .map((ext) => `.${ext}`) .filter((ext) => useTypeScript || !ext.includes("ts")), alias: { + "@": path.resolve(__dirname, "../src"), // Allows for better profiling with ReactDevTools ...(isEnvProductionProfile && { "react-dom$": "react-dom/profiling", diff --git a/package.json b/package.json index 090fcaed..7854acda 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vocechat-web", - "version": "0.3.61", + "version": "0.3.62", "homepage": "https://voce.chat", "dependencies": { "@emoji-mart/react": "^1.1.1", diff --git a/src/app/config.ts b/src/app/config.ts index ce4a6fc8..8a1a8955 100644 --- a/src/app/config.ts +++ b/src/app/config.ts @@ -12,11 +12,11 @@ let prices: Price[] = [ } ]; const official_dev = `https://dev.voce.chat`; +// const local_dev = `http://localhost:3000`; const local_dev = official_dev; // const local_dev = `http://07333.qicp.vip:3030`; // const local_dev = `https://im.ttt.td`; -// const local_dev = `http://localhost:3333`; export const BASE_ORIGIN = process.env.REACT_APP_RELEASE ? `${location.origin}` : local_dev; @@ -103,7 +103,7 @@ export const firebaseConfig = { }; export const ChatPrefixes = { channel: "#", - user: "@" + dm: "@" }; export const vapidKey = `BOmzyZhw-DcIGYQ77mzQUVqLlcvn0bm_76P_kc7rpwRxzXNbui-JP8iPyEQYfyoxyJeq43Ud4IiIsJSMNHNujn0`; export const tokenHeader = "X-API-Key"; diff --git a/src/app/listener.middleware/handler.channels.ts b/src/app/listener.middleware/handler.channels.ts index 417e03a6..d962b19c 100644 --- a/src/app/listener.middleware/handler.channels.ts +++ b/src/app/listener.middleware/handler.channels.ts @@ -1,5 +1,5 @@ import localforage from "localforage"; -import { Channel } from "../../types/channel"; +import { Channel } from "@/types/channel"; import clearTable from "./clear.handler"; interface Params { data: any; diff --git a/src/app/listener.middleware/handler.users.ts b/src/app/listener.middleware/handler.users.ts index cd0badef..61058030 100644 --- a/src/app/listener.middleware/handler.users.ts +++ b/src/app/listener.middleware/handler.users.ts @@ -1,5 +1,5 @@ import localforage from "localforage"; -import { ContactStatus, User } from "../../types/user"; +import { ContactStatus, User } from "@/types/user"; import clearTable from "./clear.handler"; export default async function handler({ operation, data, payload }) { diff --git a/src/app/services/auth.ts b/src/app/services/auth.ts index 5cb30de7..818b0bcd 100644 --- a/src/app/services/auth.ts +++ b/src/app/services/auth.ts @@ -9,8 +9,8 @@ import { LoginCredential, RenewTokenDTO, RenewTokenResponse -} from "../../types/auth"; -import { UserRegDTO, UserRegResponse } from "../../types/user"; +} from "@/types/auth"; +import { UserRegDTO, UserRegResponse } from "@/types/user"; const getDeviceId = () => { let d = localStorage.getItem(KEY_DEVICE_ID); diff --git a/src/app/services/base.query.ts b/src/app/services/base.query.ts index 06674a47..1a07c85f 100644 --- a/src/app/services/base.query.ts +++ b/src/app/services/base.query.ts @@ -4,7 +4,7 @@ import dayjs from "dayjs"; import { updateToken, resetAuthData } from "../slices/auth.data"; import BASE_URL, { tokenHeader } from "../config"; import { RootState } from "../store"; -import { getLocalAuthData } from "../../common/utils"; +import { getLocalAuthData } from "@/utils"; const whiteList = [ "guestLogin", diff --git a/src/app/services/channel.ts b/src/app/services/channel.ts index 50097775..1f36d844 100644 --- a/src/app/services/channel.ts +++ b/src/app/services/channel.ts @@ -8,9 +8,9 @@ import { removeMessage } from "../slices/message"; import { removeChannelSession } from "../slices/message.channel"; import { removeReactionMessage } from "../slices/message.reaction"; import { onMessageSendStarted } from "./handlers"; -import { Channel, ChannelDTO, CreateChannelDTO } from "../../types/channel"; +import { Channel, ChannelDTO, CreateChannelDTO } from "@/types/channel"; import { RootState } from "../store"; -import { ContentTypeKey } from "../../types/message"; +import { ContentTypeKey } from "@/types/message"; export const channelApi = createApi({ reducerPath: "channelApi", diff --git a/src/app/services/handlers.ts b/src/app/services/handlers.ts index 21530cfa..860be90f 100644 --- a/src/app/services/handlers.ts +++ b/src/app/services/handlers.ts @@ -1,10 +1,10 @@ import toast from "react-hot-toast"; import { batch } from "react-redux"; + import { ContentTypes } from "../config"; import { addChannelMsg, removeChannelMsg } from "../slices/message.channel"; import { addUserMsg, removeUserMsg } from "../slices/message.user"; import { addMessage, removeMessage, updateMessage } from "../slices/message"; -// import { ContentType } from "../../types/message"; export const onMessageSendStarted = async ( { diff --git a/src/app/services/message.ts b/src/app/services/message.ts index 71412fbf..e93801c4 100644 --- a/src/app/services/message.ts +++ b/src/app/services/message.ts @@ -3,14 +3,14 @@ import { ContentTypes } from "../config"; import { updateReadChannels, updateReadUsers, upsertOG } from "../slices/footprint"; import { fillFavorites, populateFavorite, addFavorite, deleteFavorite } from "../slices/favorites"; import { onMessageSendStarted } from "./handlers"; -import { normalizeArchiveData } from "../../common/utils"; +import { normalizeArchiveData } from "@/utils"; import baseQuery from "./base.query"; -import { Archive, FavoriteArchive, OG } from "../../types/resource"; -import { ChatMessage, ContentTypeKey, UploadFileResponse } from "../../types/message"; -import handleChatMessage from "../../common/hook/useStreaming/chat.handler"; +import { Archive, FavoriteArchive, OG } from "@/types/resource"; +import { ChatMessage, ContentTypeKey, UploadFileResponse } from "@/types/message"; +import { ChatContext } from "@/types/common"; +import handleChatMessage from "@/hooks/useStreaming/chat.handler"; import { RootState } from "../store"; import { upsertArchiveMessage } from "../slices/message.archive"; -import { ChatContext } from "../../types/common"; export const messageApi = createApi({ reducerPath: "messageApi", diff --git a/src/app/services/server.ts b/src/app/services/server.ts index 9aa9c096..ad30bee1 100644 --- a/src/app/services/server.ts +++ b/src/app/services/server.ts @@ -3,7 +3,7 @@ import BASE_URL, { ContentTypes, IS_OFFICIAL_DEMO, PAYMENT_URL_PREFIX } from ".. import { updateInfo } from "../slices/server"; import baseQuery from "./base.query"; import { RootState } from "../store"; -import { User } from "../../types/user"; +import { User } from "@/types/user"; import { FirebaseConfig, GoogleAuthConfig, @@ -21,9 +21,9 @@ import { AgoraVoicingListResponse, SystemCommon, AgoraChannelUsersResponse -} from "../../types/server"; -import { Channel } from "../../types/channel"; -import { ContentTypeKey } from "../../types/message"; +} from "@/types/server"; +import { Channel } from "@/types/channel"; +import { ContentTypeKey } from "@/types/message"; import { upsertVoiceList } from "../slices/voice"; const defaultExpireDuration = 2 * 24 * 60 * 60; diff --git a/src/app/services/user.ts b/src/app/services/user.ts index 88b32bde..087109cd 100644 --- a/src/app/services/user.ts +++ b/src/app/services/user.ts @@ -5,8 +5,8 @@ import { updateAutoDeleteSetting, updateMute } from "../slices/footprint"; import { fillUsers, updateContactStatus as updateStatus } from "../slices/users"; import BASE_URL, { ContentTypes } from "../config"; import { onMessageSendStarted } from "./handlers"; -import { AutoDeleteMsgDTO, BotAPIKey, ContactAction, ContactResponse, ContactStatus, User, UserCreateDTO, UserDTO, UserForAdmin, UserForAdminDTO } from "../../types/user"; -import { ContentTypeKey, MuteDTO } from "../../types/message"; +import { AutoDeleteMsgDTO, BotAPIKey, ContactAction, ContactResponse, ContactStatus, User, UserCreateDTO, UserDTO, UserForAdmin, UserForAdminDTO } from "@/types/user"; +import { ContentTypeKey, MuteDTO } from "@/types/message"; import { RootState } from "../store"; export const userApi = createApi({ diff --git a/src/app/slices/auth.data.ts b/src/app/slices/auth.data.ts index ef03cc32..7693bf26 100644 --- a/src/app/slices/auth.data.ts +++ b/src/app/slices/auth.data.ts @@ -8,7 +8,7 @@ import { KEY_TOKEN, KEY_UID } from "../config"; -import { AuthData, RenewTokenResponse } from "../../types/auth"; +import { AuthData, RenewTokenResponse } from "@/types/auth"; import { StoredUser } from "./users"; // import { updateUsersByLogs } from './users'; diff --git a/src/app/slices/channels.ts b/src/app/slices/channels.ts index ac6354c3..49a41bf4 100644 --- a/src/app/slices/channels.ts +++ b/src/app/slices/channels.ts @@ -1,7 +1,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { isNull, omitBy } from "lodash"; import BASE_URL from "../config"; -import { Channel, UpdateChannelDTO, UpdatePinnedMessageDTO } from "../../types/channel"; +import { Channel, UpdateChannelDTO, UpdatePinnedMessageDTO } from "@/types/channel"; // import { updateVoicingInfo } from "./voice"; interface StoredChannel extends Channel { diff --git a/src/app/slices/footprint.ts b/src/app/slices/footprint.ts index 8947fcf2..6012afdb 100644 --- a/src/app/slices/footprint.ts +++ b/src/app/slices/footprint.ts @@ -1,9 +1,9 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import { MuteDTO } from "../../types/message"; -import { OG } from "../../types/resource"; -import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUser, AutoDeleteSettingForChannels, AutoDeleteSettingForUsers, PinChat, PinChatTarget } from "../../types/sse"; +import { MuteDTO } from "@/types/message"; +import { OG } from "@/types/resource"; +import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUser, AutoDeleteSettingForChannels, AutoDeleteSettingForUsers, PinChat, PinChatTarget } from "@/types/sse"; import { resetAuthData } from "./auth.data"; -import { ChatContext } from "../../types/common"; +import { ChatContext } from "@/types/common"; type ChannelAside = "members" | "voice" | "voice_fullscreen" | null; type DMAside = "voice" | null; diff --git a/src/app/slices/message.archive.ts b/src/app/slices/message.archive.ts index cd6a6041..67898d74 100644 --- a/src/app/slices/message.archive.ts +++ b/src/app/slices/message.archive.ts @@ -1,8 +1,8 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; // import { ContentTypes } from "../config"; // import { normalizeFileMessage } from "../../common/utils"; -// import { ContentType } from "../../types/message"; -import { Archive } from "../../types/resource"; +// import { ContentType } from "@/types/message"; +import { Archive } from "@/types/resource"; export interface State { [key: string]: Archive; } diff --git a/src/app/slices/message.ts b/src/app/slices/message.ts index 006ffb73..74e4aad0 100644 --- a/src/app/slices/message.ts +++ b/src/app/slices/message.ts @@ -1,7 +1,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; // import { ContentTypes } from "../config"; -import { normalizeFileMessage } from "../../common/utils"; -import { ContentType } from "../../types/message"; +import { normalizeFileMessage } from "@/utils"; +import { ContentType } from "@/types/message"; export interface MessagePayload { mid: number; from_uid?: number; diff --git a/src/app/slices/server.ts b/src/app/slices/server.ts index f40be48d..fa842624 100644 --- a/src/app/slices/server.ts +++ b/src/app/slices/server.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import { Server } from "../../types/server"; +import { Server } from "@/types/server"; export interface StoredServer extends Server { version: string, diff --git a/src/app/slices/users.ts b/src/app/slices/users.ts index 3ff7875a..94761a81 100644 --- a/src/app/slices/users.ts +++ b/src/app/slices/users.ts @@ -1,8 +1,8 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { isNull, omitBy } from "lodash"; import BASE_URL from "../config"; -import { Contact, ContactStatus } from "../../types/user"; -import { UserLog, UserState } from "../../types/sse"; +import { Contact, ContactStatus } from "@/types/user"; +import { UserLog, UserState } from "@/types/sse"; type DMAside = "voice" | null; export interface StoredUser extends Contact { diff --git a/src/app/slices/voice.ts b/src/app/slices/voice.ts index dd058fe7..4c2ffb20 100644 --- a/src/app/slices/voice.ts +++ b/src/app/slices/voice.ts @@ -2,7 +2,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { KEY_UID } from "../config"; import { ConnectionState } from "agora-rtc-sdk-ng"; import { resetAuthData } from "./auth.data"; -import { ChatContext } from "../../types/common"; +import { ChatContext } from "@/types/common"; export type VoiceBasicInfo = { context: ChatContext, diff --git a/src/common/hook/useLogout.ts b/src/common/hook/useLogout.ts deleted file mode 100644 index 5f4ec39f..00000000 --- a/src/common/hook/useLogout.ts +++ /dev/null @@ -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 }; -} diff --git a/src/common/component/AddEntriesMenu.tsx b/src/components/AddEntriesMenu.tsx similarity index 93% rename from src/common/component/AddEntriesMenu.tsx rename to src/components/AddEntriesMenu.tsx index 2fa3deca..7a8899b6 100644 --- a/src/common/component/AddEntriesMenu.tsx +++ b/src/components/AddEntriesMenu.tsx @@ -1,9 +1,9 @@ import { useState } from "react"; import { hideAll } from "tippy.js"; -import { useAppSelector } from "../../app/store"; -import IconInvite from "../../assets/icons/add.person.svg"; -import IconMention from "../../assets/icons/mention.svg"; -import IconSearch from "../../assets/icons/search.svg"; +import { useAppSelector } from "@/app/store"; +import IconInvite from "@/assets/icons/add.person.svg"; +import IconMention from "@/assets/icons/mention.svg"; +import IconSearch from "@/assets/icons/search.svg"; import ChannelIcon from "./ChannelIcon"; import ChannelModal from "./ChannelModal"; import UsersModal from "./UsersModal"; diff --git a/src/common/component/AutoDeleteMessages.tsx b/src/components/AutoDeleteMessages.tsx similarity index 91% rename from src/common/component/AutoDeleteMessages.tsx rename to src/components/AutoDeleteMessages.tsx index a6cb133f..cd196345 100644 --- a/src/common/component/AutoDeleteMessages.tsx +++ b/src/components/AutoDeleteMessages.tsx @@ -2,13 +2,13 @@ import { useState, useEffect } from 'react'; import { toast } from 'react-hot-toast'; import { useTranslation } from "react-i18next"; -import { useUpdateAutoDeleteMsgMutation } from "../../app/services/user"; -import { useAppSelector } from '../../app/store'; +import { useUpdateAutoDeleteMsgMutation } from "@/app/services/user"; +import { useAppSelector } from '../app/store'; import SaveTip from "./SaveTip"; import StyledRadio from "./styled/Radio"; -import { ChatContext } from '../../types/common'; -import StyledButton from "../../common/component/styled/Button"; -import { useLazyClearChannelMessageQuery } from '../../app/services/channel'; +import { ChatContext } from '../types/common'; +import StyledButton from "./styled/Button"; +import { useLazyClearChannelMessageQuery } from '../app/services/channel'; type Props = { diff --git a/src/common/component/Avatar.tsx b/src/components/Avatar.tsx similarity index 100% rename from src/common/component/Avatar.tsx rename to src/components/Avatar.tsx diff --git a/src/common/component/AvatarUploader.tsx b/src/components/AvatarUploader.tsx similarity index 96% rename from src/common/component/AvatarUploader.tsx rename to src/components/AvatarUploader.tsx index ed979cf3..ef703967 100644 --- a/src/common/component/AvatarUploader.tsx +++ b/src/components/AvatarUploader.tsx @@ -1,6 +1,6 @@ import { ChangeEvent, FC, useState } from "react"; 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 clsx from "clsx"; diff --git a/src/common/component/BlankPlaceholder.tsx b/src/components/BlankPlaceholder.tsx similarity index 91% rename from src/common/component/BlankPlaceholder.tsx rename to src/components/BlankPlaceholder.tsx index 4cd2d324..d44a75f2 100644 --- a/src/common/component/BlankPlaceholder.tsx +++ b/src/components/BlankPlaceholder.tsx @@ -5,13 +5,13 @@ import Linkify from "linkify-react"; import ChannelModal from "./ChannelModal"; import InviteModal from "./InviteModal"; -import IconEdit from "../../assets/icons/edit.svg"; -import IconChat from "../../assets/icons/placeholder.chat.svg"; -import IconAsk from "../../assets/icons/placeholder.question.svg"; -import IconInvite from "../../assets/icons/placeholder.invite.svg"; -import IconDownload from "../../assets/icons/placeholder.download.svg"; +import IconEdit from "@/assets/icons/edit.svg"; +import IconChat from "@/assets/icons/placeholder.chat.svg"; +import IconAsk from "@/assets/icons/placeholder.question.svg"; +import IconInvite from "@/assets/icons/placeholder.invite.svg"; +import IconDownload from "@/assets/icons/placeholder.download.svg"; import UsersModal from "./UsersModal"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; interface Props { diff --git a/src/common/component/Channel.tsx b/src/components/Channel.tsx similarity index 96% rename from src/common/component/Channel.tsx rename to src/components/Channel.tsx index 17fbee49..1da18c0e 100644 --- a/src/common/component/Channel.tsx +++ b/src/components/Channel.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; import Avatar from "./Avatar"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; import clsx from "clsx"; diff --git a/src/common/component/ChannelIcon.tsx b/src/components/ChannelIcon.tsx similarity index 78% rename from src/common/component/ChannelIcon.tsx rename to src/components/ChannelIcon.tsx index b41d7cbf..73b114b0 100644 --- a/src/common/component/ChannelIcon.tsx +++ b/src/components/ChannelIcon.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; -import HashIcon from "../../assets/icons/channel.svg"; -import LockHashIcon from "../../assets/icons/channel.private.svg"; +import HashIcon from "@/assets/icons/channel.svg"; +import LockHashIcon from "@/assets/icons/channel.private.svg"; interface Props { personal?: boolean; diff --git a/src/common/component/ChannelModal/index.tsx b/src/components/ChannelModal/index.tsx similarity index 95% rename from src/common/component/ChannelModal/index.tsx rename to src/components/ChannelModal/index.tsx index 10b27145..93682be2 100644 --- a/src/common/component/ChannelModal/index.tsx +++ b/src/components/ChannelModal/index.tsx @@ -9,12 +9,12 @@ import Button from "../styled/Button"; import ChannelIcon from "../ChannelIcon"; import User from "../User"; import StyledCheckbox from "../styled/Checkbox"; -import StyledToggle from "../../component/styled/Toggle"; -import useFilteredUsers from "../../hook/useFilteredUsers"; -import { useCreateChannelMutation, useSendChannelMsgMutation } from "../../../app/services/channel"; -import { useAppSelector } from "../../../app/store"; -import { CreateChannelDTO } from "../../../types/channel"; -import i18n from "../../../i18n"; +import StyledToggle from "../styled/Toggle"; +import useFilteredUsers from "@/hooks/useFilteredUsers"; +import { useCreateChannelMutation, useSendChannelMsgMutation } from "@/app/services/channel"; +import { useAppSelector } from "@/app/store"; +import { CreateChannelDTO } from "@/types/channel"; +import i18n from "@/i18n"; interface Props { personal?: boolean; diff --git a/src/common/component/ContextMenu.tsx b/src/components/ContextMenu.tsx similarity index 100% rename from src/common/component/ContextMenu.tsx rename to src/components/ContextMenu.tsx diff --git a/src/common/component/DeleteMessageConfirm.tsx b/src/components/DeleteMessageConfirm.tsx similarity index 96% rename from src/common/component/DeleteMessageConfirm.tsx rename to src/components/DeleteMessageConfirm.tsx index 7a4195af..13891b40 100644 --- a/src/common/component/DeleteMessageConfirm.tsx +++ b/src/components/DeleteMessageConfirm.tsx @@ -1,6 +1,6 @@ import { FC, useState } from "react"; import { useTranslation } from "react-i18next"; -import useDeleteMessage from "../hook/useDeleteMessage"; +import useDeleteMessage from "@/hooks/useDeleteMessage"; import StyledModal from "./styled/Modal"; import Button from "./styled/Button"; import Modal from "./Modal"; diff --git a/src/common/component/Divider.tsx b/src/components/Divider.tsx similarity index 100% rename from src/common/component/Divider.tsx rename to src/components/Divider.tsx diff --git a/src/common/component/ErrorCatcher.tsx b/src/components/ErrorCatcher.tsx similarity index 100% rename from src/common/component/ErrorCatcher.tsx rename to src/components/ErrorCatcher.tsx diff --git a/src/common/component/FileBox/index.tsx b/src/components/FileBox/index.tsx similarity index 94% rename from src/common/component/FileBox/index.tsx rename to src/components/FileBox/index.tsx index bf49f54d..586b1fc8 100644 --- a/src/common/component/FileBox/index.tsx +++ b/src/components/FileBox/index.tsx @@ -8,9 +8,9 @@ import { CodePreview, DocPreview } from "./preview"; -import { getFileIcon, formatBytes, fromNowTime } from "../../utils"; -import IconDownload from "../../../assets/icons/download.svg"; -import { useAppSelector } from "../../../app/store"; +import { getFileIcon, formatBytes, fromNowTime } from "@/utils"; +import IconDownload from "@/assets/icons/download.svg"; +import { useAppSelector } from "@/app/store"; interface Data { file_type: string; diff --git a/src/common/component/FileBox/preview/Audio.tsx b/src/components/FileBox/preview/Audio.tsx similarity index 100% rename from src/common/component/FileBox/preview/Audio.tsx rename to src/components/FileBox/preview/Audio.tsx diff --git a/src/common/component/FileBox/preview/Code.tsx b/src/components/FileBox/preview/Code.tsx similarity index 100% rename from src/common/component/FileBox/preview/Code.tsx rename to src/components/FileBox/preview/Code.tsx diff --git a/src/common/component/FileBox/preview/Doc.tsx b/src/components/FileBox/preview/Doc.tsx similarity index 100% rename from src/common/component/FileBox/preview/Doc.tsx rename to src/components/FileBox/preview/Doc.tsx diff --git a/src/common/component/FileBox/preview/Image.tsx b/src/components/FileBox/preview/Image.tsx similarity index 95% rename from src/common/component/FileBox/preview/Image.tsx rename to src/components/FileBox/preview/Image.tsx index 2ae31c2b..e003d5f7 100644 --- a/src/common/component/FileBox/preview/Image.tsx +++ b/src/components/FileBox/preview/Image.tsx @@ -1,8 +1,9 @@ import { FC, useEffect, useState } from "react"; import clsx from "clsx"; -import { LineWobble } from "@uiball/loaders"; -import { useLazyPreCheckFileFromUrlQuery } from "../../../../app/services/message"; import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query"; +import { LineWobble } from "@uiball/loaders"; + +import { useLazyPreCheckFileFromUrlQuery } from "@/app/services/message"; interface Props { url: string; alt?: string; diff --git a/src/common/component/FileBox/preview/Pdf.tsx b/src/components/FileBox/preview/Pdf.tsx similarity index 100% rename from src/common/component/FileBox/preview/Pdf.tsx rename to src/components/FileBox/preview/Pdf.tsx diff --git a/src/common/component/FileBox/preview/Video.tsx b/src/components/FileBox/preview/Video.tsx similarity index 100% rename from src/common/component/FileBox/preview/Video.tsx rename to src/components/FileBox/preview/Video.tsx diff --git a/src/common/component/FileBox/preview/index.tsx b/src/components/FileBox/preview/index.tsx similarity index 100% rename from src/common/component/FileBox/preview/index.tsx rename to src/components/FileBox/preview/index.tsx diff --git a/src/common/component/FileMessage/AudioMessage.tsx b/src/components/FileMessage/AudioMessage.tsx similarity index 91% rename from src/common/component/FileMessage/AudioMessage.tsx rename to src/components/FileMessage/AudioMessage.tsx index 035f0067..2cf32c82 100644 --- a/src/common/component/FileMessage/AudioMessage.tsx +++ b/src/components/FileMessage/AudioMessage.tsx @@ -1,7 +1,7 @@ import { useState } from 'react'; import { formatBytes } from '../../utils'; -import IconDownload from "../../../assets/icons/download.svg"; -import IconAudio from "../../../assets/icons/file.audio.svg"; +import IconDownload from "@/assets/icons/download.svg"; +import IconAudio from "@/assets/icons/file.audio.svg"; import clsx from 'clsx'; type Props = { diff --git a/src/common/component/FileMessage/ImageMessage.tsx b/src/components/FileMessage/ImageMessage.tsx similarity index 97% rename from src/common/component/FileMessage/ImageMessage.tsx rename to src/components/FileMessage/ImageMessage.tsx index fcd07d5f..5f8ff25e 100644 --- a/src/common/component/FileMessage/ImageMessage.tsx +++ b/src/components/FileMessage/ImageMessage.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, FC } from "react"; import { Ping, LineWobble } from '@uiball/loaders'; -import { getDefaultSize, isMobile } from "../../utils"; +import { getDefaultSize, isMobile } from "@/utils"; type Props = { uploading: boolean; diff --git a/src/common/component/FileMessage/Progress.tsx b/src/components/FileMessage/Progress.tsx similarity index 100% rename from src/common/component/FileMessage/Progress.tsx rename to src/components/FileMessage/Progress.tsx diff --git a/src/common/component/FileMessage/VideoMessage.tsx b/src/components/FileMessage/VideoMessage.tsx similarity index 95% rename from src/common/component/FileMessage/VideoMessage.tsx rename to src/components/FileMessage/VideoMessage.tsx index ff74b3fd..378de907 100644 --- a/src/common/component/FileMessage/VideoMessage.tsx +++ b/src/components/FileMessage/VideoMessage.tsx @@ -1,8 +1,8 @@ import { SyntheticEvent, useState } from 'react'; import { Orbit } from "@uiball/loaders"; import { formatBytes } from '../../utils'; -import IconDownload from "../../../assets/icons/download.svg"; -import IconVideo from "../../../assets/icons/file.video.svg"; +import IconDownload from "@/assets/icons/download.svg"; +import IconVideo from "@/assets/icons/file.video.svg"; // import clsx from 'clsx'; type Props = { diff --git a/src/common/component/FileMessage/index.tsx b/src/components/FileMessage/index.tsx similarity index 92% rename from src/common/component/FileMessage/index.tsx rename to src/components/FileMessage/index.tsx index d90024c2..8bb8cffb 100644 --- a/src/common/component/FileMessage/index.tsx +++ b/src/components/FileMessage/index.tsx @@ -1,17 +1,17 @@ import { FC, useEffect, useState } from "react"; import ImageMessage from "./ImageMessage"; -import useRemoveLocalMessage from "../../hook/useRemoveLocalMessage"; -import useUploadFile from "../../hook/useUploadFile"; -import useSendMessage from "../../hook/useSendMessage"; +import useRemoveLocalMessage from "@/hooks/useRemoveLocalMessage"; +import useUploadFile from "@/hooks/useUploadFile"; +import useSendMessage from "@/hooks/useSendMessage"; import Progress from "./Progress"; -import { getFileIcon, formatBytes, isImage, getImageSize, fromNowTime } from "../../utils"; -import { useAppSelector } from "../../../app/store"; -import IconDownload from "../../../assets/icons/download.svg"; -import IconClose from "../../../assets/icons/close.circle.svg"; +import { getFileIcon, formatBytes, isImage, getImageSize, fromNowTime } from "@/utils"; +import { useAppSelector } from "@/app/store"; +import IconDownload from "@/assets/icons/download.svg"; +import IconClose from "@/assets/icons/close.circle.svg"; import VideoMessage from "./VideoMessage"; import AudioMessage from "./AudioMessage"; import clsx from "clsx"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; const isLocalFile = (content: string) => { return content.startsWith("blob:"); diff --git a/src/common/component/ForwardModal/index.tsx b/src/components/ForwardModal/index.tsx similarity index 95% rename from src/common/component/ForwardModal/index.tsx rename to src/components/ForwardModal/index.tsx index af79d727..56609153 100644 --- a/src/common/component/ForwardModal/index.tsx +++ b/src/components/ForwardModal/index.tsx @@ -7,11 +7,11 @@ import Input from "../styled/Input"; import Channel from "../Channel"; import User from "../User"; import Reply from "../Message/Reply"; -import useForwardMessage from "../../hook/useForwardMessage"; -import useSendMessage from "../../hook/useSendMessage"; -import useFilteredChannels from "../../hook/useFilteredChannels"; -import useFilteredUsers from "../../hook/useFilteredUsers"; -import CloseIcon from "../../../assets/icons/close.circle.svg"; +import useForwardMessage from "@/hooks/useForwardMessage"; +import useSendMessage from "@/hooks/useSendMessage"; +import useFilteredChannels from "@/hooks/useFilteredChannels"; +import useFilteredUsers from "@/hooks/useFilteredUsers"; +import CloseIcon from "@/assets/icons/close.circle.svg"; import StyledCheckbox from "../styled/Checkbox"; import { useTranslation } from "react-i18next"; interface IProps { diff --git a/src/common/component/GithubLoginButton.tsx b/src/components/GithubLoginButton.tsx similarity index 96% rename from src/common/component/GithubLoginButton.tsx rename to src/components/GithubLoginButton.tsx index b498579c..d6e5f580 100644 --- a/src/common/component/GithubLoginButton.tsx +++ b/src/components/GithubLoginButton.tsx @@ -1,5 +1,5 @@ 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 { useTranslation } from "react-i18next"; diff --git a/src/common/component/GoBackNav.tsx b/src/components/GoBackNav.tsx similarity index 94% rename from src/common/component/GoBackNav.tsx rename to src/components/GoBackNav.tsx index 470e457d..4ecd0737 100644 --- a/src/common/component/GoBackNav.tsx +++ b/src/components/GoBackNav.tsx @@ -1,6 +1,6 @@ import React from 'react'; 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 = { path?: string, className?: string diff --git a/src/common/component/GoogleLoginButton.tsx b/src/components/GoogleLoginButton.tsx similarity index 94% rename from src/common/component/GoogleLoginButton.tsx rename to src/components/GoogleLoginButton.tsx index 95cdc80e..0b89dffc 100644 --- a/src/common/component/GoogleLoginButton.tsx +++ b/src/components/GoogleLoginButton.tsx @@ -1,10 +1,10 @@ import { FC, Suspense, useEffect, useState } from "react"; import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google"; import toast from "react-hot-toast"; -import { KEY_LOCAL_MAGIC_TOKEN } from "../../app/config"; -import IconGoogle from "../../assets/icons/google.svg"; +import { KEY_LOCAL_MAGIC_TOKEN } from "@/app/config"; +import IconGoogle from "@/assets/icons/google.svg"; import Button from "./styled/Button"; -import { useLoginMutation } from "../../app/services/auth"; +import { useLoginMutation } from "@/app/services/auth"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/GuestOnly.tsx b/src/components/GuestOnly.tsx similarity index 89% rename from src/common/component/GuestOnly.tsx rename to src/components/GuestOnly.tsx index fa6137e3..53cd0026 100644 --- a/src/common/component/GuestOnly.tsx +++ b/src/components/GuestOnly.tsx @@ -1,8 +1,8 @@ import { FC, ReactElement, useEffect } from "react"; import { Navigate } from "react-router-dom"; -import { useGetInitializedQuery, useLazyGuestLoginQuery } from "../../app/services/auth"; -import { useGetLoginConfigQuery } from "../../app/services/server"; -import { useAppSelector } from "../../app/store"; +import { useGetInitializedQuery, useLazyGuestLoginQuery } from "@/app/services/auth"; +import { useGetLoginConfigQuery } from "@/app/services/server"; +import { useAppSelector } from "@/app/store"; interface Props { children: ReactElement; diff --git a/src/common/component/ImagePreview.tsx b/src/components/ImagePreview.tsx similarity index 95% rename from src/common/component/ImagePreview.tsx rename to src/components/ImagePreview.tsx index 62a83b1c..786eb9a1 100644 --- a/src/common/component/ImagePreview.tsx +++ b/src/components/ImagePreview.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import ImagePreviewModal, { PreviewImageData } from "../../common/component/ImagePreviewModal"; +import ImagePreviewModal, { PreviewImageData } from "./ImagePreviewModal"; type Props = { context?: "chat" | "markdown", container: HTMLElement | null diff --git a/src/common/component/ImagePreviewModal.tsx b/src/components/ImagePreviewModal.tsx similarity index 100% rename from src/common/component/ImagePreviewModal.tsx rename to src/components/ImagePreviewModal.tsx diff --git a/src/common/component/InactiveScreen.tsx b/src/components/InactiveScreen.tsx similarity index 96% rename from src/common/component/InactiveScreen.tsx rename to src/components/InactiveScreen.tsx index b1b586ec..28cba628 100644 --- a/src/common/component/InactiveScreen.tsx +++ b/src/components/InactiveScreen.tsx @@ -1,6 +1,6 @@ import { FC, useEffect } from "react"; import { useTranslation } from "react-i18next"; -import useStreaming from "../hook/useStreaming"; +import useStreaming from "@/hooks/useStreaming"; // import clsx from "clsx"; import Button from "./styled/Button"; diff --git a/src/common/component/InviteLink.tsx b/src/components/InviteLink.tsx similarity index 93% rename from src/common/component/InviteLink.tsx rename to src/components/InviteLink.tsx index 4c59b665..034cf92d 100644 --- a/src/common/component/InviteLink.tsx +++ b/src/components/InviteLink.tsx @@ -1,10 +1,10 @@ import { FC } from "react"; import { useTranslation } from "react-i18next"; -import useInviteLink from "../hook/useInviteLink"; +import useInviteLink from "@/hooks/useInviteLink"; import Input from "./styled/Input"; import Button from "./styled/Button"; import QRCode from "./QRCode"; -import IconQuestion from '../../assets/icons/question.svg'; +import IconQuestion from '@/assets/icons/question.svg'; type Props = {}; const InviteLink: FC = () => { diff --git a/src/common/component/InviteModal/AddMembers.tsx b/src/components/InviteModal/AddMembers.tsx similarity index 93% rename from src/common/component/InviteModal/AddMembers.tsx rename to src/components/InviteModal/AddMembers.tsx index caf1562e..834a3566 100644 --- a/src/common/component/InviteModal/AddMembers.tsx +++ b/src/components/InviteModal/AddMembers.tsx @@ -4,10 +4,10 @@ import Button from "../styled/Button"; import Input from "../styled/Input"; import User from "../User"; import StyledCheckbox from "../styled/Checkbox"; -import { useAddMembersMutation } from "../../../app/services/channel"; -import CloseIcon from "../../../assets/icons/close.svg"; -import useFilteredUsers from "../../hook/useFilteredUsers"; -import { useAppSelector } from "../../../app/store"; +import { useAddMembersMutation } from "@/app/services/channel"; +import CloseIcon from "@/assets/icons/close.svg"; +import useFilteredUsers from "@/hooks/useFilteredUsers"; +import { useAppSelector } from "@/app/store"; interface Props { cid?: number; diff --git a/src/common/component/InviteModal/InviteByEmail.tsx b/src/components/InviteModal/InviteByEmail.tsx similarity index 95% rename from src/common/component/InviteModal/InviteByEmail.tsx rename to src/components/InviteModal/InviteByEmail.tsx index 9275e956..3a6b691e 100644 --- a/src/common/component/InviteModal/InviteByEmail.tsx +++ b/src/components/InviteModal/InviteByEmail.tsx @@ -1,8 +1,8 @@ import { useEffect, useState, ChangeEvent, FC, useRef } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; -import { useSendLoginMagicLinkMutation } from "../../../app/services/auth"; -import useInviteLink from "../../hook/useInviteLink"; +import { useSendLoginMagicLinkMutation } from "@/app/services/auth"; +import useInviteLink from "@/hooks/useInviteLink"; import QRCode from "../QRCode"; import Button from "../styled/Button"; import Input from "../styled/Input"; diff --git a/src/common/component/InviteModal/index.tsx b/src/components/InviteModal/index.tsx similarity index 92% rename from src/common/component/InviteModal/index.tsx rename to src/components/InviteModal/index.tsx index 7da626aa..691951af 100644 --- a/src/common/component/InviteModal/index.tsx +++ b/src/components/InviteModal/index.tsx @@ -1,8 +1,8 @@ import InviteByEmail from "./InviteByEmail"; import AddMembers from "./AddMembers"; -import CloseIcon from "../../../assets/icons/close.svg"; +import CloseIcon from "@/assets/icons/close.svg"; import Modal from "../Modal"; -import { useAppSelector } from "../../../app/store"; +import { useAppSelector } from "@/app/store"; import { FC } from "react"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/LeaveChannel/LeaveConfirmModal.tsx b/src/components/LeaveChannel/LeaveConfirmModal.tsx similarity index 96% rename from src/common/component/LeaveChannel/LeaveConfirmModal.tsx rename to src/components/LeaveChannel/LeaveConfirmModal.tsx index 9f705922..a7fcbe88 100644 --- a/src/common/component/LeaveChannel/LeaveConfirmModal.tsx +++ b/src/components/LeaveChannel/LeaveConfirmModal.tsx @@ -1,7 +1,7 @@ import { useEffect, FC } from "react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; -import useLeaveChannel from "../../hook/useLeaveChannel"; +import useLeaveChannel from "@/hooks/useLeaveChannel"; import Modal from "../Modal"; import StyledModal from "../styled/Modal"; import Button from "../styled/Button"; diff --git a/src/common/component/LeaveChannel/TransferOwnerModal.tsx b/src/components/LeaveChannel/TransferOwnerModal.tsx similarity index 97% rename from src/common/component/LeaveChannel/TransferOwnerModal.tsx rename to src/components/LeaveChannel/TransferOwnerModal.tsx index 3c72681b..509b251c 100644 --- a/src/common/component/LeaveChannel/TransferOwnerModal.tsx +++ b/src/components/LeaveChannel/TransferOwnerModal.tsx @@ -2,7 +2,7 @@ import { useEffect, useState, FC } from "react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; import Modal from "../Modal"; -import useLeaveChannel from "../../hook/useLeaveChannel"; +import useLeaveChannel from "@/hooks/useLeaveChannel"; import StyledModal from "../styled/Modal"; import Button from "../styled/Button"; import User from "../User"; diff --git a/src/common/component/LeaveChannel/index.tsx b/src/components/LeaveChannel/index.tsx similarity index 100% rename from src/common/component/LeaveChannel/index.tsx rename to src/components/LeaveChannel/index.tsx diff --git a/src/common/component/LinkifyText.tsx b/src/components/LinkifyText.tsx similarity index 100% rename from src/common/component/LinkifyText.tsx rename to src/components/LinkifyText.tsx diff --git a/src/common/component/Loading.tsx b/src/components/Loading.tsx similarity index 96% rename from src/common/component/Loading.tsx rename to src/components/Loading.tsx index c6c3bbbc..3ecc3d86 100644 --- a/src/common/component/Loading.tsx +++ b/src/components/Loading.tsx @@ -2,7 +2,7 @@ import { FC, useState, useEffect, memo } from "react"; import clsx from "clsx"; import { Ring } from "@uiball/loaders"; import Button from "./styled/Button"; -import useLogout from "../hook/useLogout"; +import useLogout from "@/hooks/useLogout"; interface Props { reload?: boolean; diff --git a/src/common/component/ManageMembers/MemberList.tsx b/src/components/ManageMembers/MemberList.tsx similarity index 94% rename from src/common/component/ManageMembers/MemberList.tsx rename to src/components/ManageMembers/MemberList.tsx index 5fad856d..3295d421 100644 --- a/src/common/component/ManageMembers/MemberList.tsx +++ b/src/components/ManageMembers/MemberList.tsx @@ -4,14 +4,14 @@ import { hideAll } from "tippy.js"; import toast from "react-hot-toast"; import { ViewportList } from 'react-viewport-list'; import { useTranslation } from "react-i18next"; -import { useUpdateUserMutation } from "../../../app/services/user"; +import { useUpdateUserMutation } from "@/app/services/user"; import User from "../User"; -import IconMore from "../../../assets/icons/more.svg"; -import IconOwner from "../../../assets/icons/owner.svg"; -import IconArrowDown from "../../../assets/icons/arrow.down.mini.svg"; -import IconCheck from "../../../assets/icons/check.sign.svg"; -import useUserOperation from "../../hook/useUserOperation"; -import { useAppSelector } from "../../../app/store"; +import IconMore from "@/assets/icons/more.svg"; +import IconOwner from "@/assets/icons/owner.svg"; +import IconArrowDown from "@/assets/icons/arrow.down.mini.svg"; +import IconCheck from "@/assets/icons/check.sign.svg"; +import useUserOperation from "@/hooks/useUserOperation"; +import { useAppSelector } from "@/app/store"; interface Props { cid?: number; diff --git a/src/common/component/ManageMembers/index.tsx b/src/components/ManageMembers/index.tsx similarity index 94% rename from src/common/component/ManageMembers/index.tsx rename to src/components/ManageMembers/index.tsx index 3d84344d..b9e50f2e 100644 --- a/src/common/component/ManageMembers/index.tsx +++ b/src/components/ManageMembers/index.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; import InviteLink from "../InviteLink"; -import { useAppSelector } from "../../../app/store"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; import MemberList from "./MemberList"; diff --git a/src/common/component/Manifest/Prompt.tsx b/src/components/Manifest/Prompt.tsx similarity index 95% rename from src/common/component/Manifest/Prompt.tsx rename to src/components/Manifest/Prompt.tsx index 270d62e9..2542d654 100644 --- a/src/common/component/Manifest/Prompt.tsx +++ b/src/components/Manifest/Prompt.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; import Modal from "../Modal"; -import IconClose from "../../../assets/icons/close.svg"; +import IconClose from "@/assets/icons/close.svg"; import Button from "../styled/Button"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/Manifest/index.tsx b/src/components/Manifest/index.tsx similarity index 90% rename from src/common/component/Manifest/index.tsx rename to src/components/Manifest/index.tsx index 0b00bcaf..92129e01 100644 --- a/src/common/component/Manifest/index.tsx +++ b/src/components/Manifest/index.tsx @@ -1,8 +1,8 @@ import { useEffect, useState, FC } from "react"; import Prompt from "./Prompt"; -import usePWAInstallPrompt from "../../hook/usePWAInstallPrompt"; -import { BeforeInstallPromptEvent } from "../../../types/global"; -interface IProps {} +import usePWAInstallPrompt from "@/hooks/usePWAInstallPrompt"; +import { BeforeInstallPromptEvent } from "@/types/global"; +interface IProps { } const Manifest: FC = () => { const { setCanceled, prompted, setDeferredPrompt, showPrompt } = usePWAInstallPrompt(); const [popup, setPopup] = useState(false); diff --git a/src/common/component/MarkdownEditor/index.tsx b/src/components/MarkdownEditor/index.tsx similarity index 96% rename from src/common/component/MarkdownEditor/index.tsx rename to src/components/MarkdownEditor/index.tsx index 5db0807c..d4a06ea1 100644 --- a/src/common/component/MarkdownEditor/index.tsx +++ b/src/components/MarkdownEditor/index.tsx @@ -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 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 { isDarkMode } from "../../utils"; +import { isDarkMode } from "@/utils"; type Props = { updateDraft?: (draft: string) => void; diff --git a/src/common/component/MarkdownRender.tsx b/src/components/MarkdownRender.tsx similarity index 100% rename from src/common/component/MarkdownRender.tsx rename to src/components/MarkdownRender.tsx diff --git a/src/common/component/Message/Commands.tsx b/src/components/Message/Commands.tsx similarity index 87% rename from src/common/component/Message/Commands.tsx rename to src/components/Message/Commands.tsx index e27c3d4d..e4f8a28f 100644 --- a/src/common/component/Message/Commands.tsx +++ b/src/components/Message/Commands.tsx @@ -3,25 +3,25 @@ import { useDispatch } from "react-redux"; import Tippy from "@tippyjs/react"; import { hideAll } from "tippy.js"; import toast from "react-hot-toast"; -import { updateSelectMessages } from "../../../app/slices/ui"; +import { updateSelectMessages } from "@/app/slices/ui"; import ContextMenu, { Item } from "../ContextMenu"; import Tooltip from "../Tooltip"; -import useFavMessage from "../../hook/useFavMessage"; -import useSendMessage from "../../hook/useSendMessage"; +import useFavMessage from "@/hooks/useFavMessage"; +import useSendMessage from "@/hooks/useSendMessage"; import ReactionPicker from "./ReactionPicker"; -import replyIcon from "../../../assets/icons/reply.svg?url"; -import reactIcon from "../../../assets/icons/reaction.svg?url"; -import editIcon from "../../../assets/icons/edit.svg?url"; -import IconBookmark from "../../../assets/icons/bookmark.add.svg"; -import IconPin from "../../../assets/icons/pin.svg"; -import IconForward from "../../../assets/icons/forward.svg"; -import IconSelect from "../../../assets/icons/select.svg"; -import IconDelete from "../../../assets/icons/delete.svg"; -import moreIcon from "../../../assets/icons/more.svg?url"; +import replyIcon from "@/assets/icons/reply.svg?url"; +import reactIcon from "@/assets/icons/reaction.svg?url"; +import editIcon from "@/assets/icons/edit.svg?url"; +import IconBookmark from "@/assets/icons/bookmark.add.svg"; +import IconPin from "@/assets/icons/pin.svg"; +import IconForward from "@/assets/icons/forward.svg"; +import IconSelect from "@/assets/icons/select.svg"; +import IconDelete from "@/assets/icons/delete.svg"; +import moreIcon from "@/assets/icons/more.svg?url"; import useMessageOperation from "./useMessageOperation"; import { useTranslation } from "react-i18next"; import clsx from "clsx"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; type Props = { isSelf: boolean; context: ChatContext; diff --git a/src/common/component/Message/ContextMenu.tsx b/src/components/Message/ContextMenu.tsx similarity index 82% rename from src/common/component/Message/ContextMenu.tsx rename to src/components/Message/ContextMenu.tsx index 053ea35d..d31eb0d7 100644 --- a/src/common/component/Message/ContextMenu.tsx +++ b/src/components/Message/ContextMenu.tsx @@ -2,18 +2,18 @@ import { FC, ReactElement } from "react"; import Tippy from "@tippyjs/react"; import { useDispatch } from "react-redux"; import ContextMenu, { Item } from "../ContextMenu"; -import IconDelete from "../../../assets/icons/delete.svg"; -import IconEdit from "../../../assets/icons/edit.svg"; -import IconReply from "../../../assets/icons/reply.svg"; -import IconForward from "../../../assets/icons/forward.svg"; -import IconPin from "../../../assets/icons/pin.svg"; -import IconCopy from "../../../assets/icons/copy.svg"; -import IconSelect from "../../../assets/icons/select.svg"; -import { updateSelectMessages } from "../../../app/slices/ui"; -import useSendMessage from "../../hook/useSendMessage"; +import IconDelete from "@/assets/icons/delete.svg"; +import IconEdit from "@/assets/icons/edit.svg"; +import IconReply from "@/assets/icons/reply.svg"; +import IconForward from "@/assets/icons/forward.svg"; +import IconPin from "@/assets/icons/pin.svg"; +import IconCopy from "@/assets/icons/copy.svg"; +import IconSelect from "@/assets/icons/select.svg"; +import { updateSelectMessages } from "@/app/slices/ui"; +import useSendMessage from "@/hooks/useSendMessage"; import useMessageOperation from "./useMessageOperation"; import { useTranslation } from "react-i18next"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; type Props = { context: ChatContext; contextId: number; diff --git a/src/common/component/Message/EditMessage.tsx b/src/components/Message/EditMessage.tsx similarity index 93% rename from src/common/component/Message/EditMessage.tsx rename to src/components/Message/EditMessage.tsx index cc96ec2f..d80de7d4 100644 --- a/src/common/component/Message/EditMessage.tsx +++ b/src/components/Message/EditMessage.tsx @@ -1,9 +1,9 @@ import { useState, useRef, useEffect, ChangeEvent, KeyboardEvent, FC } from "react"; import TextareaAutosize from "react-textarea-autosize"; import { useKey } from "rooks"; -import { useEditMessageMutation } from "../../../app/services/message"; -import { ContentTypes } from "../../../app/config"; -import { useAppSelector } from "../../../app/store"; +import { useEditMessageMutation } from "@/app/services/message"; +import { ContentTypes } from "@/app/config"; +import { useAppSelector } from "@/app/store"; type Props = { mid: number; diff --git a/src/common/component/Message/ExpireTimer.tsx b/src/components/Message/ExpireTimer.tsx similarity index 89% rename from src/common/component/Message/ExpireTimer.tsx rename to src/components/Message/ExpireTimer.tsx index 38808cd7..ea3fa326 100644 --- a/src/common/component/Message/ExpireTimer.tsx +++ b/src/components/Message/ExpireTimer.tsx @@ -1,11 +1,11 @@ import dayjs from 'dayjs'; import { FC, useEffect, useState, useCallback } from 'react'; import { useDispatch } from 'react-redux'; -import { removeMessage } from '../../../app/slices/message'; -import { removeChannelMsg } from '../../../app/slices/message.channel'; -import { removeUserMsg } from '../../../app/slices/message.user'; -import IconTimer from '../../../assets/icons/timer.svg'; -import { ChatContext } from '../../../types/common'; +import { removeMessage } from '../../app/slices/message'; +import { removeChannelMsg } from '../../app/slices/message.channel'; +import { removeUserMsg } from '../../app/slices/message.user'; +import IconTimer from '@/assets/icons/timer.svg'; +import { ChatContext } from '../../types/common'; type Props = { context: ChatContext, contextId: number, diff --git a/src/common/component/Message/FavoredMessage.tsx b/src/components/Message/FavoredMessage.tsx similarity index 97% rename from src/common/component/Message/FavoredMessage.tsx rename to src/components/Message/FavoredMessage.tsx index 7faf1dba..682650af 100644 --- a/src/common/component/Message/FavoredMessage.tsx +++ b/src/components/Message/FavoredMessage.tsx @@ -1,7 +1,7 @@ import { FC, ReactElement, useEffect, useState } from "react"; import renderContent from "./renderContent"; import Avatar from "../Avatar"; -import useFavMessage from "../../hook/useFavMessage"; +import useFavMessage from "@/hooks/useFavMessage"; type Props = { id?: string; diff --git a/src/common/component/Message/ForwardedMessage.tsx b/src/components/Message/ForwardedMessage.tsx similarity index 93% rename from src/common/component/Message/ForwardedMessage.tsx rename to src/components/Message/ForwardedMessage.tsx index bbd42f7f..9b504339 100644 --- a/src/common/component/Message/ForwardedMessage.tsx +++ b/src/components/Message/ForwardedMessage.tsx @@ -1,10 +1,10 @@ import { useEffect, useState, FC, ReactElement } from "react"; import renderContent from "./renderContent"; import Avatar from "../Avatar"; -import IconForward from "../../../assets/icons/forward.svg"; -import useNormalizeMessage from "../../hook/useNormalizeMessage"; +import IconForward from "@/assets/icons/forward.svg"; +import useNormalizeMessage from "@/hooks/useNormalizeMessage"; import { useTranslation } from "react-i18next"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; type Props = { context: ChatContext; diff --git a/src/common/component/Message/Mention.tsx b/src/components/Message/Mention.tsx similarity index 93% rename from src/common/component/Message/Mention.tsx rename to src/components/Message/Mention.tsx index 4435c4cb..c335c624 100644 --- a/src/common/component/Message/Mention.tsx +++ b/src/components/Message/Mention.tsx @@ -1,7 +1,7 @@ // import { FC, ReactNode } from "react"; import Tippy from "@tippyjs/react"; import Profile from "../Profile"; -import { useAppSelector } from "../../../app/store"; +import { useAppSelector } from "@/app/store"; interface Props { uid: number; diff --git a/src/common/component/Message/PinMessageModal.tsx b/src/components/Message/PinMessageModal.tsx similarity index 96% rename from src/common/component/Message/PinMessageModal.tsx rename to src/components/Message/PinMessageModal.tsx index 5b197a82..06dc9090 100644 --- a/src/common/component/Message/PinMessageModal.tsx +++ b/src/components/Message/PinMessageModal.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; import { useEffect } from "react"; import toast from "react-hot-toast"; -import usePinMessage from "../../hook/usePinMessage"; +import usePinMessage from "@/hooks/usePinMessage"; import StyledModal from "../styled/Modal"; import Button from "../styled/Button"; import Modal from "../Modal"; diff --git a/src/common/component/Message/PreviewMessage.tsx b/src/components/Message/PreviewMessage.tsx similarity index 96% rename from src/common/component/Message/PreviewMessage.tsx rename to src/components/Message/PreviewMessage.tsx index 73842f6c..abc77aee 100644 --- a/src/common/component/Message/PreviewMessage.tsx +++ b/src/components/Message/PreviewMessage.tsx @@ -2,7 +2,7 @@ import { FC } from "react"; import clsx from "clsx"; import renderContent from "./renderContent"; import Avatar from "../Avatar"; -import { useAppSelector } from "../../../app/store"; +import { useAppSelector } from "@/app/store"; interface Props { mid?: number; diff --git a/src/common/component/Message/Reaction.tsx b/src/components/Message/Reaction.tsx similarity index 94% rename from src/common/component/Message/Reaction.tsx rename to src/components/Message/Reaction.tsx index 169af69e..e75a7d6f 100644 --- a/src/common/component/Message/Reaction.tsx +++ b/src/components/Message/Reaction.tsx @@ -4,9 +4,9 @@ import { hideAll } from "tippy.js"; import ReactionItem, { Emojis, ReactionMap } from "../ReactionItem"; import ReactionPicker from "./ReactionPicker"; import Tooltip from "../Tooltip"; -import { useReactMessageMutation } from "../../../app/services/message"; -import IconAddEmoji from "../../../assets/icons/add.emoji.svg"; -import { useAppSelector } from "../../../app/store"; +import { useReactMessageMutation } from "@/app/services/message"; +import IconAddEmoji from "@/assets/icons/add.emoji.svg"; +import { useAppSelector } from "@/app/store"; const ReactionDetails = ({ diff --git a/src/common/component/Message/ReactionPicker.tsx b/src/components/Message/ReactionPicker.tsx similarity index 89% rename from src/common/component/Message/ReactionPicker.tsx rename to src/components/Message/ReactionPicker.tsx index a1089e01..be07a47c 100644 --- a/src/common/component/Message/ReactionPicker.tsx +++ b/src/components/Message/ReactionPicker.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; -import { useReactMessageMutation } from "../../../app/services/message"; -import { Emojis } from "../../../app/config"; +import { useReactMessageMutation } from "@/app/services/message"; +import { Emojis } from "@/app/config"; import Emoji from "../ReactionItem"; -import { useAppSelector } from "../../../app/store"; +import { useAppSelector } from "@/app/store"; type Props = { mid: number; diff --git a/src/common/component/Message/Reply.tsx b/src/components/Message/Reply.tsx similarity index 94% rename from src/common/component/Message/Reply.tsx rename to src/components/Message/Reply.tsx index 7396ab4c..66fd6aa7 100644 --- a/src/common/component/Message/Reply.tsx +++ b/src/components/Message/Reply.tsx @@ -1,13 +1,13 @@ import React, { MouseEvent, FC } from "react"; import clsx from "clsx"; import MarkdownRender from "../MarkdownRender"; -import { ContentTypes } from "../../../app/config"; -import { getFileIcon, isImage } from "../../utils"; +import { ContentTypes } from "@/app/config"; +import { getFileIcon, isImage } from "@/utils"; import LinkifyText from '../LinkifyText'; import Avatar from "../Avatar"; -import { useAppSelector } from "../../../app/store"; -import { MessagePayload } from "../../../app/slices/message"; +import { useAppSelector } from "@/app/store"; +import { MessagePayload } from "@/app/slices/message"; import { useTranslation } from "react-i18next"; const renderContent = (data: MessagePayload) => { diff --git a/src/common/component/Message/URLPreview.tsx b/src/components/Message/URLPreview.tsx similarity index 93% rename from src/common/component/Message/URLPreview.tsx rename to src/components/Message/URLPreview.tsx index 422df2df..27ede94e 100644 --- a/src/common/component/Message/URLPreview.tsx +++ b/src/components/Message/URLPreview.tsx @@ -1,8 +1,8 @@ import { useState, useEffect } from "react"; import { useDispatch } from "react-redux"; -import { useLazyGetOGInfoQuery } from "../../../app/services/message"; -import { upsertOG } from "../../../app/slices/footprint"; -import { useAppSelector } from "../../../app/store"; +import { useLazyGetOGInfoQuery } from "@/app/services/message"; +import { upsertOG } from "@/app/slices/footprint"; +import { useAppSelector } from "@/app/store"; export default function URLPreview({ url = "" }) { diff --git a/src/common/component/Message/index.tsx b/src/components/Message/index.tsx similarity index 96% rename from src/common/component/Message/index.tsx rename to src/components/Message/index.tsx index 973b9062..2bc26799 100644 --- a/src/common/component/Message/index.tsx +++ b/src/components/Message/index.tsx @@ -13,12 +13,12 @@ import EditMessage from "./EditMessage"; import renderContent from "./renderContent"; import Tooltip from "../Tooltip"; import ContextMenu from "./ContextMenu"; -import useContextMenu from "../../hook/useContextMenu"; -import usePinMessage from "../../hook/usePinMessage"; -import { useAppSelector } from "../../../app/store"; +import useContextMenu from "@/hooks/useContextMenu"; +import usePinMessage from "@/hooks/usePinMessage"; +import { useAppSelector } from "@/app/store"; import ExpireTimer from "./ExpireTimer"; -import IconInfo from '../../../assets/icons/info.svg'; -import { ChatContext } from "../../../types/common"; +import IconInfo from '@/assets/icons/info.svg'; +import { ChatContext } from "@/types/common"; interface IProps { readOnly?: boolean; diff --git a/src/common/component/Message/renderContent.tsx b/src/components/Message/renderContent.tsx similarity index 92% rename from src/common/component/Message/renderContent.tsx rename to src/components/Message/renderContent.tsx index 67a8184f..154eafdd 100644 --- a/src/common/component/Message/renderContent.tsx +++ b/src/components/Message/renderContent.tsx @@ -1,14 +1,14 @@ // import React from "react"; import dayjs from "dayjs"; -import i18n from '../../../i18n'; -import { ContentTypes } from "../../../app/config"; +import i18n from "@/i18n"; +import { ContentTypes } from "@/app/config"; import ForwardedMessage from "./ForwardedMessage"; import MarkdownRender from "../MarkdownRender"; import FileMessage from "../FileMessage"; -import { ContentType } from "../../../types/message"; +import { ContentType } from "@/types/message"; import LinkifyText from '../LinkifyText'; import VoiceMessage from "../VoiceMessage"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; type Props = { context: ChatContext; diff --git a/src/common/component/Message/useInView.ts b/src/components/Message/useInView.ts similarity index 100% rename from src/common/component/Message/useInView.ts rename to src/components/Message/useInView.ts diff --git a/src/common/component/Message/useMessageOperation.tsx b/src/components/Message/useMessageOperation.tsx similarity index 93% rename from src/common/component/Message/useMessageOperation.tsx rename to src/components/Message/useMessageOperation.tsx index 2d0de5e9..33698919 100644 --- a/src/common/component/Message/useMessageOperation.tsx +++ b/src/components/Message/useMessageOperation.tsx @@ -3,11 +3,11 @@ import toast from "react-hot-toast"; import DeleteMessageConfirm from "../DeleteMessageConfirm"; import ForwardModal from "../ForwardModal"; import PinMessageModal from "./PinMessageModal"; -import { ContentTypes } from "../../../app/config"; -import useCopy from "../../hook/useCopy"; -import usePinMessage from "../../hook/usePinMessage"; -import { useAppSelector } from "../../../app/store"; -import { ChatContext } from "../../../types/common"; +import { ContentTypes } from "@/app/config"; +import useCopy from "@/hooks/useCopy"; +import usePinMessage from "@/hooks/usePinMessage"; +import { useAppSelector } from "@/app/store"; +import { ChatContext } from "@/types/common"; interface Params { mid: number; diff --git a/src/common/component/Meta.tsx b/src/components/Meta.tsx similarity index 77% rename from src/common/component/Meta.tsx rename to src/components/Meta.tsx index 463060e1..10f66ab1 100644 --- a/src/common/component/Meta.tsx +++ b/src/components/Meta.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; import { Helmet } from "react-helmet"; -import BASE_URL from "../../app/config"; -import { useGetServerQuery } from "../../app/services/server"; +import BASE_URL from "@/app/config"; +import { useGetServerQuery } from "@/app/services/server"; type Props = {}; const Meta: FC = () => { const { data, isSuccess } = useGetServerQuery(); diff --git a/src/common/component/MixedInput/config.ts b/src/components/MixedInput/config.ts similarity index 100% rename from src/common/component/MixedInput/config.ts rename to src/components/MixedInput/config.ts diff --git a/src/common/component/MixedInput/index.tsx b/src/components/MixedInput/index.tsx similarity index 97% rename from src/common/component/MixedInput/index.tsx rename to src/components/MixedInput/index.tsx index b324a6c9..0c6d3f41 100644 --- a/src/common/component/MixedInput/index.tsx +++ b/src/components/MixedInput/index.tsx @@ -18,12 +18,12 @@ import { } from "@udecode/plate"; import { createComboboxPlugin } from "@udecode/plate-combobox"; import { ReactEditor } from "slate-react"; -import useUploadFile from "../../hook/useUploadFile"; +import useUploadFile from "@/hooks/useUploadFile"; import { CONFIG } from "./config"; import User from "../User"; -import { useAppSelector } from "../../../app/store"; -import { isMobile } from "../../utils"; -import { ChatContext } from "../../../types/common"; +import { useAppSelector } from "@/app/store"; +import { isMobile } from "@/utils"; +import { ChatContext } from "@/types/common"; export const TEXT_EDITOR_PREFIX = "_text_editor"; let components = createPlateUI({ diff --git a/src/common/component/MixedInput/plugins.ts b/src/components/MixedInput/plugins.ts similarity index 100% rename from src/common/component/MixedInput/plugins.ts rename to src/components/MixedInput/plugins.ts diff --git a/src/common/component/MobileAppTip.tsx b/src/components/MobileAppTip.tsx similarity index 96% rename from src/common/component/MobileAppTip.tsx rename to src/components/MobileAppTip.tsx index 2d162cfb..0c7d8375 100644 --- a/src/common/component/MobileAppTip.tsx +++ b/src/components/MobileAppTip.tsx @@ -1,7 +1,7 @@ import { FC, useState, useEffect } from "react"; import toast from "react-hot-toast"; 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"; interface ContainerProps { diff --git a/src/common/component/Modal.tsx b/src/components/Modal.tsx similarity index 100% rename from src/common/component/Modal.tsx rename to src/components/Modal.tsx diff --git a/src/common/component/NewVersion.tsx b/src/components/NewVersion.tsx similarity index 94% rename from src/common/component/NewVersion.tsx rename to src/components/NewVersion.tsx index e5afe58e..cd8c7c0f 100644 --- a/src/common/component/NewVersion.tsx +++ b/src/components/NewVersion.tsx @@ -1,7 +1,7 @@ import { FC, useEffect } from "react"; import toast from "react-hot-toast"; 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"; interface Props { diff --git a/src/common/component/Notification/index.tsx b/src/components/Notification/index.tsx similarity index 90% rename from src/common/component/Notification/index.tsx rename to src/components/Notification/index.tsx index 2f1cbe22..b84091e5 100644 --- a/src/common/component/Notification/index.tsx +++ b/src/components/Notification/index.tsx @@ -1,8 +1,8 @@ import { useEffect, memo } from "react"; import { useNavigate } from "react-router-dom"; import useDeviceToken from "./useDeviceToken"; -import { vapidKey } from "../../../app/config"; -import { useUpdateDeviceTokenMutation } from "../../../app/services/auth"; +import { vapidKey } from "@/app/config"; +import { useUpdateDeviceTokenMutation } from "@/app/services/auth"; let updated = false; let updating = false; const Notification = () => { diff --git a/src/common/component/Notification/useDeviceToken.ts b/src/components/Notification/useDeviceToken.ts similarity index 94% rename from src/common/component/Notification/useDeviceToken.ts rename to src/components/Notification/useDeviceToken.ts index 90b026e8..893d51aa 100644 --- a/src/common/component/Notification/useDeviceToken.ts +++ b/src/components/Notification/useDeviceToken.ts @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import { initializeApp } from "firebase/app"; 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 error = false; const useDeviceToken = (vapidKey: string) => { diff --git a/src/common/component/PinnedMessage.tsx b/src/components/PinnedMessage.tsx similarity index 91% rename from src/common/component/PinnedMessage.tsx rename to src/components/PinnedMessage.tsx index 48169a2c..c5c4e578 100644 --- a/src/common/component/PinnedMessage.tsx +++ b/src/components/PinnedMessage.tsx @@ -1,11 +1,12 @@ import dayjs from "dayjs"; +import { FC } from "react"; + import renderContent from "./Message/renderContent"; import Avatar from "./Avatar"; -import { useAppSelector } from "../../app/store"; -import { FC } from "react"; -import { PinnedMessage } from "../../types/channel"; +import { useAppSelector } from "@/app/store"; +import { PinnedMessage } from "@/types/channel"; import { normalizeFileMessage } from "../utils"; -import { MessagePayload } from "../../app/slices/message"; +import { MessagePayload } from "@/app/slices/message"; interface Props { data: PinnedMessage diff --git a/src/common/component/Profile/index.tsx b/src/components/Profile/index.tsx similarity index 93% rename from src/common/component/Profile/index.tsx rename to src/components/Profile/index.tsx index 8b1705d2..2f34ad26 100644 --- a/src/common/component/Profile/index.tsx +++ b/src/components/Profile/index.tsx @@ -1,11 +1,11 @@ import { FC, memo } from "react"; import { NavLink } from "react-router-dom"; import Tippy from "@tippyjs/react"; -import IconMessage from "../../../assets/icons/message.svg"; -import IconMore from "../../../assets/icons/more.svg"; +import IconMessage from "@/assets/icons/message.svg"; +import IconMore from "@/assets/icons/more.svg"; import Avatar from "../Avatar"; -import useUserOperation from "../../hook/useUserOperation"; -import { useAppSelector } from "../../../app/store"; +import useUserOperation from "@/hooks/useUserOperation"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; import clsx from "clsx"; diff --git a/src/common/component/QRCode.tsx b/src/components/QRCode.tsx similarity index 95% rename from src/common/component/QRCode.tsx rename to src/components/QRCode.tsx index 579611b7..a4b8d40d 100644 --- a/src/common/component/QRCode.tsx +++ b/src/components/QRCode.tsx @@ -1,6 +1,6 @@ // import React from 'react'; import QR from 'qrcode.react'; -import { useAppSelector } from '../../app/store'; +import { useAppSelector } from '@/app/store'; type Props = { link: string, diff --git a/src/common/component/ReLoginModal.tsx b/src/components/ReLoginModal.tsx similarity index 83% rename from src/common/component/ReLoginModal.tsx rename to src/components/ReLoginModal.tsx index ac172876..42290886 100644 --- a/src/common/component/ReLoginModal.tsx +++ b/src/components/ReLoginModal.tsx @@ -1,12 +1,12 @@ import { FC, 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 useLogout from "../../common/hook/useLogout"; +import Modal from "./Modal"; +import StyledModal from "./styled/Modal"; +import Button from "./styled/Button"; +import useLogout from "@/hooks/useLogout"; import { useTranslation } from "react-i18next"; import { useDispatch } from "react-redux"; -import { updateRoleChanged } from "../../app/slices/auth.data"; +import { updateRoleChanged } from "@/app/slices/auth.data"; interface Props { reasonType?: "role_changed", diff --git a/src/common/component/ReactionItem.tsx b/src/components/ReactionItem.tsx similarity index 73% rename from src/common/component/ReactionItem.tsx rename to src/components/ReactionItem.tsx index f9f3201c..f3dddf3d 100644 --- a/src/common/component/ReactionItem.tsx +++ b/src/components/ReactionItem.tsx @@ -1,12 +1,12 @@ import { FC, ReactElement } from "react"; -import EmojiThumbUp from "../../assets/icons/emoji.thumb.up.svg"; -import EmojiThumbDown from "../../assets/icons/emoji.thumb.down.svg"; -import EmojiSmile from "../../assets/icons/emoji.smile.svg"; -import EmojiCelebrate from "../../assets/icons/emoji.celebrate.svg"; -import EmojiUnhappy from "../../assets/icons/emoji.unhappy.svg"; -import EmojiHeart from "../../assets/icons/emoji.heart.svg"; -import EmojiRocket from "../../assets/icons/emoji.rocket.svg"; -import EmojiLook from "../../assets/icons/emoji.look.svg"; +import EmojiThumbUp from "@/assets/icons/emoji.thumb.up.svg"; +import EmojiThumbDown from "@/assets/icons/emoji.thumb.down.svg"; +import EmojiSmile from "@/assets/icons/emoji.smile.svg"; +import EmojiCelebrate from "@/assets/icons/emoji.celebrate.svg"; +import EmojiUnhappy from "@/assets/icons/emoji.unhappy.svg"; +import EmojiHeart from "@/assets/icons/emoji.heart.svg"; +import EmojiRocket from "@/assets/icons/emoji.rocket.svg"; +import EmojiLook from "@/assets/icons/emoji.look.svg"; export interface Emojis { "👍": ReactElement; diff --git a/src/common/component/RequireAuth.tsx b/src/components/RequireAuth.tsx similarity index 88% rename from src/common/component/RequireAuth.tsx rename to src/components/RequireAuth.tsx index b5299c16..ff8d0070 100644 --- a/src/common/component/RequireAuth.tsx +++ b/src/components/RequireAuth.tsx @@ -1,9 +1,9 @@ import { FC, ReactElement } from "react"; import { Navigate, useLocation, matchRoutes } from "react-router-dom"; -import { GuestRoutes, KEY_LOCAL_TRY_PATH } from "../../app/config"; -import { useGetInitializedQuery } from "../../app/services/auth"; -import { useGetLoginConfigQuery } from "../../app/services/server"; -import { useAppSelector } from "../../app/store"; +import { GuestRoutes, KEY_LOCAL_TRY_PATH } from "@/app/config"; +import { useGetInitializedQuery } from "@/app/services/auth"; +import { useGetLoginConfigQuery } from "@/app/services/server"; +import { useAppSelector } from "@/app/store"; import Loading from "./Loading"; interface Props { diff --git a/src/common/component/RequireNoAuth.tsx b/src/components/RequireNoAuth.tsx similarity index 83% rename from src/common/component/RequireNoAuth.tsx rename to src/components/RequireNoAuth.tsx index 4dd0bc92..c3abb1ab 100644 --- a/src/common/component/RequireNoAuth.tsx +++ b/src/components/RequireNoAuth.tsx @@ -1,7 +1,7 @@ import { FC, ReactElement } from "react"; import { Navigate } from "react-router-dom"; -import { useGetInitializedQuery } from "../../app/services/auth"; -import { useAppSelector } from "../../app/store"; +import { useGetInitializedQuery } from "@/app/services/auth"; +import { useAppSelector } from "@/app/store"; interface Props { children: ReactElement; diff --git a/src/common/component/RequireSingleTab.tsx b/src/components/RequireSingleTab.tsx similarity index 87% rename from src/common/component/RequireSingleTab.tsx rename to src/components/RequireSingleTab.tsx index dc30b160..ce18f833 100644 --- a/src/common/component/RequireSingleTab.tsx +++ b/src/components/RequireSingleTab.tsx @@ -1,5 +1,5 @@ import { FC, ReactElement } from "react"; -import useTabBroadcast from "../hook/useTabBroadcast"; +import useTabBroadcast from "@/hooks/useTabBroadcast"; import InactiveScreen from "./InactiveScreen"; interface Props { diff --git a/src/common/component/SaveTip.tsx b/src/components/SaveTip.tsx similarity index 95% rename from src/common/component/SaveTip.tsx rename to src/components/SaveTip.tsx index 9c61f30b..d51ddd24 100644 --- a/src/common/component/SaveTip.tsx +++ b/src/components/SaveTip.tsx @@ -1,7 +1,7 @@ // import clsx from "clsx"; import { FC, MouseEvent } from "react"; import { useTranslation } from "react-i18next"; -import Button from '../component/styled/Button'; +import Button from './styled/Button'; interface Props { diff --git a/src/common/component/SearchUser.tsx b/src/components/SearchUser.tsx similarity index 95% rename from src/common/component/SearchUser.tsx rename to src/components/SearchUser.tsx index 29ab30e1..fe9565d0 100644 --- a/src/common/component/SearchUser.tsx +++ b/src/components/SearchUser.tsx @@ -2,21 +2,23 @@ import clsx from "clsx"; import { FC, ChangeEvent, useState, useRef, FormEvent } from "react"; import { useTranslation } from "react-i18next"; -import Modal from "./Modal"; -import IconClose from "../../assets/icons/close.svg"; -import IconSearch from "../../assets/icons/search.svg"; +import { useNavigate } from "react-router-dom"; -import { useSearchUserMutation, useUpdateContactStatusMutation } from "../../app/services/user"; +import IconClose from "@/assets/icons/close.svg"; +import IconSearch from "@/assets/icons/search.svg"; +import { useSearchUserMutation, useUpdateContactStatusMutation } from "@/app/services/user"; +import BASE_URL from "@/app/config"; +import { useAppSelector } from "@/app/store"; import StyledButton from "./styled/Button"; import Input from "./styled/Input"; import Avatar from "./Avatar"; -import BASE_URL from "../../app/config"; -import { useAppSelector } from "../../app/store"; -import { useNavigate } from "react-router-dom"; +import Modal from "./Modal"; + type Props = { closeModal: () => void; }; type Type = "id" | "email"; + const SearchUser: FC = ({ closeModal }) => { const [updateContactStatus, { isLoading: adding }] = useUpdateContactStatusMutation(); const usersData = useAppSelector(store => store.users.byId); diff --git a/src/common/component/Send/EmojiPicker.tsx b/src/components/Send/EmojiPicker.tsx similarity index 86% rename from src/common/component/Send/EmojiPicker.tsx rename to src/components/Send/EmojiPicker.tsx index dc624655..421f7a1b 100644 --- a/src/common/component/Send/EmojiPicker.tsx +++ b/src/components/Send/EmojiPicker.tsx @@ -1,9 +1,10 @@ import { useState, useRef, useEffect } from "react"; import { useOutsideClick } from "rooks"; -import Tooltip from "../Tooltip"; -import { Picker } from 'emoji-mart'; -import SmileIcon from "../../../assets/icons/emoji.smile.svg"; import clsx from "clsx"; +import { Picker } from 'emoji-mart'; + +import Tooltip from "../Tooltip"; +import SmileIcon from "@/assets/icons/emoji.smile.svg"; export default function EmojiPicker({ selectEmoji }: { selectEmoji: (e: string) => void }) { @@ -39,10 +40,11 @@ export default function EmojiPicker({ selectEmoji }: { selectEmoji: (e: string) useOutsideClick( ref, (evt) => { - const clickEle = evt.target; + const clickEle = evt.target as HTMLElement | null; + if (!clickEle) return; const ignore = (clickEle.nodeName == "svg" && clickEle.dataset.emoji == "toggler") || - (clickEle.nodeName == "path" && clickEle.parentElement.dataset.emoji == "toggler"); + (clickEle.nodeName == "path" && clickEle.parentElement && clickEle.parentElement.dataset.emoji == "toggler"); if (ignore) return; setVisible(false); }, diff --git a/src/common/component/Send/Replying.tsx b/src/components/Send/Replying.tsx similarity index 85% rename from src/common/component/Send/Replying.tsx rename to src/components/Send/Replying.tsx index 544cf852..4193bcac 100644 --- a/src/common/component/Send/Replying.tsx +++ b/src/components/Send/Replying.tsx @@ -1,13 +1,13 @@ -import { ContentTypes } from "../../../app/config"; +import { ContentTypes } from "@/app/config"; import MarkdownRender from "../MarkdownRender"; -import IconClose from "../../../assets/icons/close.circle.svg"; -import pictureIcon from "../../../assets/icons/picture.svg?url"; -import { getFileIcon, isImage } from "../../utils"; -import useSendMessage from "../../hook/useSendMessage"; -import { useAppSelector } from "../../../app/store"; -import { MessagePayload } from "../../../app/slices/message"; +import IconClose from "@/assets/icons/close.circle.svg"; +import pictureIcon from "@/assets/icons/picture.svg?url"; +import { getFileIcon, isImage } from "@/utils"; +import useSendMessage from "@/hooks/useSendMessage"; +import { useAppSelector } from "@/app/store"; +import { MessagePayload } from "@/app/slices/message"; import LinkifyText from "../LinkifyText"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; const renderContent = (data: MessagePayload) => { const { content_type, content, thumbnail = "", properties } = data; diff --git a/src/common/component/Send/Toolbar.tsx b/src/components/Send/Toolbar.tsx similarity index 87% rename from src/common/component/Send/Toolbar.tsx rename to src/components/Send/Toolbar.tsx index ebd38c29..97d8c412 100644 --- a/src/common/component/Send/Toolbar.tsx +++ b/src/components/Send/Toolbar.tsx @@ -1,13 +1,13 @@ import { ChangeEvent, useRef, FC } from "react"; import Tooltip from "../Tooltip"; -import AddIcon from "../../../assets/icons/add.solid.svg"; -import MarkdownIcon from "../../../assets/icons/markdown.svg"; -import SendIcon from "../../../assets/icons/send.svg"; -import FullscreenIcon from "../../../assets/icons/fullscreen.svg"; -import ExitFullscreenIcon from "../../../assets/icons/fullscreen.exit.svg"; -import useUploadFile from "../../hook/useUploadFile"; +import AddIcon from "@/assets/icons/add.solid.svg"; +import MarkdownIcon from "@/assets/icons/markdown.svg"; +import SendIcon from "@/assets/icons/send.svg"; +import FullscreenIcon from "@/assets/icons/fullscreen.svg"; +import ExitFullscreenIcon from "@/assets/icons/fullscreen.exit.svg"; +import useUploadFile from "@/hooks/useUploadFile"; import { useTranslation } from "react-i18next"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; type Props = { sendMessages: () => void; diff --git a/src/common/component/Send/UploadFileList/EditFileDetails.tsx b/src/components/Send/UploadFileList/EditFileDetails.tsx similarity index 96% rename from src/common/component/Send/UploadFileList/EditFileDetails.tsx rename to src/components/Send/UploadFileList/EditFileDetails.tsx index be53a34f..5e1b4a12 100644 --- a/src/common/component/Send/UploadFileList/EditFileDetails.tsx +++ b/src/components/Send/UploadFileList/EditFileDetails.tsx @@ -2,7 +2,7 @@ import { ChangeEvent, useState } from "react"; import Modal from "../../Modal"; import Button from "../../styled/Button"; import Input from "../../styled/Input"; -import CloseIcon from "../../../../assets/icons/close.svg"; +import CloseIcon from "@/assets/icons/close.svg"; export default function EditFileDetails({ diff --git a/src/common/component/Send/UploadFileList/index.tsx b/src/components/Send/UploadFileList/index.tsx similarity index 87% rename from src/common/component/Send/UploadFileList/index.tsx rename to src/components/Send/UploadFileList/index.tsx index 57392b5e..8aca2df3 100644 --- a/src/common/component/Send/UploadFileList/index.tsx +++ b/src/components/Send/UploadFileList/index.tsx @@ -1,11 +1,11 @@ import { useState, useEffect } from "react"; import { useMixedEditor } from "../../MixedInput"; import EditFileDetailsModal from "./EditFileDetails"; -import { getFileIcon, formatBytes } from "../../../utils"; -import useUploadFile from "../../../hook/useUploadFile"; -import EditIcon from "../../../../assets/icons/edit.svg"; -import DeleteIcon from "../../../../assets/icons/delete.svg"; -import { ChatContext } from "../../../../types/common"; +import { getFileIcon, formatBytes } from "@/utils"; +import useUploadFile from "@/hooks/useUploadFile"; +import EditIcon from "@/assets/icons/edit.svg"; +import DeleteIcon from "@/assets/icons/delete.svg"; +import { ChatContext } from "@/types/common"; type EditProps = { index: number; @@ -18,7 +18,7 @@ export default function UploadFileList({ context: ChatContext; id: number; }) { - const eidtor = useMixedEditor(`${context}_${id}`); + const editor = useMixedEditor(`${context}_${id}`); const [editInfo, setEditInfo] = useState(null); const { stageFiles, updateStageFile, removeStageFile } = useUploadFile({ context, @@ -39,7 +39,7 @@ export default function UploadFileList({ updateStageFile(index, { name }); }; useEffect(() => { - eidtor.focus(); + editor.focus(); }, [stageFiles.length]); if (!context || !id || !stageFiles || stageFiles.length == 0) return null; diff --git a/src/common/component/Send/index.tsx b/src/components/Send/index.tsx similarity index 92% rename from src/common/component/Send/index.tsx rename to src/components/Send/index.tsx index edece454..f6cdc857 100644 --- a/src/common/component/Send/index.tsx +++ b/src/components/Send/index.tsx @@ -1,10 +1,10 @@ import { useEffect, useState, FC } from "react"; import clsx from "clsx"; import { useTranslation } from "react-i18next"; -import useSendMessage from "../../hook/useSendMessage"; -import useAddLocalFileMessage from "../../hook/useAddLocalFileMessage"; -import { updateInputMode } from "../../../app/slices/ui"; -import { ContentTypes, ChatPrefixes } from "../../../app/config"; +import useSendMessage from "@/hooks/useSendMessage"; +import useAddLocalFileMessage from "@/hooks/useAddLocalFileMessage"; +import { updateInputMode } from "@/app/slices/ui"; +import { ContentTypes, ChatPrefixes } from "@/app/config"; // import StyledSend from "./styled"; import UploadFileList from "./UploadFileList"; @@ -14,13 +14,13 @@ import EmojiPicker from "./EmojiPicker"; import MarkdownEditor from "../MarkdownEditor"; import MixedInput, { useMixedEditor } from "../MixedInput"; -import useDraft from "../../hook/useDraft"; -import useUploadFile from "../../hook/useUploadFile"; -import { useAppDispatch, useAppSelector } from "../../../app/store"; +import useDraft from "@/hooks/useDraft"; +import useUploadFile from "@/hooks/useUploadFile"; +import { useAppDispatch, useAppSelector } from "@/app/store"; import TextInput from "../TextInput"; -import useUserOperation from "../../hook/useUserOperation"; +import useUserOperation from "@/hooks/useUserOperation"; import StyledButton from "../styled/Button"; -import { ChatContext } from "../../../types/common"; +import { ChatContext } from "@/types/common"; const Modes = { text: "text", diff --git a/src/common/component/Server.tsx b/src/components/Server.tsx similarity index 95% rename from src/common/component/Server.tsx rename to src/components/Server.tsx index 5663af42..1f15e855 100644 --- a/src/common/component/Server.tsx +++ b/src/components/Server.tsx @@ -1,9 +1,9 @@ import { NavLink, useLocation } from "react-router-dom"; import Tippy from "@tippyjs/react"; -import IconAdd from "../../assets/icons/add.svg"; +import IconAdd from "@/assets/icons/add.svg"; import Tooltip from "./Tooltip"; import AddEntriesMenu from "./AddEntriesMenu"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; type Props = { diff --git a/src/common/component/ServerVersionChecker.tsx b/src/components/ServerVersionChecker.tsx similarity index 96% rename from src/common/component/ServerVersionChecker.tsx rename to src/components/ServerVersionChecker.tsx index 323267c1..4bf984d8 100644 --- a/src/common/component/ServerVersionChecker.tsx +++ b/src/components/ServerVersionChecker.tsx @@ -1,7 +1,7 @@ import { ReactElement } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { compareVersion } from '../utils'; -import { useAppSelector } from '../../app/store'; +import { useAppSelector } from '../app/store'; type Props = { empty?: boolean, diff --git a/src/common/component/Signal.tsx b/src/components/Signal.tsx similarity index 100% rename from src/common/component/Signal.tsx rename to src/components/Signal.tsx diff --git a/src/common/component/StyledSettingContainer.tsx b/src/components/StyledSettingContainer.tsx similarity index 95% rename from src/common/component/StyledSettingContainer.tsx rename to src/components/StyledSettingContainer.tsx index 229b0a15..7125b971 100644 --- a/src/common/component/StyledSettingContainer.tsx +++ b/src/components/StyledSettingContainer.tsx @@ -1,10 +1,10 @@ import { FC, PropsWithChildren, ReactNode } from "react"; import { NavLink } from "react-router-dom"; -import IconBack from "../../assets/icons/arrow.left.svg"; -import { Nav } from "../../routes/settingChannel/navs"; +import IconBack from "@/assets/icons/arrow.left.svg"; +import { Nav } from "../routes/settingChannel/navs"; import clsx from "clsx"; import GoBackNav from "./GoBackNav"; -import MobileNavs from "../../routes/home/MobileNavs"; +import MobileNavs from "../routes/home/MobileNavs"; // import ErrorCatcher from "./ErrorCatcher"; export interface Danger { title: string; diff --git a/src/common/component/TextInput/index.tsx b/src/components/TextInput/index.tsx similarity index 100% rename from src/common/component/TextInput/index.tsx rename to src/components/TextInput/index.tsx diff --git a/src/common/component/Tooltip.tsx b/src/components/Tooltip.tsx similarity index 100% rename from src/common/component/Tooltip.tsx rename to src/components/Tooltip.tsx diff --git a/src/common/component/UnreadTabTip.tsx b/src/components/UnreadTabTip.tsx similarity index 95% rename from src/common/component/UnreadTabTip.tsx rename to src/components/UnreadTabTip.tsx index 1af12aee..284417cd 100644 --- a/src/common/component/UnreadTabTip.tsx +++ b/src/components/UnreadTabTip.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react'; -import { useAppSelector } from '../../app/store'; -import getUnreadCount from '../../routes/chat/utils'; +import { useAppSelector } from '../app/store'; +import getUnreadCount from '../routes/chat/utils'; // type Props = {} let total = 0; diff --git a/src/common/component/User/ContextMenu.tsx b/src/components/User/ContextMenu.tsx similarity index 97% rename from src/common/component/User/ContextMenu.tsx rename to src/components/User/ContextMenu.tsx index 874b1bfe..6d0c4afe 100644 --- a/src/common/component/User/ContextMenu.tsx +++ b/src/components/User/ContextMenu.tsx @@ -1,6 +1,6 @@ import { FC, ReactElement } from "react"; import Tippy from "@tippyjs/react"; -import useUserOperation from "../../hook/useUserOperation"; +import useUserOperation from "@/hooks/useUserOperation"; import ContextMenu, { Item } from "../ContextMenu"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/User/index.tsx b/src/components/User/index.tsx similarity index 95% rename from src/common/component/User/index.tsx rename to src/components/User/index.tsx index 91632443..47ffd6ad 100644 --- a/src/common/component/User/index.tsx +++ b/src/components/User/index.tsx @@ -1,13 +1,13 @@ import { FC, memo } from "react"; import { useNavigate } from "react-router-dom"; import Tippy from "@tippyjs/react"; -import IconOwner from "../../../assets/icons/owner.svg"; -import IconBot from "../../../assets/icons/bot.svg"; +import IconOwner from "@/assets/icons/owner.svg"; +import IconBot from "@/assets/icons/bot.svg"; import Avatar from "../Avatar"; import Profile from "../Profile"; import ContextMenu from "./ContextMenu"; -import useContextMenu from "../../hook/useContextMenu"; -import { useAppSelector } from "../../../app/store"; +import useContextMenu from "@/hooks/useContextMenu"; +import { useAppSelector } from "@/app/store"; import clsx from "clsx"; interface Props { diff --git a/src/common/component/UsersModal.tsx b/src/components/UsersModal.tsx similarity index 96% rename from src/common/component/UsersModal.tsx rename to src/components/UsersModal.tsx index cca24611..edd94a3b 100644 --- a/src/common/component/UsersModal.tsx +++ b/src/components/UsersModal.tsx @@ -1,7 +1,7 @@ import { ChangeEvent, useRef, FC } from "react"; import { NavLink } from "react-router-dom"; import { useOutsideClick } from "rooks"; -import useFilteredUsers from "../hook/useFilteredUsers"; +import useFilteredUsers from "@/hooks/useFilteredUsers"; import User from "./User"; import Modal from "./Modal"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/Version.tsx b/src/components/Version.tsx similarity index 90% rename from src/common/component/Version.tsx rename to src/components/Version.tsx index f9b0792d..f3dafb8f 100644 --- a/src/common/component/Version.tsx +++ b/src/components/Version.tsx @@ -3,8 +3,8 @@ import { FC, useState } from "react"; import { useTranslation } from "react-i18next"; import { Ring } from "@uiball/loaders"; import Button from "./styled/Button"; -import { unregister } from '../../serviceWorkerRegistration'; -import { useAppSelector } from "../../app/store"; +import { unregister } from '../serviceWorkerRegistration'; +import { useAppSelector } from "@/app/store"; type Props = {}; const Version: FC = () => { const serverVersion = useAppSelector(store => store.server.version); diff --git a/src/common/component/Voice/DMCalling.tsx b/src/components/Voice/DMCalling.tsx similarity index 94% rename from src/common/component/Voice/DMCalling.tsx rename to src/components/Voice/DMCalling.tsx index be6548f6..479d95c7 100644 --- a/src/common/component/Voice/DMCalling.tsx +++ b/src/components/Voice/DMCalling.tsx @@ -5,12 +5,12 @@ import clsx from 'clsx'; import { Waveform } from '@uiball/loaders'; import { useDispatch } from 'react-redux'; import { motion } from 'framer-motion'; -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 { useAppSelector } from '../../app/store'; +import Tooltip from "../Tooltip"; +import IconCallOff from '@/assets/icons/call.off.svg'; +import IconCallAnswer from '@/assets/icons/call.svg'; import Avatar from '../Avatar'; -import { updateCalling } from '../../../app/slices/voice'; +import { updateCalling } from '../../app/slices/voice'; import useVoice from './useVoice'; import { playAgoraVideo } from '../../utils'; import { useLocation, useNavigate } from 'react-router-dom'; diff --git a/src/common/component/Voice/index.tsx b/src/components/Voice/index.tsx similarity index 98% rename from src/common/component/Voice/index.tsx rename to src/components/Voice/index.tsx index efdea95c..0323bc69 100644 --- a/src/common/component/Voice/index.tsx +++ b/src/components/Voice/index.tsx @@ -1,9 +1,9 @@ import AgoraRTC from 'agora-rtc-sdk-ng'; import { memo, useEffect } from 'react'; import { useDispatch } from 'react-redux'; -import { useGetAgoraChannelsQuery, useGetAgoraStatusQuery, useLazyGetAgoraUsersByChannelQuery } from '../../../app/services/server'; -import { addVoiceMember, removeVoiceMember, updateCalling, updateConnectionState, updateVoicingMember, updateVoicingNetworkQuality } from '../../../app/slices/voice'; -import { useAppSelector } from '../../../app/store'; +import { useGetAgoraChannelsQuery, useGetAgoraStatusQuery, useLazyGetAgoraUsersByChannelQuery } from '../../app/services/server'; +import { addVoiceMember, removeVoiceMember, updateCalling, updateConnectionState, updateVoicingMember, updateVoicingNetworkQuality } from '../../app/slices/voice'; +import { useAppSelector } from '../../app/store'; import { playAgoraVideo } from '../../utils'; import useVoice from './useVoice'; import DMCalling from './DMCalling'; diff --git a/src/common/component/Voice/useVoice.ts b/src/components/Voice/useVoice.ts similarity index 96% rename from src/common/component/Voice/useVoice.ts rename to src/components/Voice/useVoice.ts index 17971549..5da74cd2 100644 --- a/src/common/component/Voice/useVoice.ts +++ b/src/components/Voice/useVoice.ts @@ -1,15 +1,15 @@ import AgoraRTC, { ICameraVideoTrack, IMicrophoneAudioTrack } from 'agora-rtc-sdk-ng'; -import { ShareScreenTrack } from '../../../types/global'; -import AudioJoin from '../../../assets/join.wav'; +import { ShareScreenTrack } from '../../types/global'; +import AudioJoin from '@/assets/join.wav'; import { useDispatch } from 'react-redux'; -import { useGenerateAgoraTokenMutation } from '../../../app/services/server'; -import { updateChannelVisibleAside, updateDMVisibleAside } from '../../../app/slices/footprint'; +import { useGenerateAgoraTokenMutation } from '../../app/services/server'; +import { updateChannelVisibleAside, updateDMVisibleAside } from '../../app/slices/footprint'; -import { addVoiceMember, updatePin, updateVoicingInfo, upsertVoiceList } from '../../../app/slices/voice'; -import { useAppSelector } from '../../../app/store'; +import { addVoiceMember, updatePin, updateVoicingInfo, upsertVoiceList } from '../../app/slices/voice'; +import { useAppSelector } from '../../app/store'; import { playAgoraVideo } from '../../utils'; -import { ChatContext } from '../../../types/common'; +import { ChatContext } from '../../types/common'; type VoiceProps = { diff --git a/src/common/component/VoiceMessage.tsx b/src/components/VoiceMessage.tsx similarity index 95% rename from src/common/component/VoiceMessage.tsx rename to src/components/VoiceMessage.tsx index d55442c2..06265229 100644 --- a/src/common/component/VoiceMessage.tsx +++ b/src/components/VoiceMessage.tsx @@ -2,10 +2,10 @@ import { useEffect, useRef, useState } from 'react'; import dayjs from 'dayjs'; import clsx from 'clsx'; import WaveSurfer from 'wavesurfer.js'; -import IconPause from '../../assets/icons/pause.svg'; -import IconRefresh from '../../assets/icons/refresh.svg'; -import IconPlay from '../../assets/icons/play.circle.svg'; -import BASE_URL from '../../app/config'; +import IconPause from '@/assets/icons/pause.svg'; +import IconRefresh from '@/assets/icons/refresh.svg'; +import IconPlay from '@/assets/icons/play.circle.svg'; +import BASE_URL from '../app/config'; export type VoiceMessageProps = { type: string, diff --git a/src/components/readme.md b/src/components/readme.md new file mode 100644 index 00000000..fc6ab367 --- /dev/null +++ b/src/components/readme.md @@ -0,0 +1 @@ +# shared components used across the entire application diff --git a/src/common/component/styled/Button.tsx b/src/components/styled/Button.tsx similarity index 100% rename from src/common/component/styled/Button.tsx rename to src/components/styled/Button.tsx diff --git a/src/common/component/styled/Checkbox.tsx b/src/components/styled/Checkbox.tsx similarity index 100% rename from src/common/component/styled/Checkbox.tsx rename to src/components/styled/Checkbox.tsx diff --git a/src/common/component/styled/Input.tsx b/src/components/styled/Input.tsx similarity index 95% rename from src/common/component/styled/Input.tsx rename to src/components/styled/Input.tsx index 3453cf4d..2216ef69 100644 --- a/src/common/component/styled/Input.tsx +++ b/src/components/styled/Input.tsx @@ -1,7 +1,7 @@ import clsx from "clsx"; import { useState, FC, DetailedHTMLProps, InputHTMLAttributes, ReactElement } from "react"; -import IconEyeOpen from "../../../assets/icons/eye.open.svg"; -import IconEyeClose from "../../../assets/icons/eye.close.svg"; +import IconEyeOpen from "@/assets/icons/eye.open.svg"; +import IconEyeClose from "@/assets/icons/eye.close.svg"; interface Props extends DetailedHTMLProps< Pick< diff --git a/src/common/component/styled/Label.tsx b/src/components/styled/Label.tsx similarity index 100% rename from src/common/component/styled/Label.tsx rename to src/components/styled/Label.tsx diff --git a/src/common/component/styled/Modal.tsx b/src/components/styled/Modal.tsx similarity index 100% rename from src/common/component/styled/Modal.tsx rename to src/components/styled/Modal.tsx diff --git a/src/common/component/styled/Radio.tsx b/src/components/styled/Radio.tsx similarity index 100% rename from src/common/component/styled/Radio.tsx rename to src/components/styled/Radio.tsx diff --git a/src/common/component/styled/Select.tsx b/src/components/styled/Select.tsx similarity index 93% rename from src/common/component/styled/Select.tsx rename to src/components/styled/Select.tsx index c95b0f94..be057ca2 100644 --- a/src/common/component/styled/Select.tsx +++ b/src/components/styled/Select.tsx @@ -1,7 +1,7 @@ import { FC, useState } from "react"; import Tippy from "@tippyjs/react"; -import IconSelect from "../../../assets/icons/check.sign.svg"; -import IconArrow from "../../../assets/icons/arrow.down.svg"; +import IconSelect from "@/assets/icons/check.sign.svg"; +import IconArrow from "@/assets/icons/arrow.down.svg"; import { useTranslation } from "react-i18next"; diff --git a/src/common/component/styled/Textarea.tsx b/src/components/styled/Textarea.tsx similarity index 100% rename from src/common/component/styled/Textarea.tsx rename to src/components/styled/Textarea.tsx diff --git a/src/common/component/styled/Toggle.tsx b/src/components/styled/Toggle.tsx similarity index 100% rename from src/common/component/styled/Toggle.tsx rename to src/components/styled/Toggle.tsx diff --git a/src/hooks/readme.md b/src/hooks/readme.md new file mode 100644 index 00000000..93ec3846 --- /dev/null +++ b/src/hooks/readme.md @@ -0,0 +1 @@ +# shared hooks used across the entire application diff --git a/src/common/hook/useAddLocalFileMessage.ts b/src/hooks/useAddLocalFileMessage.ts similarity index 67% rename from src/common/hook/useAddLocalFileMessage.ts rename to src/hooks/useAddLocalFileMessage.ts index 839cd502..9bd94f61 100644 --- a/src/common/hook/useAddLocalFileMessage.ts +++ b/src/hooks/useAddLocalFileMessage.ts @@ -1,9 +1,9 @@ // import React from 'react' import { useDispatch } from "react-redux"; -import { addMessage, MessagePayload } from "../../app/slices/message"; -import { addChannelMsg } from "../../app/slices/message.channel"; -import { addUserMsg } from "../../app/slices/message.user"; -import { ChatContext } from "../../types/common"; +import { addMessage, MessagePayload } from "@/app/slices/message"; +import { addChannelMsg } from "@/app/slices/message.channel"; +import { addUserMsg } from "@/app/slices/message.user"; +import { ChatContext } from "@/types/common"; interface IProps { context: ChatContext; diff --git a/src/common/hook/useChatScroll.ts b/src/hooks/useChatScroll.ts similarity index 100% rename from src/common/hook/useChatScroll.ts rename to src/hooks/useChatScroll.ts diff --git a/src/common/hook/useConfig.ts b/src/hooks/useConfig.ts similarity index 98% rename from src/common/hook/useConfig.ts rename to src/hooks/useConfig.ts index 885badd6..c8e3da64 100644 --- a/src/common/hook/useConfig.ts +++ b/src/hooks/useConfig.ts @@ -10,8 +10,8 @@ import { useLazyGetAgoraConfigQuery, useLazyGetSMTPConfigQuery, useLazyGetLoginConfigQuery -} from "../../app/services/server"; -import { AgoraConfig, FirebaseConfig, LoginConfig, SMTPConfig } from "../../types/server"; +} from "@/app/services/server"; +import { AgoraConfig, FirebaseConfig, LoginConfig, SMTPConfig } from "@/types/server"; import { useTranslation } from "react-i18next"; // config: smtp agora login firebase type ConfigType = "smtp" | "agora" | "login" | "firebase"; diff --git a/src/common/hook/useContextMenu.tsx b/src/hooks/useContextMenu.tsx similarity index 96% rename from src/common/hook/useContextMenu.tsx rename to src/hooks/useContextMenu.tsx index a15e946b..b8bc03ed 100644 --- a/src/common/hook/useContextMenu.tsx +++ b/src/hooks/useContextMenu.tsx @@ -1,7 +1,7 @@ import { useState, MouseEvent, ReactElement } from "react"; import { hideAll } from "tippy.js"; import Tippy from "@tippyjs/react"; -import Menu, { Item } from "../component/ContextMenu"; +import Menu, { Item } from "@/components/ContextMenu"; interface ContextMenuProps { key: string | number; diff --git a/src/common/hook/useCopy.ts b/src/hooks/useCopy.ts similarity index 100% rename from src/common/hook/useCopy.ts rename to src/hooks/useCopy.ts diff --git a/src/common/hook/useDeleteMessage.ts b/src/hooks/useDeleteMessage.ts similarity index 89% rename from src/common/hook/useDeleteMessage.ts rename to src/hooks/useDeleteMessage.ts index 9a469467..22e8966c 100644 --- a/src/common/hook/useDeleteMessage.ts +++ b/src/hooks/useDeleteMessage.ts @@ -1,6 +1,6 @@ import { useState } from "react"; -import { useLazyDeleteMessageQuery } from "../../app/services/message"; -import { useAppSelector } from "../../app/store"; +import { useLazyDeleteMessageQuery } from "@/app/services/message"; +import { useAppSelector } from "@/app/store"; export default function useDeleteMessage() { const [deleting, setDeleting] = useState(false); diff --git a/src/common/hook/useDraft.ts b/src/hooks/useDraft.ts similarity index 79% rename from src/common/hook/useDraft.ts rename to src/hooks/useDraft.ts index 49abbf88..6120ceb1 100644 --- a/src/common/hook/useDraft.ts +++ b/src/hooks/useDraft.ts @@ -1,6 +1,6 @@ -import { updateDraftMarkdown, updateDraftMixedText } from "../../app/slices/ui"; -import { useAppDispatch, useAppSelector } from "../../app/store"; -import { ChatContext } from "../../types/common"; +import { updateDraftMarkdown, updateDraftMixedText } from "@/app/slices/ui"; +import { useAppDispatch, useAppSelector } from "@/app/store"; +import { ChatContext } from "@/types/common"; const useDraft = ({ context = "dm", id = 0 }: { context: ChatContext; id: number }) => { const dispatch = useAppDispatch(); diff --git a/src/common/hook/useFavMessage.ts b/src/hooks/useFavMessage.ts similarity index 80% rename from src/common/hook/useFavMessage.ts rename to src/hooks/useFavMessage.ts index b26e9455..b7e0fd8d 100644 --- a/src/common/hook/useFavMessage.ts +++ b/src/hooks/useFavMessage.ts @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; -import { useLazyRemoveFavoriteQuery, useFavoriteMessageMutation } from "../../app/services/message"; -import { Favorite } from "../../app/slices/favorites"; -import { useAppSelector } from "../../app/store"; +import { useLazyRemoveFavoriteQuery, useFavoriteMessageMutation } from "@/app/services/message"; +import { Favorite } from "@/app/slices/favorites"; +import { useAppSelector } from "@/app/store"; export default function useFavMessage({ cid = null, @@ -46,15 +46,15 @@ export default function useFavMessage({ let filtereds: Favorite[] = []; filtereds = cid ? favs.filter((f) => { - if (!f.messages) return false; - return f.messages.every((m) => m.source.gid == cid); - }) + if (!f.messages) return false; + return f.messages.every((m) => m.source.gid == cid); + }) : favs; filtereds = uid ? filtereds.filter((f) => { - if (!f.messages) return false; - return f.messages.every((m) => m.source.uid == uid); - }) + if (!f.messages) return false; + return f.messages.every((m) => m.source.uid == uid); + }) : filtereds; setFavorites(filtereds); diff --git a/src/common/hook/useFilteredChannels.ts b/src/hooks/useFilteredChannels.ts similarity index 89% rename from src/common/hook/useFilteredChannels.ts rename to src/hooks/useFilteredChannels.ts index 446f11d0..0cf3fa8b 100644 --- a/src/common/hook/useFilteredChannels.ts +++ b/src/hooks/useFilteredChannels.ts @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; -import { useAppSelector } from "../../app/store"; -import { Channel } from "../../types/channel"; +import { useAppSelector } from "@/app/store"; +import { Channel } from "@/types/channel"; export default function useFilteredChannels() { const [input, setInput] = useState(""); diff --git a/src/common/hook/useFilteredUsers.ts b/src/hooks/useFilteredUsers.ts similarity index 90% rename from src/common/hook/useFilteredUsers.ts rename to src/hooks/useFilteredUsers.ts index 4ccc06d5..7acab568 100644 --- a/src/common/hook/useFilteredUsers.ts +++ b/src/hooks/useFilteredUsers.ts @@ -1,6 +1,6 @@ import { useState, useEffect } from "react"; -import { StoredUser } from "../../app/slices/users"; -import { useAppSelector } from "../../app/store"; +import { StoredUser } from "@/app/slices/users"; +import { useAppSelector } from "@/app/store"; export default function useFilteredUsers() { const [input, setInput] = useState(""); diff --git a/src/common/hook/useForwardMessage.ts b/src/hooks/useForwardMessage.ts similarity index 88% rename from src/common/hook/useForwardMessage.ts rename to src/hooks/useForwardMessage.ts index 53ac9ca8..bcb1ed00 100644 --- a/src/common/hook/useForwardMessage.ts +++ b/src/hooks/useForwardMessage.ts @@ -1,7 +1,7 @@ import { useState } from "react"; -import { useSendChannelMsgMutation } from "../../app/services/channel"; -import { useSendMsgMutation } from "../../app/services/user"; -import { useCreateArchiveMutation } from "../../app/services/message"; +import { useSendChannelMsgMutation } from "@/app/services/channel"; +import { useSendMsgMutation } from "@/app/services/user"; +import { useCreateArchiveMutation } from "@/app/services/message"; export default function useForwardMessage() { const [forwarding, setForwarding] = useState(false); diff --git a/src/common/hook/useGithubAuthConfig.ts b/src/hooks/useGithubAuthConfig.ts similarity index 92% rename from src/common/hook/useGithubAuthConfig.ts rename to src/hooks/useGithubAuthConfig.ts index fc4f0656..00e542db 100644 --- a/src/common/hook/useGithubAuthConfig.ts +++ b/src/hooks/useGithubAuthConfig.ts @@ -2,8 +2,8 @@ import { useState, useEffect } from "react"; import { useGetGithubAuthConfigQuery, useUpdateGithubAuthConfigMutation -} from "../../app/services/server"; -import { GithubAuthConfig } from "../../types/server"; +} from "@/app/services/server"; +import { GithubAuthConfig } from "@/types/server"; export default function useGithubAuthConfig() { const [changed, setChanged] = useState(false); diff --git a/src/common/hook/useGoogleAuthConfig.ts b/src/hooks/useGoogleAuthConfig.ts similarity index 96% rename from src/common/hook/useGoogleAuthConfig.ts rename to src/hooks/useGoogleAuthConfig.ts index be683745..78897a49 100644 --- a/src/common/hook/useGoogleAuthConfig.ts +++ b/src/hooks/useGoogleAuthConfig.ts @@ -2,7 +2,7 @@ import { useState, useEffect } from "react"; import { useGetGoogleAuthConfigQuery, useUpdateGoogleAuthConfigMutation -} from "../../app/services/server"; +} from "@/app/services/server"; export default function useGoogleAuthConfig() { const [changed, setChanged] = useState(false); diff --git a/src/common/hook/useInviteLink.ts b/src/hooks/useInviteLink.ts similarity index 88% rename from src/common/hook/useInviteLink.ts rename to src/hooks/useInviteLink.ts index 542bf23a..3ca4cfd2 100644 --- a/src/common/hook/useInviteLink.ts +++ b/src/hooks/useInviteLink.ts @@ -1,8 +1,8 @@ import { useState, useEffect } from "react"; import useCopy from "./useCopy"; -import { useGetSMTPStatusQuery } from "../../app/services/server"; -import { useLazyCreateInviteLinkQuery as useCreateChannelInviteLinkQuery, useLazyCreatePrivateInviteLinkQuery } from "../../app/services/channel"; -import { useAppSelector } from "../../app/store"; +import { useGetSMTPStatusQuery } from "@/app/services/server"; +import { useLazyCreateInviteLinkQuery as useCreateChannelInviteLinkQuery, useLazyCreatePrivateInviteLinkQuery } from "@/app/services/channel"; +import { useAppSelector } from "@/app/store"; export default function useInviteLink(cid?: number) { const [finalLink, setFinalLink] = useState(""); diff --git a/src/common/hook/useLeaveChannel.ts b/src/hooks/useLeaveChannel.ts similarity index 91% rename from src/common/hook/useLeaveChannel.ts rename to src/hooks/useLeaveChannel.ts index dea53d22..69f841dc 100644 --- a/src/common/hook/useLeaveChannel.ts +++ b/src/hooks/useLeaveChannel.ts @@ -1,5 +1,5 @@ -import { useUpdateChannelMutation, useLazyLeaveChannelQuery } from "../../app/services/channel"; -import { useAppSelector } from "../../app/store"; +import { useUpdateChannelMutation, useLazyLeaveChannelQuery } from "@/app/services/channel"; +import { useAppSelector } from "@/app/store"; export default function useLeaveChannel(cid: number) { const { channel, loginUid } = useAppSelector((store) => { diff --git a/src/common/hook/useLicense.ts b/src/hooks/useLicense.ts similarity index 94% rename from src/common/hook/useLicense.ts rename to src/hooks/useLicense.ts index a88a7353..89dfdb99 100644 --- a/src/common/hook/useLicense.ts +++ b/src/hooks/useLicense.ts @@ -3,8 +3,8 @@ import { useCheckLicenseMutation, useGetLicenseQuery, useUpsertLicenseMutation -} from "../../app/services/server"; -import { useAppSelector } from "../../app/store"; +} from "@/app/services/server"; +import { useAppSelector } from "@/app/store"; // type Props = { // refetchOnMountOrArgChange?: boolean // } | undefined diff --git a/src/hooks/useLogout.ts b/src/hooks/useLogout.ts new file mode 100644 index 00000000..5f377ead --- /dev/null +++ b/src/hooks/useLogout.ts @@ -0,0 +1,26 @@ +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 }; +} diff --git a/src/common/hook/useNormalizeMessage.ts b/src/hooks/useNormalizeMessage.ts similarity index 81% rename from src/common/hook/useNormalizeMessage.ts rename to src/hooks/useNormalizeMessage.ts index 7577c552..fdf0c0a5 100644 --- a/src/common/hook/useNormalizeMessage.ts +++ b/src/hooks/useNormalizeMessage.ts @@ -1,8 +1,8 @@ import { useState, useEffect } from "react"; import { normalizeArchiveData } from "../utils"; -import { useLazyGetArchiveMessageQuery } from "../../app/services/message"; -import { ArchiveMessage } from "../../types/resource"; -import { useAppSelector } from "../../app/store"; +import { useLazyGetArchiveMessageQuery } from "@/app/services/message"; +import { ArchiveMessage } from "@/types/resource"; +import { useAppSelector } from "@/app/store"; export default function useNormalizeMessage(filePath: string | null) { const archiveData = useAppSelector(store => store.archiveMessage[filePath ?? ""]); diff --git a/src/common/hook/usePWAInstallPrompt.ts b/src/hooks/usePWAInstallPrompt.ts similarity index 93% rename from src/common/hook/usePWAInstallPrompt.ts rename to src/hooks/usePWAInstallPrompt.ts index 042e597a..8adf1a8b 100644 --- a/src/common/hook/usePWAInstallPrompt.ts +++ b/src/hooks/usePWAInstallPrompt.ts @@ -1,6 +1,6 @@ import { useRef, useEffect } from "react"; -import { KEY_PWA_INSTALLED } from "../../app/config"; -import { BeforeInstallPromptEvent } from "../../types/global"; +import { KEY_PWA_INSTALLED } from "@/app/config"; +import { BeforeInstallPromptEvent } from "@/types/global"; export default function usePWAInstallPrompt() { const deferredPromptRef = useRef(null); diff --git a/src/common/hook/usePinMessage.ts b/src/hooks/usePinMessage.ts similarity index 91% rename from src/common/hook/usePinMessage.ts rename to src/hooks/usePinMessage.ts index ab2f4869..0c058bdd 100644 --- a/src/common/hook/usePinMessage.ts +++ b/src/hooks/usePinMessage.ts @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; -import { usePinMessageMutation, useUnpinMessageMutation } from "../../app/services/message"; -import { useAppSelector } from "../../app/store"; -import { PinnedMessage } from "../../types/channel"; +import { usePinMessageMutation, useUnpinMessageMutation } from "@/app/services/message"; +import { useAppSelector } from "@/app/store"; +import { PinnedMessage } from "@/types/channel"; export default function usePinMessage(cid: number) { const [pins, setPins] = useState([]); diff --git a/src/common/hook/usePreload.ts b/src/hooks/usePreload.ts similarity index 90% rename from src/common/hook/usePreload.ts rename to src/hooks/usePreload.ts index 527d1428..6dcf8394 100644 --- a/src/common/hook/usePreload.ts +++ b/src/hooks/usePreload.ts @@ -1,12 +1,12 @@ import { useEffect } from "react"; import dayjs from "dayjs"; -import initCache, { useRehydrate } from "../../app/cache"; -import { useLazyGetFavoritesQuery } from "../../app/services/message"; -import { useLazyGetContactsQuery, useLazyGetUsersQuery } from "../../app/services/user"; -import { useLazyGetSystemCommonQuery, useLazyGetServerQuery, useLazyGetServerVersionQuery } from "../../app/services/server"; +import initCache, { useRehydrate } from "@/app/cache"; +import { useLazyGetFavoritesQuery } from "@/app/services/message"; +import { useLazyGetContactsQuery, useLazyGetUsersQuery } from "@/app/services/user"; +import { useLazyGetSystemCommonQuery, useLazyGetServerQuery, useLazyGetServerVersionQuery } from "@/app/services/server"; import useStreaming from "./useStreaming"; -import { useAppSelector } from "../../app/store"; -import { useLazyLoadMoreMessagesQuery } from "../../app/services/message"; +import { useAppSelector } from "@/app/store"; +import { useLazyLoadMoreMessagesQuery } from "@/app/services/message"; import useLicense from "./useLicense"; import { compareVersion } from "../utils"; // type Props={ diff --git a/src/common/hook/useRemoveLocalMessage.ts b/src/hooks/useRemoveLocalMessage.ts similarity index 58% rename from src/common/hook/useRemoveLocalMessage.ts rename to src/hooks/useRemoveLocalMessage.ts index c2083073..060a05dc 100644 --- a/src/common/hook/useRemoveLocalMessage.ts +++ b/src/hooks/useRemoveLocalMessage.ts @@ -1,8 +1,8 @@ -import { removeMessage } from "../../app/slices/message"; -import { removeChannelMsg } from "../../app/slices/message.channel"; -import { removeUserMsg } from "../../app/slices/message.user"; -import { useAppDispatch } from "../../app/store"; -import { ChatContext } from "../../types/common"; +import { removeMessage } from "@/app/slices/message"; +import { removeChannelMsg } from "@/app/slices/message.channel"; +import { removeUserMsg } from "@/app/slices/message.user"; +import { useAppDispatch } from "@/app/store"; +import { ChatContext } from "@/types/common"; // todo: check usage interface Props { diff --git a/src/common/hook/useSendMessage.ts b/src/hooks/useSendMessage.ts similarity index 86% rename from src/common/hook/useSendMessage.ts rename to src/hooks/useSendMessage.ts index 01c0e8a2..fa9f64f8 100644 --- a/src/common/hook/useSendMessage.ts +++ b/src/hooks/useSendMessage.ts @@ -1,11 +1,11 @@ import toast from "react-hot-toast"; -import { removeReplyingMessage, addReplyingMessage, MessagePayload } from "../../app/slices/message"; -import { useSendChannelMsgMutation } from "../../app/services/channel"; -import { useSendMsgMutation } from "../../app/services/user"; -import { useReplyMessageMutation } from "../../app/services/message"; -import { useAppDispatch, useAppSelector } from "../../app/store"; -import { ContentTypeKey } from "../../types/message"; -import { ChatContext } from "../../types/common"; +import { removeReplyingMessage, addReplyingMessage, MessagePayload } from "@/app/slices/message"; +import { useSendChannelMsgMutation } from "@/app/services/channel"; +import { useSendMsgMutation } from "@/app/services/user"; +import { useReplyMessageMutation } from "@/app/services/message"; +import { useAppDispatch, useAppSelector } from "@/app/store"; +import { ContentTypeKey } from "@/types/message"; +import { ChatContext } from "@/types/common"; interface Props { context: ChatContext; diff --git a/src/common/hook/useStreaming/chat.handler.ts b/src/hooks/useStreaming/chat.handler.ts similarity index 86% rename from src/common/hook/useStreaming/chat.handler.ts rename to src/hooks/useStreaming/chat.handler.ts index 060f7978..d2c42c3b 100644 --- a/src/common/hook/useStreaming/chat.handler.ts +++ b/src/hooks/useStreaming/chat.handler.ts @@ -1,13 +1,13 @@ import { batch } from "react-redux"; -import { addChannelMsg, removeChannelMsg } from "../../../app/slices/message.channel"; -import { addMessage, removeMessage, updateMessage } from "../../../app/slices/message"; -import { toggleReactionMessage } from "../../../app/slices/message.reaction"; -import { addFileMessage, removeFileMessage } from "../../../app/slices/message.file"; -import { addUserMsg, removeUserMsg } from "../../../app/slices/message.user"; -import { updateAfterMid } from "../../../app/slices/footprint"; -import { ContentTypes } from "../../../app/config"; -import { ChatEvent } from "../../../types/sse"; -import { AppDispatch } from "../../../app/store"; +import { addChannelMsg, removeChannelMsg } from "@/app/slices/message.channel"; +import { addMessage, removeMessage, updateMessage } from "@/app/slices/message"; +import { toggleReactionMessage } from "@/app/slices/message.reaction"; +import { addFileMessage, removeFileMessage } from "@/app/slices/message.file"; +import { addUserMsg, removeUserMsg } from "@/app/slices/message.user"; +import { updateAfterMid } from "@/app/slices/footprint"; +import { ContentTypes } from "@/app/config"; +import { ChatEvent } from "@/types/sse"; +import { AppDispatch } from "@/app/store"; type CurrentState = { afterMid: number, ready: boolean; diff --git a/src/common/hook/useStreaming/index.ts b/src/hooks/useStreaming/index.ts similarity index 95% rename from src/common/hook/useStreaming/index.ts rename to src/hooks/useStreaming/index.ts index 32652aa6..b5793d25 100644 --- a/src/common/hook/useStreaming/index.ts +++ b/src/hooks/useStreaming/index.ts @@ -3,15 +3,15 @@ import toast from "react-hot-toast"; import dayjs from "dayjs"; import { isNull, omitBy } from "lodash"; -import BASE_URL from "../../../app/config"; -import { setReady } from "../../../app/slices/ui"; +import BASE_URL from "@/app/config"; +import { setReady } from "@/app/slices/ui"; import { fillChannels, addChannel, removeChannel, updateChannel, updatePinMessage -} from "../../../app/slices/channels"; +} from "@/app/slices/channels"; import { updateUsersVersion, updateReadChannels, @@ -20,16 +20,16 @@ import { updateAutoDeleteSetting, upsertPinChats, removePinChats -} from "../../../app/slices/footprint"; -import { updateContactStatus, updateUsersByLogs, updateUsersStatus } from "../../../app/slices/users"; -import { resetAuthData, updateLoginUser, updateRoleChanged } from "../../../app/slices/auth.data"; +} from "@/app/slices/footprint"; +import { updateContactStatus, updateUsersByLogs, updateUsersStatus } from "@/app/slices/users"; +import { resetAuthData, updateLoginUser, updateRoleChanged } from "@/app/slices/auth.data"; import chatMessageHandler from "./chat.handler"; -import { useAppDispatch, useAppSelector } from "../../../app/store"; -import { ServerEvent, UserSettingsChangedEvent, UsersStateEvent } from "../../../types/sse"; -import { useRenewMutation } from "../../../app/services/auth"; -import { getLocalAuthData } from "../../utils"; -import { removeUserSession } from "../../../app/slices/message.user"; -import { clearChannelMessage, removeChannelSession } from "../../../app/slices/message.channel"; +import { useAppDispatch, useAppSelector } from "@/app/store"; +import { ServerEvent, UserSettingsChangedEvent, UsersStateEvent } from "@/types/sse"; +import { useRenewMutation } from "@/app/services/auth"; +import { getLocalAuthData } from "@/utils"; +import { removeUserSession } from "@/app/slices/message.user"; +import { clearChannelMessage, removeChannelSession } from "@/app/slices/message.channel"; const getQueryString = (params: { [key: string]: string }) => { const sp = new URLSearchParams(); diff --git a/src/common/hook/useTabBroadcast.ts b/src/hooks/useTabBroadcast.ts similarity index 100% rename from src/common/hook/useTabBroadcast.ts rename to src/hooks/useTabBroadcast.ts diff --git a/src/common/hook/useUploadFile.ts b/src/hooks/useUploadFile.ts similarity index 92% rename from src/common/hook/useUploadFile.ts rename to src/hooks/useUploadFile.ts index 3495bbf8..8740dd53 100644 --- a/src/common/hook/useUploadFile.ts +++ b/src/hooks/useUploadFile.ts @@ -1,12 +1,12 @@ import { useState, useRef } from "react"; import toast from "react-hot-toast"; -import { updateUploadFiles } from "../../app/slices/ui"; -import BASE_URL, { FILE_SLICE_SIZE } from "../../app/config"; -import { usePrepareUploadFileMutation, useUploadFileMutation } from "../../app/services/message"; -import { useAppDispatch, useAppSelector } from "../../app/store"; -import { Message } from "../../types/channel"; -import { UploadFileResponse } from "../../types/message"; -import { ChatContext } from "../../types/common"; +import { updateUploadFiles } from "@/app/slices/ui"; +import BASE_URL, { FILE_SLICE_SIZE } from "@/app/config"; +import { usePrepareUploadFileMutation, useUploadFileMutation } from "@/app/services/message"; +import { useAppDispatch, useAppSelector } from "@/app/store"; +import { Message } from "@/types/channel"; +import { UploadFileResponse } from "@/types/message"; +import { ChatContext } from "@/types/common"; interface IProps { context: ChatContext; diff --git a/src/common/hook/useUserOperation.ts b/src/hooks/useUserOperation.ts similarity index 93% rename from src/common/hook/useUserOperation.ts rename to src/hooks/useUserOperation.ts index 9312d7ce..38d0bed9 100644 --- a/src/common/hook/useUserOperation.ts +++ b/src/hooks/useUserOperation.ts @@ -1,15 +1,15 @@ import { useState, useEffect } from "react"; import toast from "react-hot-toast"; -// import { ContentTypes } from "../../../app/config"; +// import { ContentTypes } from "@/app/config"; import { useNavigate, useMatch } from "react-router-dom"; import { hideAll } from "tippy.js"; -import { useRemoveMembersMutation } from "../../app/services/channel"; -import { useLazyDeleteUserQuery, useUpdateContactStatusMutation } from "../../app/services/user"; +import { useRemoveMembersMutation } from "@/app/services/channel"; +import { useLazyDeleteUserQuery, useUpdateContactStatusMutation } from "@/app/services/user"; // import useConfig from "./useConfig"; import useCopy from "./useCopy"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; -// import { AgoraConfig } from "../../types/server"; +// import { AgoraConfig } from "@/types/server"; interface IProps { uid?: number; cid?: number; diff --git a/src/index-widget.tsx b/src/index-widget.tsx index 2c7e90c4..ead4023e 100644 --- a/src/index-widget.tsx +++ b/src/index-widget.tsx @@ -1,12 +1,13 @@ import ReactDOM from "react-dom/client"; import { Provider } from "react-redux"; +import { Toaster } from "react-hot-toast"; + import { WidgetProvider } from './widget/WidgetContext'; import Widget from "./widget/index"; import './assets/index.css'; import store from "./app/store"; import './i18n'; -import { isDarkMode } from "./common/utils"; -import { Toaster } from "react-hot-toast"; +import { isDarkMode } from "./utils"; const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); const hostId = new URLSearchParams(location.search).get("host") || 1; diff --git a/src/index.tsx b/src/index.tsx index 28acd7fa..ea9a7b01 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,16 +6,16 @@ import toast, { Toaster } from "react-hot-toast"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; import "./assets/index.css"; -import "./common/DayjsSetting"; -import "./common/TippySetting"; +import "./libs/DayjsSetting"; +import "./libs/TippySetting"; import { register } from "./serviceWorkerRegistration"; -import MobileAppTip from "./common/component/MobileAppTip"; +import MobileAppTip from "./components/MobileAppTip"; import ReduxRoutes from "./routes"; -import NewVersion from "./common/component/NewVersion"; +import NewVersion from "./components/NewVersion"; // import i18n (needs to be bundled ;)) import './i18n'; -import './common/polyfills'; -import { isDarkMode } from './common/utils'; +import './libs/polyfills'; +import { isDarkMode } from './utils'; const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); // dark mode diff --git a/src/common/DayjsSetting.ts b/src/libs/DayjsSetting.ts similarity index 100% rename from src/common/DayjsSetting.ts rename to src/libs/DayjsSetting.ts diff --git a/src/common/TippySetting.ts b/src/libs/TippySetting.ts similarity index 100% rename from src/common/TippySetting.ts rename to src/libs/TippySetting.ts diff --git a/src/common/polyfills.js b/src/libs/polyfills.js similarity index 100% rename from src/common/polyfills.js rename to src/libs/polyfills.js diff --git a/src/libs/readme.md b/src/libs/readme.md new file mode 100644 index 00000000..d1dc5a30 --- /dev/null +++ b/src/libs/readme.md @@ -0,0 +1 @@ +# re-exporting different libraries preconfigured for the application diff --git a/src/routes/callback/GithubCallback.tsx b/src/routes/callback/GithubCallback.tsx index 45ef9769..c084063b 100644 --- a/src/routes/callback/GithubCallback.tsx +++ b/src/routes/callback/GithubCallback.tsx @@ -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 = { diff --git a/src/routes/callback/PaymentSuccess.tsx b/src/routes/callback/PaymentSuccess.tsx index b85bfdc0..0fea503a 100644 --- a/src/routes/callback/PaymentSuccess.tsx +++ b/src/routes/callback/PaymentSuccess.tsx @@ -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"; diff --git a/src/routes/chat/ChannelChat/Members.tsx b/src/routes/chat/ChannelChat/Members.tsx index d7179b51..9d00c207 100644 --- a/src/routes/chat/ChannelChat/Members.tsx +++ b/src/routes/chat/ChannelChat/Members.tsx @@ -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 = { diff --git a/src/routes/chat/ChannelChat/PinList.tsx b/src/routes/chat/ChannelChat/PinList.tsx index 9f630855..9f2c90a6 100644 --- a/src/routes/chat/ChannelChat/PinList.tsx +++ b/src/routes/chat/ChannelChat/PinList.tsx @@ -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; diff --git a/src/routes/chat/ChannelChat/index.tsx b/src/routes/chat/ChannelChat/index.tsx index bb173fe4..5239b675 100644 --- a/src/routes/chat/ChannelChat/index.tsx +++ b/src/routes/chat/ChannelChat/index.tsx @@ -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[]; diff --git a/src/routes/chat/DMChat/index.tsx b/src/routes/chat/DMChat/index.tsx index 2fb42e47..f2b4002a 100644 --- a/src/routes/chat/DMChat/index.tsx +++ b/src/routes/chat/DMChat/index.tsx @@ -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; diff --git a/src/routes/chat/FavList.tsx b/src/routes/chat/FavList.tsx index 92e9ef46..ff699dc8 100644 --- a/src/routes/chat/FavList.tsx +++ b/src/routes/chat/FavList.tsx @@ -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 = ({ cid = null, uid = null }) => { diff --git a/src/routes/chat/GuestBlankPlaceholder.tsx b/src/routes/chat/GuestBlankPlaceholder.tsx index 3b00ab82..b548c9af 100644 --- a/src/routes/chat/GuestBlankPlaceholder.tsx +++ b/src/routes/chat/GuestBlankPlaceholder.tsx @@ -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 = () => { diff --git a/src/routes/chat/GuestChannelChat/index.tsx b/src/routes/chat/GuestChannelChat/index.tsx index 56a83d8d..65db67ed 100644 --- a/src/routes/chat/GuestChannelChat/index.tsx +++ b/src/routes/chat/GuestChannelChat/index.tsx @@ -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; diff --git a/src/routes/chat/GuestSessionList/Session.tsx b/src/routes/chat/GuestSessionList/Session.tsx index 75dd7deb..1a6b7e0d 100644 --- a/src/routes/chat/GuestSessionList/Session.tsx +++ b/src/routes/chat/GuestSessionList/Session.tsx @@ -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; diff --git a/src/routes/chat/GuestSessionList/index.tsx b/src/routes/chat/GuestSessionList/index.tsx index 7567252b..39fe3e8b 100644 --- a/src/routes/chat/GuestSessionList/index.tsx +++ b/src/routes/chat/GuestSessionList/index.tsx @@ -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; diff --git a/src/routes/chat/Layout/AddContactTip.tsx b/src/routes/chat/Layout/AddContactTip.tsx index 33ee822e..ff48ba80 100644 --- a/src/routes/chat/Layout/AddContactTip.tsx +++ b/src/routes/chat/Layout/AddContactTip.tsx @@ -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'; diff --git a/src/routes/chat/Layout/DMVoicing.tsx b/src/routes/chat/Layout/DMVoicing.tsx index 25334270..a51ca786 100644 --- a/src/routes/chat/Layout/DMVoicing.tsx +++ b/src/routes/chat/Layout/DMVoicing.tsx @@ -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, diff --git a/src/routes/chat/Layout/DnDTip.tsx b/src/routes/chat/Layout/DnDTip.tsx index 45a5a78a..5d38f306 100644 --- a/src/routes/chat/Layout/DnDTip.tsx +++ b/src/routes/chat/Layout/DnDTip.tsx @@ -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 diff --git a/src/routes/chat/Layout/LicenseOutdatedTip.tsx b/src/routes/chat/Layout/LicenseOutdatedTip.tsx index 9d5fed4a..83d18e04 100644 --- a/src/routes/chat/Layout/LicenseOutdatedTip.tsx +++ b/src/routes/chat/Layout/LicenseOutdatedTip.tsx @@ -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 = () => { diff --git a/src/routes/chat/Layout/LoginTip.tsx b/src/routes/chat/Layout/LoginTip.tsx index d6bd4657..10b711ed 100644 --- a/src/routes/chat/Layout/LoginTip.tsx +++ b/src/routes/chat/Layout/LoginTip.tsx @@ -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" }; diff --git a/src/routes/chat/Layout/Operations.tsx b/src/routes/chat/Layout/Operations.tsx index 78c9175a..072c0e0c 100644 --- a/src/routes/chat/Layout/Operations.tsx +++ b/src/routes/chat/Layout/Operations.tsx @@ -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; diff --git a/src/routes/chat/Layout/VirtualMessageFeed/CustomHeader.tsx b/src/routes/chat/Layout/VirtualMessageFeed/CustomHeader.tsx index a18d4cea..a81f367a 100644 --- a/src/routes/chat/Layout/VirtualMessageFeed/CustomHeader.tsx +++ b/src/routes/chat/Layout/VirtualMessageFeed/CustomHeader.tsx @@ -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 diff --git a/src/routes/chat/Layout/VirtualMessageFeed/index.tsx b/src/routes/chat/Layout/VirtualMessageFeed/index.tsx index debf9c4b..29016a0b 100644 --- a/src/routes/chat/Layout/VirtualMessageFeed/index.tsx +++ b/src/routes/chat/Layout/VirtualMessageFeed/index.tsx @@ -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 diff --git a/src/routes/chat/Layout/index.tsx b/src/routes/chat/Layout/index.tsx index 4423d0dc..98289eaa 100644 --- a/src/routes/chat/Layout/index.tsx +++ b/src/routes/chat/Layout/index.tsx @@ -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; diff --git a/src/routes/chat/RTCWidget.tsx b/src/routes/chat/RTCWidget.tsx index 07760c16..ab699c65 100644 --- a/src/routes/chat/RTCWidget.tsx +++ b/src/routes/chat/RTCWidget.tsx @@ -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 = { diff --git a/src/routes/chat/SessionList/ContextMenu.tsx b/src/routes/chat/SessionList/ContextMenu.tsx index f39e37f5..0e7cba69 100644 --- a/src/routes/chat/SessionList/ContextMenu.tsx +++ b/src/routes/chat/SessionList/ContextMenu.tsx @@ -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; diff --git a/src/routes/chat/SessionList/Session.tsx b/src/routes/chat/SessionList/Session.tsx index 0e09f8dc..8dc62412 100644 --- a/src/routes/chat/SessionList/Session.tsx +++ b/src/routes/chat/SessionList/Session.tsx @@ -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; diff --git a/src/routes/chat/SessionList/index.tsx b/src/routes/chat/SessionList/index.tsx index c0db927e..cdd9ad44 100644 --- a/src/routes/chat/SessionList/index.tsx +++ b/src/routes/chat/SessionList/index.tsx @@ -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; diff --git a/src/routes/chat/VoiceChat/Dashboard.tsx b/src/routes/chat/VoiceChat/Dashboard.tsx index 4fa49e85..1b5af52a 100644 --- a/src/routes/chat/VoiceChat/Dashboard.tsx +++ b/src/routes/chat/VoiceChat/Dashboard.tsx @@ -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 = { diff --git a/src/routes/chat/VoiceChat/VoiceManagement.tsx b/src/routes/chat/VoiceChat/VoiceManagement.tsx index d9eaf0c0..d8ec920e 100644 --- a/src/routes/chat/VoiceChat/VoiceManagement.tsx +++ b/src/routes/chat/VoiceChat/VoiceManagement.tsx @@ -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'; diff --git a/src/routes/chat/VoiceChat/index.tsx b/src/routes/chat/VoiceChat/index.tsx index af403725..98b93661 100644 --- a/src/routes/chat/VoiceChat/index.tsx +++ b/src/routes/chat/VoiceChat/index.tsx @@ -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'; diff --git a/src/routes/chat/VoiceFullscreen.tsx b/src/routes/chat/VoiceFullscreen.tsx index 94da7cb4..5a00c399 100644 --- a/src/routes/chat/VoiceFullscreen.tsx +++ b/src/routes/chat/VoiceFullscreen.tsx @@ -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 = { diff --git a/src/routes/chat/index.tsx b/src/routes/chat/index.tsx index e3e82863..a10aad42 100644 --- a/src/routes/chat/index.tsx +++ b/src/routes/chat/index.tsx @@ -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"; diff --git a/src/routes/chat/utils.tsx b/src/routes/chat/utils.tsx index 22f7cf38..6af58f03 100644 --- a/src/routes/chat/utils.tsx +++ b/src/routes/chat/utils.tsx @@ -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 = [], diff --git a/src/routes/favs/index.tsx b/src/routes/favs/index.tsx index 0352f6ef..18afb250 100644 --- a/src/routes/favs/index.tsx +++ b/src/routes/favs/index.tsx @@ -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(""); diff --git a/src/routes/home/Menu.tsx b/src/routes/home/Menu.tsx index 4deb4946..2bcf55bc 100644 --- a/src/routes/home/Menu.tsx +++ b/src/routes/home/Menu.tsx @@ -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 = () => { const { pathname } = useLocation(); diff --git a/src/routes/home/MobileNavs.tsx b/src/routes/home/MobileNavs.tsx index 3bd2d67d..3182b003 100644 --- a/src/routes/home/MobileNavs.tsx +++ b/src/routes/home/MobileNavs.tsx @@ -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 = {} diff --git a/src/routes/home/User.tsx b/src/routes/home/User.tsx index 9f8e1513..c5caed00 100644 --- a/src/routes/home/User.tsx +++ b/src/routes/home/User.tsx @@ -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; diff --git a/src/routes/home/index.tsx b/src/routes/home/index.tsx index df890036..838221fa 100644 --- a/src/routes/home/index.tsx +++ b/src/routes/home/index.tsx @@ -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() { diff --git a/src/routes/index.tsx b/src/routes/index.tsx index fd12d635..c6c17390 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -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 = () => { diff --git a/src/routes/invitePrivate/index.tsx b/src/routes/invitePrivate/index.tsx index 561c112c..b767ae6a 100644 --- a/src/routes/invitePrivate/index.tsx +++ b/src/routes/invitePrivate/index.tsx @@ -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'; diff --git a/src/routes/lazy.tsx b/src/routes/lazy.tsx index e5a8b535..95198ead 100644 --- a/src/routes/lazy.tsx +++ b/src/routes/lazy.tsx @@ -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; diff --git a/src/routes/login/MagicLinkLogin.tsx b/src/routes/login/MagicLinkLogin.tsx index 3db7dad7..eb127027 100644 --- a/src/routes/login/MagicLinkLogin.tsx +++ b/src/routes/login/MagicLinkLogin.tsx @@ -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(); diff --git a/src/routes/login/MetamaskLoginButton.tsx b/src/routes/login/MetamaskLoginButton.tsx index 3f7ae2c8..05ed54ee 100644 --- a/src/routes/login/MetamaskLoginButton.tsx +++ b/src/routes/login/MetamaskLoginButton.tsx @@ -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({ diff --git a/src/routes/login/OidcLoginButton.tsx b/src/routes/login/OidcLoginButton.tsx index 948b77dd..eedb0539 100644 --- a/src/routes/login/OidcLoginButton.tsx +++ b/src/routes/login/OidcLoginButton.tsx @@ -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 diff --git a/src/routes/login/OidcLoginEntry.tsx b/src/routes/login/OidcLoginEntry.tsx index 1681c91b..50ed474d 100644 --- a/src/routes/login/OidcLoginEntry.tsx +++ b/src/routes/login/OidcLoginEntry.tsx @@ -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(); diff --git a/src/routes/login/SocialLoginButtons.tsx b/src/routes/login/SocialLoginButtons.tsx index 91902c82..267a9b21 100644 --- a/src/routes/login/SocialLoginButtons.tsx +++ b/src/routes/login/SocialLoginButtons.tsx @@ -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'; diff --git a/src/routes/login/index.tsx b/src/routes/login/index.tsx index 3d2ca200..77c0c52f 100644 --- a/src/routes/login/index.tsx +++ b/src/routes/login/index.tsx @@ -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); diff --git a/src/routes/oauth/index.tsx b/src/routes/oauth/index.tsx index add077f8..b8dc3da5 100644 --- a/src/routes/oauth/index.tsx +++ b/src/routes/oauth/index.tsx @@ -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() { diff --git a/src/routes/onboarding/steps/UpdateFrontendURL.tsx b/src/routes/onboarding/steps/UpdateFrontendURL.tsx index f7b98615..6e74c0e3 100644 --- a/src/routes/onboarding/steps/UpdateFrontendURL.tsx +++ b/src/routes/onboarding/steps/UpdateFrontendURL.tsx @@ -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'; diff --git a/src/routes/onboarding/steps/admin-account.tsx b/src/routes/onboarding/steps/admin-account.tsx index 06f6891c..53c3065a 100644 --- a/src/routes/onboarding/steps/admin-account.tsx +++ b/src/routes/onboarding/steps/admin-account.tsx @@ -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"; diff --git a/src/routes/onboarding/steps/done-page.tsx b/src/routes/onboarding/steps/done-page.tsx index addc388d..6ad8c3a8 100644 --- a/src/routes/onboarding/steps/done-page.tsx +++ b/src/routes/onboarding/steps/done-page.tsx @@ -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"; diff --git a/src/routes/onboarding/steps/invite-link.tsx b/src/routes/onboarding/steps/invite-link.tsx index 2a23893c..0558e3c0 100644 --- a/src/routes/onboarding/steps/invite-link.tsx +++ b/src/routes/onboarding/steps/invite-link.tsx @@ -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() { diff --git a/src/routes/onboarding/steps/server-name.tsx b/src/routes/onboarding/steps/server-name.tsx index e550070b..8e0a040c 100644 --- a/src/routes/onboarding/steps/server-name.tsx +++ b/src/routes/onboarding/steps/server-name.tsx @@ -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"; diff --git a/src/routes/onboarding/steps/welcome-page.tsx b/src/routes/onboarding/steps/welcome-page.tsx index 9985ddca..9619b822 100644 --- a/src/routes/onboarding/steps/welcome-page.tsx +++ b/src/routes/onboarding/steps/welcome-page.tsx @@ -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"; diff --git a/src/routes/onboarding/steps/who-can-sign-up.tsx b/src/routes/onboarding/steps/who-can-sign-up.tsx index 3e3ca14f..56639b56 100644 --- a/src/routes/onboarding/steps/who-can-sign-up.tsx +++ b/src/routes/onboarding/steps/who-can-sign-up.tsx @@ -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"; diff --git a/src/routes/reg/RegWithUsername.tsx b/src/routes/reg/RegWithUsername.tsx index 930d97c0..90295ae9 100644 --- a/src/routes/reg/RegWithUsername.tsx +++ b/src/routes/reg/RegWithUsername.tsx @@ -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 = () => { diff --git a/src/routes/reg/Register.tsx b/src/routes/reg/Register.tsx index 8aaa90f4..d370cc5d 100644 --- a/src/routes/reg/Register.tsx +++ b/src/routes/reg/Register.tsx @@ -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 { diff --git a/src/routes/reg/SignInLink.tsx b/src/routes/reg/SignInLink.tsx index bb993b97..f3a76afd 100644 --- a/src/routes/reg/SignInLink.tsx +++ b/src/routes/reg/SignInLink.tsx @@ -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"); diff --git a/src/routes/resources/Filter/Channel.tsx b/src/routes/resources/Filter/Channel.tsx index df686cba..6fd9a2dc 100644 --- a/src/routes/resources/Filter/Channel.tsx +++ b/src/routes/resources/Filter/Channel.tsx @@ -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; diff --git a/src/routes/resources/Filter/Date.tsx b/src/routes/resources/Filter/Date.tsx index a85b5f42..8415a45c 100644 --- a/src/routes/resources/Filter/Date.tsx +++ b/src/routes/resources/Filter/Date.tsx @@ -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 = { diff --git a/src/routes/resources/Filter/From.tsx b/src/routes/resources/Filter/From.tsx index 2ae879b1..94fde918 100644 --- a/src/routes/resources/Filter/From.tsx +++ b/src/routes/resources/Filter/From.tsx @@ -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; diff --git a/src/routes/resources/Filter/Type.tsx b/src/routes/resources/Filter/Type.tsx index b1acf783..5441b141 100644 --- a/src/routes/resources/Filter/Type.tsx +++ b/src/routes/resources/Filter/Type.tsx @@ -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 = { diff --git a/src/routes/resources/Filter/index.tsx b/src/routes/resources/Filter/index.tsx index 44e7e810..96a68443 100644 --- a/src/routes/resources/Filter/index.tsx +++ b/src/routes/resources/Filter/index.tsx @@ -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 '); diff --git a/src/routes/resources/Search.tsx b/src/routes/resources/Search.tsx index 2c5d58c8..08ebe610 100644 --- a/src/routes/resources/Search.tsx +++ b/src/routes/resources/Search.tsx @@ -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; diff --git a/src/routes/resources/View.tsx b/src/routes/resources/View.tsx index 8accf0b5..aa8b4592 100644 --- a/src/routes/resources/View.tsx +++ b/src/routes/resources/View.tsx @@ -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`); diff --git a/src/routes/resources/index.tsx b/src/routes/resources/index.tsx index 8f402d87..082b73bc 100644 --- a/src/routes/resources/index.tsx +++ b/src/routes/resources/index.tsx @@ -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; diff --git a/src/routes/sendMagicLink/SentTip.tsx b/src/routes/sendMagicLink/SentTip.tsx index 58a46c30..ffa1d1c0 100644 --- a/src/routes/sendMagicLink/SentTip.tsx +++ b/src/routes/sendMagicLink/SentTip.tsx @@ -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"; diff --git a/src/routes/sendMagicLink/index.tsx b/src/routes/sendMagicLink/index.tsx index c7c7c1bf..05e8fedb 100644 --- a/src/routes/sendMagicLink/index.tsx +++ b/src/routes/sendMagicLink/index.tsx @@ -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"); diff --git a/src/routes/setting/APIConfig.tsx b/src/routes/setting/APIConfig.tsx index 01fd5a8c..bd389cfc 100644 --- a/src/routes/setting/APIConfig.tsx +++ b/src/routes/setting/APIConfig.tsx @@ -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"; diff --git a/src/routes/setting/APIDocument.tsx b/src/routes/setting/APIDocument.tsx index 5f90b497..3992dc08 100644 --- a/src/routes/setting/APIDocument.tsx +++ b/src/routes/setting/APIDocument.tsx @@ -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 = () => { diff --git a/src/routes/setting/BotConfig/BotAPIKeys.tsx b/src/routes/setting/BotConfig/BotAPIKeys.tsx index ca4b18a6..86a476cb 100644 --- a/src/routes/setting/BotConfig/BotAPIKeys.tsx +++ b/src/routes/setting/BotConfig/BotAPIKeys.tsx @@ -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'; diff --git a/src/routes/setting/BotConfig/CreateAPIKeyModal.tsx b/src/routes/setting/BotConfig/CreateAPIKeyModal.tsx index 76ac9df0..204a58e9 100644 --- a/src/routes/setting/BotConfig/CreateAPIKeyModal.tsx +++ b/src/routes/setting/BotConfig/CreateAPIKeyModal.tsx @@ -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, diff --git a/src/routes/setting/BotConfig/CreateModal.tsx b/src/routes/setting/BotConfig/CreateModal.tsx index 461d713c..0598624f 100644 --- a/src/routes/setting/BotConfig/CreateModal.tsx +++ b/src/routes/setting/BotConfig/CreateModal.tsx @@ -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 = { diff --git a/src/routes/setting/BotConfig/DeleteAPIKeyModal.tsx b/src/routes/setting/BotConfig/DeleteAPIKeyModal.tsx index f145ffac..e40844ac 100644 --- a/src/routes/setting/BotConfig/DeleteAPIKeyModal.tsx +++ b/src/routes/setting/BotConfig/DeleteAPIKeyModal.tsx @@ -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, diff --git a/src/routes/setting/BotConfig/DeleteModal.tsx b/src/routes/setting/BotConfig/DeleteModal.tsx index 3ed206a7..5447724c 100644 --- a/src/routes/setting/BotConfig/DeleteModal.tsx +++ b/src/routes/setting/BotConfig/DeleteModal.tsx @@ -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, diff --git a/src/routes/setting/BotConfig/TestAPIKeyModal.tsx b/src/routes/setting/BotConfig/TestAPIKeyModal.tsx index fa5ff277..27d21f07 100644 --- a/src/routes/setting/BotConfig/TestAPIKeyModal.tsx +++ b/src/routes/setting/BotConfig/TestAPIKeyModal.tsx @@ -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'; diff --git a/src/routes/setting/BotConfig/WebhookEdit.tsx b/src/routes/setting/BotConfig/WebhookEdit.tsx index 39ff0d8d..9d0240ec 100644 --- a/src/routes/setting/BotConfig/WebhookEdit.tsx +++ b/src/routes/setting/BotConfig/WebhookEdit.tsx @@ -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 } diff --git a/src/routes/setting/BotConfig/WebhookModal.tsx b/src/routes/setting/BotConfig/WebhookModal.tsx index 11dc1e88..a182ec91 100644 --- a/src/routes/setting/BotConfig/WebhookModal.tsx +++ b/src/routes/setting/BotConfig/WebhookModal.tsx @@ -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, diff --git a/src/routes/setting/BotConfig/index.tsx b/src/routes/setting/BotConfig/index.tsx index e08c7fb0..05350bdd 100644 --- a/src/routes/setting/BotConfig/index.tsx +++ b/src/routes/setting/BotConfig/index.tsx @@ -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'; diff --git a/src/routes/setting/License/LicensePriceListModal.tsx b/src/routes/setting/License/LicensePriceListModal.tsx index 28992a67..aa934083 100644 --- a/src/routes/setting/License/LicensePriceListModal.tsx +++ b/src/routes/setting/License/LicensePriceListModal.tsx @@ -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; diff --git a/src/routes/setting/License/UpdateLicenseModal.tsx b/src/routes/setting/License/UpdateLicenseModal.tsx index 74c049e5..8086186c 100644 --- a/src/routes/setting/License/UpdateLicenseModal.tsx +++ b/src/routes/setting/License/UpdateLicenseModal.tsx @@ -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 { diff --git a/src/routes/setting/License/index.tsx b/src/routes/setting/License/index.tsx index 572cbfed..64730d6a 100644 --- a/src/routes/setting/License/index.tsx +++ b/src/routes/setting/License/index.tsx @@ -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"; diff --git a/src/routes/setting/LogoutConfirmModal.tsx b/src/routes/setting/LogoutConfirmModal.tsx index d83f3b34..82fbdda1 100644 --- a/src/routes/setting/LogoutConfirmModal.tsx +++ b/src/routes/setting/LogoutConfirmModal.tsx @@ -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"; diff --git a/src/routes/setting/MyAccount.tsx b/src/routes/setting/MyAccount.tsx index 49c1b268..b20954a0 100644 --- a/src/routes/setting/MyAccount.tsx +++ b/src/routes/setting/MyAccount.tsx @@ -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" | ""; diff --git a/src/routes/setting/Overview/ChatLayout.tsx b/src/routes/setting/Overview/ChatLayout.tsx index 9758675c..11d14067 100644 --- a/src/routes/setting/Overview/ChatLayout.tsx +++ b/src/routes/setting/Overview/ChatLayout.tsx @@ -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'; diff --git a/src/routes/setting/Overview/ContactVerification.tsx b/src/routes/setting/Overview/ContactVerification.tsx index d2d68399..cb2c296b 100644 --- a/src/routes/setting/Overview/ContactVerification.tsx +++ b/src/routes/setting/Overview/ContactVerification.tsx @@ -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 = {} diff --git a/src/routes/setting/Overview/DarkMode.tsx b/src/routes/setting/Overview/DarkMode.tsx index c8477905..eba38091 100644 --- a/src/routes/setting/Overview/DarkMode.tsx +++ b/src/routes/setting/Overview/DarkMode.tsx @@ -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'; diff --git a/src/routes/setting/Overview/FrontendURL.tsx b/src/routes/setting/Overview/FrontendURL.tsx index 239eae57..e8eaacbf 100644 --- a/src/routes/setting/Overview/FrontendURL.tsx +++ b/src/routes/setting/Overview/FrontendURL.tsx @@ -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 = {} diff --git a/src/routes/setting/Overview/Language.tsx b/src/routes/setting/Overview/Language.tsx index 2bab374f..16030648 100644 --- a/src/routes/setting/Overview/Language.tsx +++ b/src/routes/setting/Overview/Language.tsx @@ -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 = {} diff --git a/src/routes/setting/Overview/OnlineStatus.tsx b/src/routes/setting/Overview/OnlineStatus.tsx index 8267bd02..0ac150cf 100644 --- a/src/routes/setting/Overview/OnlineStatus.tsx +++ b/src/routes/setting/Overview/OnlineStatus.tsx @@ -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 = {} diff --git a/src/routes/setting/Overview/Server.tsx b/src/routes/setting/Overview/Server.tsx index 6d9b2ecd..b9203827 100644 --- a/src/routes/setting/Overview/Server.tsx +++ b/src/routes/setting/Overview/Server.tsx @@ -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 = () => { diff --git a/src/routes/setting/Overview/index.tsx b/src/routes/setting/Overview/index.tsx index 7240b386..5cea549d 100644 --- a/src/routes/setting/Overview/index.tsx +++ b/src/routes/setting/Overview/index.tsx @@ -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"; diff --git a/src/routes/setting/Overview/language.tsx b/src/routes/setting/Overview/language.tsx index 2bab374f..16030648 100644 --- a/src/routes/setting/Overview/language.tsx +++ b/src/routes/setting/Overview/language.tsx @@ -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 = {} diff --git a/src/routes/setting/Overview/server.tsx b/src/routes/setting/Overview/server.tsx index 6d9b2ecd..b9203827 100644 --- a/src/routes/setting/Overview/server.tsx +++ b/src/routes/setting/Overview/server.tsx @@ -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 = () => { diff --git a/src/routes/setting/ProfileBasicEditModal.tsx b/src/routes/setting/ProfileBasicEditModal.tsx index 7f048b9c..db770496 100644 --- a/src/routes/setting/ProfileBasicEditModal.tsx +++ b/src/routes/setting/ProfileBasicEditModal.tsx @@ -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"; diff --git a/src/routes/setting/RemoveAccountConfirmModal.tsx b/src/routes/setting/RemoveAccountConfirmModal.tsx index 6fb55848..68ef8827 100644 --- a/src/routes/setting/RemoveAccountConfirmModal.tsx +++ b/src/routes/setting/RemoveAccountConfirmModal.tsx @@ -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 { diff --git a/src/routes/setting/UpdatePasswordModal.tsx b/src/routes/setting/UpdatePasswordModal.tsx index c5ee6c03..ac55a403 100644 --- a/src/routes/setting/UpdatePasswordModal.tsx +++ b/src/routes/setting/UpdatePasswordModal.tsx @@ -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"; diff --git a/src/routes/setting/Widget.tsx b/src/routes/setting/Widget.tsx index 73108134..171a1340 100644 --- a/src/routes/setting/Widget.tsx +++ b/src/routes/setting/Widget.tsx @@ -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 }) => { diff --git a/src/routes/setting/config/Agora.tsx b/src/routes/setting/config/Agora.tsx index 3c651067..2e6b4be0 100644 --- a/src/routes/setting/config/Agora.tsx +++ b/src/routes/setting/config/Agora.tsx @@ -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"); diff --git a/src/routes/setting/config/Firebase.tsx b/src/routes/setting/config/Firebase.tsx index 405522ff..dcd78e74 100644 --- a/src/routes/setting/config/Firebase.tsx +++ b/src/routes/setting/config/Firebase.tsx @@ -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 { diff --git a/src/routes/setting/config/IssuerList/index.tsx b/src/routes/setting/config/IssuerList/index.tsx index 814740a9..7f6318bd 100644 --- a/src/routes/setting/config/IssuerList/index.tsx +++ b/src/routes/setting/config/IssuerList/index.tsx @@ -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; diff --git a/src/routes/setting/config/Logins.tsx b/src/routes/setting/config/Logins.tsx index 220c64f4..67bfbffb 100644 --- a/src/routes/setting/config/Logins.tsx +++ b/src/routes/setting/config/Logins.tsx @@ -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() { diff --git a/src/routes/setting/config/SMTP.tsx b/src/routes/setting/config/SMTP.tsx index 81bebbec..c2533f8a 100644 --- a/src/routes/setting/config/SMTP.tsx +++ b/src/routes/setting/config/SMTP.tsx @@ -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" }); diff --git a/src/routes/setting/config/Tooltip.tsx b/src/routes/setting/config/Tooltip.tsx index 9229fbbf..c4d6f31f 100644 --- a/src/routes/setting/config/Tooltip.tsx +++ b/src/routes/setting/config/Tooltip.tsx @@ -1,7 +1,7 @@ import Tippy from "@tippyjs/react"; import { roundArrow } from "tippy.js"; import "tippy.js/dist/svg-arrow.css"; -import IconQuestion from "../../../assets/icons/question.svg"; +import IconQuestion from "@/assets/icons/question.svg"; // import { useTranslation } from "react-i18next"; import { PropsWithChildren } from "react"; import { Trans } from 'react-i18next'; diff --git a/src/routes/setting/index.tsx b/src/routes/setting/index.tsx index 3a99eb84..194bda0c 100644 --- a/src/routes/setting/index.tsx +++ b/src/routes/setting/index.tsx @@ -1,9 +1,10 @@ import { useState } from "react"; +import { useTranslation } from "react-i18next"; import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import StyledSettingContainer from "../../common/component/StyledSettingContainer"; + +import StyledSettingContainer from "@/components/StyledSettingContainer"; import useNavs from "./navs"; import LogoutConfirmModal from "./LogoutConfirmModal"; -import { useTranslation } from "react-i18next"; let pageFrom: string = ""; diff --git a/src/routes/setting/navs.tsx b/src/routes/setting/navs.tsx index 2a15fc6e..8316680b 100644 --- a/src/routes/setting/navs.tsx +++ b/src/routes/setting/navs.tsx @@ -9,11 +9,11 @@ import License from "./License"; import Widget from "./Widget"; import BotConfig from "./BotConfig"; import APIDocument from "./APIDocument"; -import ManageMembers from "../../common/component/ManageMembers"; -import Version from "../../common/component/Version"; +import ManageMembers from "@/components/ManageMembers"; +import Version from "@/components/Version"; import ConfigAgora from "./config/Agora"; -import { useAppSelector } from "../../app/store"; -import ServerVersionChecker from "../../common/component/ServerVersionChecker"; +import { useAppSelector } from "@/app/store"; +import ServerVersionChecker from "@/components/ServerVersionChecker"; const navs = [ { diff --git a/src/routes/settingChannel/DeleteConfirmModal.tsx b/src/routes/settingChannel/DeleteConfirmModal.tsx index c1f82844..c048d289 100644 --- a/src/routes/settingChannel/DeleteConfirmModal.tsx +++ b/src/routes/settingChannel/DeleteConfirmModal.tsx @@ -1,10 +1,10 @@ import { useEffect, FC } from "react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; -import Modal from "../../common/component/Modal"; -import { useLazyRemoveChannelQuery } from "../../app/services/channel"; -import StyledModal from "../../common/component/styled/Modal"; -import Button from "../../common/component/styled/Button"; +import Modal from "@/components/Modal"; +import { useLazyRemoveChannelQuery } from "@/app/services/channel"; +import StyledModal from "@/components/styled/Modal"; +import Button from "@/components/styled/Button"; import { useTranslation } from "react-i18next"; interface Props { diff --git a/src/routes/settingChannel/Overview.tsx b/src/routes/settingChannel/Overview.tsx index cbdd4588..18236790 100644 --- a/src/routes/settingChannel/Overview.tsx +++ b/src/routes/settingChannel/Overview.tsx @@ -5,16 +5,16 @@ import { useGetChannelQuery, useUpdateChannelMutation, useUpdateIconMutation -} from "../../app/services/channel"; -import AvatarUploader from "../../common/component/AvatarUploader"; -import Input from "../../common/component/styled/Input"; -import Label from "../../common/component/styled/Label"; -import Radio from "../../common/component/styled/Radio"; -import Textarea from "../../common/component/styled/Textarea"; -import SaveTip from "../../common/component/SaveTip"; -import IconChannel from "../../assets/icons/channel.svg"; -import { useAppSelector } from "../../app/store"; -import { Channel } from "../../types/channel"; +} from "@/app/services/channel"; +import AvatarUploader from "@/components/AvatarUploader"; +import Input from "@/components/styled/Input"; +import Label from "@/components/styled/Label"; +import Radio from "@/components/styled/Radio"; +import Textarea from "@/components/styled/Textarea"; +import SaveTip from "@/components/SaveTip"; +import IconChannel from "@/assets/icons/channel.svg"; +import { useAppSelector } from "@/app/store"; +import { Channel } from "@/types/channel"; import { useTranslation } from "react-i18next"; diff --git a/src/routes/settingChannel/index.tsx b/src/routes/settingChannel/index.tsx index a41f6961..2dc4f3c8 100644 --- a/src/routes/settingChannel/index.tsx +++ b/src/routes/settingChannel/index.tsx @@ -1,10 +1,10 @@ import { useState } from "react"; import { useParams, useNavigate, useSearchParams } from "react-router-dom"; -import LeaveChannel from "../../common/component/LeaveChannel"; -import StyledSettingContainer from "../../common/component/StyledSettingContainer"; +import LeaveChannel from "@/components/LeaveChannel"; +import StyledSettingContainer from "@/components/StyledSettingContainer"; import DeleteConfirmModal from "./DeleteConfirmModal"; import useNavs from "./navs"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; let from: string = ""; diff --git a/src/routes/settingChannel/navs.tsx b/src/routes/settingChannel/navs.tsx index d9f5ae98..9b522152 100644 --- a/src/routes/settingChannel/navs.tsx +++ b/src/routes/settingChannel/navs.tsx @@ -1,8 +1,8 @@ import { ReactNode } from "react"; import { useTranslation } from "react-i18next"; import Overview from "./Overview"; -import AutoDeleteMessages from '../../common/component/AutoDeleteMessages'; -import ManageMembers from "../../common/component/ManageMembers"; +import AutoDeleteMessages from '../../components/AutoDeleteMessages'; +import ManageMembers from "@/components/ManageMembers"; export interface NavItem { name: string; diff --git a/src/routes/settingDM/DeleteConfirmModal.tsx b/src/routes/settingDM/DeleteConfirmModal.tsx index 94049401..3d6cd298 100644 --- a/src/routes/settingDM/DeleteConfirmModal.tsx +++ b/src/routes/settingDM/DeleteConfirmModal.tsx @@ -1,10 +1,10 @@ import { useEffect, FC } from "react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; -import Modal from "../../common/component/Modal"; -import { useLazyDeleteUserQuery } from "../../app/services/user"; -import StyledModal from "../../common/component/styled/Modal"; -import Button from "../../common/component/styled/Button"; +import Modal from "@/components/Modal"; +import { useLazyDeleteUserQuery } from "@/app/services/user"; +import StyledModal from "@/components/styled/Modal"; +import Button from "@/components/styled/Button"; import { useTranslation } from "react-i18next"; interface Props { diff --git a/src/routes/settingDM/Overview.tsx b/src/routes/settingDM/Overview.tsx index 9784645b..42bf0a0a 100644 --- a/src/routes/settingDM/Overview.tsx +++ b/src/routes/settingDM/Overview.tsx @@ -1,5 +1,5 @@ // import { useState, useEffect, ChangeEvent } from "react"; -import Profile from "../../common/component/Profile"; +import Profile from "@/components/Profile"; export default function Overview({ id = 0 }) { return ( diff --git a/src/routes/settingDM/index.tsx b/src/routes/settingDM/index.tsx index 9d12d6de..e8d33a5c 100644 --- a/src/routes/settingDM/index.tsx +++ b/src/routes/settingDM/index.tsx @@ -1,9 +1,9 @@ import { useState } from "react"; import { useParams, useNavigate, useSearchParams } from "react-router-dom"; -import StyledSettingContainer from "../../common/component/StyledSettingContainer"; +import StyledSettingContainer from "@/components/StyledSettingContainer"; import DeleteConfirmModal from "./DeleteConfirmModal"; import useNavs from "./navs"; -import { useAppSelector } from "../../app/store"; +import { useAppSelector } from "@/app/store"; import { useTranslation } from "react-i18next"; let from: string = ""; diff --git a/src/routes/settingDM/navs.tsx b/src/routes/settingDM/navs.tsx index bbd2bba7..49497436 100644 --- a/src/routes/settingDM/navs.tsx +++ b/src/routes/settingDM/navs.tsx @@ -1,7 +1,7 @@ import { ReactNode } from "react"; import { useTranslation } from "react-i18next"; import Overview from "./Overview"; -import AutoDeleteMessages from '../../common/component/AutoDeleteMessages'; +import AutoDeleteMessages from '../../components/AutoDeleteMessages'; export interface NavItem { name: string; diff --git a/src/routes/users/Search.tsx b/src/routes/users/Search.tsx index 212b0f8f..dc2b6812 100644 --- a/src/routes/users/Search.tsx +++ b/src/routes/users/Search.tsx @@ -1,12 +1,12 @@ import { FC, ChangeEvent } from "react"; import Tippy from "@tippyjs/react"; -import IconSearch from "../../assets/icons/search.svg"; -import IconAdd from "../../assets/icons/add.svg"; +import IconSearch from "@/assets/icons/search.svg"; +import IconAdd from "@/assets/icons/add.svg"; import { useTranslation } from "react-i18next"; -import { useAppSelector } from "../../app/store"; -import { compareVersion } from "../../common/utils"; -import Tooltip from "../../common/component/Tooltip"; -import AddEntriesMenu from "../../common/component/AddEntriesMenu"; +import { useAppSelector } from "@/app/store"; +import { compareVersion } from "@/utils"; +import Tooltip from "@/components/Tooltip"; +import AddEntriesMenu from "@/components/AddEntriesMenu"; type Props = { input: string, openModal: () => void, diff --git a/src/routes/users/index.tsx b/src/routes/users/index.tsx index a32d28b8..dc998ac6 100644 --- a/src/routes/users/index.tsx +++ b/src/routes/users/index.tsx @@ -3,16 +3,16 @@ import { NavLink, useParams, useLocation } from "react-router-dom"; import { useDispatch } from "react-redux"; import { ViewportList } from 'react-viewport-list'; -import { updateRememberedNavs } from "../../app/slices/ui"; +import { updateRememberedNavs } from "@/app/slices/ui"; import Search from "./Search"; -import User from "../../common/component/User"; -import Profile from "../../common/component/Profile"; +import User from "@/components/User"; +import Profile from "@/components/Profile"; -import BlankPlaceholder from "../../common/component/BlankPlaceholder"; -import useFilteredUsers from "../../common/hook/useFilteredUsers"; +import BlankPlaceholder from "@/components/BlankPlaceholder"; +import useFilteredUsers from "@/hooks/useFilteredUsers"; import clsx from "clsx"; -import GoBackNav from "../../common/component/GoBackNav"; -import SearchUser from "../../common/component/SearchUser"; +import GoBackNav from "@/components/GoBackNav"; +import SearchUser from "@/components/SearchUser"; function UsersPage() { const ref = useRef( diff --git a/src/types/readme.md b/src/types/readme.md new file mode 100644 index 00000000..4f965c6f --- /dev/null +++ b/src/types/readme.md @@ -0,0 +1 @@ +# base types used across the application diff --git a/src/common/utils.tsx b/src/utils.tsx similarity index 95% rename from src/common/utils.tsx rename to src/utils.tsx index 303f82a3..ecfaee33 100644 --- a/src/common/utils.tsx +++ b/src/utils.tsx @@ -1,15 +1,16 @@ import dayjs from "dayjs"; -import BASE_URL, { FILE_IMAGE_SIZE, ContentTypes, KEY_TOKEN, KEY_REFRESH_TOKEN, KEY_EXPIRE } from "../app/config"; import { ICameraVideoTrack, ILocalAudioTrack, ILocalVideoTrack } from "agora-rtc-sdk-ng"; -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 { Archive, ArchiveMessage } from "../types/resource"; -import { MessagePayload } from "../app/slices/message"; + +import BASE_URL, { FILE_IMAGE_SIZE, ContentTypes, KEY_TOKEN, KEY_REFRESH_TOKEN, KEY_EXPIRE } from "@/app/config"; +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 { Archive, ArchiveMessage } from "@/types/resource"; +import { MessagePayload } from "@/app/slices/message"; export const isMobile = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); diff --git a/src/widget/Popup/Login/index.tsx b/src/widget/Popup/Login/index.tsx index 793a9df2..3ff9e771 100644 --- a/src/widget/Popup/Login/index.tsx +++ b/src/widget/Popup/Login/index.tsx @@ -6,13 +6,13 @@ import { useDispatch } from 'react-redux'; import { useRegisterMutation } from '../../../app/services/auth'; import { useGetLoginConfigQuery } from '../../../app/services/server'; import { setAuthData } from '../../../app/slices/auth.data'; -import Divider from '../../../common/component/Divider'; -import GithubLoginButton from '../../../common/component/GithubLoginButton'; -import GoogleLoginButton from '../../../common/component/GoogleLoginButton'; -import StyledButton from '../../../common/component/styled/Button'; -import Input from '../../../common/component/styled/Input'; -import useGithubAuthConfig from '../../../common/hook/useGithubAuthConfig'; -import useGoogleAuthConfig from '../../../common/hook/useGoogleAuthConfig'; +import Divider from '../../../components/Divider'; +import GithubLoginButton from '../../../components/GithubLoginButton'; +import GoogleLoginButton from '../../../components/GoogleLoginButton'; +import StyledButton from '../../../components/styled/Button'; +import Input from '../../../components/styled/Input'; +import useGithubAuthConfig from '../../../hooks/useGithubAuthConfig'; +import useGoogleAuthConfig from '../../../hooks/useGoogleAuthConfig'; import { useWidget } from '../../WidgetContext'; import { useTranslation } from 'react-i18next'; diff --git a/src/widget/Popup/MessageInput.tsx b/src/widget/Popup/MessageInput.tsx index 3c7269f4..fc25698e 100644 --- a/src/widget/Popup/MessageInput.tsx +++ b/src/widget/Popup/MessageInput.tsx @@ -1,8 +1,8 @@ import { useRef, useState, memo } from 'react'; import clsx from 'clsx'; -import useSendMessage from '../../common/hook/useSendMessage'; +import useSendMessage from '../../hooks/useSendMessage'; import { useWidget } from '../WidgetContext'; -import IconSend from '../../assets/icons/send.svg'; +import IconSend from '@/assets/icons/send.svg'; import { useTranslation } from 'react-i18next'; diff --git a/src/widget/WidgetContext.tsx b/src/widget/WidgetContext.tsx index 77567890..ca00ffb1 100644 --- a/src/widget/WidgetContext.tsx +++ b/src/widget/WidgetContext.tsx @@ -1,7 +1,7 @@ import { createContext, useContext, ReactNode } from 'react'; import { useGetLoginConfigQuery, useGetServerQuery } from '../app/services/server'; import { useAppSelector } from '../app/store'; -import { getContrastColor } from '../common/utils'; +import { getContrastColor } from '../utils'; const query = new URLSearchParams(location.search); const welcome = decodeURIComponent(query.get("welcome") || ""); diff --git a/src/widget/readme.md b/src/widget/readme.md new file mode 100644 index 00000000..f66d75aa --- /dev/null +++ b/src/widget/readme.md @@ -0,0 +1 @@ +# vocechat widget diff --git a/src/widget/useSSE.ts b/src/widget/useSSE.ts index 8b951f39..74fa2970 100644 --- a/src/widget/useSSE.ts +++ b/src/widget/useSSE.ts @@ -1,7 +1,7 @@ import { useEffect } from "react"; import dayjs from "dayjs"; import { useAppSelector } from "../app/store"; -import useStreaming from "../common/hook/useStreaming"; +import useStreaming from "@/hooks/useStreaming"; export default function useSSE() { const { diff --git a/tsconfig.json b/tsconfig.json index 3fe0403e..42a585de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,6 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": ["src", "src/types/*.d.ts", "src/locales/*.d.ts", "src/i18next.d.ts"] + "include": ["src", "src/types/*.d.ts", "src/locales/*.d.ts", "src/i18next.d.ts"], + "extends": "./tsconfig.paths.json" } diff --git a/tsconfig.paths.json b/tsconfig.paths.json new file mode 100644 index 00000000..abe04df5 --- /dev/null +++ b/tsconfig.paths.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +}