Skip to content

Instantly share code, notes, and snippets.

@ribeiroevandro
Created May 30, 2022 23:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ribeiroevandro/b61f031152a36a6b772ed0c1f21adc79 to your computer and use it in GitHub Desktop.
Save ribeiroevandro/b61f031152a36a6b772ed0c1f21adc79 to your computer and use it in GitHub Desktop.
import React, { useState } from 'react'
import { StyleSheet, View, Alert } from 'react-native'
import { Header } from '../components/Header'
import { Task, TasksList } from '../components/TasksList'
import { TodoInput } from '../components/TodoInput'
export interface INewTitle {
taskId: number
newTitle: string
}
export function Home() {
const [tasks, setTasks] = useState<Task[]>([])
function handleAddTask(newTaskTitle: string) {
const newTask = {
id: new Date().getTime(),
title: newTaskTitle,
done: false,
}
const sameTitle = tasks.find((item) => item.title === newTaskTitle)
if (sameTitle) {
return Alert.alert('Atenção', 'Esse título já existe')
}
setTasks((oldTasks) => [...oldTasks, newTask])
}
function handleToggleTaskDone(id: number) {
const updatedTasks = tasks.map((task) => ({ ...task }))
const foundItem = updatedTasks.find((item) => item.id === id)
if (!foundItem) return
foundItem.done = !foundItem.done
setTasks(updatedTasks)
}
function handleRemoveTask(id: number) {
const taskCancel = tasks.filter((task) => task.id !== id)
return Alert.alert(
'Remover item',
'Tem certeza que você deseja remover esse item?',
[
{ style: 'cancel', text: 'não', onPress: () => {} },
{
text: 'sim',
onPress: () => {
setTasks(taskCancel)
},
},
]
)
}
function handleEditTask({ taskId, newTitle }: INewTitle) {
const updatedTasks = tasks.map((task) => ({ ...task }))
const foundItem = updatedTasks.find((item) => item.id === taskId)
if (!foundItem) return
foundItem.title = newTitle
setTasks(updatedTasks)
}
return(
<View style={styles.container}>
<Header tasksCounter={tasks.length} />
<TodoInput addTask={handleAddTask} />
<TasksList
tasks={tasks}
toggleTaskDone={handleToggleTaskDone}
removeTask={handleRemoveTask}
editTask={handleEditTask}
/>
</View>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#EBEBEB',
},
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment