diff --git a/src/shared/versions.js b/src/shared/versions.js
index e82942c..af38c95 100644
--- a/src/shared/versions.js
+++ b/src/shared/versions.js
@@ -1,6 +1,6 @@
export const HARBOR_VERSIONS = Object.freeze({
- macClient: '0.7.7',
- gatewayClient: '0.7.7',
+ macClient: '0.7.8',
+ gatewayClient: '0.7.8',
gatewayBackend: '0.7.0',
});
diff --git a/src/web/components/ClientOverviewPage.jsx b/src/web/components/ClientOverviewPage.jsx
index 328ce55..36d53e3 100644
--- a/src/web/components/ClientOverviewPage.jsx
+++ b/src/web/components/ClientOverviewPage.jsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useRef, useState } from 'react';
+import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';
import { flushSync } from 'react-dom';
import { api } from '../api.js';
import {
@@ -483,13 +483,21 @@ function AnimatedSeconds({ value, padded = true }) {
function HarborBrand({ isGateway, gatewayAvailable, gatewayDirect, blocked, onSetGatewayAuto }) {
const [modeAnimating, setModeAnimating] = useState(false);
+ const [arrowTurns, setArrowTurns] = useState(gatewayDirect ? 0.5 : 0);
const stopModeAnimationRef = useRef(false);
+ const previousGatewayDirectRef = useRef(gatewayDirect);
const product = isGateway ? 'Gateway' : 'Connect';
const switchable = !isGateway && gatewayAvailable;
const label = gatewayDirect
? 'Игнорировать Harbor Gateway и использовать локальный VPN'
: 'Использовать обнаруженный Harbor Gateway';
+ useLayoutEffect(() => {
+ if (previousGatewayDirectRef.current === gatewayDirect) return;
+ previousGatewayDirectRef.current = gatewayDirect;
+ setArrowTurns((turns) => turns + 0.5);
+ }, [gatewayDirect]);
+
function startModeAnimation() {
stopModeAnimationRef.current = false;
setModeAnimating(true);
@@ -517,7 +525,12 @@ function HarborBrand({ isGateway, gatewayAvailable, gatewayDirect, blocked, onSe
Connect
Gateway
-