-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Google Slides - new components #18142
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
WalkthroughAdds multiple Google Slides table-related actions and a Replace All Text action, implements tableId prop and new app methods that wrap batchUpdate, and bumps several action versions plus the component package version. No other functional changes. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor U as User
participant A as Action (e.g., Create Table)
participant G as google_slides.app
participant S as Google Slides API
U->>A: Provide props (presentationId, slideId, tableId, ...)
A->>G: call method (e.g., createTable(presentationId, data))
G->>S: batchUpdate({ requests: [CreateTableRequest / Insert/Delete ...] })
S-->>G: response
G-->>A: response.data
A-->>U: $summary + data
sequenceDiagram
autonumber
actor U as User
participant A as Replace All Text Action
participant G as google_slides.app
participant S as Google Slides API
U->>A: text, replaceText, slideIds?, matchCase?
A->>G: replaceAllText(presentationId, payload)
G->>S: batchUpdate({ requests: [ReplaceAllTextRequest] })
S-->>G: response
G-->>A: response.data
A-->>U: $summary + data
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Assessment against linked issues
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
components/google_slides/actions/create-slide/create-slide.mjs (1)
35-47
: Creating slide with empty slideLayoutReference can 400 if layoutId not providedlayoutId is optional in the app propDefinition, but the request always includes slideLayoutReference with possibly no layoutId. Some APIs reject an empty slideLayoutReference object. Build the payload conditionally.
Apply this diff:
async run({ $ }) { try { - const response = await this.googleSlides.createSlide(this.presentationId, { - insertionIndex: this.insertionIndex, - slideLayoutReference: { - layoutId: this.layoutId, - }, - }); + const payload = { + ...(this.insertionIndex !== undefined && { insertionIndex: this.insertionIndex }), + }; + if (this.layoutId) { + payload.slideLayoutReference = { layoutId: this.layoutId }; + } + const response = await this.googleSlides.createSlide(this.presentationId, payload); $.export("$summary", `Successfully created slide with ID: ${response.data.replies[0].createSlide.objectId}`); return response.data; } catch (error) { throw new ConfigurationError(`Failed to create slide: ${error.message}. Make sure you have permission to edit the presentation.`); } },
🧹 Nitpick comments (17)
components/google_slides/actions/delete-page-element/delete-page-element.mjs (1)
26-35
: Prop naming clarity: consider aliasingshapeId
→pageElementId
This action deletes any page element, but the propDefinition references
shapeId
. Consider adding apageElementId
propDefinition alias in the app (backed by the same list) to reduce confusion for users selecting images, tables, etc., not just shapes.components/google_slides/actions/create-image/create-image.mjs (1)
94-95
: Guard against missing replies in API response summaryIf the Slides API ever returns an empty
replies
array (or a non-standard reply), the summary dereference can throw. Consider a defensive check.Apply this diff:
- $.export("$summary", `Successfully created image with ID: ${response.data.replies[0].createImage.objectId}`); - return response.data; + const createReply = response.data?.replies?.[0]?.createImage; + $.export("$summary", + createReply?.objectId + ? `Successfully created image with ID: ${createReply.objectId}` + : "Successfully created image." + ); + return response.data;components/google_slides/actions/merge-data/merge-data.mjs (1)
96-104
: Avoid empty batchUpdate when no merge inputs providedIf both
placeholdersAndTexts
andplaceholdersAndImageUrls
are empty,requests
will be empty. You can short-circuit to skip the API call and still provide a useful summary.Apply this diff:
- const { data: response } = await batchUpdate({ - presentationId: presentation.id, - resource: { - requests: [ - ...getTextRequests(placeholdersAndTexts), - ...getImageRequests(placeholdersAndImageUrls), - ], - }, - }); + const requests = [ + ...getTextRequests(placeholdersAndTexts), + ...getImageRequests(placeholdersAndImageUrls), + ]; + + if (!requests.length) { + $.export("$summary", `Copied presentation with ID: ${presentation.id} (no merge requests provided)`); + return { presentationId: presentation.id, replies: [] }; + } + + const { data: response } = await batchUpdate({ + presentationId: presentation.id, + resource: { requests }, + });components/google_slides/actions/insert-text/insert-text.mjs (1)
49-56
: Avoid sending undefined insertionIndex; small hardeningIf insertionIndex isn’t set, we currently pass it as undefined. While JSON.stringify drops undefined, being explicit avoids surprises and keeps the payload minimal.
Apply this diff to only include insertionIndex when it’s provided:
- const response = await this.googleSlides.insertText(this.presentationId, { - objectId: this.shapeId, - text: this.text, - insertionIndex: this.insertionIndex, - }); + const payload = { + objectId: this.shapeId, + text: this.text, + }; + if (this.insertionIndex !== undefined) { + payload.insertionIndex = this.insertionIndex; + } + const response = await this.googleSlides.insertText(this.presentationId, payload);components/google_slides/actions/refresh-chart/refresh-chart.mjs (1)
31-39
: Minor readability: use flatMap and for...of is fine, but you can go fully declarativeNot required, but this trims a couple lines.
- const elements = presentation.slides.map((slide) => slide.pageElements).flat(); - const chartIds = elements.filter((element) => { - return element.sheetsChart && element.sheetsChart.spreadsheetId; - }).map((element) => element.objectId); - const promises = []; - for (let chartId of chartIds) { - promises.push(this.app.refreshChart(this.presentationId, chartId)); - } - await Promise.all(promises); + const chartIds = presentation.slides + .flatMap((slide) => slide.pageElements || []) + .filter((el) => el?.sheetsChart?.spreadsheetId) + .map((el) => el.objectId); + await Promise.all( + chartIds.map((chartId) => this.app.refreshChart(this.presentationId, chartId)), + );components/google_slides/google_slides.app.mjs (1)
65-79
: Table picker UX: include objectId in label and guard against missing pageElementsImproves disambiguation when multiple tables have the same size and avoids a potential undefined access.
- async options({ - presentationId, slideId, - }) { - const { pageElements } = await this.getSlide(presentationId, slideId); - let tables = pageElements.filter((element) => element?.table); - return tables.map((element) => ({ - label: `${element.table.rows} x ${element.table.columns} Table`, - value: element.objectId, - })); - }, + async options({ presentationId, slideId }) { + const { pageElements = [] } = await this.getSlide(presentationId, slideId); + const tables = pageElements.filter((el) => el?.table); + return tables.map((el) => ({ + label: `${el.table.rows} x ${el.table.columns} Table (${el.objectId})`, + value: el.objectId, + })); + },components/google_slides/actions/replace-all-text/replace-all-text.mjs (2)
17-26
: Clarify the intent of the “Text” prop.To reduce ambiguity in the UI, consider renaming “Text” → “Find Text”.
Apply this diff:
- text: { - type: "string", - label: "Text", - description: "The text to replace", - }, + text: { + type: "string", + label: "Find Text", + description: "The text to search for and replace", + },
47-58
: Return a more informative summary and normalize optional fields.Improve UX by:
- Defaulting
matchCase
to false (avoid sending undefined),- Omitting
pageObjectIds
when no slideIds selected,- Emitting the number of replacements from the batchUpdate reply if available.
Apply this diff:
async run({ $ }) { - const response = await this.googleSlides.replaceAllText(this.presentationId, { - replaceText: this.replaceText, - pageObjectIds: this.slideIds, - containsText: { - text: this.text, - matchCase: this.matchCase, - }, - }); - $.export("$summary", "Successfully replaced text in the presentation"); - return response.data; + const response = await this.googleSlides.replaceAllText(this.presentationId, { + replaceText: this.replaceText, + pageObjectIds: Array.isArray(this.slideIds) && this.slideIds.length ? this.slideIds : undefined, + containsText: { + text: this.text, + matchCase: !!this.matchCase, + }, + }); + const replies = response?.data?.replies || []; + const count = replies.find?.((r) => r?.replaceAllText)?.replaceAllText?.occurrencesChanged; + const scope = Array.isArray(this.slideIds) && this.slideIds.length ? ` across ${this.slideIds.length} slide(s)` : ""; + $.export("$summary", + typeof count === "number" + ? `Replaced ${count} occurrence${count === 1 ? "" : "s"}${scope}` + : "Successfully replaced text in the presentation", + ); + return response.data; },components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs (1)
53-58
: Optional: clarify insertionIndex semantics.Consider documenting that omitting
insertionIndex
appends to the end of the cell’s text; setting0
inserts at the start.Apply this diff:
insertionIndex: { type: "integer", label: "Insertion Index", - description: "The index where the text will be inserted", + description: "The 0-based index where the text will be inserted. Omit to append at end; set to 0 to insert at start.", optional: true, },components/google_slides/actions/delete-table-row/delete-table-row.mjs (2)
4-6
: Align name/key with singular operation or add multi-delete support.This action currently deletes a single row, but the key/name are plural. Either:
- rename to singular (recommended to match Issue #18053), or
- add a
number
prop to delete multiple rows.Option A (singular naming) — apply this diff:
- key: "google_slides-delete-table-rows", - name: "Delete Table Rows", + key: "google_slides-delete-table-row", + name: "Delete Table Row",
36-40
: Support deleting multiple contiguous rows (if plural naming retained).If you keep the plural surface, expose the
number
field supported by DeleteTableRowsRequest.Apply this diff:
rowIndex: { type: "integer", label: "Row Index", - description: "The index of the row to delete", + description: "The 0-based index of the first row to delete", }, + number: { + type: "integer", + label: "Number of Rows", + description: "How many consecutive rows to delete starting at `rowIndex`", + optional: true, + default: 1, + }, }, async run({ $ }) { const response = await this.googleSlides.deleteTableRow(this.presentationId, { tableObjectId: this.tableId, cellLocation: { rowIndex: this.rowIndex, }, + number: this.number ?? 1, }); - $.export("$summary", "Successfully deleted table row"); + $.export("$summary", `Successfully deleted ${this.number ?? 1} row(s) starting at index ${this.rowIndex}`); return response.data; },Also applies to: 42-50
components/google_slides/actions/delete-table-column/delete-table-column.mjs (2)
36-40
: Constrain columnIndex to non-negative values.Input validation at the prop level prevents easy-to-make mistakes and avoids 4xxs from the API.
columnIndex: { type: "integer", label: "Column Index", - description: "The index of the column to delete", + description: "The index of the column to delete", + min: 0, },
49-49
: Make the summary more informative.Including the index helps when scanning run logs.
- $.export("$summary", "Successfully deleted table column"); + $.export("$summary", `Successfully deleted table column at index ${this.columnIndex}`);components/google_slides/actions/insert-table-rows/insert-table-rows.mjs (1)
65-65
: Pluralize the summary based on count.Improves run logs clarity.
- $.export("$summary", "Successfully inserted table row"); + const count = this.number ?? 1; + $.export("$summary", `Successfully inserted ${count} table ${count === 1 ? "row" : "rows"}`);components/google_slides/actions/create-table/create-table.mjs (2)
36-45
: Validate height/width are positive.Adds basic guardrails and clearer error messages before making the API call.
height: { type: "integer", label: "Height", description: "The height of the shape in points (1/72 of an inch)", + min: 1, }, width: { type: "integer", label: "Width", description: "The width of the shape in points (1/72 of an inch)", + min: 1, },
85-85
: Enrich the success summary with table size.Useful when scanning many runs.
- $.export("$summary", "Successfully created table in the slide"); + $.export("$summary", `Successfully created a ${this.rows}×${this.columns} table in the slide`);components/google_slides/actions/insert-table-columns/insert-table-columns.mjs (1)
65-65
: Pluralize the success summary.Improves clarity in logs.
- $.export("$summary", "Successfully inserted table column"); + const count = this.number ?? 1; + $.export("$summary", `Successfully inserted ${count} table ${count === 1 ? "column" : "columns"}`);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (1)
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (19)
components/google_slides/actions/create-image/create-image.mjs
(1 hunks)components/google_slides/actions/create-page-element/create-page-element.mjs
(1 hunks)components/google_slides/actions/create-presentation/create-presentation.mjs
(1 hunks)components/google_slides/actions/create-slide/create-slide.mjs
(1 hunks)components/google_slides/actions/create-table/create-table.mjs
(1 hunks)components/google_slides/actions/delete-page-element/delete-page-element.mjs
(1 hunks)components/google_slides/actions/delete-slide/delete-slide.mjs
(1 hunks)components/google_slides/actions/delete-table-column/delete-table-column.mjs
(1 hunks)components/google_slides/actions/delete-table-row/delete-table-row.mjs
(1 hunks)components/google_slides/actions/find-presentation/find-presentation.mjs
(1 hunks)components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
(1 hunks)components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
(1 hunks)components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs
(1 hunks)components/google_slides/actions/insert-text/insert-text.mjs
(1 hunks)components/google_slides/actions/merge-data/merge-data.mjs
(1 hunks)components/google_slides/actions/refresh-chart/refresh-chart.mjs
(1 hunks)components/google_slides/actions/replace-all-text/replace-all-text.mjs
(1 hunks)components/google_slides/google_slides.app.mjs
(2 hunks)components/google_slides/package.json
(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
components/google_slides/actions/replace-all-text/replace-all-text.mjs (3)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (1)
response
(43-48)components/google_slides/actions/insert-table-rows/insert-table-rows.mjs (1)
response
(57-64)components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs (1)
response
(61-69)
components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs (3)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (1)
response
(43-48)components/google_slides/actions/insert-table-rows/insert-table-rows.mjs (1)
response
(57-64)components/google_slides/actions/replace-all-text/replace-all-text.mjs (1)
response
(48-55)
components/google_slides/actions/insert-table-rows/insert-table-rows.mjs (2)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (1)
response
(43-48)components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs (1)
response
(61-69)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (2)
components/google_slides/actions/insert-table-rows/insert-table-rows.mjs (1)
response
(57-64)components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs (1)
response
(61-69)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Verify TypeScript components
- GitHub Check: Publish TypeScript components
- GitHub Check: Lint Code Base
🔇 Additional comments (14)
components/google_slides/actions/find-presentation/find-presentation.mjs (1)
7-7
: Version bump only — LGTMThe metadata change to version "0.0.5" is consistent with the broader package bump. No functional concerns here.
components/google_slides/actions/delete-page-element/delete-page-element.mjs (1)
7-7
: Version bump only — LGTMThe action version update to "0.0.2" looks good. No behavioral changes introduced.
components/google_slides/package.json (1)
3-3
: Package version bump — LGTMBumping the package to 0.3.0 aligns with the addition of new actions and app methods. No further package metadata issues spotted.
components/google_slides/actions/create-image/create-image.mjs (1)
7-7
: Version bump only — LGTMThe metadata update to "0.0.2" is fine. No logic changes detected.
components/google_slides/actions/merge-data/merge-data.mjs (1)
7-7
: Version bump only — LGTMThe action version update to "0.0.4" looks good.
components/google_slides/actions/insert-text/insert-text.mjs (1)
7-7
: Version bump only — OK to shipNo behavior change; safe metadata update.
components/google_slides/actions/create-slide/create-slide.mjs (1)
8-8
: Version bump only — OK to shipNo functional change in this file besides the version.
components/google_slides/actions/refresh-chart/refresh-chart.mjs (1)
7-7
: Version bump only — OK to shipNo runtime change; action behavior remains identical.
components/google_slides/actions/create-page-element/create-page-element.mjs (1)
8-8
: Version bump only — OK to shipNo behavior change in this action.
components/google_slides/google_slides.app.mjs (1)
142-201
: Please verify action implementations against the new batchUpdate wrappersI wasn’t able to find any calls in
components/google_slides/actions
that use the new wrapper parameters. To avoid runtime errors, double-check that:
- The replace–all–text action invokes
googleSlides.replaceAllText(presentationId, { containsText, replaceText, … })
so bothcontainsText
andreplaceText
are passed.- All table operations call the correct wrappers with
tableObjectId
(instead oftableId
):
googleSlides.insertTableRows(presentationId, { tableObjectId, … })
googleSlides.insertTableColumns(presentationId, { tableObjectId, … })
googleSlides.deleteTableRow(presentationId, { tableObjectId, … })
googleSlides.deleteTableColumn(presentationId, { tableObjectId, … })
- The
tableId
propDefinition in each action is wired up with bothpresentationId
andslideId
, for example:propDefinition: [ googleSlides, "tableId", (c) => ({ presentationId: c.presentationId, slideId: c.slideId }), ],Please update the action implementations accordingly or confirm that these mappings already exist and are correctly spelled out.
components/google_slides/actions/create-presentation/create-presentation.mjs (1)
7-7
: Version bump looks good.No functional changes in this file; metadata update is consistent with the broader package bump.
components/google_slides/actions/delete-slide/delete-slide.mjs (1)
7-7
: Version bump acknowledged.No behavioral changes introduced here; safe to ship.
components/google_slides/actions/replace-all-text/replace-all-text.mjs (1)
27-39
: Verify multi-select behavior forslideIds
We couldn’t find any other instances in the repo where a propDefinition based on
slideId
is used withtype: "string[]"
. This action is the sole precedent:
- File:
components/google_slides/actions/replace-all-text/replace-all-text.mjs
- Lines 27–39 define
slideIds: { propDefinition: [ googleSlides, "slideId", (c) => ({ presentationId: c.presentationId }), ], type: "string[]", label: "Slide IDs", description: "Limits the matches to page elements only on the given pages", optional: true, },Because there’s no prior example to confirm that overriding a single-select propDefinition to an array type renders a working multi-select UI and emits an array, please manually verify in the Pipedream UI/engine that:
- The field renders as a multi-select dropdown populated with slide IDs.
- Selected values are passed through as an array (
string[]
) to the action runtime.components/google_slides/actions/delete-table-column/delete-table-column.mjs (1)
42-48
: deleteTableColumn wrapper verifiedI’ve confirmed that:
- The
deleteTableColumn
method is implemented incomponents/google_slides/google_slides.app.mjs
(around lines 192–197), and callsbatchUpdate(presentationId, requests)
with each request shaped as:{ deleteTableColumn: { ...data, }, }- The action’s props include
tableId
via apropDefinition
indelete-table-column.mjs
, ensuring the requiredtableObjectId
is passed through correctly.No changes are required here.
components/google_slides/actions/delete-table-column/delete-table-column.mjs
Outdated
Show resolved
Hide resolved
components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
Outdated
Show resolved
Hide resolved
components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
Show resolved
Hide resolved
components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
Show resolved
Hide resolved
components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
Outdated
Show resolved
Hide resolved
components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
Show resolved
Hide resolved
components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
Show resolved
Hide resolved
components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs
Outdated
Show resolved
Hide resolved
components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (3)
6-6
: Nit: use an article in the description.Small copy improvement for readability.
Apply this diff:
- description: "Delete column from a table. [See the documentation](https://developers.google.com/workspace/slides/api/reference/rest/v1/presentations/request#DeleteTableColumnRequest)", + description: "Delete a column from a table. [See the documentation](https://developers.google.com/workspace/slides/api/reference/rest/v1/presentations/request#DeleteTableColumnRequest)",
36-40
: Clarify 0-based index and validate lower bound.Column indices are 0-based per the Slides samples; adding min: 0 guards obvious input errors and the description can state this explicitly. (developers.google.com)
Apply this diff:
columnIndex: { type: "integer", label: "Column Index", - description: "The index of the column to delete", + description: "The 0-based index of the column to delete", + min: 0, },
49-49
: Make the $summary more informative for run logs.Including the IDs and index helps users auditing runs.
Apply this diff:
- $.export("$summary", "Successfully deleted table column"); + $.export("$summary", `Deleted column ${this.columnIndex} from table ${this.tableId} in presentation ${this.presentationId}`);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (5)
components/google_slides/actions/delete-table-column/delete-table-column.mjs
(1 hunks)components/google_slides/actions/delete-table-row/delete-table-row.mjs
(1 hunks)components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
(1 hunks)components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
(1 hunks)components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
- components/google_slides/actions/insert-text-into-table/insert-text-into-table.mjs
- components/google_slides/actions/insert-table-rows/insert-table-rows.mjs
- components/google_slides/actions/insert-table-columns/insert-table-columns.mjs
- components/google_slides/actions/delete-table-row/delete-table-row.mjs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Publish TypeScript components
- GitHub Check: Lint Code Base
- GitHub Check: Verify TypeScript components
🔇 Additional comments (3)
components/google_slides/actions/delete-table-column/delete-table-column.mjs (3)
4-6
: Consistent singular naming — good alignment with folder/method and docs anchor.Key/name now match the singular action and the docs anchor points to DeleteTableColumnRequest. Looks clean.
42-51
: Request shape matches Slides API.Passing tableObjectId with cellLocation: { columnIndex } is exactly what DeleteTableColumnRequest expects; rowIndex is not required for column deletion. Looks correct. (developers.google.com)
42-51
: Verified:deleteTableColumn
wrapper is correctly wired tobatchUpdate
.
- In
components/google_slides/google_slides.app.mjs
(lines 192–198), there’s adeleteTableColumn(presentationId, data)
method that buildsconst requests = [{ deleteTableColumn: { ...data } }]; return this.batchUpdate(presentationId, requests);- The shared
batchUpdate(presentationId, requests)
(lines 95–98) in the same file callsslides.presentations.batchUpdate({ presentationId, requestBody: { requests }, });- This matches the intended
{ deleteTableColumn: data }
payload shape. No further changes required.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @michelle0927 lgtm! Ready for QA!
Resolves #18053
Summary by CodeRabbit
New Features
Chores