2021-12-14 20:04:49 -05:00
|
|
|
import { getElements, findFirstAdjacent, isTruthy } from './util';
|
2021-04-17 18:16:13 -07:00
|
|
|
|
2021-05-07 11:07:06 -07:00
|
|
|
/**
|
|
|
|
* Change the display value and hidden input values of the search filter based on dropdown
|
|
|
|
* selection.
|
|
|
|
*
|
|
|
|
* @param event "click" event for each dropdown item.
|
|
|
|
* @param button Each dropdown item element.
|
|
|
|
*/
|
2021-08-23 22:31:36 -07:00
|
|
|
function handleSearchDropdownClick(event: Event, button: HTMLButtonElement): void {
|
2021-05-07 11:07:06 -07:00
|
|
|
const dropdown = event.currentTarget as HTMLButtonElement;
|
|
|
|
const selectedValue = findFirstAdjacent<HTMLSpanElement>(dropdown, 'span.search-obj-selected');
|
|
|
|
const selectedType = findFirstAdjacent<HTMLInputElement>(dropdown, 'input.search-obj-type');
|
|
|
|
const searchValue = dropdown.getAttribute('data-search-value');
|
|
|
|
let selected = '' as string;
|
2021-03-13 02:31:57 -07:00
|
|
|
|
2021-05-07 11:07:06 -07:00
|
|
|
if (selectedValue !== null && selectedType !== null) {
|
|
|
|
if (isTruthy(searchValue) && selected !== searchValue) {
|
|
|
|
selected = searchValue;
|
|
|
|
selectedValue.innerHTML = button.textContent ?? 'Error';
|
|
|
|
selectedType.value = searchValue;
|
|
|
|
} else {
|
|
|
|
selected = '';
|
2021-05-07 16:21:31 -07:00
|
|
|
selectedValue.innerHTML = 'All Objects';
|
2021-05-07 11:07:06 -07:00
|
|
|
selectedType.value = '';
|
|
|
|
}
|
|
|
|
}
|
2021-03-13 02:31:57 -07:00
|
|
|
}
|
|
|
|
|
2021-05-07 11:07:06 -07:00
|
|
|
/**
|
|
|
|
* Initialize Search Bar Elements.
|
|
|
|
*/
|
2021-08-23 22:31:36 -07:00
|
|
|
function initSearchBar(): void {
|
2021-07-30 00:35:38 -07:00
|
|
|
for (const dropdown of getElements<HTMLUListElement>('.search-obj-selector')) {
|
2021-05-07 11:07:06 -07:00
|
|
|
for (const button of dropdown.querySelectorAll<HTMLButtonElement>(
|
|
|
|
'li > button.dropdown-item',
|
|
|
|
)) {
|
|
|
|
button.addEventListener('click', event => handleSearchDropdownClick(event, button));
|
2021-03-13 02:31:57 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-04-17 18:16:13 -07:00
|
|
|
|
2021-08-23 22:31:36 -07:00
|
|
|
export function initSearch(): void {
|
2021-12-14 20:04:49 -05:00
|
|
|
for (const func of [initSearchBar]) {
|
2021-04-20 09:34:12 -07:00
|
|
|
func();
|
|
|
|
}
|
|
|
|
}
|