From 08e3cffff8e3eaa431285f026cd0da0e451593c2 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Fri, 13 Aug 2021 12:12:05 +0530 Subject: [PATCH] refactor: decouple REST params and URL params --- newstore/RESTSession.ts | 205 +++++----------------------------------- 1 file changed, 22 insertions(+), 183 deletions(-) diff --git a/newstore/RESTSession.ts b/newstore/RESTSession.ts index 7b31c4b15..1a6df5ef7 100644 --- a/newstore/RESTSession.ts +++ b/newstore/RESTSession.ts @@ -13,107 +13,6 @@ import { useStream } from "~/helpers/utils/composables" import { HoppTestResult } from "~/helpers/types/HoppTestResult" 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 = { request: HoppRESTRequest response: HoppRESTResponse | null @@ -161,18 +60,10 @@ const dispatchers = defineDispatchers({ } }, setEndpoint(curr: RESTSession, { newEndpoint }: { newEndpoint: string }) { - const paramsInNewURL = getParamsInURL(newEndpoint) - const updatedParams = recalculateParams( - curr.request.endpoint, - curr.request.params, - paramsInNewURL - ) - return { request: { ...curr.request, endpoint: newEndpoint, - params: updatedParams, }, } }, @@ -196,84 +87,32 @@ const dispatchers = defineDispatchers({ curr: RESTSession, { index, updatedParam }: { index: number; updatedParam: HoppRESTParam } ) { - const paramsInURL = getParamsInURL(curr.request.endpoint).map((x) => x.key) - - if (paramsInURL.includes(curr.request.params[index].key)) { - 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) + const newParams = curr.request.params.map((param, i) => { + if (i === index) return updatedParam + else return param + }) return { 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: [], }, }