in src/services/apiService.ts [116:172]
public async getOperationsByTags(apiId: string, searchQuery?: SearchQuery): Promise<Page<TagGroup<Operation>>> {
if (!apiId) {
throw new Error(`Parameter "apiId" not specified.`);
}
const skip = searchQuery && searchQuery.skip || 0;
const take = searchQuery && searchQuery.take || Constants.defaultPageSize;
let query = `apis/${apiId}/operationsByTags?includeNotTaggedOperations=true&$top=${take}&$skip=${skip}`;
const odataFilterEntries = [];
if (searchQuery) {
if (searchQuery.tags && searchQuery.tags.length > 0) {
const tagFilterEntries = searchQuery.tags.map((tag) => `tag/id eq '${tag.id}'`);
odataFilterEntries.push(`(${tagFilterEntries.join(" or ")})`);
}
if (searchQuery.pattern) {
const pattern = Utils.encodeURICustomized(searchQuery.pattern, Constants.reservedCharTuplesForOData);
odataFilterEntries.push(`(contains(operation/${searchQuery.propertyName || "name"},'${pattern}'))`);
}
}
if (odataFilterEntries.length > 0) {
query = Utils.addQueryParameter(query, `$filter=` + odataFilterEntries.join(" and "));
}
const pageOfOperationsByTag = await this.apiClient.get<PageContract<ApiTagResourceContract>>(query, [Utils.getIsUserResourceHeader(), await this.apiClient.getPortalHeader("getOperationsByTags")]);
const page = new Page<TagGroup<Operation>>();
const tagGroups: Bag<TagGroup<Operation>> = {};
pageOfOperationsByTag.value.forEach(x => {
const tagContract: TagContract = x.tag
const operationContract: OperationContract = x.operation
let tagGroup: TagGroup<Operation>;
let tagName: string;
if (tagContract) {
tagName = tagContract.name;
} else {
tagName = "Untagged";
}
tagGroup = tagGroups[tagName];
if (!tagGroup) {
tagGroup = new TagGroup<Operation>();
tagGroup.tag = tagName;
tagGroups[tagName] = tagGroup;
}
tagGroup.items.push(new Operation(operationContract));
});
page.value = Object.keys(tagGroups).map(x => tagGroups[x]);
page.nextLink = pageOfOperationsByTag.nextLink;
page.count = pageOfOperationsByTag.count;
return page;
}