From 2b021e4223582b517c82fa402199d030a7b42316 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Fri, 31 Dec 2021 10:15:51 +0100 Subject: [PATCH] feat(fs.dev): Implemented search --- packages/freesewing.dev/components/header.js | 34 ++++++-- packages/freesewing.dev/components/search.js | 86 +++++++++---------- .../components/icons/close.js | 8 ++ .../components/icons/menu.js | 8 ++ .../components/layouts/default.js | 13 ++- .../components/mdx/highlight.js | 2 +- .../components/navigation/primary.js | 2 +- 7 files changed, 99 insertions(+), 54 deletions(-) create mode 100644 packages/freesewing.shared/components/icons/close.js create mode 100644 packages/freesewing.shared/components/icons/menu.js diff --git a/packages/freesewing.dev/components/header.js b/packages/freesewing.dev/components/header.js index f2293f0771e..3d799e5fe76 100644 --- a/packages/freesewing.dev/components/header.js +++ b/packages/freesewing.dev/components/header.js @@ -2,6 +2,9 @@ import { useState, useEffect } from 'react' import Logo from 'shared/components/logos/freesewing.js' import Link from 'next/link' import ThemePicker from 'shared/components/theme-picker.js' +import CloseIcon from 'shared/components/icons/close.js' +import MenuIcon from 'shared/components/icons/menu.js' +import SearchIcon from 'shared/components/icons/search.js' const Right = props => ( @@ -14,7 +17,7 @@ const Left = props => ( ) -const Header = ({ app }) => { +const Header = ({ app, setSearch }) => { const [prevScrollPos, setPrevScrollPos] = useState(0) const [show, setShow] = useState(true) @@ -50,7 +53,7 @@ const Header = ({ app }) => { -
+
+ +
+ +
@@ -74,7 +96,7 @@ const Header = ({ app }) => {
-
+
diff --git a/packages/freesewing.dev/components/search.js b/packages/freesewing.dev/components/search.js index 82be51c7853..4bfe7e29556 100644 --- a/packages/freesewing.dev/components/search.js +++ b/packages/freesewing.dev/components/search.js @@ -30,15 +30,15 @@ const Hits = props => { const CustomHits = connectHits(Hits); -const Highlight = ({ highlight, attribute, hit }) => { +const Highlight = ({ highlight, attribute, hit, snippet=false }) => { const parsedHit = highlight({ - highlightProperty: '_highlightResult', + highlightProperty: snippet ? '_snippetResult' : '_highlightResult', attribute, hit, }); return parsedHit.map((part, index) => part.isHighlighted - ? {part.value} + ? {part.value} : {part.value} ) } @@ -48,34 +48,42 @@ const CustomHighlight = connectHighlight(Highlight); const Hit = props => (
- -

+ + {props.hit?._highlightResult?.title ? : props.hit.title } -

-

- / - - {props.hit.page.split('/')[1]} - - / - {props.hit.page.split('/').slice(2).join('/')} -

+ + {props.hit.page.split('/')[1]}
+ {props.hit?._snippetResult?.body && ( + + + + + + )} + {props.hit?._highlightResult?.page && ( + + + + + + )}
) @@ -85,7 +93,6 @@ const handleInputKeydown = (evt, setSearch, setActive, active, router) => { if (evt.key === 'Escape') setSearch(false) if (evt.key === 'ArrowDown') setActive(act => act + 1) if (evt.key === 'ArrowUp') setActive(act => act - 1) - if (evt.key === 'c' && prev === 'Control') evt.target.value = '' if (evt.key === 'Enter') { // Trigger navigation if (evt?.target?.dataset?.links) { @@ -107,20 +114,9 @@ const SearchBox = props => { const { currentRefinement, isSearchStalled, refine, setSearch, setActive } = props return ( -
+
evt.preventDefault()}>
-
{ value={currentRefinement} onChange={event => refine(event.currentTarget.value)} onKeyDown={(evt) => handleInputKeydown(evt, setSearch, setActive, props.active, router)} - className="input lg:input-lg input-bordered input-primary w-full pr-16" + className="input lg:input-lg input-bordered input-neutral w-full pr-16" placeholder='Type to search' />
+
{ @@ -192,14 +195,9 @@ const Search = props => { } return ( -
-

Search

- -
- -
-
-
+ + + ) } diff --git a/packages/freesewing.shared/components/icons/close.js b/packages/freesewing.shared/components/icons/close.js new file mode 100644 index 00000000000..7563478363e --- /dev/null +++ b/packages/freesewing.shared/components/icons/close.js @@ -0,0 +1,8 @@ +/* Sourced from heroicons.com - Thanks guys! */ +const Close = () => ( + + + +) + +export default Close diff --git a/packages/freesewing.shared/components/icons/menu.js b/packages/freesewing.shared/components/icons/menu.js new file mode 100644 index 00000000000..34f14c1705d --- /dev/null +++ b/packages/freesewing.shared/components/icons/menu.js @@ -0,0 +1,8 @@ +/* Sourced from heroicons.com - Thanks guys! */ +const Menu = () => ( + + + +) + +export default Menu diff --git a/packages/freesewing.shared/components/layouts/default.js b/packages/freesewing.shared/components/layouts/default.js index c04c57ab264..356df8406f7 100644 --- a/packages/freesewing.shared/components/layouts/default.js +++ b/packages/freesewing.shared/components/layouts/default.js @@ -76,7 +76,7 @@ const DefaultLayout = ({ app, title=false, children=[], search, setSearch}) => { min-h-screen bg-base-100 `}> -
+
{
{search && ( -
+ <> +
+
+ )}
diff --git a/packages/freesewing.shared/components/mdx/highlight.js b/packages/freesewing.shared/components/mdx/highlight.js index cd9f28616d5..6d2ab5cd789 100644 --- a/packages/freesewing.shared/components/mdx/highlight.js +++ b/packages/freesewing.shared/components/mdx/highlight.js @@ -16,7 +16,7 @@ const Highlight = (props) => {
{names[language] ? names[language] : language}
-
+      
         {children}
       
diff --git a/packages/freesewing.shared/components/navigation/primary.js b/packages/freesewing.shared/components/navigation/primary.js index 7f51ad556f3..e2020db0a73 100644 --- a/packages/freesewing.shared/components/navigation/primary.js +++ b/packages/freesewing.shared/components/navigation/primary.js @@ -134,7 +134,7 @@ const SubLevel = ({ nodes={}, active }) => ( {child.__slug === active ? <>• : <>°} - {child.__linktitle} here + {child.__linktitle}