in src/services/apiService.ts [178:233]
public async getApisByTags(searchRequest?: SearchQuery): Promise<Page<TagGroup<Api>>> {
const skip = searchRequest && searchRequest.skip || 0;
const take = searchRequest && searchRequest.take || Constants.defaultPageSize;
let query = `/apisByTags?$top=${take}&$skip=${skip}`;
const odataFilterEntries = [];
if (searchRequest) {
if (searchRequest.tags && searchRequest.tags.length > 0) {
const tagFilterEntries = searchRequest.tags.map((tag) => `tag/id eq '${tag.id}'`);
odataFilterEntries.push(`(${tagFilterEntries.join(" or ")})`);
}
if (searchRequest.pattern) {
const pattern = Utils.encodeURICustomized(searchRequest.pattern, Constants.reservedCharTuplesForOData);
odataFilterEntries.push(`(contains(api/name,'${pattern}'))`);
}
}
if (odataFilterEntries.length > 0) {
query = Utils.addQueryParameter(query, `$filter=` + odataFilterEntries.join(" and "));
}
const pageOfApiTagResources = await this.apiClient.get<PageContract<ApiTagResourceContract>>(query, [Utils.getIsUserResourceHeader(), await this.apiClient.getPortalHeader("getApisByTags")]);
const page = new Page<TagGroup<Api>>();
const tagGroups: Bag<TagGroup<Api>> = {};
pageOfApiTagResources.value.forEach((x) => {
const tagContract: TagContract = x.tag
const apiContract: ApiContract = x.api
let tagGroup: TagGroup<Api>;
let tagName: string;
if (tagContract) {
tagName = tagContract.name;
}
else {
tagName = "Untagged";
}
tagGroup = tagGroups[tagName];
if (!tagGroup) {
tagGroup = new TagGroup<Api>();
tagGroup.tag = tagName;
tagGroups[tagName] = tagGroup;
}
tagGroup.items.push(new Api(apiContract));
});
page.value = Object.keys(tagGroups).map(x => tagGroups[x]);
page.nextLink = pageOfApiTagResources.nextLink;
page.count = pageOfApiTagResources.count;
return page;
}