const searchBarTemplate =
`
`;
const searchPanelTemplate =
``;
const searchModalTemplate =
``;
let appSearchResults = [];
let currentPage = 1;
let totalResults = 10;
let showPrevNext = false;
// Try loading the script from component, if wcm works fine directly.
let elCheckCounter = 0;
const elCheckInterval = setInterval(() => {
if (document.getElementById('appSearchContainer') || elCheckCounter > 10) {
document.getElementById('appSearchContainer').innerHTML = searchBarTemplate;
setAppSearchEventListeners();
clearInterval(elCheckInterval);
}
}, 1000);
const walkMeElCheckInterval = setInterval(() => {
if (document.getElementById('appSearchContainer') || elCheckCounter > 10) {
if (document.getElementById('appSearchContainer').querySelectorAll("[class*='walkme']")) {
document.getElementById('appSearchContainer').querySelectorAll("[class*='walkme']").forEach(el => el.remove());
}
clearInterval(walkMeElCheckInterval);
}
}, 2000);
const renderSearchResultsPanel = () => {
if (appSearchResults.length > 0 && document.getElementsByClassName('app-search-results-panel').length === 0) {
const temp0 = document.createElement('div');
temp0.classList.add('app-search-results-panel');
temp0.innerHTML = searchPanelTemplate;
document.getElementById('appSearchContainer').parentElement.append(temp0);
}
if (document.getElementById('appSearchResultsList')?.childElementCount === 0) {
appSearchResults.forEach(res => {
const el = document.createElement('li');
el.classList.add('app-search-result-item');
el.innerHTML = `
${(res.title?.snippet || res.title?.raw || '')}
${res.body_content?.snippet || res.body_content?.snippet || res.url?.raw}
`;
document.getElementById('appSearchResultsList').append(el);
});
}
if (appSearchResults.length === 0) {
if (document.getElementsByClassName('app-search-results-panel-content').length > 0) {
document.getElementsByClassName('app-search-results-panel-content')[0].classList.add('no-results');
}
} else {
document.getElementsByClassName('app-search-results-panel-content')[0].classList.remove('no-results');
}
}
const appendAppSearchResultsModal = () => {
const temp1 = document.createElement('div');
const temp2 = document.createElement('div');
temp1.classList.add('app-search-results-modal');
temp1.innerHTML = searchModalTemplate;
temp2.classList.add('app-search-results-modal-backdrop');
temp2.classList.add('show');
document.getElementById('appSearchContainer').parentElement.append(temp1);
document.getElementById('appSearchContainer').parentElement.append(temp2);
document.body.classList.add('app-search-modal-active');
}
const renderAppSearchResultsList = () => {
document.getElementById('appSearchResultsList')?.replaceChildren();
setTimeout(() => {
document.getElementById('appSearchInput').blur();
document.getElementsByClassName('app-search-results-panel')[0]?.classList.add('d-none');
}, 100);
if (document.getElementsByClassName('app-search-results-modal').length === 0) {
appendAppSearchResultsModal();
document.getElementById('appSearchResultsInput').value = document.getElementById('appSearchInput').value;
}
document.getElementById('appSearchResultsInput').focus();
updatePagination();
appSearchResults.forEach(res => {
const el = document.createElement('li');
el.classList.add('app-search-results-list-item');
el.innerHTML = `
${(res.title?.snippet || res.title?.raw || '')}
${res.last_crawled_at?.raw ? (new Date(res.last_crawled_at?.raw)?.toISOString()?.replace('.000', '') || '') : ''} • ${res.body_content?.snippet || res.body_content?.raw || res.url?.raw}
`;
document.getElementById('appSearchResultsModalList').append(el);
});
}
function updatePagination() {
document.getElementById('appSearchPaginationList').replaceChildren();
const input = document.getElementById('appSearchResultsInput').value;
const totalPages = Math.ceil(totalResults / 10);
if (totalResults === 0) {
document.getElementsByClassName('app-search-results-summary')[0].innerHTML = `No results found for “${input}”`;
} else if (currentPage === totalPages) {
document.getElementsByClassName('app-search-results-summary')[0].innerHTML = `Showing ${((currentPage - 1) * 10) +
1}–${totalResults} of ${totalResults} for “${input}”`;
} else {
document.getElementsByClassName('app-search-results-summary')[0].innerHTML = `Showing ${((currentPage - 1) * 10) +
1}–${currentPage * 10} of ${totalResults} for “${input}”`;
}
if (totalResults > 0) {
if (totalPages < 5) {
for (let i = 0; i < totalPages; i++) {
const el = document.createElement('li');
el.classList.add('app-search-results-pagination-list-item'); el.setAttribute('id', 'pageNumber' + (i + 1)); const
pageNumberClicked = i + 1; el.innerHTML = `${i + 1}`;
document.getElementById('appSearchPaginationList').append(el);
}
} else {
if (currentPage === 1) {
for (let i = 0; i < 5; i++) {
const el = document.createElement('li');
el.classList.add('app-search-results-pagination-list-item'); el.setAttribute('id', 'pageNumber' + (i + 1));
const pageNumberClicked = i + 1; el.innerHTML = `${i +
1}`;
document.getElementById('appSearchPaginationList').append(el);
}
} else {
const el = document.createElement('li');
el.classList.add('app-search-results-pagination-list-item');
el.setAttribute('id', 'previous');
el.innerHTML = `
< Previous`;
document.getElementById('appSearchPaginationList').append(el);
const startIndex = (totalPages - 3 >= currentPage) ? (currentPage - 2) : (totalPages - 5);
const endIndex = (totalPages - 3 >= currentPage) ? (currentPage + 3) : totalPages;
for (let i = startIndex; i < endIndex; i++) {
const el = document.createElement('li');
el.classList.add('app-search-results-pagination-list-item'); el.setAttribute('id', 'pageNumber' + (i
+ 1)); const pageNumberClicked = i + 1; el.innerHTML = `${i + 1}
`;
document.getElementById('appSearchPaginationList').append(el);
}
}
if (currentPage !== totalPages) {
const el = document.createElement('li');
el.classList.add('app-search-results-pagination-list-item');
el.setAttribute('id', 'next');
el.innerHTML = `Next >`;
document.getElementById('appSearchPaginationList').append(el);
}
}
const id = "pageNumber" + currentPage;
document.getElementById(id).innerHTML = `${currentPage}`;
}
}
function setAppSearchEventListeners() {
document.addEventListener('click', (event) => {
if (!document.getElementById('appSearchInputContainer').contains(event.target)) {
document.getElementById('appSearchInputContainer').blur();
document.getElementById('appSearchInput').blur();
document.getElementsByClassName('app-search-clear-link')[0].blur();
(document.getElementsByClassName('app-search-clear-link')[0]).classList.add('d-none');
if (document.getElementById('appSearchInput') !== document.activeElement &&
document.getElementsByClassName('app-search-input-container').length > 0) {
document.getElementsByClassName('app-search-input-container')[0].style.width = '50%';
if (document.getElementsByClassName('app-search-results-panel')[0]) {
document.getElementsByClassName('app-search-results-panel')[0].classList.add('d-none');
}
}
}
});
document.getElementById('appSearchInput').addEventListener('focus', () => {
(document.getElementsByClassName('app-search-clear-link')[0]).classList.remove('d-none');
});
document.getElementById('appSearchInputContainer').addEventListener('blur', () => {
document.getElementById('appSearchInput').blur();
document.getElementsByClassName('app-search-clear-link')[0].blur();
(document.getElementsByClassName('app-search-clear-link')[0]).classList.add('d-none');
if (document.getElementById('appSearchInput') !== document.activeElement &&
document.getElementsByClassName('app-search-input-container').length > 0) {
document.getElementsByClassName('app-search-input-container')[0].style.width = '50%';
if (document.getElementsByClassName('app-search-results-panel')[0]) {
document.getElementsByClassName('app-search-results-panel')[0].classList.add('d-none');
}
}
});
document.getElementById('appSearchInputContainer').addEventListener('focusout', () => {
document.getElementById('appSearchInput').blur();
document.getElementsByClassName('app-search-clear-link')[0].blur();
(document.getElementsByClassName('app-search-clear-link')[0]).classList.add('d-none');
if (document.getElementById('appSearchInput') !== document.activeElement &&
document.getElementsByClassName('app-search-input-container').length > 0) {
document.getElementsByClassName('app-search-input-container')[0].style.width = '50%';
if (document.getElementsByClassName('app-search-results-panel')[0]) {
document.getElementsByClassName('app-search-results-panel')[0].classList.add('d-none');
}
}
});
['keyup',/* 'keydown', */ 'focus'].forEach(evt => {
document.getElementById('appSearchInput').addEventListener(evt, (event) => {
if (document.getElementById('appSearchInput') === document.activeElement &&
document.getElementsByClassName('app-search-input-container').length > 0) {
document.getElementsByClassName('app-search-input-container')[0].style.width = '100%';
}
if (evt === 'keyup' && (event.key === 'Enter' || event.keyCode === 13)) {
if (event.target.value.length === 0) {
changePage(1);
}
renderAppSearchResultsList();
setAppSearchResultsModalEvents();
document.getElementsByClassName('app-search-input-container')[0].style.width = '50%';
(document.getElementsByClassName('app-search-clear-link')[0]).classList.add('d-none');
}
if ((evt === 'keyup' || evt === 'keydown') && event.target.value.length > 0) {
const input = document.getElementById('appSearchInput').value;
fetchAppSearchResults(input, 1);
}
if (document.getElementsByClassName('app-search-results-panel').length > 0 && event.target.value.length === 0) {
document.getElementsByClassName('app-search-results-panel')[0].classList.add('d-none');
document.getElementById('appSearchResultsList')?.replaceChildren();
appSearchResults = [];
} else if (event.target.value.length > 0 && document.getElementsByClassName('app-search-results-panel')[0]) {
document.getElementsByClassName('app-search-results-panel')[0].classList.remove('d-none');
}
});
});
document.getElementById('appSearchClearLink').addEventListener('click', () => {
document.getElementById('appSearchInput').value = '';
document.getElementsByClassName('app-search-clear-link')[0].blur();
(document.getElementsByClassName('app-search-clear-link')[0]).classList.add('d-none');
document.getElementById('appSearchResultsList')?.replaceChildren();
document.getElementById('appSearchResultsModalList')?.replaceChildren();
if (document.getElementById('appSearchInput') !== document.activeElement &&
document.getElementsByClassName('app-search-input-container').length > 0) {
document.getElementsByClassName('app-search-input-container')[0].style.width = '50%';
}
if (document.getElementsByClassName('app-search-results-panel')[0]) {
document.getElementsByClassName('app-search-results-panel')[0].classList.add('d-none');
}
});
}
function setAppSearchResultsModalEvents() {
document.getElementById('appSearchResultsInput').addEventListener('keyup', (event) => {
if (event.key === 'Enter' || event.keyCode === 13) {
document.getElementById('appSearchResultsInput')?.value
changePage(1);
}
});
document.getElementById('appSearchResultsCloseIcon').addEventListener('click', () => {
document.getElementsByClassName('app-search-results-modal')[0].remove();
document.getElementsByClassName('app-search-results-modal-backdrop')[0].remove();
document.body.classList.remove('app-search-modal-active');
});
}
const result_fields = {
last_crawled_at: { raw: {} },
body_content: { raw: {}, snippet: { size: 1000, fallback: true } },
title: { raw: {}, snippet: { size: 1000, fallback: true } },
url: { raw: {} },
id: { raw: {} }
}
let searchKey = 'search-9u2n8ycf8sqhwki4dr4im48f';
let searchEndpoint = 'https://bsc-elasticcloud-npe.ent.westus2.azure.elastic-cloud.com/api/as/v1/engines/broker-connection-v1/search';
if (location.host === 'www.blueshieldca.com') {
searchKey = 'search-djvwj8yssbq9riwabtcgecgv';
searchEndpoint = 'https://bsc-elasticcloud.ent.westus2.azure.elastic-cloud.com/api/as/v1/engines/broker/search';
}
function fetchAppSearchResults(queryString, pageNumber) {
const request = {
query: queryString,
result_fields: result_fields,
page: {
size: 10,
current: pageNumber
}
}
fetch(searchEndpoint,
{
method: 'POST',
cache: 'no-cache',
headers: {
'Content-Type': "application/json",
'Authorization': "Bearer " + searchKey
},
body: JSON.stringify(request)
}).then(response => response.json())
.then(res => {
document.getElementById('appSearchResultsList')?.replaceChildren();
appSearchResults = res.results;
currentPage = res.meta.page.current;
totalResults = res.meta.page.total_results;
renderSearchResultsPanel();
});
}
function changePage(pageNumberClicked) {
const input = document.getElementById('appSearchResultsInput')?.value || '';
const request = {
query: input,
result_fields: result_fields,
page: {
size: 10,
current: pageNumberClicked
}
}
fetch(searchEndpoint,
{
method: 'POST',
cache: 'no-cache',
headers: {
'Content-Type': "application/json",
'Authorization': "Bearer " + searchKey
},
body: JSON.stringify(request)
}).then(response => response.json())
.then(res => {
appSearchResults = res.results;
currentPage = res.meta.page.current;
totalResults = res.meta.page.total_results;
document.getElementById('appSearchResultsModalList')?.replaceChildren();
renderAppSearchResultsList();
});
}