diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index f388b96cf..45abd19e6 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 566476dde..61f3a2a08 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/src/forms/scopeSelector.ts b/netbox/project-static/src/forms/scopeSelector.ts index e1c7014bf..01be68ad3 100644 --- a/netbox/project-static/src/forms/scopeSelector.ts +++ b/netbox/project-static/src/forms/scopeSelector.ts @@ -6,7 +6,16 @@ type ShowHideMap = { * * @example vlangroup_edit */ - [view: string]: { + [view: string]: string; +}; + +type ShowHideLayout = { + /** + * Name of layout config + * + * @example vlangroup + */ + [config: string]: { /** * Default layout. */ @@ -19,15 +28,15 @@ type ShowHideMap = { }; /** - * Mapping of scope names to arrays of object types whose fields should be hidden or shown when + * Mapping of layout names to arrays of object types whose fields should be hidden or shown when * the scope type (key) is selected. * * For example, if `region` is the scope type, the fields with IDs listed in * showHideMap.region.hide should be hidden, and the fields with IDs listed in * showHideMap.region.show should be shown. */ -const showHideMap: ShowHideMap = { - vlangroup_edit: { +const showHideLayout: ShowHideLayout = { + vlangroup: { region: { hide: ['id_sitegroup', 'id_site', 'id_location', 'id_rack', 'id_clustergroup', 'id_cluster'], show: ['id_region'], @@ -70,6 +79,19 @@ const showHideMap: ShowHideMap = { }, }, }; + +/** + * Mapping of view names to layout configurations + * + * For example, if `region` is the scope type, the fields with IDs listed in + * showHideMap.region.hide should be hidden, and the fields with IDs listed in + * showHideMap.region.show should be shown. + */ +const showHideMap: ShowHideMap = { + vlangroup_add: 'vlangroup', + vlangroup_edit: 'vlangroup', +}; + /** * Toggle visibility of a given element's parent. * @param query CSS Query. @@ -94,8 +116,9 @@ function toggleParentVisibility(query: string, action: 'show' | 'hide') { function handleScopeChange

(view: P, element: HTMLSelectElement) { // Scope type's innerText looks something like `DCIM > region`. const scopeType = element.options[element.selectedIndex].innerText.toLowerCase(); + const layoutConfig = showHideMap[view]; - for (const [scope, fields] of Object.entries(showHideMap[view])) { + for (const [scope, fields] of Object.entries(showHideLayout[layoutConfig])) { // If the scope type ends with the specified scope, toggle its field visibility according to // the show/hide values. if (scopeType.endsWith(scope)) { @@ -109,7 +132,7 @@ function handleScopeChange

(view: P, element: HTMLSe break; } else { // Otherwise, hide all fields. - for (const field of showHideMap[view].default.hide) { + for (const field of showHideLayout[layoutConfig].default.hide) { toggleParentVisibility(`#${field}`, 'hide'); } }