(false);
useEffect(() => {
setIsSearchCompleted(isSearchComplete);
}, [isSearchComplete]);
const previousSearchItems: any = usePrevious(searchResults);
useEffect(() => {
if (createdChip) {
setSearchVal('');
setSelectedItems([...selectedItems, getCheckedOption(createdChip)]);
}
}, [createdChip]);
useEffect(() => {
onOptionClick && onOptionClick(selectedItems);
}, [selectedItems]);
useEffect(() => {
setSearchResults(getInitialItems());
}, [JSON.stringify(searchResults)]);
useEffect(() => {
if (JSON.stringify(searchResults) === JSON.stringify(previousSearchItems))
if (!isEmpty(searchResults)) setSearchResults(getInitialItems());
}, [searchResults]);
useEffect(() => {
if (JSON.stringify(prevSelectedItems) !== JSON.stringify(defaultItems)) {
if (!isEmpty(defaultItems)) {
setSelectedItems(generateCheckedOptions(Array.isArray(defaultItems) ?defaultItems : []));
}
}
}, [defaultItems]);
useEffect(() => {
document.addEventListener('mousedown', outSideClick);
if (!showMultiselectSearchResult)
{
setSearchResults([])
return document.removeEventListener('mousedown', outSideClick);
}
}, [showMultiselectSearchResult]);
const onSearchOptionClick = (option: any) => {
const newSelectedItems: any[] = selectedItems;
let newSelectedItemsdesc: any[] = selectedItems;
const isOptionPresent = selectedItems.length ? selectedItems.find((selected: any) => selected.value === option.value) : true;
if (selectedItems.length < maxOptionLength || (selectedItems.length === maxOptionLength && isOptionPresent)) {
if (id=='search-entity-value-descriptorListproduct')
{
const index = newSelectedItemsdesc.findIndex(selectedItem => selectedItem.value.split('-')[1] === option.value.split('-')[1]);
if (index > -1) {
setSearchResults(toggleOptionByValuedesc(allSearchResults, option.value.split('-')[0]));
newSelectedItemsdesc.splice(index, 1);
setSelectedItems(newSelectedItemsdesc);
}
else
{
if (canAddMoreProds) {
setSearchResults(toggleOptionByValuedesc(allSearchResults, option.value.split('-')[0]));
newSelectedItemsdesc = newSelectedItemsdesc.filter((obj: any) => obj.value.split('-')[1] != option.value.split('-')[1]);
newSelectedItemsdesc.push(option);
setSelectedItems(newSelectedItemsdesc);
} else {
showErrorMessage();
}
}
}
else
{
const index = newSelectedItems.findIndex(selectedItem => selectedItem.value === option.value);
if (index > -1) {
setSearchResults(toggleOptionByValue(allSearchResults, option.value));
newSelectedItems.splice(index, 1);
setSelectedItems(newSelectedItems);
} else {
if (canAddMoreProds) {
setSearchResults(toggleOptionByValue(allSearchResults, option.value));
newSelectedItems.push(option);
setSelectedItems(newSelectedItems);
} else {
showErrorMessage();
}
}
}
if (onOptionClick) onOptionClick(selectedItems);
setSearchVal('');
} else {
showErrorMessage();
}
};
const showErrorMessage = () => {
//MessageService.showToastMessage('Max product limit reached for creative.')
}
const outSideClick = (event: any) => {
const selectedElement = document.getElementById(id);
if (selectedElement && !selectedElement.contains(event.target)) {
setShowMultiSelectSearchResult(false);
setSearchResults(selectedItems);
}
};
const clearAll = (event: any) => {
event.stopPropagation();
setSearchResults([]);
setSelectedItems([]);
setShowMultiSelectSearchResult(false);
setSearchVal('');
if (onOptionClick) onOptionClick([]);
if (onClearAll) onClearAll();
};
const toggleOptionByValue = (items: any, value: number) => {
return items.map((item: any) =>
item.value === value ? { ...item, checked: !item.checked } : item
);
};
const toggleOptionByValuedesc = (items: any, value: number) => {
return items.map((item: any) =>
item.value.split('-')[0] === value ? { ...item, checked: true } :{ ...item, checked: false }
);
};
const filterItemsByValue = (items: any, value: any) => {
return items.filter((item: any) => item.value !== value);
};
const onChipCrossButtonClick = (value: number) => {
setSelectedItems(filterItemsByValue(selectedItems, value));
setSearchResults(toggleOptionByValue(allSearchResults, value));
if (onOptionClick) onOptionClick(filterItemsByValue(selectedItems, value));
setShowMultiSelectSearchResult(false);
};
const onMoreButtonClick = () => {
setSearchResults([...selectedItems]);
setShowMultiSelectSearchResult(true);
if (onMoreButtonClickCallback) {
onMoreButtonClickCallback();
}
};
useEffect(() => {
if (shouldClearChips) {
setSelectedItems([]);
}
}, [shouldClearChips]);
useEffect(() => {
if (!shouldClearChips) setSelectedItems(movePrimaryProductFirst(selectedItems));
}, [primaryChip]);
const movePrimaryProductFirst = (items: any[]) => {
const primaryProductIndex = items.findIndex((item: any) => item.value === primaryChip);
items.unshift(...items.splice(primaryProductIndex, 1));
return [...items];
};
const handleCreateButtonClick = () => {
onCreateButtonClick && onCreateButtonClick(searchVal);
setSearchVal('');
};
return (
<>
{
if (allSearchResults.length) {
setShowMultiSelectSearchResult(false);
setSearchResults([]);
setIsSearchCompleted(false);
}
if (setDirtyFields) {
setDirtyFields(keyName, event.target.value !== null && event.target.value !== undefined && event.target.value !== "" ? true : false);
}
getSearchValue(event.target.value);
}}
searchVal={searchVal}
onCrossIconPressed={clearAll}
onChipRightClick={onChipRightClick}
onChipCrossButtonClick={onChipCrossButtonClick}
primaryChip={primaryChip}
onMoreButtonClick={onMoreButtonClick}
isDisabled={disabled}
isPartiallyDisabled={isPartiallyDisabled}
placeholder={selectedItems.length === 0 ? placeholder : ''}
autoFocus={autoFocus}
//maxLength={maxLength}
/>
{showMultiselectSearchResult && (
)}
>
);
}