Skip to content

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Aug 12, 2025

Resolves #18012

Summary by CodeRabbit

  • New Features
    • Added Workday actions: Get Worker, Search Workers, List Organization Types, List Supervisory Organizations, List Worker Payslips, Create Job Change, Change Business Title.
    • Added “New Worker Created” polling source to emit events for newly created workers.
    • Added dynamic dropdowns for workers, supervisory organizations, job change reasons, and a Max Results pagination option.
  • Chores
    • Bumped Workday component version to 0.1.0 and updated dependencies.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 12, 2025

Walkthrough

Adds Workday app HTTP helpers, paginated helpers, dynamic propDefinitions, multiple worker- and org-related actions, a polling base, and a "New Worker Created" polling source with sample event. Updates package.json to v0.1.0 and adds @pipedream/platform dependency.

Changes

Cohort / File(s) Summary
Workday app: HTTP, pagination, propDefinitions
components/workday/workday.app.mjs
Adds axios-based _makeRequest/_baseUrl, resource methods (getWorker, listWorkers, listOrganizationTypes, listSupervisoryOrganizations, listJobChangeReasons, listWorkerPayslips, createJobChange, changeBusinessTitle), async *paginate, and dynamic propDefinitions (workerId, supervisoryOrganizationId, jobChangeReasonId, maxResults). Removes old authKeys.
Worker actions
components/workday/actions/get-worker/get-worker.mjs, components/workday/actions/search-workers/search-workers.mjs, components/workday/actions/create-job-change/create-job-change.mjs, components/workday/actions/change-business-title/change-business-title.mjs, components/workday/actions/list-worker-payslips/list-worker-payslips.mjs
New action modules implementing get/search workers, create job change, change business title, and list worker payslips; they call Workday app methods and use paginate where applicable.
Organization listing actions
components/workday/actions/list-organization-types/list-organization-types.mjs, components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs
New actions to list organization types and supervisory organizations using the app paginate helper.
Polling base for sources
components/workday/sources/common/base-polling.mjs
Adds reusable polling base export with props: workday, db, and timer (default interval).
New source: New Worker Created
components/workday/sources/new-worker-created/new-worker-created.mjs, components/workday/sources/new-worker-created/test-event.mjs
Adds a polling source that paginates workers, deduplicates via stored previousIds, emits new-worker events, provides deploy hook to emit sample events, and includes a static test-event payload.
Package update
components/workday/package.json
Bumps version 0.0.1 → 0.1.0 and adds dependency @pipedream/platform: ^3.1.0.

Sequence Diagram(s)

sequenceDiagram
  participant User/Workflow
  participant Action
  participant WorkdayApp
  participant WorkdayAPI

  User/Workflow->>Action: invoke action with props
  Action->>WorkdayApp: call method (e.g., getWorker/createJobChange)
  WorkdayApp->>WorkdayAPI: HTTP request via axios
  WorkdayAPI-->>WorkdayApp: Response
  WorkdayApp-->>Action: return data
  Action-->>User/Workflow: Result (+ $summary)
Loading
sequenceDiagram
  participant Source
  participant DB
  participant WorkdayApp
  participant WorkdayAPI

  Source->>DB: read previousIds
  loop paginate pages
    Source->>WorkdayApp: listWorkers($, offset, limit)
    WorkdayApp->>WorkdayAPI: GET /workers
    WorkdayAPI-->>WorkdayApp: page results
    WorkdayApp-->>Source: return workers[]
  end
  Source->>Source: filter new workers
  Source->>DB: update previousIds
  Source-->>Source: emit events for new workers
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Assessment against linked issues

