diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 5e23612f..263fcc72 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -44,6 +44,7 @@ module.exports = { patterns: ['@/features/*/*'], }, ], + 'import/no-cycle': 'error', 'linebreak-style': ['error', 'unix'], 'react/prop-types': 'off', 'import/order': [ diff --git a/src/components/Layout/MainLayout.tsx b/src/components/Layout/MainLayout.tsx index fe5abfd7..186a202f 100644 --- a/src/components/Layout/MainLayout.tsx +++ b/src/components/Layout/MainLayout.tsx @@ -12,8 +12,7 @@ import * as React from 'react'; import { NavLink, Link } from 'react-router-dom'; import logo from '@/assets/logo.svg'; -import { useLogout } from '@/lib/auth'; -import { useAuthorization, ROLES } from '@/lib/authorization'; +import { useLogout, useAuthorization, ROLES } from '@/features/auth'; type SideNavigationItem = { name: string; diff --git a/src/features/auth/components/LoginForm.tsx b/src/features/auth/components/LoginForm.tsx index 7aeb2a6c..0d7c6a0a 100644 --- a/src/features/auth/components/LoginForm.tsx +++ b/src/features/auth/components/LoginForm.tsx @@ -3,7 +3,8 @@ import * as z from 'zod'; import { Button } from '@/components/Elements'; import { Form, InputField } from '@/components/Form'; -import { useLogin } from '@/lib/auth'; + +import { useLogin } from '../lib/auth'; const schema = z.object({ email: z.string().min(1, 'Required'), diff --git a/src/features/auth/components/RegisterForm.tsx b/src/features/auth/components/RegisterForm.tsx index 494ef608..4ac8417c 100644 --- a/src/features/auth/components/RegisterForm.tsx +++ b/src/features/auth/components/RegisterForm.tsx @@ -6,7 +6,8 @@ import * as z from 'zod'; import { Button } from '@/components/Elements'; import { Form, InputField, SelectField } from '@/components/Form'; import { useTeams } from '@/features/teams'; -import { useRegister } from '@/lib/auth'; + +import { useRegister } from '../lib/auth'; const schema = z .object({ diff --git a/src/features/auth/index.ts b/src/features/auth/index.ts index c413f6d5..cf47d4ec 100644 --- a/src/features/auth/index.ts +++ b/src/features/auth/index.ts @@ -1,7 +1,5 @@ -export * from './api/getUser'; -export * from './api/login'; -export * from './api/register'; -export * from './api/logout'; +export * from './lib/auth'; +export * from './lib/authorization'; export * from './routes'; diff --git a/src/lib/__tests__/authorization.test.tsx b/src/features/auth/lib/__tests__/authorization.test.tsx similarity index 100% rename from src/lib/__tests__/authorization.test.tsx rename to src/features/auth/lib/__tests__/authorization.test.tsx diff --git a/src/lib/auth.tsx b/src/features/auth/lib/auth.tsx similarity index 74% rename from src/lib/auth.tsx rename to src/features/auth/lib/auth.tsx index caaf6fc8..13c740c6 100644 --- a/src/lib/auth.tsx +++ b/src/features/auth/lib/auth.tsx @@ -1,14 +1,10 @@ import { configureAuth } from 'react-query-auth'; -import { - loginWithEmailAndPassword, - getUser, - registerWithEmailAndPassword, - UserResponse, - LoginCredentialsDTO, - RegisterCredentialsDTO, - logout, -} from '@/features/auth'; +import { getUser } from '../api/getUser'; +import { LoginCredentialsDTO, loginWithEmailAndPassword } from '../api/login'; +import { logout } from '../api/logout'; +import { RegisterCredentialsDTO, registerWithEmailAndPassword } from '../api/register'; +import { UserResponse } from '../types'; async function handleUserResponse(data: UserResponse) { const { user } = data; diff --git a/src/lib/authorization.tsx b/src/features/auth/lib/authorization.tsx similarity index 94% rename from src/lib/authorization.tsx rename to src/features/auth/lib/authorization.tsx index 5d4dbaa8..cc939d30 100644 --- a/src/lib/authorization.tsx +++ b/src/features/auth/lib/authorization.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; -import { Comment } from '@/features/comments'; -import { User } from '@/features/users'; +import { type Comment } from '@/features/comments'; +import { type User } from '@/features/users'; import { useUser } from './auth'; diff --git a/src/features/comments/components/CommentsList.tsx b/src/features/comments/components/CommentsList.tsx index 6b38fd3e..b32953e7 100644 --- a/src/features/comments/components/CommentsList.tsx +++ b/src/features/comments/components/CommentsList.tsx @@ -1,9 +1,8 @@ import { ArchiveBoxIcon } from '@heroicons/react/16/solid'; import { Spinner, MDPreview } from '@/components/Elements'; +import { useUser, POLICIES, Authorization } from '@/features/auth'; import { User } from '@/features/users'; -import { useUser } from '@/lib/auth'; -import { POLICIES, Authorization } from '@/lib/authorization'; import { formatDate } from '@/utils/format'; import { useComments } from '../api/getComments'; diff --git a/src/features/discussions/components/CreateDiscussion.tsx b/src/features/discussions/components/CreateDiscussion.tsx index ea04e34d..f3364dd2 100644 --- a/src/features/discussions/components/CreateDiscussion.tsx +++ b/src/features/discussions/components/CreateDiscussion.tsx @@ -3,7 +3,7 @@ import * as z from 'zod'; import { Button } from '@/components/Elements'; import { Form, FormDrawer, InputField, TextAreaField } from '@/components/Form'; -import { Authorization, ROLES } from '@/lib/authorization'; +import { Authorization, ROLES } from '@/features/auth'; import { CreateDiscussionDTO, useCreateDiscussion } from '../api/createDiscussion'; diff --git a/src/features/discussions/components/DeleteDiscussion.tsx b/src/features/discussions/components/DeleteDiscussion.tsx index 2de87cc0..82fb9720 100644 --- a/src/features/discussions/components/DeleteDiscussion.tsx +++ b/src/features/discussions/components/DeleteDiscussion.tsx @@ -1,7 +1,7 @@ import { TrashIcon } from '@heroicons/react/16/solid'; import { Button, ConfirmationDialog } from '@/components/Elements'; -import { Authorization, ROLES } from '@/lib/authorization'; +import { Authorization, ROLES } from '@/features/auth'; import { useDeleteDiscussion } from '../api/deleteDiscussion'; diff --git a/src/features/discussions/components/UpdateDiscussion.tsx b/src/features/discussions/components/UpdateDiscussion.tsx index 7cee7fbe..6549e3d9 100644 --- a/src/features/discussions/components/UpdateDiscussion.tsx +++ b/src/features/discussions/components/UpdateDiscussion.tsx @@ -3,7 +3,7 @@ import * as z from 'zod'; import { Button } from '@/components/Elements'; import { Form, FormDrawer, InputField, TextAreaField } from '@/components/Form'; -import { Authorization, ROLES } from '@/lib/authorization'; +import { Authorization, ROLES } from '@/features/auth'; import { useDiscussion } from '../api/getDiscussion'; import { UpdateDiscussionDTO, useUpdateDiscussion } from '../api/updateDiscussion'; diff --git a/src/features/misc/routes/Dashboard.tsx b/src/features/misc/routes/Dashboard.tsx index 3c1be307..f783b73a 100644 --- a/src/features/misc/routes/Dashboard.tsx +++ b/src/features/misc/routes/Dashboard.tsx @@ -1,6 +1,5 @@ import { ContentLayout } from '@/components/Layout'; -import { useUser } from '@/lib/auth'; -import { ROLES } from '@/lib/authorization'; +import { useUser, ROLES } from '@/features/auth'; export const Dashboard = () => { const user = useUser(); diff --git a/src/features/misc/routes/Landing.tsx b/src/features/misc/routes/Landing.tsx index bb155d40..162f590f 100644 --- a/src/features/misc/routes/Landing.tsx +++ b/src/features/misc/routes/Landing.tsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router'; import logo from '@/assets/logo.svg'; import { Button } from '@/components/Elements'; import { Head } from '@/components/Head'; -import { useUser } from '@/lib/auth'; +import { useUser } from '@/features/auth'; export const Landing = () => { const navigate = useNavigate(); diff --git a/src/features/users/api/updateProfile.ts b/src/features/users/api/updateProfile.ts index c473e5e5..6de987cc 100644 --- a/src/features/users/api/updateProfile.ts +++ b/src/features/users/api/updateProfile.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; -import { useUser } from '@/lib/auth'; +import { useUser } from '@/features/auth'; import { axios } from '@/lib/axios'; import { MutationConfig } from '@/lib/react-query'; import { useNotificationStore } from '@/stores/notifications'; diff --git a/src/features/users/components/DeleteUser.tsx b/src/features/users/components/DeleteUser.tsx index c1d1f20c..9a208b4c 100644 --- a/src/features/users/components/DeleteUser.tsx +++ b/src/features/users/components/DeleteUser.tsx @@ -1,5 +1,5 @@ import { Button, ConfirmationDialog } from '@/components/Elements'; -import { useUser } from '@/lib/auth'; +import { useUser } from '@/features/auth'; import { useDeleteUser } from '../api/deleteUser'; diff --git a/src/features/users/components/UpdateProfile.tsx b/src/features/users/components/UpdateProfile.tsx index c42ce426..33a399c0 100644 --- a/src/features/users/components/UpdateProfile.tsx +++ b/src/features/users/components/UpdateProfile.tsx @@ -3,7 +3,7 @@ import * as z from 'zod'; import { Button } from '@/components/Elements'; import { Form, FormDrawer, InputField, TextAreaField } from '@/components/Form'; -import { useUser } from '@/lib/auth'; +import { useUser } from '@/features/auth'; import { UpdateProfileDTO, useUpdateProfile } from '../api/updateProfile'; diff --git a/src/features/users/routes/Profile.tsx b/src/features/users/routes/Profile.tsx index 2f39f351..612277d5 100644 --- a/src/features/users/routes/Profile.tsx +++ b/src/features/users/routes/Profile.tsx @@ -1,5 +1,5 @@ import { ContentLayout } from '@/components/Layout'; -import { useUser } from '@/lib/auth'; +import { useUser } from '@/features/auth'; import { UpdateProfile } from '../components/UpdateProfile'; diff --git a/src/features/users/routes/Users.tsx b/src/features/users/routes/Users.tsx index b965b4c3..dd254a2a 100644 --- a/src/features/users/routes/Users.tsx +++ b/src/features/users/routes/Users.tsx @@ -1,5 +1,5 @@ import { ContentLayout } from '@/components/Layout'; -import { Authorization, ROLES } from '@/lib/authorization'; +import { Authorization, ROLES } from '@/features/auth'; import { UsersList } from '../components/UsersList'; diff --git a/src/providers/app.tsx b/src/providers/app.tsx index be6a3c81..d9619e14 100644 --- a/src/providers/app.tsx +++ b/src/providers/app.tsx @@ -8,8 +8,7 @@ import { BrowserRouter as Router } from 'react-router-dom'; import { Button, Spinner } from '@/components/Elements'; import { Notifications } from '@/components/Notifications/Notifications'; -// import { AuthLoader } from '@/lib/auth'; -import { AuthLoader } from '@/lib/auth'; +import { AuthLoader } from '@/features/auth'; import { queryConfig } from '@/lib/react-query'; const ErrorFallback = () => { diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 934bc721..7825cdfb 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,7 +1,7 @@ import { useRoutes } from 'react-router-dom'; +import { useUser } from '@/features/auth'; import { Landing } from '@/features/misc'; -import { useUser } from '@/lib/auth'; import { protectedRoutes } from './protected'; import { publicRoutes } from './public'; diff --git a/src/test/server/utils.ts b/src/test/server/utils.ts index 364c3057..27918319 100644 --- a/src/test/server/utils.ts +++ b/src/test/server/utils.ts @@ -53,7 +53,6 @@ export function requireAuth(cookies: Record, shouldThrow = true) try { // todo: fix once tests in Github Actions are fixed // const encodedToken = cookies[AUTH_COOKIE]; - console.log('cookies', cookies); const encodedToken = Cookies.get(AUTH_COOKIE); if (!encodedToken) { if (shouldThrow) {