in libs/designer/src/lib/ui/panel/recommendation/SearchOpeationsService.tsx [53:101]
public async searchOperations(
searchTerm: string,
actionType?: string,
runtimeFilter?: string,
additionalFilter?: (operation: DiscoveryOperation<DiscoveryResultTypes>) => boolean
): Promise<DiscoveryOpArray> {
if (!this.allOperations) {
return [];
}
const filterItems = (result: Fuse.FuseResult<DiscoveryOperation<DiscoveryResultTypes>>): boolean => {
const { item } = result;
const { api } = item.properties;
// Skip if document with metadata should not be shown
if (!this.showParseDocWithMetadata && item.id === 'parsedocumentwithmetadata') {
return false;
}
// Apply runtime filters
if (runtimeFilter) {
if (
(runtimeFilter === 'inapp' && !isBuiltInConnector(api)) ||
(runtimeFilter === 'custom' && !isCustomConnector(api)) ||
(runtimeFilter === 'shared' && (isBuiltInConnector(api) || isCustomConnector(api)))
) {
return false;
}
}
// Apply action type filters (actions vs triggers)
if (actionType) {
const isTrigger = item.properties?.trigger !== undefined;
if ((actionType.toLowerCase() === 'actions' && isTrigger) || (actionType.toLowerCase() === 'triggers' && !isTrigger)) {
return false;
}
}
// Apply any additional filter provided
return additionalFilter ? additionalFilter(item) : true;
};
const fuse = new Fuse(this.allOperations, this.searchOptions());
return fuse
.search(searchTerm, { limit: 100 })
.filter(filterItems)
.sort(this.compareItems)
.map((result) => result.item);
}