Skip to content

Commit a1a28d3

Browse files
committed
Update pagination and filtering actions
1 parent 1d5dfc2 commit a1a28d3

File tree

7 files changed

+38
-23
lines changed

7 files changed

+38
-23
lines changed

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

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
44
using Microsoft.Extensions.Options;
5+
using System.Web;
56
using Umbraco.Cms.Api.Common.Builders;
67
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Configuration;
78
using Umbraco.Cms.Integrations.Crm.ActiveCampaign.Models.Dtos;
@@ -21,15 +22,13 @@ public GetFormsByPageController(IOptions<ActiveCampaignSettings> options, IHttpC
2122
[ProducesResponseType(StatusCodes.Status404NotFound)]
2223
[ProducesResponseType(StatusCodes.Status403Forbidden)]
2324
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
24-
public async Task<IActionResult> GetForms([FromQuery] int? page = 1)
25+
public async Task<IActionResult> GetForms([FromQuery] int? page = 1, string? searchQuery = "")
2526
{
2627
try
2728
{
2829
var client = HttpClientFactory.CreateClient(Constants.FormsHttpClient);
2930

30-
var requestUriString = page == 1
31-
? $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}"
32-
: $"{client.BaseAddress}{ApiPath}&limit={Constants.DefaultPageSize}&offset={(page - 1) * Constants.DefaultPageSize}";
31+
var requestUriString = BuildRequestUri(client.BaseAddress.ToString(), page ?? 1, searchQuery);
3332

3433
var requestMessage = new HttpRequestMessage
3534
{
@@ -48,5 +47,25 @@ public async Task<IActionResult> GetForms([FromQuery] int? page = 1)
4847
.Build());
4948
}
5049
}
50+
51+
private string BuildRequestUri(string baseAddress, int page, string searchQuery)
52+
{
53+
var uri = $"{baseAddress}{ApiPath}?limit={Constants.DefaultPageSize}";
54+
55+
Dictionary<string, string> queryParamsDictionary = new Dictionary<string, string>();
56+
if (page > 1)
57+
{
58+
queryParamsDictionary.Add("offset", ((page - 1) * Constants.DefaultPageSize).ToString());
59+
}
60+
61+
if (!string.IsNullOrWhiteSpace(searchQuery))
62+
{
63+
queryParamsDictionary.Add("search", HttpUtility.UrlEncode(searchQuery));
64+
}
65+
66+
return queryParamsDictionary.Count == 0
67+
? uri
68+
: string.Format("{0}&{1}", uri, string.Join("&", queryParamsDictionary.Select(kvp => $"{kvp.Key}={kvp.Value}")));
69+
}
5170
}
5271
}

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export type GetFormsData = {
6464
path?: never;
6565
query?: {
6666
page?: number;
67+
searchQuery?: string;
6768
};
6869
url: '/umbraco/activecampaign-forms/management/api/v1/forms';
6970
};
@@ -73,10 +74,6 @@ export type GetFormsErrors = {
7374
* The resource is protected and requires an authentication token
7475
*/
7576
401: unknown;
76-
/**
77-
* Payment Required
78-
*/
79-
402: unknown;
8077
/**
8178
* Forbidden
8279
*/

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/src/context/activecampaign-forms.context.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export class ActiveCampaignFormsContext extends UmbControllerBase {
2828
this.#configurationModel.setValue(data);
2929
}
3030

31-
async getForms(page?: number) {
32-
return await this.#repository.getForms(page);
31+
async getForms(page?: number, searchQuery?: string) {
32+
return await this.#repository.getForms(page, searchQuery);
3333
}
3434

3535
async getForm(id: string) {

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/src/modal/activecampaign-forms-modal.element.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ export default class ActiveCampaignFormsModalElement
2929
@state()
3030
_totalPages = 1;
3131

32+
@state()
33+
_searchQuery = "";
34+
3235
constructor() {
3336
super();
3437

@@ -58,10 +61,10 @@ export default class ActiveCampaignFormsModalElement
5861
await this.#loadForms();
5962
}
6063

61-
async #loadForms(page?: number) {
64+
async #loadForms(page?: number, searchQuery?: string) {
6265
this._loading = true;
6366

64-
const { data } = await this.#activecampaignFormsContext.getForms(page);
67+
const { data } = await this.#activecampaignFormsContext.getForms(page, searchQuery);
6568
if (!data) {
6669
this._loading = false;
6770
return;
@@ -75,21 +78,18 @@ export default class ActiveCampaignFormsModalElement
7578
this._loading = false;
7679
}
7780

78-
#handleFilterInput(event: UUIInputEvent) {
81+
async #handleFilterInput(event: UUIInputEvent) {
7982
let query = (event.target.value as string) || '';
8083
query = query.toLowerCase();
84+
this._searchQuery = query;
8185

82-
const result = !query
83-
? this._forms
84-
: this._forms.filter((form) => form.name.toLowerCase().includes(query));
85-
86-
this._filteredForms = result;
86+
await this.#loadForms(this._currentPageNumber, this._searchQuery);
8787
}
8888

8989
async #onPageChange(event: UUIPaginationEvent) {
9090
this._currentPageNumber = event.target?.current;
9191

92-
await this.#loadForms(this._currentPageNumber);
92+
await this.#loadForms(this._currentPageNumber, this._searchQuery);
9393
}
9494

9595
#renderPagination() {

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/src/property-editor/form-picker-property-editor.element.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export default class ActiveCampaignFormPickerElement extends UmbElementMixin(Lit
1515

1616
@property({ type: String })
1717
public value = "";
18-
1918

2019
@state()
2120
private _form: FormDtoModel = {

src/Umbraco.Cms.Integrations.Crm.ActiveCampaign/Client/src/repository/activecampaign-forms.repository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export class ActiveCampaignFormsRepository extends UmbControllerBase {
2828
return { data };
2929
}
3030

31-
async getForms(page?: number) {
32-
const { data, error } = await tryExecute(this, ActiveCampaignFormsService.getForms({ query: { page } }));
31+
async getForms(page?: number, searchQuery?: string) {
32+
const { data, error } = await tryExecute(this, ActiveCampaignFormsService.getForms({ query: { page, searchQuery } }));
3333

3434
if (error || !data) {
3535
return { error };

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
@@ -16,7 +16,7 @@
1616
<PackageIconUrl></PackageIconUrl>
1717
<PackageProjectUrl>https://github.com/umbraco/Umbraco.Cms.Integrations/tree/main-v16/src/Umbraco.Cms.Integrations.Crm.ActiveCampaign</PackageProjectUrl>
1818
<RepositoryUrl>https://github.com/umbraco/Umbraco.Cms.Integrations</RepositoryUrl>
19-
<Version>5.0.0</Version>
19+
<Version>5.1.0</Version>
2020
<Authors>Umbraco HQ</Authors>
2121
<Company>Umbraco</Company>
2222
<PackageTags>Umbraco;Umbraco-Marketplace</PackageTags>

0 commit comments

Comments
 (0)