diff --git a/src/components/QueryOptions.vue b/src/components/QueryOptions.vue index 008d3b69..566eb438 100644 --- a/src/components/QueryOptions.vue +++ b/src/components/QueryOptions.vue @@ -17,6 +17,7 @@ div import Vue from 'vue'; import moment from 'moment'; import { useBucketsStore } from '~/stores/buckets'; +import { preferKnownHostnames } from '~/util/hostnames'; export default Vue.extend({ name: 'QueryOptions', @@ -40,7 +41,7 @@ export default Vue.extend({ computed: { hostnameChoices() { - return this.bucketsStore.hosts; + return preferKnownHostnames(this.bucketsStore.hosts); }, }, diff --git a/src/util/hostnames.ts b/src/util/hostnames.ts new file mode 100644 index 00000000..2234691d --- /dev/null +++ b/src/util/hostnames.ts @@ -0,0 +1,6 @@ +export function preferKnownHostnames(hosts: string[]): string[] { + const knownHosts = hosts.filter(host => host !== 'unknown'); + return knownHosts.length > 0 + ? [...knownHosts, ...hosts.filter(host => host === 'unknown')] + : hosts; +} diff --git a/test/unit/hostnames.test.node.ts b/test/unit/hostnames.test.node.ts new file mode 100644 index 00000000..60e78f41 --- /dev/null +++ b/test/unit/hostnames.test.node.ts @@ -0,0 +1,19 @@ +import { preferKnownHostnames } from '~/util/hostnames'; + +describe('preferKnownHostnames', () => { + test('moves unknown to the end when a known host exists', () => { + expect(preferKnownHostnames(['unknown', 'laptop_ori'])).toEqual(['laptop_ori', 'unknown']); + }); + + test('preserves the original order for known hosts', () => { + expect(preferKnownHostnames(['desktop', 'laptop', 'unknown'])).toEqual([ + 'desktop', + 'laptop', + 'unknown', + ]); + }); + + test('keeps unknown when it is the only host', () => { + expect(preferKnownHostnames(['unknown'])).toEqual(['unknown']); + }); +});