Wpis z mikrobloga

Mamy może na wykopie jakichś ekspertów od Electrona? Tak siedzę nad tym i nie mam pomysłu w jaki sposób rozwiązać kwestię komunikacji / reakcji okna "A" na zdarzenie w oknie "B". Stworzyłem sobie klasę Window, która ma pochodne MainWindow i AuthWindow. Chciałbym, żeby zarządzanie nimi odbywało się w jakiejś głównej klasie (Application), która działa na app.on('ready').

Przypuśćmy sytuację: Ktoś uruchamia aplikację. Wyświetla mu się okno MainWindow, gdzie klika przycisk "Zaloguj z Google". Okno MainWindow zostaje ukryte i wyświetla mu się okno AuthWindow, gdzie musi wyrazić zgodę na korzystanie z konta Google. Po odpowiedzi od Google wyświetla mu się ponownie MainWindow, a AuthWindow zostaje zamknięte.

Reakcję na kliknięcie przycisku można rozwiązać za pomocą eventu ipc (i wtedy też ukryć MainWindow i stworzyć AuthWindow). Ale co ze zdarzeniami typu 'close', 'ready-to-show', danego okna?
W tej głównej klasie ciężko byłoby nasłuchiwać na event this.authWindow.window.on('close', () => this.mainWindow.show()), skoro this.authWindow.window byłoby niezdefiniowane w momencie uruchamiania aplikacji.

Teoretycznie mogę do każdego obiektu klasy z oknem przekazać this głównej klasy, która byłaby rozszerzeniem EventEmittera. Wtedy w klasie z oknem mógłbym zrobić coś w stylu this.window.on('close', () => this.app.emit('close-authWindow')), by następnie w głównej klasie obsłużyć this.on('close-authWindow', () => this.mainWindow.show()).

Ewentualnie klasy Window mogłyby być rozszerzeniem EventEmittera, tworzyć ich instancje już na starcie aplikacji (żeby móc nasłuchiwać na wysyłane przez te eventy; wtedy w klasie okna this.window.on('close', () => this.emit('close-authWindow))), a dopiero w jakiejś funkcji init() tworzyć electronowe BrowserWindow.

Tylko czy którekolwiek z tych rozwiązań ma sens i jest w ogóle poprawne? Może w ogóle powinno to być rozwiązane jakoś kompletnie inaczej? Tylko jak?

#webdev #nodejs #javascript