on 7ced9db help sign in
urbit.org/pages/_app.js
81 lines 2.0 kB history raw
1import { useState, useEffect } from "react";
2import { configure, GlobalHotKeys } from "react-hotkeys";
3import { init } from "@socialgouv/matomo-next";
4import Search from "../components/Search";
5import "@urbit/foundation-design-system/styles/globals.css";
6import "@urbit/foundation-design-system/styles/markdown.css";
7import "@urbit/foundation-design-system/styles/prism.css";
9const MATOMO_URL = process?.env?.NEXT_PUBLIC_MATOMO_URL || "";
10const MATOMO_SITE_ID = process?.env?.NEXT_PUBLIC_MATOMO_SITE_ID || "";
12function MyApp({ Component, pageProps }) {
13 const [showSearch, setSearch] = useState(false);
15 useEffect(() => {
16 init({
17 url: MATOMO_URL,
18 siteId: MATOMO_SITE_ID,
19 });
20 });
22 const closeSearch = (event) => {
23 if (event?.preventDefault) {
24 event.preventDefault();
25 }
26 setSearch(false);
27 };
29 const openSearch = (event) => {
30 if (event?.preventDefault) {
31 event.preventDefault();
32 }
33 setSearch(true);
34 };
36 const toggleSearch = (event) => {
37 if (event?.preventDefault) {
38 event.preventDefault();
39 }
40 setSearch((state) => !state);
41 };
43 const keyMap = {
44 closeSearch: ["esc"],
45 toggleSearch: ["command+k", "ctrl+k"],
46 };
48 const handlers = {
49 closeSearch: (event) => closeSearch(event),
50 openSearch: (event) => openSearch(event),
51 toggleSearch: (event) => toggleSearch(event),
52 };
54 configure({
55 // ignoreTags: [],
56 ignoreTags: ["input", "select", "textarea"],
57 ignoreEventsCondition: function () {},
58 });
60 return (
61 <>
62 <GlobalHotKeys keyMap={keyMap} handlers={handlers} />
63 <Search
64 showSearch={showSearch}
65 toggleSearch={toggleSearch}
66 closeSearch={closeSearch}
67 openSearch={openSearch}
68 />
69 <Component
70 {...pageProps}
71 search={{
72 toggleSearch: toggleSearch,
73 closeSearch: closeSearch,
74 openSearch: openSearch,
75 }}
76 />
77 </>
78 );
81export default MyApp;