Skip to content

Commit f0503b8

Browse files
committed
Update pagination and filtering actions
1 parent 13ac067 commit f0503b8

File tree

5 files changed

+38
-18
lines changed

5 files changed

+38
-18
lines changed

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

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System.Text.Json;
77
using System.Text.Json.Nodes;
88
using System.Threading.Tasks;
9-
9+
using System.Web;
1010
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core.Configuration;
1111
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Core.Models.Dtos;
1212
using Umbraco.Cms.Web.BackOffice.Controllers;
@@ -34,13 +34,11 @@ public FormsController(IOptions<ActiveCampaignSettings> options, IHttpClientFact
3434
public IActionResult CheckApiAccess() => new JsonResult(new ApiAccessDto(_settings.BaseUrl, _settings.ApiKey));
3535

3636
[HttpGet]
37-
public async Task<IActionResult> GetForms(int page = 1)
37+
public async Task<IActionResult> GetForms(int page = 1, string searchQuery = "")
3838
{
3939
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}";
40+
41+
var requestUriString = BuildRequestUri(client.BaseAddress.ToString(), page, searchQuery);
4442

4543
var requestMessage = new HttpRequestMessage {
4644
RequestUri = new Uri(requestUriString),
@@ -89,5 +87,24 @@ public async Task<IActionResult> GetForm(string id)
8987
return new JsonResult(JsonSerializer.Deserialize<FormResponseDto>(content));
9088
}
9189

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

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/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: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
vm.changePage = goToPage;
2020
vm.goToPage = goToPage;
2121

22+
vm.filterForms = () => {
23+
loadForms(vm.pagination.pageNumber, vm.searchTerm);
24+
}
25+
2226
umbracoCmsIntegrationsCrmActiveCampaignResource.checkApiAccess().then(function (response) {
2327
vm.isApiConfigurationValid = response.isApiConfigurationValid;
2428
if (response.isApiConfigurationValid) {
@@ -79,12 +83,10 @@
7983
});
8084
}
8185

82-
function loadForms(page) {
86+
function loadForms(page, searchQuery) {
8387
vm.loading = true;
84-
umbracoCmsIntegrationsCrmActiveCampaignResource.getForms(page).then(function (response) {
85-
86-
vm.formsList = [];
87-
88+
vm.formsList = [];
89+
umbracoCmsIntegrationsCrmActiveCampaignResource.getForms(page ?? 1, searchQuery ?? "").then(function (response) {
8890
if (response.forms != null) {
8991

9092
vm.pagination.totalPages = response.meta.totalPages;
@@ -104,7 +106,7 @@
104106

105107
// pagination events
106108
function goToPage(page) {
107-
loadForms(page);
109+
loadForms(page, vm.searchTerm);
108110
}
109111
}
110112

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>

0 commit comments

Comments
 (0)