| 1175 | } |
| 1176 | |
| 1177 | buildFetchURL(requestPanelEl) { |
| 1178 | let fetchUrl; |
| 1179 | const pathParamEls = [...requestPanelEl.querySelectorAll("[data-ptype='path']")]; |
| 1180 | const queryParamEls = [...requestPanelEl.querySelectorAll("[data-ptype='query']")]; |
| 1181 | const queryParamObjTypeEls = [...requestPanelEl.querySelectorAll("[data-ptype='query-object']")]; |
| 1182 | fetchUrl = this.path; |
| 1183 | // Generate URL using Path Params |
| 1184 | pathParamEls.map((el) => { |
| 1185 | fetchUrl = fetchUrl.replace(`{${el.dataset.pname}}`, encodeURIComponent(el.value)); |
| 1186 | }); |
| 1187 | |
| 1188 | // Query Params |
| 1189 | const urlQueryParamsMap = new Map(); |
| 1190 | const queryParamsWithReservedCharsAllowed = []; |
| 1191 | if (queryParamEls.length > 0) { |
| 1192 | queryParamEls.forEach((el) => { |
| 1193 | const queryParam = new URLSearchParams(); |
| 1194 | if (el.dataset.paramAllowReserved === 'true') { |
| 1195 | queryParamsWithReservedCharsAllowed.push(el.dataset.pname); |
| 1196 | } |
| 1197 | if (el.dataset.array === 'false') { |
| 1198 | if (el.value !== '') { |
| 1199 | queryParam.append(el.dataset.pname, el.value); |
| 1200 | } |
| 1201 | } else { |
| 1202 | const { paramSerializeStyle, paramSerializeExplode } = el.dataset; |
| 1203 | let vals = ((el.value && Array.isArray(el.value)) ? el.value : []); |
| 1204 | vals = Array.isArray(vals) ? vals.filter((v) => v !== '') : []; |
| 1205 | if (vals.length > 0) { |
| 1206 | if (paramSerializeStyle === 'spaceDelimited') { |
| 1207 | queryParam.append(el.dataset.pname, vals.join(' ').replace(/^\s|\s$/g, '')); |
| 1208 | } else if (paramSerializeStyle === 'pipeDelimited') { |
| 1209 | queryParam.append(el.dataset.pname, vals.join('|').replace(/^\||\|$/g, '')); |
| 1210 | } else { |
| 1211 | if (paramSerializeExplode === 'true') { // eslint-disable-line no-lonely-if |
| 1212 | vals.forEach((v) => { queryParam.append(el.dataset.pname, v); }); |
| 1213 | } else { |
| 1214 | queryParam.append(el.dataset.pname, vals.join(',').replace(/^,|,$/g, '')); |
| 1215 | } |
| 1216 | } |
| 1217 | } |
| 1218 | } |
| 1219 | if (queryParam.toString()) { |
| 1220 | urlQueryParamsMap.set(el.dataset.pname, queryParam); |
| 1221 | } |
| 1222 | }); |
| 1223 | } |
| 1224 | |
| 1225 | // Query Params (Dynamic - create from JSON) |
| 1226 | if (queryParamObjTypeEls.length > 0) { |
| 1227 | queryParamObjTypeEls.map((el) => { |
| 1228 | const queryParam = new URLSearchParams(); |
| 1229 | try { |
| 1230 | let queryParamObj = {}; |
| 1231 | const { paramSerializeStyle, paramSerializeExplode, pname } = el.dataset; |
| 1232 | queryParamObj = Object.assign(queryParamObj, JSON.parse(el.value.replace(/\s+/g, ' '))); |
| 1233 | if (el.dataset.paramAllowReserved === 'true') { |
| 1234 | queryParamsWithReservedCharsAllowed.push(el.dataset.pname); |