feat: defer everything until the api config is loaded #926

Merged
konrad merged 27 commits from feature/ready-state into main 2021-11-13 19:49:03 +00:00
2 changed files with 5 additions and 8 deletions
Showing only changes of commit 1cd5b41c96 - Show all commits

View File

@ -44,8 +44,7 @@ import ApiConfig from '@/components/misc/api-config'
import NoAuthWrapper from '@/components/misc/no-auth-wrapper'
import {mapState} from 'vuex'
import {ONLINE} from '@/store/mutation-types'
const ERROR_NO_API_URL = 'noApiUrlProvided'
import {ERROR_NO_API_URL} from '@/helpers/checkAndSetApiUrl'
export default {
name: 'ready',
@ -76,11 +75,6 @@ export default {
},
konrad marked this conversation as resolved Outdated

ONLINE is no mutation type. It's a state.

`ONLINE` is no mutation type. It's a state.

Right, fixed.

Right, fixed.
methods: {
load() {
if (window.API_URL === '') {
this.error = ERROR_NO_API_URL
return
}
this.$store.dispatch('loadApp')
.catch(e => {
this.error = e

View File

@ -1,5 +1,7 @@
const API_DEFAULT_PORT = '3456'
export const ERROR_NO_API_URL = 'noApiUrlProvided'
export const checkAndSetApiUrl = (url: string, updateConfig: () => Promise<void>): Promise<string> => {
konrad marked this conversation as resolved Outdated

Since updateConfig is always () => dispatch('config/update'):
Shouldn't we just import he store in this file and call dispatch('config/update') directly?

Since `updateConfig` is always `() => dispatch('config/update')`: Shouldn't we just import he store in this file and call `dispatch('config/update')` directly?

Will that work outside of a vue component?

Will that work outside of a vue component?

If you import the store with:

import {store} from '@/store'

// then you can

store.dispatch('config/update')

Because it's JS ™️ (trying to steal reacts claim here)

If you import the store with: ``` import {store} from '@/store' // then you can store.dispatch('config/update') ``` Because it's JS ™️ (trying to steal reacts claim here)

That seems like a nice way to solve it. Done.

That seems like a nice way to solve it. Done.
// Check if the url has an http prefix
if (
@ -106,6 +108,7 @@ export const checkAndSetApiUrl = (url: string, updateConfig: () => Promise<void>
localStorage.setItem('API_URL', window.API_URL)
return window.API_URL
}
return ''
throw new Error(ERROR_NO_API_URL)
})
}