-
Notifications
You must be signed in to change notification settings - Fork 22
feat: community voice UI #1426
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: community voice UI #1426
Conversation
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
…insights into feat/community-voice-ui
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Conventional Commits FTW!
Signed-off-by: Efren Lim <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a new "Community Voice" section to the projects page that displays mentions and discussions about projects from various social media and community platforms (YouTube, X/Twitter, Reddit, HackerNews, etc.). The feature is only available to logged in users and uses the same permission model as the Copilot feature.
Key changes:
- Added Community Voice pages for project, repository, and repository group levels
- Integrated new community platform configurations (YouTube, X/Twitter, Reddit, HackerNews)
- Enhanced dropdown and popover components with customizable z-index via
popoverClassprop - Added sentiment filtering configuration (positive, neutral, negative)
Reviewed Changes
Copilot reviewed 49 out of 60 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/app/pages/project/[slug]/community-voice.vue | New community voice page at project level with SEO noindex |
| frontend/app/pages/project/[slug]/repository/[name]/community-voice.vue | New community voice page at repository level with SEO noindex |
| frontend/app/pages/project/[slug]/repository-group/[groupSlug]/community-voice.vue | New community voice page at repository group level with SEO noindex |
| frontend/app/layouts/default.vue | Added global community filter component to default layout |
| frontend/app/components/uikit/popover/popover.vue | Enhanced popover with customizable CSS class for z-index control |
| frontend/app/components/uikit/dropdown/dropdown.vue | Enhanced dropdown with popover class support |
| frontend/app/components/uikit/dropdown/dropdown.scss | Added .dropdown-popover z-index styling |
| frontend/app/components/shared/types/tanstack.ts | Added COMMUNITY_MENTIONS query key |
| frontend/app/components/shared/types/routes.ts | Added route names for community voice pages |
| frontend/app/components/modules/widget/types/widget-area.ts | Added COMMUNITY widget area |
| frontend/app/components/modules/widget/config/widget-area.config.ts | Added configuration for community widget area |
| frontend/app/components/modules/project/config/sentiments.ts | New sentiment configuration for filtering (positive, neutral, negative) |
| frontend/app/components/modules/project/config/links.ts | Added community voice navigation link configuration |
| frontend/app/components/modules/project/config/youtube.config.ts | YouTube platform configuration for community mentions |
| frontend/app/components/modules/project/views/community-voice.vue | Main view component for community voice with infinite scroll |
| frontend/public/images/platforms/youtube.png | YouTube platform logo (binary image) |
| frontend/public/images/platforms/x.png | X/Twitter platform logo (binary image) |
| frontend/public/images/platforms/reddit.svg | Reddit platform icon (SVG) |
| frontend/public/images/platforms/hackernews.svg | HackerNews platform icon (SVG) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
| /> | ||
| <p | ||
| class="text-base leading-6 text-black whitespace-pre-wrap md:hidden block" | ||
| v-html="truncateText(mention.body, 150)" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have function for sanitizing html
Example:
v-html="sanitize(config.description(project))"
| v-if="mention.imageUrl && isValidUrl(mention.imageUrl)" | ||
| :src="mention.imageUrl" | ||
| alt="" | ||
| class="w-full lg:w-[200px] lg:h-[100px] h-[120px] object-cover rounded-lg shrink-0" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dont use 200px etc put values into tailwind config and then use them
| v-if="item.image" | ||
| :src="item.image" | ||
| :alt="item.label" | ||
| class="w-[15px] h-[15px] object-contain" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
round to 16px and use w-4 h-4
| <div | ||
| v-for="item in displayedItems" | ||
| :key="item.value" | ||
| class="bg-neutral-100 rounded-full px-1.5 py-0.5 flex items-center gap-1 min-w-0 max-w-[200px]" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dont use static values
| :class="sentimentTextColor" | ||
| /> | ||
| <div | ||
| class="flex-1 w-0.5 min-h-[20px]" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
min-h-5
| v-model="isCommunityFilterOpen" | ||
| class="p-6" | ||
| > | ||
| <section class="flex flex-col h-[calc(100vh-160px)]"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think we have type of modal which does that height and makes it full screen with paddings check type attribute on modal
| --> | ||
| <template> | ||
| <div | ||
| class="flex flex-col gap-5 sticky lg:top-[15rem] top-[13rem]" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
put values into tailwind config
| } | ||
|
|
||
| .dropdown-popover.c-popover__content { | ||
| @apply z-[9]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can just do z-index: 9
no need for tailwind if you use fixed value
| useSeoMeta({ | ||
| robots: 'noindex, nofollow', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Community voice is project only so i dont think its needed to be there for repository groups and repositories. Check with jonathan if we hide it when users are filtering
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok thanks!
|
For sentiments filter you are sending wrong values they should be capitalized like we have in the database. Check data you get returned to match the valuse |
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Efren Lim <[email protected]>
Signed-off-by: Gašper Grom <[email protected]>
In this PR
Ticket
IN-852