Skip to content

Commit 1b2bb71

Browse files
authored
Merge pull request #283 from umbraco/bugfix/activecampaign/pagination-filtering
Bugfix/activecampaign/pagination filtering
2 parents 13ac067 + 491968e commit 1b2bb71

File tree

7 files changed

+48
-25
lines changed

7 files changed

+48
-25
lines changed

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core/Controllers/FormsController.cs

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
using Microsoft.AspNetCore.Mvc;
22
using Microsoft.Extensions.Options;
3-
4-
using System;
5-
using System.Net.Http;
63
using System.Text.Json;
74
using System.Text.Json.Nodes;
8-
using System.Threading.Tasks;
9-
5+
using System.Web;
106
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core.Configuration;
117
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core.Models.Dtos;
128
using Umbraco.Cms.Web.BackOffice.Controllers;
@@ -34,13 +30,11 @@ public FormsController(IOptions<ActiveCampaignSettings> options, IHttpClientFact
3430
public IActionResult CheckApiAccess() => new JsonResult(new ApiAccessDto(_settings.BaseUrl, _settings.ApiKey));
3531

3632
[HttpGet]
37-
public async Task<IActionResult> GetForms(int page = 1)
33+
public async Task<IActionResult> GetForms(int page = 1, string searchQuery = "")
3834
{
3935
var client = _httpClientFactory.CreateClient(Constants.FormsHttpClient);
40-
41-
var requestUriString = page == 1
42-
? $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}"
43-
: $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}&offset={(page - 1) * Constants.DefaultPageSize}";
36+
37+
var requestUriString = BuildRequestUri(client.BaseAddress.ToString(), page, searchQuery);
4438

4539
var requestMessage = new HttpRequestMessage {
4640
RequestUri = new Uri(requestUriString),
@@ -89,5 +83,24 @@ public async Task<IActionResult> GetForm(string id)
8983
return new JsonResult(JsonSerializer.Deserialize<FormResponseDto>(content));
9084
}
9185

86+
private string BuildRequestUri(string baseAddress, int page, string searchQuery)
87+
{
88+
var uri = $"{baseAddress}{ApiPath}?limit={Constants.DefaultPageSize}";
89+
90+
Dictionary<string, string> queryParamsDictionary = new Dictionary<string, string>();
91+
if (page > 1)
92+
{
93+
queryParamsDictionary.Add("offset", ((page - 1) * Constants.DefaultPageSize).ToString());
94+
}
95+
96+
if (!string.IsNullOrWhiteSpace(searchQuery))
97+
{
98+
queryParamsDictionary.Add("search", searchQuery);
99+
}
100+
101+
return queryParamsDictionary.Count == 0
102+
? uri
103+
: string.Format("{0}&{1}", uri, string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={kvp.Value}")));
104+
}
92105
}
93106
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core/Models/Dtos/MetaDto.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ public class MetaDto
88
public string Total { get; set; }
99

