diff --git a/package-lock.json b/package-lock.json index d3c051f..423c704 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "classnames": "^2.5.1", "dexie": "^3.2.4", "dexie-react-hooks": "^1.1.7", + "electron-is": "^3.0.0", "file-saver": "^2.0.5", "framer-motion": "^10.18.0", "html-to-image": "^1.11.11", @@ -5368,6 +5369,31 @@ "node": ">= 10.0.0" } }, + "node_modules/electron-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/electron-is/-/electron-is-3.0.0.tgz", + "integrity": "sha512-aQv1y3WrDZ+mtO8acbhiiip/8fa0Et7cvZyvlqJm2H7fih4hiJWEFRyYxzLgDG2kmiLdF8l3y5tbek5JFOPQkQ==", + "license": "MIT", + "dependencies": { + "electron-is-dev": "^0.3.0", + "semver": "^5.5.0" + } + }, + "node_modules/electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==", + "license": "MIT" + }, + "node_modules/electron-is/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/electron-publish": { "version": "25.1.7", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz", diff --git a/package.json b/package.json index 8f1b7c7..df2832b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "classnames": "^2.5.1", "dexie": "^3.2.4", "dexie-react-hooks": "^1.1.7", + "electron-is": "^3.0.0", "file-saver": "^2.0.5", "framer-motion": "^10.18.0", "html-to-image": "^1.11.11", diff --git a/src/App.jsx b/src/App.jsx index 080a4b7..ae2614e 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,4 +1,4 @@ -import { HashRouter, Routes, Route, useLocation } from "react-router-dom"; +import { BrowserRouter, HashRouter, Routes, Route, useLocation } from "react-router-dom"; import { useLayoutEffect } from "react"; import Editor from "./pages/Editor"; import Survey from "./pages/Survey"; @@ -10,10 +10,40 @@ import SettingsContextProvider from "./context/SettingsContext"; import { useSettings } from "./hooks"; import NotFound from "./pages/NotFound"; +function isElectron() { + if ( + typeof window !== "undefined" && + typeof window.process === "object" && + window.process.type === "renderer" + ) { + return true; + } + + if ( + typeof process !== "undefined" && + typeof process.versions === "object" && + !!process.versions.electron + ) { + return true; + } + + if ( + typeof navigator === "object" && + typeof navigator.userAgent === "string" && + navigator.userAgent.indexOf("Electron") >= 0 + ) { + return true; + } + + return false; +} + +const Router = isElectron() ? HashRouter : BrowserRouter; + export default function App() { return ( - + } /> @@ -52,7 +82,7 @@ export default function App() { } /> } /> - + ); }