Skip to content

feat: implement shared element transitions, responsive event card fee…#648

Open
Bhavikapatel06 wants to merge 4 commits into
roshankumar0036singh:mainfrom
Bhavikapatel06:feature/shared-element-and-responsive-ui
Open

feat: implement shared element transitions, responsive event card fee…#648
Bhavikapatel06 wants to merge 4 commits into
roshankumar0036singh:mainfrom
Bhavikapatel06:feature/shared-element-and-responsive-ui

Conversation

@Bhavikapatel06

@Bhavikapatel06 Bhavikapatel06 commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Description

This PR implements three major frontend improvements to the Uni-Event platform:

  1. Shared Element Transitions: Migrated stack navigation from @react-navigation/stack to @react-navigation/native-stack and integrated Reanimated sharedTransitionTag for event cover images. When a user taps an event card in the feed, the banner image smoothly scales ("grows") into the header of the details screen. Back navigation smoothly scales it down ("shrinks") back into place.
  2. Responsive Event Card Feed Grid: Integrated the useWindowDimensions hook in UserFeed.js to group events dynamically into multi-column rows. The feed shows 1 column on mobile (<768px), 2 columns on tablet (>=768px), and 3 columns on desktop/web (>=1024px) with robust flexbox spacing. We also moved recommended events into the main list directly and styled a yellow ⭐ TOP PICK badge directly on those cards.
  3. Slim & Centered Custom Bottom Tab Bar: Polished the floating navigation bar in CustomTabBar.js by centering it with a maxWidth: 500 layout constraint on desktop. We reduced vertical padding, item container dimensions, icon sizing (size 22), and floating distance (bottom: 12) to make it look exceptionally slim and premium. Added dynamic dark mode support for Android platforms.

Fixes # 86

Type of change

  • New feature (non-breaking change which adds functionality)

How Has This Been Tested?

  • Test A: Jest Unit Test Suite: Ran frontend tests locally (including EventCard.test.js which uses native stack mocks). Verified all 146 unit tests passed successfully.
  • Test B: Responsive Design and Navigation Check: Launched the application on local Metro server and verified visual layouts at standard web width (1366px). Confirmed that the 3-column card grid laid out horizontally side-by-side, that the ⭐ TOP PICK badge rendered inside recommended cards, and that the floating bottom tab bar stayed slim, centered, and fully functional.

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Summary by CodeRabbit

  • New Features
    • Added shared element transitions for event banner imagery
    • Event feed now supports responsive multi-column layout
    • Attendance streak check-ins now award points
  • Improvements
    • Switched to native stack navigation
    • Redesigned recommendations within the event grid
    • Refreshed custom tab bar styling for light/dark and Android
  • Backend Enhancements
    • Updated analytics backfills, show-up ratios time window, branch participation aggregation, and inactivity detection
    • Adjusted feedback scoring rules, error logging behavior, rate limiting flow, and cleanup/update handling

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9f1b8a99-db3d-4111-96ca-a585eee35851

📥 Commits

Reviewing files that changed from the base of the PR and between d54967a and c3dd5f1.

📒 Files selected for processing (1)
  • app/src/screens/EventDetail.js
💤 Files with no reviewable changes (1)
  • app/src/screens/EventDetail.js

📝 Walkthrough

Walkthrough

The PR migrates the app's stack navigator to @react-navigation/native-stack, adds shared element transitions for event banner images between EventCard and EventDetail, converts UserFeed to a responsive multi-column grid with per-card recommendation marking, and reskins CustomTabBar. On the backend, it refactors the rate limiter to execute side effects inside transactions, consolidates the audit log trigger, adds attendance points rewards, adjusts Firestore data logic across several functions, cleans up error handling patterns, adds two emulator seed scripts, and updates CI workflows to use npm install --no-audit --no-fund.

Changes

App UI and Navigation

