Skip to content

Commit 6d39186

Browse files
committed
Add singular completed task support and Alt+C keyboard shortcut
- stop propagation on Button click in `packages/ui/src/components/editor/common/prompts/PromptField/components/CompletedTasks/CompletedTasks.tsx` - when alt is pressed, show keycap 'C' over the checkbox to trigger seting as task completed - use singular 'completed task' etc. if only one is completed ├── .prettierrc ├── apps │ └── editor │ └── src │ └── views │ └── prompt │ └── frontend │ ├── Main │ │ └── MainView │ │ └── MainView.tsx │ └── i18n │ └── translations │ └── prompt-field.ts ├── media │ ├── README.md │ ├── readme-heading-dark.svg │ ├── readme-heading-light.svg │ └── screenshot-1.png └── packages └── ui └── src └── components └── editor └── common ├── Button │ └── Button.tsx └── prompts ├── PromptField │ ├── PromptField.module.scss │ ├── PromptField.stories.tsx │ ├── PromptField.tsx │ ├── components │ │ ├── CompletedTasks │ │ │ ├── CompletedTasks.module.scss │ │ │ ├── CompletedTasks.tsx │ │ │ └── index.ts │ │ ├── Footer │ │ │ ├── Footer.module.scss │ │ │ ├── Footer.tsx │ │ │ └── index.ts │ │ └── Tabs │ │ ├── Tabs.module.scss │ │ ├── Tabs.tsx │ │ └── index.ts │ ├── hooks │ │ ├── use-drag-drop.ts │ │ ├── use-dropdown.ts │ │ ├── use-ghost-text.ts │ │ ├── use-handlers │ │ │ ├── handle-copy.ts │ │ │ ├── handle-cut.ts │ │ │ ├── handle-input-change.ts │ │ │ ├── handle-input-click.ts │ │ │ ├── handle-key-down.ts │ │ │ ├── handle-paste.ts │ │ │ ├── handle-submit.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── use-handlers.ts │ │ │ └── utils.ts │ │ └── use-keyboard-shortcuts.ts │ └── index.ts ├── Template │ ├── Template.module.scss │ ├── Template.tsx │ └── index.ts └── shared └── symbols ├── caret.ts ├── get-highlighted-text.tsx ├── index.ts ├── position-mapping.ts ├── prompt-symbols.module.scss ├── reconstruct-raw-value.ts └── use-symbol-deletion.ts
1 parent 9240943 commit 6d39186

7 files changed

Lines changed: 87 additions & 11 deletions

File tree

‎apps/editor/src/views/prompt/frontend/Main/MainView/MainView.tsx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ export const MainView: React.FC<Props> = (props) => {
546546
attach_selected_files: t('prompt-field.attach-selected-files'),
547547
more: t('prompt-field.more'),
548548
completed_tasks: t('prompt-field.completed-tasks'),
549+
completed_task: t('prompt-field.completed-task'),
549550
clear_session: t('prompt-field.clear-session')
550551
}}
551552
/>

