UNPKG

@pipedream/smartsheet

Version:

Pipedream Smartsheet Components

112 lines (106 loc) 2.71 kB
import smartsheet from "../../smartsheet.app.mjs"; export default { key: "smartsheet-update-row", name: "Update Row", description: "Updates a row in a sheet. [See docs here](https://smartsheet.redoc.ly/tag/rows#operation/update-rows)", version: "0.0.2", type: "action", props: { smartsheet, sheetId: { propDefinition: [ smartsheet, "sheetId", ], }, rowId: { propDefinition: [ smartsheet, "rowId", (c) => ({ sheetId: c.sheetId, }), ], reloadProps: true, }, cells: { type: "string[]", label: "Cells", description: "Array of objects representing cell values. Use to manually update row when `sheetId` is entered as a custom expression. Example: `{{ [{\"columnId\": 7960873114331012,\"value\": \"New status\"}] }}`", optional: true, }, }, async additionalProps() { const props = {}; if (isNaN(this.rowId)) { return props; } const { cells, columns, } = await this.smartsheet.getRow(this.sheetId, this.rowId, { params: { include: "columns, columnType", }, }); if (!columns) { return props; } for (const column of columns) { props[column.id] = { type: "string", label: column.title, description: column?.description || "Enter the column value", optional: true, default: cells.find(({ columnId }) => columnId === column.id)?.value, }; if (column.type.includes("CONTACT_LIST")) { props[column.id] = { ...props[column.id], options: async ({ page }) => { const { data } = await this.smartsheet.listContacts({ params: { page, }, }); return data?.map(({ email }) => email ) || []; }, }; } else if (column?.options) { props[column.id].options = column.options; } } return props; }, async run({ $ }) { const { sheetId, rowId, cells = [], smartsheet, ...columnProps } = this; const data = { id: rowId, cells: [], }; for (const cell of cells) { const cellValue = typeof cell === "object" ? cell : JSON.parse(cell); data.cells.push(cellValue); } for (const key of Object.keys(columnProps)) { data.cells.push({ columnId: key, value: columnProps[key], }); } const response = await smartsheet.updateRow(sheetId, { data, $, }); $.export("$summary", `Successfully updated row with ID ${rowId}`); return response; }, };