From 1661d1f4ca8db871e8606040a81349034a2ff5ab Mon Sep 17 00:00:00 2001 From: checktheroads Date: Mon, 19 Jul 2021 16:01:52 -0700 Subject: [PATCH] #6372: Fix query issues with & refactor API select --- netbox/dcim/forms.py | 2 + netbox/project-static/dist/netbox.js | Bin 694473 -> 695062 bytes netbox/project-static/dist/netbox.js.map | Bin 1637998 -> 1641897 bytes netbox/project-static/src/select/api.ts | 997 +++++++++++++++-------- netbox/project-static/src/select/util.ts | 210 +---- 5 files changed, 683 insertions(+), 526 deletions(-) diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 8496f5e82..aecf046bb 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -2077,6 +2077,8 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): attrs={ 'disabled-indicator': 'device', 'data-query-param-face': "[\"$face\"]", + # The UI will not sort this element's options. + 'pre-sorted': '' } ) ) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index dc5478c186ce5255854a37c265a21548518badd2..355bf877d2bc079b901b28b410bd3feac124ee73 100644 GIT binary patch delta 8097 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 Z^bcEcm;BMBh@O3WQoQ^2WaRWy{|lI;9B}{u diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 035eafbc34673a0686d81db5b3b9ca7f1c366044..09f0dc78cb84f23ac258e7e6ba40907aa63ca652 100644 GIT binary patch delta 76541 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 diff --git a/netbox/project-static/src/select/api.ts b/netbox/project-static/src/select/api.ts index 514ec563c..2e0636a73 100644 --- a/netbox/project-static/src/select/api.ts +++ b/netbox/project-static/src/select/api.ts @@ -1,41 +1,21 @@ -import SlimSelect from 'slim-select'; import queryString from 'query-string'; +import { readableColor } from 'color2k'; +import SlimSelect from 'slim-select'; +import { createToast } from '../bs'; +import { hasUrl, hasExclusions } from './util'; import { + isTruthy, + hasError, + getElement, getApiData, isApiError, getElements, - isTruthy, - hasError, findFirstAdjacent, } from '../util'; -import { createToast } from '../bs'; -import { setOptionStyles, toggle, getDependencyIds, initResetButton } from './util'; import type { Option } from 'slim-select/dist/data'; -type WithUrl = { - 'data-url': string; -}; - -type WithExclude = { - queryParamExclude: string; -}; - -type ReplaceTuple = [RegExp, string]; - -type CustomSelect> = HTMLSelectElement & T; - -function hasUrl(el: HTMLSelectElement): el is CustomSelect { - const value = el.getAttribute('data-url'); - return typeof value === 'string' && value !== ''; -} - -function hasExclusions(el: HTMLSelectElement): el is CustomSelect { - const exclude = el.getAttribute('data-query-param-exclude'); - return typeof exclude === 'string' && exclude !== ''; -} - -const DISABLED_ATTRIBUTES = ['occupied'] as string[]; +type QueryFilter = Map; // Various one-off patterns to replace in query param keys. const REPLACE_PATTERNS = [ @@ -45,335 +25,700 @@ const REPLACE_PATTERNS = [ [new RegExp(/tenant_(group)/g), '$1_id'], // Append `_id` to any fields [new RegExp(/^([A-Za-z0-9]+)(_id)?$/g), '$1_id'], -] as ReplaceTuple[]; +] as [RegExp, string][]; +// Empty placeholder option. const PLACEHOLDER = { value: '', text: '', placeholder: true, } as Option; +// Attributes which if truthy should render the option disabled. +const DISABLED_ATTRIBUTES = ['occupied'] as string[]; + /** - * Retrieve all objects for this object type. - * - * @param url API endpoint to query. - * - * @returns Data parsed into SlimSelect options. + * Manage a single API-backed select element's state. Each API select element is likely controlled + * or dynamically updated by one or more other API select (or static select) elements' values. */ -async function getOptions( - url: string, - select: HTMLSelectElement, - disabledOptions: string[], -): Promise { - if (url.includes(`{{`)) { - return [PLACEHOLDER]; - } +class APISelect { + /** + * Base `` element. + */ + private readonly preSorted: boolean = false; + + /** + * Event to be dispatched when dependent fields' values change. + */ + private readonly loadEvent: InstanceType; + + /** + * SlimSelect instance for this element. + */ + private readonly slim: InstanceType; + + /** + * API query parameters that should be applied to API queries for this field. This will be + * updated as other dependent fields' values change. This is a mapping of: + * + * Form Field Names → Form Field Values + * + * This is/might be different than the query parameters themselves, as the form field names may + * be different than the object model key names. For example, `tenant_group` would be the field + * name, but `group` would be the query parameter. Query parameters themselves are tracked in + * `queryParams`. + */ + private readonly filterParams: QueryFilter = new Map(); + + /** + * Post-parsed URL query parameters for API queries. + */ + private readonly queryParams: QueryFilter = new Map(); + + /** + * Mapping of URL template key/value pairs. If this element's URL contains Django template tags + * (e.g., `{{key}}`), `key` will be added to `pathValue` and the `id_key` form element will be + * tracked for changes. When the `id_key` element's value changes, the new value will be added + * to this map. For example, if the template key is `rack`, and the `id_rack` field's value is + * `1`, `pathValues` would be updated to reflect a `"rack" => 1` mapping. When the query URL is + * updated, the URL would change from `/dcim/racks/{{rack}}/` to `/dcim/racks/1/`. + */ + private readonly pathValues: QueryFilter = new Map(); + + /** + * Original API query URL passed via the `data-href` attribute from the server. This is kept so + * that the URL can be reconstructed as form values change. + */ + private readonly url: string = ''; + + /** + * API query URL. This will be updated dynamically to include any query parameters in `queryParameters`. + */ + private queryUrl: string = ''; + + /** + * This instance's available options. + */ + private _options: Option[] = [PLACEHOLDER]; + + /** + * Array of options values which should be considered disabled or static. + */ + private disabledOptions: Array = []; + + constructor(base: HTMLSelectElement) { + // Initialize readonly properties. + this.base = base; + this.name = base.name; + + if (base.getAttribute('pre-sorted') !== null) { + this.preSorted = true; + } + + if (hasUrl(base)) { + const url = base.getAttribute('data-url') as string; + this.url = url; + this.queryUrl = url; + } + + this.loadEvent = new Event(`netbox.select.onload.${base.name}`); + this.placeholder = this.getPlaceholder(); + this.disabledOptions = this.getDisabledOptions(); + + this.slim = new SlimSelect({ + select: this.base, + allowDeselect: true, + deselectLabel: ``, + placeholder: this.placeholder, + onChange: () => this.handleSlimChange(), + }); + + // Initialize API query properties. + this.getFilteredBy(); + this.getPathKeys(); + + for (const filter of this.filterParams.keys()) { + this.updateQueryParams(filter); + } + + for (const filter of this.pathValues.keys()) { + this.updatePathValues(filter); + } + + this.queryParams.set('limit', 0); + this.updateQueryUrl(); + + // Initialize element styling. + this.resetClasses(); + this.setSlimStyles(); + + // Initialize controlling elements. + this.initResetButton(); + + // Add dependency event listeners. + this.addEventListeners(); + + // Determine if this element is part of collapsible element. + const collapse = findFirstAdjacent(this.base, '.collapse', '.content-container'); + if (collapse !== null) { + // If this element is part of a collapsible element, only load the data when the + // collapsible element is shown. + // See: https://getbootstrap.com/docs/5.0/components/collapse/#events + collapse.addEventListener('show.bs.collapse', () => this.loadData()); + collapse.addEventListener('hide.bs.collapse', () => this.resetOptions()); + } else { + // Otherwise, load the data on render. + Promise.all([this.loadData()]); } - createToast('danger', `Error Fetching Options for field ${select.name}`, data.error).show(); - return [PLACEHOLDER]; } - const { results } = data; - const options = [PLACEHOLDER] as Option[]; + /** + * This instance's available options. + */ + public get options(): Option[] { + return this._options; + } - for (const result of results) { - const text = getDisplayName(result, select); - const data = {} as Record; - const value = result.id.toString(); - let style, selected, disabled; + /** + * Sort incoming options by label and apply the new options to both the SlimSelect instance and + * this manager's state. If the `preSorted` attribute exists on the base `