Objective Addressed Explanation
Implement Workday actions (Get/Search/Update/Call operations; business objects) (#18012) The PR adds worker- and org-specific actions but does not implement generic business-object or call-operation frameworks.
Implement sources for new/updated business objects and scheduled reports (#18012) Adds a "New Worker Created" source (worker-specific). It's unclear if this satisfies the generic "business object" or "scheduled report" source objectives.
Support custom objects, reports, and WQL (#18012) No endpoints or actions for custom objects, reports, or WQL are implemented.
Provide broad actions (create/update custom objects, list custom object definitions) (#18012) No custom object definition/listing or create/update custom object implementations present.

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Add “Create Job Change” action (components/workday/actions/create-job-change/create-job-change.mjs) Implementation targets a worker-specific job-change endpoint; linked issue requests broader business-object/action support, not this specific worker mutation.
Add “Change Business Title” action (components/workday/actions/change-business-title/change-business-title.mjs) Worker-specific update action not in the linked objectives which call for generic update/call operations across business objects.
Add “List Worker Payslips” action (components/workday/actions/list-worker-payslips/list-worker-payslips.mjs) Payslip listing is a specific resource not listed in the linked objectives (focused on business objects/reports/custom objects).

Poem

I thump my paws on code today,
New workers hop in bright array.
Pages fetched and titles changed with care,
Polling carrots float in air.
Version bumped — I nibble, whiskers twitching there. 🥕🐇

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-18012

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@vercel
Copy link

vercel bot commented Aug 12, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

3 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
docs-v2 ⬜️ Ignored Aug 12, 2025 7:45pm
pipedream-docs ⬜️ Ignored Aug 12, 2025 7:45pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored Aug 12, 2025 7:45pm

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (11)
components/workday/workday.app.mjs (2)

12-23: Enhance dynamic options: support search passthrough for better UX at scale

Pass the search string to the underlying list APIs to filter server-side and reduce dropdown load for large tenants.

Apply (example for workerId; repeat similarly for the other two):

-      async options({ page }) {
+      async options({ page, search }) {
         const { data } = await this.listWorkers({
           params:
-          {
+          {
             limit: DEFAULT_LIMIT,
             offset: page * DEFAULT_LIMIT,
+            ...(search ? { search } : {}),
           },
         });
         return data?.map((worker) => ({
           label: worker.descriptor,
           value: worker.id,
         })) || [];
       },

And similarly add , search and forward ...(search ? { search } : {}) under params for supervisoryOrganizationId and jobChangeReasonId if their endpoints support it.

Also applies to: 29-40, 46-57


68-70: Normalize domain to avoid double protocol

If users enter a domain with protocol, _baseUrl() can produce https://https://.... Normalize by stripping any scheme.

Apply:

-    _baseUrl() {
-      return `https://${this.$auth.domain}/ccx/api/v1/${this.$auth.tenant_id}`;
-    },
+    _baseUrl() {
+      const domain = (this.$auth.domain || "").replace(/^https?:\/\//, "");
+      return `https://${domain}/ccx/api/v1/${this.$auth.tenant_id}`;
+    },
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (2)

25-32: Confirm paginate yield shape or flatten defensively

If paginate yields arrays (pages) instead of individual items, data.length will count pages, not payslips. Either confirm the yield shape, or flatten defensively.

Proposed defensive flatten within the loop:

-    for await (const result of results) {
-      data.push(result);
-    }
+    for await (const result of results) {
+      if (Array.isArray(result)) data.push(...result);
+      else data.push(result);
+    }

39-40: Summary may be misleading if results are paged

data.length reflects the number of pushed items. If pages were pushed (arrays), the summary could misreport the count. This is resolved by the defensive flatten above.

components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)

27-31: Optional: flatten results defensively

Same consideration as other paginated actions—flatten if the generator yields pages.

-    for await (const result of results) {
-      data.push(result);
-    }
+    for await (const result of results) {
+      if (Array.isArray(result)) data.push(...result);
+      else data.push(result);
+    }
components/workday/actions/search-workers/search-workers.mjs (2)

36-39: Optional: flatten generator results defensively

If the paginator yields pages, push spread items to maintain a correct count and return shape.

-    for await (const result of results) {
-      data.push(result);
-    }
+    for await (const result of results) {
+      if (Array.isArray(result)) data.push(...result);
+      else data.push(result);
+    }

41-42: Summary count depends on generator yield shape

Ensure the summary reflects item count (not pages). The flatten suggestion above addresses this.

components/workday/actions/create-job-change/create-job-change.mjs (2)

29-34: Fix Markdown strikethrough in description

The tildes around “Manager” render as strikethrough. Remove them to avoid confusing UI text.

     moveManagersTeam: {
       type: "boolean",
       label: "Move Managers Team",
-      description: "Indicates whether teams reporting to the ~Manager~ moved with them during the Change Job Event",
+      description: "Indicates whether teams reporting to the Manager moved with them during the Change Job Event",
       optional: true,
     },

36-40: Clarify label for effective date/time

Optional: rename the label to “Effective Date” to better communicate expected value (ISO 8601).

-      label: "Effective",
+      label: "Effective Date",
components/workday/sources/new-worker-created/new-worker-created.mjs (2)

20-25: Use source data timestamp if available for more accurate metadata

Using Date.now() is acceptable, but if the worker payload exposes a created/updated timestamp, prefer it for ts to reflect event time over processing time.

Example if a field exists:

-        ts: Date.now(),
+        ts: worker.createdAt ?? Date.now(),

32-41: Potential unbounded growth of previousIds

previousIds grows over time and may become large for tenants with many workers. Consider a pruning strategy (e.g., keeping only IDs seen in the last N days) or using an anchor (if API supports updatedFrom) to bound storage and fetch time.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 26bbe6a and 6195fc1.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (12)
  • components/workday/actions/change-business-title/change-business-title.mjs (1 hunks)
  • components/workday/actions/create-job-change/create-job-change.mjs (1 hunks)
  • components/workday/actions/get-worker/get-worker.mjs (1 hunks)
  • components/workday/actions/list-organization-types/list-organization-types.mjs (1 hunks)
  • components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1 hunks)
  • components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1 hunks)
  • components/workday/actions/search-workers/search-workers.mjs (1 hunks)
  • components/workday/package.json (2 hunks)
  • components/workday/sources/common/base-polling.mjs (1 hunks)
  • components/workday/sources/new-worker-created/new-worker-created.mjs (1 hunks)
  • components/workday/sources/new-worker-created/test-event.mjs (1 hunks)
  • components/workday/workday.app.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2024-12-12T19:23:09.039Z
Learnt from: jcortes
PR: PipedreamHQ/pipedream#14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like `fs` to `package.json` dependencies, as they are native modules provided by the Node.js runtime.

Applied to files:

  • components/workday/package.json
📚 Learning: 2024-10-10T19:18:27.998Z
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In `components/the_magic_drip/sources/common.mjs`, when processing items in `getAndProcessData`, `savedIds` is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Applied to files:

  • components/workday/sources/new-worker-created/new-worker-created.mjs
🧬 Code Graph Analysis (8)
components/workday/actions/search-workers/search-workers.mjs (4)
components/workday/actions/list-organization-types/list-organization-types.mjs (1)
  • results (19-25)
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1)
  • results (25-32)
components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)
  • results (19-25)
components/workday/sources/new-worker-created/new-worker-created.mjs (1)
  • results (28-30)
components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (4)
components/workday/actions/list-organization-types/list-organization-types.mjs (1)
  • results (19-25)
components/workday/actions/search-workers/search-workers.mjs (1)
  • results (25-34)
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1)
  • results (25-32)
components/workday/sources/new-worker-created/new-worker-created.mjs (1)
  • results (28-30)
components/workday/actions/list-organization-types/list-organization-types.mjs (4)
components/workday/actions/search-workers/search-workers.mjs (1)
  • results (25-34)
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1)
  • results (25-32)