Layer / File(s) Summary
Native stack navigator migration
app/package.json, app/App.js
Adds @react-navigation/native-stack@^6.11.0 as a dependency and replaces createStackNavigator with createNativeStackNavigator for the Stack instance.
Shared element transitions for event banners
app/src/components/EventCard.js, app/src/screens/EventDetail.js, app/src/components/__tests__/EventCard.test.js
Both EventCard and EventDetail import Animated from react-native-reanimated, replace static image components with Animated.Image, and attach a sharedTransitionTag keyed on event.id. The EventCard test mocks reanimated.
UserFeed responsive multi-column grid and per-card recommendations
app/src/screens/UserFeed.js
Derives numColumns from window width, chunks displayList into grouped row arrays, rewrites the item renderer to render columns per row with empty-cell padding, computes a recommendedIds Set for per-card marking, removes the horizontal recommendations rail, and adds row/column layout styles.
CustomTabBar platform-adaptive styling
app/src/components/CustomTabBar.js
Applies platform- and dark-mode-specific background color to the content container, reduces icon size from 24 to 22, tightens container dimensions, adjusts blur container border-radius and shadow, and removes the old Android background fallback.

Cloud Functions Logic and Tooling

Layer / File(s) Summary
Rate limiter: side effects moved inside transaction
cloud-functions/lib/utils/rateLimiter.js
Returns the runTransaction promise directly; on daily-limit exceedance, suspicious-activity logging and admin email sending now execute inside the transaction before returning the 429 response; the post-transaction shouldAlert/alertData side-effect block is removed.
Audit log: remove subcollection trigger and inline handler
cloud-functions/lib/auditLog.js
Removes exports.auditLogSubcollection and inlines the shared handler logic directly into the exports.auditLog .onWrite() callback, preserving recursion-guard, action-type, userId, and log-entry construction.
Attendance points, club reputation, branch report, and show-up ratios
cloud-functions/lib/attendanceStreak.js, cloud-functions/lib/clubReputation.js, cloud-functions/lib/branchReport.js, cloud-functions/lib/computeShowUpRatios.js, cloud-functions/lib/permanentCleanup.js
Adds ATTENDANCE_POINTS_REWARD = 10 incremented on streak check-in; widens clubRating to any positive finite number and changes clubId precedence; restricts branch attendance updates to pre-existing stats entries; removes the 12-month lower-bound from past-events query; switches owner eventCount decrement from batch.set with merge to batch.update.
Backfill event analytics: error propagation and dotted field path
cloud-functions/lib/backfillEventAnalytics.js
Removes the per-document try/catch so individual failures propagate, and switches stats.totalRegistrations writes to a dotted Firestore field path.
Error handling, logging, and inactive users cleanup
cloud-functions/lib/inactiveUsers.js, cloud-functions/lib/onEventDelete.js, cloud-functions/lib/logger.js, cloud-functions/lib/dedicatedStudentCertificate.js
Removes skip-update optimization in detectInactiveUsers and suppresses commit-error re-throw; removes try/catch from onEventDelete reminder cleanup; replaces guarded JSON.stringify in logError with a direct call; logs full unmasked userId in certificate messages.
Emulator seed scripts and project config
cloud-functions/seed-events.js, scripts/seed-early-bird-event.mjs, cloud-functions/package.json
Adds two new emulator seed scripts (admin SDK batch and client SDK single-event); updates the serve script project to demo-no-project.
CI and PR validation workflow updates
.github/workflows/ci.yml, .github/workflows/pr-validation.yml
Updates dependency installation to use npm install --no-audit --no-fund instead of npm ci for both app and cloud-functions in CI and PR validation jobs; PR validation trigger now targets the main branch.

Sequence Diagram(s)

sequenceDiagram
  participant UserFeed
  participant EventCard
  participant NativeStack
  rect rgba(99, 179, 237, 0.5)
    Note over UserFeed,EventCard: Shared Transition Setup
    UserFeed->>EventCard: renders Animated.Image sharedTransitionTag=event.id
  end
  EventCard->>NativeStack: navigate to EventDetail
  rect rgba(154, 230, 180, 0.5)
    Note over NativeStack: Native Stack Transition
    NativeStack->>NativeStack: apply shared element transition
  end
