174d36e3b3
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
/**
|
|
* DEVKIT entry point. The whole devkit is gated by this single flag.
|
|
*
|
|
* Activation: append `?devkit=1` to URL OR run in console:
|
|
* localStorage.setItem('devkit', '1')
|
|
* Deactivation: `?devkit=0` OR localStorage.removeItem('devkit')
|
|
*
|
|
* To remove DevKit from the project entirely:
|
|
* 1. rm -rf src/devkit/
|
|
* 2. Strip `// DEVKIT:` blocks in XRSession.tsx & useControllerGrab.ts
|
|
*/
|
|
import { useEffect, useState } from 'react';
|
|
|
|
const KEY = 'devkit';
|
|
|
|
function readFlag(): boolean {
|
|
if (typeof window === 'undefined') return false;
|
|
const params = new URLSearchParams(window.location.search);
|
|
const urlVal = params.get(KEY);
|
|
if (urlVal === '1') {
|
|
localStorage.setItem(KEY, '1');
|
|
return true;
|
|
}
|
|
if (urlVal === '0') {
|
|
localStorage.removeItem(KEY);
|
|
return false;
|
|
}
|
|
return localStorage.getItem(KEY) === '1';
|
|
}
|
|
|
|
export function useDevKit(): boolean {
|
|
const [enabled, setEnabled] = useState(readFlag);
|
|
useEffect(() => {
|
|
const onStorage = () => setEnabled(readFlag());
|
|
window.addEventListener('storage', onStorage);
|
|
return () => window.removeEventListener('storage', onStorage);
|
|
}, []);
|
|
return enabled;
|
|
}
|
|
|
|
export function isDevKit(): boolean {
|
|
return readFlag();
|
|
}
|