content/frontend/search/components/version_search.vue (96 lines of code) (raw):
<script>
import { GlFormSelect, GlTooltipDirective as GlTooltip, GlIcon } from '@gitlab/ui';
import { getArchivesVersions } from '../../services/fetch_versions';
const SELECT_DEFAULT_TEXT = 'Select a version';
export default {
components: {
GlFormSelect,
GlIcon,
},
directives: {
GlTooltip,
},
props: {
query: {
type: String,
required: true,
},
},
data() {
return {
selectedVersion: SELECT_DEFAULT_TEXT,
archiveOptions: [],
};
},
async created() {
try {
const archiveVersions = await getArchivesVersions();
archiveVersions.push(SELECT_DEFAULT_TEXT);
/**
* Omit versions with non-functional versioned search.
* We can remove this list and the filter method below after
* 15.5 and lower are retired (18.0 release/May 2025).
*/
const unsupported = [
'14.0',
'14.1',
'14.2',
'14.3',
'14.4',
'14.5',
'14.6',
'14.7',
'14.8',
'14.9',
'15.0',
'15.1',
'15.2',
'15.3',
'15.4',
'15.5',
];
// Build the option list.
this.archiveOptions = archiveVersions
.filter((v) => !unsupported.includes(v))
.map((text) => ({ text, value: text }))
.reverse();
} catch (err) {
throw new Error(`Error fetching archives list: ${err}`);
}
},
methods: {
searchArchivedVersion() {
if (this.selectedVersion !== SELECT_DEFAULT_TEXT) {
// In 15.11, the search query string changed from "query" to "q".
// This logic can be removed when 15.x sites are retired (18.0 release).
const versionNumber = Number(this.selectedVersion);
const queryParam = versionNumber < 16.0 && versionNumber !== 15.11 ? 'query' : 'q';
window.location.href = `https://archives.docs.gitlab.com/${
this.selectedVersion
}/search/?${queryParam}=${encodeURI(this.query)}`;
this.selectedVersion = SELECT_DEFAULT_TEXT;
}
},
},
};
</script>
<template>
<div>
<h2 class="gl-font-lg! gl-mb-3! gl-mt-6!">
Search the archives
<gl-icon
v-gl-tooltip.right.hover.html
name="information"
size="12"
class="gl-vertical-align-middle!"
title="Docs archives use a simplified search engine. You might find fewer results when searching past versions."
/>
</h2>
<gl-form-select
v-model="selectedVersion"
:options="archiveOptions"
class="gl-max-w-20"
@change="searchArchivedVersion()"
/>
</div>
</template>