From f3251836910bba3234e55be9d72b1e238636ba3e Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sun, 14 May 2023 03:31:00 +0100 Subject: [PATCH] Add keydowns in updating progerss --- .../TopicDetail/TopicProgressButton.tsx | 132 ++++++++++++++---- src/hooks/use-keydown.ts | 6 +- 2 files changed, 109 insertions(+), 29 deletions(-) diff --git a/src/components/TopicDetail/TopicProgressButton.tsx b/src/components/TopicDetail/TopicProgressButton.tsx index a5ed10aa1..65237df59 100644 --- a/src/components/TopicDetail/TopicProgressButton.tsx +++ b/src/components/TopicDetail/TopicProgressButton.tsx @@ -1,4 +1,5 @@ import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; +import { useKeydown } from '../../hooks/use-keydown'; import { useOutsideClick } from '../../hooks/use-outside-click'; import DownIcon from '../../icons/down.svg'; import SpinnerIcon from '../../icons/spinner.svg'; @@ -28,7 +29,8 @@ const statusColors: Record = { }; export function TopicProgressButton(props: TopicProgressButtonProps) { - const { topicId, resourceId, resourceType, onClose, onShowLoginPopup } = props; + const { topicId, resourceId, resourceType, onClose, onShowLoginPopup } = + props; const [isUpdatingProgress, setIsUpdatingProgress] = useState(true); const [progress, setProgress] = useState('pending'); @@ -56,6 +58,63 @@ export function TopicProgressButton(props: TopicProgressButtonProps) { .catch(console.error); }, [topicId, resourceId, resourceType]); + // Mark as done + useKeydown( + 'd', + () => { + if (progress === 'done') { + onClose(); + return; + } + + handleUpdateResourceProgress('done'); + }, + [progress] + ); + + // Mark as learning + useKeydown( + 'l', + () => { + if (progress === 'learning') { + onClose(); + return; + } + + handleUpdateResourceProgress('learning'); + }, + [progress] + ); + + // Mark as learning + useKeydown( + 's', + () => { + if (progress === 'skipped') { + onClose(); + return; + } + + handleUpdateResourceProgress('skipped'); + }, + [progress] + ); + + // Mark as pending + useKeydown( + 'r', + () => { + console.log(progress); + if (progress === 'pending') { + onClose(); + return; + } + + handleUpdateResourceProgress('pending'); + }, + [progress] + ); + const handleUpdateResourceProgress = (progress: ResourceProgressType) => { if (isGuest) { onClose(); @@ -86,10 +145,18 @@ export function TopicProgressButton(props: TopicProgressButtonProps) { }); }; - const allowMarkingSkipped = ['pending', 'learning', 'done'].includes(progress); - const allowMarkingDone = ['skipped', 'pending', 'learning'].includes(progress); - const allowMarkingLearning = ['done', 'skipped', 'pending'].includes(progress); - const allowMarkingPending = ['skipped', 'done', 'learning'].includes(progress); + const allowMarkingSkipped = ['pending', 'learning', 'done'].includes( + progress + ); + const allowMarkingDone = ['skipped', 'pending', 'learning'].includes( + progress + ); + const allowMarkingLearning = ['done', 'skipped', 'pending'].includes( + progress + ); + const allowMarkingPending = ['skipped', 'done', 'learning'].includes( + progress + ); if (isUpdatingProgress) { return ( @@ -123,51 +190,64 @@ export function TopicProgressButton(props: TopicProgressButtonProps) { {showChangeStatus && (
{allowMarkingDone && ( )} {allowMarkingLearning && ( )} {allowMarkingPending && ( )} {allowMarkingSkipped && ( )}
diff --git a/src/hooks/use-keydown.ts b/src/hooks/use-keydown.ts index 9a53c9254..940b92077 100644 --- a/src/hooks/use-keydown.ts +++ b/src/hooks/use-keydown.ts @@ -1,6 +1,6 @@ -import { useEffect, useState } from 'preact/hooks'; +import { useEffect } from 'preact/hooks'; -export function useKeydown(keyName: string, callback: any) { +export function useKeydown(keyName: string, callback: any, deps: any[] = []) { useEffect(() => { const listener = (event: any) => { if (event.key.toLowerCase() === keyName.toLowerCase()) { @@ -12,5 +12,5 @@ export function useKeydown(keyName: string, callback: any) { return () => { window.removeEventListener('keydown', listener); }; - }, []); + }, deps); }