Skip to content

Commit c48841f

Browse files
committed
update
1 parent dc3f2f5 commit c48841f

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

ui/desktop/src/components/ProviderGuard.tsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
4040
const [isTetrateSetupInProgress, setIsTetrateSetupInProgress] = useState(false);
4141
const onboardingTracked = useRef(false);
4242
const tetrateSetupRunId = useRef(0);
43+
const tetrateSuccessTimerId = useRef<ReturnType<typeof setTimeout> | null>(null);
4344
const scrollContainerRef = useRef<HTMLDivElement>(null);
4445
const [showScrollIndicator, setShowScrollIndicator] = useState(true);
4546

@@ -69,6 +70,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
6970
title: string;
7071
message: string;
7172
showProgress?: boolean;
73+
showSuccess?: boolean;
7274
showRetry: boolean;
7375
closeLabel?: string;
7476
autoClose?: number;
@@ -107,9 +109,20 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
107109
setIsTetrateSetupInProgress(false);
108110

109111
if (result.success) {
110-
setTetrateSetupState(null);
111-
setSwitchModelProvider('tetrate');
112-
setShowSwitchModelModal(true);
112+
setTetrateSetupState({
113+
show: true,
114+
title: 'Setup Complete',
115+
message: 'Your account has been connected successfully.',
116+
showSuccess: true,
117+
showProgress: false,
118+
showRetry: false,
119+
});
120+
tetrateSuccessTimerId.current = setTimeout(() => {
121+
tetrateSuccessTimerId.current = null;
122+
setTetrateSetupState(null);
123+
setSwitchModelProvider('tetrate');
124+
setShowSwitchModelModal(true);
125+
}, 1500);
113126
} else {
114127
trackOnboardingSetupFailed('tetrate', result.message);
115128
setTetrateSetupState({
@@ -165,6 +178,16 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
165178
};
166179

167180
const handleCancelTetrateSetup = async () => {
181+
if (tetrateSuccessTimerId.current) {
182+
// User dismissed the success modal early — still advance to model selection
183+
clearTimeout(tetrateSuccessTimerId.current);
184+
tetrateSuccessTimerId.current = null;
185+
setTetrateSetupState(null);
186+
setSwitchModelProvider('tetrate');
187+
setShowSwitchModelModal(true);
188+
return;
189+
}
190+
168191
if (!isTetrateSetupInProgress) {
169192
setTetrateSetupState(null);
170193
return;
@@ -538,6 +561,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
538561
title={tetrateSetupState.title}
539562
message={tetrateSetupState.message}
540563
showProgress={tetrateSetupState.showProgress}
564+
showSuccess={tetrateSetupState.showSuccess}
541565
showRetry={tetrateSetupState.showRetry}
542566
onRetry={() => handleRetrySetup('tetrate')}
543567
onClose={() => closeSetupModal('tetrate')}

ui/desktop/src/components/SetupModal.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ interface SetupModalProps {
55
title: string;
66
message: string;
77
showProgress?: boolean;
8+
showSuccess?: boolean;
89
showRetry?: boolean;
910
onRetry?: () => void;
1011
autoClose?: number;
@@ -16,6 +17,7 @@ export function SetupModal({
1617
title,
1718
message,
1819
showProgress,
20+
showSuccess,
1921
showRetry,
2022
onRetry,
2123
autoClose,
@@ -44,6 +46,15 @@ export function SetupModal({
4446
</div>
4547
)}
4648

49+
{showSuccess && (
50+
<div className="flex justify-center mb-4">
51+
<svg className="h-10 w-10 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
52+
<circle cx="12" cy="12" r="10" className="stroke-green-500" fill="none" />
53+
<path strokeLinecap="round" strokeLinejoin="round" d="M8 12l2.5 2.5L16 9" />
54+
</svg>
55+
</div>
56+
)}
57+
4758
{onClose && (
4859
<div className="mb-4">
4960
<Button onClick={onClose} className="w-full">

ui/desktop/src/main.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,19 @@ if (process.platform !== 'darwin') {
194194
}
195195
}
196196

197+
function focusGooseWindow(): void {
198+
const windows = BrowserWindow.getAllWindows();
199+
if (windows.length > 0) {
200+
const win = windows[0];
201+
if (win.isMinimized()) win.restore();
202+
win.show();
203+
win.focus();
204+
}
205+
if (process.platform === 'darwin') {
206+
app.dock?.bounce('informational');
207+
}
208+
}
209+
197210
let firstOpenWindow: BrowserWindow;
198211
let pendingDeepLink: string | null = null;
199212
let openUrlHandledLaunch = false;
@@ -206,6 +219,7 @@ async function handleProtocolUrl(url: string) {
206219
pendingDeepLink = null;
207220
})
208221
) {
222+
focusGooseWindow();
209223
return;
210224
}
211225

@@ -286,6 +300,7 @@ app.on('open-url', async (_event, url) => {
286300
pendingDeepLink = null;
287301
})
288302
) {
303+
focusGooseWindow();
289304
return;
290305
}
291306

0 commit comments

Comments
 (0)