mirror of
https://github.com/YunoHost/yunohost-admin.git
synced 2024-09-03 20:06:15 +02:00
refactor: reconnection handling
This commit is contained in:
parent
9f8ee2f250
commit
aabd7d0831
3 changed files with 26 additions and 15 deletions
|
@ -1,4 +1,8 @@
|
||||||
import { useRequests, type APIRequestAction } from '@/composables/useRequests'
|
import {
|
||||||
|
useRequests,
|
||||||
|
type APIRequestAction,
|
||||||
|
type ReconnectingArgs,
|
||||||
|
} from '@/composables/useRequests'
|
||||||
import { useSettings } from '@/composables/useSettings'
|
import { useSettings } from '@/composables/useSettings'
|
||||||
import type { Obj } from '@/types/commons'
|
import type { Obj } from '@/types/commons'
|
||||||
import { APIUnauthorizedError, type APIError } from './errors'
|
import { APIUnauthorizedError, type APIError } from './errors'
|
||||||
|
@ -233,7 +237,11 @@ export default {
|
||||||
* @returns Promise that resolve yunohost version infos
|
* @returns Promise that resolve yunohost version infos
|
||||||
* @throws Throw an `APIError` or subclass depending on server response
|
* @throws Throw an `APIError` or subclass depending on server response
|
||||||
*/
|
*/
|
||||||
tryToReconnect({ attemps = 5, delay = 2000, initialDelay = 0 } = {}) {
|
tryToReconnect({
|
||||||
|
attemps = 5,
|
||||||
|
delay = 2000,
|
||||||
|
initialDelay = 0,
|
||||||
|
}: ReconnectingArgs = {}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
function reconnect(n: number) {
|
function reconnect(n: number) {
|
||||||
store
|
store
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { createGlobalState } from '@vueuse/core'
|
import { createGlobalState } from '@vueuse/core'
|
||||||
import { v4 as uuid } from 'uuid'
|
import { v4 as uuid } from 'uuid'
|
||||||
import { computed, reactive, shallowRef } from 'vue'
|
import { computed, reactive, ref, shallowRef } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
import type { APIQuery, RequestMethod } from '@/api/api'
|
import type { APIQuery, RequestMethod } from '@/api/api'
|
||||||
|
@ -40,6 +40,13 @@ export type RequestMessage = {
|
||||||
variant: StateVariant
|
variant: StateVariant
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ReconnectingArgs = {
|
||||||
|
attemps?: number
|
||||||
|
origin?: string
|
||||||
|
initialDelay?: number
|
||||||
|
delay?: number
|
||||||
|
}
|
||||||
|
|
||||||
export const STATUS_VARIANT = {
|
export const STATUS_VARIANT = {
|
||||||
pending: 'primary',
|
pending: 'primary',
|
||||||
success: 'success',
|
success: 'success',
|
||||||
|
@ -52,6 +59,7 @@ export const useRequests = createGlobalState(() => {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
const requests = shallowRef<APIRequest[]>([])
|
const requests = shallowRef<APIRequest[]>([])
|
||||||
|
const reconnecting = ref<ReconnectingArgs | undefined>()
|
||||||
const currentRequest = computed(() => {
|
const currentRequest = computed(() => {
|
||||||
return requests.value.find((r) => r.showModal)
|
return requests.value.find((r) => r.showModal)
|
||||||
})
|
})
|
||||||
|
@ -189,6 +197,7 @@ export const useRequests = createGlobalState(() => {
|
||||||
requests,
|
requests,
|
||||||
historyList,
|
historyList,
|
||||||
currentRequest,
|
currentRequest,
|
||||||
|
reconnecting,
|
||||||
locked,
|
locked,
|
||||||
startRequest,
|
startRequest,
|
||||||
endRequest,
|
endRequest,
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import router from '@/router'
|
|
||||||
import i18n from '@/i18n'
|
|
||||||
import api from '@/api'
|
import api from '@/api'
|
||||||
import { timeout, isEmptyValue } from '@/helpers/commons'
|
import { useRequests, type ReconnectingArgs } from '@/composables/useRequests'
|
||||||
|
import { isEmptyValue, timeout } from '@/helpers/commons'
|
||||||
|
import i18n from '@/i18n'
|
||||||
|
import router from '@/router'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
state: {
|
state: {
|
||||||
|
@ -9,7 +10,6 @@ export default {
|
||||||
installed: null,
|
installed: null,
|
||||||
connected: localStorage.getItem('connected') === 'true', // Boolean
|
connected: localStorage.getItem('connected') === 'true', // Boolean
|
||||||
yunohost: null, // Object { version, repo }
|
yunohost: null, // Object { version, repo }
|
||||||
reconnecting: null, // null|Object { attemps, delay, initialDelay }
|
|
||||||
routerKey: undefined, // String if current route has params
|
routerKey: undefined, // String if current route has params
|
||||||
breadcrumb: [], // Array of routes
|
breadcrumb: [], // Array of routes
|
||||||
transitionName: null, // String of CSS class if transitions are enabled
|
transitionName: null, // String of CSS class if transitions are enabled
|
||||||
|
@ -29,10 +29,6 @@ export default {
|
||||||
state.yunohost = yunohost
|
state.yunohost = yunohost
|
||||||
},
|
},
|
||||||
|
|
||||||
SET_RECONNECTING(state, args) {
|
|
||||||
state.reconnecting = args
|
|
||||||
},
|
|
||||||
|
|
||||||
SET_ROUTER_KEY(state, key) {
|
SET_ROUTER_KEY(state, key) {
|
||||||
state.routerKey = key
|
state.routerKey = key
|
||||||
},
|
},
|
||||||
|
@ -114,9 +110,9 @@ export default {
|
||||||
return api.get('logout')
|
return api.get('logout')
|
||||||
},
|
},
|
||||||
|
|
||||||
TRY_TO_RECONNECT({ commit }, args = {}) {
|
TRY_TO_RECONNECT({ commit }, args?: ReconnectingArgs) {
|
||||||
// FIXME This is very ugly arguments forwarding, will use proper component way of doing this when switching to Vue 3 (teleport)
|
// FIXME This is very ugly arguments forwarding, will use proper component way of doing this when switching to Vue 3 (teleport)
|
||||||
commit('SET_RECONNECTING', args)
|
useRequests().reconnecting.value = args
|
||||||
},
|
},
|
||||||
|
|
||||||
GET_YUNOHOST_INFOS({ commit }) {
|
GET_YUNOHOST_INFOS({ commit }) {
|
||||||
|
@ -206,8 +202,6 @@ export default {
|
||||||
installed: (state) => state.installed,
|
installed: (state) => state.installed,
|
||||||
connected: (state) => state.connected,
|
connected: (state) => state.connected,
|
||||||
yunohost: (state) => state.yunohost,
|
yunohost: (state) => state.yunohost,
|
||||||
reconnecting: (state) => state.reconnecting,
|
|
||||||
history: (state) => state.history,
|
|
||||||
routerKey: (state) => state.routerKey,
|
routerKey: (state) => state.routerKey,
|
||||||
breadcrumb: (state) => state.breadcrumb,
|
breadcrumb: (state) => state.breadcrumb,
|
||||||
transitionName: (state) => state.transitionName,
|
transitionName: (state) => state.transitionName,
|
||||||
|
|
Loading…
Add table
Reference in a new issue