‎apps/editor/src/views/prompt/frontend/i18n/translations/prompt-field.ts‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,27 @@ export const prompt_field = {
377377
hu: 'Több',
378378
bg: 'Още'
379379
},
380+
'prompt-field.completed-task': {
381+
en: 'completed task',
382+
pl: 'ukończone zadanie',
383+
'zh-cn': '已完成任务',
384+
ja: '完了したタスク',
385+
'zh-tw': '已完成任務',
386+
de: 'abgeschlossene Aufgabe',
387+
es: 'tarea completada',
388+
fr: 'tâche terminée',
389+
'pt-br': 'tarefa concluída',
390+
ru: 'завершенная задача',
391+
ko: '완료된 작업',
392+
it: 'attività completata',
393+
tr: 'tamamlanan görev',
394+
cs: 'dokončený úkol',
395+
hu: 'befejezett feladat',
396+
bg: 'завършена задача'
397+
},
380398
'prompt-field.completed-tasks': {
381399
en: 'completed tasks',
382-
pl: 'zakończone zadania',
400+
pl: 'ukończonych zadań',
383401
'zh-cn': '已完成任务',
384402
ja: '完了したタスク',
385403
'zh-tw': '已完成任務',

‎packages/ui/src/components/editor/common/Button/Button.tsx‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import styles from './Button.module.scss'
33
import cn from 'classnames'
44

55
type Props = {
6-
on_click?: () => void
6+
on_click?: (
7+
e: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>
8+
) => void
79
url?: string
810
disabled?: boolean
911
children?: React.ReactNode

‎packages/ui/src/components/editor/common/prompts/PromptField/PromptField.stories.tsx‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export const Empty = () => (
6767
attach_selected_files: 'Attach selected files',
6868
more: 'More',
6969
completed_tasks: 'Completed tasks',
70+
completed_task: 'Completed task',
7071
clear_session: 'Clear session'
7172
}}
7273
/>
@@ -134,6 +135,7 @@ export const WithText = () => (
134135
attach_selected_files: 'Attach selected files',
135136
more: 'More',
136137
completed_tasks: 'Completed tasks',
138+
completed_task: 'Completed task',
137139
clear_session: 'Clear session'
138140
}}
139141
/>
@@ -201,6 +203,7 @@ export const LongText = () => (
201203
attach_selected_files: 'Attach selected files',
202204
more: 'More',
203205
completed_tasks: 'Completed tasks',
206+
completed_task: 'Completed task',
204207
clear_session: 'Clear session'
205208
}}
206209
/>
@@ -268,6 +271,7 @@ export const WithPlaceholderSavedContext = () => (
268271
attach_selected_files: 'Attach selected files',
269272
more: 'More',
270273
completed_tasks: 'Completed tasks',
274+
completed_task: 'Completed task',
271275
clear_session: 'Clear session'
272276
}}
273277
/>
@@ -335,6 +339,7 @@ export const WithCommit = () => (
335339
attach_selected_files: 'Attach selected files',
336340
more: 'More',
337341
completed_tasks: 'Completed tasks',
342+
completed_task: 'Completed task',
338343
clear_session: 'Clear session'
339344
}}
340345
/>
@@ -401,6 +406,7 @@ export const WithCommitWithQuotes = () => (
401406
attach_selected_files: 'Attach selected files',
402407
more: 'More',
403408
completed_tasks: 'Completed tasks',
409+
completed_task: 'Completed task',
404410
clear_session: 'Clear session'
405411
}}
406412
/>
@@ -475,6 +481,7 @@ export const WithEditFormatSelector = () => {
475481
attach_selected_files: 'Attach selected files',
476482
more: 'More',
477483
completed_tasks: 'Completed tasks',
484+
completed_task: 'Completed task',
478485
clear_session: 'Clear session'
479486
}}
480487
/>
@@ -541,6 +548,7 @@ export const WithWarning = () => (
541548
attach_selected_files: 'Attach selected files',
542549
more: 'More',
543550
completed_tasks: 'Completed tasks',
551+
completed_task: 'Completed task',
544552
clear_session: 'Clear session'
545553
}}
546554
/>
@@ -608,6 +616,7 @@ export const WithFilePaths = () => (
608616
attach_selected_files: 'Attach selected files',
609617
more: 'More',
610618
completed_tasks: 'Completed tasks',
619+
completed_task: 'Completed task',
611620
clear_session: 'Clear session'
612621
}}
613622
/>
@@ -703,6 +712,7 @@ export const WithTabs = () => {
703712
attach_selected_files: 'Attach selected files',
704713
more: 'More',
705714
completed_tasks: 'Completed tasks',
715+
completed_task: 'Completed task',
706716
clear_session: 'Clear session'
707717
}}
708718
/>

‎packages/ui/src/components/editor/common/prompts/PromptField/PromptField.tsx‎

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { Tabs, TabsRef } from './components/Tabs'
1919
import { Footer } from './components/Footer'
2020
import { CompletedTasks } from './components/CompletedTasks'
2121
import { Checkbox } from '../../Checkbox/Checkbox'
22+
import { KeycapWrapper } from '../../../prompt-view/KeycapWrapper'
2223

