summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOliver <oliver@mohlin.dev>2024-12-11 08:55:56 +0100
committerJoakim Hulthe <joakim.hulthe@mullvad.net>2024-12-18 15:12:17 +0100
commitb69ddb1e043acc0ef1d22d770e6b8c6eb613f0b2 (patch)
tree49a91b856cdabe3fe5f9ba7a7c624a213b91da2f
parent7cb8b8c16cbcb2938823294c1d6f78bab4040c9e (diff)
downloadmullvadvpn-b69ddb1e043acc0ef1d22d770e6b8c6eb613f0b2.tar.xz
mullvadvpn-b69ddb1e043acc0ef1d22d770e6b8c6eb613f0b2.zip
Display spinner when performing full disk access check
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/components/SplitTunnelingSettings.tsx48
1 files changed, 29 insertions, 19 deletions
diff --git a/desktop/packages/mullvad-vpn/src/renderer/components/SplitTunnelingSettings.tsx b/desktop/packages/mullvad-vpn/src/renderer/components/SplitTunnelingSettings.tsx
index 4070b7dba5..645eb09187 100644
--- a/desktop/packages/mullvad-vpn/src/renderer/components/SplitTunnelingSettings.tsx
+++ b/desktop/packages/mullvad-vpn/src/renderer/components/SplitTunnelingSettings.tsx
@@ -66,12 +66,10 @@ export default function SplitTunneling() {
</NavigationBar>
<StyledNavigationScrollbars ref={scrollbarsRef}>
- <Flex $flexDirection="column" $flex={1}>
- <PlatformSpecificSplitTunnelingSettings
- setBrowsing={setBrowsing}
- scrollToTop={scrollToTop}
- />
- </Flex>
+ <PlatformSpecificSplitTunnelingSettings
+ setBrowsing={setBrowsing}
+ scrollToTop={scrollToTop}
+ />
</StyledNavigationScrollbars>
</NavigationContainer>
</SettingsContainer>
@@ -325,6 +323,7 @@ export function SplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsPro
const [searchTerm, setSearchTerm] = useState('');
const [applications, setApplications] = useState<ISplitTunnelingApplication[]>();
+ const [loadingDiskPermissions, setLoadingDiskPermissions] = useState(false);
const [splitTunnelingAvailable, setSplitTunnelingAvailable] = useState(
window.env.platform === 'darwin' ? undefined : true,
);
@@ -332,8 +331,10 @@ export function SplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsPro
const splitTunnelingEnabled = splitTunnelingEnabledValue && (splitTunnelingAvailable ?? false);
const fetchNeedFullDiskPermissions = useCallback(async () => {
+ setLoadingDiskPermissions(true);
const needPermissions = await needFullDiskPermissions();
setSplitTunnelingAvailable(!needPermissions);
+ setLoadingDiskPermissions(false);
}, [needFullDiskPermissions]);
useEffect((): void | (() => void) => {
@@ -462,24 +463,33 @@ export function SplitTunnelingSettings(props: IPlatformSplitTunnelingSettingsPro
<HeaderTitle>{strings.splitTunneling}</HeaderTitle>
<Switch
isOn={splitTunnelingEnabled}
- disabled={!splitTunnelingAvailable}
+ disabled={!splitTunnelingAvailable || loadingDiskPermissions}
onChange={setSplitTunnelingState}
/>
</Flex>
- <MacOsSplitTunnelingAvailability
- needFullDiskPermissions={
- window.env.platform === 'darwin' && splitTunnelingAvailable === false
- }
- />
- {splitTunnelingAvailable ? (
- <HeaderSubTitle>
- {messages.pgettext(
- 'split-tunneling-view',
- 'Choose the apps you want to exclude from the VPN tunnel.',
+ {!loadingDiskPermissions && (
+ <>
+ <MacOsSplitTunnelingAvailability
+ needFullDiskPermissions={
+ window.env.platform === 'darwin' && splitTunnelingAvailable === false
+ }
+ />
+ {splitTunnelingAvailable && (
+ <HeaderSubTitle>
+ {messages.pgettext(
+ 'split-tunneling-view',
+ 'Choose the apps you want to exclude from the VPN tunnel.',
+ )}
+ </HeaderSubTitle>
)}
- </HeaderSubTitle>
- ) : null}
+ </>
+ )}
</SettingsHeader>
+ {loadingDiskPermissions && (
+ <Flex $justifyContent="center" $margin={{ top: Spacings.spacing6 }}>
+ <ImageView source="icon-spinner" height={48} />
+ </Flex>
+ )}
{splitTunnelingEnabled && (
<StyledSearchBar searchTerm={searchTerm} onSearch={setSearchTerm} />