talentree / navigator

Giochiamo a diventare provetti timonieri
3 stars 0 forks source link

Navigator by Talentree

Per avviare sviluppo e servire l'applicazione digitare: npm start

Configurazione

Il progetto utilizza alcune librerie a supporto dello sviluppo.

Nota installare lite-server globalmente: npm install -g lite-server

cose da fare

Comandi utili

How it works - Lit-Element

Lit-element è la libreria principale del progetto. Permette di creare dei tag HTML personalizzati. Un esempio si trova in index.html:

<header-talentree></header-talentree>

Il browser, quando troverà un tag "personalizzato", lo sostituirà con il relativo html, che si trova all'interno del metodo render() di ogni schermata.
Per poter associare un tag "custom" al relativo codice html, è necessario effettuare la sua dichiarazione nel main.js:

customElements.define('header-talentree', HeaderTalentree);

In questa riga si associa il tag <header-talentree> con la relativa classe, HeaderTalentree.
All'interno di questa classe troviamo due soli metodi:

How it works - Rollup e lite-server

Rollup è il plugin che unisce tutto il codice javascript sche trova in src in un unico file, ovvero bundle.js nella cartella dist. Aprendo il file bundle.js, è infatti possibile trovare tutto il code javascript scritto da noi. Esso però non è ancora visibile sul browser. E' necessario infatti lanciare lite-server.
Lite-server, quando avviato, crea un server all'indirizzo di default localhost:3000. Il browser aprirà il file index.html, trovando il collegamento a bundle.js (è collegato da un tag script) e avviando la nostra applicazione.

Sia il compilatore (rollup) che lite-server devono essere avviati tramite prompt dei comandi. Attraverso il comando npm start si lancia prima rollup e poi lite-server.
Rollup, inoltre, aggiornerà automaticamente il bundle.js ad ogni nostra modifica, e ugualmente lite-server aggiornerà la pagina web ad ogni cambiamento del bundle.js o di index.html

How it works - Bulma

Bulma è una libreria per gestire la grafica dell'applicazione senza dover scrivere righe di CSS. Funziona attraverso le classi degli elementi HTML. La documentazione si trova qui Bulma

Cose da sapere

Cominciare con le modifiche

How it works - Login utente

How it works - Accesso alla console

Vedi login-console.js per riferimenti al codice
I due input si riferiscono al nome della partita a cui voglio connettermi e al nome della squadra di cui voglio controllare la nave.
Gli input aggiornano ad ogni digitazione le variabili contenenti le due credenziali tramite l'evento

@input=${e => /*codice da eseguire*/}

Analogamente, la funzione del login viene chiamata quando si clicca il pulsante:

@click=${(e) => this.login(e)}

La funzione controlla se esiste la partita specificata e se esiste una squadra con il nome inserito. Ottiene quindi la referenza (il percorso o path) per poter accedere ai dati della nave sul database.
Il documento della nave è infatti separato da quello della partita per i seguenti motivi:
1- Chi controlla una nave non deve poter modificare i dati generali della partita o i dati delle altre navi
2- Le query ("ricerche" o "interrogazioni") su degli array (per tutte le navi di una partita) in Firebase sono molto complesse da implementare
3- Non è possibile modificare un elemento di un array (quindi i dati di una certa nave) su Firestore senza modificare tutto l'array. Ciò significherebbe dover riscrivere i dati delle altre navi e non rispettare il punto 1

Una volta che è stata trovata la nave corretta, si segna la referenza nella variabile referenceNaveDaControllare in utils.js. Per modificare questa variabile bisogna utilizzare il metodo setReferenceNaveDaControllare() per non dare errore al compilatore. La schermata della console utilizzerà questa variabile per accedere ai dati della nave.

How it works - Header

Vedi header.js per riferimenti al codice
La schermata dell'header è abbastanza complessa. Si utilizza una variabile, infoScheda, Per mostrare all'utente in quale punto si trovi dell'applicazione. Questa variabile viene modificata da utils.js al momento del cambio di schermata. Per rendere visibili le modifiche, è però necessario riaggiornare l'header attraverso il metodo resetHeader() in utils.js

La stessa procedura si applica quando l'utente cambia il suo stato di login: all'interno della funzione onAuthStateChanged() del main.js si chiama il metodo per tornare al menù principale. Questo a sua volta chiamerà resetHeader. All'interno del metodo render() si controlla se l'utente è connesso. A seconda che l'utente abbia effettuato l'accesso o meno, la variabile displayAutenticazione mostrerà il tasto per disconnettere l'utente o per effettuare l'accesso.