From 04ea8c9284b079cc25a44bbf9bfc3b6fdb3f2cf4 Mon Sep 17 00:00:00 2001 From: shafi54 <108669266+shafi-aviz@users.noreply.github.com> Date: Sat, 21 Feb 2026 19:42:18 +0530 Subject: [PATCH] enh --- apps/backend/assets/public/demo.txt | 1 + apps/backend/assets/public/halal.jpg | Bin 0 -> 27580 bytes apps/backend/assets/public/preservs.jpg | Bin 0 -> 24869 bytes apps/backend/index.ts | 9 ++ .../components/CheckoutAddressSelector.tsx | 92 ++++++++++++++++-- apps/user-ui/components/NextOrderGlimpse.tsx | 30 +++--- 6 files changed, 110 insertions(+), 22 deletions(-) create mode 100644 apps/backend/assets/public/demo.txt create mode 100644 apps/backend/assets/public/halal.jpg create mode 100644 apps/backend/assets/public/preservs.jpg diff --git a/apps/backend/assets/public/demo.txt b/apps/backend/assets/public/demo.txt new file mode 100644 index 0000000..2669d4e --- /dev/null +++ b/apps/backend/assets/public/demo.txt @@ -0,0 +1 @@ +This is a demo file. \ No newline at end of file diff --git a/apps/backend/assets/public/halal.jpg b/apps/backend/assets/public/halal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76baf5f32186ff3d45a7eb229911e52aad140154 GIT binary patch literal 27580 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�RzfR=N(dz(QJY;Xh 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 F`Y%KQvP}R0 literal 0 HcmV?d00001 diff --git a/apps/backend/index.ts b/apps/backend/index.ts index 2bb5332..5f695b3 100755 --- a/apps/backend/index.ts +++ b/apps/backend/index.ts @@ -163,6 +163,15 @@ if (fs.existsSync(fallbackUiIndex)) { console.warn(`Fallback UI build not found at ${fallbackUiIndex}`) } +// Serve /assets/public folder at /assets route +const assetsPublicDir = path.resolve(__dirname, './assets/public'); +if (fs.existsSync(assetsPublicDir)) { + app.use('/assets', express.static(assetsPublicDir)); + console.log('Serving /assets from', assetsPublicDir); +} else { + console.warn('Assets public folder not found at', assetsPublicDir); +} + // Global error handler app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => { console.error(err); diff --git a/apps/user-ui/components/CheckoutAddressSelector.tsx b/apps/user-ui/components/CheckoutAddressSelector.tsx index 5d5b456..df91838 100644 --- a/apps/user-ui/components/CheckoutAddressSelector.tsx +++ b/apps/user-ui/components/CheckoutAddressSelector.tsx @@ -1,10 +1,12 @@ import React, { useState, useEffect, useRef } from 'react'; -import { View, Text, TouchableOpacity, ScrollView } from 'react-native'; +import { View, Text, TouchableOpacity, ScrollView, Alert } from 'react-native'; import { tw, BottomDialog, RawBottomDialog } from 'common-ui'; import { useQueryClient } from '@tanstack/react-query'; import AddressForm from '@/src/components/AddressForm'; +import LocationAttacher from '@/src/components/LocationAttacher'; import MaterialIcons from '@expo/vector-icons/MaterialIcons'; import { trpc } from '@/src/trpc-client'; +import * as Location from 'expo-location'; interface AddressSelectorProps { selectedAddress: number | null; @@ -16,10 +18,24 @@ const CheckoutAddressSelector: React.FC = ({ onAddressSelect, }) => { const [showAddAddress, setShowAddAddress] = useState(false); + const [editingLocationAddressId, setEditingLocationAddressId] = useState(null); + const [locationLoading, setLocationLoading] = useState(false); const queryClient = useQueryClient(); const scrollViewRef = useRef(null); const { data: addresses } = trpc.user.address.getUserAddresses.useQuery(); + const updateAddressMutation = trpc.user.address.updateAddress.useMutation({ + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['user.address.getUserAddresses'] }); + setEditingLocationAddressId(null); + Alert.alert('Success', 'Location attached successfully'); + }, + onError: (error: any) => { + setEditingLocationAddressId(null); + Alert.alert('Error', error.message || 'Failed to attach location'); + }, + }); + // Sort addresses with selected first, then default, then others const sortedAddresses = React.useMemo(() => { if (!addresses?.data) return []; @@ -52,6 +68,45 @@ const CheckoutAddressSelector: React.FC = ({ scrollViewRef.current?.scrollTo({ x: 0, y: 0, animated: true }); }; + const handleAttachLocation = async (address: any) => { + setEditingLocationAddressId(address.id); + setLocationLoading(true); + try { + const { status } = await Location.requestForegroundPermissionsAsync(); + + if (status !== 'granted') { + Alert.alert('Permission Denied', 'Location permission is required to attach your current location'); + setLocationLoading(false); + setEditingLocationAddressId(null); + return; + } + + const location = await Location.getCurrentPositionAsync({ + accuracy: Location.Accuracy.High, + }); + + const { latitude, longitude } = location.coords; + + updateAddressMutation.mutate({ + id: address.id, + name: address.name, + phone: address.phone, + addressLine1: address.addressLine1, + addressLine2: address.addressLine2 || '', + city: address.city, + state: address.state, + pincode: address.pincode, + isDefault: address.isDefault, + latitude, + longitude, + }); + } catch (error) { + Alert.alert('Error', 'Unable to fetch location. Please check your GPS settings.'); + setLocationLoading(false); + setEditingLocationAddressId(null); + } + }; + return ( <> @@ -80,19 +135,19 @@ const CheckoutAddressSelector: React.FC = ({ ) : ( - {sortedAddresses.map((address) => ( { - onAddressSelect(address.id); - resetScrollToLeft(); - }} + onAddressSelect(address.id); + resetScrollToLeft(); + }} style={tw`w-72 p-4 mr-3 bg-gray-50 rounded-xl border-2 ${selectedAddress === address.id ? 'border-brand500 bg-blue-50' : 'border-gray-200' } shadow-sm`} > @@ -126,8 +181,25 @@ const CheckoutAddressSelector: React.FC = ({ ))} )} + + {/* Attach Location for selected address - outside the white box */} + {selectedAddress && (() => { + const selectedAddr = sortedAddresses.find(a => a.id === selectedAddress); + return selectedAddr && !selectedAddr.latitude && !selectedAddr.longitude ? ( + handleAttachLocation(selectedAddr)} + disabled={locationLoading && editingLocationAddressId === selectedAddr.id} + style={tw`mt-3 py-2 px-3 bg-blue-50 rounded-lg self-start`} + > + + {locationLoading && editingLocationAddressId === selectedAddr.id ? 'Attaching...' : '+ Attach Current Location'} + + + ) : null; + })()} + {/* setShowAddAddress(false)}> */} setShowAddAddress(false)}> @@ -140,11 +212,11 @@ const CheckoutAddressSelector: React.FC = ({ } queryClient.invalidateQueries(); }} - /> - + /> + {/* */} ); }; -export default CheckoutAddressSelector; \ No newline at end of file +export default CheckoutAddressSelector; diff --git a/apps/user-ui/components/NextOrderGlimpse.tsx b/apps/user-ui/components/NextOrderGlimpse.tsx index 972f5d3..f3d154b 100644 --- a/apps/user-ui/components/NextOrderGlimpse.tsx +++ b/apps/user-ui/components/NextOrderGlimpse.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { View, TouchableOpacity, ActivityIndicator } from 'react-native'; +import { View, TouchableOpacity, ActivityIndicator, Linking } from 'react-native'; import { useRouter } from 'expo-router'; import { tw, MyText } from 'common-ui'; import { useNavigationTarget } from 'common-ui/hooks/useNavigationTarget'; @@ -8,6 +8,7 @@ import dayjs from 'dayjs'; import { trpc } from '@/src/trpc-client'; import { Image } from 'expo-image'; import { orderStatusManipulator } from '@/src/lib/string-manipulators'; +import { useGetEssentialConsts } from '@/src/api-hooks/essential-consts.api'; interface OrderItem { productName: string; @@ -47,23 +48,15 @@ export default function NextOrderGlimpse() { pageSize: 50, }); - const allOrders: Order[] = ordersData?.data || []; + const { data: essentialConsts } = useGetEssentialConsts(); - const now = dayjs(); + const allOrders: Order[] = ordersData?.data || []; const upcomingOrders = allOrders.filter(order => { if (order.orderStatus.toLowerCase() === 'cancelled') return false; if (order.deliveryStatus.toLowerCase() === 'success') return false; - if (order.isFlashDelivery) { - return true; - } - - if (order.deliveryDate) { - return dayjs(order.deliveryDate).isAfter(now); - } - - return false; + return true; }); upcomingOrders.sort((a, b) => { @@ -177,6 +170,19 @@ export default function NextOrderGlimpse() { )} + + {/* Support Mobile Number */} + {essentialConsts?.supportMobile && ( + Linking.openURL(`tel:${essentialConsts.supportMobile}`)} + > + + + Need help? Call {essentialConsts.supportMobile} + + + )} );