Skip to content

Conversation

@dougfabris
Copy link
Member

@dougfabris dougfabris commented Dec 2, 2025

Proposed changes (including videos or screenshots)

Centralize the usage of the getCustomFields endpoint in a single hook

Issue(s)

Steps to test or reproduce

Further comments

CORE-1442

Summary by CodeRabbit

  • New Features

    • Added a metadata query for livechat custom fields to support scoped (visitor/room) metadata retrieval.
  • Refactor

    • Centralized custom-fields data fetching across omnichannel components, replacing redundant hooks with a single query hook.
    • Simplified rendering logic so custom fields display based on available data (visibility checks consolidated).

✏️ Tip: You can customize this high-level summary in your review settings.

@dionisio-bot
Copy link
Contributor

dionisio-bot bot commented Dec 2, 2025

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is targeting the wrong base branch. It should target 7.14.0, but it targets 7.13.0

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link

changeset-bot bot commented Dec 2, 2025

⚠️ No Changeset found

Latest commit: f15acde

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 2, 2025

Walkthrough

Centralizes omnichannel livechat custom-fields fetching and query keys: introduces useCustomFieldsQuery, adds customFieldsMetadata(scope) query key, removes duplicate hooks, and updates components/utilities to use the centralized hook and keys.

Changes

Cohort / File(s) Summary
Query Key Centralization
apps/meteor/client/lib/queryKeys.ts
Added customFieldsMetadata(scope: 'visitor' | 'room') to omnichannelQueryKeys.livechat.
New centralized hook
apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts
Added useCustomFieldsQuery which fetches /v1/livechat/custom-fields via React Query using omnichannel query keys.
Removed duplicate hooks
apps/meteor/client/views/omnichannel/contactInfo/hooks/useCustomFieldsQuery.ts, apps/meteor/client/views/omnichannel/currentChats/hooks/useAllCustomFields.tsx
Deleted older hook implementations that duplicated custom-fields fetching.
Hook/type adjustments
apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts
Switched to typed ILivechatCustomField[] and updated import path.
Components switched to new hook
apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx, apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx, apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx
Replaced direct endpoint/useQuery calls with useCustomFieldsQuery() usage.
Standardized cache invalidation keys
apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx, apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx
Replaced literal query keys with omnichannelQueryKeys.livechat.customFields() for invalidation.
Metadata hook & formatter updates
apps/meteor/client/views/omnichannel/directory/hooks/useCustomFieldsMetadata.tsx, apps/meteor/client/views/omnichannel/directory/utils/formatCustomFieldsMetadata.tsx
useCustomFieldsQuery used as data source; formatCustomFieldsMetadata now accepts `ILivechatCustomField[]
Component refactor
apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
Replaced endpoint-based custom-field fetching with useValidCustomFields(livechatData) and simplified rendering logic (removed permission gating).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–30 minutes

  • Pay attention to: query key naming/consistency in queryKeys.ts and all invalidateQueries usages.
  • Verify data shape remains data?.customFields across consumers.
  • Check type changes in formatCustomFieldsMetadata and useValidCustomFields for downstream compatibility.

Possibly related PRs

Suggested labels

stat: ready to merge, stat: QA assured

Suggested reviewers

  • tassoevan
  • sampaiodiego
  • ggazzo

Poem

🐰 I hopped through code to tidy the trails,
one hook to fetch where many once failed.
Keys aligned, duplicates gone,
fields now fetched from dusk to dawn.
A carrot for tests—merge when it sails!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR changes do not align with CORE-1442's stated objective of assessing impact and mitigating friction from removing the Current Chats Panel. Clarify the relationship between this refactoring and CORE-1442, or link to the appropriate issue if the refactoring is part of a separate technical debt effort.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately describes the main refactoring objective: consolidating custom fields data retrieval through a centralized useCustomFieldsQuery hook.
Out of Scope Changes check ✅ Passed The PR introduces a new centralized hook and updates multiple components, but all changes are directly related to consolidating custom fields queries as described in the title.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/unify-customFields-query

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 2ac5ec5 and 3917f1b.

📒 Files selected for processing (1)
  • apps/meteor/client/views/omnichannel/directory/hooks/useCustomFieldsMetadata.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/meteor/client/views/omnichannel/directory/hooks/useCustomFieldsMetadata.tsx
⏰ 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: 📦 Build Packages
  • GitHub Check: CodeQL-Build
  • GitHub Check: CodeQL-Build

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@dougfabris dougfabris added this to the 7.14.0 milestone Dec 2, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Dec 2, 2025

📦 Docker Image Size Report

📈 Changes

Service Current Baseline Change Percent
sum of all images 1.2GiB 1.2GiB +12MiB
rocketchat 359MiB 347MiB +12MiB
omnichannel-transcript-service 132MiB 132MiB +315B
queue-worker-service 132MiB 132MiB -225B
ddp-streamer-service 126MiB 126MiB -376B
account-service 113MiB 113MiB -145B
stream-hub-service 111MiB 111MiB +496B
authorization-service 111MiB 111MiB +904B
presence-service 111MiB 111MiB -826B

📊 Historical Trend

---
config:
  theme: "dark"
  xyChart:
    width: 900
    height: 400
---
xychart
  title "Image Size Evolution by Service (Last 30 Days + This PR)"
  x-axis ["11/15 22:28", "11/16 01:28", "11/17 23:50", "11/18 22:53", "11/19 23:02", "11/21 16:49", "11/24 17:34", "11/27 22:32", "11/28 19:05", "12/01 23:01", "12/02 21:57", "12/03 19:10", "12/03 20:15 (PR)"]
  y-axis "Size (GB)" 0 --> 0.5
  line "account-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "authorization-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "ddp-streamer-service" [0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12]
  line "omnichannel-transcript-service" [0.14, 0.14, 0.14, 0.14, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13]
  line "presence-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
  line "queue-worker-service" [0.14, 0.14, 0.14, 0.14, 0.14, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13]
  line "rocketchat" [0.36, 0.36, 0.35, 0.35, 0.35, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.35]
  line "stream-hub-service" [0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11]
Loading

Statistics (last 12 days):

  • 📊 Average: 1.5GiB
  • ⬇️ Minimum: 1.2GiB
  • ⬆️ Maximum: 1.6GiB
  • 🎯 Current PR: 1.2GiB
ℹ️ About this report

This report compares Docker image sizes from this build against the develop baseline.

  • Tag: pr-37674
  • Baseline: develop
  • Timestamp: 2025-12-03 20:15:12 UTC
  • Historical data points: 12

Updated: Wed, 03 Dec 2025 20:15:12 GMT

@dougfabris dougfabris force-pushed the refactor/unify-customFields-query branch from 0a47bbc to 0f22d21 Compare December 2, 2025 20:11
@dougfabris dougfabris force-pushed the refactor/unify-customFields-query branch from 4d99f18 to 2ac5ec5 Compare December 2, 2025 22:10
@codecov
Copy link

codecov bot commented Dec 2, 2025

Codecov Report

❌ Patch coverage is 85.71429% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.78%. Comparing base (dc51116) to head (f15acde).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #37674      +/-   ##
===========================================
- Coverage    68.78%   68.78%   -0.01%     
===========================================
  Files         3363     3362       -1     
  Lines       114202   114188      -14     
  Branches     20617    20615       -2     
===========================================
- Hits         78556    78546      -10     
+ Misses       33551    33545       -6     
- Partials      2095     2097       +2     
Flag Coverage Δ
e2e 57.23% <85.71%> (+<0.01%) ⬆️
e2e-api 42.20% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dougfabris dougfabris marked this pull request as ready for review December 2, 2025 23:34
@dougfabris dougfabris requested a review from a team as a code owner December 2, 2025 23:34
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: 1

🧹 Nitpick comments (1)
apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx (1)

6-6: Centralizing custom-field visibility via useValidCustomFields looks good; confirm data shape and consider string coercion

Wiring ChatInfo to useValidCustomFields(livechatData) and rendering customFieldEntries through <CustomField> aligns this panel with the existing contact-info behavior and removes duplicated fetch/visibility logic, which is a solid refactor.

Two points to double‑check:

  • useValidCustomFields currently expects the “user custom fields” shape and applies visitor‑scope + view-livechat-room-customfields permission checks. Please confirm that livechatData carries the same semantics you intend to display here (e.g., that you’re not dropping room‑scope-only fields that were previously shown).
  • At render time you do value as string; if livechatData can contain non‑string values, consider normalizing with String(value) to avoid passing non‑string values into CustomField at runtime while keeping types honest.

Also applies to: 17-17, 66-66, 164-165

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 355d26d and 2ac5ec5.

📒 Files selected for processing (13)
  • apps/meteor/client/lib/queryKeys.ts (1 hunks)
  • apps/meteor/client/views/omnichannel/contactInfo/hooks/useCustomFieldsQuery.ts (0 hunks)
  • apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts (1 hunks)
  • apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx (2 hunks)
  • apps/meteor/client/views/omnichannel/currentChats/hooks/useAllCustomFields.tsx (0 hunks)
  • apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx (3 hunks)
  • apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx (2 hunks)
  • apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx (2 hunks)
  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx (4 hunks)
  • apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx (3 hunks)
  • apps/meteor/client/views/omnichannel/directory/hooks/useCustomFieldsMetadata.tsx (2 hunks)
  • apps/meteor/client/views/omnichannel/directory/utils/formatCustomFieldsMetadata.tsx (1 hunks)
  • apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (1 hunks)
💤 Files with no reviewable changes (2)
  • apps/meteor/client/views/omnichannel/currentChats/hooks/useAllCustomFields.tsx
  • apps/meteor/client/views/omnichannel/contactInfo/hooks/useCustomFieldsQuery.ts
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation

Files:

  • apps/meteor/client/views/omnichannel/directory/hooks/useCustomFieldsMetadata.tsx
  • apps/meteor/client/lib/queryKeys.ts
  • apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx
  • apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx
  • apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts
  • apps/meteor/client/views/omnichannel/directory/utils/formatCustomFieldsMetadata.tsx
  • apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts
  • apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx
  • apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx
  • apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx
  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
🧠 Learnings (5)
📚 Learning: 2025-12-02T22:23:49.554Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 37654
File: apps/meteor/client/hooks/useAppSlashCommands.ts:32-38
Timestamp: 2025-12-02T22:23:49.554Z
Learning: In apps/meteor/client/hooks/useAppSlashCommands.ts, the `data?.forEach((command) => slashCommands.add(command))` call during render is intentional. The query is configured with `structuralSharing: false` to prevent React Query from keeping stable data references, and `slashCommands.add` is idempotent, so executing on every render is acceptable and ensures the command registry stays current.

Applied to files:

  • apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx
📚 Learning: 2025-11-27T17:56:26.050Z
Learnt from: MartinSchoeler
Repo: RocketChat/Rocket.Chat PR: 37557
File: apps/meteor/client/views/admin/ABAC/AdminABACRooms.tsx:115-116
Timestamp: 2025-11-27T17:56:26.050Z
Learning: In Rocket.Chat, the GET /v1/abac/rooms endpoint (implemented in ee/packages/abac/src/index.ts) only returns rooms where abacAttributes exists and is not an empty array (query: { abacAttributes: { $exists: true, $ne: [] } }). Therefore, in components consuming this endpoint (like AdminABACRooms.tsx), room.abacAttributes is guaranteed to be defined for all returned rooms, and optional chaining before calling array methods like .join() is sufficient without additional null coalescing.

Applied to files:

  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
📚 Learning: 2025-09-25T09:59:26.461Z
Learnt from: Dnouv
Repo: RocketChat/Rocket.Chat PR: 37057
File: packages/apps-engine/src/definition/accessors/IUserRead.ts:23-27
Timestamp: 2025-09-25T09:59:26.461Z
Learning: AppUserBridge.getUserRoomIds in apps/meteor/app/apps/server/bridges/users.ts always returns an array of strings (mapping subscription documents to room IDs), never undefined, even when user has no room subscriptions.

Applied to files:

  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
📚 Learning: 2025-09-25T09:59:26.461Z
Learnt from: Dnouv
Repo: RocketChat/Rocket.Chat PR: 37057
File: packages/apps-engine/src/definition/accessors/IUserRead.ts:23-27
Timestamp: 2025-09-25T09:59:26.461Z
Learning: AppUserBridge.getUserRoomIds in apps/meteor/app/apps/server/bridges/users.ts always returns an array of strings by mapping subscription documents to room IDs, never undefined, even when user has no room subscriptions.

Applied to files:

  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
📚 Learning: 2025-11-04T16:49:19.107Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37377
File: apps/meteor/ee/server/hooks/federation/index.ts:86-88
Timestamp: 2025-11-04T16:49:19.107Z
Learning: In Rocket.Chat's federation system (apps/meteor/ee/server/hooks/federation/), permission checks follow two distinct patterns: (1) User-initiated federation actions (creating rooms, adding users to federated rooms, joining from invites) should throw MeteorError to inform users they lack 'access-federation' permission. (2) Remote server-initiated federation events should silently skip/ignore when users lack permission. The beforeAddUserToRoom hook only executes for local user-initiated actions, so throwing an error there is correct. Remote federation events are handled separately by the federation Matrix package with silent skipping logic.

Applied to files:

  • apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx
🧬 Code graph analysis (7)
apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx (1)
apps/meteor/client/lib/queryKeys.ts (1)
  • omnichannelQueryKeys (30-85)
apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx (1)
apps/meteor/client/lib/queryKeys.ts (1)
  • omnichannelQueryKeys (30-85)
apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (2)
packages/rest-typings/src/index.ts (1)
  • OperationResult (195-197)
apps/meteor/client/lib/queryKeys.ts (1)
  • omnichannelQueryKeys (30-85)
apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx (1)
apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (1)
  • useCustomFieldsQuery (8-11)
apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx (1)
apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (1)
  • useCustomFieldsQuery (8-11)
apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx (1)
apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (1)
  • useCustomFieldsQuery (8-11)
apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx (2)
apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts (1)
  • useValidCustomFields (12-25)
packages/livechat/src/components/Header/index.tsx (1)
  • CustomField (96-100)
🔇 Additional comments (9)
apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx (1)

31-31: LGTM! Query key centralization applied correctly.

The hard-coded query key has been successfully replaced with the centralized omnichannelQueryKeys.livechat.customFields(), improving maintainability and consistency across the codebase.

Also applies to: 90-90

apps/meteor/client/lib/queryKeys.ts (1)

53-53: LGTM! New query key follows established patterns.

The customFieldsMetadata function properly extends the query key hierarchy with a type-safe scope parameter, maintaining consistency with the existing architecture.

apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx (1)

7-7: LGTM! Cache invalidation updated correctly.

The query invalidation now uses the centralized query key, ensuring consistency with the new data-fetching architecture.

Also applies to: 22-22

apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts (1)

1-1: LGTM! Hook relocation and type improvements applied.

The import path correctly points to the new centralized hook location, and the type signature has been improved from generic Record<string, string | unknown>[] to the more specific ILivechatCustomField[], enhancing type safety.

Also applies to: 5-5, 7-7

apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx (1)

22-22: LGTM! Data fetching successfully migrated to centralized hook.

The component now uses useCustomFieldsQuery() instead of direct endpoint calls, simplifying the implementation while maintaining the same data access pattern.

Also applies to: 36-37

apps/meteor/client/views/omnichannel/hooks/useCustomFieldsQuery.ts (1)

1-11: LGTM! Clean centralized hook implementation.

This hook properly encapsulates the custom fields data fetching logic with correct typing and centralized query key management, forming a solid foundation for the refactor.

apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx (1)

3-4: LGTM! Migration to centralized hook completed successfully.

The component has been properly updated to use useCustomFieldsQuery() instead of direct endpoint calls. The addition of useRouter correctly supports the navigation functionality on lines 32-33.

Also applies to: 22-22, 26-26, 50-50

apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx (1)

31-31: useCustomFieldsQuery swap preserves behavior and types

Using useCustomFieldsQuery and destructuring { data: allCustomFields } aligns with the new shared hook’s return type, and downstream usages (hasCustomFields, CustomFieldsList) still consume allCustomFields?.customFields in the same way. No further changes needed here.

Also applies to: 141-141

apps/meteor/client/views/omnichannel/directory/utils/formatCustomFieldsMetadata.tsx (1)

1-1: Updated input type to ILivechatCustomField[] | undefined is safe

Accepting customFields: ILivechatCustomField[] | undefined combined with the early !customFields guard cleanly handles the undefined case while leaving the filtering/mapping behavior unchanged for valid arrays. This aligns the function with the new query result shape without altering output semantics.

Also applies to: 4-4

@dougfabris dougfabris added the stat: QA assured Means it has been tested and approved by a company insider label Dec 3, 2025
@dionisio-bot dionisio-bot bot added the stat: ready to merge PR tested and approved waiting for merge label Dec 3, 2025
@kodiakhq kodiakhq bot merged commit 2050d1d into develop Dec 3, 2025
85 of 88 checks passed
@kodiakhq kodiakhq bot deleted the refactor/unify-customFields-query branch December 3, 2025 20:32
@dougfabris dougfabris modified the milestones: 7.14.0, 8.0.0 Jan 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stat: QA assured Means it has been tested and approved by a company insider stat: ready to merge PR tested and approved waiting for merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants