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

[Sugestão] Desafio Alugames

Fiz o projeto de alugar e coloquei também um limitador de jogos alugados por vez, assim quem for alugar mais que 1 jogo precisa devolver oque ja tem antes.

let jogoAlugadoAtivo = false;

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


if(imagem.classList.contains('dashboard__item__img--rented')){
    imagem.classList.remove('dashboard__item__img--rented');
    botao.classList.remove('dashboard__item__button--return');
    botao.innerText = "Alugar";

    jogoAlugadoAtivo = false;
    alert ("Jogo devolvido com sucesso!");
} else { 
    if (jogoAlugadoAtivo) {
        alert("Você possui um jogo alugado!, devolva-o antes de alugar outro!")
        return;
    }
    imagem.classList.add('dashboard__item__img--rented');
    botao.classList.add('dashboard__item__button--return'); 
    botao.innerText = "Devolver";

    jogoAlugadoAtivo = true;
    alert("Jogo alugado com sucesso!");
}

}

é preciso alterar no HTML também se não toda vez que a pagina for resetada o takenoko fica meio bugado

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AluGames</title>
    <link rel="stylesheet" href="css/main.css">
</head>

<body class="body">
    <main class="container main">
        <img src="img/logo.svg" alt="Logo AluGames">
        <section class="divisor">
            <div class="divisor__line"></div>
            <img src="img/fade_bar.svg" alt="Visual bar" class="divisor__bar">
            <div class="divisor__line"></div>
        </section>
        <h1 class="page-title">Aluguel de <span class="page-title__emphasis">boardgames</span></h1>
        <section class="dashboard">
            <ul class="dashboard__items">
                <li class="dashboard__items__item" id="game-1">
                    <div class="dashboard__item__img">
                        <img src="img/monopoly.png" alt="Capa jogo Monopoly">
                    </div>
                    <p class="dashboard__item__name">Monopoly</p>
                    <a onclick="alterarStatus(1)" href="#" class="dashboard__item__button">Alugar</a>
                </li>
                <li class="dashboard__items__item" id="game-2">
                    <div class="dashboard__item__img">
                        <img src="img/ticket_to_ride.png" alt="Capa jogo Ticket to Ride">
                    </div>
                    <p class="dashboard__item__name">Ticket to Ride</p>
                    <a onclick="alterarStatus(2)" href="#" class="dashboard__item__button">Alugar</a>
                </li>
                <li class="dashboard__items__item" id="game-3">
                    <div class="dashboard__item__img">
                        <img src="img/takenoko.png" alt="Capa jogo Takenoko">
                    </div>
                    <p class="dashboard__item__name">Takenoko</p>
                    <a onclick="alterarStatus(3)" href="#" class="dashboard__item__button">Alugar</a>
                </li>
            </ul>
        </section>
        <img src="img/hachuras.svg" alt="Visual hachuras" class="hachuras">
    </main>

    <script src="js/app.js"></script>
</body>

</html>

(não sei se essaideia foi feita no proprio curso ou por mais alguem, fiz ela depois de assitir a segunda aula)

1 resposta
solução!

Olá, Henri! Como vai?

Que legal que você está se aventurando em criar funcionalidades adicionais para o projeto de aluguel de jogos! A ideia de limitar a quantidade de jogos alugados por vez é muito interessante e pode ser bastante útil em um cenário real.

Você já implementou a lógica para verificar se um jogo já está alugado antes de permitir que outro seja alugado. Isso é ótimo! No entanto, você mencionou que, ao resetar a página, o estado do jogo alugado se perde. Isso acontece porque o estado jogoAlugadoAtivo está sendo armazenado apenas em memória, e não é persistido quando a página é recarregada.

Para resolver isso, você pode usar o localStorage do navegador para armazenar o estado do jogo alugado. Aqui está um exemplo de como você pode modificar seu código para usar o localStorage:

let jogoAlugadoAtivo = localStorage.getItem('jogoAlugadoAtivo') === 'true';

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

    if (imagem.classList.contains('dashboard__item__img--rented')) {
        imagem.classList.remove('dashboard__item__img--rented');
        botao.classList.remove('dashboard__item__button--return');
        botao.innerText = "Alugar";

        jogoAlugadoAtivo = false;
        localStorage.setItem('jogoAlugadoAtivo', 'false');
        alert("Jogo devolvido com sucesso!");
    } else {
        if (jogoAlugadoAtivo) {
            alert("Você possui um jogo alugado!, devolva-o antes de alugar outro!");
            return;
        }
        imagem.classList.add('dashboard__item__img--rented');
        botao.classList.add('dashboard__item__button--return');
        botao.innerText = "Devolver";

        jogoAlugadoAtivo = true;
        localStorage.setItem('jogoAlugadoAtivo', 'true');
        alert("Jogo alugado com sucesso!");
    }
}

Com essa alteração, o estado do jogo alugado será salvo no localStorage, e mesmo que a página seja recarregada, o estado será mantido. Lembre-se de que o localStorage armazena dados como strings, por isso convertemos o valor booleano para string ao armazenar e vice-versa ao recuperar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.