Loading
sequenceDiagram
  participant Caller
  participant checkAndUpdateRateLimit
  participant Firestore
  participant logger
  participant emailSender
  Caller->>checkAndUpdateRateLimit: call(userId, isEventCreation=true)
  checkAndUpdateRateLimit->>Firestore: runTransaction(tx)
  Firestore->>Firestore: read rate limit doc
  alt daily limit exceeded
    Firestore->>logger: logEntry(suspicious activity) [inside tx]
    Firestore->>emailSender: sendEmail(admin alert) [inside tx]
    Firestore-->>checkAndUpdateRateLimit: return 429 response
  else within limit
    Firestore->>Firestore: increment counter
    Firestore-->>checkAndUpdateRateLimit: return 200 response
  end
  checkAndUpdateRateLimit-->>Caller: response
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~65 minutes

Possibly related PRs

  • roshankumar0036singh/Uni-Event#105: Modifies app/src/components/EventCard.js banner image rendering—this PR switches to Animated.Image with sharedTransitionTag, while the related PR adds shimmer placeholder logic.
  • roshankumar0036singh/Uni-Event#619: Both PRs modify cloud-functions/lib/attendanceStreak.js to introduce the same ATTENDANCE_POINTS_REWARD = 10 constant and points field increment logic.
  • roshankumar0036singh/Uni-Event#516: Both PRs modify onEventFeedbackCreate in cloud-functions/lib/clubReputation.js, with overlapping changes to clubRating validation and clubId selection precedence.

Suggested labels

level:intermediate, type:design, type:refactor, type:testing, gssoc:approved

Suggested reviewers

  • roshankumar0036singh

Poem

🐰 Hoppity-hop, the stack goes native today,
Shared banners glide smoothly from card to detail's display.
Three columns of events dance left and right,
Cloud functions shed try/catch, now lean and light.
Seeds bloom in emulators, ready to play —
A rabbit approves this most wonderful day! 🥕

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title partially describes the PR, mentioning shared element transitions and responsive event cards, but is truncated and incomplete. Complete the title to fully capture all major changes: shared element transitions, responsive grid layout, and custom tab bar refinements.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
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

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.

@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: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/src/components/CustomTabBar.js (1)

70-80: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Increase effective touch target size for tab buttons.

On Line 70 and Lines 130-131, each tab is effectively 36x36, which is small for touch interaction and can cause missed taps. Keep the visual size, but expand the tappable area.

Proposed fix
                             <TouchableOpacity
                                 key={route.key}
                                 accessible={true}
                                 accessibilityRole="button"
                                 accessibilityState={isFocused ? { selected: true } : {}}
                                 accessibilityLabel={
                                     options.tabBarAccessibilityLabel || `${route.name} tab`
                                 }
                                 testID={options.tabBarTestID}
                                 onPress={onPress}
                                 style={styles.tabItem}
+                                hitSlop={{ top: 6, bottom: 6, left: 6, right: 6 }}
                             >
     tabItem: {
         alignItems: 'center',
         justifyContent: 'center',
-        height: 36,
-        width: 36,
+        height: 36,
+        width: 36,
     },

Also applies to: 127-131

🤖 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 `@app/src/components/CustomTabBar.js` around lines 70 - 80, The
TouchableOpacity component wrapping the tab buttons at line 70 and the similar
component at lines 127-131 has an effective touch target size of 36x36 pixels,
which is too small for reliable touch interaction. Add the hitSlop prop to the
TouchableOpacity component to expand the tappable area in all directions (top,
bottom, left, right) while keeping the visual size unchanged. This will make the
tab buttons easier to tap for users without affecting the UI appearance.
🧹 Nitpick comments (2)
cloud-functions/seed-events.js (1)

65-67: ⚡ Quick win

Make seed IDs deterministic for repeatable local runs.

Using doc() creates new IDs every run, so local datasets grow with duplicates and make manual QA less reliable. Prefer fixed IDs (or an upsert strategy) for stable emulator state.

