Commit d48777b4 authored by Lorenzo Trujillo Rojas's avatar Lorenzo Trujillo Rojas
Browse files

Reestructuración de la aplicacion

parent d762bd3e
Loading
Loading
Loading
Loading
+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}>();
+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() {
+4 −3
Original line number Diff line number Diff line
@@ -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";
@@ -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;
@@ -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))
    };
}
@@ -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}>
+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",
  },
});
+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