Harness crucial alternatives data directly in Salesforce
Why choose Preqin for Salesforce?
Effortlessly access up-to-date Preqin data on LPs & GPs directly from Salesforce to discover fundraising opportunities and strengthen your investor relations.
Get set up in minutes with a simple installation that doesn’t require a technical team.
Link existing contacts and firms – or create new ones entirely – with direct access to Preqin’s industry-leading data to build a more complete picture of the firms and key personnel you’re interested in.
Easily refresh the data any time you need it, eliminating time-consuming and error-prone downloads from Preqin Pro.
Book your demo today to access the power of Preqin data directly from Salesforce
'));
// Find the container (assuming it's the direct parent with the class)
const $container = $inputField.closest('#formField--companyName');
// Demo display element
const $idDisplaySpan = $('#selected-id-display span');
let $resultsContainer = null;
let $resultsList = null;
let valueWasSelected = false; // Flag to track if the current value is from selection
let responseData = null; // Store the response data
// --- Helper Functions ---
function ensureResultsListExists() {
if(!$resultsContainer || $resultsContainer.length === 0) {
$resultsContainer = $container.find('.autocomplete-results');
if($resultsContainer.length === 0) {
$resultsContainer = $('
');
$resultsContainer.append($resultsList);
}
}
}
$resultsList.empty();
return $resultsList;
}
function hideResults() {
if($resultsContainer && $resultsContainer.length) {
$resultsContainer.hide();
if($resultsList) {
$resultsList.empty();
}
}
if(currentRequest) {
currentRequest.abort();
currentRequest = null;
}
}
// Function to clear the stored ID
function clearSelectedId() {
$hiddenFirmIdInput.val('');
valueWasSelected = false;
$idDisplaySpan?.text('(None)'); // Update demo display
// console.log("Hidden ID cleared");
}
// Function to handle selection (from click or Enter key)
function handleSelection($selectedItem) {
if(!$selectedItem || $selectedItem.length === 0 || $selectedItem.hasClass('autocomplete-message')) {
return; // Do nothing if no valid item or it's a message
}
const selectedText = $selectedItem.text();
const selectedId = $selectedItem.data('company-id'); // Retrieve stored ID
if(selectedId) {
$inputField.val(selectedText); // Update visible input
$hiddenFirmIdInput.val(selectedId); // Update hidden input
valueWasSelected = true; // Mark that selection occurred
$idDisplaySpan?.text(selectedId); // Update demo display
// console.log("Selected:", selectedText, "ID:", selectedId);
hideResults();
$inputField.trigger('change'); // Optional: Trigger change event for other listeners
}
else {
console.warn('Selected item missing company ID data:', $selectedItem);
hideResults(); // Hide results even if ID is missing
}
}
// --- Event Handlers ---
$inputField.on('input', function() {
const currentInputValue = $(this).val();
const searchTerm = currentInputValue.trim();
// CRITICAL: If the user types anything, clear the previously selected ID
// Only clear if the flag 'valueWasSelected' is true, meaning the last change
// wasn't already a manual input modification.
if(valueWasSelected) {
clearSelectedId();
}
// We always set valueWasSelected to false here, because *any* input
// event means the current value is potentially manual, until a selection happens again.
valueWasSelected = false;
clearTimeout(debounceTimer);
if(currentRequest) {
currentRequest.abort();
currentRequest = null;
}
if(searchTerm.length === 0) {
hideResults();
clearSelectedId(); // Also clear ID if input is emptied
return;
}
debounceTimer = setTimeout(() => {
const $currentResultsList = ensureResultsListExists();
$currentResultsList.html('