From 2d1d89911e3e6ea94f2e1b6ac752388283328991 Mon Sep 17 00:00:00 2001 From: Dmitriy Petrov Date: Sun, 12 Jul 2026 12:47:37 +0300 Subject: [PATCH] Animate Harbor brand swap arrow and bump client versions --- src/shared/versions.js | 4 ++-- src/web/components/ClientOverviewPage.jsx | 17 +++++++++++++++-- src/web/styles.css | 23 +++-------------------- 3 files changed, 20 insertions(+), 24 deletions(-) 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 -