From 742024ab35b0af6fd3578e408960f12d8653f57d Mon Sep 17 00:00:00 2001 From: neel Date: Mon, 7 Apr 2025 12:26:33 +0530 Subject: [PATCH] BookRide --- app/(root)/book-ride.tsx | 95 +++++++++++ app/(root)/confirm-ride.tsx | 23 +++ app/(root)/find-ride.tsx | 18 +- components/DriverCard.tsx | 66 ++++++++ components/Map.tsx | 2 + components/RideLayout.tsx | 33 +++- package-lock.json | 316 +++++++++++++++++++++++++++++++----- package.json | 5 +- 8 files changed, 508 insertions(+), 50 deletions(-) create mode 100644 app/(root)/book-ride.tsx create mode 100644 app/(root)/confirm-ride.tsx create mode 100644 components/DriverCard.tsx diff --git a/app/(root)/book-ride.tsx b/app/(root)/book-ride.tsx new file mode 100644 index 0000000..a99318d --- /dev/null +++ b/app/(root)/book-ride.tsx @@ -0,0 +1,95 @@ +import {useUser} from "@clerk/clerk-expo"; +import {Image, Text, View} from "react-native"; +import tw from "twrnc"; +import RideLayout from "@/components/RideLayout"; +import {icons} from "@/constants"; +import {formatTime} from "@/lib/utils"; +import {useDriverStore, useLocationStore} from "@/store"; + +const BookRide = () => { + const {user} = useUser(); + const {userAddress, destinationAddress} = useLocationStore(); + const {drivers, selectedDriver} = useDriverStore(); + console.log(drivers); + console.log(selectedDriver); + const driverDetails = drivers?.filter( + (driver) => +driver.id === selectedDriver, + )[0]; + + return ( + + <> + + Ride Information + + + + + + + + {driverDetails?.title} + + + + + + {driverDetails?.rating} + + + + + + + + Ride Price + + ${driverDetails?.price} + + + + + Pickup Time + + {formatTime(driverDetails?.time || 5 ! )} + + + + + Car Seats + + {driverDetails?.car_seats} + + + + + + + + + {userAddress} + + + + + + + {destinationAddress} + + + + + + ); +}; + +export default BookRide; \ No newline at end of file diff --git a/app/(root)/confirm-ride.tsx b/app/(root)/confirm-ride.tsx new file mode 100644 index 0000000..674a7b4 --- /dev/null +++ b/app/(root)/confirm-ride.tsx @@ -0,0 +1,23 @@ +import Ridelayout from "@/components/RideLayout"; +import { FlatList, Text, View } from "react-native"; +import DriverCard from "@/components/DriverCard"; +import CustomButton from "@/components/CustomButton"; +import tw from "twrnc"; +import { router } from "expo-router"; +import { useDriverStore } from "@/store"; +const ConfirmRide =() => { +const {drivers,selectedDriver,setSelectedDriver} = useDriverStore(); + return( + + + setSelectedDriver(Number(item.id)!)} /> } + ListFooterComponent={()=>( + + router.push("/(root)/book-ride")} /> + + )} + /> + + ) +} +export default ConfirmRide; \ No newline at end of file diff --git a/app/(root)/find-ride.tsx b/app/(root)/find-ride.tsx index edc5a0a..5900bb5 100644 --- a/app/(root)/find-ride.tsx +++ b/app/(root)/find-ride.tsx @@ -1,12 +1,24 @@ import Ridelayout from "@/components/RideLayout"; +import { icons } from "@/constants"; import { useLocationStore } from "@/store"; import { Text, View } from "react-native"; import tw from "twrnc"; -const FindRide=()=>{ +import GoogleTextInput from "@/components/GoogleTextInput"; +import CustomButton from "@/components/CustomButton"; +import { router } from "expo-router"; +const FindRide=() => { const {userAddress,destinationAddress,setDestinationLocation,setUserLocation,} = useLocationStore(); return( - - Find Ride + + + From + setUserLocation(location)} /> + + + To + setDestinationLocation(location)} /> + + router.push("/(root)/confirm-ride")} style={tw`mt-5`} /> ) } diff --git a/components/DriverCard.tsx b/components/DriverCard.tsx new file mode 100644 index 0000000..2bd14ed --- /dev/null +++ b/components/DriverCard.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import {Image, Text, TouchableOpacity, View} from "react-native"; +import tw from "twrnc"; +import {icons} from "@/constants"; +import {formatTime} from "@/lib/utils"; +import {DriverCardProps} from "@/types/type"; + +const DriverCard = ({item, selected, setSelected}: DriverCardProps) => { + return ( + + + + + + {item.title} + + + + 4 + + + + + + + + ${item.price} + + + + + | + + + + {formatTime(item.time!)} + + + + | + + + + {item.car_seats} seats + + + + + + + ); +}; + +export default DriverCard; \ No newline at end of file diff --git a/components/Map.tsx b/components/Map.tsx index 52e8a76..66bc2f3 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -52,6 +52,8 @@ const Map = () => { userLongitude, userLatitude, destinationLatitude, destinationLongitude, }); useEffect(() => { + // TODO:Remove + setDrivers(drivers); if (Array.isArray(drivers)) { if (!userLatitude || !userLongitude) return; const newMarkers = generateMarkersFromData({ data : drivers, userLatitude, userLongitude, }); diff --git a/components/RideLayout.tsx b/components/RideLayout.tsx index 08a758e..5638edf 100644 --- a/components/RideLayout.tsx +++ b/components/RideLayout.tsx @@ -1,11 +1,32 @@ -import { Text, View } from "react-native"; - -const Ridelayout = ({children}:{children:React.ReactNode}) => { +import { icons } from "@/constants"; +import { router } from "expo-router"; +import { Image, Text, TouchableOpacity, View } from "react-native"; +import {GestureHandlerRootView} from "react-native-gesture-handler"; +import tw from "twrnc"; +import Map from "@/components/Map"; +import { useRef } from "react"; +import BottomSheet, { BottomSheetView } from "@gorhom/bottom-sheet"; +const Ridelayout = ({title,children,snapPoints}:{snapPoints?:string[], title:string,children:React.ReactNode}) => { + const bottomSheetRef = useRef(null) return( - - - {children} + + + + + router.back()}> + + + + + {title ||"Go Back"} + + + + + {children} + + ) } diff --git a/package-lock.json b/package-lock.json index 3901c80..163c8b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@clerk/clerk-expo": "^2.9.0", "@expo/metro-runtime": "~4.0.1", "@expo/vector-icons": "^14.0.2", + "@gorhom/bottom-sheet": "^5.1.2", "@neondatabase/serverless": "^0.10.4", "@react-navigation/bottom-tabs": "^7.2.0", "@react-navigation/native": "^7.0.14", @@ -22,7 +23,7 @@ "expo-linking": "~7.0.5", "expo-local-authentication": "^15.0.2", "expo-location": "^18.0.10", - "expo-router": "~4.0.19", + "expo-router": "~4.0.20", "expo-secure-store": "^14.0.1", "expo-splash-screen": "~0.29.22", "expo-status-bar": "~2.0.1", @@ -34,7 +35,7 @@ "pg": "^8.14.1", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.8", + "react-native": "^0.76.9", "react-native-animatable": "^1.4.0", "react-native-gesture-handler": "~2.20.2", "react-native-get-random-values": "^1.11.0", @@ -3494,6 +3495,45 @@ "integrity": "sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==", "license": "MIT" }, + "node_modules/@gorhom/bottom-sheet": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@gorhom/bottom-sheet/-/bottom-sheet-5.1.2.tgz", + "integrity": "sha512-5np8oL2krqAsVKLRE4YmtkZkyZeFiitoki72bEpVhZb8SRTNuAEeSbP3noq5srKpcRsboCr7uI+xmMyrWUd9kw==", + "license": "MIT", + "dependencies": { + "@gorhom/portal": "1.0.14", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-native": "*", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">=2.16.1", + "react-native-reanimated": ">=3.16.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-native": { + "optional": true + } + } + }, + "node_modules/@gorhom/portal": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@gorhom/portal/-/portal-1.0.14.tgz", + "integrity": "sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==", + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -4230,9 +4270,9 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.8.tgz", - "integrity": "sha512-vQQi3kabQpj21Iohy2ou3/laCRE5hlW4r122ZivqCIN/UMwr5vT2/fTgPOBQoJ5X3YhZBe58BmifIstZutm0Ew==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.9.tgz", + "integrity": "sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==", "license": "MIT", "engines": { "node": ">=18" @@ -4353,13 +4393,13 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.8.tgz", - "integrity": "sha512-3rs6YehAVEootGpzchmj1ln2BCSTnIDTKqAYykUggEwpplg+CNTiBrvRrnjmlLXk3nOlIE8KOw4zRCd3PpI+bg==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.9.tgz", + "integrity": "sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.76.8", - "@react-native/metro-babel-transformer": "0.76.8", + "@react-native/dev-middleware": "0.76.9", + "@react-native/metro-babel-transformer": "0.76.9", "chalk": "^4.0.0", "execa": "^5.1.1", "invariant": "^2.2.4", @@ -4382,6 +4422,47 @@ } } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz", + "integrity": "sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz", + "integrity": "sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==", + "license": "MIT", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.76.9", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.13.1", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4438,6 +4519,12 @@ "node": ">=6" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -4483,6 +4570,15 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/debugger-frontend": { "version": "0.76.8", "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.8.tgz", @@ -4540,31 +4636,31 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.8.tgz", - "integrity": "sha512-rgocQRydHS8IkcyUs1VFhz+Q0OjL3QYI5/A7pMLRz6nEW8GAmoFnXqwujtPHivVrXbuCLIzGBKnsl2hsZsOopg==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.9.tgz", + "integrity": "sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.8.tgz", - "integrity": "sha512-bZzPjpDQaWU+F//N/WZJfaglYgYga4oXl9rzXyKOJP7KcebkOKJbAsG1mo7RCOVIbHYQCKUvQXIpV3IQOWNOEg==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.9.tgz", + "integrity": "sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz", - "integrity": "sha512-tEjNJo3Wwiig1OmI7H3cLOrAkAxT9lBqs1k+oanRm64o0Cay2ACH0PdXrk45sxENU3iTfxXeQ7mmY1u2XVYDpw==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.9.tgz", + "integrity": "sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.8", + "@react-native/babel-preset": "0.76.9", "hermes-parser": "0.23.1", "nullthrows": "^1.1.1" }, @@ -4575,6 +4671,120 @@ "@babel/core": "*" } }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz", + "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==", + "license": "MIT", + "dependencies": { + "@react-native/codegen": "0.76.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz", + "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.25.2", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/template": "^7.25.0", + "@react-native/babel-plugin-codegen": "0.76.9", + "babel-plugin-syntax-hermes-parser": "^0.25.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz", + "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.23.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/metro-babel-transformer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@react-native/normalize-colors": { "version": "0.76.8", "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.8.tgz", @@ -4582,9 +4792,9 @@ "license": "MIT" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.8.tgz", - "integrity": "sha512-OsB+LoEFH80wL+qhQrNpJR3O3oNDmyZf0go7/MQiayZbT8IkD8aPdHmK4QIVoIwAbFWXw7RkcFdubhSWwi0wAQ==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz", + "integrity": "sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -9261,9 +9471,9 @@ } }, "node_modules/expo-router": { - "version": "4.0.19", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-4.0.19.tgz", - "integrity": "sha512-oZ/vAx0x126Q6rccpWkMhKa/17YHYfeXQP8KwqaIadQsTR28cLgAY2gcAtFQyc8XTjgJmsRnfQNyCnyNN04DWg==", + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-4.0.20.tgz", + "integrity": "sha512-1+CtvohptOsG/Piejk8uQ9cmM+8ojadFkdeThCn4klZjc0dtFSSHenb8D/0RKuBdp4taBkNaqgEKwYvhVBJyEg==", "license": "MIT", "dependencies": { "@expo/metro-runtime": "4.0.1", @@ -10466,9 +10676,9 @@ } }, "node_modules/image-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz", - "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "license": "MIT", "dependencies": { "queue": "6.0.2" @@ -15374,19 +15584,19 @@ "license": "MIT" }, "node_modules/react-native": { - "version": "0.76.8", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.8.tgz", - "integrity": "sha512-sVoAd/cDBdVoLjNz8Lp5DAg4l6Iag0l5AiChN2J/NGhM//PW6+MIW50TI8G1iZz4rquAgWtcCHwEp5P5FvMyDA==", + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.9.tgz", + "integrity": "sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.8", - "@react-native/codegen": "0.76.8", - "@react-native/community-cli-plugin": "0.76.8", - "@react-native/gradle-plugin": "0.76.8", - "@react-native/js-polyfills": "0.76.8", - "@react-native/normalize-colors": "0.76.8", - "@react-native/virtualized-lists": "0.76.8", + "@react-native/assets-registry": "0.76.9", + "@react-native/codegen": "0.76.9", + "@react-native/community-cli-plugin": "0.76.9", + "@react-native/gradle-plugin": "0.76.9", + "@react-native/js-polyfills": "0.76.9", + "@react-native/normalize-colors": "0.76.9", + "@react-native/virtualized-lists": "0.76.9", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -15732,6 +15942,34 @@ "react-native": "*" } }, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz", + "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.23.1", + "invariant": "^2.2.4", + "jscodeshift": "^0.14.0", + "mkdirp": "^0.5.1", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.76.9", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz", + "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==", + "license": "MIT" + }, "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz", diff --git a/package.json b/package.json index d3cf924..33a4f5b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@clerk/clerk-expo": "^2.9.0", "@expo/metro-runtime": "~4.0.1", "@expo/vector-icons": "^14.0.2", + "@gorhom/bottom-sheet": "^5.1.2", "@neondatabase/serverless": "^0.10.4", "@react-navigation/bottom-tabs": "^7.2.0", "@react-navigation/native": "^7.0.14", @@ -29,7 +30,7 @@ "expo-linking": "~7.0.5", "expo-local-authentication": "^15.0.2", "expo-location": "^18.0.10", - "expo-router": "~4.0.19", + "expo-router": "~4.0.20", "expo-secure-store": "^14.0.1", "expo-splash-screen": "~0.29.22", "expo-status-bar": "~2.0.1", @@ -41,7 +42,7 @@ "pg": "^8.14.1", "react": "18.3.1", "react-dom": "18.3.1", - "react-native": "0.76.8", + "react-native": "^0.76.9", "react-native-animatable": "^1.4.0", "react-native-gesture-handler": "~2.20.2", "react-native-get-random-values": "^1.11.0",