Skip to content

Enhance feedback details and authentication handling#3547

Merged
Baalmart merged 9 commits into
stagingfrom
feedback-update
May 28, 2026
Merged

Enhance feedback details and authentication handling#3547
Baalmart merged 9 commits into
stagingfrom
feedback-update

Conversation

@OchiengPaul442

@OchiengPaul442 OchiengPaul442 commented May 28, 2026

Copy link
Copy Markdown
Contributor
  • Added app and screenshot_url fields to FeedbackSubmission interface.
  • Updated waitForNextAuthSession to validate expected access token.
  • Improved OAuth token handling in AuthProvider for better session management.
  • Refactored FeedbackDetailsContent to display additional feedback metadata and improve UI components.

Status of maturity (all need to be checked before merging):

  • I've tested this locally
  • I consider this code done

Screenshots (optional)

image

Summary by CodeRabbit

  • New Features

    • Reworked feedback composer with screenshot capture, upload, annotation, category-derived subject, rating, and preview
    • Enhanced feedback details view with clearer metadata, status/action chips, and star rating
    • Added App filter to feedback dashboard
    • Added group-switch overlay and smoother organization switch flow
    • Feedback submissions now accept optional app and screenshot fields
    • Loading overlay and toast UI improvements
  • Bug Fixes

    • More robust OAuth token handling during authentication bootstrap
    • Safer pending group-switch handling and timeouts
  • Chores

    • Added dedicated build-clean script and wired into prebuild

Review Change Stack

- Added app and screenshot_url fields to FeedbackSubmission interface.
- Updated waitForNextAuthSession to validate expected access token.
- Improved OAuth token handling in AuthProvider for better session management.
- Refactored FeedbackDetailsContent to display additional feedback metadata and improve UI components.
@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@OchiengPaul442, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 26 minutes and 8 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 07b3d233-2a83-4f49-b92a-eac6d3fcd26f

📥 Commits

Reviewing files that changed from the base of the PR and between aafccf5 and bafe9ba.

📒 Files selected for processing (1)
  • src/platform/src/shared/components/ui/toast.tsx
📝 Walkthrough

Walkthrough

Adds optional app and screenshot_url to feedback types, refactors feedback details UI and metadata handling, implements screenshot capture/annotation/upload and new FeedbackLauncher flows, enforces OAuth session token matching during handoff, introduces pending-group-switch state/overlay, and centralizes .next cleanup into a script.

Changes

Feedback System Enhancement

