Solución ejercicio bootstrap

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/bootstrap.css">
    <!-- Mis estilos van después del bootstrap -->
    <link rel="stylesheet" href="css/estilos.css">

</head>

<body>
    <!-- Utilizamos el card de w3school ¡copiado!-->
    <div class="d-flex ">
        <div class="card" style="width:400px">
            <div class="card-body">
                <h4 id="user_name" class="card-title">Jane Doe</h4>
                <p id="user_info" class="card-text">Some example text some example text. Jane Doe is an architect and
                    engineer</p>
                <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal">
                    Añadir tarea
                </button>
                <button class="btn btn-info " data-bs-toggle="collapse" data-bs-target="#demo">Ver tareas <span
                        id="num_tareas" class="badge bg-danger">-</span></button>
            </div>
            <img id="user_image" class="card-img-bottom" src="../bootstrap4/img_avatar6.png" alt="Card image"
                style="width:100%">
        </div>

        <div id="demo" class="collapse">
            <!--Utilizo la tabla para que quede más o menos bonito-->
            <table class="table table-striped m-4">
                <thead>
                    <tr>
                        <th>Tareas pendientes</th>
                        <!-- Tengo el id para borrar todas las tareas-->
                        <th> <button type="button" class="btn btn-danger" id="borrar_tareas">
                                Eliminar todas
                            </button></th>
                    </tr>
                </thead>
                <tbody id="lista_tareas">

                </tbody>
            </table>
        </div>
    </div>
    <!-- Utilizamos el Modal de w3school ¡copiado1 -->
    <div class="modal fade" id="myModal">
        <div class="modal-dialog  modal-xl modal-dialog-centered">
            <div class="modal-content">

                <!-- Modal Header -->
                <div class="modal-header">
                    <h4 class="modal-title">Tarea nueva</h4>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>

                <!-- El input tiene un id porque necesito el valor -->
                <div class="modal-body">
                    <input id="tarea" class="form-control " type="text" placeholder="Introduzca la tarea">
                </div>

                <!-- El boton de nueva tarea tiene un id por la misma razón -->
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-success" id="nueva_tarea">Añadir tarea</button>
                </div>

            </div>
        </div>
    </div>
    <!-- Aquí los scripts -->
    <script src="./js/bootstrap.bundle.js"></script>
    <script src="./js/script.js"></script>
</body>

</html>
// Todas las acciones las hago cuando se ha cargado la página
window.onload = function () {
    // recojo todos  los elementos con los que voy a trabajar
    let modal = document.getElementById("myModal");
    let nueva_tarea = document.getElementById("nueva_tarea");
    let tarea = document.getElementById("tarea");
    let lista_tareas = document.getElementById("lista_tareas");
    let num_tareas = document.getElementById("num_tareas");
    let borrar_tareas = document.getElementById("borrar_tareas");
    // Cuando pulsen borrar_tareas elimino todas las tareas
    // Cómo? Obtener tareas->Modificar tareas->guardar tareas->pintar tareas
    borrar_tareas.addEventListener("click", () => {
        // borrar tareas
        localStorage.setItem("tareas", "[]");
        // pintar tareas
        pintaTareas();
    });
    // Cuando pulsen nueva_tarea añado la tarea a la lista
    nueva_tarea.addEventListener("click", () => {
        // obtener tareas
        let tareas = getTareas();
        // modificar taras
        tareas.push(tarea.value);
        // guardar tareas
        setTareas(tareas);
        // Oculto el modal
        bootstrap.Modal.getInstance(modal).hide();
        // pintar tareas
        pintaTareas();
    })
    // Obtengo los datos de la api
    fetch("https://randomuser.me/api")
        .then(response => response.json())
        .then(resultado => {
            // Aqui 'resultado' tiene ya el  json convertido a variable, la podemos usar
            console.log(resultado);
            // Llamo a una función con el usuario devuelto
            pintaUsuario(resultado.results[0]);
        });
    // pinto las tareas al iniciar la página para que si refresco me pinte lo que hay
    pintaTareas();
    function pintaTareas() {
        // Recupera las tareas
        let tareas = getTareas();
        // Modifica el número del badge
        num_tareas.innerHTML = tareas.length;
        // Si no tengo tareas no muestro el botón
        if (tareas.length==0){
            borrar_tareas.classList.add("d-none")
        }else{
            borrar_tareas.classList.remove("d-none")
        }
        // Crea los elementos de la tabla de tareas, lo hago con map
        // A cada botón le pongo el indice de la tarea que quiero borrar
        // Cómo? con el segundo parámetro del map
        // lo guardo en un atributo especial del html que es el data-
        // En el dataset tendré un atributo idtarea que valdrá el índice de la tarea que quiero borrar
        lista_tareas.innerHTML = tareas.map((x, i) => "<tr><td>" + x + `</td><td><button data-idtarea="${i}" type="button" class="btn btn-danger btn-sm  borrar_tarea">
        Borrar
    </button></td></tr>`).join("");
        // A cada botón le añado el evento de borrar
        for (let boton of document.getElementsByClassName("borrar_tarea")) {
            boton.addEventListener("click", function () {
                // Obtengo la tarea
                let tareas = getTareas();
                // Modifico las tareas: yo en dataset.idtarea tengo el id de la tarea que quiero eliminar
                tareas = tareas.filter((x, i) => i != this.dataset.idtarea);
                // Guardo las tareas
                setTareas(tareas);
                // Pinto las tareas
                pintaTareas();
            })
        }
    }
}
function getTareas() {
    // Recupero las tareas del storage y las parseo del JSON
    let tareas = localStorage["tareas"] || "[]";
    tareas = JSON.parse(tareas);
    return tareas;
}
function setTareas(tareas) {
    // Lo guardo en el localstorage
    localStorage["tareas"] = JSON.stringify(tareas);
}
function pintaUsuario(usuario) {
    // Ponemos los datos en el card
    let nombre = document.getElementById("user_name");
    let email = document.getElementById("user_info");
    let foto = document.getElementById("user_image");

    // nombre.innerHTML = Object.values(usuario.name).join(" ");
    nombre.innerHTML = usuario.name.title + " " + usuario.name.first + " " + usuario.name.last;
    email.innerHTML = usuario.email;
    foto.src = usuario.picture.large;
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos