public async Task <SearchResults> SearchAsync(string query, Context context, CancellationToken ct) { var result = new SearchResults(); if (context.UserPermissions.Allows(Permissions.AppAssetsRead, context.App.Name)) { var filter = ClrFilter.Contains("fileName", query); var clrQuery = new ClrQuery { Filter = filter, Take = 5 }; var assets = await assetQuery.QueryAsync(context, null, Q.Empty.WithQuery(clrQuery), ct); if (assets.Count > 0) { foreach (var asset in assets) { var url = urlGenerator.AssetsUI(context.App.NamedId(), asset.Id.ToString()); result.Add(asset.FileName, SearchResultType.Asset, url); } } } return(result); }
public override FilterNode <ClrValue> Visit(SingleValueFunctionCallNode nodeIn) { var fieldNode = nodeIn.Parameters.ElementAt(0); if (string.Equals(nodeIn.Name, "empty", StringComparison.OrdinalIgnoreCase)) { return(ClrFilter.Empty(PropertyPathVisitor.Visit(fieldNode))); } var valueNode = nodeIn.Parameters.ElementAt(1); if (string.Equals(nodeIn.Name, "endswith", StringComparison.OrdinalIgnoreCase)) { var value = ConstantWithTypeVisitor.Visit(valueNode); return(ClrFilter.EndsWith(PropertyPathVisitor.Visit(fieldNode), value)); } if (string.Equals(nodeIn.Name, "startswith", StringComparison.OrdinalIgnoreCase)) { var value = ConstantWithTypeVisitor.Visit(valueNode); return(ClrFilter.StartsWith(PropertyPathVisitor.Visit(fieldNode), value)); } if (string.Equals(nodeIn.Name, "contains", StringComparison.OrdinalIgnoreCase)) { var value = ConstantWithTypeVisitor.Visit(valueNode); return(ClrFilter.Contains(PropertyPathVisitor.Visit(fieldNode), value)); } throw new NotSupportedException(); }