1

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 />}
        />
      )}
    </>
  );
};
Henry
  • 11
  • 2

0 Answers0