useInternalFlamegraphDebugMode.ts 926 B

1234567891011121314151617181920212223242526272829303132
  1. import {useEffect, useState} from 'react';
  2. const FLAMEGRAPH_DEBUG_MODE_KEY = '__fgdb__';
  3. export function useInternalFlamegraphDebugMode() {
  4. const [isEnabled, setIsEnabled] = useState(
  5. sessionStorage.getItem(FLAMEGRAPH_DEBUG_MODE_KEY) === '1'
  6. );
  7. useEffect(() => {
  8. function handleKeyDown(evt: KeyboardEvent) {
  9. const isCtrlOrMeta = evt.ctrlKey || evt.metaKey;
  10. if (isCtrlOrMeta && evt.shiftKey && evt.code === 'KeyI') {
  11. evt.preventDefault();
  12. setIsEnabled(val => {
  13. const next = !val;
  14. if (next) {
  15. sessionStorage.setItem(FLAMEGRAPH_DEBUG_MODE_KEY, '1');
  16. } else {
  17. sessionStorage.removeItem(FLAMEGRAPH_DEBUG_MODE_KEY);
  18. }
  19. return next;
  20. });
  21. }
  22. }
  23. window.addEventListener('keydown', handleKeyDown);
  24. return () => window.removeEventListener('keydown', handleKeyDown);
  25. });
  26. return isEnabled;
  27. }