Skip to content

Commit e35f306

Browse files
committed
feat: integrate TagMultiSelect with TaskDialog for editing
1 parent f6c346c commit e35f306

3 files changed

Lines changed: 20 additions & 79 deletions

File tree

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

Lines changed: 18 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { useEffect, useRef, useState } from 'react';
4040
import { useTaskDialogKeyboard } from './UseTaskDialogKeyboard';
4141
import { EDITTASKDIALOG_FIELDS } from './constants';
4242
import { useTaskDialogFocusMap } from './UseTaskDialogFocusMap';
43+
import { TagMultiSelect } from './TagMultiSelect';
4344

4445
export const TaskDialog = ({
4546
index,
@@ -56,6 +57,7 @@ export const TaskDialog = ({
5657
isCreatingNewProject,
5758
setIsCreatingNewProject,
5859
uniqueProjects,
60+
uniqueTags,
5961
onSaveDescription,
6062
onSaveTags,
6163
onSavePriority,
@@ -1213,104 +1215,41 @@ export const TaskDialog = ({
12131215
<TableCell>Tags:</TableCell>
12141216
<TableCell>
12151217
{editState.isEditingTags ? (
1216-
<div>
1217-
<div className="flex items-center w-full">
1218-
<Input
1219-
ref={(element) =>
1220-
(inputRefs.current.tags = element)
1221-
}
1222-
type="text"
1223-
value={editState.editTagInput}
1224-
onChange={(e) => {
1225-
// For allowing only alphanumeric characters
1226-
if (e.target.value.length > 1) {
1227-
/^[a-zA-Z0-9]*$/.test(e.target.value.trim())
1228-
? onUpdateState({
1229-
editTagInput: e.target.value.trim(),
1230-
})
1231-
: '';
1232-
} else {
1233-
/^[a-zA-Z]*$/.test(e.target.value.trim())
1234-
? onUpdateState({
1235-
editTagInput: e.target.value.trim(),
1236-
})
1237-
: '';
1238-
}
1239-
}}
1240-
placeholder="Add a tag (press enter to add)"
1241-
className="flex-grow mr-2"
1242-
onKeyDown={(e) => {
1243-
if (
1244-
e.key === 'Enter' &&
1245-
editState.editTagInput.trim()
1246-
) {
1247-
onUpdateState({
1248-
editedTags: [
1249-
...editState.editedTags,
1250-
editState.editTagInput.trim(),
1251-
],
1252-
editTagInput: '',
1253-
});
1254-
}
1255-
}}
1256-
/>
1218+
<div className="space-y-2">
1219+
<TagMultiSelect
1220+
availableTags={uniqueTags}
1221+
selectedTags={editState.editedTags}
1222+
onTagsChange={(tags) =>
1223+
onUpdateState({ editedTags: tags })
1224+
}
1225+
placeholder="Select or create tags"
1226+
/>
1227+
<div className="flex items-center gap-2 whitespace-nowrap">
12571228
<Button
12581229
variant="ghost"
12591230
size="icon"
1260-
aria-label="Save tags"
1231+
aria-label="save"
12611232
onClick={() => {
12621233
onSaveTags(task, editState.editedTags);
1263-
onUpdateState({
1264-
isEditingTags: false,
1265-
editTagInput: '',
1266-
});
1234+
onUpdateState({ isEditingTags: false });
12671235
}}
12681236
>
12691237
<CheckIcon className="h-4 w-4 text-green-500" />
12701238
</Button>
12711239
<Button
12721240
variant="ghost"
12731241
size="icon"
1274-
aria-label="Cancel editing tags"
1275-
onClick={() => {
1242+
aria-label="cancel"
1243+
onClick={() =>
12761244
onUpdateState({
12771245
isEditingTags: false,
12781246
editedTags: task.tags || [],
1279-
editTagInput: '',
1280-
});
1281-
}}
1247+
})
1248+
}
12821249
>
12831250
<XIcon className="h-4 w-4 text-red-500" />
12841251
</Button>
12851252
</div>
1286-
<div className="mt-2">
1287-
{editState.editedTags != null &&
1288-
editState.editedTags.length > 0 && (
1289-
<div>
1290-
<div className="flex flex-wrap gap-2 col-span-3">
1291-
{editState.editedTags.map((tag, index) => (
1292-
<Badge key={index}>
1293-
<span>{tag}</span>
1294-
<button
1295-
type="button"
1296-
className="ml-2 text-red-500"
1297-
onClick={() =>
1298-
onUpdateState({
1299-
editedTags:
1300-
editState.editedTags.filter(
1301-
(t) => t !== tag
1302-
),
1303-
})
1304-
}
1305-
>
1306-
1307-
</button>
1308-
</Badge>
1309-
))}
1310-
</div>
1311-
</div>
1312-
)}
1313-
</div>
13141253
</div>
13151254
) : (
13161255
<div className="flex items-center flex-wrap">

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,7 @@ export const Tasks = (
12521252
onUpdateState={updateEditState}
12531253
allTasks={tasks}
12541254
uniqueProjects={uniqueProjects}
1255+
uniqueTags={uniqueTags}
12551256
isCreatingNewProject={isCreatingNewProject}
12561257
setIsCreatingNewProject={setIsCreatingNewProject}
12571258
onSaveDescription={handleSaveDescription}

frontend/src/components/utils/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ export interface EditTaskDialogProps {
153153
onUpdateState: (updates: Partial<EditTaskState>) => void;
154154
allTasks: Task[];
155155
uniqueProjects: string[];
156+
uniqueTags: string[];
156157
isCreatingNewProject: boolean;
157158
setIsCreatingNewProject: (value: boolean) => void;
158159
onSaveDescription: (task: Task, description: string) => void;

0 commit comments

Comments
 (0)