components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)
  • results (19-25)
components/workday/sources/new-worker-created/new-worker-created.mjs (1)
  • results (28-30)
components/workday/actions/change-business-title/change-business-title.mjs (2)
components/workday/actions/create-job-change/create-job-change.mjs (1)
  • response (43-56)
components/workday/actions/get-worker/get-worker.mjs (1)
  • response (19-22)
components/workday/actions/get-worker/get-worker.mjs (2)
components/workday/actions/create-job-change/create-job-change.mjs (1)
  • response (43-56)
components/workday/actions/change-business-title/change-business-title.mjs (1)
  • response (24-30)
components/workday/actions/create-job-change/create-job-change.mjs (2)
components/workday/actions/change-business-title/change-business-title.mjs (1)
  • response (24-30)
components/workday/actions/get-worker/get-worker.mjs (1)
  • response (19-22)
components/workday/workday.app.mjs (4)
components/workday/actions/list-organization-types/list-organization-types.mjs (1)
  • data (27-27)
components/workday/actions/search-workers/search-workers.mjs (1)
  • data (36-36)
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1)
  • data (34-34)
components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)
  • data (27-27)
components/workday/sources/new-worker-created/new-worker-created.mjs (4)
components/workday/actions/list-organization-types/list-organization-types.mjs (1)
  • results (19-25)
