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 {