Skip to content

Commit

Permalink
added assignee dynamic inputs (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
bZverok authored Sep 13, 2024
1 parent 6e18662 commit d55d1ca
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 9 deletions.
6 changes: 3 additions & 3 deletions Apps.Crowdin/Actions/TaskActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
using Blackbird.Applications.Sdk.Utils.Utilities;
using Crowdin.Api.Tasks;
using TaskStatus = Crowdin.Api.Tasks.TaskStatus;
using System.IO;
using Apps.Crowdin.Models.Request;

namespace Apps.Crowdin.Actions;

Expand Down Expand Up @@ -63,7 +63,7 @@ [ActionParameter] [Display("Task ID")] string taskId)

[Action("Add task", Description = "Add new task")]
public async Task<TaskEntity> AddTask(
[ActionParameter] ProjectRequest project,
[ActionParameter] AssigneesRequest project,
[ActionParameter] AddNewTaskRequest input)
{
var vendorTaskTypes = new[] { "TranslateByVendor", "ProofreadByVendor" };
Expand All @@ -88,7 +88,7 @@ public async Task<TaskEntity> AddTask(
SkipAssignedStrings = input.SkipAssignedStrings,
SkipUntranslatedStrings = input.SkipUntranslatedStrings,
LabelIds = input.LabelIds?.Select(labelId => IntParser.Parse(labelId, nameof(labelId))!.Value).ToList(),
Assignees = input.Assignees?.Select(assigneeId => new TaskAssigneeForm { Id = IntParser.Parse(assigneeId, nameof(assigneeId))!.Value }).ToList(),
Assignees = project.Assignees?.Select(assigneeId => new TaskAssigneeForm { Id = IntParser.Parse(assigneeId, nameof(assigneeId))!.Value }).ToList(),
DeadLine = input.Deadline,
DateFrom = input.DateFrom,
DateTo = input.DateTo,
Expand Down
2 changes: 1 addition & 1 deletion Apps.Crowdin/Apps.Crowdin.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<Nullable>enable</Nullable>
<Product>Crowdin</Product>
<Description>Cloud-based solution that streamlines localization management</Description>
<Version>1.0.8</Version>
<Version>1.0.9</Version>
<AssemblyName>Apps.Crowdin</AssemblyName>
</PropertyGroup>
<ItemGroup>
Expand Down
51 changes: 51 additions & 0 deletions Apps.Crowdin/DataSourceHandlers/ProjectMemberDataSourceHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using Apps.Crowdin.Api.RestSharp;
using Apps.Crowdin.Models.Entities;
using Apps.Crowdin.Models.Request;
using Apps.Crowdin.Models.Response;
using Apps.Crowdin.Utils;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Authentication;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using Crowdin.Api;
using Newtonsoft.Json;
using RestSharp;

namespace Apps.Crowdin.DataSourceHandlers;

public class ProjectMemberDataSourceHandler(
InvocationContext invocationContext,
[ActionParameter] AssigneesRequest assigneesRequest)
: BaseInvocable(invocationContext), IAsyncDataSourceHandler
{
private AuthenticationCredentialsProvider[] Creds =>
InvocationContext.AuthenticationCredentialsProviders.ToArray();

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context,
CancellationToken cancellationToken)
{
if (string.IsNullOrEmpty(assigneesRequest.ProjectId))
throw new("You should input Project ID first");

var client = new CrowdinRestClient();

var items = await Paginator.Paginate(async (lim, offset)
=>
{
var request =
new CrowdinRestRequest(
$"/projects/{assigneesRequest.ProjectId}/members?limit={lim}&offset={offset}",
Method.Get, Creds);
var response = await client.ExecuteAsync(request, cancellationToken: cancellationToken);
return JsonConvert.DeserializeObject<ResponseList<DataResponse<AssigneeEntity>>>(response.Content);
});

return items
.Select(x => x.Data)
.Where(x => context.SearchString == null ||
x.FullName.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.OrderByDescending(x => x.GivenAccessAt)
.Take(20)
.ToDictionary(x => x.Id.ToString(), x => x.FullName);
}
}
11 changes: 11 additions & 0 deletions Apps.Crowdin/Models/Entities/AssigneeEntity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace Apps.Crowdin.Models.Entities;

public class AssigneeEntity
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public DateTime? GivenAccessAt { get; set; }
public string FullName => string.IsNullOrWhiteSpace(FirstName) ? Username : $"{FirstName} {LastName}";
}
15 changes: 15 additions & 0 deletions Apps.Crowdin/Models/Request/AssigneesRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Apps.Crowdin.DataSourceHandlers;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Dynamic;

namespace Apps.Crowdin.Models.Request;

public class AssigneesRequest
{
[Display("Project")]
[DataSource(typeof(ProjectDataHandler))]
public string ProjectId { get; set; }

[Display("Assignee IDs"), DataSource(typeof(ProjectMemberDataSourceHandler))]
public IEnumerable<string>? Assignees { get; set; }
}
3 changes: 0 additions & 3 deletions Apps.Crowdin/Models/Request/Task/AddNewTaskRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@ public class AddNewTaskRequest
[Display("Label IDs")]
public IEnumerable<string>? LabelIds { get; set; }

[Display("Assignee IDs")]
public IEnumerable<string>? Assignees { get; set; }

public DateTime? Deadline { get; set; }

[Display("Date from")]
Expand Down
4 changes: 2 additions & 2 deletions Apps.Crowdin/Utils/Paginator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public static async Task<List<T>> Paginate<T>(Func<int, int, Task<ResponseList<T
response = await request(Limit, offset);
offset += Limit;

items.AddRange(response.Data);
} while (response.Data.Any());
items.AddRange(response.Data ?? []);
} while (response.Data?.Any() is true);

return items;
}
Expand Down

0 comments on commit d55d1ca

Please sign in to comment.