components/workday/actions/search-workers/search-workers.mjs (1)
  • results (25-34)
components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (1)
  • results (25-32)
components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)
  • results (19-25)
⏰ 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). (4)
  • GitHub Check: Lint Code Base
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
🔇 Additional comments (11)
components/workday/package.json (2)

3-3: Version bump looks good

Package version bumped to 0.1.0 to reflect new features.


15-17: @pipedream/platform dependency is up to date

The pinned version ^3.1.0 matches the latest release on npm (3.1.0), so no upgrade is necessary.

components/workday/actions/list-organization-types/list-organization-types.mjs (1)

18-34: LGTM: follows the new paginate pattern

Action cleanly pages results, respects maxResults, and exports a useful summary. Will work once the paginate fix lands.

components/workday/actions/get-worker/get-worker.mjs (1)

18-25: LGTM: straightforward fetch with summary

Uses propDefinition for the worker ID and calls the app method directly. Errors will bubble to the platform as expected.

components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (1)

19-25: LGTM: correct usage of paginate with args and maxResults

The pagination pattern and arg passing look consistent with other actions.

components/workday/actions/change-business-title/change-business-title.mjs (1)

31-33: LGTM: clear summary and return behavior

The success summary and returning the API response align with action patterns in this package.

components/workday/actions/search-workers/search-workers.mjs (1)

24-34: paginate yields individual items – no changes needed
Verified that in components/workday/workday.app.mjs, the async *paginate implementation uses yield item (lines 159–160), so it emits each record one by one rather than an array. The existing loops and summaries will operate correctly as written.

components/workday/actions/create-job-change/create-job-change.mjs (1)

57-58: LGTM: clear summary and return

The success message and returning the API response is consistent with other actions.

components/workday/sources/common/base-polling.mjs (1)

1-15: Base shape and timer defaults look good

The base comp cleanly wires workday, db, and a sensible default polling interval from the platform.

components/workday/sources/new-worker-created/new-worker-created.mjs (2)

32-41: Dedupe strategy matches team learning (mark all seen, emit up to limit)

You update previousIds for both emitted and non-emitted workers, then slice to limit. This aligns with the retrieved learning to avoid retroactive floods on first deploy and only emit events going forward.

Also applies to: 49-51


21-24: Confirmed: worker.id is Workday’s canonical, stable identifier
All components under components/workday—including the app layer in workday.app.mjs (where value: worker.id is used and API paths are built with /workers/${workerId})—consistently use worker.id as the primary ID. You can safely use it for deduplication.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (1)
components/workday/workday.app.mjs (1)

140-168: Fix broken pagination: lost this binding, overrides caller limit/offset, and fragile hasMore logic

  • Calling fn(args) loses the method’s this context (e.g., listWorkers), causing runtime errors.
  • You overwrite caller-provided params.limit and params.offset.
  • You assume total is returned at the top level. With @pipedream/platform axios, total typically lives under res.data.total (if present), and many endpoints won’t return it at all.
  • You increment offset by args.params.limit, which could be mutated; store a local copy.
  • Current logic will stop after the first page if total is absent (since count < undefined is false), and will also break even when more data exists.

Apply this refactor:

