From 45cd9dbbe97a22d456a75980fd365c75092ad287 Mon Sep 17 00:00:00 2001
From: Tobias Jacksteit
Date: Wed, 3 Jun 2020 14:47:35 +0800
Subject: [PATCH] base host overrides on name of service instead of key and
hide the options by default
---
src/css/options.scss | 11 +++++
src/js/components/Options.js | 77 +++++++++++++++++++++++----------
src/js/utils/browser.js | 2 +-
src/js/utils/messageHandlers.js | 9 +++-
src/js/utils/urlMatcher.js | 4 +-
5 files changed, 75 insertions(+), 28 deletions(-)
diff --git a/src/css/options.scss b/src/css/options.scss
index 8b42215..d5eccfa 100644
--- a/src/css/options.scss
+++ b/src/css/options.scss
@@ -38,5 +38,16 @@
.text-danger {
color: $red;
}
+
+ .moco-bx-override-hosts {
+ &-container {
+ padding: 0 20px;
+ text-align: center;
+ }
+ &-btn {
+ cursor: pointer;
+ text-decoration: underline;
+ }
+ }
}
}
diff --git a/src/js/components/Options.js b/src/js/components/Options.js
index 6f95a18..7f35194 100644
--- a/src/js/components/Options.js
+++ b/src/js/components/Options.js
@@ -3,8 +3,8 @@ import { observable } from "mobx"
import { observer } from "mobx-react"
import { isChrome, getSettings, setStorage } from "utils/browser"
import ApiClient from "api/Client"
-import remoteServices from "../remoteServices";
-import { map } from "lodash"
+import remoteServices from "../remoteServices"
+import { map, sortedUniqBy, filter } from "lodash"
import { getHostOverridesFromSettings } from "../utils/settings"
@observer
@@ -14,8 +14,25 @@ class Options extends Component {
@observable hostOverrides = {}
@observable errorMessage = null
@observable isSuccess = false
+ @observable servicesHostOverrideList = []
+ @observable showHostOverrideOptions = false
componentDidMount() {
+ this.servicesHostOverrideList = sortedUniqBy(
+ map(
+ filter(remoteServices, (remoteService) => {
+ return remoteService.allowHostOverride
+ }),
+ (remoteService) => {
+ return {
+ name: remoteService.name,
+ host: remoteService.host,
+ }
+ },
+ ),
+ "name",
+ )
+
getSettings(false).then((storeData) => {
this.subdomain = storeData.subdomain || ""
this.apiKey = storeData.apiKey || ""
@@ -23,15 +40,20 @@ class Options extends Component {
})
}
- onChange = event => {
+ onChange = (event) => {
this[event.target.name] = event.target.value.trim()
}
- onChangeHostOverrides = event => {
- this.hostOverrides[event.target.name] = event.target.value.trim()
+ onChangeHostOverrides = (event) => {
+ // ensure to remove path (and trailing slash) from URL, as this can cause problems otherwise
+ this.hostOverrides[event.target.name] = this.removePathFromUrl(event.target.value.trim())
}
- handleSubmit = _event => {
+ toggleHostOverrideOptions = (event) => {
+ this.showHostOverrideOptions = !this.showHostOverrideOptions
+ }
+
+ handleSubmit = (_event) => {
this.isSuccess = false
this.errorMessage = null
@@ -56,13 +78,17 @@ class Options extends Component {
this.isSuccess = true
this.closeWindow()
})
- .catch(error => {
+ .catch((error) => {
this.errorMessage = error.response?.data?.message || "Anmeldung fehlgeschlagen"
})
})
}
- handleInputKeyDown = event => {
+ removePathFromUrl = (url) => {
+ return url.replace(/(\.[a-z]+)\/.*$/, "$1")
+ }
+
+ handleInputKeyDown = (event) => {
if (event.key === "Enter") {
this.handleSubmit()
}
@@ -105,23 +131,26 @@ class Options extends Component {
- {map(
- remoteServices,
- (remoteService, remoteServiceKey) =>
- remoteService.allowHostOverride && (
-
-
-
-
- ),
+ {!this.showHostOverrideOptions && (
+
+ Zeige Optionen zum Überschreiben
der Service Hosts
+
)}
+ {this.showHostOverrideOptions &&
+ this.servicesHostOverrideList.map((remoteService) => (
+
+
+
+
+ ))}
+
diff --git a/src/js/utils/browser.js b/src/js/utils/browser.js
index c6da9c7..38d19b5 100644
--- a/src/js/utils/browser.js
+++ b/src/js/utils/browser.js
@@ -8,7 +8,7 @@ const DEFAULT_SUBDOMAIN = "unset"
export const getSettings = (withDefaultSubdomain = true) => {
const keys = ["subdomain", "apiKey", "settingTimeTrackingHHMM",
- ...Object.keys(remoteServices).map(key => `hostOverrides:${key}`)]
+ ...Object.values(remoteServices).map(remoteService => `hostOverrides:${remoteService.name}`)]
const { version } = chrome.runtime.getManifest()
if (isChrome()) {
return new Promise(resolve => {
diff --git a/src/js/utils/messageHandlers.js b/src/js/utils/messageHandlers.js
index 6f3615c..058c4b5 100644
--- a/src/js/utils/messageHandlers.js
+++ b/src/js/utils/messageHandlers.js
@@ -14,9 +14,14 @@ import { queryTabs, isBrowserTab, getSettings, setStorage } from "utils/browser"
import { getHostOverridesFromSettings } from "./settings"
let matcher
-getSettings().then((settings) => {
+
+const initMatcher = (settings) => {
const hostOverrides = getHostOverridesFromSettings(settings, true)
matcher = createMatcher(remoteServices, hostOverrides)
+}
+
+getSettings().then((settings) => {
+ initMatcher(settings)
})
export function tabUpdated(tab, { messenger, settings }) {
@@ -59,6 +64,8 @@ export function tabUpdated(tab, { messenger, settings }) {
}
export function settingsChanged(settings, { messenger }) {
+ initMatcher(settings)
+
queryTabs({ currentWindow: true })
.then(reject(isBrowserTab))
.then(
diff --git a/src/js/utils/urlMatcher.js b/src/js/utils/urlMatcher.js
index 47aa6c6..a6879dc 100644
--- a/src/js/utils/urlMatcher.js
+++ b/src/js/utils/urlMatcher.js
@@ -101,11 +101,11 @@ const applyHostOverrides = (remoteServices, hostOverrides) => {
}
Object.keys(remoteServices).forEach((key) => {
- const remoteService = remoteServices[key];
+ const remoteService = remoteServices[key]
appliedRemoteServices[key] = {
...remoteService,
key,
- host: (hostOverrides && hostOverrides[key]) || remoteService.host,
+ host: (hostOverrides && hostOverrides[remoteService.name]) || remoteService.host,
}
})