1010
[JsonPropertyName("totalPages")]
11-
public int TotalPages => int.TryParse(Total, out var total) ? total / Constants.DefaultPageSize : 0;
11+
public int TotalPages => int.TryParse(Total, out var total) ? (int)Math.Ceiling((double)total / Constants.DefaultPageSize) : 0;
1212
}
1313
}

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core/Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<PackageIconUrl></PackageIconUrl>
1414
<PackageProjectUrl>https://github.com/umbraco/Umbraco.Cms.Integrations/tree/main/src/Umbraco.Cms.Integrations.Crm.ActiveCampaign</PackageProjectUrl>
1515
<RepositoryUrl>https://github.com/umbraco/Umbraco.Cms.Integrations</RepositoryUrl>
16-
<Version>2.0.4</Version>
16+
<Version>2.1.0</Version>
1717
<Authors>Umbraco HQ</Authors>
1818
<Company>Umbraco</Company>
1919
</PropertyGroup>

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/App_Plugins/UmbracoCms.Integrations/Crm/ActiveCampaign/js/activecampaign.resource.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
$http.get(`${apiEndpoint}/CheckApiAccess`),
1010
"Failed");
1111
},
12-
getForms: function (page) {
12+
getForms: function (page, searchQuery) {
1313
return umbRequestHelper.resourcePromise(
14-
$http.get(`${apiEndpoint}/GetForms?page=${page}`),
14+
$http.get(`${apiEndpoint}/GetForms?page=${page}&searchQuery=${encodeURIComponent(searchQuery)}`),
1515
"Failed");
1616
},
1717
getForm: function (id) {

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/App_Plugins/UmbracoCms.Integrations/Crm/ActiveCampaign/js/formpicker.controller.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,17 @@
6767
editorService.open(options);
6868
};
6969

70+
let filterTimeout;
71+
vm.filterForms = () => {
72+
if (filterTimeout) {
73+
clearTimeout(filterTimeout);
74+
}
75+
filterTimeout = setTimeout(() => {
76+
vm.pagination.pageNumber = 1;
77+
loadForms(vm.pagination.pageNumber, vm.searchTerm);
78+
}, 500);
79+
};
80+
7081
function getFormDetails(id) {
7182
vm.loading = true;
7283
umbracoCmsIntegrationsCrmActiveCampaignResource.getForm(id).then(function (response) {
@@ -79,12 +90,10 @@
7990
});
8091
}
8192

82-
function loadForms(page) {
93+
function loadForms(page, searchQuery) {
8394
vm.loading = true;
84-
umbracoCmsIntegrationsCrmActiveCampaignResource.getForms(page).then(function (response) {
85-
86-
vm.formsList = [];
87-
95+
vm.formsList = [];
96+
umbracoCmsIntegrationsCrmActiveCampaignResource.getForms(page ?? 1, searchQuery ?? "").then(function (response) {
8897
if (response.forms != null) {
8998

9099
vm.pagination.totalPages = response.meta.totalPages;
@@ -104,9 +113,9 @@
104113

105114
// pagination events
106115
function goToPage(page) {
107-
loadForms(page);
116+
loadForms(page, vm.searchTerm);
108117
}
109118
}
110119

111120
angular.module("umbraco")
112-
.controller("Umbraco.Cms.Integrations.Crm.ActiveCampaign.FormPickerController", formPickerController);
121+
.controller("Umbraco.Cms.Integrations.Crm.ActiveCampaign.FormPickerController", formPickerController);

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/App_Plugins/UmbracoCms.Integrations/Crm/ActiveCampaign/views/formpickereditor.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@
1111
<div class="acOverlayGroup" ng-if="vm.isApiConfigurationValid">
1212
<div class="form-search">
1313
<i class="icon-search"></i>
14-
<input type="text" class="-full-width-input" ng-model="vm.searchTerm" placeholder="Type to search..." umb-auto-focus="" aria-invalid="false">
14+
<input type="text" class="-full-width-input" ng-model="vm.searchTerm" placeholder="Type to search..." umb-auto-focus="" aria-invalid="false"
15+
ng-change="vm.filterForms()">
1516
</div>
1617
</div>
1718
<div class="acOverlayGroup" ng-if="vm.isApiConfigurationValid">
1819
<ul class="acFormsList">
19-
<li ng-repeat="form in vm.formsList | orderBy:'name' | filter:vm.searchTerm" ng-click="vm.selectedForm = form"
20+
<li ng-repeat="form in vm.formsList | orderBy:'name' " ng-click="vm.selectedForm = form"
2021
ng-class="{ 'acFormSelected': vm.selectedForm == form }" role="button" tabindex="0">
2122
<a href="" ng-attr-title="form.name">
2223
<i class="icon-umb-contour"></i>
@@ -25,7 +26,7 @@
2526
</li>
2627
</ul>
2728
<!-- If list is empty, then display -->
28-
<umb-empty-state ng-if="!vm.formsList"
29+
<umb-empty-state ng-if="!vm.formsList || vm.formsList.length == 0"
2930
position="center">
3031
<localize key="content_listViewNoItems">There are no forms in the list.</localize>
3132
</umb-empty-state>

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Umbraco.Cms.Integrations.Crm.ActiveCampaign.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<PackageIconUrl></PackageIconUrl>
1414
<PackageProjectUrl>https://github.com/umbraco/Umbraco.Cms.Integrations/tree/main/src/Umbraco.Cms.Integrations.Crm.ActiveCampaign</PackageProjectUrl>
1515
<RepositoryUrl>https://github.com/umbraco/Umbraco.Cms.Integrations</RepositoryUrl>
16-
<Version>2.0.4</Version>
16+
<Version>2.1.0</Version>
1717
<Authors>Umbraco HQ</Authors>
1818
<Company>Umbraco</Company>
1919
<PackageTags>Umbraco;Umbraco-Marketplace</PackageTags>

0 commit comments

Comments
 (0)