From 84db2e90abe594cce7d53669320c1272843ff27c Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 20 Aug 2021 08:41:30 -0700 Subject: [PATCH] Fixes #6998: Properly handle merge and replace actions in API Select --- netbox/project-static/dist/netbox.js | Bin 316142 -> 316404 bytes netbox/project-static/dist/netbox.js.map | Bin 1131630 -> 1133155 bytes netbox/project-static/src/select/api.ts | 50 ++++++++++++++++++----- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index ced24d759d213ced371745a772409e27605c079c..31b84deb8982768f26bf81fc17df1858b6e04b04 100644 GIT binary patch delta 15955 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 B_lp1k delta 15624 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 delta 369 zcmaDn#r0i>YeNfT3sVbo3rh=Y3tJ0&3r7p*7OsRN+q;i&DJZif=jRnqU;CWPcDwLv zt}xE+MPIn;n79A@&XvzNz0sXZar(mVT%z00{^VN1IQ`WfF7E9Me{-E=pZ zW^Tdh?abWb(-)|)v1|`x;nroEKJPo1#P(fm+$oIH4^H8co9@EF9Re1dewKr~bNWOx zF7fT9oZL2y?Yp?RftUw~d4ZS@i21kg;u5(2hB0~jd9sH~tk6W_HeT*6@4Y1Na?NbzB`CwVib`ogF<5U8hSi3&t{rZEs>0 ztY>0!cbl%mCaB2lp65J0pH0w)vly(-S>I*)0XD(qLcWgv8BRKpj*ccyApOo2&eJ>D z1^rke9euN=KVTOuVRZ)zI!zCJEg-tRm_yK=jmx;usmfW$*U_YK`w>3D77nHy; +type ApplyMethod = 'merge' | 'replace'; + export type Trigger = /** * Load data when the select element is opened. @@ -293,7 +295,23 @@ class APISelect { newOptions = optionsIn.sort((a, b) => (a.text.toLowerCase() > b.text.toLowerCase() ? 1 : -1)); } // Deduplicate options each time they're set. - const deduplicated = uniqueByProperty(newOptions, 'value'); + let 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 = [PLACEHOLDER, ...deduplicated]; + } + if (!hasPlaceholder) { + // If there is no placeholder, add one to the front of the array. + deduplicated = [PLACEHOLDER, ...deduplicated]; + } + this._options = deduplicated; this.slim.setData(deduplicated); } @@ -352,7 +370,7 @@ class APISelect { // When the scroll position is at bottom, fetch additional options. this.base.addEventListener(`netbox.select.atbottom.${this.name}`, () => - this.fetchOptions(this.more), + this.fetchOptions(this.more, 'merge'), ); // Create a unique iterator of all possible form fields which, when changed, should cause this @@ -376,7 +394,7 @@ class APISelect { private async loadData(): Promise { try { this.disable(); - await this.getOptions(); + await this.getOptions('replace'); } catch (err) { console.error(err); } finally { @@ -391,7 +409,10 @@ class APISelect { * * @param data Valid API response (not an error). */ - private async processOptions(data: APIAnswer): Promise { + private async processOptions( + data: APIAnswer, + action: ApplyMethod = 'merge', + ): Promise { // Get all non-placeholder (empty) options' values. If any exist, it means we're editing an // existing object. When we fetch options from the API later, we can set any of the options // contained in this array to `selected`. @@ -400,6 +421,8 @@ class APISelect { .map(option => option.getAttribute('value')) .filter(isTruthy); + let options = [] as Option[]; + for (const result of data.results) { let text = result.display; @@ -453,8 +476,15 @@ class APISelect { selected, disabled, } as Option; + options = [...options, option]; + } - this.options = [...this.options, option]; + switch (action) { + case 'merge': + this.options = [...this.options, ...options]; + break; + case 'replace': + this.options = options; } if (hasMore(data)) { @@ -473,7 +503,7 @@ class APISelect { * * @param url API URL */ - private async fetchOptions(url: Nullable): Promise { + private async fetchOptions(url: Nullable, action: ApplyMethod = 'merge'): Promise { if (typeof url === 'string') { const data = await getApiData(url); @@ -483,19 +513,19 @@ class APISelect { } return this.handleError(`Error Fetching Options for field '${this.name}'`, data.error); } - await this.processOptions(data); + await this.processOptions(data, action); } } /** * Query the NetBox API for this element's options. */ - private async getOptions(): Promise { + private async getOptions(action: ApplyMethod = 'merge'): Promise { if (this.queryUrl.includes(`{{`)) { this.options = [PLACEHOLDER]; return; } - await this.fetchOptions(this.queryUrl); + await this.fetchOptions(this.queryUrl, action); } /** @@ -504,7 +534,7 @@ class APISelect { private async handleSearch(event: Event) { const { value: q } = event.target as HTMLInputElement; const url = queryString.stringifyUrl({ url: this.queryUrl, query: { q } }); - await this.fetchOptions(url); + await this.fetchOptions(url, 'merge'); this.slim.data.search(q); this.slim.render(); }