diff --git a/netbox/project-static/dist/config.js b/netbox/project-static/dist/config.js index 0f5723b02..15ff8261b 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 62f1744f8..09e9cbec5 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 649d759ae..904b60cdb 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 9e9ea06b9..bbf27ef7a 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 c5c9584a7..fee331fa1 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 d42cb3025..cd9eceee7 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 cebccc35f..e1a6dcbe5 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 66ab85332..15c4dcf86 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 a2d02a799..aef5eccf1 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 cf69c347c..60a871b6b 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/select/api.ts b/netbox/project-static/src/select/api/apiSelect.ts similarity index 80% rename from netbox/project-static/src/select/api.ts rename to netbox/project-static/src/select/api/apiSelect.ts index 61c40dd8c..51648fc48 100644 --- a/netbox/project-static/src/select/api.ts +++ b/netbox/project-static/src/select/api/apiSelect.ts @@ -1,71 +1,26 @@ -import queryString from 'query-string'; -import debounce from 'just-debounce-it'; import { readableColor } from 'color2k'; +import debounce from 'just-debounce-it'; +import queryString from 'query-string'; import SlimSelect from 'slim-select'; -import { createToast } from '../bs'; -import { hasUrl, hasExclusions, isTrigger } from './util'; +import { createToast } from '../../bs'; +import { hasUrl, hasExclusions, isTrigger } from '../util'; +import { DynamicParamsMap } from './dynamicParams'; +import { isStaticParams } from './types'; import { - isTruthy, hasMore, + isTruthy, hasError, getElement, getApiData, isApiError, - getElements, createElement, uniqueByProperty, findFirstAdjacent, -} from '../util'; +} from '../../util'; import type { Stringifiable } from 'query-string'; import type { Option } from 'slim-select/dist/data'; - -/** - * Map of string keys to primitive array values accepted by `query-string`. Keys are used as - * URL query parameter keys. Values correspond to query param values, enforced as an array - * for easier handling. For example, a mapping of `{ site_id: [1, 2] }` is serialized by - * `query-string` as `?site_id=1&site_id=2`. Likewise, `{ site_id: [1] }` is serialized as - * `?site_id=1`. - */ -type QueryFilter = Map; - -/** - * Map of string keys to primitive values. Used to track variables within URLs from the server. For - * example, `/api/$key/thing`. `PathFilter` tracks `$key` as `{ key: '' }` in the map, and when the - * value is later known, the value is set — `{ key: 'value' }`, and the URL is transformed to - * `/api/value/thing`. - */ -type PathFilter = Map; - -/** - * Merge or replace incoming options with current options. - */ -type ApplyMethod = 'merge' | 'replace'; - -/** - * Trigger for which the select instance should fetch its data from the NetBox API. - */ -export type Trigger = - /** - * Load data when the select element is opened. - */ - | 'open' - /** - * Load data when the element is loaded. - */ - | 'load' - /** - * Load data when a parent element is uncollapsed. - */ - | 'collapse'; - -// Various one-off patterns to replace in query param keys. -const REPLACE_PATTERNS = [ - // Don't query `termination_a_device=1`, but rather `device=1`. - [new RegExp(/termination_(a|b)_(.+)/g), '$2'], - // A tenant's group relationship field is `group`, but the field name is `tenant_group`. - [new RegExp(/tenant_(group)/g), '$1'], -] as [RegExp, string][]; +import type { Trigger, PathFilter, ApplyMethod, QueryFilter } from './types'; // Empty placeholder option. const PLACEHOLDER = { @@ -81,7 +36,7 @@ const DISABLED_ATTRIBUTES = ['occupied'] as string[]; * 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. */ -class APISelect { +export class APISelect { /** * Base `