🤖 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 `@cloud-functions/seed-events.js` around lines 65 - 67, The current
implementation in the mockEvents.forEach loop uses db.collection('events').doc()
which generates random document IDs on every execution, causing duplicate
documents and unreliable emulator state. Replace the random ID generation by
either using fixed/deterministic IDs derived from the event data (such as a
unique property or hash) or implementing an upsert strategy. Ensure the ref
variable is assigned a consistent ID before calling batch.set(ref, event) so
that repeated seed runs maintain stable, non-duplicative data.
cloud-functions/lib/branchReport.js (1)

286-290: 💤 Low value

Attendance from unregistered branches is now silently ignored.

The change only increments attendance when a stats entry already exists (from registrations). Check-ins from users whose branch doesn't match any registered branch will be silently dropped.

This may be intentional to ensure attendanceRate doesn't exceed 100%, but it could also cause legitimate attendance to be uncounted if:

  • User's branch differs between registration and check-in
  • Branch name variants exist (e.g., "CS" vs "Computer Science")

If this behavior is intentional, consider adding a log for visibility when check-ins are skipped.

🤖 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 `@cloud-functions/lib/branchReport.js` around lines 286 - 290, The current code
in the statsByBranch block only increments attendance when a stats entry already
exists for the branch. This means check-ins from users whose branch doesn't have
a registered stats entry are silently dropped. To fix this, either create a new
stats entry for unregistered branches (following the same structure with
attendance initialized to 1 and events as a Set containing eventDoc.id) in an
else clause after the if (stats) block, or add a log statement to track when
check-ins from unregistered branches are skipped. This will either ensure all
legitimate attendance is counted or provide visibility into why some check-ins
are being ignored.
🤖 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 `@cloud-functions/lib/clubReputation.js`:
- Around line 117-118: The validation check for clubRating in the condition
around line 117-118 only enforces a lower bound by rejecting values <= 0, but
lacks an upper bound validation. This allows arbitrarily large rating values to
be accepted and inflated into reputation scores. Add an upper bound check to the
existing condition that also rejects clubRating values that exceed a reasonable
maximum threshold (such as 5 or 10), ensuring the function returns null for both
invalid low and invalid high values just as it currently does for the lower
bound.

In `@cloud-functions/lib/dedicatedStudentCertificate.js`:
- Around line 117-122: The console.log and console.warn statements in the
dedicatedStudentCertificate.js file are logging the full userId without masking,
which violates privacy/compliance requirements. To fix this, mask the userId in
all logging statements (in the console.log at line 117, console.warn at line
121, and the additional location at line 166) by using the pattern
userId.slice(0, 4) + '***' instead of the full userId. This will display only
the first 4 characters followed by asterisks, protecting user privacy while
still allowing enough information for debugging purposes.

In `@cloud-functions/lib/logger.js`:
- Around line 70-72: The unguarded JSON.stringify(error) call in the else if
block (where error is an object type) can throw on circular references, BigInt
values, or problematic toJSON() methods, causing the logError function itself to
crash. Wrap the JSON.stringify(error) assignment in a try/catch block, and
provide a safe fallback in the catch handler (such as using error.toString() or
a descriptive error message) to ensure the logging utility remains defensive and
never propagates exceptions.

In `@cloud-functions/lib/permanentCleanup.js`:
- Around line 67-69: The batch.update() call that decrements eventCount will
fail with NOT_FOUND if the owner document doesn't exist, preventing the event
deletion from completing. Before calling batch.update() on the ownerRef, first
fetch the owner document using ownerRef.get() to check if it exists, and only
include the batch.update() call with the eventCount increment if the owner
document snapshot exists. This ensures that orphaned events can still be cleaned
up even if the owner account has been deleted.

In `@cloud-functions/lib/utils/rateLimiter.js`:
- Around line 138-161: The logEntry and sendEmail side effects are currently
inside the Firestore transaction callback, which means they will execute
multiple times if the transaction is retried due to contention. Move both the
logEntry call and sendEmail call outside of the transaction to ensure they
execute only once after the transaction successfully completes. Restore the
previous pattern by setting flags or storing alert data during the transaction
(inside the callback), then executing the actual side effects after the
transaction commits based on those flags, similar to how shouldAlert and
alertData were used before.

