Skip to content

Commit 76d3f4b

Browse files
fix window spawning behaviour (#894)
* fix window spawning behaviour * fix platform specific clippy error
1 parent 6c594b3 commit 76d3f4b

17 files changed

Lines changed: 166 additions & 83 deletions

File tree

new-ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"@tauri-apps/api": "^2.11.0",
2424
"@tauri-apps/plugin-http": "^2.5.9",
2525
"@tauri-apps/plugin-log": "^2.8.0",
26+
"@tauri-apps/plugin-os": "^2.3.2",
2627
"@uidotdev/usehooks": "^2.4.1",
2728
"byte-size": "^9.0.1",
2829
"chart.js": "^4.5.1",

new-ui/pnpm-lock.yaml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

new-ui/src/app/App.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { QueryClientProvider } from '@tanstack/react-query';
22
import { RouterProvider } from '@tanstack/react-router';
33
import { MainBackground } from '../shared/components/MainBackground/MainBackground';
4-
import { TauriEventProvider } from '../shared/providers/TauriEventProvider';
54
import { queryClient } from './query';
65
import { router } from './router';
76

@@ -11,9 +10,7 @@ function App() {
1110
<MainBackground />
1211
<div id="app-content">
1312
<QueryClientProvider client={queryClient}>
14-
<TauriEventProvider>
15-
<RouterProvider router={router} />
16-
</TauriEventProvider>
13+
<RouterProvider router={router} />
1714
</QueryClientProvider>
1815
</div>
1916
</div>

new-ui/src/pages/compact/CompactLocationsPage/CompactLocationsPage.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import './style.scss';
22
import { useQuery } from '@tanstack/react-query';
33
import { useLoaderData } from '@tanstack/react-router';
4+
import { platform } from '@tauri-apps/plugin-os';
5+
import clsx from 'clsx';
46
import { useEffect, useMemo } from 'react';
57
import { Button } from '../../../shared/components/Button/Button';
68
import { ButtonVariant } from '../../../shared/components/Button/types';
@@ -19,6 +21,8 @@ import { CompactPage } from '../CompactPage/CompactPage';
1921
import { InstanceSwitcher } from './components/InstanceSwitcher';
2022
import { useCompactLocationStore } from './hooks/useCompactLocationsStore';
2123

24+
const isWindows = platform() === 'windows';
25+
2226
export const CompactLocationsPage = () => {
2327
const selection = useCompactLocationStore((s) => s.compactViewSelection);
2428
const openLocation = useCompactLocationStore((s) => s.expandedLocation);
@@ -65,7 +69,11 @@ export const CompactLocationsPage = () => {
6569
}}
6670
>
6771
<WindowHeader variant="compact" />
68-
<div className="scroll-wrap">
72+
<div
73+
className={clsx('scroll-wrap', {
74+
windows: isWindows,
75+
})}
76+
>
6977
<InstanceSwitcher />
7078
<div className="locations">
7179
{isPresent(instanceInfo) &&

new-ui/src/pages/compact/CompactLocationsPage/style.scss

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#compact-locations-page {
22
display: flex;
33
flex-flow: column;
4-
min-height: 100dvh;
4+
height: 100dvh;
55

66
> .compact-footer {
77
display: flex;
@@ -21,11 +21,22 @@
2121
min-height: 0;
2222
row-gap: var(--spacing-sm);
2323

24+
&.windows {
25+
scrollbar-gutter: stable;
26+
overflow-y: scroll;
27+
28+
> .locations {
29+
padding-right: 6px;
30+
}
31+
}
32+
2433
> .locations {
2534
display: flex;
2635
flex-flow: column;
2736
row-gap: var(--spacing-sm);
2837
width: 100%;
38+
box-sizing: border-box;
39+
padding-right: 6px;
2940
}
3041
}
3142
}

new-ui/src/routes/__root.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { QueryClient } from '@tanstack/react-query';
22
import { createRootRouteWithContext, Outlet } from '@tanstack/react-router';
3+
import { TauriEventProvider } from '../shared/providers/TauriEventProvider';
34

45
interface RouterContext {
56
queryClient: QueryClient;
@@ -12,5 +13,9 @@ export const Route = createRootRouteWithContext<RouterContext>()({
1213
});
1314

1415
function RootComponent() {
15-
return <Outlet />;
16+
return (
17+
<TauriEventProvider>
18+
<Outlet />
19+
</TauriEventProvider>
20+
);
1621
}

new-ui/src/routes/empty.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
1-
import { createFileRoute } from '@tanstack/react-router';
1+
import { useQuery } from '@tanstack/react-query';
2+
import { createFileRoute, useNavigate } from '@tanstack/react-router';
3+
import { useEffect } from 'react';
4+
5+
import { hasAnyVisibleLocationsQueryOptions } from '../shared/rust-api/query';
26

37
export const Route = createFileRoute('/empty')({
48
component: RouteComponent,
59
});
610

711
function RouteComponent() {
8-
return <div>Hello "/empty"!</div>;
12+
const navigate = useNavigate();
13+
const { data: hasLocations } = useQuery(hasAnyVisibleLocationsQueryOptions);
14+
15+
useEffect(() => {
16+
if (hasLocations === true) {
17+
void navigate({ to: '/' });
18+
}
19+
}, [hasLocations, navigate]);
20+
21+
return <div></div>;
922
}

new-ui/src/shared/providers/TauriEventProvider.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => {
2626
listen(TauriEvent.InstanceUpdate, () => {
2727
void queryClient.invalidateQueries({ queryKey: ['instances'] });
2828
void queryClient.invalidateQueries({ queryKey: ['locations'] });
29+
void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] });
2930
}),
3031

3132
listen(TauriEvent.LocationUpdate, () => {
3233
void queryClient.invalidateQueries({ queryKey: ['locations'] });
3334
void queryClient.invalidateQueries({ queryKey: ['location-details'] });
35+
void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] });
3436
}),
3537

