Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions app/(tabs)/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { useRouter } from 'expo-router';
import { useEffect } from 'react';
import { Alert, ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';

import { CourseCardSkeleton, Skeleton, AppText as Text } from '@/src/components';
import { sampleCourse } from '@/src/data/sampleCourse';
import { useDynamicFontSize, useAnalytics } from '@/src/hooks';
import { useAppStore } from '@/src/store';
import { AnalyticsEvent, ScreenName } from '@/src/utils/trackingEvents';
import { CourseCardSkeleton, Skeleton, AppText as Text } from '@/components';
import { sampleCourse } from '@/data/sampleCourse';
import { useDynamicFontSize, useAnalytics } from '@/hooks';
import { useAppStore } from '@/store';
import { AnalyticsEvent, ScreenName } from '@/utils/trackingEvents';

export default function HomeScreen() {
const router = useRouter();
Expand Down Expand Up @@ -71,6 +71,7 @@ export default function HomeScreen() {
className="flex-1 bg-gray-50 dark:bg-slate-800"
contentContainerStyle={styles.scrollContent}
showsVerticalScrollIndicator={false}
removeClippedSubviews={true}
>
{/* Header */}
<View style={styles.headerSection}>
Expand Down
2 changes: 1 addition & 1 deletion src/components/grid/AdvancedDataGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ export const AdvancedDataGrid = <T extends GridRow = GridRow>({
/>

{/* ── Scrollable grid area ─────────────────────────────────────────── */}
<ScrollView horizontal showsHorizontalScrollIndicator style={styles.horizontalScroll}>
<ScrollView horizontal showsHorizontalScrollIndicator style={styles.horizontalScroll} removeClippedSubviews={true}>
<View style={{ width: totalWidth }}>
{/* Column headers */}
<HeaderRow
Expand Down
1 change: 1 addition & 0 deletions src/components/grid/GridFiltering.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export const GridFiltering = <T extends GridRow = GridRow>({
showsHorizontalScrollIndicator={false}
contentContainerStyle={styles.row}
keyboardShouldPersistTaps="handled"
removeClippedSubviews={true}
>
{filterableColumns.map(col => {
const currentValue = getFilterValue(col.key);
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/AchievementBadges.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ export const AchievementBadges: React.FC<AchievementBadgesProps> = ({
showsHorizontalScrollIndicator={false}
contentContainerStyle={styles.scrollContent}
accessibilityLabel="Horizontal achievements list"
removeClippedSubviews={true}
>
{achievements.map(renderBadge)}
</ScrollView>
Expand Down
2 changes: 1 addition & 1 deletion src/components/mobile/BookmarkList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const BookmarkList = () => {
}

return (
<ScrollView contentContainerStyle={styles.list}>
<ScrollView contentContainerStyle={styles.list} removeClippedSubviews={true}>
{bookmarks.map(item => (
<SwipeableRow
key={item.itemId}
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/ConnectionManager.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export const ConnectionManager: React.FC<ConnectionManagerProps> = ({
data={connections}
renderItem={renderConnectionItem}
keyExtractor={item => item.id}
removeClippedSubviews={true}
style={styles.list}
/>
) : (
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/DownloadQueue.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export function DownloadQueue() {
data={tasks}
keyExtractor={item => item.id}
renderItem={renderItem}
removeClippedSubviews={true}
contentContainerStyle={{ paddingVertical: 8 }}
ListHeaderComponent={() => (
<AppText className="px-4 py-2 text-xs font-bold uppercase tracking-wider text-gray-400">
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/FilterSheet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ export function FilterSheet({
contentContainerStyle={styles.scrollContent}
showsVerticalScrollIndicator={false}
keyboardShouldPersistTaps="handled"
removeClippedSubviews={true}
>
{filters.map(field => (
<FilterSection
Expand Down
2 changes: 2 additions & 0 deletions src/components/mobile/LessonCarousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ export default function LessonCarousel({
ref={scrollViewRef}
horizontal
pagingEnabled
removeClippedSubviews={true}
showsHorizontalScrollIndicator={false}
onScroll={handleScroll}
onMomentumScrollEnd={handleMomentumScrollEnd}
Expand All @@ -221,6 +222,7 @@ export default function LessonCarousel({
style={styles.lessonScrollView}
contentContainerStyle={styles.lessonContent}
showsVerticalScrollIndicator={true}
removeClippedSubviews={true}
>
{renderLessonContent(lesson)}
</ScrollView>
Expand Down
2 changes: 1 addition & 1 deletion src/components/mobile/MobileCourseViewer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ export default function MobileCourseViewer({

return (
<View style={styles.lessonContentWrapper}>
<ScrollView style={styles.scrollView} showsVerticalScrollIndicator={false}>
<ScrollView style={styles.scrollView} showsVerticalScrollIndicator={false} removeClippedSubviews={true}>
{/* Lesson Content */}
<View style={styles.lessonSection}>
<Text style={styles.lessonText}>{lesson.content}</Text>
Expand Down
6 changes: 3 additions & 3 deletions src/components/mobile/MobileProfile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ export const MobileProfile: React.FC<MobileProfileProps> = ({

return (
<SafeAreaView style={[styles.safe, { backgroundColor: bg }]}>
<ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }}>
<ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }} removeClippedSubviews={true}>
<View>
<Skeleton width="100%" height={120} borderRadius={0} />
<View style={styles.avatarRow}>
Expand Down Expand Up @@ -431,7 +431,7 @@ export const MobileProfile: React.FC<MobileProfileProps> = ({

return (
<SafeAreaView style={[styles.safe, { backgroundColor: bg }]}>
<ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }}>
<ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }} removeClippedSubviews={true}>
{/* ── Profile Header ─────────────────────────────────────────────── */}
<View>
<LinearGradient
Expand Down Expand Up @@ -746,7 +746,7 @@ export const MobileProfile: React.FC<MobileProfileProps> = ({
<Text style={styles.streakEmoji}>🔥</Text>
<View>
<Text style={styles.streakValue}>{profile.stats.streak} Day Streak</Text>
<Text style={styles.streakSub}>Keep it up! You're on fire.</Text>
<Text style={styles.streakSub}>Keep it up! You&apos;re on fire.</Text>
</View>
</LinearGradient>
</View>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export default function MobileQuestionCard({
style={styles.container}
contentContainerStyle={styles.contentContainer}
showsVerticalScrollIndicator={false}
removeClippedSubviews={true}
>
{/* Question Header */}
<View style={styles.header}>
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/MobileQuizManager/QuizCarousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ export default function QuizCarousel({
ref={scrollViewRef}
horizontal
pagingEnabled
removeClippedSubviews={true}
showsHorizontalScrollIndicator={false}
onScroll={handleScroll}
onScrollBeginDrag={handleScrollBeginDrag}
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/MobileQuizManager/QuizResults.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export default function QuizResults({ quiz, score, passed, onBack, onRetake }: Q
style={styles.container}
contentContainerStyle={styles.contentContainer}
showsVerticalScrollIndicator={false}
removeClippedSubviews={true}
>
{/* Result Icon */}
<View style={styles.iconContainer}>
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/MobileQuizManager/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ export default function MobileQuizManager({
style={styles.scrollView}
contentContainerStyle={styles.scrollContent}
showsVerticalScrollIndicator={false}
removeClippedSubviews={true}
>
{/* Header */}
<View style={styles.header}>
Expand Down
1 change: 1 addition & 0 deletions src/components/mobile/MobileSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ export const MobileSearch = ({
renderItem={({ item }) => (
<SearchResultCard item={item} onPress={() => onResultPress?.(item)} />
)}
removeClippedSubviews={true}
contentContainerStyle={styles.resultsList}
ListEmptyComponent={
<Text style={styles.emptyText}>Try a different query or adjust filters.</Text>
Expand Down
Loading