3
respostas

[Dúvida] Não consigo deletar o colaborador

Não sei o que está acontecendo se coloco um console.log para verificar se está recebendo a id correta do colaborador aparece certo, mas não faz o filter ou não seta, o setColaboradores está funcionando, pois adiciona um novo colaborador, mas parece que só não faz o filter. Já copiei o código do github e colei no meu e não vai.


  const [colaboradores, setColaboradores] = useState(inicial)
  
 function deletarColaborador(id) {
    setColaboradores(colaboradores.filter(colaborador => colaborador.id !== id));
  }

Colaborador/Index.js:

import { IoCloseCircle } from "react-icons/io5";

import './Colaborador.css'

const Colaborador = ({colaborador, corDeFundo, aoDeletar}) => {
    
    return (
        <div className='colaborador' onClick={aoDeletar}>
            <IoCloseCircle 
                size={25} 
                className='deletar' 
                onClick={() => aoDeletar(colaborador.id)}
            />
            <div className='cabecalho' style={{backgroundColor: corDeFundo}}>
                    <img src={colaborador.imagem} alt={colaborador.nome} />
            </div>
            <div className='rodape'>
                <h4>{colaborador.nome}</h4>
                <h5>{colaborador.cargo}</h5>
            </div>
        </div>

    )
}

export default Colaborador

Time/index.js:

import Colaborador from '../Colaborador'
import './Time.css'
import hexToRgba from 'hex-to-rgba';

const Time = ({time, colaboradores, aoDeletar, mudarCor}) => {
    return (
        colaboradores.length > 0 && <section className='time' style={{ backgroundImage: 'url(/imagens/fundo.png)', backgroundColor: hexToRgba(time.cor,'0.75') }}>
            <input onChange={evento => mudarCor(evento.target.value, time.id)} value={time.cor} type='color' className='input-cor' />
            <h3 style={{ borderColor: time.cor }}>{time.nome}</h3>
            <div className='colaboradores'>
                {colaboradores.map((colaborador, indice) => {
                    return (<Colaborador key={indice} colaborador={colaborador} corDeFundo={time.cor} aoDeletar={aoDeletar} 
                    />)
                })}
            </div>
        </section>
    )
}

export default Time

App.js (apaguei alguns colaboradores de inicial, para caber no máx de caracteres aqui):

import { useState } from 'react';
import Banner from './componentes/Banner';
import Formulario from './componentes/Formulario';
import Time from './componentes/Time';
import Rodape from './componentes/Rodape';
import { v4 as uuidv4 } from 'uuid';

function App() {
  const [times, setTimes] = useState([
    {
      id: uuidv4(),
      nome: 'Programação',
      cor: '#57C278'
    },
    {
      id: uuidv4(),
      nome: 'Front-End',
      cor: '#82CFFA'
    },
    {
      id: uuidv4(),
      nome: 'Data Science',
      cor: '#A6D157'
    },
    {
      id: uuidv4(),
      nome: 'Devops',
      cor: '#E06B69'
    },
    {
      id: uuidv4(),
      nome: 'UX e Design',
      cor: '#DB6EBF'
    },
    {
      id: uuidv4(),
      nome: 'Mobile',
      cor: '#FFBA05'
    },
    {
      id: uuidv4(),
      nome: 'Inovação e Gestão',
      cor: '#FF8A29'
    },
  ])

  const inicial = [
    {
      id: uuidv4(),
      nome: 'JULIANA AMOASEI',
      cargo: 'Desenvolvedora de software e instrutora',
      imagem: 'https://www.alura.com.br/assets/img/lideres/juliana-amoasei.1647533644.jpeg',
      time: times[0].nome
    },
   
  ]

  const [colaboradores, setColaboradores] = useState(inicial)


  // function cadastrarTime({ nome, cor }) {
  //   setTimes([...times, { nome, cor, id: uuidv4() }])
  // }

  function deletarColaborador(id) {
    setColaboradores(colaboradores.filter(colaborador => colaborador.id !== id));
  }
  function mudarCorDoTime(cor, id) {
    setTimes(times.map(time => {
      if (time.id === id) {
        time.cor = cor
      }
      return time
    }))
  }
  return (
    <div className="App">
      <Banner />
      <Formulario times={times.map(time => time.nome)} aoColaboradorCadastrado={colaborador => setColaboradores([...colaboradores, colaborador])} />
      <section className="times">
        <h1>Minha organização</h1>
        {times.map((time, indice) =>
          <Time
            mudarCor={mudarCorDoTime}
            key={indice}
            time={time}
            colaboradores={
              colaboradores.filter(colaborador => colaborador.time === time.nome)}
            aoDeletar={deletarColaborador}
          />)}
      </section>

      <Rodape />
    </div>
  );
}

export default App;
3 respostas

Olá Augusto,

Reveja o código da function deletarColaborador... Tu está comparando se o id recebido é diferente (!==) do id dos colaboradores existentes na lista.

function deletarColaborador(id) {
    setColaboradores(colaboradores.filter(colaborador => colaborador.id !== id));
}

Entendo que o correto seja comparar se é idêntico (=== ou ==) e assim eliminar o elemento da lista.

Bom dia Robson, a verificação é diferente para que permaneça apenas os diferentes do id passado na nova lista, verifiquei uma solução aqui no fórum que foi colocar esse filter dentro de uma arrow function desse modo:

 function deletarColaborador(id){
    setColaboradores(colaboradores => (colaboradores.filter(colaborador => colaborador.id !== id)));
  }