From b0fba830c3466ea37b05f0db4a754042735efb81 Mon Sep 17 00:00:00 2001 From: Ihor Kriatov Date: Wed, 10 Jan 2024 17:50:11 +0200 Subject: [PATCH 01/10] CI: update workflow to invoke DEV deployment --- .github/workflows/ci.yaml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 79a5c44..385b667 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -3,13 +3,26 @@ name: Invoker on: pull_request: types: [closed] + push: + branches: + - develop jobs: trigger-workflow: runs-on: ubuntu-latest - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' steps: - - name: Invoke workflow + - name: Invoke Dev Workflow + if: github.event_name == 'push' && github.ref == 'refs/heads/develop' + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: ${{ vars.GH_BUILD_WORKFLOW }} + repo: ${{ vars.GH_BUILD_REPOSITORY }} + token: ${{ secrets.GH_PAT_TOKEN }} + ref: develop + inputs: '{"repository_url": "${{ github.repository }}","ref":"${{ github.ref }}", "sha":"${{ github.sha }}", "commit_url" : "${{ github.event.head_commit.url }}", "commit_message" : "${{ github.event.head_commit.message }}"}' + + - name: Invoke Prod Workflow + if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' uses: benc-uk/workflow-dispatch@v1 with: workflow: ${{ vars.GH_BUILD_WORKFLOW }} From 22289da52529ebe0d8398291ab802a1d40bcca3b Mon Sep 17 00:00:00 2001 From: Ihor Kriatov Date: Wed, 28 Feb 2024 12:33:08 +0100 Subject: [PATCH 02/10] CI: update pipeline to include dispatch event --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 385b667..cf54b6e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -6,6 +6,7 @@ on: push: branches: - develop + workflow_dispatch: jobs: trigger-workflow: From 5dccf6aeb7698ace497f51ff93d529c6669631f8 Mon Sep 17 00:00:00 2001 From: Ihor Kriatov Date: Wed, 28 Feb 2024 18:03:11 +0100 Subject: [PATCH 03/10] CI: invoke Dev workflow once manually triggered --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cf54b6e..57cc22d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Invoke Dev Workflow - if: github.event_name == 'push' && github.ref == 'refs/heads/develop' + if: github.event_name == 'push' && (github.ref == 'refs/heads/develop' || github.event.inputs.manual_trigger == 'true') uses: benc-uk/workflow-dispatch@v1 with: workflow: ${{ vars.GH_BUILD_WORKFLOW }} From bf9607ed1e539cc9870bcb426c85517273329a22 Mon Sep 17 00:00:00 2001 From: bZverok <137277669+bZverok@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:52:57 +0300 Subject: [PATCH 04/10] added categories --- ClickUp/Apps.ClickUp.csproj | 2 +- ClickUp/ClickUpApplication.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ClickUp/Apps.ClickUp.csproj b/ClickUp/Apps.ClickUp.csproj index 099d7aa..c3a19e0 100644 --- a/ClickUp/Apps.ClickUp.csproj +++ b/ClickUp/Apps.ClickUp.csproj @@ -9,7 +9,7 @@ Apps.ClickUp - + diff --git a/ClickUp/ClickUpApplication.cs b/ClickUp/ClickUpApplication.cs index a3973fd..e7e6c79 100644 --- a/ClickUp/ClickUpApplication.cs +++ b/ClickUp/ClickUpApplication.cs @@ -1,11 +1,18 @@ using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Metadata; namespace Apps.ClickUp; -public class ClickUpApplication : IApplication +public class ClickUpApplication : IApplication, ICategoryProvider { private string _name; + public IEnumerable Categories + { + get => [ApplicationCategory.ProjectManagementAndProductivity, ApplicationCategory.TaskManagement]; + set { } + } + public ClickUpApplication() { _name = "ClickUp"; From ed43091dd7ffca6a50547520bdd58301552066bc Mon Sep 17 00:00:00 2001 From: vitalii-bezuhlyi Date: Tue, 16 Apr 2024 16:48:56 +0300 Subject: [PATCH 05/10] Updated csproj --- ClickUp/Apps.ClickUp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClickUp/Apps.ClickUp.csproj b/ClickUp/Apps.ClickUp.csproj index c3a19e0..2ae0209 100644 --- a/ClickUp/Apps.ClickUp.csproj +++ b/ClickUp/Apps.ClickUp.csproj @@ -5,7 +5,7 @@ enable ClickUp Customizable workplace productivity platform - 1.0.5 + 1.0.6 Apps.ClickUp From 96a0208c38d7f120ae1423e5c631b8b1688587c9 Mon Sep 17 00:00:00 2001 From: bZverok <137277669+bZverok@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:52:29 +0300 Subject: [PATCH 06/10] More dynamic inputs added --- ClickUp/Actions/AttachmentActions.cs | 15 ++++--- ClickUp/Actions/TagActions.cs | 18 ++++----- ClickUp/Actions/TaskActions.cs | 3 +- .../CustomFieldDataHandler.cs | 39 +++++++++++++++++++ .../EnumHandlers/KeyResultTypeDataHandler.cs | 15 ------- .../EnumHandlers/TaskPriorityDataHandler.cs | 14 ------- .../Folder/FolderCustomFieldDataHandler.cs | 13 +++++++ .../Folder/FolderDataHandler.cs | 35 +++++++++++++++++ .../Folder/FolderListDataHandler.cs | 13 +++++++ .../Folder/FolderTaskDataHandler.cs | 13 +++++++ .../Folder/PrimaryFolderDataHandler.cs | 13 +++++++ ClickUp/DataSourceHandlers/GoalDataHandler.cs | 38 ++++++++++++++++++ .../List/ListCustomFieldDataHandler.cs | 13 +++++++ .../List/ListDataHandler.cs | 35 +++++++++++++++++ .../List/ListTaskDataHandler.cs | 13 +++++++ .../List/PrimaryListDataHandler.cs | 13 +++++++ .../Space/PrimarySpaceDataHandler.cs | 13 +++++++ .../Space/SpaceCustomFieldDataHandler.cs | 13 +++++++ .../Space/SpaceDataHandler.cs | 35 +++++++++++++++++ .../Space/SpaceFolderDataHandler.cs | 13 +++++++ .../Space/SpaceListDataHandler.cs | 13 +++++++ .../Space/SpaceTagDataHandler.cs | 13 +++++++ .../Space/SpaceTaskDataHandler.cs | 13 +++++++ .../Static/KeyResultTypeDataHandler.cs | 15 +++++++ .../Static/TaskPriorityDataHandler.cs | 14 +++++++ ClickUp/DataSourceHandlers/TagDataHandler.cs | 38 ++++++++++++++++++ .../Task/PrimaryTaskDataHandler.cs | 13 +++++++ .../Task/TaskCustomFieldDataHandler.cs | 13 +++++++ .../Task/TaskDataHandler.cs | 35 +++++++++++++++++ ClickUp/Invocables/ClickUpInvocable.cs | 20 ++++++++++ .../Attachment/CreateAttachmentRequest.cs | 3 -- ClickUp/Models/Request/CreateRequestQuery.cs | 9 +---- .../Request/CustomField/CustomFieldRequest.cs | 30 +++++++++++++- .../Models/Request/Folder/FolderRequest.cs | 15 ++++++- .../Request/Goal/CreateKeyResultRequest.cs | 6 +-- ClickUp/Models/Request/Goal/GoalRequest.cs | 11 +++++- .../Models/Request/Group/ListGroupsQuery.cs | 5 ++- .../Models/Request/List/CreateListRequest.cs | 6 +-- ClickUp/Models/Request/List/ListRequest.cs | 20 +++++++++- ClickUp/Models/Request/Space/SpaceRequest.cs | 12 +++++- ClickUp/Models/Request/Tag/TagRequest.cs | 14 ++++++- .../Models/Request/Task/CreateTaskRequest.cs | 9 ++--- ClickUp/Models/Request/Task/TaskRequest.cs | 25 +++++++++++- 43 files changed, 649 insertions(+), 80 deletions(-) create mode 100644 ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/EnumHandlers/KeyResultTypeDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/EnumHandlers/TaskPriorityDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/GoalDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/List/ListCustomFieldDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/List/ListDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/List/ListTaskDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/List/PrimaryListDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Static/KeyResultTypeDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Static/TaskPriorityDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/TagDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Task/PrimaryTaskDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Task/TaskCustomFieldDataHandler.cs create mode 100644 ClickUp/DataSourceHandlers/Task/TaskDataHandler.cs create mode 100644 ClickUp/Invocables/ClickUpInvocable.cs diff --git a/ClickUp/Actions/AttachmentActions.cs b/ClickUp/Actions/AttachmentActions.cs index 48b4926..9366861 100644 --- a/ClickUp/Actions/AttachmentActions.cs +++ b/ClickUp/Actions/AttachmentActions.cs @@ -4,11 +4,11 @@ using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request; using Apps.ClickUp.Models.Request.Attachment; +using Apps.ClickUp.Models.Request.Task; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces; -using Blackbird.Applications.Sdk.Utils.Extensions.Http; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; using Method = RestSharp.Method; @@ -28,15 +28,20 @@ public AttachmentActions(InvocationContext invocationContext, IFileManagementCli [Action("Create task attachment", Description = "Adds files as an attachment to a task")] public async Task CreateAttachment( + [ActionParameter] TaskRequest task, [ActionParameter] CreateAttachmentRequest input, [ActionParameter] CreateRequestQuery query) { var file = await _fileManagementClient.DownloadAsync(input.File); - - var endpoint = $"{ApiEndpoints.Tasks}/{input.TaskId}{ApiEndpoints.Attachments}"; - var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Post, Creds) + + var endpoint = $"{ApiEndpoints.Tasks}/{task.TaskId}{ApiEndpoints.Attachments}".WithQuery(query); + + if (query.CustomTaskIds is true) + endpoint = endpoint.SetQueryParameter("team_id", task.TeamId); + + var request = new ClickUpRequest(endpoint, Method.Post, Creds) .AddFile("attachment", () => file, input.FileName ?? input.File.Name); - + return await Client.ExecuteWithErrorHandling(request); } } \ No newline at end of file diff --git a/ClickUp/Actions/TagActions.cs b/ClickUp/Actions/TagActions.cs index 7cfa345..7d1cbf4 100644 --- a/ClickUp/Actions/TagActions.cs +++ b/ClickUp/Actions/TagActions.cs @@ -19,7 +19,7 @@ public class TagActions : ClickUpActions public TagActions(InvocationContext invocationContext) : base(invocationContext) { } - + [Action("Get tags", Description = "Get all space tags")] public Task GetTags([ActionParameter] SpaceRequest space) { @@ -28,30 +28,28 @@ public Task GetTags([ActionParameter] SpaceRequest space) return Client.ExecuteWithErrorHandling(request); } - + [Action("Create tag", Description = "Create a new space tag")] public async Task CreateTag( - [ActionParameter] SpaceRequest space, + [ActionParameter] SpaceRequest space, [ActionParameter] CreateTagInput input) { var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Tags}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(new CreateTagRequest(input), JsonConfig.Settings); - + await Client.ExecuteWithErrorHandling(request); var allTags = await GetTags(space); return allTags.Tags.First(x => x.Name == input.Name); } - + [Action("Delete tag", Description = "Delete specific space tag")] - public Task DeleteTag( - [ActionParameter] SpaceRequest space, - [ActionParameter] TagRequest tag) + public Task DeleteTag([ActionParameter] TagRequest tag) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Tags}/{tag.TagName}"; + var endpoint = $"{ApiEndpoints.Spaces}/{tag.SpaceId}{ApiEndpoints.Tags}/{tag.TagName}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); - + return Client.ExecuteWithErrorHandling(request); } } \ No newline at end of file diff --git a/ClickUp/Actions/TaskActions.cs b/ClickUp/Actions/TaskActions.cs index ef7a162..4c73c67 100644 --- a/ClickUp/Actions/TaskActions.cs +++ b/ClickUp/Actions/TaskActions.cs @@ -58,8 +58,7 @@ public Task CreateTask( } [Action("Delete task", Description = "Delete specific task")] - public Task DeleteTask( - [ActionParameter] TaskRequest task) + public Task DeleteTask([ActionParameter] TaskRequest task) { var endpoint = $"{ApiEndpoints.Tasks}/{task.TaskId}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); diff --git a/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs new file mode 100644 index 0000000..442228c --- /dev/null +++ b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs @@ -0,0 +1,39 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Request.CustomField; +using Apps.ClickUp.Models.Response.CusomField; +using Apps.ClickUp.Models.Response.Tag; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers; + +public class CustomFieldDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly CustomFieldRequest _request; + + public CustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : base( + invocationContext) + { + _request = request; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_request.TeamId)) + throw new("You should specify Team ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Tasks}/{_request.TaskId}/field", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Fields + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/EnumHandlers/KeyResultTypeDataHandler.cs b/ClickUp/DataSourceHandlers/EnumHandlers/KeyResultTypeDataHandler.cs deleted file mode 100644 index 035d5d1..0000000 --- a/ClickUp/DataSourceHandlers/EnumHandlers/KeyResultTypeDataHandler.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Blackbird.Applications.Sdk.Utils.Sdk.DataSourceHandlers; - -namespace Apps.ClickUp.DataSourceHandlers.EnumHandlers; - -public class KeyResultTypeDataHandler : EnumDataHandler -{ - protected override Dictionary EnumValues => new() - { - { "number", "Number" }, - { "currency", "Currency" }, - { "boolean", "Boolean" }, - { "percentage", "Percentage" }, - { "automatic", "Automatic" }, - }; -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/EnumHandlers/TaskPriorityDataHandler.cs b/ClickUp/DataSourceHandlers/EnumHandlers/TaskPriorityDataHandler.cs deleted file mode 100644 index 39e9f7f..0000000 --- a/ClickUp/DataSourceHandlers/EnumHandlers/TaskPriorityDataHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Blackbird.Applications.Sdk.Utils.Sdk.DataSourceHandlers; - -namespace Apps.ClickUp.DataSourceHandlers.EnumHandlers; - -public class TaskPriorityDataHandler : EnumDataHandler -{ - protected override Dictionary EnumValues => new() - { - { "1", "Urgent" }, - { "2", "High" }, - { "3", "Normal" }, - { "4", "Low" }, - }; -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs new file mode 100644 index 0000000..572615d --- /dev/null +++ b/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.CustomField; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Folder; + +public class FolderCustomFieldDataHandler : FolderDataHandler +{ + public FolderCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : + base(invocationContext, request.SpaceId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs new file mode 100644 index 0000000..a8256d3 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs @@ -0,0 +1,35 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Response.Folder; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers.Folder; + +public class FolderDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly string _spaceId; + + public FolderDataHandler(InvocationContext invocationContext, string spaceId) : base(invocationContext) + { + _spaceId = spaceId; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_spaceId)) + throw new("You should specify Space ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_spaceId}/folder", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Folders + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs new file mode 100644 index 0000000..894014e --- /dev/null +++ b/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.List; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Folder; + +public class FolderListDataHandler : FolderDataHandler +{ + public FolderListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : + base(invocationContext, request.SpaceId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs new file mode 100644 index 0000000..9f62583 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Task; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Folder; + +public class FolderTaskDataHandler : FolderDataHandler +{ + public FolderTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : + base(invocationContext, request.SpaceId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs new file mode 100644 index 0000000..a626342 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Folder; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Folder; + +public class PrimaryFolderDataHandler : FolderDataHandler +{ + public PrimaryFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : + base(invocationContext, request.SpaceId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/GoalDataHandler.cs b/ClickUp/DataSourceHandlers/GoalDataHandler.cs new file mode 100644 index 0000000..429ce08 --- /dev/null +++ b/ClickUp/DataSourceHandlers/GoalDataHandler.cs @@ -0,0 +1,38 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Request.Goal; +using Apps.ClickUp.Models.Response.Goal; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers; + +public class GoalDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly GoalRequest _request; + + public GoalDataHandler(InvocationContext invocationContext, [ActionParameter] GoalRequest request) : base( + invocationContext) + { + _request = request; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_request.TeamId)) + throw new("You should specify Team ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_request.TeamId}/goal", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Goals + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/List/ListCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/List/ListCustomFieldDataHandler.cs new file mode 100644 index 0000000..a83d8e5 --- /dev/null +++ b/ClickUp/DataSourceHandlers/List/ListCustomFieldDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.CustomField; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.List; + +public class ListCustomFieldDataHandler : ListDataHandler +{ + public ListCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) + : base(invocationContext, request.FolderId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/List/ListDataHandler.cs b/ClickUp/DataSourceHandlers/List/ListDataHandler.cs new file mode 100644 index 0000000..eed2e0b --- /dev/null +++ b/ClickUp/DataSourceHandlers/List/ListDataHandler.cs @@ -0,0 +1,35 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Response.List; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers.List; + +public class ListDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly string _folderId; + + public ListDataHandler(InvocationContext invocationContext, string folderId) : base(invocationContext) + { + _folderId = folderId; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_folderId)) + throw new("You should specify Folder ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Folders}/{_folderId}/list", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Lists + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/List/ListTaskDataHandler.cs b/ClickUp/DataSourceHandlers/List/ListTaskDataHandler.cs new file mode 100644 index 0000000..1cfcccc --- /dev/null +++ b/ClickUp/DataSourceHandlers/List/ListTaskDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Task; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.List; + +public class ListTaskDataHandler : ListDataHandler +{ + public ListTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : + base(invocationContext, request.FolderId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/List/PrimaryListDataHandler.cs b/ClickUp/DataSourceHandlers/List/PrimaryListDataHandler.cs new file mode 100644 index 0000000..5abd421 --- /dev/null +++ b/ClickUp/DataSourceHandlers/List/PrimaryListDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.List; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.List; + +public class PrimaryListDataHandler : ListDataHandler +{ + public PrimaryListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : base( + invocationContext, request.FolderId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs b/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs new file mode 100644 index 0000000..14b79b8 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Space; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class PrimarySpaceDataHandler : SpaceDataHandler +{ + public PrimarySpaceDataHandler(InvocationContext invocationContext, [ActionParameter] SpaceRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs new file mode 100644 index 0000000..f1811f5 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.CustomField; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceCustomFieldDataHandler : SpaceDataHandler +{ + public SpaceCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs new file mode 100644 index 0000000..f8d9125 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs @@ -0,0 +1,35 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Response.Space; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly string _teamId; + + public SpaceDataHandler(InvocationContext invocationContext, string teamId) : base(invocationContext) + { + _teamId = teamId; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_teamId)) + throw new("You should specify Team ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_teamId}/space", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Spaces + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs new file mode 100644 index 0000000..0e97a72 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Folder; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceFolderDataHandler : SpaceDataHandler +{ + public SpaceFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs new file mode 100644 index 0000000..9808f1f --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.List; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceListDataHandler : SpaceDataHandler +{ + public SpaceListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs new file mode 100644 index 0000000..1ae8bb1 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Tag; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceTagDataHandler : SpaceDataHandler +{ + public SpaceTagDataHandler(InvocationContext invocationContext, [ActionParameter] TagRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs new file mode 100644 index 0000000..c6d4ce8 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Task; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Space; + +public class SpaceTaskDataHandler : SpaceDataHandler +{ + public SpaceTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : + base(invocationContext, request.TeamId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Static/KeyResultTypeDataHandler.cs b/ClickUp/DataSourceHandlers/Static/KeyResultTypeDataHandler.cs new file mode 100644 index 0000000..c84415d --- /dev/null +++ b/ClickUp/DataSourceHandlers/Static/KeyResultTypeDataHandler.cs @@ -0,0 +1,15 @@ +using Blackbird.Applications.Sdk.Common.Dictionaries; + +namespace Apps.ClickUp.DataSourceHandlers.Static; + +public class KeyResultTypeDataHandler : IStaticDataSourceHandler +{ + public Dictionary GetData() => new() + { + { "number", "Number" }, + { "currency", "Currency" }, + { "boolean", "Boolean" }, + { "percentage", "Percentage" }, + { "automatic", "Automatic" }, + }; +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Static/TaskPriorityDataHandler.cs b/ClickUp/DataSourceHandlers/Static/TaskPriorityDataHandler.cs new file mode 100644 index 0000000..9423c66 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Static/TaskPriorityDataHandler.cs @@ -0,0 +1,14 @@ +using Blackbird.Applications.Sdk.Common.Dictionaries; + +namespace Apps.ClickUp.DataSourceHandlers.Static; + +public class TaskPriorityDataHandler : IStaticDataSourceHandler +{ + public Dictionary GetData() => new() + { + { "1", "Urgent" }, + { "2", "High" }, + { "3", "Normal" }, + { "4", "Low" }, + }; +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/TagDataHandler.cs b/ClickUp/DataSourceHandlers/TagDataHandler.cs new file mode 100644 index 0000000..63b44dd --- /dev/null +++ b/ClickUp/DataSourceHandlers/TagDataHandler.cs @@ -0,0 +1,38 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Request.Tag; +using Apps.ClickUp.Models.Response.Tag; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers; + +public class TagDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly TagRequest _request; + + public TagDataHandler(InvocationContext invocationContext, [ActionParameter] TagRequest request) : base( + invocationContext) + { + _request = request; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_request.TeamId)) + throw new("You should specify Team ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_request.SpaceId}/tag", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Tags + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Name, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Task/PrimaryTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Task/PrimaryTaskDataHandler.cs new file mode 100644 index 0000000..a4eec28 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Task/PrimaryTaskDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.Task; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Task; + +public class PrimaryTaskDataHandler : TaskDataHandler +{ + public PrimaryTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) + : base(invocationContext, request.ListId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Task/TaskCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Task/TaskCustomFieldDataHandler.cs new file mode 100644 index 0000000..fcd174d --- /dev/null +++ b/ClickUp/DataSourceHandlers/Task/TaskCustomFieldDataHandler.cs @@ -0,0 +1,13 @@ +using Apps.ClickUp.Models.Request.CustomField; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.DataSourceHandlers.Task; + +public class TaskCustomFieldDataHandler : TaskDataHandler +{ + public TaskCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) + : base(invocationContext, request.ListId) + { + } +} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Task/TaskDataHandler.cs b/ClickUp/DataSourceHandlers/Task/TaskDataHandler.cs new file mode 100644 index 0000000..c15d965 --- /dev/null +++ b/ClickUp/DataSourceHandlers/Task/TaskDataHandler.cs @@ -0,0 +1,35 @@ +using Apps.ClickUp.Api; +using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; +using Apps.ClickUp.Models.Response.Task; +using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Invocation; +using RestSharp; + +namespace Apps.ClickUp.DataSourceHandlers.Task; + +public class TaskDataHandler: ClickUpInvocable, IAsyncDataSourceHandler +{ + private readonly string _listId; + + public TaskDataHandler(InvocationContext invocationContext, string listId) : base(invocationContext) + { + _listId = listId; + } + + public async Task> GetDataAsync(DataSourceContext context, + CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(_listId)) + throw new("You should specify List ID first"); + + var request = new ClickUpRequest($"{ApiEndpoints.Lists}/{_listId}/task", Method.Get, Creds); + var teams = await Client.ExecuteWithErrorHandling(request); + + return teams.Tasks + .Where(x => context.SearchString is null || + x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) + .Take(20) + .ToDictionary(x => x.Id, x => x.Name); + } +} \ No newline at end of file diff --git a/ClickUp/Invocables/ClickUpInvocable.cs b/ClickUp/Invocables/ClickUpInvocable.cs new file mode 100644 index 0000000..48f6bf2 --- /dev/null +++ b/ClickUp/Invocables/ClickUpInvocable.cs @@ -0,0 +1,20 @@ +using Apps.ClickUp.Api; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Authentication; +using Blackbird.Applications.Sdk.Common.Invocation; + +namespace Apps.ClickUp.Invocables; + +public class ClickUpInvocable : BaseInvocable + +{ + protected IEnumerable Creds => + InvocationContext.AuthenticationCredentialsProviders; + + protected ClickUpClient Client { get; } + + public ClickUpInvocable(InvocationContext invocationContext) : base(invocationContext) + { + Client = new(); + } +} \ No newline at end of file diff --git a/ClickUp/Models/Request/Attachment/CreateAttachmentRequest.cs b/ClickUp/Models/Request/Attachment/CreateAttachmentRequest.cs index 6660d9b..ca8d607 100644 --- a/ClickUp/Models/Request/Attachment/CreateAttachmentRequest.cs +++ b/ClickUp/Models/Request/Attachment/CreateAttachmentRequest.cs @@ -5,9 +5,6 @@ namespace Apps.ClickUp.Models.Request.Attachment; public class CreateAttachmentRequest { - [Display("Task ID")] - public string TaskId { get; set; } - public FileReference File { get; set; } [Display("File name")] diff --git a/ClickUp/Models/Request/CreateRequestQuery.cs b/ClickUp/Models/Request/CreateRequestQuery.cs index 1323bf9..319e4cd 100644 --- a/ClickUp/Models/Request/CreateRequestQuery.cs +++ b/ClickUp/Models/Request/CreateRequestQuery.cs @@ -1,6 +1,4 @@ -using Apps.ClickUp.DataSourceHandlers; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common; using Newtonsoft.Json; namespace Apps.ClickUp.Models.Request; @@ -10,9 +8,4 @@ public class CreateRequestQuery [Display("Custom Task IDs")] [JsonProperty("custom_task_ids")] public bool? CustomTaskIds { get; set; } - - [Display("Team ID")] - [JsonProperty("team_id")] - [DataSource(typeof(TeamDataHandler))] - public string? TeamId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs index 1f711e6..bf51222 100644 --- a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs +++ b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs @@ -1,10 +1,36 @@ -using Apps.ClickUp.Models.Request.Task; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.List; +using Apps.ClickUp.DataSourceHandlers.Space; +using Apps.ClickUp.DataSourceHandlers.Task; using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.CustomField; -public class CustomFieldRequest : TaskRequest +public class CustomFieldRequest { + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(SpaceCustomFieldDataHandler))] + public string SpaceId { get; set; } + + [Display("Folder ID")] + [DataSource(typeof(FolderCustomFieldDataHandler))] + public string FolderId { get; set; } + + [Display("List ID")] + [DataSource(typeof(ListCustomFieldDataHandler))] + public string ListId { get; set; } + + [Display("Task ID")] + [DataSource(typeof(TaskCustomFieldDataHandler))] + public string TaskId { get; set; } + [Display("Field ID")] + [DataSource(typeof(CustomFieldDataHandler))] public string FieldId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Folder/FolderRequest.cs b/ClickUp/Models/Request/Folder/FolderRequest.cs index 91a35fd..18e5363 100644 --- a/ClickUp/Models/Request/Folder/FolderRequest.cs +++ b/ClickUp/Models/Request/Folder/FolderRequest.cs @@ -1,9 +1,22 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.Space; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.Folder; public class FolderRequest { + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(SpaceFolderDataHandler))] + public string SpaceId { get; set; } + [Display("Folder ID")] + [DataSource(typeof(PrimaryFolderDataHandler))] public string FolderId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Goal/CreateKeyResultRequest.cs b/ClickUp/Models/Request/Goal/CreateKeyResultRequest.cs index 264ab37..dac7396 100644 --- a/ClickUp/Models/Request/Goal/CreateKeyResultRequest.cs +++ b/ClickUp/Models/Request/Goal/CreateKeyResultRequest.cs @@ -1,6 +1,6 @@ -using Apps.ClickUp.DataSourceHandlers.EnumHandlers; +using Apps.ClickUp.DataSourceHandlers.Static; using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Dictionaries; namespace Apps.ClickUp.Models.Request.Goal; @@ -9,7 +9,7 @@ public class CreateKeyResultRequest public string Name { get; set; } public IEnumerable? Owners { get; set; } - [DataSource(typeof(KeyResultTypeDataHandler))] + [StaticDataSource(typeof(KeyResultTypeDataHandler))] public string Type { get; set; } [Display("Steps start")] diff --git a/ClickUp/Models/Request/Goal/GoalRequest.cs b/ClickUp/Models/Request/Goal/GoalRequest.cs index e7b6538..f93cdaa 100644 --- a/ClickUp/Models/Request/Goal/GoalRequest.cs +++ b/ClickUp/Models/Request/Goal/GoalRequest.cs @@ -1,9 +1,16 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.Goal; public class GoalRequest { - [Display("Goal ID")] + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Goal ID")] + [DataSource(typeof(GoalDataHandler))] public string GoalId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Group/ListGroupsQuery.cs b/ClickUp/Models/Request/Group/ListGroupsQuery.cs index ddd6297..4f468e1 100644 --- a/ClickUp/Models/Request/Group/ListGroupsQuery.cs +++ b/ClickUp/Models/Request/Group/ListGroupsQuery.cs @@ -1,4 +1,6 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; using Newtonsoft.Json; namespace Apps.ClickUp.Models.Request.Group; @@ -7,6 +9,7 @@ public class ListGroupsQuery { [JsonProperty("team_id")] [Display("Team ID")] + [DataSource(typeof(TeamDataHandler))] public string? TeamId { get; set; } [JsonProperty("group_ids")] diff --git a/ClickUp/Models/Request/List/CreateListRequest.cs b/ClickUp/Models/Request/List/CreateListRequest.cs index cbd4e98..07fce72 100644 --- a/ClickUp/Models/Request/List/CreateListRequest.cs +++ b/ClickUp/Models/Request/List/CreateListRequest.cs @@ -1,7 +1,7 @@ -using Apps.ClickUp.DataSourceHandlers.EnumHandlers; +using Apps.ClickUp.DataSourceHandlers.Static; using Apps.ClickUp.Utils.Converters; using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Dictionaries; using Newtonsoft.Json; namespace Apps.ClickUp.Models.Request.List; @@ -19,7 +19,7 @@ public class CreateListRequest [Display("Due date time")] public bool? DueDateTime { get; set; } - [DataSource(typeof(TaskPriorityDataHandler))] + [StaticDataSource(typeof(TaskPriorityDataHandler))] public string? Priority { get; set; } [Display("Assignee ID")] diff --git a/ClickUp/Models/Request/List/ListRequest.cs b/ClickUp/Models/Request/List/ListRequest.cs index 8fafa2e..ec98698 100644 --- a/ClickUp/Models/Request/List/ListRequest.cs +++ b/ClickUp/Models/Request/List/ListRequest.cs @@ -1,9 +1,27 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.List; +using Apps.ClickUp.DataSourceHandlers.Space; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.List; public class ListRequest { + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(SpaceListDataHandler))] + public string SpaceId { get; set; } + + [Display("Folder ID")] + [DataSource(typeof(FolderListDataHandler))] + public string FolderId { get; set; } + [Display("List ID")] + [DataSource(typeof(PrimaryListDataHandler))] public string ListId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Space/SpaceRequest.cs b/ClickUp/Models/Request/Space/SpaceRequest.cs index c11116c..53fa685 100644 --- a/ClickUp/Models/Request/Space/SpaceRequest.cs +++ b/ClickUp/Models/Request/Space/SpaceRequest.cs @@ -1,9 +1,17 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Space; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.Space; public class SpaceRequest { - [Display("Space ID")] + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(PrimarySpaceDataHandler))] public string SpaceId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Tag/TagRequest.cs b/ClickUp/Models/Request/Tag/TagRequest.cs index 50ba60e..fe71470 100644 --- a/ClickUp/Models/Request/Tag/TagRequest.cs +++ b/ClickUp/Models/Request/Tag/TagRequest.cs @@ -1,9 +1,21 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Space; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.Tag; public class TagRequest { + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(SpaceTagDataHandler))] + public string SpaceId { get; set; } + [Display("Tag name")] + [DataSource(typeof(TagDataHandler))] public string TagName { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Task/CreateTaskRequest.cs b/ClickUp/Models/Request/Task/CreateTaskRequest.cs index ebfebe8..f792843 100644 --- a/ClickUp/Models/Request/Task/CreateTaskRequest.cs +++ b/ClickUp/Models/Request/Task/CreateTaskRequest.cs @@ -1,8 +1,8 @@ -using Apps.ClickUp.DataSourceHandlers.EnumHandlers; +using Apps.ClickUp.DataSourceHandlers.Static; using Apps.ClickUp.Models.Entities.Simple; using Apps.ClickUp.Utils.Converters; using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Dynamic; +using Blackbird.Applications.Sdk.Common.Dictionaries; using Newtonsoft.Json; namespace Apps.ClickUp.Models.Request.Task; @@ -18,7 +18,7 @@ public class CreateTaskRequest public string? Status { get; set; } - [DataSource(typeof(TaskPriorityDataHandler))] + [StaticDataSource(typeof(TaskPriorityDataHandler))] public string? Priority { get; set; } [Display("Due date")] @@ -48,7 +48,4 @@ public class CreateTaskRequest [Display("Check required custom fields")] public bool? CheckRequiredCustomFields { get; set; } - - [Display("Custom fields")] - public IEnumerable? CustomFields { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Task/TaskRequest.cs b/ClickUp/Models/Request/Task/TaskRequest.cs index 85ea570..a9368a5 100644 --- a/ClickUp/Models/Request/Task/TaskRequest.cs +++ b/ClickUp/Models/Request/Task/TaskRequest.cs @@ -1,9 +1,32 @@ -using Blackbird.Applications.Sdk.Common; +using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.List; +using Apps.ClickUp.DataSourceHandlers.Space; +using Apps.ClickUp.DataSourceHandlers.Task; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Dynamic; namespace Apps.ClickUp.Models.Request.Task; public class TaskRequest { + [Display("Team")] + [DataSource(typeof(TeamDataHandler))] + public string TeamId { get; set; } + + [Display("Space ID")] + [DataSource(typeof(SpaceTaskDataHandler))] + public string SpaceId { get; set; } + + [Display("Folder ID")] + [DataSource(typeof(FolderTaskDataHandler))] + public string FolderId { get; set; } + + [Display("List ID")] + [DataSource(typeof(ListTaskDataHandler))] + public string ListId { get; set; } + [Display("Task ID")] + [DataSource(typeof(PrimaryTaskDataHandler))] public string TaskId { get; set; } } \ No newline at end of file From 26e288d06b78e3e3d0e901e2634d68a0205afc7a Mon Sep 17 00:00:00 2001 From: bZverok <137277669+bZverok@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:06:57 +0300 Subject: [PATCH 07/10] error naming fixed --- ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs | 4 ++-- ClickUp/DataSourceHandlers/TagDataHandler.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs index 442228c..4bf6d03 100644 --- a/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs +++ b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs @@ -24,8 +24,8 @@ public CustomFieldDataHandler(InvocationContext invocationContext, [ActionParame public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_request.TeamId)) - throw new("You should specify Team ID first"); + if (string.IsNullOrEmpty(_request.TaskId)) + throw new("You should specify Task ID first"); var request = new ClickUpRequest($"{ApiEndpoints.Tasks}/{_request.TaskId}/field", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); diff --git a/ClickUp/DataSourceHandlers/TagDataHandler.cs b/ClickUp/DataSourceHandlers/TagDataHandler.cs index 63b44dd..428b837 100644 --- a/ClickUp/DataSourceHandlers/TagDataHandler.cs +++ b/ClickUp/DataSourceHandlers/TagDataHandler.cs @@ -23,8 +23,8 @@ public TagDataHandler(InvocationContext invocationContext, [ActionParameter] Tag public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_request.TeamId)) - throw new("You should specify Team ID first"); + if (string.IsNullOrEmpty(_request.SpaceId)) + throw new("You should specify Space ID first"); var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_request.SpaceId}/tag", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); From a38808babaad395a7faf5cd53a1645bb10f99b43 Mon Sep 17 00:00:00 2001 From: bZverok <137277669+bZverok@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:22:28 +0300 Subject: [PATCH 08/10] error handling of spaces added --- ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs index f8d9125..2acd598 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs @@ -27,6 +27,7 @@ public async Task> GetDataAsync(DataSourceContext con var teams = await Client.ExecuteWithErrorHandling(request); return teams.Spaces + .Where(x => x.Name != null) .Where(x => context.SearchString is null || x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) .Take(20) From 63524e0e01aa91b538c7e6805b54f4a742234d58 Mon Sep 17 00:00:00 2001 From: bZverok <137277669+bZverok@users.noreply.github.com> Date: Wed, 24 Apr 2024 18:25:57 +0300 Subject: [PATCH 09/10] Fixed custom field dynamic inputs --- ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs | 7 +++---- ClickUp/Models/Request/Task/CreateTaskRequest.cs | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs index 4bf6d03..b242c1b 100644 --- a/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs +++ b/ClickUp/DataSourceHandlers/CustomFieldDataHandler.cs @@ -3,7 +3,6 @@ using Apps.ClickUp.Invocables; using Apps.ClickUp.Models.Request.CustomField; using Apps.ClickUp.Models.Response.CusomField; -using Apps.ClickUp.Models.Response.Tag; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; @@ -24,10 +23,10 @@ public CustomFieldDataHandler(InvocationContext invocationContext, [ActionParame public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_request.TaskId)) - throw new("You should specify Task ID first"); + if (string.IsNullOrEmpty(_request.ListId)) + throw new("You should specify List ID first"); - var request = new ClickUpRequest($"{ApiEndpoints.Tasks}/{_request.TaskId}/field", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Lists}/{_request.ListId}/field", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Fields diff --git a/ClickUp/Models/Request/Task/CreateTaskRequest.cs b/ClickUp/Models/Request/Task/CreateTaskRequest.cs index f792843..63aa57f 100644 --- a/ClickUp/Models/Request/Task/CreateTaskRequest.cs +++ b/ClickUp/Models/Request/Task/CreateTaskRequest.cs @@ -1,5 +1,4 @@ using Apps.ClickUp.DataSourceHandlers.Static; -using Apps.ClickUp.Models.Entities.Simple; using Apps.ClickUp.Utils.Converters; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dictionaries; From c26536fa158f9b312d51e4239c29b70f5633285c Mon Sep 17 00:00:00 2001 From: RiabushenkoA Date: Thu, 9 Oct 2025 20:38:46 +0300 Subject: [PATCH 10/10] Maintenance release: Blackbird SDK dependency updates (no action required) --- ClickUp/Actions/AttachmentActions.cs | 2 +- ClickUp/Actions/CustomFieldActions.cs | 2 +- ClickUp/Actions/FolderActions.cs | 2 +- ClickUp/Actions/GoalActions.cs | 2 +- ClickUp/Actions/ListActions.cs | 2 +- ClickUp/Actions/SpaceActions.cs | 2 +- ClickUp/Actions/TagActions.cs | 2 +- ClickUp/Actions/TaskActions.cs | 2 +- ClickUp/Actions/TeamActions.cs | 2 +- ClickUp/Actions/UserGroupActions.cs | 2 +- ClickUp/Apps.ClickUp.csproj | 4 ++-- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ClickUp/Actions/AttachmentActions.cs b/ClickUp/Actions/AttachmentActions.cs index 48b4926..8e7327b 100644 --- a/ClickUp/Actions/AttachmentActions.cs +++ b/ClickUp/Actions/AttachmentActions.cs @@ -15,7 +15,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Attachment")] public class AttachmentActions : ClickUpActions { private readonly IFileManagementClient _fileManagementClient; diff --git a/ClickUp/Actions/CustomFieldActions.cs b/ClickUp/Actions/CustomFieldActions.cs index 24058c9..055a868 100644 --- a/ClickUp/Actions/CustomFieldActions.cs +++ b/ClickUp/Actions/CustomFieldActions.cs @@ -14,7 +14,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Custom field")] public class CustomFieldActions : ClickUpActions { public CustomFieldActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/FolderActions.cs b/ClickUp/Actions/FolderActions.cs index b405559..4881e0c 100644 --- a/ClickUp/Actions/FolderActions.cs +++ b/ClickUp/Actions/FolderActions.cs @@ -15,7 +15,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Folder")] public class FolderActions : ClickUpActions { public FolderActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/GoalActions.cs b/ClickUp/Actions/GoalActions.cs index 2d925c3..ada7273 100644 --- a/ClickUp/Actions/GoalActions.cs +++ b/ClickUp/Actions/GoalActions.cs @@ -14,7 +14,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Goal")] public class GoalActions : ClickUpActions { public GoalActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/ListActions.cs b/ClickUp/Actions/ListActions.cs index 17c3697..46e78ed 100644 --- a/ClickUp/Actions/ListActions.cs +++ b/ClickUp/Actions/ListActions.cs @@ -16,7 +16,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("List")] public class ListActions : ClickUpActions { public ListActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/SpaceActions.cs b/ClickUp/Actions/SpaceActions.cs index 79aeec1..0a15477 100644 --- a/ClickUp/Actions/SpaceActions.cs +++ b/ClickUp/Actions/SpaceActions.cs @@ -15,7 +15,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Space")] public class SpaceActions : ClickUpActions { public SpaceActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/TagActions.cs b/ClickUp/Actions/TagActions.cs index 7cfa345..b736541 100644 --- a/ClickUp/Actions/TagActions.cs +++ b/ClickUp/Actions/TagActions.cs @@ -13,7 +13,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Tag")] public class TagActions : ClickUpActions { public TagActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/TaskActions.cs b/ClickUp/Actions/TaskActions.cs index ef7a162..17ed7f9 100644 --- a/ClickUp/Actions/TaskActions.cs +++ b/ClickUp/Actions/TaskActions.cs @@ -19,7 +19,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Task")] public class TaskActions : ClickUpActions { public TaskActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/TeamActions.cs b/ClickUp/Actions/TeamActions.cs index d54192e..2326001 100644 --- a/ClickUp/Actions/TeamActions.cs +++ b/ClickUp/Actions/TeamActions.cs @@ -8,7 +8,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("Team")] public class TeamActions : ClickUpActions { public TeamActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Actions/UserGroupActions.cs b/ClickUp/Actions/UserGroupActions.cs index 3b465aa..b11ff85 100644 --- a/ClickUp/Actions/UserGroupActions.cs +++ b/ClickUp/Actions/UserGroupActions.cs @@ -14,7 +14,7 @@ namespace Apps.ClickUp.Actions; -[ActionList] +[ActionList("User group")] public class UserGroupActions : ClickUpActions { public UserGroupActions(InvocationContext invocationContext) : base(invocationContext) diff --git a/ClickUp/Apps.ClickUp.csproj b/ClickUp/Apps.ClickUp.csproj index 2ae0209..5649715 100644 --- a/ClickUp/Apps.ClickUp.csproj +++ b/ClickUp/Apps.ClickUp.csproj @@ -5,11 +5,11 @@ enable ClickUp Customizable workplace productivity platform - 1.0.6 + 1.0.7 Apps.ClickUp - +