Layer / File(s) Summary
API type extension for feedback submission
src/platform/src/shared/types/api.ts
FeedbackSubmission and SubmitFeedbackRequest gain optional app and screenshot_url fields.
Feedback details imports and UI helpers
src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx
Adds next/image and icons, formatKeyLabel, and presentational components DetailPanel and SectionHeader.
Feedback details metadata and layout
src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx
Filters/formats/sorts metadata, computes overview/status/rating/heading subtitle, replaces heading with status badge+chips, and restructures page into Overview, Workflow, Message, Metadata, and Screenshot cards with conditional image preview or placeholder.
Feedback dashboard: App filter and UI
src/platform/src/app/(dashboard)/system/feedback/page.tsx
Introduces APP_OPTIONS, appFilter, includes app in filtering and status counts, updates SWR cache key, and expands filter layout to three columns with an App <Select>.
FeedbackLauncher imports, types and helpers
src/platform/src/modules/feedback/components/FeedbackLauncher.tsx
Updates imports/UI inputs, defines Rect type, adds screenshot/annotation helpers (file→dataURL, canvas→JPEG, flattenAnnotations) and category/subject helpers.
Screenshot annotator and component state
src/platform/src/modules/feedback/components/FeedbackLauncher.tsx
Adds ScreenshotAnnotator overlay (draw/undo/cancel/done) and reshapes FeedbackLauncher state for capture/upload/annotation/preview lifecycle.
Screenshot upload, submission flow and UI rendering
src/platform/src/modules/feedback/components/FeedbackLauncher.tsx
Uploads annotated screenshots to Cloudinary, builds sanitized metadata, submits via feedbackService.submitFeedback including screenshot_url, and replaces the dialog UI with capture/retake/upload/preview/remove controls and rating widget.
Auth provider: OAuth handoff and session token matching
src/platform/src/shared/providers/auth-provider.tsx
waitForNextAuthSession accepts expectedAccessToken; bootstrap normalizes/clears cached token on fresh handoff and waits for a session whose cached token matches the handoff token. Also removes unused dispatch/router and adds GroupSwitchOverlay to protected render tree.
Organization selector: pending switch dispatch
src/platform/src/shared/components/header/components/organization-selector.tsx
Dispatches startPendingGroupSwitch with destination path and startedAt before switching group context and navigating.
GroupSwitchOverlay component and timers
src/platform/src/shared/components/ui/group-switch-overlay.tsx
New client component that watches pending group switch and current route, clears pending state on match or after failsafe timeout, and renders LoadingOverlay while pending.
LoadingOverlay copy-aware render
src/platform/src/shared/components/ui/loading-overlay.tsx
LoadingOverlayProps gains title/description; renders a bordered card with copy when provided, otherwise the single-loader UI.
Toast refactor to ToastCard with progress-driven dismissal
src/platform/src/shared/components/ui/toast.tsx
Marks as client component, replaces left-stripe layout with ToastCard (icons, clamped duration, animated progress bar), and uses Sonner custom toasts with manual/progress-based dismissal.
UserDataFetcher import reorder and failure handling
src/platform/src/shared/providers/UserDataFetcher.tsx
Reorders imports and uses fetchedUser for normalization; on invalid normalization clears user without forcing groups reset.
Redux: pendingGroupSwitch state and selector
src/platform/src/shared/store/*
Adds pendingGroupSwitch to UserState, initializes it, adds startPendingGroupSwitch/clearPendingGroupSwitch reducers and actions, and exposes selectPendingGroupSwitch selector.
Build script .next cleanup consolidation
src/platform/package.json
Adds clean:next script to remove .next tolerant of EPERM/EBUSY; updates prebuild to run it.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant FeedbackLauncher
  participant Annotator as ScreenshotAnnotator
  participant Cloudinary
  participant FeedbackAPI as feedbackService.submitFeedback
  User->>FeedbackLauncher: open dialog, capture or upload image
  FeedbackLauncher->>Annotator: draw/highlight rectangles (optional)
  Annotator-->>FeedbackLauncher: flattened image (data URL / File)
  FeedbackLauncher->>Cloudinary: upload annotated image (POST)
  Cloudinary-->>FeedbackLauncher: returns screenshot_url
  FeedbackLauncher->>FeedbackAPI: submitFeedback(payload with screenshot_url)
  FeedbackAPI-->>FeedbackLauncher: confirmation
  FeedbackLauncher-->>User: show success/failure toast
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • Baalmart
  • Codebmk

Poem

A dialog to catch a captured scene,
rectangles highlight what once had been,
tokens matched to start the flow,
uploads hum and statuses show —
small fixes, clearer paths between.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Enhance feedback details and authentication handling' accurately captures the main focus of the changeset, which spans improvements to feedback UI/metadata display and auth session/token validation logic.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feedback-update

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • JIRA integration encountered authorization issues. Please disconnect and reconnect the integration in the CodeRabbit UI.

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.

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/package.json`:
- Line 6: The prebuild script still duplicates the inline cleanup command
instead of reusing the existing "clean:next" script; update the "prebuild"
script to call the "clean:next" script (e.g., invoke it via an npm script run)
rather than repeating the node:fs rmSync command so the cleanup logic is
centralized in the "clean:next" script; locate "prebuild" and replace the inline
removal invocation with a call to "clean:next".

In `@src/platform/src/app/`(dashboard)/system/feedback/[feedbackId]/page.tsx:
- Around line 132-142: The metadata mapping drops the original metadata key and
only keeps the formatted label, which can lead to duplicate React keys when
formatted labels collide; change the mapping that builds metadataEntries to
preserve the original key (e.g., store tuples like [key, formatKeyLabel(key),
String(value)] or [formatKeyLabel(key), String(value), key]) and then update any
destructuring/consumers (the code that currently uses formatKeyLabel(...) and
String(value) — referenced as formatKeyLabel and metadataEntries and the
subsequent map that renders rows) to use the preserved original key as the
unique React key while still displaying the formatted label.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 07597d6b-dba4-469a-a772-c4cb4ad1b244

📥 Commits

Reviewing files that changed from the base of the PR and between 53eccb1 and 43e6bce.

📒 Files selected for processing (4)
  • src/platform/package.json
  • src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx
  • src/platform/src/shared/providers/auth-provider.tsx
  • src/platform/src/shared/types/api.ts

Comment thread src/platform/package.json Outdated
Comment thread src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx Outdated
@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
src/platform/src/modules/feedback/components/FeedbackLauncher.tsx (2)

829-833: ⚡ Quick win

Consider logging the upload error for debugging purposes.

The catch block gracefully degrades by showing a warning and continuing submission—good UX. However, the error itself is discarded. Logging it (even just to console in development or a monitoring service in production) would help diagnose upload failures.

-        } catch {
+        } catch (uploadError) {
+          console.warn('Screenshot upload failed:', uploadError);
           toast.warning(
             'Screenshot upload failed',
             'Your feedback will still be submitted without the screenshot.'
           );
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/src/modules/feedback/components/FeedbackLauncher.tsx` around
lines 829 - 833, The catch block in FeedbackLauncher’s screenshot upload (inside
the try/catch around the upload call) swallows the error—update the catch to
accept the error parameter (e.g., catch (err)) and log it for debugging; call
console.error(err, 'Screenshot upload failed') or forward to the app’s
monitoring/logger (e.g., monitor.captureException(err)) before showing the
existing toast so failures are recorded while UX remains unchanged.

343-383: 💤 Low value

Consider adding touch event handlers for tablet users.

The annotator only handles mouse events. If tablet/touch device support matters for this admin tool, you'd need onTouchStart, onTouchMove, and onTouchEnd handlers with coordinate extraction from touch.clientX/clientY. That said, if this is desktop-focused, it's fine to defer.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/src/modules/feedback/components/FeedbackLauncher.tsx` around
lines 343 - 383, Add touch support by implementing onTouchStart, onTouchMove and
onTouchEnd handlers analogous to handleMouseDown/handleMouseMove/handleMouseUp:
extract coordinates from event.touches[0] (use clientX/clientY) or create a
helper getTouchPosition mirroring getPosition, call event.preventDefault(), set
startRef.current, setDrawing(true), and setCurrentRect on touch start; update
current rect on touch move using the same math as handleMouseMove; on touch end
compute final rect, push to setRects if big enough, clear startRef/currentRect
and setDrawing(false) like handleMouseUp; ensure you use the same unique symbols
(handleMouseDown, handleMouseMove, handleMouseUp, startRef, setCurrentRect,
setRects, setDrawing) so touch handlers integrate with the existing state logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/platform/src/modules/feedback/components/FeedbackLauncher.tsx`:
- Around line 829-833: The catch block in FeedbackLauncher’s screenshot upload
(inside the try/catch around the upload call) swallows the error—update the
catch to accept the error parameter (e.g., catch (err)) and log it for
debugging; call console.error(err, 'Screenshot upload failed') or forward to the
app’s monitoring/logger (e.g., monitor.captureException(err)) before showing the
existing toast so failures are recorded while UX remains unchanged.
- Around line 343-383: Add touch support by implementing onTouchStart,
onTouchMove and onTouchEnd handlers analogous to
handleMouseDown/handleMouseMove/handleMouseUp: extract coordinates from
event.touches[0] (use clientX/clientY) or create a helper getTouchPosition
mirroring getPosition, call event.preventDefault(), set startRef.current,
setDrawing(true), and setCurrentRect on touch start; update current rect on
touch move using the same math as handleMouseMove; on touch end compute final
rect, push to setRects if big enough, clear startRef/currentRect and
setDrawing(false) like handleMouseUp; ensure you use the same unique symbols
(handleMouseDown, handleMouseMove, handleMouseUp, startRef, setCurrentRect,
setRects, setDrawing) so touch handlers integrate with the existing state logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3d1a1eac-cbda-463c-8ea2-4f87fdde1228

📥 Commits

Reviewing files that changed from the base of the PR and between 43e6bce and 804907a.

📒 Files selected for processing (4)
  • src/platform/package.json
  • src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx
  • src/platform/src/modules/feedback/components/FeedbackLauncher.tsx
  • src/platform/src/shared/types/api.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/platform/src/shared/types/api.ts
  • src/platform/package.json
  • src/platform/src/app/(dashboard)/system/feedback/[feedbackId]/page.tsx

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
src/platform/src/shared/components/ui/group-switch-overlay.tsx (1)

76-79: ⚡ Quick win

Use a small overlay delay to reduce route-switch flash.

delayMs={0} can produce noticeable flashes on quick transitions; a short delay keeps the UX smoother.

💡 Suggested tweak
-      delayMs={0}
+      delayMs={120}

As per coding guidelines, "Avoid full-white loading flashes; prefer delayed overlays and subtle backdrops".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/src/shared/components/ui/group-switch-overlay.tsx` around lines
76 - 79, The LoadingOverlay currently uses delayMs={0}, which can cause visible
white flashes during quick route switches; update the LoadingOverlay component
usage (the instance rendering title={`Switching to
${pendingGroupSwitch.targetGroupName}`} and description) to use a small positive
delay (e.g., delayMs around 150-200) so the overlay only shows for slower
transitions and avoids flash—adjust the prop on the LoadingOverlay and keep the
title/description as-is.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/platform/src/shared/components/header/components/organization-selector.tsx`:
- Around line 34-36: The destinationPath construction can produce
'/org/undefined/dashboard' when selectedGroup.organizationSlug is missing;
update the logic in the code that sets destinationPath (currently using
isDefaultAirQoGroup(selectedGroup) and selectedGroup.organizationSlug) to first
check that selectedGroup.organizationSlug is truthy (and optionally non-empty)
before building `/org/${selectedGroup.organizationSlug}/dashboard`, and fall
back to '/user/home' (or another safe route) when the slug is absent or falsy;
reference the variables destinationPath, isDefaultAirQoGroup, and
selectedGroup.organizationSlug when making this guard and consider encoding the
slug if present.

In `@src/platform/src/shared/components/ui/group-switch-overlay.tsx`:
- Around line 51-54: The code returns early when startedAt is invalid and leaves
pendingGroupSwitch set, which can leave the overlay stuck; update the
invalid-startedAt branch to clear the pending state before returning—e.g., call
the existing clearPendingGroupSwitch() helper (or the setter like
setPendingGroupSwitch(null)/undefined) right before the return in
group-switch-overlay.tsx so pendingGroupSwitch is reset when
Number.isFinite(startedAt) is false.

In `@src/platform/src/shared/components/ui/toast.tsx`:
- Around line 257-261: The toast container div (role="alert",
aria-live="polite") uses a fixed min-w-[340px] which can overflow narrow
viewports; change the Tailwind class to make the minimum width apply only at sm
and up (e.g., replace min-w-[340px] with sm:min-w-[340px] or use min-w-0 +
sm:min-w-[340px]) on the element that has className="w-full min-w-[340px]
max-w-[560px]" so mobile screens can shrink the toast while preserving desktop
sizing.
- Around line 255-260: The wrapper rendered in sonnerToast.custom (the JSX
returned for toastId) currently uses role="alert" and aria-live="polite"; change
this to choose role and aria-live based on the toast type so only errors use
assertive alerts. Inside the custom renderer (the id => (...) function) read the
toast type (e.g., from the toast payload or sonner API) and set role={toastType
=== 'error' ? 'alert' : 'status'} and aria-live={toastType === 'error' ?
'assertive' : 'polite'} so success/info/warning toasts use a polite status
region while errors remain assertive alerts.

---

Nitpick comments:
In `@src/platform/src/shared/components/ui/group-switch-overlay.tsx`:
- Around line 76-79: The LoadingOverlay currently uses delayMs={0}, which can
cause visible white flashes during quick route switches; update the
LoadingOverlay component usage (the instance rendering title={`Switching to
${pendingGroupSwitch.targetGroupName}`} and description) to use a small positive
delay (e.g., delayMs around 150-200) so the overlay only shows for slower
transitions and avoids flash—adjust the prop on the LoadingOverlay and keep the
title/description as-is.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 10e422c1-aef8-4b72-9188-fe49aa8b2b5a

📥 Commits

Reviewing files that changed from the base of the PR and between 804907a and 0f22961.

📒 Files selected for processing (9)
  • src/platform/package.json
  • src/platform/src/shared/components/header/components/organization-selector.tsx
  • src/platform/src/shared/components/ui/group-switch-overlay.tsx
  • src/platform/src/shared/components/ui/loading-overlay.tsx
  • src/platform/src/shared/components/ui/toast.tsx
  • src/platform/src/shared/providers/UserDataFetcher.tsx
  • src/platform/src/shared/providers/auth-provider.tsx
  • src/platform/src/shared/store/selectors.ts
  • src/platform/src/shared/store/userSlice.ts

Comment thread src/platform/src/shared/components/header/components/organization-selector.tsx Outdated
Comment thread src/platform/src/shared/components/ui/group-switch-overlay.tsx
Comment thread src/platform/src/shared/components/ui/toast.tsx
Comment thread src/platform/src/shared/components/ui/toast.tsx Outdated
…and update Toast component accessibility roles
@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@Codebmk

Codebmk commented May 28, 2026

Copy link
Copy Markdown
Member

Feedback unrelated to the changes in the PR, when I use google sign on the preview, I am taken to staging and when I return to the deploy review link, it keeps taking me back to staging analytics so I cannot test with the deploy preview @OchiengPaul442

@Codebmk

Codebmk commented May 28, 2026

Copy link
Copy Markdown
Member

Is there already a way of sorting feedback by application ie sorting to view only vertex feedback or analytics feedback alone @OchiengPaul442 ?
image

@OchiengPaul442

Copy link
Copy Markdown
Contributor Author

Still investigating the cause of redirect on PR previews as for the second feedback thats noted, thanks. @Codebmk

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 (1)
src/platform/src/app/(dashboard)/system/feedback/page.tsx (1)

69-74: ⚡ Quick win

Avoid casing-mismatch risk only if backend varies feedback.app casing

The filter uses strict equality (feedback.app === appFilter) and APP_OPTIONS mixes casing ('Analytics' vs 'beacon'/'vertex'). However, the only submission path found sets app: FEEDBACK_APP_NAME, and FEEDBACK_APP_NAME is hard-coded to 'Analytics', with no other submitFeedback call sites setting app to beacon/vertex. So the current client submission flow shouldn’t hit a casing-based miss for Analytics.

If the backend can persist feedback.app with different casing (e.g., from other producers), normalizing for comparison is still a safe hardening—without changing the option values.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/src/app/`(dashboard)/system/feedback/page.tsx around lines 69 -
74, The app filter risks casing mismatches because APP_OPTIONS contains
mixed-case labels while feedback.app may vary; update the filter that currently
uses strict equality (feedback.app === appFilter) to compare case-insensitively
by normalizing both sides (e.g., (feedback.app || '').toLowerCase() ===
(appFilter || '').toLowerCase()), leaving APP_OPTIONS values unchanged;
reference symbols: APP_OPTIONS, feedback.app, appFilter, FEEDBACK_APP_NAME, and
any submitFeedback call sites to ensure undefined/null safety when normalizing.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/platform/src/app/`(dashboard)/system/feedback/page.tsx:
- Around line 69-74: The app filter risks casing mismatches because APP_OPTIONS
contains mixed-case labels while feedback.app may vary; update the filter that
currently uses strict equality (feedback.app === appFilter) to compare
case-insensitively by normalizing both sides (e.g., (feedback.app ||
'').toLowerCase() === (appFilter || '').toLowerCase()), leaving APP_OPTIONS
values unchanged; reference symbols: APP_OPTIONS, feedback.app, appFilter,
FEEDBACK_APP_NAME, and any submitFeedback call sites to ensure undefined/null
safety when normalizing.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9c5c512a-df23-4e12-849a-6c6d31f3ee9c

📥 Commits

Reviewing files that changed from the base of the PR and between 0f22961 and aafccf5.

📒 Files selected for processing (4)
  • src/platform/src/app/(dashboard)/system/feedback/page.tsx
  • src/platform/src/shared/components/header/components/organization-selector.tsx
  • src/platform/src/shared/components/ui/group-switch-overlay.tsx
  • src/platform/src/shared/components/ui/toast.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/platform/src/shared/components/header/components/organization-selector.tsx
  • src/platform/src/shared/components/ui/group-switch-overlay.tsx

@github-actions

Copy link
Copy Markdown
Contributor

New azure analytics_platform changes available for preview here

@Baalmart
Baalmart merged commit c610871 into staging May 28, 2026
19 of 20 checks passed
@Baalmart
Baalmart deleted the feedback-update branch May 28, 2026 12:58
@Baalmart Baalmart mentioned this pull request May 28, 2026
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants