refactor: decouple REST params and URL params
This commit is contained in:
@@ -13,107 +13,6 @@ import { useStream } from "~/helpers/utils/composables"
|
|||||||
import { HoppTestResult } from "~/helpers/types/HoppTestResult"
|
import { HoppTestResult } from "~/helpers/types/HoppTestResult"
|
||||||
import { HoppRESTAuth } from "~/helpers/types/HoppRESTAuth"
|
import { HoppRESTAuth } from "~/helpers/types/HoppRESTAuth"
|
||||||
|
|
||||||
function getParamsInURL(url: string): { key: string; value: string }[] {
|
|
||||||
const result: { key: string; value: string }[] = []
|
|
||||||
|
|
||||||
try {
|
|
||||||
const uriObj = new URL(url)
|
|
||||||
|
|
||||||
uriObj.searchParams.forEach((value, key) => {
|
|
||||||
result.push({ key, value })
|
|
||||||
})
|
|
||||||
} catch (_e) {}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
function recalculateParams(
|
|
||||||
oldURL: string,
|
|
||||||
currentParams: HoppRESTParam[],
|
|
||||||
newParams: { key: string; value: string }[]
|
|
||||||
): HoppRESTParam[] {
|
|
||||||
const paramsInOldURL = getParamsInURL(oldURL).map((x) => x.key)
|
|
||||||
|
|
||||||
const checkingParams = currentParams.filter(
|
|
||||||
(x) => !paramsInOldURL.includes(x.key)
|
|
||||||
)
|
|
||||||
|
|
||||||
const result: HoppRESTParam[] = []
|
|
||||||
|
|
||||||
const addedKeys: string[] = []
|
|
||||||
|
|
||||||
newParams.forEach(({ key, value }) => {
|
|
||||||
const currentParam = checkingParams.find(
|
|
||||||
({ key: currentKey }) => currentKey === key
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!currentParam) {
|
|
||||||
addedKeys.push(key)
|
|
||||||
result.push({ key, value, active: true })
|
|
||||||
} else {
|
|
||||||
addedKeys.push(key)
|
|
||||||
result.push({ key, value, active: currentParam.active })
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
result.push(...checkingParams.filter((x) => !addedKeys.includes(x.key)))
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeParamFromURL(url: string, param: string): string {
|
|
||||||
try {
|
|
||||||
const urlObj = new URL(url)
|
|
||||||
urlObj.searchParams.delete(param)
|
|
||||||
return urlObj.toString()
|
|
||||||
} catch (e) {
|
|
||||||
return url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeAllParamsFromURL(url: string): string {
|
|
||||||
try {
|
|
||||||
const urlObj = new URL(url)
|
|
||||||
const params: string[] = []
|
|
||||||
|
|
||||||
urlObj.searchParams.forEach((_value, key) => params.push(key))
|
|
||||||
|
|
||||||
params.forEach((key) => urlObj.searchParams.delete(key))
|
|
||||||
|
|
||||||
return urlObj.toString()
|
|
||||||
} catch (e) {
|
|
||||||
return url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateURLParam(
|
|
||||||
url: string,
|
|
||||||
currKey: string,
|
|
||||||
newKey: string,
|
|
||||||
newValue: string
|
|
||||||
): string {
|
|
||||||
try {
|
|
||||||
const urlObj = new URL(url)
|
|
||||||
|
|
||||||
let params: { key: string; value: string }[] = []
|
|
||||||
|
|
||||||
urlObj.searchParams.forEach((value, key) => params.push({ key, value }))
|
|
||||||
|
|
||||||
params.forEach((x) => urlObj.searchParams.delete(x.key))
|
|
||||||
|
|
||||||
params = params.map((x) => {
|
|
||||||
if (x.key === currKey) return { key: newKey, value: newValue }
|
|
||||||
else return x
|
|
||||||
})
|
|
||||||
|
|
||||||
params.forEach((x) => urlObj.searchParams.append(x.key, x.value))
|
|
||||||
|
|
||||||
return urlObj.toString()
|
|
||||||
} catch (e) {
|
|
||||||
return url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type RESTSession = {
|
type RESTSession = {
|
||||||
request: HoppRESTRequest
|
request: HoppRESTRequest
|
||||||
response: HoppRESTResponse | null
|
response: HoppRESTResponse | null
|
||||||
@@ -161,18 +60,10 @@ const dispatchers = defineDispatchers({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setEndpoint(curr: RESTSession, { newEndpoint }: { newEndpoint: string }) {
|
setEndpoint(curr: RESTSession, { newEndpoint }: { newEndpoint: string }) {
|
||||||
const paramsInNewURL = getParamsInURL(newEndpoint)
|
|
||||||
const updatedParams = recalculateParams(
|
|
||||||
curr.request.endpoint,
|
|
||||||
curr.request.params,
|
|
||||||
paramsInNewURL
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
request: {
|
request: {
|
||||||
...curr.request,
|
...curr.request,
|
||||||
endpoint: newEndpoint,
|
endpoint: newEndpoint,
|
||||||
params: updatedParams,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -196,84 +87,32 @@ const dispatchers = defineDispatchers({
|
|||||||
curr: RESTSession,
|
curr: RESTSession,
|
||||||
{ index, updatedParam }: { index: number; updatedParam: HoppRESTParam }
|
{ index, updatedParam }: { index: number; updatedParam: HoppRESTParam }
|
||||||
) {
|
) {
|
||||||
const paramsInURL = getParamsInURL(curr.request.endpoint).map((x) => x.key)
|
const newParams = curr.request.params.map((param, i) => {
|
||||||
|
if (i === index) return updatedParam
|
||||||
if (paramsInURL.includes(curr.request.params[index].key)) {
|
else return param
|
||||||
const updatedURL = updateURLParam(
|
})
|
||||||
curr.request.endpoint,
|
|
||||||
curr.request.params[index].key,
|
|
||||||
updatedParam.key,
|
|
||||||
updatedParam.value
|
|
||||||
)
|
|
||||||
|
|
||||||
const newParams = curr.request.params.map((param, i) => {
|
|
||||||
if (i === index) return updatedParam
|
|
||||||
else return param
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
|
||||||
request: {
|
|
||||||
...curr.request,
|
|
||||||
endpoint: updatedURL,
|
|
||||||
params: newParams,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const newParams = curr.request.params.map((param, i) => {
|
|
||||||
if (i === index) return updatedParam
|
|
||||||
else return param
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
|
||||||
request: {
|
|
||||||
...curr.request,
|
|
||||||
params: newParams,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
deleteParam(curr: RESTSession, { index }: { index: number }) {
|
|
||||||
const paramsFromURL = getParamsInURL(curr.request.endpoint).map(
|
|
||||||
(x) => x.key
|
|
||||||
)
|
|
||||||
if (paramsFromURL.includes(curr.request.params[index].key)) {
|
|
||||||
const newURL = removeParamFromURL(
|
|
||||||
curr.request.endpoint,
|
|
||||||
curr.request.params[index].key
|
|
||||||
)
|
|
||||||
|
|
||||||
const newParams = getParamsInURL(newURL)
|
|
||||||
|
|
||||||
const recalculatedParams = recalculateParams(
|
|
||||||
curr.request.endpoint,
|
|
||||||
curr.request.params,
|
|
||||||
newParams
|
|
||||||
)
|
|
||||||
return {
|
|
||||||
request: {
|
|
||||||
...curr.request,
|
|
||||||
endpoint: newURL,
|
|
||||||
params: recalculatedParams,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const newParams = curr.request.params.filter((_x, i) => i !== index)
|
|
||||||
|
|
||||||
return {
|
|
||||||
request: {
|
|
||||||
...curr.request,
|
|
||||||
params: newParams,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
deleteAllParams(curr: RESTSession) {
|
|
||||||
const newURL = removeAllParamsFromURL(curr.request.endpoint)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
request: {
|
request: {
|
||||||
...curr.request,
|
...curr.request,
|
||||||
endpoint: newURL,
|
params: newParams,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deleteParam(curr: RESTSession, { index }: { index: number }) {
|
||||||
|
const newParams = curr.request.params.filter((_x, i) => i !== index)
|
||||||
|
|
||||||
|
return {
|
||||||
|
request: {
|
||||||
|
...curr.request,
|
||||||
|
params: newParams,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deleteAllParams(curr: RESTSession) {
|
||||||
|
return {
|
||||||
|
request: {
|
||||||
|
...curr.request,
|
||||||
params: [],
|
params: [],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user