-
Notifications
You must be signed in to change notification settings - Fork 6.3k
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(search): implements Orama searchbox #6908
base: main
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Sorry @micheleriva this has been idle for too long - it's been a messy few weeks. Are you looking for any particular feedback on the approach? |
Looks like this is a draft yet, and most of the styles feel broken 🤔 |
Hey @bmuenzenmeyer, @ovflowd I'm sorry, I completely missed your comments. We found some bugs in the searchbox and dedicated more time to stabilize it. We've been testing it for weeks on other websites so we believe it is finally ready. I still have to fix a small couple of things, then I'll open it for review 🙏 |
FYI @micheleriva build is failing:
Did you try a prod build locally? |
18f2004
to
b279f6f
Compare
Also it'd be great if there was some margin between the results |
This comment was marked as resolved.
This comment was marked as resolved.
84d73c8
to
3318846
Compare
@ovflowd FYI we also started using next router to navigate. Experience should be smoother now. ✅ |
@rjborba, this is just an FYI: the AI-generated Markdown links are still broken. This can be done in a follow-up PR, but just a FYI, They don't have the language prefixes. |
Also, I wonder how much extra bundle is added just for the search box. Can you give us some insights? We want to ensure that the users' experience is smooth. |
Hi @ovflowd it is actually fixed. But it takes in consideration the BASE_URL constant, which is resolving for something different than the ones on the Markdown answer on Next Preview. We've added a callback to the Markdown URL so we have a opportunity to modify the HREF in runtime, after the LLM generates it. We want to add the locale when URL starts with the base URL (https://nodejs.org) and does not have /docs as initial path. We could enhance it by using something like |
3318846
to
a105511
Compare
onSearchResultClick={event => { | ||
event.preventDefault(); | ||
|
||
const currentPageHost = `${window.location.protocol}//${window.location.host}`; |
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.
Can we not use window.
APIs here at all, I'm pretty sure @/navigation's useRouter and usePathname have everything you need. Using global environment-based APIs hinders the ability of us to optimise this in the future.
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.
Hi!
I'm sorry, but I could not find a proper way to get current host through neither usePathname nor useRouter.
Also checked the other methods from createNavigation. Would you mind to let me know what API should I use?
Another solution would be go back to use "BASE_URL" from constants.
Please let me know
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.
As mentioned before, you don't need to retrieve the host.
const currentPageHost = `${window.location.protocol}//${window.location.host}`; | ||
|
||
router.push(`${currentPageHost}/${event.detail.result.path}`, { | ||
locale: undefined, |
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.
Explain why this is set to undefined within inline docs
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.
The URL provided on the callback event (event.details.result.path) always contains the locale because of the resultMap property. URLs are already good to be clicked on searchbox, with the locale being dynamically appended.
In summary, router.push from @navigator always append the locale for not undefined locale. It is bad because:
A) For /docs paths, we can not have the locale
B) We already add the locale on resultMap
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 you misunderstood me. I am asking you to add inline commentary on the code of why you passed this undefined; other people might not understand the why. (You don't need to explain the code; I 100% get how it works)
searchParams={DEFAULT_ORAMA_QUERY_PARAMS} | ||
suggestions={DEFAULT_ORAMA_SUGGESTIONS} | ||
chatMarkdownLinkHref={({ href }) => { | ||
if (!href) return href; |
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.
Let's ensure we always use brackets on if statements.
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.
Thanks! Should we add it to lint rules?
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.
Feel free to do so 💯
const docsBaseUrl = `${currentPageHost}/docs`; | ||
const lowerCaseHref = href.toLowerCase(); | ||
|
||
// Keep original link if URl should not have locale |
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.
Can you add the reasoning? This whole URL logic seems unnecessary, you can simply check if the href
's pathname startsWith docs. You can accomplish that by
const { pathname } = new URL(href);
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.
Hi! The problem with your approach is that you are assuming that LLM will always reply with URLs related under nodes domain. What if one asks: can you give me the documentation URL from some companies that uses NodeJs?
Does it make sense to you?
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.
Why do we care about comparing content from other domains? That's a pretty easy, if the URL does not start with https://nodejs.org
then simply return href
That can be 100% hardcoded there and it is the simplest yet best approach here; You can add inline documentary explaining why and that the href can be other domains but we only care about nodejs.org domain
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.
(Alternatively you can check against BASE_URL), the point is, these checks need to be deterministic. Using window.*
is not deterministic and environment-specific.
OOC - Is there any way we can style the search button on the Navigation bar? It feels a bit fatty and different from the OG design 👀 |
Currently we do not provide all possible customizations. We are going to work on it soon. |
a105511
to
32e70b2
Compare
@ovflowd I've addressed you new comments, but dropped a reply on one of them. Would you mind to check? Thank you! |
I see, it would be cool to allow we defining CSS variables; Like a templating system |
Description
As discussed with @ovflowd, this PR implements the official Orama Searchbox.
Validation
Related Issues
Check List
npm run format
to ensure the code follows the style guide.npm run test
to check if all tests are passing.npx turbo build
to check if the website builds without errors.