In `@cloud-functions/seed-events.js`:
- Around line 26-29: The seeded events are storing dates as ISO string formats
using toISOString(), but they should use Firestore-native timestamp types to
match production behavior and prevent type mismatches in tests. Replace the
toISOString() calls for startAt, endAt, and createdAt fields with Firestore's
native timestamp constructor (likely admin.firestore.Timestamp.fromDate() or
admin.firestore.Timestamp.now()), passing the Date objects directly instead of
converting them to strings. Apply this change to all instances mentioned in the
comment, including the ones around lines 49-52 as well.

In `@scripts/seed-early-bird-event.mjs`:
- Around line 46-50: The date fields createdAt, startAt, and endAt are currently
being stored as ISO string representations by calling toISOString() on the date
objects. Instead, these fields should use Firestore-native Timestamp objects for
proper emulator parity with production. Replace the toISOString() calls for
createdAt, startAt, and endAt with Firestore's Timestamp class (typically
imported from the firebase-admin SDK) to create proper temporal values that
Firestore can recognize as native date types.

---

Outside diff comments:
In `@app/src/components/CustomTabBar.js`:
- Around line 70-80: The TouchableOpacity component wrapping the tab buttons at
line 70 and the similar component at lines 127-131 has an effective touch target
size of 36x36 pixels, which is too small for reliable touch interaction. Add the
hitSlop prop to the TouchableOpacity component to expand the tappable area in
all directions (top, bottom, left, right) while keeping the visual size
unchanged. This will make the tab buttons easier to tap for users without
affecting the UI appearance.

---

Nitpick comments:
In `@cloud-functions/lib/branchReport.js`:
- Around line 286-290: The current code in the statsByBranch block only
increments attendance when a stats entry already exists for the branch. This
means check-ins from users whose branch doesn't have a registered stats entry
are silently dropped. To fix this, either create a new stats entry for
unregistered branches (following the same structure with attendance initialized
to 1 and events as a Set containing eventDoc.id) in an else clause after the if
(stats) block, or add a log statement to track when check-ins from unregistered
branches are skipped. This will either ensure all legitimate attendance is
counted or provide visibility into why some check-ins are being ignored.

In `@cloud-functions/seed-events.js`:
- Around line 65-67: The current implementation in the mockEvents.forEach loop
uses db.collection('events').doc() which generates random document IDs on every
execution, causing duplicate documents and unreliable emulator state. Replace
the random ID generation by either using fixed/deterministic IDs derived from
the event data (such as a unique property or hash) or implementing an upsert
strategy. Ensure the ref variable is assigned a consistent ID before calling
batch.set(ref, event) so that repeated seed runs maintain stable,
non-duplicative data.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 417e6cc1-0356-42ed-bdc7-3e37b374088d

📥 Commits

Reviewing files that changed from the base of the PR and between 100ceb3 and de5d4b4.

