Skip to content

Commit

Permalink
refactor: add entities folder, improved api structure
Browse files Browse the repository at this point in the history
  • Loading branch information
chertik77 committed Feb 18, 2025
1 parent 7a720b0 commit 53e2069
Show file tree
Hide file tree
Showing 196 changed files with 415 additions and 425 deletions.
2 changes: 1 addition & 1 deletion src/app/routes/(auth)/_auth-layout.signin.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createFileRoute } from '@tanstack/react-router'

import { SigninForm } from '@/features/auth/signin/components'
import { SigninForm } from '@/features/auth/signin'

export const Route = createFileRoute('/(auth)/_auth-layout/signin')({
component: SigninForm
Expand Down
2 changes: 1 addition & 1 deletion src/app/routes/(auth)/_auth-layout.signup.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createFileRoute } from '@tanstack/react-router'

import { SignupForm } from '@/features/auth/signup/components'
import { SignupForm } from '@/features/auth/signup'

export const Route = createFileRoute('/(auth)/_auth-layout/signup')({
component: SignupForm
Expand Down
3 changes: 1 addition & 2 deletions src/app/routes/(auth)/_auth-layout.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { useAuthStore } from '@/entities/auth'
import { createFileRoute, Outlet, redirect } from '@tanstack/react-router'

import { AuthFormNavigation, AuthLayout } from '@/blocks/auth-layout'

import { useAuthStore } from '@/shared/store'

export const Route = createFileRoute('/(auth)/_auth-layout')({
beforeLoad: () => {
if (useAuthStore.getState().signedIn()) throw redirect({ to: '/dashboard' })
Expand Down
5 changes: 2 additions & 3 deletions src/app/routes/(dashboard)/dashboard.$boardId.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { CardContracts } from '@/entities/card'
import { createFileRoute } from '@tanstack/react-router'

import { Board } from '@/blocks/board'

import { CardContracts } from '@/shared/api/card'
import { Board } from '@/blocks/kanban-board'

export const Route = createFileRoute('/(dashboard)/dashboard/$boardId')({
component: Board,
Expand Down
2 changes: 1 addition & 1 deletion src/app/routes/(dashboard)/dashboard.index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createFileRoute } from '@tanstack/react-router'

import { EmptyBoard } from '@/blocks/board'
import { EmptyBoard } from '@/blocks/kanban-board'

export const Route = createFileRoute('/(dashboard)/dashboard/')({
component: EmptyBoard
Expand Down
7 changes: 4 additions & 3 deletions src/app/routes/(dashboard)/dashboard.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { useAuthStore } from '@/entities/auth'
import { createFileRoute, Outlet, redirect } from '@tanstack/react-router'

import { useSidebarToggleShortcut } from '@/features/toggle-sidebar/hooks'
import { useSidebarToggleShortcut } from '@/features/toggle-sidebar'

import { Header } from '@/blocks/header'
import { Sidebar } from '@/blocks/sidebar'

import { cn } from '@/shared/lib'
import { useAuthStore, useSidebarStore } from '@/shared/store'
import { cn } from '@/shared/lib/cn'
import { useSidebarStore } from '@/shared/store'

const DashboardRoute = () => {
const isSidebarOpen = useSidebarStore(state => state.isSidebarOpen)
Expand Down
18 changes: 9 additions & 9 deletions src/app/routes/__root.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import { useAuthStore } from '@/entities/auth'
import { createRootRoute, Outlet } from '@tanstack/react-router'
import { Analytics } from '@vercel/analytics/react'
import { SpeedInsights } from '@vercel/speed-insights/react'
import { ModalRenderer } from 'react-modal-state'
import { Toaster } from 'sonner'

import { AddBoardModal } from '@/features/board/add-board/components'
import { EditBoardModal } from '@/features/board/edit-board/components'
import { AddCardModal } from '@/features/card/add-card/components'
import { EditCardModal } from '@/features/card/edit-card/components'
import { AddColumnModal } from '@/features/column/add-column/components'
import { EditColumnModal } from '@/features/column/edit-column/components'
import { EditProfileModal } from '@/features/edit-profile/components'
import { NeedHelpModal } from '@/features/need-help/components'
import { AddBoardModal } from '@/features/board/add-board'
import { EditBoardModal } from '@/features/board/edit-board'
import { AddCardModal } from '@/features/card/add-card'
import { EditCardModal } from '@/features/card/edit-card'
import { AddColumnModal } from '@/features/column/add-column'
import { EditColumnModal } from '@/features/column/edit-column'
import { EditProfileModal } from '@/features/edit-profile'
import { NeedHelpModal } from '@/features/need-help'

import { SidebarMobileModal } from '@/blocks/sidebar'

import { useTabletAndBelowMediaQuery } from '@/shared/hooks'
import { useAuthStore } from '@/shared/store'

const RootRoute = () => {
const theme = useAuthStore(state => state.user.theme)
Expand Down
4 changes: 2 additions & 2 deletions src/app/routes/index.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { useAuthStore } from '@/entities/auth'
import { createFileRoute, Link, redirect } from '@tanstack/react-router'

import { GoogleSignin } from '@/features/auth/google/components'
import { GoogleSignin } from '@/features/auth/google'

import { Icon } from '@/shared/components/ui'
import { useAuthStore } from '@/shared/store'

const IndexRoute = () => (
<div className='flex h-dvh flex-col items-center justify-center bg-welcome-page-gradient'>
Expand Down
4 changes: 2 additions & 2 deletions src/blocks/header/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ThemeSelect } from '@/features/change-theme/components'
import { EditProfileModalTrigger } from '@/features/edit-profile/components'
import { ThemeSelect } from '@/features/change-theme'
import { EditProfileModalTrigger } from '@/features/edit-profile'

import { HeaderControls } from './HeaderControls'

Expand Down
2 changes: 1 addition & 1 deletion src/blocks/header/HeaderControls.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useModal } from 'react-modal-state'

import { ToggleSidebarTrigger } from '@/features/toggle-sidebar/components'
import { ToggleSidebarTrigger } from '@/features/toggle-sidebar'

import { SidebarMobileModal } from '@/blocks/sidebar'

Expand Down
11 changes: 7 additions & 4 deletions src/blocks/board/Board.tsx → src/blocks/kanban-board/Board.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import * as ScrollArea from '@radix-ui/react-scroll-area'

import { useGetBoardById } from '@/features/board/hooks'
import { Filters } from '@/features/card/filters/components'
import { ColumnList } from '@/features/column/list/components'
import { useGetBoardById } from '@/features/board/get-board-by-id'

import { Loader, Scrollbar } from '@/shared/components/ui'
import { useDocumentTitle } from '@/shared/hooks'
import { cn } from '@/shared/lib'
import { cn } from '@/shared/lib/cn'
import { DragAndDropProvider } from '@/shared/store'

import { ColumnList } from './ColumnList'
import { Filters } from './Filters'
import { KanbanDragOverlay } from './KanbanDragOverlay'

export const Board = () => {
const { data: board, isPending } = useGetBoardById()

Expand Down Expand Up @@ -36,6 +38,7 @@ export const Board = () => {
<ScrollArea.Viewport className='w-full flex-1 pb-4'>
<DragAndDropProvider initialColumns={board?.columns}>
<ColumnList backgroundIdentifier={board?.background.identifier} />
<KanbanDragOverlay />
</DragAndDropProvider>
</ScrollArea.Viewport>
)}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { CardTypes } from '@/shared/api/card'
import type { CardTypes } from '@/entities/card'

import { useDndMonitor } from '@dnd-kit/core'
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'

import { useCardFilters } from '@/features/card/filters/hooks'
import { getFilteredCards } from '@/features/card/filters/utils'
import { useCardDragHandlers } from '@/features/card'
import { useFilteredCards } from '@/features/card/filter-cards'

import { useDragAndDrop } from '@/shared/store'

Expand All @@ -14,14 +15,13 @@ type CardListProps = {
}

export const CardList = ({ cards }: CardListProps) => {
const { cards: allCards } = useDragAndDrop()
const { onDragStart, onDragOver, onDragEnd } = useCardDragHandlers()

useDndMonitor({ onDragStart, onDragOver, onDragEnd })

const { priorityParam, deadlineParam } = useCardFilters()
const { cards: allCards } = useDragAndDrop()

const filteredCards = getFilteredCards(cards!, {
priority: priorityParam,
deadline: deadlineParam
})
const filteredCards = useFilteredCards(cards!)

return (
<SortableContext
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import type { CardTypes } from '@/shared/api/card'
import type { CardTypes } from '@/entities/card'

import { getPriorityColor } from '@/entities/card'
import { isToday } from 'date-fns'

import { DeleteCardTrigger } from '@/features/card/delete-card/components'
import { EditCardModalTrigger } from '@/features/card/edit-card/components'
import { DeleteCardTrigger } from '@/features/card/delete-card'
import { EditCardModalTrigger } from '@/features/card/edit-card'

import { Icon } from '@/shared/components/ui'
import { useKanbanSortable } from '@/shared/hooks'
import { cn } from '@/shared/lib'
import { getPriorityColor } from '@/shared/utils'
import { cn } from '@/shared/lib/cn'

import { CardListItemDeadline } from './CardListItemDeadline'
import { CardListItemPriority } from './CardListItemPriority'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import type { CardTypes } from '@/shared/api/card'
import { CardTypes, getPriorityColor } from '@/entities/card'

import { cn } from '@/shared/lib'
import { getPriorityColor } from '@/shared/utils'
import { cn } from '@/shared/lib/cn'

type CardListItemPriorityProps = {
priority: CardTypes.Priority
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { useDndMonitor } from '@dnd-kit/core'
import {
horizontalListSortingStrategy,
SortableContext
} from '@dnd-kit/sortable'

import { AddColumnTrigger } from '@/features/column/add-column/components'
import { useColumnDragHandlers } from '@/features/column'
import { AddColumnTrigger } from '@/features/column/add-column'

import { useDragAndDrop } from '@/shared/store'

Expand All @@ -16,6 +18,10 @@ type ColumnListProps = {
export const ColumnList = ({ backgroundIdentifier }: ColumnListProps) => {
const { columns, cards } = useDragAndDrop()

const { onDragStart, onDragEnd } = useColumnDragHandlers()

useDndMonitor({ onDragStart, onDragEnd })

return (
<div className='flex touch-manipulation gap-[34px]'>
<SortableContext
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import type { CardTypes } from '@/shared/api/card'
import type { ColumnTypes } from '@/shared/api/column'
import type { CardTypes } from '@/entities/card'
import type { ColumnTypes } from '@/entities/column'

import * as ScrollArea from '@radix-ui/react-scroll-area'

import { AddCardModalTrigger } from '@/features/card/add-card/components'
import { CardList } from '@/features/card/list/components'
import { DeleteColumnTrigger } from '@/features/column/delete-column/components'
import { EditColumnTrigger } from '@/features/column/edit-column/components'
import { AddCardModalTrigger } from '@/features/card/add-card'
import { DeleteColumnTrigger } from '@/features/column/delete-column'
import { EditColumnTrigger } from '@/features/column/edit-column'

import { Scrollbar } from '@/shared/components/ui'
import { useKanbanSortable, useTabletAndBelowMediaQuery } from '@/shared/hooks'
import { cn } from '@/shared/lib'
import { cn } from '@/shared/lib/cn'

import { CardList } from './CardList'

type ColumnListItemProps = {
column: ColumnTypes.Column
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useModal } from 'react-modal-state'

import { AddBoardModalTrigger } from '@/features/board/add-board/components'
import { AddBoardModalTrigger } from '@/features/board/add-board'

export const EmptyBoard = () => {
const { open: openNewBoardModal } = useModal(AddBoardModalTrigger)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import * as Popover from '@radix-ui/react-popover'
import { Link } from '@tanstack/react-router'

import { DeadlineFilter, PriorityFilter } from '@/features/card/filter-cards'

import { Icon } from '@/shared/components/ui'
import { useGetParamBoardId } from '@/shared/hooks'

import { DeadlineFilter } from './DeadlineFilter'
import { PriorityFilter } from './PriorityFilter'

export const Filters = () => {
const { boardId } = useGetParamBoardId()

Expand Down
24 changes: 24 additions & 0 deletions src/blocks/kanban-board/KanbanDragOverlay.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { DragOverlay } from '@dnd-kit/core'
import { createPortal } from 'react-dom'

import { useDragAndDrop } from '@/shared/store'

import { CardListItem } from './CardListItem'
import { ColumnListItem } from './ColumnListItem'

export const KanbanDragOverlay = () => {
const { activeCard, activeColumn, cards } = useDragAndDrop()

return createPortal(
<DragOverlay>
{activeColumn && (
<ColumnListItem
column={activeColumn}
cards={cards?.filter(c => c.columnId === activeColumn.id)}
/>
)}
{activeCard && <CardListItem card={activeCard} />}
</DragOverlay>,
document.body
)
}
File renamed without changes.
10 changes: 5 additions & 5 deletions src/blocks/sidebar/Sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import * as ScrollArea from '@radix-ui/react-scroll-area'

import { LogoutBtn } from '@/features/auth/logout/components'
import { BoardList } from '@/features/board/list/components'
import { NeedHelpModalTrigger } from '@/features/need-help/components'
import { LogoutBtn } from '@/features/auth/logout'
import { NeedHelpModalTrigger } from '@/features/need-help'

import { Scrollbar } from '@/shared/components/ui'
import { cn } from '@/shared/lib'
import { cn } from '@/shared/lib/cn'
import { useSidebarStore } from '@/shared/store'

import { SidebarBoardInfo } from './SidebarBoardInfo'
import { SidebarBoardList } from './SidebarBoardList'
import { SidebarLogo } from './SidebarLogo'

export const Sidebar = () => {
Expand All @@ -26,7 +26,7 @@ export const Sidebar = () => {
<aside className='flex h-dvh flex-col'>
<SidebarLogo />
<SidebarBoardInfo />
<BoardList />
<SidebarBoardList />
<div className='mt-auto px-6 pb-6'>
<NeedHelpModalTrigger />
<LogoutBtn />
Expand Down
2 changes: 1 addition & 1 deletion src/blocks/sidebar/SidebarBoardInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AddBoardModalTrigger } from '@/features/board/add-board/components'
import { AddBoardModalTrigger } from '@/features/board/add-board'

export const SidebarBoardInfo = () => (
<div className='mb-10 px-3.5 tablet:px-6'>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import { Root } from '@radix-ui/react-radio-group'
import { useNavigate } from '@tanstack/react-router'
import { useModal } from 'react-modal-state'

import { SidebarMobileModal } from '@/blocks/sidebar'
import { useGetAllBoards } from '@/features/board/get-all-boards'

import { Loader } from '@/shared/components/ui'
import { useGetParamBoardId } from '@/shared/hooks'
import { cn } from '@/shared/lib'
import { cn } from '@/shared/lib/cn'

import { useGetAllBoards } from '../hooks'
import { BoardListItem } from './BoardListItem'
import { SidebarBoardListItem } from './SidebarBoardListItem'
import { SidebarMobileModal } from './SidebarMobileModal'

export const BoardList = () => {
export const SidebarBoardList = () => {
const navigate = useNavigate()

const { boardId } = useGetParamBoardId()
Expand All @@ -34,7 +34,7 @@ export const BoardList = () => {
}}
className={cn('mb-10 text-base', boards?.length === 0 && 'mb-auto')}>
{boards?.map(board => (
<BoardListItem
<SidebarBoardListItem
key={board.id}
board={board}
/>
Expand Down
Loading

0 comments on commit 53e2069

Please sign in to comment.