From 6090269cd9f5e8ec7bf281496bdd2dcf02ba50c2 Mon Sep 17 00:00:00 2001
From: GHOSCHT <31184695+GHOSCHT@users.noreply.github.com>
Date: Thu, 28 Oct 2021 16:01:13 +0200
Subject: [PATCH 1/3] Persist selected serial port
---
Dashboard/package.json | 3 +
Dashboard/src/index.tsx | 7 +-
Dashboard/src/redux/store/index.ts | 25 +++++-
Dashboard/src/redux/store/types.d.ts | 5 +-
Dashboard/yarn.lock | 118 ++++++++++++++++++++++++++-
5 files changed, 148 insertions(+), 10 deletions(-)
diff --git a/Dashboard/package.json b/Dashboard/package.json
index 3f7b359..3bd5b75 100644
--- a/Dashboard/package.json
+++ b/Dashboard/package.json
@@ -64,12 +64,15 @@
"electron-is-dev": "2.0.0",
"electron-localshortcut": "3.2.1",
"electron-squirrel-startup": "1.0.0",
+ "electron-store": "^8.0.1",
"fs-extra": "10.0.0",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-redux": "7.2.5",
"react-select": "5.1.0",
"redux": "4.1.1",
+ "redux-persist": "^6.0.0",
+ "redux-persist-electron-storage": "^2.1.0",
"redux-thunk": "2.3.0",
"remote-redux-devtools": "0.5.16",
"screenz": "1.0.0",
diff --git a/Dashboard/src/index.tsx b/Dashboard/src/index.tsx
index 88a307f..da8c96b 100644
--- a/Dashboard/src/index.tsx
+++ b/Dashboard/src/index.tsx
@@ -1,13 +1,16 @@
import React from "react";
import { render } from "react-dom";
import { Provider } from "react-redux";
-import store from "./redux/store";
+import { PersistGate } from "redux-persist/integration/react";
+import { store, persistor } from "./redux/store";
import App from "./App";
render(
-
+
+
+
,
document.getElementById("root"),
);
diff --git a/Dashboard/src/redux/store/index.ts b/Dashboard/src/redux/store/index.ts
index b787b2f..9b0585c 100644
--- a/Dashboard/src/redux/store/index.ts
+++ b/Dashboard/src/redux/store/index.ts
@@ -1,6 +1,10 @@
import thunk from "redux-thunk";
import { createStore, applyMiddleware } from "redux";
import { RootAction, RootState } from "typesafe-actions";
+import { persistStore, persistReducer } from "redux-persist";
+import createElectronStorage from "redux-persist-electron-storage";
+
+import ElectronStore from "electron-store";
import composeEnhancers from "./utils";
import rootReducer from "./root-reducer";
@@ -8,12 +12,27 @@ const middlewares = [thunk];
const enhancer = composeEnhancers(applyMiddleware(...middlewares));
+const electronStore = new ElectronStore();
+
+createElectronStorage({
+ electronStore,
+});
+
+const persistConfig = {
+ key: "root",
+ whitelist: ["port"],
+ storage: createElectronStorage({
+ electronStore,
+ }),
+};
+
+export const persistedReducer = persistReducer(persistConfig, rootReducer);
const initialState = {};
-const store = createStore(
- rootReducer,
+export const store = createStore(
+ persistedReducer,
initialState,
enhancer,
);
-export default store;
+export const persistor = persistStore(store);
diff --git a/Dashboard/src/redux/store/types.d.ts b/Dashboard/src/redux/store/types.d.ts
index 7b39a16..1dd8707 100644
--- a/Dashboard/src/redux/store/types.d.ts
+++ b/Dashboard/src/redux/store/types.d.ts
@@ -1,13 +1,12 @@
import { StateType, ActionType } from "typesafe-actions";
import { ThunkAction } from "redux-thunk";
-import rootReducer from "./root-reducer";
import rootAction from "./root-action";
-import store from "./index";
+import { persistedReducer, store } from "./index";
declare module "typesafe-actions" {
export type Store = StateType;
- export type RootState = StateType;
+ export type RootState = StateType;
export type RootAction = ActionType;
diff --git a/Dashboard/yarn.lock b/Dashboard/yarn.lock
index d56d6bc..c1dd67c 100644
--- a/Dashboard/yarn.lock
+++ b/Dashboard/yarn.lock
@@ -2603,6 +2603,13 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
@@ -2618,6 +2625,16 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, aj
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^8.0.0, ajv@^8.6.3:
+ version "8.6.3"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764"
+ integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
ajv@^8.0.1:
version "8.6.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571"
@@ -3118,6 +3135,11 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+atomically@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe"
+ integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==
+
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
@@ -3950,6 +3972,22 @@ concurrently@6.3.0:
tree-kill "^1.2.2"
yargs "^16.2.0"
+conf@^10.0.3:
+ version "10.0.3"
+ resolved "https://registry.yarnpkg.com/conf/-/conf-10.0.3.tgz#af266186cc754daefd2749398861ec538c50da17"
+ integrity sha512-4gtQ/Q36qVxBzMe6B7gWOAfni1VdhuHkIzxydHkclnwGmgN+eW4bb6jj73vigCfr7d3WlmqawvhZrpCUCTPYxQ==
+ dependencies:
+ ajv "^8.6.3"
+ ajv-formats "^2.1.1"
+ atomically "^1.7.0"
+ debounce-fn "^4.0.0"
+ dot-prop "^6.0.1"
+ env-paths "^2.2.1"
+ json-schema-typed "^7.0.3"
+ onetime "^5.1.2"
+ pkg-up "^3.1.0"
+ semver "^7.3.5"
+
config-chain@^1.1.11:
version "1.1.13"
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
@@ -4232,6 +4270,13 @@ dateformat@^3.0.3:
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
+debounce-fn@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7"
+ integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==
+ dependencies:
+ mimic-fn "^3.0.0"
+
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -4591,6 +4636,13 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
+dot-prop@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083"
+ integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==
+ dependencies:
+ is-obj "^2.0.0"
+
dotenv-expand@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
@@ -4719,6 +4771,14 @@ electron-squirrel-startup@1.0.0:
dependencies:
debug "^2.2.0"
+electron-store@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-8.0.1.tgz#9b598c1d2edeffebee9d8c1cd957ad368c528925"
+ integrity sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w==
+ dependencies:
+ conf "^10.0.3"
+ type-fest "^1.0.2"
+
electron-to-chromium@^1.3.811:
version "1.3.820"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.820.tgz#3b2672b59ed17847ed19f1281547f37bbfda87bb"
@@ -4809,7 +4869,7 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-env-paths@^2.2.0:
+env-paths@^2.2.0, env-paths@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
@@ -5456,6 +5516,13 @@ find-up@^2.0.0, find-up@^2.1.0:
dependencies:
locate-path "^2.0.0"
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
find-up@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
@@ -6928,6 +6995,11 @@ json-schema-traverse@^1.0.0:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+json-schema-typed@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9"
+ integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==
+
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
@@ -7361,6 +7433,14 @@ locate-path@^2.0.0:
p-locate "^2.0.0"
path-exists "^3.0.0"
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
@@ -7641,6 +7721,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+mimic-fn@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74"
+ integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==
+
mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
@@ -8327,7 +8412,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.2.0:
+p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -8348,6 +8433,13 @@ p-locate@^2.0.0:
dependencies:
p-limit "^1.1.0"
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -8567,6 +8659,13 @@ pkg-up@^2.0.0:
dependencies:
find-up "^2.1.0"
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
plist@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.3.tgz#007df34c7be0e2c3dcfcf460d623e6485457857d"
@@ -9131,6 +9230,11 @@ redux-devtools-themes@^1.0.0:
dependencies:
base16 "^1.0.0"
+redux-persist-electron-storage@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/redux-persist-electron-storage/-/redux-persist-electron-storage-2.1.0.tgz#8e9c2d4aeb451a5e00786456efed2f3d3f03dfa8"
+ integrity sha512-8VhAttDPqrwZlGIiHB3/PzZZChCliom8qcex8Q+eW3lHpSMkbqAaYpoedRm29e3FoVnan3VT+UV22NGFXKPmCg==
+
redux-persist@^4.10.2:
version "4.10.2"
resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-4.10.2.tgz#8efdb16cfe882c521a78a6d0bfdfef2437f49f96"
@@ -9140,6 +9244,11 @@ redux-persist@^4.10.2:
lodash "^4.17.4"
lodash-es "^4.17.4"
+redux-persist@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8"
+ integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==
+
redux-thunk@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
@@ -10717,6 +10826,11 @@ type-fest@^0.20.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+type-fest@^1.0.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
+ integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
+
type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
From 43725faea402eda67c94f8baa2b7103fa027a885 Mon Sep 17 00:00:00 2001
From: GHOSCHT <31184695+GHOSCHT@users.noreply.github.com>
Date: Thu, 28 Oct 2021 18:55:56 +0200
Subject: [PATCH 2/3] Fix serial port persistence
---
Dashboard/package.json | 1 +
Dashboard/src/App.tsx | 9 +++++++++
Dashboard/src/Components/KnobSection.tsx | 10 +++++-----
Dashboard/src/redux/store/index.ts | 15 ++++++++++++---
4 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/Dashboard/package.json b/Dashboard/package.json
index 3bd5b75..449ceef 100644
--- a/Dashboard/package.json
+++ b/Dashboard/package.json
@@ -66,6 +66,7 @@
"electron-squirrel-startup": "1.0.0",
"electron-store": "^8.0.1",
"fs-extra": "10.0.0",
+ "lodash": "^4.17.21",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-redux": "7.2.5",
diff --git a/Dashboard/src/App.tsx b/Dashboard/src/App.tsx
index 0bb926d..ef0d81d 100644
--- a/Dashboard/src/App.tsx
+++ b/Dashboard/src/App.tsx
@@ -6,6 +6,7 @@ import SerialPort from "serialport";
import { connect, disconnect } from "./redux/actions/asyncSerialConnectionActions";
import { setSerialPort } from "./redux/actions/serialConnectionActions";
import KnobSection from "./Components/KnobSection";
+import { electronStore } from "./redux/store/index";
const GlobalStyle = createGlobalStyle`
html {
@@ -58,6 +59,14 @@ const App = () => {
>
disconnect
+