-
Notifications
You must be signed in to change notification settings - Fork 25
fix: update computed props to hide missing profile details and add job title #259
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
fix: update computed props to hide missing profile details and add job title #259
Conversation
WalkthroughThe changes involve updates to the Changes
Possibly related PRs
Suggested reviewers
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (2)
packages/frontendmu-nuxt/components/speaker/Single.vue (2)
19-24
: Consider DRY-ing up the profile validation logic.The computed properties correctly handle both falsy values and empty strings. However, the validation logic is repeated across all properties.
Consider extracting the validation to a reusable function:
+ const isValidProfileField = (field: string | undefined): boolean => + field && field.trim() !== '' - const hasProfileBio = computed(() => profile.value.bio && profile.value.bio !== '') - const hasProfileJobTitle = computed(() => profile.value.job_title && profile.value.job_title !== '') - const hasProfileLocation = computed(() => profile.value.location && profile.value.location !== '') - const hasProfileWebsite = computed(() => profile.value.website && profile.value.website !== '') - const hasProfileGithub = computed(() => profile.value.github && profile.value.github !== '') - const hasProfileTwitter = computed(() => profile.value.twitter && profile.value.twitter !== '') + const hasProfileBio = computed(() => isValidProfileField(profile.value.bio)) + const hasProfileJobTitle = computed(() => isValidProfileField(profile.value.job_title)) + const hasProfileLocation = computed(() => isValidProfileField(profile.value.location)) + const hasProfileWebsite = computed(() => isValidProfileField(profile.value.website)) + const hasProfileGithub = computed(() => isValidProfileField(profile.value.github)) + const hasProfileTwitter = computed(() => isValidProfileField(profile.value.twitter))This change would:
- Reduce code duplication
- Add whitespace trimming
- Make it easier to modify validation logic in one place
98-100
: Consider semantic markup and more appropriate icon for job title.While the implementation follows the existing pattern, there are a few suggestions for improvement:
Consider these enhancements:
- Use more semantic HTML
- Choose a more appropriate icon for job title
- <span v-if="hasProfileJobTitle"> - <Icon name="lucide:code-xml" mode="svg" class="size-6" />{{ profile.job_title }} - </span> + <div v-if="hasProfileJobTitle" role="contentinfo" aria-label="Job Title"> + <Icon name="lucide:briefcase" mode="svg" class="size-6" />{{ profile.job_title }} + </div>The
briefcase
icon better represents a job title thancode-xml
, and usingdiv
with ARIA attributes improves accessibility.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
packages/frontendmu-data/data/speakers-profile.json
(1 hunks)packages/frontendmu-nuxt/components/speaker/Single.vue
(2 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/frontendmu-data/data/speakers-profile.json
🔇 Additional comments (1)
packages/frontendmu-nuxt/components/speaker/Single.vue (1)
Line range hint 7-7
: Verify type definition includes job_title field.
Let's ensure the SpeakerProfileWithSessions
type includes the job_title
field to maintain type safety.
✅ Verification successful
Type safety for job_title field is properly maintained
The job_title
field is correctly defined in the SpeakerProfile
interface, which is included in SpeakerProfileWithSessions
through the profile
property. The type definition in packages/frontendmu-nuxt/utils/types.ts
confirms proper type safety:
SpeakerProfile
interface includesjob_title: string
SpeakerProfileWithSessions
includesprofile: SpeakerProfile
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Search for the type definition to verify job_title field
ast-grep --pattern 'type SpeakerProfileWithSessions = {
$$$
job_title?: string
$$$
}'
# Alternatively, search for the interface definition
ast-grep --pattern 'interface SpeakerProfileWithSessions {
$$$
job_title?: string
$$$
}'
Length of output: 190
Script:
#!/bin/bash
# Let's first find the file containing the type definition
fd "types.ts" -t f
# Then let's examine the content of the types file
rg -A 5 "SpeakerProfileWithSessions" --type ts
Length of output: 588
Script:
#!/bin/bash
# Let's examine the SpeakerProfile type definition since job_title might be defined there
rg -A 10 "interface SpeakerProfile" --type ts
# Also check for type SpeakerProfile in case it's defined as a type
rg -A 10 "type SpeakerProfile =" --type ts
Length of output: 1073
website
keySpeakerSingle.vue
component to hide missing speaker profile detailsSpeakerSingle.vue
component to display speaker's job titleSummary by CodeRabbit
New Features
Bug Fixes
Documentation