import { execAsync, bind } from "astal"; import Network from "gi://AstalNetwork"; import { App, Gtk } from "astal/gtk4"; import { NetworkItem } from "./modules/NetworkItem"; import { PasswordDialog } from "./modules/PasswordDialog"; import { availableNetworks, savedNetworks, activeNetwork, showPasswordDialog, scanNetworks, getSavedNetworks, disconnectNetwork, forgetNetwork, isExpanded, refreshIntervalId, } from "./networkinghelper"; // Main WiFi Box component export const WiFiBox = () => { const network = Network.get_default(); // Initial scan when component is first used setTimeout(() => { scanNetworks(); getSavedNetworks(); }, 100); return ( {/* WiFi Toggle Header */} {/* Networks List Revealer */} { const clearScanInterval = () => { if (refreshIntervalId.get()) { clearInterval( parseInt( '' + refreshIntervalId.get() )); refreshIntervalId.set(null); } }; bind(isExpanded).subscribe((expanded) => { // Clear existing interval clearScanInterval(); if (expanded) { // Scan networks network.wifi?.scan(); // Set up new interval if WiFi is enabled if (network.wifi?.enabled) { refreshIntervalId.set( setInterval(() => { scanNetworks(); getSavedNetworks(); print("updated"); }, 10000), ); } } else { // Apply revealer bug fix when collapsed App.toggle_window("system-menu"); App.toggle_window("system-menu"); } }); // Monitor window toggling const windowListener = App.connect("window-toggled", (_, window) => { if (window.name === "system-menu" && isExpanded.get()) { isExpanded.set(false); } }); // Clean up resources when component is destroyed return () => { App.disconnect(windowListener); clearScanInterval(); }; }} > v )}> ); };