2324
export type EditFormat = 'whole' | 'search-replace' | 'diff' | 'truncated'
2425

@@ -116,6 +117,7 @@ export namespace PromptField {
116117
attach_selected_files: string
117118
more: string
118119
completed_tasks: string
120+
completed_task: string
119121
clear_session: string
120122
}
121123
}
@@ -317,7 +319,13 @@ export const PromptField: React.FC<PromptField.Props> = (props) => {
317319
className={styles['checkbox-wrapper']}
318320
style={{ visibility: 'hidden' }}
319321
>
320-
<Checkbox checked={false} on_change={() => {}} />
322+
{is_alt_pressed ? (
323+
<KeycapWrapper char="C">
324+
<Checkbox checked={false} on_change={() => {}} />
325+
</KeycapWrapper>
326+
) : (
327+
<Checkbox checked={false} on_change={() => {}} />
328+
)}
321329
</div>
322330
)}
323331
<div className={styles['placeholder-text']}>
@@ -346,12 +354,23 @@ export const PromptField: React.FC<PromptField.Props> = (props) => {
346354
</div>
347355
{props.on_task_completed && (
348356
<div className={styles['checkbox-wrapper']}>
349-
<Checkbox
350-
checked={false}
351-
on_change={() => {
352-
props.on_task_completed!()
353-
}}
354-
/>
357+
{is_alt_pressed ? (
358+
<KeycapWrapper char="C">
359+
<Checkbox
360+
checked={false}
361+
on_change={() => {
362+
props.on_task_completed!()
363+
}}
364+
/>
365+
</KeycapWrapper>
366+
) : (
367+
<Checkbox
368+
checked={false}
369+
on_change={() => {
370+
props.on_task_completed!()
371+
}}
372+
/>
373+
)}
355374
</div>
356375
)}
357376
<div
@@ -416,6 +435,7 @@ export const PromptField: React.FC<PromptField.Props> = (props) => {
416435
on_clear_completed_tasks={props.on_clear_completed_tasks}
417436
translations={{
418437
completed_tasks: props.translations.completed_tasks,
438+
completed_task: props.translations.completed_task,
419439
clear_session: props.translations.clear_session
420440
}}
421441
/>

‎packages/ui/src/components/editor/common/prompts/PromptField/components/CompletedTasks/CompletedTasks.tsx‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type CompletedTasksProps = {
4545
on_clear_completed_tasks?: () => void
4646
translations: {
4747
completed_tasks: string
48+
completed_task: string
4849
clear_session: string
4950
}
5051
}
@@ -77,12 +78,22 @@ export const CompletedTasks: React.FC<CompletedTasksProps> = ({
7778
})}
7879
/>
7980
<div className={styles['header__text']}>
80-
{tasks.length} {translations.completed_tasks}
81+
{tasks.length}{' '}
82+
{tasks.length === 1
83+
? translations.completed_task
84+
: translations.completed_tasks}
8185
</div>
8286
</div>
8387
{on_clear_completed_tasks && (
8488
<div className={styles['header__right']}>
85-
<Button is_small is_secondary on_click={on_clear_completed_tasks}>
89+
<Button
90+
is_small
91+
is_secondary
92+
on_click={(e) => {
93+
e.stopPropagation()
94+
on_clear_completed_tasks()
95+
}}
96+
>
8697
{translations.clear_session}
8798
</Button>
8899
</div>

‎packages/ui/src/components/editor/common/prompts/PromptField/hooks/use-keyboard-shortcuts.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,20 @@ export const use_keyboard_shortcuts = (props: PromptField.Props) => {
158158
props.on_copy()
159159
}
160160
}
161+
if (
162+
e.code == 'KeyC' &&
163+
e.altKey &&
164+
left_alt_pressed_ref.current &&
165+
!e.ctrlKey &&
166+
!e.metaKey &&
167+
!e.shiftKey
168+
) {
169+
if (props.on_task_completed) {
170+
e.stopPropagation()
171+
e.preventDefault()
172+
props.on_task_completed()
173+
}
174+
}
161175
}
162176

163177
return { is_alt_pressed, handle_container_key_down }

0 commit comments

Comments
 (0)