From 21d37e86f82ad9cd9e2b50aac5337d3b4f6c0f7d Mon Sep 17 00:00:00 2001 From: ivan-ushatsky Date: Thu, 17 Feb 2022 18:29:35 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=85=D1=83=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BF=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B8=D0=B2?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useEventsAdapter.ts | 30 ++++++++++++++++++++++++++++++ src/index.ts | 1 + 2 files changed, 31 insertions(+) create mode 100644 src/hooks/useEventsAdapter.ts diff --git a/src/hooks/useEventsAdapter.ts b/src/hooks/useEventsAdapter.ts new file mode 100644 index 0000000..fe7d68b --- /dev/null +++ b/src/hooks/useEventsAdapter.ts @@ -0,0 +1,30 @@ +import { useCallback, useEffect } from 'react'; + +export const useEventsAdapter = () => { + const handleKeydown = useCallback(({ code, target }: KeyboardEvent) => { + switch (code) { + case 'Enter': + if ((target as HTMLElement).tagName === 'BUTTON') { + break; + } + + (target as HTMLElement).click(); + break; + + case 'Escape': + window.history.back(); + break; + + default: + break; + } + }, []); + + useEffect(() => { + document.addEventListener('keydown', handleKeydown); + + return () => { + document.removeEventListener('keydown', handleKeydown); + }; + }, [handleKeydown]); +}; diff --git a/src/index.ts b/src/index.ts index 1c434fa..0c6a073 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,3 +8,4 @@ export { AssistantEvents as AssistantClientEvents, createAssistant as createAssistantClient, } from './assistantSdk/assistant'; +export * from './hooks/useEventsAdapter';