Skip to content

Commit

Permalink
feat: integrate folder services
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanFnz committed Mar 8, 2025
1 parent 9cefd94 commit 10feb58
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 4 deletions.
1 change: 1 addition & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ module.exports = {
'@context': './src/context',
'@navigation': './src/navigation',
'@store': './src/store',
'@services': './src/services',
'@api': './src/api',
'@config': './src/config',
'@root': './',
Expand Down
24 changes: 20 additions & 4 deletions src/screens/home/home.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import React, { useState } from 'react'
import { useSelector } from 'react-redux'
import React, { useEffect, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import styled from 'styled-components/native'

import { RootState } from '@store/store'
import { AppDispatch, RootState } from '@store/store'
import { fetchFolders } from '@services/folder'
import { setFolders } from '@store/slices'

import { BackgroundLayers } from '../../components/background-layers'
import { FolderList } from './components/folder-list'
Expand All @@ -13,14 +15,28 @@ import { CreateNoteButton } from './components/create-note-button'

export const Home: React.FC = () => {
const insets = useSafeAreaInsets()
const folders = useSelector((state: RootState) => state.folders)
const dispatch = useDispatch<AppDispatch>()
const folders = useSelector((state: RootState) => state.folders) || []
const [searchQuery, setSearchQuery] = useState('')

const allNotes = folders.flatMap(folder => folder.notes)
const filteredNotes = allNotes.filter(note =>
note.title.toLowerCase().includes(searchQuery.toLowerCase()),
)

useEffect(() => {
const loadFolders = async () => {
try {
const folders = await fetchFolders()
dispatch(setFolders(folders))
} catch (error) {
console.error('Failed to load folders:', error)
}
}

loadFolders()
}, [dispatch, folders.length])

return (
<>
<BackgroundLayers testID={'background-layers'} />
Expand Down
28 changes: 28 additions & 0 deletions src/services/folder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { axiosInstance, handleApiError } from '../api'

export const fetchFolders = async () => {
try {
const { data } = await axiosInstance.get('/folders')
return data
} catch (error) {
return handleApiError(error)
}
}

export const createFolder = async (folderName: string) => {
try {
const { data } = await axiosInstance.post('/folders', { folderName })
return data
} catch (error) {
return handleApiError(error)
}
}

export const deleteFolder = async (folderId: number) => {
try {
await axiosInstance.delete(`/folders/${folderId}`)
return { success: true }
} catch (error) {
return handleApiError(error)
}
}
26 changes: 26 additions & 0 deletions src/store/actions/folder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { createFolder, deleteFolder, fetchFolders } from '@services/folder'
import { AppDispatch } from '@store/store'
import { addFolder, removeFolder, setFolders } from '@store/slices'

export const performFetchFolders = () => async (dispatch: AppDispatch) => {
const folders = await fetchFolders()
if (folders) {
dispatch(setFolders(folders))
}
}

export const performCreateFolder =
(folderName: string) => async (dispatch: AppDispatch) => {
const newFolder = await createFolder(folderName)
if (newFolder) {
dispatch(addFolder(newFolder))
}
}

export const performDeleteFolder =
(folderId: number) => async (dispatch: AppDispatch) => {
const result = await deleteFolder(folderId)
if (result.success) {
dispatch(removeFolder(folderId))
}
}
5 changes: 5 additions & 0 deletions src/store/actions/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export {
performFetchFolders,
performCreateFolder,
performDeleteFolder,
} from './folder'
1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"@context/*": ["src/context/*"],
"@theme/*": ["src/theme/*"],
"@store/*": ["src/store/*"],
"@services/*": ["src/services/*"],
"@api/*": ["src/api/*"],
"@config/*": ["src/config/*"],
"@root/*": ["./*"]
Expand Down

0 comments on commit 10feb58

Please sign in to comment.