3638
listen(TauriEvent.AppVersionFetch, () => {
@@ -41,6 +43,7 @@ export const TauriEventProvider = ({ children }: PropsWithChildren) => {
4143
void queryClient.invalidateQueries({ queryKey: ['settings'] });
4244
void queryClient.invalidateQueries({ queryKey: ['provisioning-config'] });
4345
void queryClient.invalidateQueries({ queryKey: ['instances'] });
46+
void queryClient.invalidateQueries({ queryKey: ['has-any-visible-locations'] });
4447
}),
4548

4649
listen<DeadConnectionDroppedPayload>(TauriEvent.DeadConnectionDropped, () => {

new-ui/src/shared/rust-api/api.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ const saveDeviceConfig = (args: SaveConfigArgs): Promise<SaveDeviceConfigRespons
4141
const getLocations = (instanceId: number): Promise<LocationInfo[]> =>
4242
invoke(TauriCommand.AllLocations, { instanceId });
4343

44+
const hasAnyVisibleLocations = (): Promise<boolean> =>
45+
invoke(TauriCommand.HasAnyVisibleLocations);
46+
4447
const getLocationDetails = (args: LocationDetailsArgs): Promise<LocationDetails> =>
4548
invoke(TauriCommand.LocationInterfaceDetails, args);
4649

@@ -139,6 +142,7 @@ export const api = {
139142
saveDeviceConfig,
140143
// Locations
141144
getLocations,
145+
hasAnyVisibleLocations,
142146
getLocationDetails,
143147
updateLocationRouting,
144148
setLocationMfaMethod,

new-ui/src/shared/rust-api/query.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ export const getLocationsQueryOptions = (instanceId: number) =>
2121
queryFn: () => api.getLocations(instanceId),
2222
});
2323

24+
export const hasAnyVisibleLocationsQueryOptions = queryOptions({
25+
queryKey: ['has-any-visible-locations'] as const,
26+
queryFn: () => api.hasAnyVisibleLocations(),
27+
});
28+
2429
export const getLocationDetailsQueryOptions = (args: LocationDetailsArgs) =>
2530
queryOptions({
2631
queryKey: ['location-details', args.locationId, args.connectionType] as const,

0 commit comments

Comments
 (0)