recreate project by using https://github.com/shadcn/next-template

App:
- support dark mode
- add toggle theme button
- add clear search button
- add search button
- add current page indicator
- add tool group pages
- add settings tool
- add 1 tab format option to Json format tool
- add paste button to some tools
- add file button to some tools
- add copy button to some tools
- add clear button to some tools
- change favicon
- change search hit rate
- change each page title
- change icons from Material Icons to Lucide
- change sidebar scroll area
- change editor from Ace to Monaco
- change parsable separators of number base converter
- change default value of format option of number base converter
- change default values of some tool forms
- change some styles
- remove disabled tools
- remove real-time search
- fix uri encoding tool

Dev:
- MUI + Emotion -> Radix UI + Tailwind CSS
- Next.js 12 Pages -> Next.js 13 App Router
- React 17 -> React 18
- many other packages upgraded
- use useState instead of recoil
- use Next.js typedRoutes instead of pathpida
- clean npm scripts
- format import statements by Prettier
- no component separations between container and presenter
- effective component memoizations
- add vscode settings
- many refactors
This commit is contained in:
rusconn
2023-05-14 12:44:34 +00:00
parent a7001213f8
commit f1c3bd2971
167 changed files with 5931 additions and 3853 deletions

26
app/search/page.tsx Normal file
View File

@@ -0,0 +1,26 @@
"use client";
import { useSearchParams } from "next/navigation";
import Fuse from "fuse.js";
import { homeTools } from "@/config/tools";
import { PageRootSection } from "@/components/page-root-section";
import { ToolCards } from "@/components/tool-cards";
export default function Page() {
const params = useSearchParams();
const q = params.get("q")?.trim() ?? "";
const fuse = new Fuse(homeTools, { keys: ["keywords"], threshold: 0.45 });
const keyWordsOptions = q.split(" ").map(word => ({ keywords: word }));
const result = fuse.search({ $or: keyWordsOptions });
const tools = result.map(({ item }) => item);
const [title, child] =
tools.length === 0
? ["No results found", null]
: [`Search results for "${q}"`, <ToolCards {...{ tools }} />];
return <PageRootSection {...{ title }}>{child}</PageRootSection>;
}