public async searchOperations()

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);
  }