@worktables/n8n-nodes-worktables 12.2.27 → 12.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,8 @@ export declare class Worktables implements INodeType {
20
20
  getSubscribersFromBoard(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
21
21
  getSubitems(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
22
22
  getColumnsItems(this: ILoadOptionsFunctions): Promise<any>;
23
+ getColumnsItemsForIdentifier(this: ILoadOptionsFunctions): Promise<any>;
24
+ getColumnsItemsForCreateOrUpdate(this: ILoadOptionsFunctions): Promise<any>;
23
25
  getFolders(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
24
26
  getUsers(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
25
27
  getTeams(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
@@ -1014,7 +1014,7 @@ class Worktables {
1014
1014
  type: 'options',
1015
1015
  typeOptions: {
1016
1016
  loadOptionsDependsOn: ['boardId'],
1017
- loadOptionsMethod: 'getColumnsItems',
1017
+ loadOptionsMethod: 'getColumnsItemsForIdentifier',
1018
1018
  },
1019
1019
  default: '',
1020
1020
  description: 'Select the column to use as identifier for finding/updating items. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code-examples/expressions/">expression</a>.',
@@ -1257,8 +1257,8 @@ class Worktables {
1257
1257
  name: 'columnId',
1258
1258
  type: 'options',
1259
1259
  typeOptions: {
1260
- loadOptionsDependsOn: ['boardId'],
1261
- loadOptionsMethod: 'getColumnsItems',
1260
+ loadOptionsDependsOn: ['boardId', 'isSubitem'],
1261
+ loadOptionsMethod: 'getColumnsItemsForCreateOrUpdate',
1262
1262
  },
1263
1263
  default: '',
1264
1264
  },
@@ -2607,6 +2607,218 @@ class Worktables {
2607
2607
  };
2608
2608
  });
2609
2609
  },
2610
+ async getColumnsItemsForIdentifier() {
2611
+ const boardId = this.getCurrentNodeParameter('boardId');
2612
+ const credentials = await this.getCredentials('WorktablesApi');
2613
+ const apiKey = credentials === null || credentials === void 0 ? void 0 : credentials.apiKey;
2614
+ const response = await this.helpers.request({
2615
+ method: 'POST',
2616
+ url: 'https://api.monday.com/v2',
2617
+ headers: {
2618
+ Authorization: `Bearer ${apiKey}`,
2619
+ 'Content-Type': 'application/json',
2620
+ },
2621
+ body: JSON.stringify({
2622
+ query: `query {
2623
+ boards(ids: ${boardId}) {
2624
+ columns {
2625
+ id
2626
+ title
2627
+ type
2628
+ }
2629
+ items_page {
2630
+ items {
2631
+ subitems {
2632
+ board {
2633
+ columns {
2634
+ id
2635
+ title
2636
+ type
2637
+ }
2638
+ }
2639
+ }
2640
+ }
2641
+ }
2642
+ }
2643
+ }`,
2644
+ }),
2645
+ });
2646
+ const parsedResponse = JSON.parse(response);
2647
+ return parsedResponse.data.boards[0].columns
2648
+ .filter((column) => column.type !== 'subitem' &&
2649
+ column.type !== 'auto_number' &&
2650
+ column.type !== 'creation_log' &&
2651
+ column.type !== 'formula' &&
2652
+ column.type !== 'item_id' &&
2653
+ column.type !== 'last_updated' &&
2654
+ column.type !== 'progress' &&
2655
+ column.type !== 'mirror' &&
2656
+ column.type !== 'subtasks' &&
2657
+ column.type !== 'file' &&
2658
+ column.type !== 'button')
2659
+ .map((column) => {
2660
+ return {
2661
+ name: column.title,
2662
+ value: column.id,
2663
+ };
2664
+ });
2665
+ },
2666
+ async getColumnsItemsForCreateOrUpdate() {
2667
+ var _a, _b, _c, _d, _e;
2668
+ const boardId = this.getCurrentNodeParameter('boardId');
2669
+ const isSubitem = this.getCurrentNodeParameter('isSubitem') || false;
2670
+ const credentials = await this.getCredentials('WorktablesApi');
2671
+ const apiKey = credentials === null || credentials === void 0 ? void 0 : credentials.apiKey;
2672
+ if (isSubitem) {
2673
+ let parentId = null;
2674
+ try {
2675
+ parentId = this.getCurrentNodeParameter('parentId');
2676
+ }
2677
+ catch (e) {
2678
+ }
2679
+ let subitemBoardColumns = [];
2680
+ if (parentId) {
2681
+ const response = await this.helpers.request({
2682
+ method: 'POST',
2683
+ url: 'https://api.monday.com/v2',
2684
+ headers: {
2685
+ Authorization: `Bearer ${apiKey}`,
2686
+ 'Content-Type': 'application/json',
2687
+ 'API-Version': '2025-01',
2688
+ },
2689
+ body: JSON.stringify({
2690
+ query: `query {
2691
+ items(ids: [${parentId}]) {
2692
+ subitems {
2693
+ board {
2694
+ id
2695
+ columns {
2696
+ id
2697
+ title
2698
+ type
2699
+ }
2700
+ }
2701
+ }
2702
+ }
2703
+ }`,
2704
+ }),
2705
+ });
2706
+ const parsedResponse = JSON.parse(response);
2707
+ const items = ((_a = parsedResponse === null || parsedResponse === void 0 ? void 0 : parsedResponse.data) === null || _a === void 0 ? void 0 : _a.items) || [];
2708
+ if (items.length > 0 && items[0].subitems && items[0].subitems.length > 0) {
2709
+ const subitem = items[0].subitems[0];
2710
+ if (subitem.board && subitem.board.columns) {
2711
+ subitemBoardColumns = subitem.board.columns;
2712
+ }
2713
+ }
2714
+ }
2715
+ if (subitemBoardColumns.length === 0) {
2716
+ const response = await this.helpers.request({
2717
+ method: 'POST',
2718
+ url: 'https://api.monday.com/v2',
2719
+ headers: {
2720
+ Authorization: `Bearer ${apiKey}`,
2721
+ 'Content-Type': 'application/json',
2722
+ 'API-Version': '2025-01',
2723
+ },
2724
+ body: JSON.stringify({
2725
+ query: `query {
2726
+ boards(ids: ${boardId}) {
2727
+ items_page(limit: 25) {
2728
+ items {
2729
+ subitems {
2730
+ board {
2731
+ id
2732
+ columns {
2733
+ id
2734
+ title
2735
+ type
2736
+ }
2737
+ }
2738
+ }
2739
+ }
2740
+ }
2741
+ }
2742
+ }`,
2743
+ }),
2744
+ });
2745
+ const parsedResponse = JSON.parse(response);
2746
+ const items = ((_e = (_d = (_c = (_b = parsedResponse === null || parsedResponse === void 0 ? void 0 : parsedResponse.data) === null || _b === void 0 ? void 0 : _b.boards) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.items_page) === null || _e === void 0 ? void 0 : _e.items) || [];
2747
+ for (const item of items) {
2748
+ if (item.subitems && item.subitems.length > 0) {
2749
+ const subitem = item.subitems[0];
2750
+ if (subitem.board && subitem.board.columns) {
2751
+ subitemBoardColumns = subitem.board.columns;
2752
+ break;
2753
+ }
2754
+ }
2755
+ }
2756
+ }
2757
+ if (subitemBoardColumns.length === 0) {
2758
+ console.log('No subitems found in board, cannot load subitem columns');
2759
+ return [];
2760
+ }
2761
+ return subitemBoardColumns
2762
+ .filter((column) => column.type !== 'subitem' &&
2763
+ column.type !== 'auto_number' &&
2764
+ column.type !== 'creation_log' &&
2765
+ column.type !== 'formula' &&
2766
+ column.type !== 'item_id' &&
2767
+ column.type !== 'last_updated' &&
2768
+ column.type !== 'progress' &&
2769
+ column.type !== 'mirror' &&
2770
+ column.type !== 'subtasks' &&
2771
+ column.type !== 'file' &&
2772
+ column.type !== 'button')
2773
+ .map((column) => {
2774
+ return {
2775
+ name: column.title,
2776
+ value: column.id,
2777
+ };
2778
+ });
2779
+ }
2780
+ else {
2781
+ const response = await this.helpers.request({
2782
+ method: 'POST',
2783
+ url: 'https://api.monday.com/v2',
2784
+ headers: {
2785
+ Authorization: `Bearer ${apiKey}`,
2786
+ 'Content-Type': 'application/json',
2787
+ 'API-Version': '2025-01',
2788
+ },
2789
+ body: JSON.stringify({
2790
+ query: `query {
2791
+ boards(ids: ${boardId}) {
2792
+ columns {
2793
+ id
2794
+ title
2795
+ type
2796
+ }
2797
+ }
2798
+ }`,
2799
+ }),
2800
+ });
2801
+ const parsedResponse = JSON.parse(response);
2802
+ return parsedResponse.data.boards[0].columns
2803
+ .filter((column) => column.type !== 'subitem' &&
2804
+ column.type !== 'auto_number' &&
2805
+ column.type !== 'creation_log' &&
2806
+ column.type !== 'formula' &&
2807
+ column.type !== 'item_id' &&
2808
+ column.type !== 'last_updated' &&
2809
+ column.type !== 'progress' &&
2810
+ column.type !== 'mirror' &&
2811
+ column.type !== 'subtasks' &&
2812
+ column.type !== 'file' &&
2813
+ column.type !== 'button')
2814
+ .map((column) => {
2815
+ return {
2816
+ name: column.title,
2817
+ value: column.id,
2818
+ };
2819
+ });
2820
+ }
2821
+ },
2610
2822
  async getFolders() {
2611
2823
  const workspaceId = this.getNodeParameter('workspace');
2612
2824
  const credentials = await this.getCredentials('WorktablesApi');
@@ -4546,6 +4758,11 @@ class Worktables {
4546
4758
  if (!itemUpdated) {
4547
4759
  console.log(`Creating new ${isSubitem ? 'subitem' : 'item'}:`, itemName);
4548
4760
  const parentId = this.getNodeParameter('parentId', 0, false);
4761
+ if (isSubitem && !parentId) {
4762
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), {
4763
+ message: 'Parent Item is required when creating a subitem. Please select a parent item.',
4764
+ });
4765
+ }
4549
4766
  const escapedItemName = (0, worktablesHelpers_1.escapeGraphQLString)(itemName);
4550
4767
  const escapedColumnValues = (0, worktablesHelpers_1.escapeGraphQLJSONString)(column_values_object);
4551
4768
  if (isSubitem && parentId) {