Skip to content

Commit 543af75

Browse files
committed
feat:added shortcuts for addtaskdialog
1 parent 0d00ced commit 543af75

5 files changed

Lines changed: 69 additions & 15 deletions

File tree

frontend/src/components/HomeComponents/Tasks/AddTaskDialog.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
FieldKey,
2929
} from '@/components/utils/types';
3030
import { format } from 'date-fns';
31-
import { ADD_FIELDS } from './constants';
31+
import { ADDTASKDIALOG_FIELDS } from './constants';
3232
import { useAddTaskDialogKeyboard } from './UseTaskDialogKeyboard';
3333
import { useAddTaskDialogFocusMap } from './UseTaskDialogFocusMap';
3434

@@ -60,7 +60,7 @@ export const AddTaskdialog = ({
6060
>({});
6161
const [focusedFieldIndex, setFocusedFieldIndex] = useState(0);
6262

63-
const focusedField = ADD_FIELDS[focusedFieldIndex];
63+
const focusedField = ADDTASKDIALOG_FIELDS[focusedFieldIndex];
6464

6565
const handleDialogOpenChange = (open: boolean) => {
6666
onOpenChange?.(open);
@@ -78,7 +78,7 @@ export const AddTaskdialog = ({
7878
}, [focusedField]);
7979

8080
const focusMap = useAddTaskDialogFocusMap({
81-
fields: ADD_FIELDS,
81+
fields: ADDTASKDIALOG_FIELDS,
8282
inputRefs: inputRefs as any,
8383
});
8484

@@ -97,7 +97,7 @@ export const AddTaskdialog = ({
9797
};
9898

9999
const handleDialogKeyDown = useAddTaskDialogKeyboard({
100-
fields: ADD_FIELDS,
100+
fields: ADDTASKDIALOG_FIELDS,
101101
focusedFieldIndex,
102102
setFocusedFieldIndex,
103103
onEnter,
@@ -293,8 +293,6 @@ export const AddTaskdialog = ({
293293
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
294294
e.preventDefault();
295295
}
296-
297-
// ✅ allow enter to open dropdown
298296
if (e.key === 'Enter') {
299297
(e.currentTarget as HTMLButtonElement).click();
300298
}

frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import CopyToClipboard from 'react-copy-to-clipboard';
3838
import { formattedDate, handleCopy } from './tasks-utils';
3939
import { useEffect, useRef, useState } from 'react';
4040
import { useTaskDialogKeyboard } from './UseTaskDialogKeyboard';
41-
import { FIELDS } from './constants';
41+
import { EDITTASKDIALOG_FIELDS } from './constants';
4242
import { useTaskDialogFocusMap } from './UseTaskDialogFocusMap';
4343

4444
export const TaskDialog = ({
@@ -97,7 +97,7 @@ export const TaskDialog = ({
9797
editState.isEditingRecur ||
9898
editState.isEditingAnnotations;
9999

100-
const focusedField = FIELDS[focusedFieldIndex];
100+
const focusedField = EDITTASKDIALOG_FIELDS[focusedFieldIndex];
101101

102102
const stopEditing = () => {
103103
onUpdateState({
@@ -145,12 +145,12 @@ export const TaskDialog = ({
145145
]);
146146

147147
const focusMap = useTaskDialogFocusMap({
148-
fields: FIELDS,
148+
fields: EDITTASKDIALOG_FIELDS,
149149
inputRefs: inputRefs,
150150
});
151151

152152
const handleDialogKeyDown = useTaskDialogKeyboard({
153-
fields: FIELDS,
153+
fields: EDITTASKDIALOG_FIELDS,
154154
focusedFieldIndex: focusedFieldIndex,
155155
setFocusedFieldIndex: setFocusedFieldIndex,
156156
isEditingAny: isEditingAny,

frontend/src/components/HomeComponents/Tasks/__tests__/AddTaskDialog.test.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,4 +927,57 @@ describe('AddTaskDialog Component', () => {
927927
});
928928
});
929929
});
930+
931+
describe('Testing Shortcuts', () => {
932+
beforeEach(() => {
933+
Element.prototype.scrollIntoView = jest.fn();
934+
});
935+
936+
test('ArrowDown moves focus to next field', async () => {
937+
render(<AddTaskdialog {...mockProps} isOpen />);
938+
939+
const dialog = await screen.findByRole('dialog');
940+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
941+
942+
const prioritySelect = screen.getByLabelText(/priority/i);
943+
const priorityRow = prioritySelect.closest('div.grid');
944+
expect(priorityRow).toHaveClass('bg-black/15');
945+
});
946+
947+
test('Enter focuses priority select when priority row is focused', async () => {
948+
render(<AddTaskdialog {...mockProps} isOpen />);
949+
950+
const dialog = await screen.findByRole('dialog');
951+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
952+
fireEvent.keyDown(dialog, { key: 'Enter' });
953+
954+
const prioritySelect = screen.getByLabelText(/priority/i);
955+
expect(prioritySelect).toHaveFocus();
956+
});
957+
958+
test('Arrow keys do navigate while editing', () => {
959+
render(<AddTaskdialog {...mockProps} isOpen />);
960+
961+
const dialog = screen.getByRole('dialog');
962+
fireEvent.keyDown(dialog, { key: 'Enter' });
963+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
964+
965+
const descriptionRow = screen.getByText(/priority/i);
966+
expect(descriptionRow).toBeInTheDocument();
967+
});
968+
969+
test('DateTimePicker is visible when any date field is in edit mode', async () => {
970+
render(<AddTaskdialog {...mockProps} isOpen />);
971+
972+
const dialog = screen.getByRole('dialog');
973+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
974+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
975+
fireEvent.keyDown(dialog, { key: 'ArrowDown' });
976+
fireEvent.keyDown(dialog, { key: 'Enter' });
977+
978+
expect(
979+
screen.getByPlaceholderText('Select due date and time')
980+
).toBeInTheDocument();
981+
});
982+
});
930983
});

frontend/src/components/HomeComponents/Tasks/constants.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const FIELDS = [
1+
export const EDITTASKDIALOG_FIELDS = [
22
'description',
33
'due',
44
'start',
@@ -13,7 +13,7 @@ export const FIELDS = [
1313
'annotations',
1414
] as const;
1515

16-
export const ADD_FIELDS = [
16+
export const ADDTASKDIALOG_FIELDS = [
1717
'description',
1818
'priority',
1919
'project',

frontend/src/components/utils/types.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { ADD_FIELDS, FIELDS } from '../HomeComponents/Tasks/constants';
1+
import {
2+
ADDTASKDIALOG_FIELDS,
3+
EDITTASKDIALOG_FIELDS,
4+
} from '../HomeComponents/Tasks/constants';
25

36
export interface User {
47
name: string;
@@ -181,9 +184,9 @@ export type AddTaskProps<F extends readonly string[]> = {
181184
closeDialog: () => void;
182185
};
183186

184-
export type AddFieldKey = (typeof ADD_FIELDS)[number];
187+
export type AddFieldKey = (typeof ADDTASKDIALOG_FIELDS)[number];
185188

186-
export type FieldKey = (typeof FIELDS)[number];
189+
export type FieldKey = (typeof EDITTASKDIALOG_FIELDS)[number];
187190

188191
export type RefMap = Record<string, HTMLElement | null>;
189192

0 commit comments

Comments
 (0)