-
Notifications
You must be signed in to change notification settings - Fork 5
RR-T39 Added skip button to onboarding page top and scroll. #81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThe pull request integrates Changerawr API for release notes posting, adds comprehensive accessibility text scaling validation documentation and test suite, and refactors the onboarding flow with button animations and improved navigation controls including skip functionality. Changes
Sequence Diagram(s)sequenceDiagram
participant CI as GitHub Actions
participant GH as GitHub API
participant RN as Release Notes<br/>Generator
participant CR as Changerawr API
participant GHR as GitHub Releases
Note over CI: Android Build Triggered
CI->>GH: Fetch PR Info (if PR event)
GH-->>CI: PR Number, Title, Body, URL
CI->>RN: Extract Release Notes
Note over RN: Check for Release Notes section<br/>in PR body or use git commits
RN-->>CI: RELEASE_NOTES.md content
CI->>GHR: Create Release<br/>(with release notes)
GHR-->>CI: Release created
CI->>CR: POST Release Data<br/>(version, date, notes, repo, commit, etc.)
Note over CR: version, date, notes, repository,<br/>commit, author, build URL
CR-->>CI: HTTP Response Status
Note over CI: Workflow Complete
sequenceDiagram
participant User
participant App as Onboarding Screen
participant State as State Management
participant Analytics
User->>App: View Onboarding
App->>Analytics: Track view
loop Scrolling Through Slides
User->>App: Scroll to slide
App->>State: Update currentIndex
App->>Analytics: Track slide change
end
alt Final Slide
App->>App: Animate buttonOpacity to 1
User->>App: Tap "Let's Get Started"
App->>Analytics: Track completion
else Earlier Slide
User->>App: Tap Skip Button
App->>Analytics: Track skip event
end
App->>State: Mark first-time as false
App->>App: Navigate to /login
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Areas requiring extra attention:
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (7)
.github/workflows/react-native-cicd.yml (2)
301-325: PR metadata + release notes extraction are robust, with a couple of edge cases to keep in mind
- The
actions/github-scriptstep correctly looks up PRs associated with the commit and exposespr_number,pr_title,pr_body, andpr_url. For commits associated with multiple PRs, you currently just takeprs[0]; if ordering ever matters (e.g., closed vs. open PRs), consider explicitly sorting/filtering bystateormerged_at.- The
PR_BODYenv expression nicely prefersgithub.event.pull_request.bodyon PR events and falls back tosteps.pr_info.outputs.pr_bodyfor pushes. Onworkflow_dispatchwithout a PR,steps.pr_infois empty so you correctly fall back to recentgit logentries.- The AWK-based extraction of the
## Release Notessection is neat and the fallback to the full PR body avoids empty notes. Just be aware this relies on the heading being exactly## Release Notes; other heading levels or variants (“### Release notes”) won’t be picked up.- Storing the computed
RELEASE_NOTESinto$GITHUB_ENVgives later steps a clean hook; this is fine as long as release notes remain reasonably small (well below env size limits).No blocking issues here; these are mostly future-proofing considerations.
Also applies to: 331-344, 360-363
377-428: Consider soft‑failing the ChangeraWR POST to avoid blocking releases on external outagesThe ChangeraWR POST step is well-structured: it JSON-escapes
RELEASE_NOTES.md, sends a clear payload, and checksHTTP_STATUSfor 2xx before proceeding. Right now, any non‑2xx response causes the entire job to fail (exit 1), which means a temporary outage or config issue in ChangeraWR will block otherwise-healthy Android releases.If you’d rather treat this as “nice to have” telemetry instead of a hard dependency, you could downgrade failures to a warning while keeping the logs:
- if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then - echo "✅ Successfully sent release notes to Changerawr (HTTP $HTTP_STATUS)" - cat /tmp/changerawr_response.json - else - echo "⚠️ Failed to send release notes to Changerawr (HTTP $HTTP_STATUS)" - cat /tmp/changerawr_response.json - exit 1 - fi + if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then + echo "✅ Successfully sent release notes to Changerawr (HTTP $HTTP_STATUS)" + cat /tmp/changerawr_response.json + else + echo "⚠️ Failed to send release notes to Changerawr (HTTP $HTTP_STATUS)" + cat /tmp/changerawr_response.json + # Optional: don't block the release on a telemetry failure + # exit 1 + fiAlso, this step currently relies on
jqbeing installed earlier in the job; if that earlier step is ever refactored or made conditional, it might be worth adding a lightweight jq check/install here as well.docs/accessibility-text-scaling-validation.md (1)
284-291: Add a language to the final fenced code block to satisfy markdownlintThe summary block of passing checks is fenced without a language, which triggers MD040. You can mark it as plain text:
-``` +```text ✅ Text Component - scales properly ✅ Heading Component - scales properly ✅ Button Component - scales properly ✅ No allowFontScaling={false} detected ✅ Handles font scale changes (0.8x to 3.0x) ✅ Layout integrity maintained at large scales -``` +```This keeps the formatting identical while resolving the lint warning.
src/__tests__/accessibility-text-scaling.test.tsx (1)
1-327: Solid, focused coverage for text scaling behavior
- The explicit
jest.mock('react-native', …)foruseWindowDimensionsplus thebeforeEachreset pattern is clean and keeps fontScale control local to this suite.- You cover a good range of fontScale values (0.8–3.0) for
Text,Heading, andButtonText, plus a “large scale layout integrity” scenario, which aligns nicely with the new documentation.- The “Components with Fixed Font Sizes” test acts as living documentation of a known limitation without asserting behavior beyond existence, which is appropriate.
If you ever want to tighten these tests further, you could add a couple of assertions on style props (e.g., checking
maxFontSizeMultiplieror verifying thatisTruncatedmaps to the expected props on the underlying component), but the current suite is already valuable and readable.src/app/onboarding.tsx (3)
35-62: Fixed font sizes in onboarding text work but undermine text‑scaling accessibility
styles.titleandstyles.description(Lines [47-57]) use fixedfontSizevalues (28 and 16), and theonboarding.tsxsection is explicitly called out in your new accessibility report as needing attention. On devices with large accessibility text settings, these fixed sizes won’t scale, which can conflict with your WCAG/text-scaling goals.Consider migrating these to Gluestack UI
Textvariants or a scalable approach:- title: { - fontSize: 28, - fontWeight: 'bold', - textAlign: 'center', - marginBottom: 16, - }, - description: { - fontSize: 16, - textAlign: 'center', - lineHeight: 24, - }, + title: { + fontWeight: 'bold', + textAlign: 'center', + marginBottom: 16, + }, + description: { + textAlign: 'center', + lineHeight: 24, + },and then rely on Gluestack sizing:
<Text size="2xl" style={[styles.title, { color: textColors.title }]}>{title}</Text> <Text size="md" style={[styles.description, { color: textColors.description }]}>{description}</Text>Alternatively, use a
normalizehelper based onPixelRatio.getFontScale()as suggested in your accessibility report. This aligns the implementation with the documented recommendations.Also applies to: 121-131
165-185: Clamp computed slide index inhandleScrollto avoid transient negative indices
handleScroll(Lines [165-185]) derives the slide index fromcontentOffset.x / widthand then updatescurrentIndexand analytics. During iOS/Android bounce effects,contentOffset.xcan go slightly negative, which would give you a negativeindex. That can temporarily leave no pagination dot highlighted and sendfromSlide/toSlidevalues that don’t map to real slides.You can cheaply guard against this by clamping:
- const handleScroll = (event: { nativeEvent: { contentOffset: { x: number } } }) => { - const index = Math.round(event.nativeEvent.contentOffset.x / width); + const handleScroll = (event: { nativeEvent: { contentOffset: { x: number } } }) => { + const rawIndex = Math.round(event.nativeEvent.contentOffset.x / width); + const index = Math.min(Math.max(rawIndex, 0), onboardingData.length - 1);The auto–
handleGetStartedpath for swiping past the last slide still won’t really trigger withpagingEnabledin practice, but the clamp keeps state and analytics consistent in all scroll edge cases.Also applies to: 203-208
7-8: Unify skip behavior and align with image/i18n guidelinesA few small points in this block:
- Use the project’s fast-image wrapper instead of RN
ImageYou already have
src/components/ui/image.tsxwrappingreact-native-fast-image. To follow the “use react-native-fast-image where appropriate” guideline, you can switch:-import { Dimensions, Image, ScrollView, StyleSheet } from 'react-native'; +import { Dimensions, ScrollView, StyleSheet } from 'react-native'; +import { Image } from '@/components/ui/image';The rest of the
<Image>usage (Line [228]) should work unchanged, while benefiting from caching/placeholders.
- Deduplicate skip logic and avoid inline handler
The top-right Skip uses
handleSkip(Lines [210-221]), but the bottom Skip (Lines [259-270]) inlines nearly identical analytics + navigation logic. This duplicates behavior and also introduces an inline function where your guidelines suggest using named callbacks.One option is to parameterize the skip location:
- const handleSkip = useCallback(() => { + const handleSkip = useCallback((skipLocation: 'top_right' | 'bottom_cta' = 'top_right') => { trackEvent('onboarding_skip_clicked', { timestamp: new Date().toISOString(), currentSlide: currentIndex, slideTitle: onboardingData[currentIndex]?.title || 'Unknown', - skipLocation: 'top_right', + skipLocation, }); setIsFirstTime(false); router.replace('/login'); - }, [trackEvent, currentIndex, setIsFirstTime, router]); + }, [trackEvent, currentIndex, setIsFirstTime, router]);Then:
- <Pressable onPress={handleSkip} className="absolute right-8 top-4" testID="skip-button-top"> + <Pressable onPress={() => handleSkip('top_right')} className="absolute right-8 top-4" testID="skip-button-top">- <Pressable - onPress={() => { - // Analytics: Track skip button clicks - trackEvent('onboarding_skip_clicked', { - timestamp: new Date().toISOString(), - currentSlide: currentIndex, - slideTitle: onboardingData[currentIndex]?.title || 'Unknown', - }); - - setIsFirstTime(false); - router.replace('/login'); - }} - > + <Pressable onPress={() => handleSkip('bottom_cta')} testID="skip-button-bottom">This keeps analytics consistent and makes future changes easier.
- User-facing copy and i18n
Strings like
'Skip','Next', and"Let's Get Started"are user-facing and currently hard-coded. When convenient, consider wrapping them witht()keys (e.g.,t('onboarding.skip')) to align with yourreact-i18nextguideline and make localization straightforward.None of these are blockers, but together they tighten the onboarding implementation and keep it aligned with your project conventions.
Also applies to: 223-287
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
.github/workflows/react-native-cicd.yml(4 hunks)docs/accessibility-text-scaling-validation.md(1 hunks)src/__tests__/accessibility-text-scaling.test.tsx(1 hunks)src/app/onboarding.tsx(5 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursorrules)
**/*.{ts,tsx}: Write concise, type-safe TypeScript code
Use camelCase for variable and function names
Use TypeScript for all components and favor interfaces for props and state
Avoid using any; use precise types
Use React Navigation for navigation and deep linking following best practices
Handle errors gracefully and provide user feedback
Implement proper offline support (caching, queueing, retries)
Use Expo SecureStore for sensitive data storage
Use zustand for state management
Use react-hook-form for form handling
Use react-query for data fetching and caching
Use react-native-mmkv for local storage
Use axios for API requests
**/*.{ts,tsx}: Write concise, type-safe TypeScript code
Use camelCase for variable and function names
Use TypeScript for all components, favoring interfaces for props and state
Avoid using any; strive for precise types
Ensure support for dark mode and light mode
Handle errors gracefully and provide user feedback
Use react-query for data fetching
Use react-i18next for internationalization
Use react-native-mmkv for local storage
Use axios for API requests
Files:
src/__tests__/accessibility-text-scaling.test.tsxsrc/app/onboarding.tsx
**/*.tsx
📄 CodeRabbit inference engine (.cursorrules)
**/*.tsx: Use functional components and React hooks instead of class components
Use PascalCase for React component names
Use React.FC for defining functional components with props
Minimize useEffect/useState usage and avoid heavy computations during render
Use React.memo for components with static props to prevent unnecessary re-renders
Optimize FlatList with removeClippedSubviews, maxToRenderPerBatch, and windowSize
Provide getItemLayout to FlatList when items have consistent size
Avoid anonymous functions in renderItem or event handlers; define callbacks with useCallback or outside render
Use gluestack-ui for styling where available from components/ui; otherwise, style via StyleSheet.create or styled-components
Ensure responsive design across screen sizes and orientations
Use react-native-fast-image for image handling instead of the default Image where appropriate
Wrap all user-facing text in t() from react-i18next for translations
Support dark mode and light mode in UI components
Use @rnmapbox/maps for maps or navigation features
Use lucide-react-native for icons directly; do not use the gluestack-ui icon component
Use conditional rendering with the ternary operator (?:) instead of &&
**/*.tsx: Use functional components and hooks over class components
Ensure components are modular, reusable, and maintainable
Ensure all components are mobile-friendly, responsive, and support both iOS and Android
Use PascalCase for component names
Utilize React.FC for defining functional components with props
Minimize useEffect, useState, and heavy computations inside render
Use React.memo for components with static props to prevent unnecessary re-renders
Optimize FlatList with removeClippedSubviews, maxToRenderPerBatch, and windowSize
Use getItemLayout for FlatList when items have consistent size
Avoid anonymous functions in renderItem or event handlers to prevent re-renders
Ensure responsive design for different screen sizes and orientations
Optimize image handling using rea...
Files:
src/__tests__/accessibility-text-scaling.test.tsxsrc/app/onboarding.tsx
src/**
📄 CodeRabbit inference engine (.cursorrules)
src/**: Organize files by feature, grouping related components, hooks, and styles
Directory and file names should be lowercase and hyphenated (e.g., user-profile)
Files:
src/__tests__/accessibility-text-scaling.test.tsxsrc/app/onboarding.tsx
**/*.{test,spec}.{ts,tsx}
📄 CodeRabbit inference engine (.cursorrules)
**/*.{test,spec}.{ts,tsx}: Create Jest tests for all generated components, services, and logic
Ensure tests run without errors and fix failing tests
Files:
src/__tests__/accessibility-text-scaling.test.tsx
src/**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (.github/copilot-instructions.md)
src/**/*.test.{ts,tsx}: Create and use Jest tests to validate all generated components
Generate tests for all components, services, and logic; ensure tests run without errors
Files:
src/__tests__/accessibility-text-scaling.test.tsx
🧠 Learnings (22)
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure the app is accessible following WCAG guidelines for mobile
Applied to files:
docs/accessibility-text-scaling-validation.mdsrc/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Ensure app accessibility following WCAG for mobile (labels, roles, focus, contrast)
Applied to files:
docs/accessibility-text-scaling-validation.md
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure UI is intuitive, user-friendly, and works across different devices and screen sizes
Applied to files:
docs/accessibility-text-scaling-validation.mdsrc/__tests__/accessibility-text-scaling.test.tsxsrc/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure all components are mobile-friendly, responsive, and support both iOS and Android
Applied to files:
docs/accessibility-text-scaling-validation.mdsrc/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Ensure responsive design across screen sizes and orientations
Applied to files:
docs/accessibility-text-scaling-validation.mdsrc/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Ensure mobile-friendly, responsive components optimized for both iOS and Android
Applied to files:
docs/accessibility-text-scaling-validation.md
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Ensure responsive design for different screen sizes and orientations
Applied to files:
docs/accessibility-text-scaling-validation.mdsrc/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/**/*.test.{ts,tsx} : Create and use Jest tests to validate all generated components
Applied to files:
src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{test,spec}.{ts,tsx} : Create Jest tests for all generated components, services, and logic
Applied to files:
src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/**/*.test.{ts,tsx} : Generate tests for all components, services, and logic; ensure tests run without errors
Applied to files:
src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{test,spec}.{ts,tsx} : Ensure tests run without errors and fix failing tests
Applied to files:
src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Wrap all user-facing text in t() from react-i18next for translations
Applied to files:
src/__tests__/accessibility-text-scaling.test.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.{ts,tsx} : Use React Navigation for navigation and deep linking following best practices
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use lucide-react-native for icons directly; do not use the gluestack-ui icon component
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Use lucide-react-native for icons directly in markup; do not use gluestack-ui icon component
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to src/components/ui/**/*.tsx : Use gluestack-ui components from components/ui; if unavailable, style via StyleSheet.create or styled-components
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Use rnmapbox/maps for maps, mapping, or vehicle navigation
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use rnmapbox/maps for maps or navigation features
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use gluestack-ui for styling where available from components/ui; otherwise, style via StyleSheet.create or styled-components
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Applies to **/*.tsx : Optimize image handling using react-native-fast-image
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:47:24.081Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-21T02:47:24.081Z
Learning: Use React Navigation for handling navigation and deep linking with best practices
Applied to files:
src/app/onboarding.tsx
📚 Learning: 2025-08-21T02:46:42.743Z
Learnt from: CR
Repo: Resgrid/Responder PR: 0
File: .cursorrules:0-0
Timestamp: 2025-08-21T02:46:42.743Z
Learning: Applies to **/*.tsx : Use react-native-fast-image for image handling instead of the default Image where appropriate
Applied to files:
src/app/onboarding.tsx
🧬 Code graph analysis (2)
src/__tests__/accessibility-text-scaling.test.tsx (2)
__mocks__/react-native.ts (1)
useWindowDimensions(39-42)__mocks__/@/components/ui/button.tsx (2)
Button(4-6)ButtonText(8-10)
src/app/onboarding.tsx (5)
src/services/analytics.service.ts (1)
trackEvent(97-134)src/components/ui/index.tsx (3)
SafeAreaView(20-20)ScrollView(19-19)View(19-19)src/components/ui/focus-aware-status-bar.tsx (1)
FocusAwareStatusBar(9-63)src/components/ui/image.tsx (1)
Image(12-14)src/components/ui/flat-list/index.tsx (1)
FlashList(2-2)
🪛 LanguageTool
docs/accessibility-text-scaling-validation.md
[style] ~3-~3: Some style guides suggest that commas should set off the year in a month-day-year date.
Context: ...lidation Report Date: November 13, 2025 Component: Resgrid Responder Mobi...
(MISSING_COMMA_AFTER_YEAR)
🪛 markdownlint-cli2 (0.18.1)
docs/accessibility-text-scaling-validation.md
284-284: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
⏰ 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). (1)
- GitHub Check: test
🔇 Additional comments (1)
.github/workflows/react-native-cicd.yml (1)
75-76: CHANGERAWR secrets wiring looks correctThe new
CHANGERAWR_API_KEYandCHANGERAWR_API_URLenv entries are correctly sourced from GitHub Secrets and made available to downstream steps. No issues from a CI/CD perspective; just ensure the secrets are actually configured in the repo/environment before merging.
|
Approve |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR is approved.
Summary by CodeRabbit
New Features
Documentation
Tests
Chores