Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

O que é mais benéfico? Criar uma pasta ou um arquivo que abriga funcionalidades?

Eu gostaria de saber o que é melhor para o projeto, criar uma pasta que abriga, por exemplo, todos os arquivos de hooks (ou arquivos de interfaces, funções, etc) ou criar um arquivo único para abrigar todos os hooks?

Pasta de hooks com dois arquivos ponto ts que são hooks ou Pasta de hooks com um arquivo ponto ts que abriga dois hooks

hooks.ts:

import { useSetRecoilState } from "recoil";
import { IEvento } from "../interfaces/IEvento";
import { estadoListaDeEventos } from "../state/atom";
import { obterId } from "../util";

export const useAtualizarEvento = () => {
  const setListaDeEventos = useSetRecoilState<IEvento[]>(estadoListaDeEventos)
  return (evento: IEvento) => {
    return setListaDeEventos(listaAntiga => {
      const indice = listaAntiga.findIndex(evt => evt.id === evento.id)
      return [...listaAntiga.slice(0, indice), evento, ...listaAntiga.slice(indice + 1)]
    })
  }
}

export const useAdicionarEventos = () => {
    const setListaDeEventos = useSetRecoilState<IEvento[]>(estadoListaDeEventos)
    return (evento: IEvento) => {
        const hoje = new Date()
        if (evento.inicio < hoje) {
            throw new Error('Eventos não podem ser cadastrados com data menor do que a atual')
        }
        evento.id = obterId()
        return setListaDeEventos(listaAntiga => [...listaAntiga, evento])
    }
}

useAtualizarEvento.ts:

import { useSetRecoilState } from "recoil";
import { IEvento } from "../interfaces/IEvento";
import { estadoListaDeEventos } from "../state/atom";

export const useAtualizarEvento = () => {
  const setListaDeEventos = useSetRecoilState<IEvento[]>(estadoListaDeEventos)
  return (evento: IEvento) => {
    return setListaDeEventos(listaAntiga => {
      const indice = listaAntiga.findIndex(evt => evt.id === evento.id)
      return [...listaAntiga.slice(0, indice), evento, ...listaAntiga.slice(indice + 1)]
    })
  }
}

useAdicionarEvento.ts:

import { useSetRecoilState } from "recoil";
import { IEvento } from "../interfaces/IEvento";
import { estadoListaDeEventos } from "../state/atom";
import { obterId } from "../util";

export const useAdicionarEventos = () => {
    const setListaDeEventos = useSetRecoilState<IEvento[]>(estadoListaDeEventos)
    return (evento: IEvento) => {
        const hoje = new Date()
        if (evento.inicio < hoje) {
            throw new Error('Eventos não podem ser cadastrados com data menor do que a atual')
        }
        evento.id = obterId()
        return setListaDeEventos(listaAntiga => [...listaAntiga, evento])
    }   
}
2 respostas
solução!

Salve, Bruno!

A resposta aqui é aquela padrão: depende :)

O que temos de levar em conta aqui é:

  • queremos ter um arquivo único, porém com vários hooks e mutiplas responsabilidades?
  • ou queremos ter mais arquivos, porém com bem menos linhas e com responsabilidade única?

Esse é um estilo de código que acaba variando bastante de empresa pra empresa e projeto pra projeto.

Obrigado Vinicios!