Loading mobile/app/state/[stateId]/town/[townId]/activity/[activityId]/index.tsx +1 −1 Original line number Diff line number Diff line import { useLocalSearchParams } from "expo-router"; import { ActivityDescriptionPage } from "../../../../../../../src/screens/activity_description/activity_description_page"; import { ActivityDescriptionPage } from "../../../../../../../src/activity/screens/activity_description_page"; export default function ActivitySelectionScreen() { const { activityId, stateId, townId } = useLocalSearchParams<{activityId: string, stateId: string, townId: string}>(); Loading mobile/app/state/[stateId]/town/[townId]/activity/[activityId]/travel.tsx +1 −1 Original line number Diff line number Diff line import { useLocalSearchParams } from "expo-router"; import { View, Text } from "react-native"; import { ActivityPointScreen } from "../../../../../../../src/screens/activity_point/activity_point"; import { ActivityPointScreen } from "../../../../../../../src/activity/screens/activity_point"; export default function Travel() { Loading mobile/src/common/contexts/data_context.tsx +4 −3 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import { AuthRepository } from "../../auth/domain/repositories/auth_repository"; import { AuthDataSourceDev } from '../../auth/infrastructure/dev/datasources/auth_datasource'; import { AuthRepositoryImpl } from "../../auth/infrastructure/prod/repositories/auth_repository"; import { AuthDatasourceProd } from '../../auth/infrastructure/prod/datasources/auth_datasource'; import { ActivityRepository } from "../../domain/repositories/activity_repository"; import { ActivityDatasourceDev } from "../../infrastructure/datasource/dev/activity_datasource"; import { ActivityRepositoryDev } from '../../infrastructure/repositories/activity_repository'; import { TravelDatasourceDev } from "../../infrastructure/datasource/dev/travel_datasource"; Loading @@ -22,6 +21,8 @@ import { ProfileRepositoryImpl } from "../../profile/infrastructure/repositories import { ActivityDatasourceProd } from "../../infrastructure/datasource/prod/activity_datasource"; import { useTranslation } from "react-i18next"; import { ProfileDataSourceProd } from "../../profile/infrastructure/datasources/prod/profile_datasource"; import { ActivityRepository } from "../../activity/domain/repositories/activity_repository"; import { RouteDatasourceProd } from "../../infrastructure/datasource/prod/route_datasource"; type DataContextType = { statesRepository: StateRepository | null; Loading Loading @@ -49,7 +50,7 @@ const getProductionContext = (language: string): DataContextType => { authRepository: new AuthRepositoryImpl(new AuthDatasourceProd()), activityRepository: new ActivityRepositoryDev(new ActivityDatasourceProd()), travelRepository: new TravelRepositoryImpl(new TravelDatasourceDev()), routeRepository: new RouteRepositoryImpl(new RouteDataSourceDev()), routeRepository: new RouteRepositoryImpl(new RouteDatasourceProd(language)), profileRepository: new ProfileRepositoryImpl(new ProfileDataSourceProd(language)) }; } Loading @@ -68,7 +69,7 @@ const getDevelopmentContext = (): DataContextType => { export const DataContextProvider = ({ children }: DataContextProviderProps) => { const { i18n:{ language } } = useTranslation(); const value = getDevelopmentContext(); const value = getProductionContext(language); return ( <DataContext.Provider value={value}> Loading mobile/src/components/activity_bottom_sheet/activity_bottom_sheet.tsxdeleted 100644 → 0 +0 −139 Original line number Diff line number Diff line import { useRef, useState } from "react"; import BottomSheet, { BottomSheetFlatList, BottomSheetScrollView, BottomSheetView, } from "@gorhom/bottom-sheet"; import { Text, StyleSheet, ScrollView, View, TouchableOpacity, } from "react-native"; import { ActivityInfoEntity } from "../../domain/entities/activity_info_entity"; import { LIGHT_THEME } from "../../common/constants/theme"; import { router } from "expo-router"; interface ActivityBottomSheetProps { startSnapPoint: number; snapPoints: string[]; onSnapPointChange?: (index: number) => void; activity: ActivityInfoEntity; } export const ActivityBottomSheet = ({ activity, startSnapPoint, snapPoints, onSnapPointChange, }: ActivityBottomSheetProps) => { const sheetRef = useRef<BottomSheet>(null); const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false); return ( <BottomSheet ref={sheetRef} index={startSnapPoint} onChange={onSnapPointChange} snapPoints={snapPoints} > <BottomSheetScrollView style={{ height: "100%", padding: 10 }} scrollToOverflowEnabled nestedScrollEnabled > <View style={styles.activity_name_container}> <Text style={styles.name_text}>{activity.name}</Text> <TouchableOpacity onPress={() => { router.push("/scan"); }} style={styles.do_activity_button} > <Text style={styles.do_activity_text}>Do Activity</Text> </TouchableOpacity> </View> {activity.tags && ( <BottomSheetFlatList style={{ marginTop: 20, paddingVertical: 10 }} horizontal data={activity.tags} showsHorizontalScrollIndicator={false} keyExtractor={(item) => item} ItemSeparatorComponent={() => <View style={{ width: 10 }} />} renderItem={({ item }) => ( <View style={{ height: 40, borderRadius: 15, backgroundColor: "violet", paddingHorizontal: 10, justifyContent: "center", }} > <Text>{item}</Text> </View> )} /> )} <View style={styles.description_container}> <Text style={styles.description_text}>Description</Text> <Text numberOfLines={!isDescriptionExpanded ? 5 : undefined}> {activity.description} </Text> <TouchableOpacity onPress={() => setIsDescriptionExpanded(!isDescriptionExpanded)} > <Text style={styles.show_more_text}> {isDescriptionExpanded ? "Show less" : "Show more..."} </Text> </TouchableOpacity> </View> </BottomSheetScrollView> </BottomSheet> ); }; const styles = StyleSheet.create({ activity_info_container: { borderTopLeftRadius: 20, borderTopRightRadius: 20, borderWidth: 5, padding: 20, }, activity_name_container: { flexDirection: "row", justifyContent: "space-between", }, name_text: { fontSize: 24, fontWeight: "bold", width: "70%", }, do_activity_button: { height: 40, elevation: 5, backgroundColor: LIGHT_THEME.color.primary, padding: 10, borderRadius: 20, justifyContent: "center", alignItems: "center", paddingHorizontal: 20, }, do_activity_text: { color: LIGHT_THEME.color.white, fontWeight: "bold", }, description_container: { marginTop: 20, gap: 5, }, description_text: { fontSize: 18, fontWeight: "bold", }, show_more_text: { fontWeight: "600", }, }); mobile/src/components/activity_tile/activity_tile.tsxdeleted 100644 → 0 +0 −62 Original line number Diff line number Diff line import { View, Text, StyleSheet, Image, TouchableOpacity } from "react-native"; import { ActivityInfoEntity } from "../../domain/entities/activity_info_entity"; import { LIGHT_THEME } from "../../common/constants/theme"; import { ScrollView } from "react-native-gesture-handler"; interface ActivityTileProps { activity: ActivityInfoEntity; onPress?: (id: number) => void; } export const ActivityTile = ({ activity, onPress }: ActivityTileProps) => { return ( <TouchableOpacity onPress={() => { onPress && onPress(activity.id); }} activeOpacity={0.7} style={styles.container}> <View> <Image source={{ uri: activity.imageUri }} style={{ width: "100%", height: 200 }} /> </View> <View style={styles.info_container}> <Text style={styles.activity_name} >{activity.name}</Text> <Text>{activity.location}</Text> <ScrollView horizontal> { activity.tags?.map(tag => <Text key={tag} style={styles.tag}>{tag}</Text>) } </ScrollView> </View> </TouchableOpacity> ); }; const styles = StyleSheet.create({ container: { height: 320, width: "100%", backgroundColor: LIGHT_THEME.color.white, elevation: 5, borderWidth: 1, borderRadius: 10, overflow: "hidden", }, info_container: { padding: 10, gap: 5, }, activity_name: { fontSize: 18, fontWeight: "bold", }, tag: { backgroundColor: LIGHT_THEME.color.primary, color: LIGHT_THEME.color.white, height: 30, paddingVertical: 5, paddingHorizontal: 10, borderRadius: 15, marginHorizontal: 5, }, }); Loading
mobile/app/state/[stateId]/town/[townId]/activity/[activityId]/index.tsx +1 −1 Original line number Diff line number Diff line import { useLocalSearchParams } from "expo-router"; import { ActivityDescriptionPage } from "../../../../../../../src/screens/activity_description/activity_description_page"; import { ActivityDescriptionPage } from "../../../../../../../src/activity/screens/activity_description_page"; export default function ActivitySelectionScreen() { const { activityId, stateId, townId } = useLocalSearchParams<{activityId: string, stateId: string, townId: string}>(); Loading
mobile/app/state/[stateId]/town/[townId]/activity/[activityId]/travel.tsx +1 −1 Original line number Diff line number Diff line import { useLocalSearchParams } from "expo-router"; import { View, Text } from "react-native"; import { ActivityPointScreen } from "../../../../../../../src/screens/activity_point/activity_point"; import { ActivityPointScreen } from "../../../../../../../src/activity/screens/activity_point"; export default function Travel() { Loading
mobile/src/common/contexts/data_context.tsx +4 −3 Original line number Diff line number Diff line Loading @@ -6,7 +6,6 @@ import { AuthRepository } from "../../auth/domain/repositories/auth_repository"; import { AuthDataSourceDev } from '../../auth/infrastructure/dev/datasources/auth_datasource'; import { AuthRepositoryImpl } from "../../auth/infrastructure/prod/repositories/auth_repository"; import { AuthDatasourceProd } from '../../auth/infrastructure/prod/datasources/auth_datasource'; import { ActivityRepository } from "../../domain/repositories/activity_repository"; import { ActivityDatasourceDev } from "../../infrastructure/datasource/dev/activity_datasource"; import { ActivityRepositoryDev } from '../../infrastructure/repositories/activity_repository'; import { TravelDatasourceDev } from "../../infrastructure/datasource/dev/travel_datasource"; Loading @@ -22,6 +21,8 @@ import { ProfileRepositoryImpl } from "../../profile/infrastructure/repositories import { ActivityDatasourceProd } from "../../infrastructure/datasource/prod/activity_datasource"; import { useTranslation } from "react-i18next"; import { ProfileDataSourceProd } from "../../profile/infrastructure/datasources/prod/profile_datasource"; import { ActivityRepository } from "../../activity/domain/repositories/activity_repository"; import { RouteDatasourceProd } from "../../infrastructure/datasource/prod/route_datasource"; type DataContextType = { statesRepository: StateRepository | null; Loading Loading @@ -49,7 +50,7 @@ const getProductionContext = (language: string): DataContextType => { authRepository: new AuthRepositoryImpl(new AuthDatasourceProd()), activityRepository: new ActivityRepositoryDev(new ActivityDatasourceProd()), travelRepository: new TravelRepositoryImpl(new TravelDatasourceDev()), routeRepository: new RouteRepositoryImpl(new RouteDataSourceDev()), routeRepository: new RouteRepositoryImpl(new RouteDatasourceProd(language)), profileRepository: new ProfileRepositoryImpl(new ProfileDataSourceProd(language)) }; } Loading @@ -68,7 +69,7 @@ const getDevelopmentContext = (): DataContextType => { export const DataContextProvider = ({ children }: DataContextProviderProps) => { const { i18n:{ language } } = useTranslation(); const value = getDevelopmentContext(); const value = getProductionContext(language); return ( <DataContext.Provider value={value}> Loading
mobile/src/components/activity_bottom_sheet/activity_bottom_sheet.tsxdeleted 100644 → 0 +0 −139 Original line number Diff line number Diff line import { useRef, useState } from "react"; import BottomSheet, { BottomSheetFlatList, BottomSheetScrollView, BottomSheetView, } from "@gorhom/bottom-sheet"; import { Text, StyleSheet, ScrollView, View, TouchableOpacity, } from "react-native"; import { ActivityInfoEntity } from "../../domain/entities/activity_info_entity"; import { LIGHT_THEME } from "../../common/constants/theme"; import { router } from "expo-router"; interface ActivityBottomSheetProps { startSnapPoint: number; snapPoints: string[]; onSnapPointChange?: (index: number) => void; activity: ActivityInfoEntity; } export const ActivityBottomSheet = ({ activity, startSnapPoint, snapPoints, onSnapPointChange, }: ActivityBottomSheetProps) => { const sheetRef = useRef<BottomSheet>(null); const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false); return ( <BottomSheet ref={sheetRef} index={startSnapPoint} onChange={onSnapPointChange} snapPoints={snapPoints} > <BottomSheetScrollView style={{ height: "100%", padding: 10 }} scrollToOverflowEnabled nestedScrollEnabled > <View style={styles.activity_name_container}> <Text style={styles.name_text}>{activity.name}</Text> <TouchableOpacity onPress={() => { router.push("/scan"); }} style={styles.do_activity_button} > <Text style={styles.do_activity_text}>Do Activity</Text> </TouchableOpacity> </View> {activity.tags && ( <BottomSheetFlatList style={{ marginTop: 20, paddingVertical: 10 }} horizontal data={activity.tags} showsHorizontalScrollIndicator={false} keyExtractor={(item) => item} ItemSeparatorComponent={() => <View style={{ width: 10 }} />} renderItem={({ item }) => ( <View style={{ height: 40, borderRadius: 15, backgroundColor: "violet", paddingHorizontal: 10, justifyContent: "center", }} > <Text>{item}</Text> </View> )} /> )} <View style={styles.description_container}> <Text style={styles.description_text}>Description</Text> <Text numberOfLines={!isDescriptionExpanded ? 5 : undefined}> {activity.description} </Text> <TouchableOpacity onPress={() => setIsDescriptionExpanded(!isDescriptionExpanded)} > <Text style={styles.show_more_text}> {isDescriptionExpanded ? "Show less" : "Show more..."} </Text> </TouchableOpacity> </View> </BottomSheetScrollView> </BottomSheet> ); }; const styles = StyleSheet.create({ activity_info_container: { borderTopLeftRadius: 20, borderTopRightRadius: 20, borderWidth: 5, padding: 20, }, activity_name_container: { flexDirection: "row", justifyContent: "space-between", }, name_text: { fontSize: 24, fontWeight: "bold", width: "70%", }, do_activity_button: { height: 40, elevation: 5, backgroundColor: LIGHT_THEME.color.primary, padding: 10, borderRadius: 20, justifyContent: "center", alignItems: "center", paddingHorizontal: 20, }, do_activity_text: { color: LIGHT_THEME.color.white, fontWeight: "bold", }, description_container: { marginTop: 20, gap: 5, }, description_text: { fontSize: 18, fontWeight: "bold", }, show_more_text: { fontWeight: "600", }, });
mobile/src/components/activity_tile/activity_tile.tsxdeleted 100644 → 0 +0 −62 Original line number Diff line number Diff line import { View, Text, StyleSheet, Image, TouchableOpacity } from "react-native"; import { ActivityInfoEntity } from "../../domain/entities/activity_info_entity"; import { LIGHT_THEME } from "../../common/constants/theme"; import { ScrollView } from "react-native-gesture-handler"; interface ActivityTileProps { activity: ActivityInfoEntity; onPress?: (id: number) => void; } export const ActivityTile = ({ activity, onPress }: ActivityTileProps) => { return ( <TouchableOpacity onPress={() => { onPress && onPress(activity.id); }} activeOpacity={0.7} style={styles.container}> <View> <Image source={{ uri: activity.imageUri }} style={{ width: "100%", height: 200 }} /> </View> <View style={styles.info_container}> <Text style={styles.activity_name} >{activity.name}</Text> <Text>{activity.location}</Text> <ScrollView horizontal> { activity.tags?.map(tag => <Text key={tag} style={styles.tag}>{tag}</Text>) } </ScrollView> </View> </TouchableOpacity> ); }; const styles = StyleSheet.create({ container: { height: 320, width: "100%", backgroundColor: LIGHT_THEME.color.white, elevation: 5, borderWidth: 1, borderRadius: 10, overflow: "hidden", }, info_container: { padding: 10, gap: 5, }, activity_name: { fontSize: 18, fontWeight: "bold", }, tag: { backgroundColor: LIGHT_THEME.color.primary, color: LIGHT_THEME.color.white, height: 30, paddingVertical: 5, paddingHorizontal: 10, borderRadius: 15, marginHorizontal: 5, }, });