⛔ Files ignored due to path filters (3)
  • app/package-lock.json is excluded by !**/package-lock.json
  • app/public/favicon.ico is excluded by !**/*.ico
  • cloud-functions/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (22)
  • app/App.js
  • app/package.json
  • app/src/components/CustomTabBar.js
  • app/src/components/EventCard.js
  • app/src/components/__tests__/EventCard.test.js
  • app/src/screens/EventDetail.js
  • app/src/screens/UserFeed.js
  • cloud-functions/lib/attendanceStreak.js
  • cloud-functions/lib/auditLog.js
  • cloud-functions/lib/backfillEventAnalytics.js
  • cloud-functions/lib/branchReport.js
  • cloud-functions/lib/clubReputation.js
  • cloud-functions/lib/computeShowUpRatios.js
  • cloud-functions/lib/dedicatedStudentCertificate.js
  • cloud-functions/lib/inactiveUsers.js
  • cloud-functions/lib/logger.js
  • cloud-functions/lib/onEventDelete.js
  • cloud-functions/lib/permanentCleanup.js
  • cloud-functions/lib/utils/rateLimiter.js
  • cloud-functions/package.json
  • cloud-functions/seed-events.js
  • scripts/seed-early-bird-event.mjs
💤 Files with no reviewable changes (1)
  • cloud-functions/lib/inactiveUsers.js

Comment thread cloud-functions/lib/clubReputation.js
Comment thread cloud-functions/lib/dedicatedStudentCertificate.js
Comment thread cloud-functions/lib/logger.js
Comment thread cloud-functions/lib/permanentCleanup.js
Comment thread cloud-functions/lib/utils/rateLimiter.js
Comment thread cloud-functions/seed-events.js Outdated
Comment thread scripts/seed-early-bird-event.mjs

@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

🤖 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 @.github/workflows/ci.yml:
- Around line 72-76: Replace the two instances of `npm install --no-audit
--no-fund` with `npm ci --no-audit --no-fund` in the GitHub Actions workflow.
The first occurrence is in the general install dependencies step and the second
is in the cloud-functions install dependencies step (working-directory:
./cloud-functions). Using `npm ci` instead of `npm install` ensures that the
exact versions specified in the lockfile are used, providing deterministic and
reproducible builds in the CI environment.

In @.github/workflows/pr-validation.yml:
- Around line 7-13: The workflow currently lacks explicit token permission
definitions, relying on default scopes which is a security risk. Add a
permissions section at the workflow level (before or after the jobs key) to
explicitly define minimal required permissions. For validation-only jobs like
validate-functions, set permissions to read-only by adding permissions with
contents set to read, or use permissions.read-only set to true. Apply the same
minimal permission settings to the other validation job mentioned in the comment
as well.
- Around line 21-23: Replace the npm install command with npm ci in the PR
validation workflow file for improved reproducibility and lockfile consistency.
Specifically, change the run command on line 21 from using npm install with the
--no-audit and --no-fund flags to simply use npm ci, which does not require or
support these flags. Apply the same change to line 38 as mentioned in the
comment review to ensure all PR validation jobs use npm ci consistently.
- Around line 14-20: Replace the unpinned version tags in the GitHub Actions
with immutable commit SHAs for both validate-cloud-functions and validate-app
jobs. In the validate-cloud-functions job, change actions/checkout@v6 to
actions/checkout@<commit-sha> and actions/setup-node@v6 to
actions/setup-node@<commit-sha>. Add persist-credentials: false to the checkout
action configuration. Repeat the same pinning and persist-credentials addition
for the validate-app job at lines 31 and 33. Use the appropriate commit SHAs for
each action version (these can be looked up from the GitHub Actions marketplace
for the specific versions).
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a6591490-bbff-414f-8970-a37feeb00890

📥 Commits

Reviewing files that changed from the base of the PR and between de5d4b4 and d54967a.

⛔ Files ignored due to path filters (3)
  • app/package-lock.json is excluded by !**/package-lock.json
  • cloud-functions/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • .github/workflows/pr-validation.yml
  • app/src/components/CustomTabBar.js
  • app/src/screens/UserFeed.js
  • cloud-functions/seed-events.js
💤 Files with no reviewable changes (1)
  • app/src/screens/UserFeed.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • cloud-functions/seed-events.js

Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/pr-validation.yml
Comment thread .github/workflows/pr-validation.yml
Comment thread .github/workflows/pr-validation.yml
@roshankumar0036singh

Copy link
Copy Markdown
Owner

resolev the coderabbit suggestions and the issues flagged by sonar

@Bhavikapatel06

Copy link
Copy Markdown
Contributor Author

Hi @roshankumar0036singh,

I have addressed the CodeRabbit suggestions and resolved the issues reported by Sonar. The changes have been pushed and all checks are passing. Kindly review the updated PR.

Thank you.

@roshankumar0036singh

Copy link
Copy Markdown
Owner

there are still 4 left

@sonarqubecloud

Copy link
Copy Markdown

@Bhavikapatel06

Copy link
Copy Markdown
Contributor Author

Hi @roshankumar0036singh,

I have addressed the CodeRabbit suggestions and resolved the issues reported by Sonar. all checks are passing. Kindly review the updated PR.Thank you.

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.

2 participants