diff --git a/rust/agama-server/src/network/web.rs b/rust/agama-server/src/network/web.rs
index 5cc6744625..6375ff45d0 100644
--- a/rust/agama-server/src/network/web.rs
+++ b/rust/agama-server/src/network/web.rs
@@ -315,6 +315,12 @@ async fn connect(
.await
.map_err(|_| NetworkError::CannotApplyConfig)?;
+ state
+ .network
+ .apply()
+ .await
+ .map_err(|_| NetworkError::CannotApplyConfig)?;
+
Ok(StatusCode::NO_CONTENT)
}
@@ -341,6 +347,12 @@ async fn disconnect(
.await
.map_err(|_| NetworkError::CannotApplyConfig)?;
+ state
+ .network
+ .apply()
+ .await
+ .map_err(|_| NetworkError::CannotApplyConfig)?;
+
Ok(StatusCode::NO_CONTENT)
}
diff --git a/web/src/client/network/index.js b/web/src/client/network/index.js
index 5ded4036ac..a56bf51feb 100644
--- a/web/src/client/network/index.js
+++ b/web/src/client/network/index.js
@@ -225,7 +225,7 @@ class NetworkClient {
* @param {Connection} connection - connection to be activated
*/
async connectTo(connection) {
- return this.client.get(`/network/${connection.id}/connect`);
+ return this.client.get(`/network/connections/${connection.id}/connect`);
}
/**
@@ -234,7 +234,7 @@ class NetworkClient {
* @param {Connection} connection - connection to be activated
*/
async disconnect(connection) {
- return this.client.get(`/network/${connection.id}/disconnect`);
+ return this.client.get(`/network/connections/${connection.id}/disconnect`);
}
/**
diff --git a/web/src/components/network/WifiNetworkListItem.jsx b/web/src/components/network/WifiNetworkListItem.jsx
index 8fed500da0..f67a235997 100644
--- a/web/src/components/network/WifiNetworkListItem.jsx
+++ b/web/src/components/network/WifiNetworkListItem.jsx
@@ -95,7 +95,7 @@ function WifiNetworkListItem({ network, isSelected, isActive, onSelect, onCancel
{networkState(network.device?.state)}
{network.settings &&
- }
+ }
{isSelected && (!network.settings || network.error) &&
diff --git a/web/src/components/network/WifiNetworkMenu.jsx b/web/src/components/network/WifiNetworkMenu.jsx
index 06e22ed554..dd37b47722 100644
--- a/web/src/components/network/WifiNetworkMenu.jsx
+++ b/web/src/components/network/WifiNetworkMenu.jsx
@@ -31,7 +31,7 @@ const KebabToggle = ({ toggleRef, onClick }) => (
);
-export default function WifiNetworkMenu({ settings, position = "right" }) {
+export default function WifiNetworkMenu({ settings, position = "right", device, onConnect }) {
const client = useInstallerClient();
const [isOpen, setIsOpen] = useState(false);
const toggle = () => setIsOpen(!isOpen);
@@ -45,6 +45,27 @@ export default function WifiNetworkMenu({ settings, position = "right" }) {
position={position}
>
+ {!device &&
+ {
+ await client.network.connectTo(settings);
+ onConnect();
+ }}
+ icon={}
+ >
+ {/* TRANSLATORS: menu label, connect to the selected WiFi network */}
+ {_("Connect")}
+ }
+ {device &&
+ await client.network.disconnect(settings)}
+ icon={}
+ >
+ {/* TRANSLATORS: menu label, disconnect from the selected WiFi network */}
+ {_("Disconnect")}
+ }
{
@@ -139,7 +139,7 @@ function WifiSelector({ isOpen = false, onClose }) {
onSelectionCallback={(network) => {
switchSelectedNetwork(network);
if (network.settings && !network.device) {
- client.network.connectTo(network.settings);
+ client.connectTo(network.settings);
}
}}
onCancelSelectionCallback={() => switchSelectedNetwork(activeNetwork)}