Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

DESAFIO 1 e 2 + DÚVIDA

Olá, tentei fazer a lógica sozinha após capturar as informações para as variáveis com os professores.

Além dos desafios propostos, eu também tentei impedir de alugar + de 1 jogo simultaneamente. Coloquei um alert com o nome do jogo já alugado informando que esse deve ser devolvido antes de pegar outro.

Porém como um jogo já inicializa alugado, não consegui fazer com que a minha lógica pensada fizesse a pessoa devolver ele antes de alugar outro jogo. O impedimento só passa a valer quando o usuário clica para alugar outro jogo...

""Consegui"" fazer alterando a variável inicial algumJogoAlugado recebendo true, porém eu não consegui informar o nome do Takenoko ao mandar o alert dizendo para devolver.

Caso tenham alguma sugestão de como resolver esse problema, ficaria agradecida

let algumJogoAlugado = false;
let nomeDoJogoAlugado = '';

function alterarStatus(id) {
    let gameClicado = document.getElementById(`game-${id}`);
    let imagem = gameClicado.querySelector('.dashboard__item__img')
    let botao = gameClicado.querySelector('.dashboard__item__button');
    let nomeJogo = gameClicado.querySelector('.dashboard__item__name').textContent;

    let botoes = document.getElementsByClassName('dashboard__item__button');

    if(botao.classList.contains('dashboard__item__button--return')){
        //Devolução de jogo:
        confirm(`Tem certeza que você deseja fazer a devolução de ${nomeDoJogoAlugado}?`)
        botao.classList.remove('dashboard__item__button--return');
        botao.classList.add('dashboard__item__button')
        imagem.classList.remove('dashboard__item__img--rented');
        botao.innerHTML = 'Alugar';

        //Mudança do estado do jogo:
        algumJogoAlugado = false
        nomeDoJogoAlugado = '';

        //Habilita todos os botoes de aluguel;
        for(let i = 0; i < botoes.length; i++){
            botoes[i].disabled = false
        }

    } else if(botao.classList.contains('dashboard__item__button')){
        if(algumJogoAlugado){
            alert(`O jogo ${nomeDoJogoAlugado} está alugado! Devolva para poder alugar outro.`)
        } else{
        //Aluguel de jogo:
        botao.classList.add('dashboard__item__button--return');
        imagem.classList.add('dashboard__item__img--rented');
        botao.innerHTML = 'Devolver';

         //Mudança do estado do jogo:
         algumJogoAlugado = true;
         nomeDoJogoAlugado = nomeJogo;

         //Desabilita botões de aluguel:
         for(let i = 0; i < botoes.length; i++){
             botoes[i].disabled = true
         }
        }
    } 

    quantidadeDeJogosAlugados()
}


function quantidadeDeJogosAlugados(){
    let jogosAlugados = document.querySelectorAll('.dashboard__item__img--rented').length;
    console.log(jogosAlugados);
}
1 resposta
solução!

Olá! Que bom que você está se desafiando e tentando resolver os problemas por conta própria. Vamos tentar resolver essa questão juntos.

Pelo que entendi, o problema está em inicializar um jogo já alugado e, ao mesmo tempo, conseguir exibir o nome desse jogo no alert quando o usuário tenta alugar outro jogo. Para isso, precisamos garantir que a variável nomeDoJogoAlugado seja inicializada com o nome do jogo já alugado.

Uma maneira de fazer isso é definir o nome do jogo alugado no início do seu código, antes de qualquer interação do usuário. Vou mostrar como você pode fazer isso:

let algumJogoAlugado = true;  // Inicializa como true, indicando que há um jogo alugado
let nomeDoJogoAlugado = 'Takenoko';  // Nome do jogo já alugado

function alterarStatus(id) {
    let gameClicado = document.getElementById(`game-${id}`);
    let imagem = gameClicado.querySelector('.dashboard__item__img');
    let botao = gameClicado.querySelector('.dashboard__item__button');
    let nomeJogo = gameClicado.querySelector('.dashboard__item__name').textContent;

    let botoes = document.getElementsByClassName('dashboard__item__button');

    if(botao.classList.contains('dashboard__item__button--return')){
        // Devolução de jogo:
        confirm(`Tem certeza que você deseja fazer a devolução de ${nomeDoJogoAlugado}?`);
        botao.classList.remove('dashboard__item__button--return');
        botao.classList.add('dashboard__item__button');
        imagem.classList.remove('dashboard__item__img--rented');
        botao.innerHTML = 'Alugar';

        // Mudança do estado do jogo:
        algumJogoAlugado = false;
        nomeDoJogoAlugado = '';

        // Habilita todos os botoes de aluguel;
        for(let i = 0; i < botoes.length; i++){
            botoes[i].disabled = false;
        }

    } else if(botao.classList.contains('dashboard__item__button')){
        if(algumJogoAlugado){
            alert(`O jogo ${nomeDoJogoAlugado} está alugado! Devolva para poder alugar outro.`);
        } else{
            // Aluguel de jogo:
            botao.classList.add('dashboard__item__button--return');
            imagem.classList.add('dashboard__item__img--rented');
            botao.innerHTML = 'Devolver';

            // Mudança do estado do jogo:
            algumJogoAlugado = true;
            nomeDoJogoAlugado = nomeJogo;

            // Desabilita botões de aluguel:
            for(let i = 0; i < botoes.length; i++){
                botoes[i].disabled = true;
            }
        }
    } 

    quantidadeDeJogosAlugados();
}

function quantidadeDeJogosAlugados(){
    let jogosAlugados = document.querySelectorAll('.dashboard__item__img--rented').length;
    console.log(jogosAlugados);
}

Com essas alterações, a variável nomeDoJogoAlugado será inicializada com o nome "Takenoko", e o estado algumJogoAlugado será true, indicando que um jogo já está alugado. Assim, quando o usuário tentar alugar outro jogo, o alert exibirá o nome "Takenoko" corretamente.

Espero ter ajudado e bons estudos!