Mise en ligne : vendredi 18 octobre 2024
Si ce n'est pas déjà fait, cloner le repo GitHub du projet.
Nous allons apporter quelques modifications à notre UI, afin d'implémenter la suppression d'un Post dans notre application.
Nous allons transformer la <View /> du renderItem de notre ListPost en <Pressable /> afin de lui rajouter un onLongPress
.
src/components/ListPost.tsxrenderItem={({ item }) => (
<Pressable
style={styles.cardRow}
onLongPress={null}>
<View style={styles.title}>
<Text>
{item.title} - {item.id}
</Text>
<Text style={styles.likes}>{item.likes} likes</Text>
</View>
<View style={styles.checked}>
{item.isPinned ? (
<Feather
name="check-circle"
size={24}
color="green"
/>
) : (
<View />
)}
</View>
</Pressable>
)}
Nous allons, ensuite, ajouter un ListFooterComponent
à la FlatList :
src/components/ListPost.tsxListFooterComponent={
<View style={styles.footer}>
<Text style={styles.footerText}>
Appuyez longuement sur un élément pour le supprimer
</Text>
</View>
}
Pour finaliser les modifications de notre UI, nous allons ajouter un peu de styles, dans le StyleSheet.create
:
src/components/ListPost.tsxfooter: {
padding: 10,
},
footerText: {
fontSize: 12,
fontStyle: 'italic',
},
Implémentons la fonction de suppression, en n'oubliant pas de l'utiliser dans un writer
:
src/database/functions.tsexport const deletePost = (id: string) => {
database.write(async () => {
const post = await database.get<Post>('posts').find(id);
await post.destroyPermanently();
});
};
La méthode find(id) nous permet de chercher un élément dans la table Post.
Avec watermelonDB, nous avons deux choix qui s'offrent à nous :
Ajoutons une fonction de suppression dans le Pressable, que nous avons créés précédemment :
src/components/ListPost.tsxonLongPress={() => deletePost(item.id)}
Nous pouvons, maintenant, supprimer les éléments de ListPost 😉.