Various updates....

This commit is contained in:
Milan Paunovic
2024-10-20 01:44:20 +02:00
parent d87d67eae5
commit 00583ac115
13 changed files with 280 additions and 154 deletions

View File

@ -16,7 +16,7 @@
"supportsTablet": true, "supportsTablet": true,
"bundleIdentifier": "com.cally.app", "bundleIdentifier": "com.cally.app",
"googleServicesFile": "./ios/GoogleService-Info.plist", "googleServicesFile": "./ios/GoogleService-Info.plist",
"buildNumber": "23", "buildNumber": "30",
"usesAppleSignIn": true "usesAppleSignIn": true
}, },
"android": { "android": {
@ -74,7 +74,8 @@
"expo-apple-authentication" "expo-apple-authentication"
], ],
"expo-font", "expo-font",
"expo-localization" "expo-localization",
"./plugins/withPodfile"
], ],
"experiments": { "experiments": {
"typedRoutes": true "typedRoutes": true

View File

@ -52,11 +52,19 @@ import "react-native-reanimated";
import {AuthContextProvider} from "@/contexts/AuthContext"; import {AuthContextProvider} from "@/contexts/AuthContext";
import {QueryClient, QueryClientProvider} from "react-query"; import {QueryClient, QueryClientProvider} from "react-query";
import {TextProps, ThemeManager, Toast, Typography,} from "react-native-ui-lib"; import {TextProps, ThemeManager, Toast, Typography,} from "react-native-ui-lib";
import {Platform} from 'react-native';
import KeyboardManager from 'react-native-keyboard-manager';
SplashScreen.preventAutoHideAsync(); SplashScreen.preventAutoHideAsync();
const queryClient = new QueryClient(); const queryClient = new QueryClient();
if (Platform.OS === 'ios') {
KeyboardManager.setEnable(true);
KeyboardManager.setToolbarPreviousNextButtonEnable(true);
}
if (__DEV__) { if (__DEV__) {
// functions().useEmulator("localhost", 5001); // functions().useEmulator("localhost", 5001);
// firestore().useEmulator("localhost", 5471); // firestore().useEmulator("localhost", 5471);

View File

@ -5,6 +5,7 @@ import {
Colors, Colors,
Dialog, Dialog,
FloatingButton, FloatingButton,
KeyboardAwareScrollView,
PanningProvider, PanningProvider,
Picker, Picker,
Text, Text,
@ -27,6 +28,7 @@ import CircledXIcon from "@/assets/svgs/CircledXIcon";
import ProfileIcon from "@/assets/svgs/ProfileIcon"; import ProfileIcon from "@/assets/svgs/ProfileIcon";
import NavToDosIcon from "@/assets/svgs/NavToDosIcon"; import NavToDosIcon from "@/assets/svgs/NavToDosIcon";
import Ionicons from "@expo/vector-icons/Ionicons"; import Ionicons from "@expo/vector-icons/Ionicons";
import {PreviousNextView} from "react-native-keyboard-manager";
const MyGroup = () => { const MyGroup = () => {
const [showAddUserDialog, setShowAddUserDialog] = useState(false); const [showAddUserDialog, setShowAddUserDialog] = useState(false);
@ -299,136 +301,151 @@ const MyGroup = () => {
visible={showNewUserInfoDialog} visible={showNewUserInfoDialog}
onDismiss={() => setShowNewUserInfoDialog(false)} onDismiss={() => setShowNewUserInfoDialog(false)}
> >
<Card padding-25 style={styles.dialogCard}> <PreviousNextView>
<View row spread> <KeyboardAwareScrollView>
<Text style={{fontFamily: "Manrope_500Medium", fontSize: 16}}> <Card padding-25 style={styles.dialogCard}>
New User Information <View row spread>
</Text> <Text style={{fontFamily: "Manrope_500Medium", fontSize: 16}}>
<TouchableOpacity onPress={() => { New User Information
setShowNewUserInfoDialog(false) </Text>
}}> <TouchableOpacity onPress={() => {
<CircledXIcon/> setShowNewUserInfoDialog(false)
</TouchableOpacity> }}>
</View> <CircledXIcon/>
<View style={styles.divider} spread/> </TouchableOpacity>
</View>
<View style={styles.divider} spread/>
<View row centerV gap-20 marginV-20> <View row centerV gap-20 marginV-20>
<View <View
height={65.54} height={65.54}
width={65.54} width={65.54}
children={ children={
<ProfileIcon color={"#d6d6d6"} width={37} height={37}/> <ProfileIcon color={"#d6d6d6"} width={37} height={37}/>
} }
backgroundColor={Colors.grey60} backgroundColor={Colors.grey60}
style={{borderRadius: 25}} style={{borderRadius: 25}}
center center
/> />
<TouchableOpacity onPress={() => { <TouchableOpacity onPress={() => {
}}> }}>
<Text color="#50be0c" style={styles.jakarta13} marginL-15> <Text color="#50be0c" style={styles.jakarta13} marginL-15>
Upload User Profile Photo Upload User Profile Photo
</Text>
</TouchableOpacity>
</View>
<Text style={styles.jakarta12}>Member Status</Text>
<View style={styles.viewPicker}>
<Picker
editable={!isLoading}
value={selectedStatus}
onChange={(item) => setSelectedStatus(item)}
showSearch
floatingPlaceholder
style={styles.inViewPicker}
trailingAccessory={
<View style={{
justifyContent: "center",
alignItems: "center",
height: "100%",
marginTop: -38,
paddingRight: 15
}}>
<Ionicons name={"chevron-down"} style={{alignSelf: "center"}} size={20}
color={"#000000"}/>
</View>
}
>
<Picker.Item label="Child" value={ProfileType.CHILD}/>
<Picker.Item label="Parent" value={ProfileType.PARENT}/>
<Picker.Item label="Caregiver" value={ProfileType.CAREGIVER}/>
<Picker.Item
label="Family Device"
value={ProfileType.FAMILY_DEVICE}
/>
</Picker>
</View>
<Text style={styles.jakarta12}>
{selectedStatus === ProfileType.FAMILY_DEVICE
? "Device Name"
: "First Name"}
</Text> </Text>
</TouchableOpacity>
</View>
<Text style={styles.jakarta12}>Member Status</Text>
<View style={styles.viewPicker}>
<Picker
editable={!isLoading}
value={selectedStatus}
onChange={(item) => setSelectedStatus(item)}
showSearch
floatingPlaceholder
style={styles.inViewPicker}
trailingAccessory={
<View style={{ justifyContent: "center", alignItems: "center", height:"100%", marginTop: -38, paddingRight: 15}}>
<Ionicons name={"chevron-down"} style={{ alignSelf: "center" }} size={20} color={"#000000"} />
</View>
}
>
<Picker.Item label="Child" value={ProfileType.CHILD}/>
<Picker.Item label="Parent" value={ProfileType.PARENT}/>
<Picker.Item label="Caregiver" value={ProfileType.CAREGIVER}/>
<Picker.Item
label="Family Device"
value={ProfileType.FAMILY_DEVICE}
/>
</Picker>
</View>
<Text style={styles.jakarta12}>
{selectedStatus === ProfileType.FAMILY_DEVICE
? "Device Name"
: "First Name"}
</Text>
<TextField
editable={!isLoading}
placeholder={
selectedStatus === ProfileType.FAMILY_DEVICE
? "Device name"
: "First name"
}
value={firstName}
onChangeText={setFirstName}
style={styles.inputField}
onSubmitEditing={() => {
lNameRef.current?.focus()
}}
blurOnSubmit={false}
/>
{selectedStatus !== ProfileType.FAMILY_DEVICE && (
<>
<Text style={styles.jakarta12}>Last Name</Text>
<TextField <TextField
ref={lNameRef}
editable={!isLoading} editable={!isLoading}
placeholder="Last name" placeholder={
value={lastName} selectedStatus === ProfileType.FAMILY_DEVICE
onChangeText={setLastName} ? "Device name"
: "First name"
}
value={firstName}
onChangeText={setFirstName}
style={styles.inputField} style={styles.inputField}
onSubmitEditing={() => { onSubmitEditing={() => {
emailRef.current?.focus() lNameRef.current?.focus()
}} }}
blurOnSubmit={false} blurOnSubmit={false}
returnKeyType="next"
/> />
</>
)}
{selectedStatus !== ProfileType.FAMILY_DEVICE && ( {selectedStatus !== ProfileType.FAMILY_DEVICE && (
<> <>
<Text style={styles.jakarta12}>Email Address (Optional)</Text> <Text style={styles.jakarta12}>Last Name</Text>
<TextField <TextField
ref={emailRef} ref={lNameRef}
editable={!isLoading} editable={!isLoading}
placeholder="Email address" placeholder="Last name"
value={email} value={lastName}
onChangeText={setEmail} onChangeText={setLastName}
keyboardType="email-address" style={styles.inputField}
autoCapitalize="none" onSubmitEditing={() => {
style={styles.inputField} emailRef.current?.focus()
}}
blurOnSubmit={false}
returnKeyType="next"
/>
</>
)}
{selectedStatus !== ProfileType.FAMILY_DEVICE && (
<>
<Text style={styles.jakarta12}>Email Address (Optional)</Text>
<TextField
ref={emailRef}
editable={!isLoading}
placeholder="Email address"
value={email}
onChangeText={setEmail}
keyboardType="email-address"
autoCapitalize="none"
style={styles.inputField}
returnKeyType="done"
/>
</>
)}
<Button
disabled={
!firstName ||
(selectedStatus !== ProfileType.FAMILY_DEVICE && !lastName) ||
isLoading
}
label={isLoading ? "Adding..." : "Add group member"}
backgroundColor="#fd1775"
labelStyle={{
fontFamily: "PlusJakartaSans_500Medium",
fontSize: 15,
marginLeft: 7,
}}
style={{marginTop: 20, backgroundColor: "#fd1775"}}
iconSource={() => <NavToDosIcon width={22} color={"white"}/>}
onPress={handleCreateSubUser}
/> />
</> </Card>
)} </KeyboardAwareScrollView>
</PreviousNextView>
<Button
disabled={
!firstName ||
(selectedStatus !== ProfileType.FAMILY_DEVICE && !lastName) ||
isLoading
}
label={isLoading ? "Adding..." : "Add group member"}
backgroundColor="#fd1775"
labelStyle={{
fontFamily: "PlusJakartaSans_500Medium",
fontSize: 15,
marginLeft: 7,
}}
style={{marginTop: 20, backgroundColor: "#fd1775"}}
iconSource={() => <NavToDosIcon width={22} color={"white"}/>}
onPress={handleCreateSubUser}
/>
</Card>
</Dialog> </Dialog>
</View> </View>
); );

View File

@ -12,37 +12,57 @@ export const useGetEvents = () => {
return useQuery({ return useQuery({
queryKey: ["events", user?.uid, isFamilyView], queryKey: ["events", user?.uid, isFamilyView],
queryFn: async () => { queryFn: async () => {
const eventsQuery = firestore() const db = firestore();
.collection("Events")
.where("creatorId", "==", user?.uid) const userId = user?.uid; // Assuming user is defined
.where("attendees", "array-contains", user?.uid); const familyId = profileData?.familyId; // Assuming profileData is defined
let allEvents = [];
if (isFamilyView) { if (isFamilyView) {
eventsQuery.where("familyID", "==", profileData?.familyId); const familyQuery = db.collection("Events").where("familyID", "==", familyId);
const familySnapshot = await familyQuery.get();
const familyEvents = familySnapshot.docs.map(doc => doc.data());
allEvents = [...familyEvents];
} else {
const creatorQuery = db.collection("Events").where("creatorId", "==", userId);
const attendeeQuery = db.collection("Events").where("attendees", "array-contains", userId);
const [creatorSnapshot, attendeeSnapshot] = await Promise.all([
creatorQuery.get(),
attendeeQuery.get(),
]);
const creatorEvents = creatorSnapshot.docs.map(doc => doc.data());
const attendeeEvents = attendeeSnapshot.docs.map(doc => doc.data());
allEvents = [...creatorEvents, ...attendeeEvents];
} }
const snapshot = await eventsQuery.get(); allEvents = allEvents.filter((event, index, self) =>
index === self.findIndex(e => e.id === event.id)
);
return await Promise.all(snapshot.docs.map(async (doc) => { return await Promise.all(
const data = doc.data(); allEvents.map(async (event) => {
const profileSnapshot = await db
.collection("Profiles")
.doc(event.creatorId)
.get();
const profileSnapshot = await firestore() const profileData = profileSnapshot.data();
.collection("Profiles") const eventColor = profileData?.eventColor || colorMap.pink; // Default color if not found
.doc(data.creatorId)
.get();
const profileData = profileSnapshot.data(); return {
const eventColor: string = profileData?.eventColor || colorMap.pink // Default color if not found id: event.id,
title: event.title,
return { start: new Date(event.startDate.seconds * 1000),
id: doc.id, end: new Date(event.endDate.seconds * 1000),
title: data.title, hideHours: event.allDay,
start: new Date(data.startDate.seconds * 1000), eventColor: eventColor,
end: new Date(data.endDate.seconds * 1000), };
hideHours: data.allDay, })
eventColor: eventColor, );
};
}));
}, },
staleTime: Infinity, staleTime: Infinity,
cacheTime: Infinity cacheTime: Infinity

View File

@ -14,6 +14,7 @@ install! 'cocoapods',
prepare_react_native_project! prepare_react_native_project!
target 'cally' do target 'cally' do
pod 'IQKeyboardManagerSwift', :git => 'https://github.com/douglasjunior/IQKeyboardManager.git', :branch => 'react-native-keyboard-manager'
use_expo_modules! use_expo_modules!
config = use_native_modules! config = use_native_modules!

View File

@ -1495,6 +1495,7 @@ PODS:
- hermes-engine (0.74.3): - hermes-engine (0.74.3):
- hermes-engine/Pre-built (= 0.74.3) - hermes-engine/Pre-built (= 0.74.3)
- hermes-engine/Pre-built (0.74.3) - hermes-engine/Pre-built (0.74.3)
- IQKeyboardManagerSwift (6.5.16)
- leveldb-library (1.22.5) - leveldb-library (1.22.5)
- nanopb (2.30909.1): - nanopb (2.30909.1):
- nanopb/decode (= 2.30909.1) - nanopb/decode (= 2.30909.1)
@ -2688,6 +2689,10 @@ PODS:
- React-logger (= 0.74.3) - React-logger (= 0.74.3)
- React-perflogger (= 0.74.3) - React-perflogger (= 0.74.3)
- React-utils (= 0.74.3) - React-utils (= 0.74.3)
- ReactNativeKeyboardManager (6.5.16-0):
- IQKeyboardManagerSwift (= 6.5.16)
- React-Core
- React-RCTText
- ReactNativeUiLib (4.2.0): - ReactNativeUiLib (4.2.0):
- React - React
- RecaptchaInterop (100.0.0) - RecaptchaInterop (100.0.0)
@ -2831,6 +2836,7 @@ DEPENDENCIES:
- fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- IQKeyboardManagerSwift (from `https://github.com/douglasjunior/IQKeyboardManager.git`, branch `react-native-keyboard-manager`)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`)
@ -2883,6 +2889,7 @@ DEPENDENCIES:
- React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
- React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- ReactNativeKeyboardManager (from `../node_modules/react-native-keyboard-manager`)
- ReactNativeUiLib (from `../node_modules/react-native-ui-lib`) - ReactNativeUiLib (from `../node_modules/react-native-ui-lib`)
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)" - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- "RNFBApp (from `../node_modules/@react-native-firebase/app`)" - "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
@ -3012,6 +3019,9 @@ EXTERNAL SOURCES:
hermes-engine: hermes-engine:
:podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
:tag: hermes-2024-06-28-RNv0.74.3-7bda0c267e76d11b68a585f84cfdd65000babf85 :tag: hermes-2024-06-28-RNv0.74.3-7bda0c267e76d11b68a585f84cfdd65000babf85
IQKeyboardManagerSwift:
:branch: react-native-keyboard-manager
:git: https://github.com/douglasjunior/IQKeyboardManager.git
RCT-Folly: RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTDeprecation: RCTDeprecation:
@ -3112,6 +3122,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/react/utils" :path: "../node_modules/react-native/ReactCommon/react/utils"
ReactCommon: ReactCommon:
:path: "../node_modules/react-native/ReactCommon" :path: "../node_modules/react-native/ReactCommon"
ReactNativeKeyboardManager:
:path: "../node_modules/react-native-keyboard-manager"
ReactNativeUiLib: ReactNativeUiLib:
:path: "../node_modules/react-native-ui-lib" :path: "../node_modules/react-native-ui-lib"
RNDateTimePicker: RNDateTimePicker:
@ -3137,6 +3149,11 @@ EXTERNAL SOURCES:
Yoga: Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga" :path: "../node_modules/react-native/ReactCommon/yoga"
CHECKOUT OPTIONS:
IQKeyboardManagerSwift:
:commit: 718cbed77cdd5ecd8b779afe543ba5b2df45b40a
:git: https://github.com/douglasjunior/IQKeyboardManager.git
SPEC CHECKSUMS: SPEC CHECKSUMS:
abseil: d121da9ef7e2ff4cab7666e76c5a3e0915ae08c3 abseil: d121da9ef7e2ff4cab7666e76c5a3e0915ae08c3
AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa
@ -3201,6 +3218,7 @@ SPEC CHECKSUMS:
gRPC-Core: eee4be35df218649fe66d721a05a7f27a28f069b gRPC-Core: eee4be35df218649fe66d721a05a7f27a28f069b
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
hermes-engine: 1f547997900dd0752dc0cc0ae6dd16173c49e09b hermes-engine: 1f547997900dd0752dc0cc0ae6dd16173c49e09b
IQKeyboardManagerSwift: 90ba81812fbbd6694924a95a271fa3affdf04a14
leveldb-library: e8eadf9008a61f9e1dde3978c086d2b6d9b9dc28 leveldb-library: e8eadf9008a61f9e1dde3978c086d2b6d9b9dc28
nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
@ -3256,6 +3274,7 @@ SPEC CHECKSUMS:
React-runtimescheduler: e4ad653e1d2f5ff40ba047446cacde009694f0ed React-runtimescheduler: e4ad653e1d2f5ff40ba047446cacde009694f0ed
React-utils: 6f7ac39d9a0de447d4334bb25d144a28c0c5d8c9 React-utils: 6f7ac39d9a0de447d4334bb25d144a28c0c5d8c9
ReactCommon: 4a09c7d8a06e93c1e2e988a3b9f3db3d2449f2fc ReactCommon: 4a09c7d8a06e93c1e2e988a3b9f3db3d2449f2fc
ReactNativeKeyboardManager: 704d89bde3cb1e0f432bc273a44eec96eab9d90f
ReactNativeUiLib: deb877cd9b36cf5cad3c72b226bb330060681351 ReactNativeUiLib: deb877cd9b36cf5cad3c72b226bb330060681351
RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21 RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21
RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14 RNDateTimePicker: 40ffda97d071a98a10fdca4fa97e3977102ccd14
@ -3273,6 +3292,6 @@ SPEC CHECKSUMS:
Yoga: bd92064a0d558be92786820514d74fc4dddd1233 Yoga: bd92064a0d558be92786820514d74fc4dddd1233
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
PODFILE CHECKSUM: 50f618790da7cbbfd5c5e988b7f9370bd45d34a6 PODFILE CHECKSUM: ae388457578eb44dbbdba1451a584b59f3bc21dd
COCOAPODS: 1.15.2 COCOAPODS: 1.15.2

View File

@ -0,0 +1,7 @@
//
// ReactNativeKeyboardManager.swift
// cally
//
// Created by Milan Paunovic on 20.10.24..
//

View File

@ -21,7 +21,7 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
103D20271F044483964A389F /* cally-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "cally-Bridging-Header.h"; path = "cally/cally-Bridging-Header.h"; sourceTree = "<group>"; }; 103D20271F044483964A389F /* cally-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "cally-Bridging-Header.h"; path = "cally/cally-Bridging-Header.h"; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* cally.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cally.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07F961A680F5B00A75B9A /* Cally.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cally.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = cally/AppDelegate.h; sourceTree = "<group>"; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = cally/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = cally/AppDelegate.mm; sourceTree = "<group>"; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = cally/AppDelegate.mm; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = cally/Images.xcassets; sourceTree = "<group>"; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = cally/Images.xcassets; sourceTree = "<group>"; };
@ -35,6 +35,7 @@
BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F20F68FCCB33056D70B2396B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = cally/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; F20F68FCCB33056D70B2396B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = cally/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
F3A90F152CC474F700DDA353 /* ReactNativeKeyboardManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactNativeKeyboardManager.swift; sourceTree = "<group>"; };
F56C9EADA6FA4AEAA71245EB /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "cally/GoogleService-Info.plist"; sourceTree = "<group>"; }; F56C9EADA6FA4AEAA71245EB /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "cally/GoogleService-Info.plist"; sourceTree = "<group>"; };
FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-cally/ExpoModulesProvider.swift"; sourceTree = "<group>"; }; FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-cally/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -88,6 +89,7 @@
83CBB9F61A601CBA00E9B192 = { 83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F3A90F152CC474F700DDA353 /* ReactNativeKeyboardManager.swift */,
13B07FAE1A68108700A75B9A /* cally */, 13B07FAE1A68108700A75B9A /* cally */,
832341AE1AAA6A7D00B99B32 /* Libraries */, 832341AE1AAA6A7D00B99B32 /* Libraries */,
83CBBA001A601CBA00E9B192 /* Products */, 83CBBA001A601CBA00E9B192 /* Products */,
@ -103,7 +105,7 @@
83CBBA001A601CBA00E9B192 /* Products */ = { 83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
13B07F961A680F5B00A75B9A /* cally.app */, 13B07F961A680F5B00A75B9A /* Cally.app */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@ -166,7 +168,7 @@
); );
name = cally; name = cally;
productName = cally; productName = cally;
productReference = 13B07F961A680F5B00A75B9A /* cally.app */; productReference = 13B07F961A680F5B00A75B9A /* Cally.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
/* End PBXNativeTarget section */ /* End PBXNativeTarget section */
@ -317,6 +319,7 @@
"${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Core_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Core_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/ReachabilitySwift.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/ReachabilitySwift.bundle",
@ -353,6 +356,7 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Core_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Core_Privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/IQKeyboardManagerSwift.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ReachabilitySwift.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ReachabilitySwift.bundle",
@ -448,7 +452,7 @@
); );
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
PRODUCT_BUNDLE_IDENTIFIER = com.cally.app; PRODUCT_BUNDLE_IDENTIFIER = com.cally.app;
PRODUCT_NAME = "Cally"; PRODUCT_NAME = Cally;
SWIFT_OBJC_BRIDGING_HEADER = "cally/cally-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "cally/cally-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -482,7 +486,7 @@
); );
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
PRODUCT_BUNDLE_IDENTIFIER = com.cally.app; PRODUCT_BUNDLE_IDENTIFIER = com.cally.app;
PRODUCT_NAME = "Cally"; PRODUCT_NAME = Cally;
SWIFT_OBJC_BRIDGING_HEADER = "cally/cally-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "cally/cally-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";

View File

@ -15,7 +15,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "cally.app" BuildableName = "Cally.app"
BlueprintName = "cally" BlueprintName = "cally"
ReferencedContainer = "container:cally.xcodeproj"> ReferencedContainer = "container:cally.xcodeproj">
</BuildableReference> </BuildableReference>
@ -55,7 +55,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "cally.app" BuildableName = "Cally.app"
BlueprintName = "cally" BlueprintName = "cally"
ReferencedContainer = "container:cally.xcodeproj"> ReferencedContainer = "container:cally.xcodeproj">
</BuildableReference> </BuildableReference>
@ -72,7 +72,7 @@
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "cally.app" BuildableName = "Cally.app"
BlueprintName = "cally" BlueprintName = "cally"
ReferencedContainer = "container:cally.xcodeproj"> ReferencedContainer = "container:cally.xcodeproj">
</BuildableReference> </BuildableReference>

View File

@ -109,6 +109,7 @@
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route</string>
</array> </array>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>SplashScreen</string> <string>SplashScreen</string>

View File

@ -76,6 +76,7 @@
"react-native-calendars": "^1.1306.0", "react-native-calendars": "^1.1306.0",
"react-native-gesture-handler": "~2.16.1", "react-native-gesture-handler": "~2.16.1",
"react-native-gifted-charts": "^1.4.41", "react-native-gifted-charts": "^1.4.41",
"react-native-keyboard-manager": "^6.5.16-0",
"react-native-linear-gradient": "^2.8.3", "react-native-linear-gradient": "^2.8.3",
"react-native-onboarding-swiper": "^1.3.0", "react-native-onboarding-swiper": "^1.3.0",
"react-native-qrcode-svg": "^6.3.2", "react-native-qrcode-svg": "^6.3.2",

42
plugins/withPodfile.js Normal file
View File

@ -0,0 +1,42 @@
const { withDangerousMod, withPlugins } = require('@expo/config-plugins');
const fs = require('fs');
const path = require('path');
async function readFile(path) {
return fs.promises.readFile(path, 'utf8');
}
async function saveFile(path, content) {
return fs.promises.writeFile(path, content, 'utf8');
}
module.exports = (config) =>
withPlugins(config, [
(config) => {
return withDangerousMod(config, [
'iOS',
async (config) => {
const file = path.join(config.modRequest.platformProjectRoot, 'Podfile');
/*
* You need to remove the line before adding it.
* If you don't do this and you run `expo prebuild` in a dirt project
* your file will have the same line added twice
*/
const contents = (await readFile(file)).replace(
/pod 'IQKeyboardManagerSwift', :git => 'https:\/\/github.com\/douglasjunior\/IQKeyboardManager.git', :branch => 'react-native-keyboard-manager'\n\n/g,
'',
);
/*
* Now re-adds the content
*/
await saveFile(
file,
`pod 'IQKeyboardManagerSwift', :git => 'https://github.com/douglasjunior/IQKeyboardManager.git', :branch => 'react-native-keyboard-manager'\n\n${contents}`,
);
return config;
},
]);
},
]);

View File

@ -8872,6 +8872,11 @@ react-native-helmet-async@2.0.4:
react-fast-compare "^3.2.2" react-fast-compare "^3.2.2"
shallowequal "^1.1.0" shallowequal "^1.1.0"
react-native-keyboard-manager@^6.5.16-0:
version "6.5.16-0"
resolved "https://registry.yarnpkg.com/react-native-keyboard-manager/-/react-native-keyboard-manager-6.5.16-0.tgz#ead536f01ade296f483cbf3ecaf3026cff702c9c"
integrity sha512-vdNp7PZ0hfxeJXqi7RaHTriQgZqIFKaG3Kx8e4Bdtkne8y9wQ1gGsiAfee+dmmo2kWZaDSbBB7CCKJwRIy5zGg==
react-native-linear-gradient@^2.8.3: react-native-linear-gradient@^2.8.3:
version "2.8.3" version "2.8.3"
resolved "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz" resolved "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz"