Skip to content

Commit 442853e

Browse files
authored
Merge pull request #285 from umbraco/bugfix/v15/activecampaign/pagination-filtering
Update ActiveCampaign pagination and filtering
2 parents ce31aed + 8438530 commit 442853e

File tree

11 files changed

+1821
-1072
lines changed

11 files changed

+1821
-1072
lines changed

azure-pipeline - Crm.ActiveCampaign.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ steps:
2222
projects: '$(project)'
2323
includeNuGetOrg: true
2424

25+
- task: UseDotNet@2
26+
displayName: 'Use SDK version 9.0.203'
27+
inputs:
28+
packageType: 'sdk'
29+
version: '9.0.203'
30+
2531
- task: VSBuild@1
2632
displayName: 'Build Project'
2733
inputs:

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Api/Management/Controllers/GetFormsPagedController.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using Asp.Versioning;
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.AspNetCore.WebUtilities;
45
using Microsoft.Extensions.Options;
6+
using System.Web;
57
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
68
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
79

@@ -20,13 +22,11 @@ public GetFormsByPageController(IOptions<ActiveCampaignSettings> options, IHttpC
2022
[ProducesResponseType(StatusCodes.Status404NotFound)]
2123
[ProducesResponseType(StatusCodes.Status403Forbidden)]
2224
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
23-
public async Task<IActionResult> GetForms([FromQuery]int? page = 1)
25+
public async Task<IActionResult> GetForms([FromQuery] int? page = 1, [FromQuery] string? searchQuery = "")
2426
{
2527
var client = HttpClientFactory.CreateClient(Constants.FormsHttpClient);
2628

27-
var requestUriString = page == 1
28-
? $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}"
29-
: $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}&offset={(page - 1) * Constants.DefaultPageSize}";
29+
var requestUriString = BuildRequestUri(client.BaseAddress.ToString(), page ?? 1, searchQuery);
3030

3131
var requestMessage = new HttpRequestMessage
3232
{
@@ -38,5 +38,22 @@ public async Task<IActionResult> GetForms([FromQuery]int? page = 1)
3838

3939
return await HandleResponseAsync<FormCollectionResponseDto>(response);
4040
}
41+
42+
private string BuildRequestUri(string baseAddress, int page, string searchQuery)
43+
{
44+
var uri = $"{baseAddress}{ApiPath}?limit={Constants.DefaultPageSize}";
45+
46+
if (page > 1)
47+
{
48+
uri = QueryHelpers.AddQueryString(uri, "offset", ((page - 1) * Constants.DefaultPageSize).ToString());
49+
}
50+
51+
if (!string.IsNullOrWhiteSpace(searchQuery))
52+
{
53+
uri = QueryHelpers.AddQueryString(uri, "search", searchQuery);
54+
}
55+
56+
return uri;
57+
}
4158
}
4259
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/generated/services.gen.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ export class ActiveCampaignFormsService {
2828
method: 'GET',
2929
url: '/umbraco/activecampaign-forms/management/api/v1/forms',
3030
query: {
31-
page: data.page
31+
page: data.page,
32+
searchQuery: data.searchQuery
3233
}
3334
});
3435
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/generated/types.gen.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export type CheckApiAccessResponse = ApiAccessDtoModel;
3030

3131
export type GetFormsData = {
3232
page?: number;
33+
searchQuery?: string;
3334
};
3435

3536
export type GetFormsResponse = FormCollectionResponseDtoModel;

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/openapi-ts.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export default {
2-
input: 'http://localhost:6583/umbraco/swagger/activecampaign-forms-management/swagger.json',
2+
input: 'http://localhost:40714/umbraco/swagger/activecampaign-forms-management/swagger.json',
33
output: {
44
lint: 'eslint',
55
path: 'generated',

0 commit comments

Comments
 (0)