From 70ec87f76701df58e7b46f566f3dce2c8b350978 Mon Sep 17 00:00:00 2001 From: Julio Oliveira at Encora <149191228+Julio-Oliveira-Encora@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:58:54 -0300 Subject: [PATCH] Feature 15348 - Quick Access Saved Filters (#15862) * Added dropdown for Saved Filters. * Added dropdown for Saved Filters. * Added dropdown for Saved Filters. * Fixed linter issues in savedFiltersSelect.ts * Fixed linter issues in netbox.ts * Fixed linter issues in netbox.ts * Removed the blue tag with the filters when saved filters is selected. * Adjusts in table_controls_htmx.html to vertical height of the Quick Search match to the dropdown. * Adjusts in table_controls_htmx.html to vertical height of the Quick Search match to the dropdown. * Adjusts in table_controls_htmx.html to vertical height of the Quick Search match to the dropdown. * Minor adjusts in savedFiltersSelect.ts * Addressed PR comment. * Addressed PR comment. * Addressed PR comment. * Omit saved filters from 'applied filters'; clean up form widget --------- Co-authored-by: Jeremy Stretch --- netbox/project-static/dist/netbox.css | Bin 551835 -> 551938 bytes netbox/project-static/dist/netbox.js | Bin 389990 -> 390360 bytes netbox/project-static/dist/netbox.js.map | Bin 354840 -> 355215 bytes .../src/forms/savedFiltersSelect.ts | 30 ++++++++++++++++++ netbox/project-static/src/netbox.ts | 2 ++ netbox/project-static/styles/netbox.scss | 1 + .../styles/overrides/_tomselect.scss | 8 +++++ netbox/templates/inc/table_controls_htmx.html | 24 ++++++++++---- netbox/utilities/templatetags/helpers.py | 4 +++ 9 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 netbox/project-static/src/forms/savedFiltersSelect.ts create mode 100644 netbox/project-static/styles/overrides/_tomselect.scss diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index 0696d2e827f51ae3142a610e546459a4bba62033..36ed4defca8e8ed69115468fac126f7bbb72ce1d 100644 GIT binary patch delta 86 zcmbPzU9stgVnYjK3sVbo3rh=Y3tJ2O77n?n>7Trw#^U|%%3n~;q*tno# k`o}O1IdO%Q%(Cj-#G>@fJSzhQ6QC3b8*G<};;0t{04HJ{CIA2c delta 31 mcmZp=p*Z`xVnYjK3sVbo3rh=Y3tJ2O77n?n?X6K9wSoY9)vx`oS{1c|c(qho@3psz-v2o>f%x6~BmDMW zYp>aR?e*Ggt#k6^jMqP!F~Q+*y008gsj=eZ-U(&o4el)|9H;r>ia*F@ZL(M@!R#ci zMEBn57U8{bREWU7Lh&gDg8N<+^Y<;H8M)q|L(`Ptz8d%NF6^_aj+0 zJr#6#la78BG$n35846V2_etzoynPOF! zUaaZG^_o-jJL)x8P>nYa>MgNI)E7&n9bLN9Y4Kehch_sZU3y0FZojO8}payN>M+-778jJ{#lh6 z27$9$#Ds?rR)aib9H|xyCxHIMda?fk&|lLf7SF)=Ktv1?*e{NW%dy-O6UXxL?9?FOEzR4aV`;#f?I=a^Ov&PHNEI_JK$u5eeIsR{q1A zVxg@;S6Yp)-V`sB=;oK+7Vq;%$HjDh<{gm)qT;xCi2r^{PR4m@}k$6>z0b|?8 zLKC8v|M-bGC6%!I*n3=HunpNfd+;7w<6ZnbgnjQD4o*{VAiEsASyw_A@mhr2a*L&kQ) zeC9K;oNxO~tew{I4VsYdZsmXfOzfG`5p*hP-5oW5U9z;Y+W4pcz#VwkKg3+~@H}Jc z=b~APc2@r(9Ab^dngP}dXzH4v;#CuB`S8ey`QTDUURTFq4mM8P4}tc?z2!{ zjq%u7Q3Qb*uL(*E(PT79T8fcJY*Zqy;(Kh=4gvnnMt6#&WiB~HtMNfD zea~itpc?p^i8K$&zH=h2Be9iFPu3(E39hznjtM-zWskeDqXA=lWT65UJ2W9yX|RvWtZ;qgfyR?=!itGxn^m3 z7yq;vOxN*O#T3gNo+zQX0DBP3%>~^tL`rAnV8k5C;~sP1TNYB$zF!y3<6kYHJ^3I> zAWX$HcV@O|Q7LaKrCm_#$x?bmY%vZjqz-}c^dc&|P*m}pW#qW9Dmdb_%x62VUq&m% zcH@R+bWn`n7<4c5U8Zc~#mnhN(aDc2r_Evm=dYlP#73@ILCdglcm;hSwi()`1aEBQ zM=z&i2ni$QRAf5o{tALS)$vPL(2NPKLHEU*T&~3zLmYp(0!Gqcta8&)5!NsabRxSJhG7c<_9CGyOQiRTr^}uf8 z{B94G%TUzG%}>yD&P!3gQ~_02Oa3=cY!H;YbQnv2f{8 zoKJ^bEL1-)?We-30jxwLnx62*lF{r^Ee^D{wJU>|Mt!*GkU7cFmHATe2fNY{b+1^e zRP&AfRG!-&bq`~6?!K318-MCYOyF{r^7zjh6;gYY#aWsq!bYb`cr!b=#6ySqD-TWL zPA|>J!|=5SQW)Z8UYaQa+~}nxBE^GVS}f9hpO*sD2jPAR&6VY$BOUd@Lu+}ykNiDr zz??^oMUrt}$gVU4f{e~1LJ>5Zv@tZpn^J#e9j z3LO9}9d0x&b}irLC)Wj~I65BEygq&xTh4|o?MfAJqt__Y625SmxfxFhP+_j_8v=tH zxgbER?AxO5*5s0|q|%9BoV&U8lVU9#uqzu_4?wcrd{Y1~MI#>$(7fq&&{=Oyw6EL~ zQhJ*(Ce#sR0Ve`f1K(U6gbB(GQH4vchac?LXaluIdGGyXhhfG(5=XK zc1GzJ5|X|wK@U!;ik5GQDk;q!(<-+|%QqT-Nzf%il(IdA)3+J5DY}$wYokiHaqSQ# zMNxfJv9jTiFHx*%ZjbKrYr5Cb$P>2H6+0SCIYvSuH5xaa2#{$X=MZhGWgk7JefYxP zu#ZI8z1fTzrNeD1R<$e${adgOI0&6(!B__L`bO8|KzKqEEqBKcN{4-6er-D~nG(S< zqYOaNDo+}wnae_Buw}tWOxqsO6DmyFgM~rOn+PJ}U>fvg%+t%A!_+XxA9fE%)ffa^ zZf598A`%FMeB~ueN0gxP0A$RFnSG$ar~e(yUphd&yjp9wGXwR9^bu+&4djH(@U zy$~8da~+;lJ%i+yCuoxK>`r=B*kWPl2!Hx3n8KlN(SMB(g`Jh2aCwpsf1AD_HOx~- zsDO|D6Y`RXarF%d?+C09-AJGBh=OCt+l%zybRE0Wp7FQNuN_gdjxy-k5NN=Bp;XoU@~g72x@udE~@Aq z1Qz~m#yy}*hle~Mjj5xr#1M`(nNH%=j_llW%jzs(c{Z+dj;_oD9r$8)WevZy3wc^I zm+Yp}`86PL>1t{~#ZuFGpbR)O#&~zrYWLQ#dm!#`RwD97%gkfSty%Vr^VpGyr3;v>!>oV zBXgCe)xXdEROA`?t&rMiBGFsA1>b-F2`hDxV(*z??+UvF(xx@A*8X}4^Wdp zynpWdv`RGppF3$4jSq*-45>F@tiFpr6sQUu_s~sZJ0HFWPs2uj`yOOD+l(vkrOARe zX8GS{Z2JNA5K^Px{*bN~J34V?f5elFCt@lju)&l-+%*Oh3|XGP!L-C~ScA2s!Fz)t zU>Y;_VH&L~p$=rRb=bu+%T{am*q|DN2S;F*1FC0h2I_)Gs!4wE$B2au{M?V}dFsmY z*kH-DJ=)iU+uLsx06;o~8M`^HHiP^aPZI zhL#GN7RWSkH)I$Z_q{+%`NGHW{zTaQ7=28q?nL!ru)Mm>`29$7scMQ>`e9KdGkMOhWY3gfD0m59z zU^+88?>FTcg*?aTd;l`fWEP#K$fI76)bd+TlMAjh;V3D^L!ijSKu~N}I4z=Er} z^C+#H)(-TjC0O`1eD6`@BhA474{cinHT=p^yev(8<|vYByyu4?&y~NX|D>j@Dz36r zLFoYB`v}$WBgbe7U;ivJ?aO~oQ#pE)#&dMO9LMbdjRnt8zo3ru%DI}VE#Va#MbA-y zaGmRZL(dmB|1Zj_HK43kk+UYC)L8Oe#UH;&r)VI+vnRj7s0Zcju2)cTuH$E4p_+pA0keVS@S&`$ibO&_Rd=-Uyx&ouXfdw& z9qkYx{PI<*n_drvb@;;3kecwVMfWHYgRQRR?$^kN)aA%)bcfi&UH_L3@si(XQ)A#Q zGp#r3e@|Z$YQEZkLkvU=zxH){Kd%ZqCU9m#L-^Xx`WsX+eIsz$7!U}JzE#`!$Qwwo zH}acrP}z=7kXR0gm}gR}deRIa-I$x%id|{U%#f(ql{(BbuGgBK0ojGArpHly`4HS1 z0A=^16d$ns016MfVA@!T9iPMKteZO`7<4s2*^9n&?c0~@0_7B z?)WR&x$LiWkxffE%lXqY=$lmV;YSfJ_WYIpVKeLO&*@2-7r||!ktm8Pyy7aienABV zA>dGwSje(WZ1QmW3;I|j+4m(4k|%qsqbx0h3R$<6BBROD zp(R2-hg0bd8T-z{{-$`becTg6q8g9Fl>B`BD=I4Vr{KOp^W^i@Wt1m=P4*Sx)Myl_ z@gNEWP09c$M{_T$BCsoQH*oN*V5%*3dyO3= z+s7j`w@j6VeCk5EbbcU(E^#)IZ`OT|p%kJsnlY&L;|a$gubdz+2iw~w$T`SSZkZtW z2odI4ljPi-6n@&m#oG~LKAs~l*wLb9Iw$Sm3lBN+GfWU#t$9r*8(m}GqZt>?MT@LBMBzzCY<=IfayX#*+~r!9(gU}Q}FxduVq z0<-mJ3m4?c^+@GBd2#_-OgHAqQiP13=1B)a$sh7$F}g$lnJ4#7s!CbP*=ol9?fkvT z@(}21r$`@S+P_SZ%h8xTK1D{6l0w2x9+xkt8@EoCgQ&oa+mr~YvQL_Defqd2mZVu0sYR=k}vem5`a*Z@dP4kqyy) zpmcq|QQnQbX=f8S9x$G3l6wU*!0z?(0R#~=;`fT6v9DR8jT$vhwMdnwhSP3ra3%g* z-?5Yc_q59c$R0mymp_HBe$XK=n%84;qJUw=-iuCw?uccfJ~u!<*&)9J(!>T?GIcCz zW;MN0&gKugq3AzukY3QO-Y6FqjG-$JY4L=$5lFvqU9(`vC27x$w*0b121b?b_WX=W$WLoMe2vOJ0@(4u08(fDtg>?SpBc zXq(wD@x35z)T(k&B3eG_l`cr&6R-Rwh=1b4$G;x_yHA!)#@4E7Kh7oCdP$G5!Y@BJ zcTj>dWPY+apvg-Js{ZX(sl$vaLUP%(MYU;U4agTdke8q&Kq7=!YcTCzwsh(Fj{!r* zZP&`%%qHN%>*OnQYhgO-fG@OG^M$R~qc4L;;r+My8P|EB3W#7EEw8J@^?NHUL z4tw0^LB(u`Vf!83IzP>_3=-YRvJ%62sDR}i@=7F`Rd>jyVsjH^y~PT&bDohlzj^ZT zI)3O5`5E%ZA0CiP5vqTGKwcu&8oA%cH83v;rQf5Rin|G#qXhc0yY;=US`74EhWD4k#iZH!o0O;|`RnME3j zZMG^gsWXGWh`SG-EI^UeOxj^^Jw5=W_w(YjR-v)V~otX2x9E>kd%jtcMuRW1d#amD0 z~!K1J8un3_E$Bv@+N<&Q0GC_-fIKgR;7#y*mxk&9fB% delta 8532 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 Gg8mzh5>x;H diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 00b92809a34cefe6dd3a97639f464723e923a6d1..c5cd1a402ff7a61d0ef39a02023dba464333c5fd 100644 GIT binary patch delta 381 zcmY*UKTE?<5U0jW&IO0A0fz$-@dNzcwT2Kws4=v4i}q=PiIp}M!J&hLqhtISPImDd zxC%~w7w_fO!Qqa3zkhe{^{e~x-F_lY4g z*37CjplJj?Y|jl$USesH%O!vE*(SQxUn}rl*(aDYTZb$kn@N6ID4=N7DTRD?+nnU? PwE5^cJL~t{z3BV` option.selected) + .map(option => `filter_id=${option.value}`) + .join('&'); + + baseUrl += `${preFilter}${selectedOptions}`; + document.location.href = baseUrl; +} + +export function initSavedFilterSelect(): void { + const divResults = document.getElementById('results'); + if (isTruthy(divResults)) { + const savedFilterSelect = document.getElementById('id_filter_id'); + if (isTruthy(savedFilterSelect)) { + savedFilterSelect.addEventListener('change', handleSavedFilterChange); + } + } +} diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 59faab222..ce0aad93f 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -13,6 +13,7 @@ import { initSideNav } from './sidenav'; import { initDashboard } from './dashboard'; import { initRackElevation } from './racks'; import { initHtmx } from './htmx'; +import { initSavedFilterSelect } from './forms/savedFiltersSelect'; function initDocument(): void { for (const init of [ @@ -31,6 +32,7 @@ function initDocument(): void { initDashboard, initRackElevation, initHtmx, + initSavedFilterSelect, ]) { init(); } diff --git a/netbox/project-static/styles/netbox.scss b/netbox/project-static/styles/netbox.scss index b04b85fc9..af2905312 100644 --- a/netbox/project-static/styles/netbox.scss +++ b/netbox/project-static/styles/netbox.scss @@ -7,6 +7,7 @@ // Overrides of external libraries @import 'overrides/bootstrap'; @import 'overrides/tabler'; +@import 'overrides/tomselect'; // Transitional styling to ease migration of templates from NetBox v3.x @import 'transitional/badges'; diff --git a/netbox/project-static/styles/overrides/_tomselect.scss b/netbox/project-static/styles/overrides/_tomselect.scss new file mode 100644 index 000000000..29aa9d361 --- /dev/null +++ b/netbox/project-static/styles/overrides/_tomselect.scss @@ -0,0 +1,8 @@ +.ts-wrapper.multi { + .ts-control { + padding: 7px 7px 3px 7px; + div { + margin: 0 4px 4px 0; + } + } +} diff --git a/netbox/templates/inc/table_controls_htmx.html b/netbox/templates/inc/table_controls_htmx.html index bbbcff59c..ec913d32a 100644 --- a/netbox/templates/inc/table_controls_htmx.html +++ b/netbox/templates/inc/table_controls_htmx.html @@ -1,25 +1,37 @@ {% load helpers %} {% load i18n %} -
+
- + - {% block extra_table_controls %}{% endblock %} + {% block extra_table_controls %}{% endblock %}
+ +
+
+
+ +
+ {{ filter_form.filter_id }} +
+
+
{% if request.user.is_authenticated and table_modal %}
-
{% endif %}
+ diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py index b9a3e0005..3595c0666 100644 --- a/netbox/utilities/templatetags/helpers.py +++ b/netbox/utilities/templatetags/helpers.py @@ -281,6 +281,10 @@ def applied_filters(context, model, form, query_params): if filter_name not in querydict: continue + # Skip saved filters, as they're displayed alongside the quick search widget + if filter_name == 'filter_id': + continue + bound_field = form.fields[filter_name].get_bound_field(form, filter_name) querydict.pop(filter_name) display_value = ', '.join([str(v) for v in get_selected_values(form, filter_name)])