Skip to content

Commit 635fad8

Browse files
committed
feat: wait before displaying disconnected state
1 parent 55abcc0 commit 635fad8

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

packages/app-frontend/src/features/App.vue

+3-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default defineComponent({
3737
},
3838
3939
setup() {
40-
const { isConnected, isInitializing } = useAppConnection()
40+
const { isConnected, isInitializing, showDisplayDisconnected } = useAppConnection()
4141
4242
function updateTheme(theme: string) {
4343
if (theme === 'dark' || theme === 'high-contrast' || (theme === 'auto' && chromeTheme === 'dark')) {
@@ -80,6 +80,7 @@ export default defineComponent({
8080
return {
8181
isConnected,
8282
isInitializing,
83+
showDisplayDisconnected,
8384
showAppsSelector,
8485
orientation,
8586
isChrome,
@@ -103,7 +104,7 @@ export default defineComponent({
103104
/>
104105

105106
<AppDisconnected
106-
v-else-if="!isConnected"
107+
v-else-if="showDisplayDisconnected"
107108
class="absolute inset-0"
108109
/>
109110

packages/app-frontend/src/features/connection/index.ts

+26-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,40 @@
1-
import { ref } from 'vue'
1+
import { computed, ref } from 'vue'
2+
import { useNow } from '@vueuse/core'
23

34
const isConnected = ref(false)
45
const isInitializing = ref(true)
6+
const lastDisconnect = ref(0)
57

68
export function useAppConnection() {
9+
const now = useNow({
10+
interval: 1000,
11+
})
12+
const showDisplayDisconnected = computed(() => {
13+
if (isInitializing.value) {
14+
return false
15+
}
16+
if (lastDisconnect.value === 0) {
17+
return false
18+
}
19+
// Wait for 5 seconds before showing the disconnected message
20+
return !isConnected && now.value.getTime() - lastDisconnect.value > 5000
21+
})
22+
723
return {
824
isConnected,
925
isInitializing,
26+
lastDisconnect,
27+
showDisplayDisconnected,
1028
}
1129
}
1230

13-
export function setAppConnected(value: boolean) {
31+
export function setAppConnected(value: boolean, force = false) {
32+
if (force) {
33+
lastDisconnect.value = 0
34+
}
35+
else if (!value && isConnected.value) {
36+
lastDisconnect.value = Date.now()
37+
}
1438
isConnected.value = value
1539
}
1640

packages/app-frontend/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export async function initDevTools(shell: Shell) {
1919
app.mount('#app')
2020
connectApp(app, shell)
2121
shell.onReload(() => {
22-
setAppConnected(false)
22+
setAppConnected(false, true)
2323
getBridge()?.removeAllListeners()
2424
connectApp(app, shell)
2525
})

packages/shell-chrome/src/devtools.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ initDevTools({
3636
setAppConnected(false)
3737

3838
// Retry
39-
retryConnectTimer = setTimeout(connect, 1000)
39+
retryConnectTimer = setTimeout(connect, 500)
4040
})
4141

4242
if (connectCount > 1) {
@@ -49,7 +49,7 @@ initDevTools({
4949
setAppConnected(false)
5050

5151
// Retry
52-
retryConnectTimer = setTimeout(connect, 5000)
52+
retryConnectTimer = setTimeout(connect, 1000)
5353
}
5454
}
5555
connect()

0 commit comments

Comments
 (0)