Skip to content

Conversation

@ShivaGupta-14
Copy link
Contributor

@ShivaGupta-14 ShivaGupta-14 commented Dec 30, 2025

Description

  • Replace text input with Select dropdown for tag selection
  • Add "Create new tag" option in dropdown
  • Display selected tags as removable badges
  • Add uniqueTags, isCreatingNewTag, setIsCreatingNewTag props
  • Add data-testid to Priority, Tags, Recur SelectTriggers

Tests:

  • Update Select component mocks for testing
  • Rewrite tag tests to use dropdown selection
  • Add tests for dropdown selection and tag removal

Fixes: #210

Checklist

  • Ran npx prettier --write . (for formatting)
  • Ran gofmt -w . (for Go backend)
  • Ran npm test (for JS/TS testing)
  • Added unit tests, if applicable
  • Verified all tests pass
  • Updated documentation, if needed

Additional Notes

Video

Screen.Recording.2025-12-30.at.10.52.35.PM.mov

Screenshots

Screenshot 2026-01-07 at 12 43 03 AM Screenshot 2026-01-07 at 12 43 08 AM

@github-actions
Copy link

Thank you for opening this PR!

Before a maintainer takes a look, it would be really helpful if you could walk through your changes using GitHub's review tools.

Please take a moment to:

  • Check the "Files changed" tab
  • Leave comments on any lines for functions, comments, etc. that are important, non-obvious, or may need attention
  • Clarify decisions you made or areas you might be unsure about and/or any future updates being considered.
  • Finally, submit all the comments!

More information on how to conduct a self review:
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request

This helps make the review process smoother and gives us a clearer understanding of your thought process.

Once you've added your self-review, we'll continue from our side. Thank you!

Copy link
Contributor Author

@ShivaGupta-14 ShivaGupta-14 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self review done! ready for review

@ShivaGupta-14
Copy link
Contributor Author

Hi @its-me-abhishek!

I’ve added dropdown tests in AddTaskDialog.test.tsx since the logic is identical in both dialogs, for TaskDialog.test.tsx, I only kept the remove/save tests to avoid duplication, should I also add the same dropdown interaction tests there, or is covering it once sufficient? Let me know your preference.

Copy link
Collaborator

@its-me-abhishek its-me-abhishek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please look into the above comments

@ShivaGupta-14
Copy link
Contributor Author

on it

- Replace text input with Select dropdown for tag selection
- Add "Create new tag" option in dropdown
- Display selected tags as removable badges
- Add uniqueTags, isCreatingNewTag, setIsCreatingNewTag props
- Add data-testid to Priority, Tags, Recur SelectTriggers

Tests:
- Update Select component mocks for testing
- Rewrite tag tests to use dropdown selection
- Add tests for dropdown selection and tag removal

Fixes: CCExtractor#210
@ShivaGupta-14 ShivaGupta-14 force-pushed the feat/210-tag-dropdown-selection branch from 06dcaa3 to d255e26 Compare January 6, 2026 19:06
@ShivaGupta-14
Copy link
Contributor Author

done with all changes, ready for review

return (
<select
data-testid="project-select"
data-testid={testId}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just directly place 'data-testid' here? instead of writing and destructuring?

});

test('removes a tag when user clicks the remove button', () => {
mockProps.isOpen = true;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why was this changed, though?

}
});

test('should add new tag on Enter key press', () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

preferably should add similar tests here as well. most of the fields tend to be flaky otherwise

expect(result).toBeNull();
});

it('returns trimmed tag when valid and not duplicate', () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

newtag needs to be something else, like new tag, or similar, in order to make this test work

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe use different combinations, in this test and the next one

<div className="col-span-3 space-y-2">
<Select
data-testid="tags-select"
value={isCreatingNewTag ? '__CREATE_NEW__' : '__SELECT__'}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can it be null somehow? in case of removal of all tags, what would be the case?

onValueChange={(value) => {
if (value === '__CREATE_NEW__') {
setIsCreatingNewTag(true);
} else if (value !== '__SELECT__') {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since there is no default case here, seems to be skipped in logic. ideally an if-else if should be enough

SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moreover, i really think this could be a bad approach for our usecase. What could be better is, inside an input field, the user can either

  1. Write out a tag
  2. Select from dropdown
    Both can be done at the same time By just hiding the selector, or maybe merging them similar to this.
Image

So if a tag exists then add it from the dropdown by selecting else just type out, press enter, and the tag gets added

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@its-me-abhishek
I’ve created this multiselect filter in frontend/src/components/HomeComponents/Tasks/AddMultiSelect.tsx, it includes search, adding, removing, and creating new items, and it can be reused for other needs if needed.
If this matches what you had in mind for the selector, I’ll go ahead and implement the rest of the functionality based on it.

Screen.Recording.2026-01-09.at.9.48.43.PM.mov

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should i update the pr with this implementation?

Copy link
Collaborator

@its-me-abhishek its-me-abhishek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested some changes and fixes

@ShivaGupta-14
Copy link
Contributor Author

@its-me-abhishek, I understand your suggestions, but before proceeding, I’d genuinely like to get your input. I’ve also opened a PR for the same issue where I implemented a TagSelector component with search and multi-select functionality that shows the selected items. As a user, I personally prefer this approach, but I’d really appreciate your suggestion. I’m happy to proceed with whatever you decide.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reusable tags for Editing or Adding a task

2 participants