From c40bca2460f8cda3ce8f9b3285b727dd43a8f65c Mon Sep 17 00:00:00 2001 From: Sonny Date: Tue, 23 May 2023 17:43:30 +0200 Subject: [PATCH] feat: escape shortcut redirect to home page + page transition for all pages --- src/components/PageTransition.tsx | 25 +++++++++++ src/components/SearchModal/SearchList.tsx | 7 ++- src/components/SearchModal/SearchListItem.tsx | 45 ++++++------------- src/components/SearchModal/SearchModal.tsx | 4 +- src/pages/_app.tsx | 7 +++ src/pages/category/create.tsx | 8 ++-- src/pages/category/edit/[cid].tsx | 6 +-- src/pages/category/remove/[cid].tsx | 5 ++- src/pages/index.tsx | 19 +++----- src/pages/link/create.tsx | 6 +-- src/pages/link/edit/[lid].tsx | 6 +-- src/pages/link/remove/[lid].tsx | 5 ++- src/utils/client.ts | 1 + 13 files changed, 76 insertions(+), 68 deletions(-) create mode 100644 src/components/PageTransition.tsx diff --git a/src/components/PageTransition.tsx b/src/components/PageTransition.tsx new file mode 100644 index 0000000..e08e2f8 --- /dev/null +++ b/src/components/PageTransition.tsx @@ -0,0 +1,25 @@ +import { motion } from "framer-motion"; +import { ReactNode } from "react"; + +export default function PageTransition({ + className, + children, +}: { + className: string; + children: ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/src/components/SearchModal/SearchList.tsx b/src/components/SearchModal/SearchList.tsx index aa24915..5b93a6d 100644 --- a/src/components/SearchModal/SearchList.tsx +++ b/src/components/SearchModal/SearchList.tsx @@ -10,12 +10,12 @@ export default function SearchList({ items, noItem, cursor, - setCursor, + closeModal, }: { items: SearchItem[]; noItem?: ReactNode; cursor: number; - setCursor: (cursor: number) => void; + closeModal: () => void; }) { const searchItemsGrouped = useMemo( () => groupItemBy(items, "category.name"), @@ -35,9 +35,8 @@ export default function SearchList({ {items.map((item) => ( ))} diff --git a/src/components/SearchModal/SearchListItem.tsx b/src/components/SearchModal/SearchListItem.tsx index 9f9e89f..4b60dab 100644 --- a/src/components/SearchModal/SearchListItem.tsx +++ b/src/components/SearchModal/SearchListItem.tsx @@ -1,65 +1,48 @@ -import { motion } from "framer-motion"; import LinkTag from "next/link"; import { AiOutlineFolder } from "react-icons/ai"; import LinkFavicon from "components/Links/LinkFavicon"; import { SearchItem } from "types"; -import { useEffect, useId, useRef, useState } from "react"; +import { useEffect, useId, useRef } from "react"; import styles from "./search.module.scss"; export default function SearchListItem({ item, - index, selected, - setCursor, + closeModal, }: { item: SearchItem; - index?: number; selected: boolean; - setCursor: (cursor: number) => void; + closeModal: () => void; }) { const id = useId(); const ref = useRef(null); - const [isHover, setHover] = useState(false); - const { name, type, url } = item; useEffect(() => { - if (selected && !isHover) { + if (selected) { ref.current?.scrollIntoView({ behavior: "smooth", block: "center" }); } - }, [isHover, selected]); + }, [selected]); return ( - { - setCursor(index); - setHover(true); - }} - onMouseLeave={() => setHover(false)} - key={id} - > - +
  • + {type === "link" ? ( ) : ( )} {name} - {selected && "selected"} + {selected && "[selected]"} - +
  • ); } diff --git a/src/components/SearchModal/SearchModal.tsx b/src/components/SearchModal/SearchModal.tsx index 307289e..6c3f9fe 100644 --- a/src/components/SearchModal/SearchModal.tsx +++ b/src/components/SearchModal/SearchModal.tsx @@ -11,8 +11,8 @@ import SearchList from "./SearchList"; import * as Keys from "constants/keys"; import { GOOGLE_SEARCH_URL } from "constants/search-urls"; -import { Category, SearchItem } from "types"; import { useLocalStorage } from "hooks/useLocalStorage"; +import { Category, SearchItem } from "types"; import styles from "./search.module.scss"; @@ -134,7 +134,7 @@ export default function SearchModal({ items={itemsCompletion} noItem={} cursor={cursor} - setCursor={setCursor} + closeModal={close} /> )}