diff --git a/ui/autoMate/package-lock.json b/ui/autoMate/package-lock.json index dea39ff..34e0104 100644 --- a/ui/autoMate/package-lock.json +++ b/ui/autoMate/package-lock.json @@ -14,6 +14,10 @@ "@icon-park/react": "^1.4.2", "antd": "^5.18.0", "electron-updater": "^6.1.7", + "localforage": "^1.10.0", + "match-sorter": "^6.3.4", + "react-router-dom": "^6.23.1", + "sort-by": "^1.2.0", "zustand": "^4.5.2" }, "devDependencies": { @@ -1793,6 +1797,14 @@ "react-dom": ">=16.9.0" } }, + "node_modules/@remix-run/router": { + "version": "1.16.1", + "resolved": "https://registry.npmmirror.com/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", @@ -5955,6 +5967,11 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/immutable": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", @@ -6743,6 +6760,14 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -6758,6 +6783,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -6867,6 +6900,15 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, + "node_modules/match-sorter": { + "version": "6.3.4", + "resolved": "https://registry.npmmirror.com/match-sorter/-/match-sorter-6.3.4.tgz", + "integrity": "sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==", + "dependencies": { + "@babel/runtime": "^7.23.8", + "remove-accents": "0.5.0" + } + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -7148,6 +7190,14 @@ "node": ">= 0.4" } }, + "node_modules/object-path": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/object-path/-/object-path-0.6.0.tgz", + "integrity": "sha512-fxrwsCFi3/p+LeLOAwo/wyRMODZxdGBtUlWRzsEpsUVrisZbEfZ21arxLGfaWfcnqb8oHPNihIb4XPE8CQPN5A==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", @@ -8351,6 +8401,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.23.1", + "resolved": "https://registry.npmmirror.com/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "dependencies": { + "@remix-run/router": "1.16.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.23.1", + "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "dependencies": { + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -8471,6 +8551,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8944,6 +9029,14 @@ "npm": ">= 3.0.0" } }, + "node_modules/sort-by": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/sort-by/-/sort-by-1.2.0.tgz", + "integrity": "sha512-aRyW65r3xMnf4nxJRluCg0H/woJpksU1dQxRtXYzau30sNBOmf5HACpDd9MZDhKh7ALQ5FgSOfMPwZEtUmMqcg==", + "dependencies": { + "object-path": "0.6.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/ui/autoMate/package.json b/ui/autoMate/package.json index 321e075..03f56e0 100644 --- a/ui/autoMate/package.json +++ b/ui/autoMate/package.json @@ -26,6 +26,10 @@ "@icon-park/react": "^1.4.2", "antd": "^5.18.0", "electron-updater": "^6.1.7", + "localforage": "^1.10.0", + "match-sorter": "^6.3.4", + "react-router-dom": "^6.23.1", + "sort-by": "^1.2.0", "zustand": "^4.5.2" }, "devDependencies": { diff --git a/ui/autoMate/src/main/config/window.ts b/ui/autoMate/src/main/config/window.ts index 14c63c0..f73e0f3 100644 --- a/ui/autoMate/src/main/config/window.ts +++ b/ui/autoMate/src/main/config/window.ts @@ -3,10 +3,11 @@ import { BrowserWindow, shell } from 'electron' import { is } from '@electron-toolkit/utils' import icon from '../../../resources/icon.png?asset' import { join } from 'path' +import url from 'node:url' export function createWindow(): BrowserWindow { // Create the browser window. const win = new BrowserWindow({ - width: 800, + width: 600, height: 500, center: true, show: false, @@ -34,9 +35,16 @@ export function createWindow(): BrowserWindow { // Create the browser window. // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. if (is.dev && process.env['ELECTRON_RENDERER_URL']) { - win.loadURL(process.env['ELECTRON_RENDERER_URL']) + win.loadURL(process.env['ELECTRON_RENDERER_URL'] + "/#config") } else { - win.loadFile(join(__dirname, '../renderer/index.html')) + win.loadURL( + url.format({ + pathname: join(__dirname, '../renderer/index.html'), + protocol: 'file', + slashes: true, + hash: 'config' + }) + ) } return win diff --git a/ui/autoMate/src/renderer/src/main.tsx b/ui/autoMate/src/renderer/src/main.tsx index c7e822d..d8f4100 100644 --- a/ui/autoMate/src/renderer/src/main.tsx +++ b/ui/autoMate/src/renderer/src/main.tsx @@ -1,11 +1,12 @@ import React from 'react' import ReactDOM from 'react-dom/client' -import App from './App' import '@renderer/assets/tailwind.css' import '@renderer/assets/global.scss' +import { RouterProvider } from 'react-router-dom' +import router from './router' ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + ) diff --git a/ui/autoMate/src/renderer/src/pages/Config.tsx b/ui/autoMate/src/renderer/src/pages/Config.tsx new file mode 100644 index 0000000..fb43094 --- /dev/null +++ b/ui/autoMate/src/renderer/src/pages/Config.tsx @@ -0,0 +1,8 @@ +export default function Config(){ + return ( +
+ Config +
+ ) +} + diff --git a/ui/autoMate/src/renderer/src/pages/Home.tsx b/ui/autoMate/src/renderer/src/pages/Home.tsx new file mode 100644 index 0000000..7ce6bb5 --- /dev/null +++ b/ui/autoMate/src/renderer/src/pages/Home.tsx @@ -0,0 +1,30 @@ +import Result from "@renderer/components/Result" +import Search from "@renderer/components/Search" +import { CodeProvider } from "@renderer/context/CodeContext" +import useShortCut from "@renderer/hooks/useShortCut" +import Error from "@renderer/components/Error" +import { MutableRefObject, useEffect, useRef } from "react" +import useIgnoreMouseEvents from "@renderer/hooks/useIgnoreMouseEvents" + + +function Home(): JSX.Element { + const mainRef = useRef(null) + const {setIgnoreMouseEvents} = useIgnoreMouseEvents() + useEffect(()=>{ + setIgnoreMouseEvents(mainRef as MutableRefObject) + }, []) + const shortCut = useShortCut() + shortCut.register("search", "CommandOrControl+n") + return ( + +
+ + + +
+
+ ) +} + +export default Home + diff --git a/ui/autoMate/src/renderer/src/router/index.tsx b/ui/autoMate/src/renderer/src/router/index.tsx new file mode 100644 index 0000000..5e79a0f --- /dev/null +++ b/ui/autoMate/src/renderer/src/router/index.tsx @@ -0,0 +1,15 @@ +import Config from "@renderer/pages/Config"; +import Home from "@renderer/pages/Home"; +import { createHashRouter } from "react-router-dom"; + +const router = createHashRouter([ + { + path: "/", + element: + }, + { + path: "config", + element: + } +]) +export default router