Chore: add query params
This commit is contained in:
parent
422b84117e
commit
79af2ba79e
|
@ -17,7 +17,8 @@
|
||||||
"http-status-codes": "^2.3.0",
|
"http-status-codes": "^2.3.0",
|
||||||
"prism-react-renderer": "^2.1.0",
|
"prism-react-renderer": "^2.1.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0"
|
"react-dom": "^18.2.0",
|
||||||
|
"react-router-dom": "^6.18.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.8.0",
|
"@types/node": "^20.8.0",
|
||||||
|
|
|
@ -29,6 +29,9 @@ dependencies:
|
||||||
react-dom:
|
react-dom:
|
||||||
specifier: ^18.2.0
|
specifier: ^18.2.0
|
||||||
version: 18.2.0(react@18.2.0)
|
version: 18.2.0(react@18.2.0)
|
||||||
|
react-router-dom:
|
||||||
|
specifier: ^6.18.0
|
||||||
|
version: 6.18.0(react-dom@18.2.0)(react@18.2.0)
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@types/node':
|
'@types/node':
|
||||||
|
@ -693,6 +696,11 @@ packages:
|
||||||
fastq: 1.15.0
|
fastq: 1.15.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@remix-run/router@1.11.0:
|
||||||
|
resolution: {integrity: sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@swc/core-darwin-arm64@1.3.90:
|
/@swc/core-darwin-arm64@1.3.90:
|
||||||
resolution: {integrity: sha512-he0w74HvcoufE6CZrB/U/VGVbc7021IQvYrn1geMACnq/OqMBqjdczNtdNfJAy87LZ4AOUjHDKEIjsZZu7o8nQ==}
|
resolution: {integrity: sha512-he0w74HvcoufE6CZrB/U/VGVbc7021IQvYrn1geMACnq/OqMBqjdczNtdNfJAy87LZ4AOUjHDKEIjsZZu7o8nQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -2044,6 +2052,29 @@ packages:
|
||||||
use-sidecar: 1.1.2(@types/react@18.2.21)(react@18.2.0)
|
use-sidecar: 1.1.2(@types/react@18.2.21)(react@18.2.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/react-router-dom@6.18.0(react-dom@18.2.0)(react@18.2.0):
|
||||||
|
resolution: {integrity: sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
react: '>=16.8'
|
||||||
|
react-dom: '>=16.8'
|
||||||
|
dependencies:
|
||||||
|
'@remix-run/router': 1.11.0
|
||||||
|
react: 18.2.0
|
||||||
|
react-dom: 18.2.0(react@18.2.0)
|
||||||
|
react-router: 6.18.0(react@18.2.0)
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/react-router@6.18.0(react@18.2.0):
|
||||||
|
resolution: {integrity: sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
react: '>=16.8'
|
||||||
|
dependencies:
|
||||||
|
'@remix-run/router': 1.11.0
|
||||||
|
react: 18.2.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/react-style-singleton@2.2.1(@types/react@18.2.21)(react@18.2.0):
|
/react-style-singleton@2.2.1(@types/react@18.2.21)(react@18.2.0):
|
||||||
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
|
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
|
@ -11,31 +11,58 @@ import {
|
||||||
import { IconSearch } from "@tabler/icons-react";
|
import { IconSearch } from "@tabler/icons-react";
|
||||||
import useMountedState from "@/hooks/useMountedState";
|
import useMountedState from "@/hooks/useMountedState";
|
||||||
import { useGetSearchResult } from "@/hooks/useGetSearchResult";
|
import { useGetSearchResult } from "@/hooks/useGetSearchResult";
|
||||||
import { getHotkeyHandler } from "@mantine/hooks";
|
import { getHotkeyHandler, useHotkeys } from "@mantine/hooks";
|
||||||
import { FileTree } from "../FIleTree";
|
import { FileTree } from "../FIleTree";
|
||||||
import { CodeContainer } from "../CodeContainer";
|
import { CodeContainer } from "../CodeContainer";
|
||||||
import classes from "./Main.module.css";
|
import classes from "./Main.module.css";
|
||||||
import DemoSearch from "../DemoSearch";
|
import DemoSearch from "../DemoSearch";
|
||||||
|
import { useSearchParams } from "react-router-dom";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
export default function Main() {
|
export default function Main() {
|
||||||
const [query, setQuery] = useMountedState("");
|
const [query, setQuery] = useMountedState("");
|
||||||
const { data, getSearch, loading, error, resetData } = useGetSearchResult();
|
const { data, getSearch, loading, error, resetData } = useGetSearchResult();
|
||||||
|
const [searchParams, setSearchParams] = useSearchParams();
|
||||||
|
|
||||||
|
useHotkeys([
|
||||||
|
[
|
||||||
|
"/",
|
||||||
|
() => {
|
||||||
|
const input = document.querySelector("input");
|
||||||
|
input?.focus();
|
||||||
|
},
|
||||||
|
],
|
||||||
|
]);
|
||||||
const handleSubmit = () => {
|
const handleSubmit = () => {
|
||||||
resetData();
|
resetData();
|
||||||
if (query) {
|
if (query) {
|
||||||
getSearch(query);
|
getSearch(query);
|
||||||
|
setSearchParams({ query });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDemoSearch = (query: string) => {
|
const handleDemoSearch = (query: string) => {
|
||||||
resetData();
|
resetData();
|
||||||
if (query) {
|
if (query) {
|
||||||
|
setSearchParams({ query: query });
|
||||||
setQuery(query);
|
setQuery(query);
|
||||||
getSearch(query);
|
getSearch(query);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (searchParams.get("query")&&searchParams.get("query")!==query) {
|
||||||
|
handleDemoSearch(searchParams.get("query") ?? "");
|
||||||
|
}
|
||||||
|
}, [searchParams.get("query")]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (query === "") {
|
||||||
|
resetData();
|
||||||
|
window.history.replaceState({}, "", "/");
|
||||||
|
}
|
||||||
|
}, [query]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container size="lg">
|
<Container size="lg">
|
||||||
<TextInput
|
<TextInput
|
||||||
|
@ -57,7 +84,7 @@ export default function Main() {
|
||||||
}
|
}
|
||||||
rightSectionWidth={"6rem"}
|
rightSectionWidth={"6rem"}
|
||||||
value={query}
|
value={query}
|
||||||
pt={ data ? "1rem" : "5rem" }
|
pt={data || loading ? "1rem" : "5rem"}
|
||||||
required
|
required
|
||||||
onChange={(event: any) => setQuery(event.currentTarget.value)}
|
onChange={(event: any) => setQuery(event.currentTarget.value)}
|
||||||
onKeyDown={getHotkeyHandler([["Enter", handleSubmit]])}
|
onKeyDown={getHotkeyHandler([["Enter", handleSubmit]])}
|
||||||
|
@ -68,6 +95,7 @@ export default function Main() {
|
||||||
zIndex: 100,
|
zIndex: 100,
|
||||||
backgroundColor: "#fff",
|
backgroundColor: "#fff",
|
||||||
}}
|
}}
|
||||||
|
ref={(input) => input && input.focus()}
|
||||||
/>
|
/>
|
||||||
{data && (
|
{data && (
|
||||||
<Box
|
<Box
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import React from 'react'
|
import React from "react";
|
||||||
import ReactDOM from 'react-dom/client'
|
import ReactDOM from "react-dom/client";
|
||||||
import App from './App.tsx'
|
import App from "./App.tsx";
|
||||||
|
import { BrowserRouter } from "react-router-dom";
|
||||||
|
|
||||||
ReactDOM.createRoot(document.getElementById('root')!).render(
|
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<App />
|
<BrowserRouter>
|
||||||
</React.StrictMode>,
|
<App />
|
||||||
)
|
</BrowserRouter>
|
||||||
|
</React.StrictMode>
|
||||||
|
);
|
||||||
|
|
Loading…
Reference in New Issue