base host overrides on name of service instead of key and hide the options by default

This commit is contained in:
Tobias Jacksteit
2020-06-03 14:47:35 +08:00
parent 6bfd4c2e6f
commit 45cd9dbbe9
5 changed files with 75 additions and 28 deletions

View File

@@ -38,5 +38,16 @@
.text-danger { .text-danger {
color: $red; color: $red;
} }
.moco-bx-override-hosts {
&-container {
padding: 0 20px;
text-align: center;
}
&-btn {
cursor: pointer;
text-decoration: underline;
}
}
} }
} }

View File

@@ -3,8 +3,8 @@ import { observable } from "mobx"
import { observer } from "mobx-react" import { observer } from "mobx-react"
import { isChrome, getSettings, setStorage } from "utils/browser" import { isChrome, getSettings, setStorage } from "utils/browser"
import ApiClient from "api/Client" import ApiClient from "api/Client"
import remoteServices from "../remoteServices"; import remoteServices from "../remoteServices"
import { map } from "lodash" import { map, sortedUniqBy, filter } from "lodash"
import { getHostOverridesFromSettings } from "../utils/settings" import { getHostOverridesFromSettings } from "../utils/settings"
@observer @observer
@@ -14,8 +14,25 @@ class Options extends Component {
@observable hostOverrides = {} @observable hostOverrides = {}
@observable errorMessage = null @observable errorMessage = null
@observable isSuccess = false @observable isSuccess = false
@observable servicesHostOverrideList = []
@observable showHostOverrideOptions = false
componentDidMount() { componentDidMount() {
this.servicesHostOverrideList = sortedUniqBy(
map(
filter(remoteServices, (remoteService) => {
return remoteService.allowHostOverride
}),
(remoteService) => {
return {
name: remoteService.name,
host: remoteService.host,
}
},
),
"name",
)
getSettings(false).then((storeData) => { getSettings(false).then((storeData) => {
this.subdomain = storeData.subdomain || "" this.subdomain = storeData.subdomain || ""
this.apiKey = storeData.apiKey || "" this.apiKey = storeData.apiKey || ""
@@ -23,15 +40,20 @@ class Options extends Component {
}) })
} }
onChange = event => { onChange = (event) => {
this[event.target.name] = event.target.value.trim() this[event.target.name] = event.target.value.trim()
} }
onChangeHostOverrides = event => { onChangeHostOverrides = (event) => {
this.hostOverrides[event.target.name] = event.target.value.trim() // 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.isSuccess = false
this.errorMessage = null this.errorMessage = null
@@ -56,13 +78,17 @@ class Options extends Component {
this.isSuccess = true this.isSuccess = true
this.closeWindow() this.closeWindow()
}) })
.catch(error => { .catch((error) => {
this.errorMessage = error.response?.data?.message || "Anmeldung fehlgeschlagen" this.errorMessage = error.response?.data?.message || "Anmeldung fehlgeschlagen"
}) })
}) })
} }
handleInputKeyDown = event => { removePathFromUrl = (url) => {
return url.replace(/(\.[a-z]+)\/.*$/, "$1")
}
handleInputKeyDown = (event) => {
if (event.key === "Enter") { if (event.key === "Enter") {
this.handleSubmit() this.handleSubmit()
} }
@@ -105,23 +131,26 @@ class Options extends Component {
</p> </p>
</div> </div>
<hr /> <hr />
{map( {!this.showHostOverrideOptions && (
remoteServices, <div className="moco-bx-override-hosts-container">
(remoteService, remoteServiceKey) => <span className="moco-bx-override-hosts-btn" onClick={this.toggleHostOverrideOptions}>Zeige Optionen zum Überschreiben<br />der Service Hosts</span>
remoteService.allowHostOverride && ( </div>
<div className="form-group" key={remoteServiceKey}>
<label>Override Host: {remoteServiceKey}</label>
<input
type="text"
name={`hostOverrides:${remoteServiceKey}`}
value={this.hostOverrides[`hostOverrides:${remoteServiceKey}`]}
placeholder={remoteService.host}
onKeyDown={this.handleInputKeyDown}
onChange={this.onChangeHostOverrides}
/>
</div>
),
)} )}
{this.showHostOverrideOptions &&
this.servicesHostOverrideList.map((remoteService) => (
<div className="form-group" key={remoteService.name}>
<label>Host URL: {remoteService.name}</label>
<input
type="text"
name={`hostOverrides:${remoteService.name}`}
value={this.hostOverrides[`hostOverrides:${remoteService.name}`]}
placeholder={remoteService.host}
onKeyDown={this.handleInputKeyDown}
onChange={this.onChangeHostOverrides}
/>
</div>
))}
<hr />
<button className="moco-bx-btn" onClick={this.handleSubmit}> <button className="moco-bx-btn" onClick={this.handleSubmit}>
OK OK
</button> </button>

View File

@@ -8,7 +8,7 @@ const DEFAULT_SUBDOMAIN = "unset"
export const getSettings = (withDefaultSubdomain = true) => { export const getSettings = (withDefaultSubdomain = true) => {
const keys = ["subdomain", "apiKey", "settingTimeTrackingHHMM", 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() const { version } = chrome.runtime.getManifest()
if (isChrome()) { if (isChrome()) {
return new Promise(resolve => { return new Promise(resolve => {

View File

@@ -14,9 +14,14 @@ import { queryTabs, isBrowserTab, getSettings, setStorage } from "utils/browser"
import { getHostOverridesFromSettings } from "./settings" import { getHostOverridesFromSettings } from "./settings"
let matcher let matcher
getSettings().then((settings) => {
const initMatcher = (settings) => {
const hostOverrides = getHostOverridesFromSettings(settings, true) const hostOverrides = getHostOverridesFromSettings(settings, true)
matcher = createMatcher(remoteServices, hostOverrides) matcher = createMatcher(remoteServices, hostOverrides)
}
getSettings().then((settings) => {
initMatcher(settings)
}) })
export function tabUpdated(tab, { messenger, settings }) { export function tabUpdated(tab, { messenger, settings }) {
@@ -59,6 +64,8 @@ export function tabUpdated(tab, { messenger, settings }) {
} }
export function settingsChanged(settings, { messenger }) { export function settingsChanged(settings, { messenger }) {
initMatcher(settings)
queryTabs({ currentWindow: true }) queryTabs({ currentWindow: true })
.then(reject(isBrowserTab)) .then(reject(isBrowserTab))
.then( .then(

View File

@@ -101,11 +101,11 @@ const applyHostOverrides = (remoteServices, hostOverrides) => {
} }
Object.keys(remoteServices).forEach((key) => { Object.keys(remoteServices).forEach((key) => {
const remoteService = remoteServices[key]; const remoteService = remoteServices[key]
appliedRemoteServices[key] = { appliedRemoteServices[key] = {
...remoteService, ...remoteService,
key, key,
host: (hostOverrides && hostOverrides[key]) || remoteService.host, host: (hostOverrides && hostOverrides[remoteService.name]) || remoteService.host,
} }
}) })