Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion webapp/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { meetingIdAtom } from './store/atom'

export default function WOOM() {
const [meetingId] = useAtom(meetingIdAtom)

return (
<div
className="min-h-screen">
Expand Down
38 changes: 38 additions & 0 deletions webapp/components/use/wakeLock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
export default class WakeLock {
private lock: WakeLockSentinel | null
private onRelease: () => void

constructor(handleRelease?: () => void) {
this.lock = null
this.onRelease = handleRelease ?? (() => {})
}

private handleVisibilityChange = () => {
if (this.lock !== null && document.visibilityState === 'visible') {
this.request()
}
}

public request = async () => {
if (this.lock == null) {
document.addEventListener('visibilitychange', this.handleVisibilityChange)
}
try {
this.lock = await navigator.wakeLock.request('screen')
this.lock.addEventListener('release', this.onRelease)
} catch (err) {
console.error('Failed to request wake lock:', err)
}
}

public release = async () => {
try {
await this.lock?.release()
} catch (err) {
console.error('Failed to release wake lock:', err)
} finally {
this.lock = null
document.removeEventListener('visibilitychange', this.handleVisibilityChange)
}
}
}
11 changes: 11 additions & 0 deletions webapp/pages/meeting.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,20 @@ import { useAtom } from 'jotai'
import { meetingJoinedAtom } from '../store/atom'
import Layout from '../components/layout'
import Prepare from '../components/prepare'
import { useEffect } from 'react'
import WakeLock from '../components/use/wakeLock'

export default function Meeting(props: { meetingId: string }) {
const [meetingJoined] = useAtom(meetingJoinedAtom)
useEffect(() => {
const lock = new WakeLock()
if (meetingJoined) {
lock.request()
}
return () => {
lock.release()
}
}, [meetingJoined])
return (
<div className="flex flex-col justify-around min-h-screen">
{meetingJoined
Expand Down
Loading