From 113358f2de183a658474f8b525b40ff45b5da962 Mon Sep 17 00:00:00 2001 From: thatmattlove Date: Thu, 2 Sep 2021 08:58:55 -0700 Subject: [PATCH] Fixes #7148: Handle array values when constructing API URLs --- docs/release-notes/version-3.0.md | 1 + netbox/project-static/dist/config.js | Bin 115055 -> 115179 bytes netbox/project-static/dist/config.js.map | Bin 113259 -> 113501 bytes netbox/project-static/dist/jobs.js | Bin 115123 -> 115247 bytes netbox/project-static/dist/jobs.js.map | Bin 113238 -> 113480 bytes netbox/project-static/dist/lldp.js | Bin 115514 -> 115638 bytes netbox/project-static/dist/lldp.js.map | Bin 113707 -> 113949 bytes netbox/project-static/dist/netbox.js | Bin 323062 -> 323165 bytes netbox/project-static/dist/netbox.js.map | Bin 311439 -> 311640 bytes netbox/project-static/dist/status.js | Bin 135621 -> 135745 bytes netbox/project-static/dist/status.js.map | Bin 135770 -> 136012 bytes .../src/select/api/apiSelect.ts | 37 ++++++++---------- netbox/project-static/src/util.ts | 28 ++++++++++++- 13 files changed, 45 insertions(+), 21 deletions(-) diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 0d6e4e659..0e30487e3 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -2,6 +2,7 @@ ## v3.0.2 (FUTURE) * [#7131](https://github.com/netbox-community/netbox/issues/7131) - Fix issue where Site fields were hidden when editing a VLAN group +* [#7148](https://github.com/netbox-community/netbox/issues/7148) - Fix issue where static query parameters with multiple values were not queried properly --- diff --git a/netbox/project-static/dist/config.js b/netbox/project-static/dist/config.js index cf10225897ccff4bb2e7d618389f55d4e4eb61f8..0e701fc85aa4ac2e86352fc53198acb8898c6042 100644 GIT binary patch delta 1083 zcmYjPZEO=|9M8Y)xI!dg*(fhgZuKB{$yqfd#%JsTB z+bRxRvL$Tl;hsn$dlTJ|ZMd7IwlYQMEXMEjRF^#O+j<3A{&|^OsxXJhqWW_ENo9&iO zqe0kb-+633>ubu2@w?()GIBpWYyFx$1_is+S@A-%{Y2Ueu-AT4JrMxTzETVWaMp_Q zJYuE%FiJPdvmPM!yN6ofXSLNl+>hR+;q45HaPm`z@T#zF8?nAPIgZ9lBd@qaTpQhj zcGXx0(HQ#%m8Zsgu-L`%2Dj!v6DzTiwQ_PZlC6_py5#pWWyI{XjmXW6pz-<4kQ==3 z>?p%N!ruxr&Bj z<_(QiB}v+eyi}@l$8FqgB1VXHxpKx&cvBD!iCDdh>2<{9bpfx#%Muna1wkbCUyCE| ztGxG_y#jl*EF5^1%wQ_;9$o8r1oVinY^sv@#bj?%idQ0)v>!*wrkPGJN1>w(b2txy{v1_l>0 zQfOB$DQA_C$kEwW_z~^52|SL+?FOi!KM+_A9KA*0Pb_ew4f=3qC%Ydez(X?h*feZ) zBG1F4_)N~h4%q&54M|FgE=x>G9LB!;2BLWfC^gHB-R2{;lJ{(%60oIO0dp=b_8f zP)om>h9I58FULCry#QIKZx#Zc*H}|3mPJLso4h%6iq>mmZC#A1TjWEgT!Sk2u%c|&OY zUx*Ql=-j;wBPO~Tl3u>|_n75WUQ3#)uCaOg=Ev}pFO}jI`r#Zzp_5*n0~_)VwIL2j z|Con7E~V=eI00$uKL_k#N$QR8Vf#x L`?+=j20Z@)@pyTh delta 951 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 diff --git a/netbox/project-static/dist/jobs.js.map b/netbox/project-static/dist/jobs.js.map index e07a4157de968c29146982fd80c46bbd22192f75..c1e2ac34b85dfaf6176bb284e027b7e4e609cd59 100644 GIT binary patch delta 317 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 delta 73 zcmbRHi*5A}wuUW?^VTxvZ=b)Gv4e5D-UdcTMg@OIM}M72N5@DVcSlE0olGZ3$8;wU cJ5VRw(b?Q(d(}q9&&*8vVcYY!GOl9>0OGnCH2?qr diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 1cba69a9d9b0117b164d412bb6f87d1a58d8c8db..92ffda9def5df35afd4ffaf8997202b3db481620 100644 GIT binary patch delta 2185 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 delta 303 zcmcc7B;4O9+|a_Llj-E> znC=8(2kL}7I-9#}mp;H;%fXbFx_#CO=FmmVo`%lTKl(F@PUp#HF;>b0EA<7bPu6jD zboACqbaYJADRgoSEpY~lhB!_)%VBY3%5s|Skj-*udsPlgBD0t$NPQ}Z$aDhfiqr{q zbTyp*F`p$d4#))xx;wfTf%F5-0z1&%(YXMuG*!ph(a~AQ8)OyG)rlZA?mC{1t~ns( wt{xyhPBmrD(+!H4#kS8YVEG`#SybUv<*eiDSiF6DGm8&9W6Aa>T`VPL0RJOfjsO4v diff --git a/netbox/project-static/dist/status.js b/netbox/project-static/dist/status.js index 2f3c2f762197cf133eb790f50336f54e34515843..f4e64b5ef32550790021633246459c4d1e786c3a 100644 GIT binary patch delta 3459 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 delta 3351 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 diff --git a/netbox/project-static/src/select/api/apiSelect.ts b/netbox/project-static/src/select/api/apiSelect.ts index d88e73f11..11576c53f 100644 --- a/netbox/project-static/src/select/api/apiSelect.ts +++ b/netbox/project-static/src/select/api/apiSelect.ts @@ -174,16 +174,6 @@ export class APISelect { this.preSorted = true; } - const emptyOption = base.getAttribute('data-empty-option'); - if (isTruthy(emptyOption)) { - this.emptyOption = { - text: emptyOption, - value: '', - }; - } else { - this.emptyOption = EMPTY_PLACEHOLDER; - } - if (hasUrl(base)) { const url = base.getAttribute('data-url') as string; this.url = url; @@ -197,6 +187,16 @@ export class APISelect { this.disabledOptions = this.getDisabledOptions(); this.disabledAttributes = this.getDisabledAttributes(); + const emptyOption = base.getAttribute('data-empty-option'); + if (isTruthy(emptyOption)) { + this.emptyOption = { + text: emptyOption, + value: '', + }; + } else { + this.emptyOption = EMPTY_PLACEHOLDER; + } + this.slim = new SlimSelect({ select: this.base, allowDeselect: true, @@ -295,21 +295,18 @@ export class APISelect { newOptions = optionsIn.sort((a, b) => (a.text.toLowerCase() > b.text.toLowerCase() ? 1 : -1)); } // Deduplicate options each time they're set. - let deduplicated = uniqueByProperty(newOptions, 'value'); + const deduplicated = uniqueByProperty(newOptions, 'value'); // Determine if the new options have a placeholder. const hasPlaceholder = typeof deduplicated.find(o => o.value === '') !== 'undefined'; // Get the placeholder index (note: if there is no placeholder, the index will be `-1`). const placeholderIdx = deduplicated.findIndex(o => o.value === ''); - if (hasPlaceholder && placeholderIdx < 0) { - // If there is a placeholder but it is not the first element (due to sorting or other merge - // issues), remove it from the options array and place it in front. - deduplicated.splice(placeholderIdx); - deduplicated = [this.emptyOption, ...deduplicated]; - } - if (!hasPlaceholder) { - // If there is no placeholder, add one to the front of the array. - deduplicated = [this.emptyOption, ...deduplicated]; + if (hasPlaceholder && placeholderIdx >= 0) { + // If there is an existing placeholder, replace it. + deduplicated[placeholderIdx] = this.emptyOption; + } else { + // If there is not a placeholder, add one to the front. + deduplicated.unshift(this.emptyOption); } this._options = deduplicated; this.slim.setData(deduplicated); diff --git a/netbox/project-static/src/util.ts b/netbox/project-static/src/util.ts index 9103a7b01..278ccc3e5 100644 --- a/netbox/project-static/src/util.ts +++ b/netbox/project-static/src/util.ts @@ -1,6 +1,8 @@ import Cookie from 'cookie'; import queryString from 'query-string'; +import type { Stringifiable } from 'query-string'; + type Method = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'; type ReqData = URLSearchParams | Dict | undefined | unknown; type SelectedOption = { name: string; options: string[] }; @@ -117,6 +119,30 @@ function getCsrfToken(): string { return value; } +/** + * Constrict an object from a URL query param string, with all values as an array. + * + * @param params URL search query string. + * @returns Constructed query object. + */ +function queryParamsToObject(params: string): Record { + const result = {} as Record; + const searchParams = new URLSearchParams(params); + for (const [key, originalValue] of searchParams.entries()) { + let value = [] as Stringifiable[]; + if (key in result) { + value = [...value, ...result[key]]; + } + if (Array.isArray(originalValue)) { + value = [...value, ...originalValue]; + } else { + value = [...value, originalValue]; + } + result[key] = value; + } + return result; +} + /** * Build a NetBox URL that includes `settings.BASE_PATH` and enforces leading and trailing slashes. * @@ -153,7 +179,7 @@ function buildUrl(destination: string): string { } const url = combined.join('/'); // Construct an object from the URL search params so it can be re-serialized with the new URL. - const query = Object.fromEntries(new URLSearchParams(search).entries()); + const query = queryParamsToObject(search); return queryString.stringifyUrl({ url, query }); }