diff --git a/netbox/project-static/dist/config.js b/netbox/project-static/dist/config.js index 990415437..23356a19d 100644 Binary files a/netbox/project-static/dist/config.js and b/netbox/project-static/dist/config.js differ diff --git a/netbox/project-static/dist/config.js.map b/netbox/project-static/dist/config.js.map index 61b68949c..f412168a9 100644 Binary files a/netbox/project-static/dist/config.js.map and b/netbox/project-static/dist/config.js.map differ diff --git a/netbox/project-static/dist/jobs.js b/netbox/project-static/dist/jobs.js index b1b73ae01..ca0d2dcd1 100644 Binary files a/netbox/project-static/dist/jobs.js and b/netbox/project-static/dist/jobs.js differ diff --git a/netbox/project-static/dist/jobs.js.map b/netbox/project-static/dist/jobs.js.map index 99183a748..fb8e1c847 100644 Binary files a/netbox/project-static/dist/jobs.js.map and b/netbox/project-static/dist/jobs.js.map differ diff --git a/netbox/project-static/dist/lldp.js b/netbox/project-static/dist/lldp.js index b51ba092c..6ecdeb900 100644 Binary files a/netbox/project-static/dist/lldp.js and b/netbox/project-static/dist/lldp.js differ diff --git a/netbox/project-static/dist/lldp.js.map b/netbox/project-static/dist/lldp.js.map index ff03c92e7..26b82fe99 100644 Binary files a/netbox/project-static/dist/lldp.js.map and b/netbox/project-static/dist/lldp.js.map differ diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 8ec3af3b3..89446fae7 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index c541288ef..7aec6156b 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/dist/status.js b/netbox/project-static/dist/status.js index 02276c286..16a74aa39 100644 Binary files a/netbox/project-static/dist/status.js and b/netbox/project-static/dist/status.js differ diff --git a/netbox/project-static/dist/status.js.map b/netbox/project-static/dist/status.js.map index a0959bba1..ec0f621f8 100644 Binary files a/netbox/project-static/dist/status.js.map and b/netbox/project-static/dist/status.js.map differ diff --git a/netbox/project-static/src/tableConfig.ts b/netbox/project-static/src/tableConfig.ts index eb850d628..ff12e8d68 100644 --- a/netbox/project-static/src/tableConfig.ts +++ b/netbox/project-static/src/tableConfig.ts @@ -1,5 +1,5 @@ import { createToast } from './bs'; -import { getElements, apiPatch, buildUrl, hasError, getSelectedOptions } from './util'; +import { getElements, apiPatch, hasError, getSelectedOptions } from './util'; /** * Mark each option element in the selected columns element as 'selected' so they are submitted to @@ -54,8 +54,7 @@ function removeColumns(event: Event): void { * Submit form configuration to the NetBox API. */ async function submitFormConfig(formConfig: Dict): Promise> { - const url = buildUrl('/api/users/config/'); - return await apiPatch(url, formConfig); + return await apiPatch('/api/users/config/', formConfig); } /** diff --git a/netbox/project-static/src/util.ts b/netbox/project-static/src/util.ts index c27cb2823..55933964b 100644 --- a/netbox/project-static/src/util.ts +++ b/netbox/project-static/src/util.ts @@ -157,16 +157,21 @@ function queryParamsToObject(params: string): Record { * * @param path Relative path _after_ (excluding) the `BASE_PATH`. */ -export function buildUrl(destination: string): string { +function buildUrl(destination: string): string { // Separate the path from any URL search params. const [pathname, search] = destination.split(/(?=\?)/g); // If the `origin` exists in the API path (as in the case of paginated responses), remove it. const origin = new RegExp(window.location.origin, 'g'); - const path = pathname.replaceAll(origin, ''); + let path = pathname.replaceAll(origin, ''); const basePath = getBasePath(); + // If the `BASE_PATH` already exists in the URL, remove it. + if (basePath !== '' && path.includes(basePath)) { + path = path.replaceAll(basePath, ''); + } + // Combine `BASE_PATH` with this request's path, removing _all_ slashes. let combined = [...basePath.split('/'), ...path.split('/')].filter(p => p); @@ -185,7 +190,7 @@ export function buildUrl(destination: string): string { } export async function apiRequest( - url: string, + path: string, method: Method, data?: D, ): Promise> { @@ -198,6 +203,8 @@ export async function apiRequest( headers.set('content-type', 'application/json'); } + const url = buildUrl(path); + const res = await fetch(url, { method, body, headers, credentials: 'same-origin' }); const contentType = res.headers.get('Content-Type'); if (typeof contentType === 'string' && contentType.includes('text')) {