Skip to content

Commit 7977501

Browse files
authored
Merging pull request #18327
1 parent 43c37a6 commit 7977501

File tree

5 files changed

+75
-9
lines changed

5 files changed

+75
-9
lines changed

components/google_sheets/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pipedream/google_sheets",
3-
"version": "0.8.7",
3+
"version": "0.8.8",
44
"description": "Pipedream Google_sheets Components",
55
"main": "google_sheets.app.mjs",
66
"keywords": [

components/google_sheets/sources/common/new-row-added.mjs

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ export default {
2020
label: "Worksheet ID(s)",
2121
description: "Select one or more worksheet(s), or provide an array of worksheet IDs.",
2222
},
23+
hasHeaders: {
24+
type: "boolean",
25+
label: "Has Headers",
26+
description: "Set to true if your spreadsheet contains column headers. When enabled, webhook responses will use column headers as keys instead of positional array indices.",
27+
default: false,
28+
optional: true,
29+
},
30+
headerRow: {
31+
type: "integer",
32+
label: "Header Row Number",
33+
description: "The row number containing the column headers (e.g., 1 for the first row). Only used when 'Has Headers' is enabled.",
34+
default: 1,
35+
optional: true,
36+
},
2337
},
2438
methods: {
2539
_getRowHashes() {
@@ -28,6 +42,49 @@ export default {
2842
_setRowHashes(rowHashes) {
2943
this.db.set("rowHashes", rowHashes);
3044
},
45+
_getHeaders(worksheetId) {
46+
return this.db.get(`headers_${worksheetId}`) || {};
47+
},
48+
_setHeaders(worksheetId, headers) {
49+
this.db.set(`headers_${worksheetId}`, headers);
50+
},
51+
async _fetchHeaders(sheetId, worksheetTitle) {
52+
if (!this.hasHeaders) {
53+
return [];
54+
}
55+
56+
const range = `${worksheetTitle}!${this.headerRow}:${this.headerRow}`;
57+
const response = await this.googleSheets.getSpreadsheetValues(sheetId, range);
58+
return response.values?.[0] || [];
59+
},
60+
async _getOrFetchHeaders(sheetId, worksheetId, worksheetTitle) {
61+
if (!this.hasHeaders) {
62+
return [];
63+
}
64+
65+
let headers = this._getHeaders(worksheetId);
66+
if (!headers.length) {
67+
headers = await this._fetchHeaders(sheetId, worksheetTitle);
68+
this._setHeaders(worksheetId, headers);
69+
}
70+
71+
return headers;
72+
},
73+
_transformRowToObject(rowArray, headers) {
74+
if (!this.hasHeaders || !headers.length) {
75+
return rowArray;
76+
}
77+
78+
return headers.reduce((obj, header, index) => {
79+
const value = rowArray[index];
80+
if (header && header.trim()) {
81+
obj[header.trim()] = value !== undefined
82+
? value
83+
: "";
84+
}
85+
return obj;
86+
}, {});
87+
},
3188
getMeta(worksheet, rowNumber, rowHashString) {
3289
const ts = Date.now();
3390
const id = rowHashString;
@@ -156,6 +213,9 @@ export default {
156213
: newRowCount,
157214
);
158215

216+
// Fetch headers for this worksheet if enabled
217+
const headers = await this._getOrFetchHeaders(sheetId, worksheetId, worksheetTitle);
218+
159219
const rowHashes = this._getRowHashes();
160220
for (const [
161221
index,
@@ -171,9 +231,13 @@ export default {
171231
continue;
172232
}
173233
rowHashes[rowHashString] = true;
234+
235+
// Transform row to object using headers if enabled
236+
const transformedRow = this._transformRowToObject(newRow, headers);
237+
174238
this.$emit(
175239
{
176-
newRow,
240+
newRow: transformedRow,
177241
range,
178242
worksheet,
179243
rowNumber,

components/google_sheets/sources/new-row-added-polling/new-row-added-polling.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default {
88
key: "google_sheets-new-row-added-polling",
99
name: "New Row Added",
1010
description: "Emit new event each time a row or rows are added to the bottom of a spreadsheet.",
11-
version: "0.0.6",
11+
version: "0.0.7",
1212
dedupe: "unique",
1313
type: "source",
1414
props: {

components/google_sheets/sources/new-row-added/new-row-added.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default {
88
key: "google_sheets-new-row-added",
99
name: "New Row Added (Instant)",
1010
description: "Emit new event each time a row or rows are added to the bottom of a spreadsheet.",
11-
version: "0.1.14",
11+
version: "0.1.15",
1212
dedupe: "unique",
1313
type: "source",
1414
props: {
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
export default {
2-
"newRow": [
3-
"a"
4-
],
5-
"range": "Sheet1!1:1000",
2+
"newRow": {
3+
"Name": "John Doe",
4+
"Email": "john@example.com",
5+
"Age": "30"
6+
},
7+
"range": "Sheet1!2:2",
68
"worksheet": {
79
"properties": {
810
"sheetId": 1942312195,
@@ -15,5 +17,5 @@ export default {
1517
}
1618
}
1719
},
18-
"rowNumber": 1
20+
"rowNumber": 2
1921
}

0 commit comments

Comments
 (0)