📂 Struttura del Progetto — Electron Barcode App
L’applicazione Electron Barcode App è una desktop app multipiattaforma sviluppata con Angular come frontend e Electron come wrapper per la distribuzione.
La struttura è divisa in due livelli principali:
- Root (Electron layer): configurazione e avvio della finestra desktop (
main.js,preload.js); src/(Angular app): codice applicativo della web app.
⚡ Electron Layer
Nella root del progetto troviamo i file specifici di Electron:
-
main.js- Entry point del processo main di Electron.
- Crea la
BrowserWindowe carica l’index.htmlbuildato da Angular. - Configura la comunicazione IPC con il renderer:
print-action: riceve i dati per la stampa e li invia alla stampante.add-printer: comunica alla UI eventuali aggiornamenti stampanti.
- Abilita
preload.jsconcontextIsolation.
-
preload.js- Funziona da ponte sicuro tra il main process e Angular.
- Espone in
window.electronAPI:printAction({ printerIp, printerPort, message }): invia messaggi di stampa al main.addPrinter(callback): sottoscrizione a eventi di configurazione stampante.
-
File di configurazione principali
package.json: definisce dipendenze (Electron, Angular, ecc.) e script di avvio.tsconfig.json: configurazione TypeScript.angular.json: configurazione build Angular.
🧩 Angular Layer (/src)
Dentro la cartella src risiede la classica struttura di un progetto Angular:
src/
├── app/ # Root Angular component
├── assets/ # Asset statici (icone, immagini, ecc.)
├── authenticationStore/ # Gestione autenticazione (NgRx store/effects)
├── components/ # Componenti condivisi
│ └── app-topbar/ # Barra superiore comune
├── environments/ # Configurazioni ambienti (dev/prod)
├── homepage/ # Schermata principale con wizard dei lotti
│ ├── components/ # Sottocomponenti specifici (es. add-dispenser)
│ └── store/ # Stato locale con NgRx/Signals
├── login/ # Modulo login (form autenticazione)
├── modules/ # Routing e moduli Angular
├── services/ # Servizi globali (printer, popup, backend)
├── store/ # Store condivisi (gestione dispenser, update-lot)
├── update-dispenser-lot/ # Flusso dedicato alla modifica e ristampa lotti
├── main.ts # Bootstrap dell’app Angular
├── styles.scss # Stili globali
└── typings.d.ts # Tipizzazioni globali per Electron API
📌 File chiave Angular
-
main.ts- Avvio Angular, bootstrap di AppModule.
-
typings.d.ts-
Estende l’interfaccia Window dichiarando electronAPI.
-
Consente l’autocompletamento TypeScript quando Angular invoca API di Electron.
-
-
app/
- Contiene il AppComponent, root container con
<router-outlet>.
- Contiene il AppComponent, root container con
-
components/app-topbar/
-
Barra superiore persistente.
-
Mostra configurazione stampante, controlli globali e navigazione.
-
-
homepage/
-
Feature principale per creazione e gestione lotti dispenser.
-
Flusso guidato a più step:
-
NEW_LOT: creazione nuovo lotto.
-
ADD_DISPENSER_SERIAL: aggiunta seriali dispenser.
-
RECAP_PAGE: riepilogo e invio in stampa.
-
-
Store dedicato (dispenserLot.store.ts) con gestione in locale (localStorage).
-
-
update-dispenser-lot/
-
Gestione modifica lotti esistenti.
-
Permette ristampa etichette e aggiornamento informazioni.
-
-
services/
-
printer.service.ts: interfaccia Angular → Electron → stampante.
-
popup.service.ts: gestione messaggi e notifiche UI.
-
backend.service.ts (se presente): API HTTP verso servizi remoti.
-
-
authenticationStore/
- Gestisce autenticazione e sessione con NgRx Effects e Selectors.
🔄 Integrazione Angular + Electron
-
Angular genera la build (dist/).
-
Electron (main.js) apre index.html della build in una BrowserWindow.
-
Preload (preload.js) espone API sicure (window.electronAPI).
-
Angular services (es. PrinterService) invocano queste API → IPC verso main.js.
-
Main.js esegue l’azione (es. invio TCP alla stampante) e opzionalmente invia risposta al renderer.
🛠️ Tecniche di sviluppo
-
Gestione stato: NgRx Store + effetti; nei nuovi componenti introdotti Signals.
-
Osservabili: convenzione variabile$ per proprietà Observable.
-
Naming conventions:
-
nomeVariabile
-
nomeFunzione()
-
NomeClasse
-
NOME_COSTANTE
-
👉 In sintesi:
Il progetto è una desktop app Angular/Electron per la gestione di lotti dispenser e la stampa etichette. Electron fornisce il wrapper desktop e la comunicazione con le stampanti, mentre Angular gestisce la logica applicativa, UI e flussi di business.