From c58590b287acdbe589a6edf7950baf88e7dc0190 Mon Sep 17 00:00:00 2001 From: Jason Steving Date: Sun, 31 Mar 2024 14:41:13 -0700 Subject: [PATCH] Support Browser History in ClaroDocs Generated Site This was a fairly straightforward change that stores state in URL query params instead of using React's `useState()` directly since now when the site auto-reloads, it'll reload to the specific URL that it was at before the reload and so you won't get disrupted in your browsing of the site just because you made a code change. There're probably some weird edge cases here where you'd need to manually navigate back to the DepGraph (home) if the query params are invalid, but that's fine. Arguably, this should now be in a good enough state to actually push a release to the BCR with this. --- MODULE.bazel | 2 +- logo/BUILD | 2 + tools/clarodocs/index.html | 6 +- tools/clarodocs/package.json | 1 + tools/clarodocs/pnpm-lock.yaml | 31 +++++++ tools/clarodocs/public/claro-logo-192x192.png | Bin 0 -> 12032 bytes tools/clarodocs/public/claro-logo-512x512.png | Bin 0 -> 44767 bytes tools/clarodocs/public/claro-logo.ico | Bin 0 -> 15406 bytes tools/clarodocs/public/favicon.ico | Bin 3870 -> 0 bytes tools/clarodocs/public/logo192.png | Bin 5347 -> 0 bytes tools/clarodocs/public/logo512.png | Bin 9664 -> 0 bytes tools/clarodocs/public/manifest.json | 12 +-- tools/clarodocs/src/App.tsx | 85 ++++++++++++++---- tools/clarodocs/src/BUILD | 1 + .../clarodocs/src/claro_module_apis/demo.tsx | 2 +- .../src/claro_module_apis/testjson.json | 44 --------- .../dep_graph/WholeProgramDepGraph.tsx | 5 +- .../components/highlight_js/HighlightJS.tsx | 6 +- tools/clarodocs/src/hooks/BUILD | 15 ++++ .../src/hooks/UseSearchParamsHook.tsx | 28 ++++++ 20 files changed, 162 insertions(+), 78 deletions(-) create mode 100644 tools/clarodocs/public/claro-logo-192x192.png create mode 100644 tools/clarodocs/public/claro-logo-512x512.png create mode 100644 tools/clarodocs/public/claro-logo.ico delete mode 100644 tools/clarodocs/public/favicon.ico delete mode 100644 tools/clarodocs/public/logo192.png delete mode 100644 tools/clarodocs/public/logo512.png delete mode 100644 tools/clarodocs/src/claro_module_apis/testjson.json create mode 100644 tools/clarodocs/src/hooks/BUILD create mode 100644 tools/clarodocs/src/hooks/UseSearchParamsHook.tsx diff --git a/MODULE.bazel b/MODULE.bazel index cad256cd..7b685eb4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,7 +1,7 @@ module( name = "claro-lang", repo_name = "claro-lang", - version = "0.1.409", + version = "0.1.499", ) bazel_dep(name = "aspect_bazel_lib", version = "2.0.1") diff --git a/logo/BUILD b/logo/BUILD index 2e810d9b..34459822 100644 --- a/logo/BUILD +++ b/logo/BUILD @@ -1,3 +1,5 @@ +load("@aspect_rules_js//js:defs.bzl", "js_library") + exports_files([ "ClaroLogoFromArrivalHeptapodOfferWeapon1.jpeg", "ClaroLogoFromArrivalHeptapodOfferWeapon-transparentBackground.png", diff --git a/tools/clarodocs/index.html b/tools/clarodocs/index.html index 85fea98c..adf48eef 100644 --- a/tools/clarodocs/index.html +++ b/tools/clarodocs/index.html @@ -2,9 +2,9 @@ - + - + - React App + ClaroDocs diff --git a/tools/clarodocs/package.json b/tools/clarodocs/package.json index 9bb803ac..1cd58d69 100644 --- a/tools/clarodocs/package.json +++ b/tools/clarodocs/package.json @@ -10,6 +10,7 @@ "mermaid": "10.8.0", "react": "~18.2.0", "react-dom": "~18.2.0", + "react-router-dom": "^6.22.3", "web-vitals": "2.1.4" }, "devDependencies": { diff --git a/tools/clarodocs/pnpm-lock.yaml b/tools/clarodocs/pnpm-lock.yaml index 30f5e9f6..ffe062ac 100644 --- a/tools/clarodocs/pnpm-lock.yaml +++ b/tools/clarodocs/pnpm-lock.yaml @@ -25,6 +25,9 @@ dependencies: react-dom: specifier: ~18.2.0 version: 18.2.0(react@18.2.0) + react-router-dom: + specifier: ^6.22.3 + version: 6.22.3(react-dom@18.2.0)(react@18.2.0) web-vitals: specifier: 2.1.4 version: 2.1.4 @@ -2120,6 +2123,11 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@remix-run/router@1.15.3: + resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} + engines: {node: '>=14.0.0'} + dev: false + /@rollup/pluginutils@5.1.0: resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -6801,6 +6809,29 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-router-dom@6.22.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.15.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-router: 6.22.3(react@18.2.0) + dev: false + + /react-router@6.22.3(react@18.2.0): + resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.15.3 + react: 18.2.0 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} diff --git a/tools/clarodocs/public/claro-logo-192x192.png b/tools/clarodocs/public/claro-logo-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..1f956ad9d48cb8a9824463d8d5317a11889ac084 GIT binary patch literal 12032 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 literal 0 HcmV?d00001 diff --git a/tools/clarodocs/public/claro-logo-512x512.png b/tools/clarodocs/public/claro-logo-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..7729acc61175d7a9a4a91b973f360cf0f2a0c04a GIT binary patch literal 44767 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 K{*!>m68HmrKo$7_ literal 0 HcmV?d00001 diff --git a/tools/clarodocs/public/favicon.ico b/tools/clarodocs/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/tools/clarodocs/public/logo192.png b/tools/clarodocs/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/tools/clarodocs/public/manifest.json b/tools/clarodocs/public/manifest.json index 080d6c77..fe1c1a99 100644 --- a/tools/clarodocs/public/manifest.json +++ b/tools/clarodocs/public/manifest.json @@ -1,25 +1,25 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "ClaroDocs", + "name": "ClaroDocs", "icons": [ { - "src": "favicon.ico", + "src": "claro-logo.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, { - "src": "logo192.png", + "src": "claro-logo-192x192.png", "type": "image/png", "sizes": "192x192" }, { - "src": "logo512.png", + "src": "claro-logo-512x512.png", "type": "image/png", "sizes": "512x512" } ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", + "theme_color":"#ffffff", "background_color": "#ffffff" } diff --git a/tools/clarodocs/src/App.tsx b/tools/clarodocs/src/App.tsx index 65336909..020919d2 100644 --- a/tools/clarodocs/src/App.tsx +++ b/tools/clarodocs/src/App.tsx @@ -7,24 +7,53 @@ import { HighlightJS } from './components/highlight_js/HighlightJS'; import { DepGraph } from './components/dep_graph/DepGraph'; import { WholeProgramDepGraph } from './components/dep_graph/WholeProgramDepGraph'; import { ModuleTree } from './components/module_tree/ModuleTree'; +import { + createBrowserRouter, + RouterProvider, + useSearchParams +} from "react-router-dom"; +// import { useSearchParamsState } from './hooks/UseSearchParamsHook'; import { Breadcrumb, ConfigProvider, Layout, Menu, theme } from 'antd'; const { Header, Sider, Content } = Layout; -function App() { - const [showDepGraph, setShowDepGraph] = useState(true); - const { - token: { colorBgContainer, borderRadiusLG }, - } = theme.useToken(); - - const [ selectedModule, setSelectedModule ] = useState(''); - const [ targetType, setTargetType ] = useState(''); +function AppImpl() { + const [ searchParams, setSearchParams ] = useSearchParams(); - const [ ClaroModules, rootName, rootDeps ] = getClaroModules(setSelectedModule); + const showDepGraph = searchParams.get('showDepGraph') === null || searchParams.get('showDepGraph') === 'true'; + let selectedModule = searchParams.get('selectedModule') || ''; + const targetType = searchParams.get('targetType') || ''; - // We'll reuse these tooltip components every time the dep is referenced in the Module API. - const selectedModuleDepsTooltips = ClaroModules[selectedModule]?.deps; + const setShowDepGraph = function() { + setSearchParams({ + showDepGraph: !showDepGraph, + selectedModule: '', + targetType: '' + }); + } + const setSelectedModule = function(newSelectedModule) { + setSearchParams({ + showDepGraph: false, + selectedModule: newSelectedModule, + targetType: targetType + }); + } + const setSelectedModuleAndTargetType = function(newSelectedModule, newTargetType) { + setSearchParams({ + showDepGraph: false, + selectedModule: newSelectedModule, + targetType: newTargetType + }); + } + const setTargetType = function(newTargetType) { + setSearchParams({ + showDepGraph: showDepGraph, + selectedModule: selectedModule, + targetType: newTargetType + }); + } + const [ ClaroModules, rootName, rootDeps ] = getClaroModules(setSelectedModule); useEffect( () => { @@ -42,6 +71,19 @@ function App() { ); function APIs() { + if (!selectedModule) { + // Ensure that this still works even if the user just clicked the APIs tab directly without manually selecting a + // module. + selectedModule = Object.keys(ClaroModules).toSorted()[0]; + } + + // We'll reuse these tooltip components every time the dep is referenced in the Module API. + const selectedModuleDepsTooltips = ClaroModules[selectedModule]?.deps; + + const { + token: { colorBgContainer, borderRadiusLG }, + } = theme.useToken(); + return ( @@ -131,9 +173,8 @@ function App() { className="claro" style={{ textAlign: "left" }} id={selectedModule} - setSelectedModule={setSelectedModule} targetType={targetType} - setTargetType={setTargetType} + setSelectedMOduleAndTargetType={setSelectedModuleAndTargetType} selectedModuleDepsTooltips={selectedModuleDepsTooltips} > {ClaroModules[selectedModule]?.api} @@ -152,7 +193,6 @@ function App() { modules={ClaroModules} selectedModule={selectedModule} setSelectedModule={setSelectedModule} - setShowDepGraph={setShowDepGraph} /> ); } @@ -170,14 +210,14 @@ function App() { return (

-
+
setShowDepGraph(!showDepGraph)} + onClick={({ key }) => setShowDepGraph()} style={{ flex: 1, minWidth: 200 }} />
@@ -189,4 +229,17 @@ function App() { ); } +function App() { + // We'll wrap everything in a React Router literally just so that it can easily maintain state from query params. + // The useSearchParams() function simply doesn't work outside of this RouterProvider context. Lame. + const router = createBrowserRouter([ + { + path: "/", + element: , + }, + ]); + + return +} + export default App; \ No newline at end of file diff --git a/tools/clarodocs/src/BUILD b/tools/clarodocs/src/BUILD index a2855d4a..5fe0171c 100644 --- a/tools/clarodocs/src/BUILD +++ b/tools/clarodocs/src/BUILD @@ -33,6 +33,7 @@ ts_project( "//tools/clarodocs/src/components/input", "//tools/clarodocs/src/components/module_tree", "//tools/clarodocs/src/claro_module_apis", + "//tools/clarodocs/src/hooks:use_search_params_hook", ], ) diff --git a/tools/clarodocs/src/claro_module_apis/demo.tsx b/tools/clarodocs/src/claro_module_apis/demo.tsx index 76e0221c..98f89c10 100644 --- a/tools/clarodocs/src/claro_module_apis/demo.tsx +++ b/tools/clarodocs/src/claro_module_apis/demo.tsx @@ -17,7 +17,7 @@ export function getClaroModules(setSelectedModule) { // Copy the data so that it's not overwritten. const fmtMod = formatUniqueModuleName(mod); claroModules[fmtMod] = {}; - claroModules[fmtMod]['api'] = data.depGraph[mod].api; + claroModules[fmtMod]['api'] = data.depGraph[mod].api.trim(); claroModules[fmtMod]['deps'] = {}; for (let dep of Object.keys(data.depGraph[mod].deps)) { diff --git a/tools/clarodocs/src/claro_module_apis/testjson.json b/tools/clarodocs/src/claro_module_apis/testjson.json deleted file mode 100644 index 8d45af30..00000000 --- a/tools/clarodocs/src/claro_module_apis/testjson.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "stdlib$http$http": { - "api": "\nfunction getOk200HttpResponseForHtml(json: string) -> HttpResponse;\n\nfunction getOk200HttpResponseForJson(json: string) -> HttpResponse;\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$buggy_buggies_service$buggy_buggies_client": { - "api": "\n# This encodes the public API of the Buggy-Buggies site available at https://buggy-buggies.gigalixirapp.com/.\n# Claro will generate a non-blocking RPC client for you via the following:\n# `var myClient: HttpClient = getHttpClient(\"https://buggy-buggies.gigalixirapp.com\");`\nHttpService BuggyBuggies {\n hostGame: \"/api/host/{handle}\",\n friendsJoin: \"/api/game/{gameId}/join/{handle}\",\n move: \"/api/game/{gameId}/player/{secret}/move/{direction}\",\n worldInfo: \"/api/game/{gameId}/player/{secret}/info\",\n reset: \"/api/game/{gameId}/player/{secret}/reset\"\n}\n\n# Now there's a single static definition of which client will be used for sending reqs to the Buggy Buggies server.\nstatic HTTP_CLIENT: HttpClient;\n\n# This type models the JSON response from the Buggy-Buggies service as a Claro type to enable parsing the response into\n# something that you can work with programmatically with strict type validation on the edge.\nalias MoveResponse : struct {\n reason: oneof,\n result: struct {\n players: { string : struct { x: int, y: int } },\n dimensions: struct {\n height: int,\n width: int\n },\n world: { string: string }, # E.g. (\"0,6\": \"wall\")\n you: struct {\n handle: string,\n purse: int,\n boom: boolean,\n x: int,\n y: int\n }\n },\n success: boolean\n}\n\nfunction getParsedMoveResponse(buggyResponse: string) -> std::ParsedJson;\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$data_structures$default_dict": { - "api": "newtype DefaultDict: struct {defaultPr: provider, dict: mut {K:V}}\n\ninitializers DefaultDict {\n function create(defaultPr: provider) -> DefaultDict;\n}\n\n# TODO(steving) Claro really needs to support overloading operator[] via some Contract.\nunwrappers DefaultDict {\n function get(d: DefaultDict, key: K) -> V;\n consumer put(d: DefaultDict, key: K, value: V);\n function asMap(d: DefaultDict) -> {K: V};\n}\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$data_structures$position": { - "api": "\nnewtype Position : struct {x: int, y: int}\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$data_structures$heap": { - "api": "\n# This implementation is the result of asking Chat GPT to implement it in python for me and reworking it to fit in Claro\n# I'm not thinking too hard about this...\nnewtype Heap: mut [struct {dist: int, pos: Pos::Position}]\n\ninitializers Heap {\n provider getHeap() -> Heap;\n}\n\nunwrappers Heap {\n function extract_min(heap: Heap) -> oneof>;\n consumer insert(heap: Heap, value: struct {dist: int, pos: Pos::Position});\n function heapIsEmpty(heap: Heap) -> boolean;\n}\n", - "deps": {"Pos": "examples$claro_programs$demo_server$buggy_buggies$data_structures$position"} - }, - "examples$claro_programs$demo_server$buggy_buggies$buggy_agent$buggy_agent": { - "api": "\nalias BestPath : [Pos::Position]\n\nfunction parseWorldMap(world: {string: string}) -> {Pos::Position: string};\nfunction dijkstra(world: {Pos::Position: string}, start: Pos::Position) -> BestPath;\nfunction movesFromBestPath(bestPath: BestPath) -> [string];\n", - "deps": {"DefaultDict": "examples$claro_programs$demo_server$buggy_buggies$data_structures$default_dict", - "Heaps": "examples$claro_programs$demo_server$buggy_buggies$data_structures$heap", - "Pos": "examples$claro_programs$demo_server$buggy_buggies$data_structures$position"} - }, - "examples$claro_programs$demo_server$buggy_buggies$utils$utils": { - "api": "# This module is simply a dumping ground of uncategorized utility functions.\n\nfunction handleBuggyResponseAsHtmlStrParts(buggyResponse: oneof>) -> [string];\nfunction reduce(l: [T], accumulated: R, accumulatorFn: function<|R, T| -> R>) -> R;\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$endpoint_handlers$resources$resources": { - "api": "\nstatic gamePageHtml : string;\n", - "deps": {} - }, - "examples$claro_programs$demo_server$buggy_buggies$endpoint_handlers$endpoint_handlers": { - "api": "\n# It's worth noting that in the Claro way of the world, this distinction of whether a Procedure is implemented as a\n# Graph or not is considered completely an internal implementation consideration that's not directly observable with\n# in-language semantics. Hence, this is *actually* implemented internally as a Graph Procedure, but that detail just\n# isn't exposed here.\nprovider gamePageHandler() -> future;\n\nfunction startNewGameHandler(handle: string) -> future;\n\nfunction getBestMovesHandler(buggyResponse: oneof>) -> string;\n\nfunction gameMoveHandler(gameId: string, playerSecret: string, dir: string) -> future;\n", - "deps": {"Agent": "examples$claro_programs$demo_server$buggy_buggies$buggy_agent$buggy_agent", - "BuggyBuggies": "examples$claro_programs$demo_server$buggy_buggies$buggy_buggies_service$buggy_buggies_client", - "Utils": "examples$claro_programs$demo_server$buggy_buggies$utils$utils", - "Pos": "examples$claro_programs$demo_server$buggy_buggies$data_structures$position", - "Resources": "examples$claro_programs$demo_server$buggy_buggies$endpoint_handlers$resources$resources"} - } -} diff --git a/tools/clarodocs/src/components/dep_graph/WholeProgramDepGraph.tsx b/tools/clarodocs/src/components/dep_graph/WholeProgramDepGraph.tsx index 2c99f538..c755635d 100644 --- a/tools/clarodocs/src/components/dep_graph/WholeProgramDepGraph.tsx +++ b/tools/clarodocs/src/components/dep_graph/WholeProgramDepGraph.tsx @@ -1,6 +1,6 @@ import { Mermaid } from '../mermaid/Mermaid'; -export function WholeProgramDepGraph({ rootName, rootDeps, modules, selectedModule, setSelectedModule, setShowDepGraph }) { +export function WholeProgramDepGraph({ rootName, rootDeps, modules, selectedModule, setSelectedModule}) { let mermaidGraph = 'graph LR;\n'; for (let rootDep of Object.keys(rootDeps).toSorted()) { @@ -24,8 +24,7 @@ export function WholeProgramDepGraph({ rootName, rootDeps, modules, selectedModu } // Every node navigates to its Module API page. nodeOnClickCallbacks[module[0]] = () => { - setSelectedModule(module[0]); - setShowDepGraph(false); // Navigate to the API. + setSelectedModule(module[0]); // Navigate to the API. } } diff --git a/tools/clarodocs/src/components/highlight_js/HighlightJS.tsx b/tools/clarodocs/src/components/highlight_js/HighlightJS.tsx index 95b3f0d9..68f050ed 100644 --- a/tools/clarodocs/src/components/highlight_js/HighlightJS.tsx +++ b/tools/clarodocs/src/components/highlight_js/HighlightJS.tsx @@ -47,8 +47,7 @@ export class HighlightJS extends React.Component { const nextNode = codeEl.childNodes[i + 1]; if (this.isExpectedSpan(nextNode, '::')) { // Make sure that `this` doesn't escape the current scope. - const setSelectedModule = this.props.setSelectedModule; - const setTargetType = this.props.setTargetType; + const setSelectedMOduleAndTargetType = this.props.setSelectedMOduleAndTargetType; const depName = el.textContent.trim(); const targetType = codeEl.childNodes[i + 2].textContent.trim(); @@ -62,8 +61,7 @@ export class HighlightJS extends React.Component { const _selectedModule = this.props.selectedModuleDepsTooltips[depName].path; function _setSelectedModule(e) { - setSelectedModule(_selectedModule); - setTargetType(targetType); + setSelectedMOduleAndTargetType(_selectedModule, targetType); } // First replace the dep reference with its tooltip const newTargetTypeNode = document.createElement('span'); diff --git a/tools/clarodocs/src/hooks/BUILD b/tools/clarodocs/src/hooks/BUILD new file mode 100644 index 00000000..d11553de --- /dev/null +++ b/tools/clarodocs/src/hooks/BUILD @@ -0,0 +1,15 @@ +load("@aspect_rules_ts//ts:defs.bzl", "ts_project") +load("//tools/clarodocs:defs.bzl", "TRANSPILER") + +ts_project( + name = "use_search_params_hook", + srcs = ["UseSearchParamsHook.tsx"], + declaration = True, + resolve_json_module = True, + transpiler = TRANSPILER, + tsconfig = "//tools/clarodocs:tsconfig", + visibility = ["//tools/clarodocs:__subpackages__"], + deps = [ + "//tools/clarodocs:node_modules/react-router-dom", + ], +) diff --git a/tools/clarodocs/src/hooks/UseSearchParamsHook.tsx b/tools/clarodocs/src/hooks/UseSearchParamsHook.tsx new file mode 100644 index 00000000..3147f572 --- /dev/null +++ b/tools/clarodocs/src/hooks/UseSearchParamsHook.tsx @@ -0,0 +1,28 @@ +// Documented at https://blog.logrocket.com/use-state-url-persist-state-usesearchparams/. +import { useSearchParams } from "react-router-dom"; + +export function useSearchParamsState( + searchParamName: string, + defaultValue: string +): readonly [ + searchParamsState: string, + setSearchParamsState: (newState: string) => void +] { + const [searchParams, setSearchParams] = useSearchParams(); + + const acquiredSearchParam = searchParams.get(searchParamName); + const searchParamsState = acquiredSearchParam ?? defaultValue; + + const setSearchParamsState = (newState: string) => { + const next = Object.assign( + {}, + [...searchParams.entries()].reduce( + (o, [key, value]) => ({ ...o, [key]: value }), + {} + ), + { [searchParamName]: newState } + ); + setSearchParams(next); + }; + return [searchParamsState, setSearchParamsState]; +} \ No newline at end of file