mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-09 23:15:36 +00:00
feat (wip): search result groups
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { ReactNode, useMemo } from "react";
|
||||
|
||||
import { SearchItem } from "types";
|
||||
import { groupItemBy } from "utils/array";
|
||||
import SearchListItem from "./SearchListItem";
|
||||
|
||||
import styles from "./search.module.scss";
|
||||
@@ -16,22 +17,31 @@ export default function SearchList({
|
||||
cursor: number;
|
||||
setCursor: (cursor: number) => void;
|
||||
}) {
|
||||
const searchItemsGrouped = useMemo(
|
||||
() => groupItemBy(items, "category.name"),
|
||||
[items]
|
||||
);
|
||||
const groupedItems = useMemo<any>(
|
||||
() => Object.entries(searchItemsGrouped),
|
||||
[searchItemsGrouped]
|
||||
);
|
||||
|
||||
return (
|
||||
<ul className={styles["search-list"]}>
|
||||
{items.length > 0 ? (
|
||||
items.map((item, index) => (
|
||||
<SearchListItem
|
||||
item={{
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
url: item.url,
|
||||
type: item.type,
|
||||
}}
|
||||
setCursor={setCursor}
|
||||
selected={index === cursor}
|
||||
index={index}
|
||||
key={item.type + "-" + item.id}
|
||||
/>
|
||||
{groupedItems.length > 0 ? (
|
||||
groupedItems.map(([key, items], index) => (
|
||||
<li key={key + "-" + key}>
|
||||
<span>{typeof key === "undefined" ? "-" : key}</span>
|
||||
{items.map((item) => (
|
||||
<SearchListItem
|
||||
item={item}
|
||||
setCursor={setCursor}
|
||||
selected={index === cursor}
|
||||
index={index}
|
||||
key={item.id}
|
||||
/>
|
||||
))}
|
||||
</li>
|
||||
))
|
||||
) : noItem ? (
|
||||
noItem
|
||||
|
||||
Reference in New Issue
Block a user