Chore: add query params

This commit is contained in:
kartik-gupta-ij 2023-11-01 23:21:22 +05:30
parent 422b84117e
commit 79af2ba79e
4 changed files with 73 additions and 10 deletions

View File

@ -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",

View File

@ -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'}

View File

@ -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

View File

@ -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>
);