diff --git a/app/(modal)/create-collaboration.tsx b/app/(modal)/create-collaboration.tsx index dacf68ad..e3ca13d3 100644 --- a/app/(modal)/create-collaboration.tsx +++ b/app/(modal)/create-collaboration.tsx @@ -43,6 +43,7 @@ const CreateCollaborationScreen = () => { }, ]); const [location, setLocation] = useState("Remote"); + const [formattedAddress, setFormattedAddress] = useState(""); const [links, setLinks] = useState([]); const [screen, setScreen] = useState(1); const theme = useTheme(); @@ -89,6 +90,10 @@ const CreateCollaborationScreen = () => { setIsModalVisible(false); }; + const onFormattedAddressChange = (address: string) => { + setFormattedAddress(address); + } + const submitCollaboration = async () => { try { if (!AuthApp.currentUser) { @@ -111,6 +116,18 @@ const CreateCollaborationScreen = () => { } const collabRef = collection(FirestoreDB, "collaborations"); + + let locationAddress = {}; + if (location === "Physical" && mapRegion.latitude && mapRegion.longitude) { + locationAddress = { + name: formattedAddress, + latlong: { + lat: mapRegion.latitude, + long: mapRegion.longitude, + }, + }; + } + await addDoc(collabRef, { name: collaborationName, brandId: selectedBrand ? selectedBrand.id : "", @@ -127,13 +144,7 @@ const CreateCollaborationScreen = () => { platform: platform[0].value, location: { type: location, - ...(location === "Physical" && { - name: "locationName", // TODO: Add location name using geocoding API - latlong: { - lat: mapRegion.latitude, - long: mapRegion.longitude, - }, - }), + ...locationAddress, }, externalLinks: links, status: "active", @@ -371,6 +382,7 @@ const CreateCollaborationScreen = () => { setMapRegion(region)} + onFormattedAddressChange={onFormattedAddressChange} /> ) } diff --git a/app/(onboarding)/onboarding-your-brand.tsx b/app/(onboarding)/onboarding-your-brand.tsx index 014fc355..5c5d364b 100644 --- a/app/(onboarding)/onboarding-your-brand.tsx +++ b/app/(onboarding)/onboarding-your-brand.tsx @@ -19,6 +19,7 @@ import { addDoc, collection, doc, setDoc } from "firebase/firestore"; import { FirestoreDB } from "@/utils/firestore"; import Toaster from "@/shared-uis/components/toaster/Toaster"; import Colors from "@/constants/Colors"; +import { useFirebaseStorageContext } from "@/contexts"; const OnboardingScreen = () => { const [brandName, setBrandName] = useState(""); @@ -29,11 +30,15 @@ const OnboardingScreen = () => { const [filteredRoles, setFilteredRoles] = useState([]); const [filteredIndustries, setFilteredIndustries] = useState([]); const [activeDropdown, setActiveDropdown] = useState(null); + const [isSubmitting, setIsSubmitting] = useState(false); const theme = useTheme(); const styles = fnStyles(theme); const { firstBrand, } = useLocalSearchParams(); + const { + uploadImageBytes, + } = useFirebaseStorageContext(); const pickImage = async () => { let result = await ImagePicker.launchImageLibraryAsync({ @@ -42,6 +47,7 @@ const OnboardingScreen = () => { aspect: [4, 3], quality: 1, }); + if (!result.canceled) { setImage(result.assets[0].uri); } @@ -67,17 +73,26 @@ const OnboardingScreen = () => { const handleSubmit = async () => { try { + setIsSubmitting(true); const user = AuthApp.currentUser; if (!brandName || !role || !industry || !website) { Toaster.error("Please fill in all fields."); + setIsSubmitting(false); return; } + + let imageUrl = ""; + if (image) { + const blob = await fetch(image).then((res) => res.blob()); + imageUrl = await uploadImageBytes(blob, `brands/${brandName}-${Date.now()}`); + } + if (user) { const colRef = collection(FirestoreDB, "brands"); let brandData = { name: brandName, - image: "", + image: imageUrl, profile: { industry, website, @@ -99,6 +114,7 @@ const OnboardingScreen = () => { role, }); + setIsSubmitting(false); router.navigate({ pathname: "/(onboarding)/onboarding-brand-preference", params: { brandId: docRef.id }, @@ -238,6 +254,7 @@ const OnboardingScreen = () => { />