import { bind, execAsync, Variable } from "astal";
import { Gtk } from "astal/gtk3";
import AstalNetwork from "gi://AstalNetwork";
import PopdownWindow from "../../widgets/popdownwindow";
const Network = (accessPoint: AstalNetwork.AccessPoint) => (
);
const List = () => {
const { wifi } = AstalNetwork.get_default();
const children = Variable.derive([bind(wifi, "accessPoints"), bind(wifi, "activeAccessPoint")], (aps, ac) =>
aps
.filter(a => a.ssid)
.sort((a, b) => (a === ac ? -1 : b.strength - a.strength))
.map(Network)
);
return (
children.drop()}>
{bind(children)}
);
};
export default () => {
const network = AstalNetwork.get_default();
const label = Variable("");
const update = () => {
if (network.primary === AstalNetwork.Primary.WIFI) label.set(network.wifi.ssid ?? "Disconnected");
else if (network.primary === AstalNetwork.Primary.WIRED) label.set(`Ethernet (${network.wired.speed})`);
else label.set("No Wifi");
};
network.connect("notify::primary", update);
network.get_wifi()?.connect("notify::ssid", update);
network.get_wired()?.connect("notify::speed", update);
update();
return (
a.length)}
countLabel={bind(label)}
headerButtons={[
{
label: bind(network.wifi, "enabled").as(p => (p ? "Disable" : "Enable")),
onClicked: () => (network.wifi.enabled = !network.wifi.enabled),
},
{
label: "Scan",
onClicked: () => network.wifi.scan(),
enabled: bind(network.wifi, "scanning"),
},
]}
emptyIcon="wifi_off"
emptyLabel={bind(network.wifi, "enabled").as(p => (p ? "No available networks" : "Wifi is off"))}
list={
}
/>
);
};