-    async *paginate({
-      fn, args = {}, max,
-    }) {
-      args = {
-        ...args,
-        params: {
-          ...args?.params,
-          limit: DEFAULT_LIMIT,
-          offset: 0,
-        },
-      };
-      let hasMore, count = 0;
-      do {
-        const {
-          data, total,
-        } = await fn(args);
-        if (!data?.length) {
-          return;
-        }
-        for (const item of data) {
-          yield item;
-          count++;
-          if (max && count >= max) {
-            return;
-          }
-        }
-        hasMore = count < total;
-        args.params.offset += args.params.limit;
-      } while (hasMore);
-    },
+    async *paginate({ fn, args = {}, max }) {
+      args = {
+        ...args,
+        params: {
+          ...args?.params,
+          limit: args?.params?.limit ?? DEFAULT_LIMIT,
+          offset: args?.params?.offset ?? 0,
+        },
+      };
+      let count = 0;
+      while (true) {
+        // Preserve method binding for app methods like listWorkers
+        const res = await fn.call(this, args);
+        const pageData = Array.isArray(res?.data)
+          ? res.data
+          : Array.isArray(res)
+            ? res
+            : [];
+        if (!pageData.length) break;
+        for (const item of pageData) {
+          yield item;
+          count++;
+          if (max && count >= max) return;
+        }
+        const total = typeof res?.data?.total === "number"
+          ? res.data.total
+          : typeof res?.total === "number"
+            ? res.total
+            : undefined;
+        const limit = args.params.limit;
+        const hasMore = total !== undefined
+          ? count < total
+          : pageData.length === limit;
+        if (!hasMore) break;
+        args.params.offset += limit;
+      }
+    },
🧹 Nitpick comments (2)
components/workday/workday.app.mjs (2)

12-22: Defensive default for page in dynamic options to avoid NaN offsets

If page is ever undefined, page * DEFAULT_LIMIT becomes NaN, breaking pagination in the dropdowns. Default page to 0.

-      async options({ page }) {
+      async options({ page = 0 }) {
         const { data } = await this.listWorkers({
           params:

Apply the same change to supervisoryOrganizationId and jobChangeReasonId option loaders.

Also applies to: 29-40, 46-57


71-81: Allow caller headers while ensuring Authorization remains set

Currently, ...opts comes after headers, so callers can inadvertently overwrite the Authorization header entirely. If that’s not desired, merge headers explicitly to preserve Authorization and allow augmentation:

-      return axios($, {
-        url: `${this._baseUrl()}${path}`,
-        headers: {
-          Authorization: `Bearer ${this.$auth.oauth_access_token}`,
-        },
-        ...opts,
-      });
+      const { headers: userHeaders, ...rest } = opts ?? {};
+      return axios($, {
+        url: `${this._baseUrl()}${path}`,
+        headers: {
+          Authorization: `Bearer ${this.$auth.oauth_access_token}`,
+          ...(userHeaders || {}),
+        },
+        ...rest,
+      });

If overriding Authorization is needed in some calls, keep the current behavior. Otherwise, merging prevents accidental 401s.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6195fc1 and 0ae1229.

📒 Files selected for processing (2)
  • components/workday/sources/common/base-polling.mjs (1 hunks)
  • components/workday/workday.app.mjs (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • components/workday/sources/common/base-polling.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). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Lint Code Base
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
🔇 Additional comments (2)
components/workday/workday.app.mjs (2)

114-121: Verify path casing for payslips endpoint

Workday endpoints can be case-sensitive. Confirm that /paySlips is the correct path segment for the tenant API; some implementations use lowercase (/payslips).

Want me to check other Workday actions/sources for consistent usage?


59-65: maxResults propDefinition is consumed by Workday actions
The maxResults definition in components/workday/workday.app.mjs is referenced by the following action/trigger modules—they all pass this.maxResults into the app’s paginate helper, so it should remain as-is:

  • components/workday/actions/list-worker-payslips/list-worker-payslips.mjs (max: this.maxResults)
  • components/workday/actions/search-workers/search-workers.mjs (max: this.maxResults)
  • components/workday/actions/list-supervisory-organizations/list-supervisory-organizations.mjs (max: this.maxResults)
  • components/workday/actions/list-organization-types/list-organization-types.mjs (max: this.maxResults)

No changes required here.

Copy link
Collaborator

@luancazarine luancazarine left a 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!

@vunguyenhung vunguyenhung merged commit 5d5fd71 into master Aug 13, 2025
11 checks passed
@vunguyenhung vunguyenhung deleted the issue-18012 branch August 13, 2025 23:56
@coderabbitai coderabbitai bot mentioned this pull request Oct 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Triggers and Actions] Workday

4 participants