What I'm trying to do is not display the data coming from Firebase in my component, but also store it in my store, more specifically in this line:
export const watchSeriesJotai = atom();
How can I do this?
My store:
import firebase from "@firebase/app";
import "@firebase/database";
import { Alert } from "react-native";
import { atom } from "jotai";
export const watchSeriesJotaiAtom = async () => {
try {
const { currentUser } = await firebase.auth();
const base = firebase.database().ref(`/users/${currentUser.uid}/series`);
const snapshot = await base.once("value");
const series = snapshot.val();
const keys = Object.keys(series);
const seriesWithKeys = keys.map((id) => {
return { ...series[id], id };
});
console.warn("Dados: ", seriesWithKeys);
return seriesWithKeys;
} catch (error) {
Alert.alert("Error: ", error);
}
};
export const watchSeriesJotai = atom();
My component:
import React, { useEffect, useState } from "react";
import { ViewLoading, Loading, ViewList, ViewTop, ViewBottom } from "./styles";
import { useIsFocused } from "@react-navigation/native";
import { Text } from "react-native";
import SerieCard from "../../components/SerieCard";
import AddSerieCard from "../../components/AddSerieCard";
import { watchSeriesJotaiAtom, watchSeriesJotai } from "../../storeJotai/event";
import { logout } from "../../store/actions";
import { useAtom, atom } from "jotai";
const isEven = (number) => number % 2 === 0;
export const ListSeries = ({ navigation }) => {
const [series, setSeries] = useAtom(watchSeriesJotai);
const isFocused = useIsFocused();
useEffect(() => {
async function results() {
const response = await watchSeriesJotaiAtom();
setSeries(response);
}
results();
}, [setSeries]);
return (
<>
{!series ? (
<ViewLoading>
<Loading size="large" color="light-blue" />
</ViewLoading>
) : (
<ViewList
data={[...series, { isLast: true }]}
renderItem={({ item, index }) =>
item.isLast ? (
<AddSerieCard
isFirstColumn={isEven(index)}
onNavigate={() => navigation.navigate("SerieForm")}
/>
) : (
<SerieCard
serie={item}
isFirstColumn={isEven(index)}
onNavigate={() =>
navigation.navigate("SerieDetail", { serie: item })
}
/>
)
}
keyExtractor={(item) => item.id}
numColumns={2}
showsVerticalScrollIndicator={false}
ListHeaderComponent={(props) => <ViewTop />}
ListFooterComponent={(props) => <ViewBottom />}
/>
)}
</>
);
};