diff --git a/api/search.ts b/api/search.ts index 0f4e0fb3..cb4420e9 100644 --- a/api/search.ts +++ b/api/search.ts @@ -1,7 +1,9 @@ import type { VercelRequest, VercelResponse } from "@vercel/node"; import exportedIndex from "../searchIndex"; +import unicornProfilePicMap from "../public/unicorn-profile-pic-map"; import Fuse from "fuse.js"; +import type { PostInfo } from "../src/types/PostInfo"; const myIndex = Fuse.parseIndex(exportedIndex.index); @@ -18,11 +20,19 @@ const fuse = new Fuse( myIndex ); +const unicornProfilePicObj = {}; +for (const picMapItem of unicornProfilePicMap) { + unicornProfilePicObj[picMapItem.id] = picMapItem; +} + export default async (req: VercelRequest, res: VercelResponse) => { // TODO: `pickdeep` only required fields const searchStr = req?.query?.query as string; if (!searchStr) return []; if (Array.isArray(searchStr)) return []; - const items = fuse.search(searchStr).map((item) => item.item); - res.send(items); + const posts = fuse.search(searchStr).map((item) => item.item as PostInfo); + const unicornProfilePicMap = posts.flatMap((post) => + post.authorsMeta.map((authorMeta) => unicornProfilePicObj[authorMeta.id]) + ); + res.send({ posts, totalPosts: posts.length, unicornProfilePicMap }); }; diff --git a/astro.config.ts b/astro.config.ts index 5302d454..0ba25b9c 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -17,6 +17,7 @@ import { rehypeExcerpt } from "./src/utils/markdown/rehype-excerpt"; import { rehypeUnicornPopulatePost } from "./src/utils/markdown/rehype-unicorn-populate-post"; import { rehypeWordCount } from "./src/utils/markdown/rehype-word-count"; import { rehypeUnicornGetSuggestedPosts } from "./src/utils/markdown/rehype-unicorn-get-suggested-posts"; +import generateUnicornProfilePicMap from "./src/utils/rollup/generate-unicorn-profile-pic-map"; import copy from "rollup-plugin-copy"; import preact from "@astrojs/preact"; @@ -25,6 +26,7 @@ import behead from "remark-behead"; import rehypeRaw from "rehype-raw"; import image from "@astrojs/image"; +import path from "path"; export default defineConfig({ integrations: [image(), preact()], @@ -46,6 +48,12 @@ export default defineConfig({ }), enforce: "pre", }, + { + ...generateUnicornProfilePicMap({ + output: path.resolve("./public/unicorn-profile-pic-map.ts"), + }), + enforce: "pre", + }, ], }, markdown: { diff --git a/public/.gitignore b/public/.gitignore index 404ed318..d343e4ae 100644 --- a/public/.gitignore +++ b/public/.gitignore @@ -1 +1,2 @@ content/** +unicorn-profile-pic-map.ts \ No newline at end of file diff --git a/src/components/filter-search-bar/filter-search-bar.astro b/src/components/filter-search-bar/filter-search-bar.astro index cc22c804..ce7c3569 100644 --- a/src/components/filter-search-bar/filter-search-bar.astro +++ b/src/components/filter-search-bar/filter-search-bar.astro @@ -3,12 +3,6 @@ import { ProfilePictureMap } from "utils/get-unicorn-profile-pic-map"; import styles from "./filter-search-bar.module.scss"; import SearchField from "./search-field/search-field.astro"; // import FilterListbox from "./filter-listbox/filter-listbox.astro"; - -export interface FilterSearchBarProps { - unicornProfilePicMap: ProfilePictureMap; -} - -const { unicornProfilePicMap } = Astro.props as FilterSearchBarProps; ---
@@ -18,14 +12,11 @@ const { unicornProfilePicMap } = Astro.props as FilterSearchBarProps;
-