diff --git a/app.json b/app.json
index 41e9b57..6e3296f 100644
--- a/app.json
+++ b/app.json
@@ -65,6 +65,12 @@
},
"description": "",
"plugins": [
+ [
+ "expo-dev-client",
+ {
+ "launchMode": "most-recent"
+ }
+ ],
[
"expo-media-library",
{
diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx
deleted file mode 100644
index 54e11d0..0000000
--- a/app/(tabs)/_layout.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Tabs } from 'expo-router';
-import React from 'react';
-
-import { HapticTab } from '@/components/haptic-tab';
-import { IconSymbol } from '@/components/ui/icon-symbol';
-import { Colors } from '@/constants/theme';
-import { useColorScheme } from '@/hooks/use-color-scheme';
-
-export default function TabLayout() {
- const colorScheme = useColorScheme();
-
- return (
-
- ,
- }}
- />
- ,
- }}
- />
-
- );
-}
diff --git a/app/(tabs)/explore.tsx b/app/(tabs)/explore.tsx
deleted file mode 100644
index 71518f9..0000000
--- a/app/(tabs)/explore.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import { Image } from 'expo-image';
-import { Platform, StyleSheet } from 'react-native';
-
-import { Collapsible } from '@/components/ui/collapsible';
-import { ExternalLink } from '@/components/external-link';
-import ParallaxScrollView from '@/components/parallax-scroll-view';
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-import { IconSymbol } from '@/components/ui/icon-symbol';
-import { Fonts } from '@/constants/theme';
-
-export default function TabTwoScreen() {
- return (
-
- }>
-
-
- Explore
-
-
- This app includes example code to help you get started.
-
-
- This app has two screens:{' '}
- app/(tabs)/index.tsx and{' '}
- app/(tabs)/explore.tsx
-
-
- The layout file in app/(tabs)/_layout.tsx{' '}
- sets up the tab navigator.
-
-
- Learn more
-
-
-
-
- You can open this project on Android, iOS, and the web. To open the web version, press{' '}
- w in the terminal running this project.
-
-
-
-
- For static images, you can use the @2x and{' '}
- @3x suffixes to provide files for
- different screen densities
-
-
-
- Learn more
-
-
-
-
- This template has light and dark mode support. The{' '}
- useColorScheme() hook lets you inspect
- what the user's current color scheme is, and so you can adjust UI colors accordingly.
-
-
- Learn more
-
-
-
-
- This template includes an example of an animated component. The{' '}
- components/HelloWave.tsx component uses
- the powerful{' '}
-
- react-native-reanimated
- {' '}
- library to create a waving hand animation.
-
- {Platform.select({
- ios: (
-
- The components/ParallaxScrollView.tsx{' '}
- component provides a parallax effect for the header image.
-
- ),
- })}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- headerImage: {
- color: '#808080',
- bottom: -90,
- left: -35,
- position: 'absolute',
- },
- titleContainer: {
- flexDirection: 'row',
- gap: 8,
- },
-});
diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx
deleted file mode 100644
index 786b736..0000000
--- a/app/(tabs)/index.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import { Image } from 'expo-image';
-import { Platform, StyleSheet } from 'react-native';
-
-import { HelloWave } from '@/components/hello-wave';
-import ParallaxScrollView from '@/components/parallax-scroll-view';
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-import { Link } from 'expo-router';
-
-export default function HomeScreen() {
- return (
-
- }>
-
- Welcome!
-
-
-
- Step 1: Try it
-
- Edit app/(tabs)/index.tsx to see changes.
- Press{' '}
-
- {Platform.select({
- ios: 'cmd + d',
- android: 'cmd + m',
- web: 'F12',
- })}
- {' '}
- to open developer tools.
-
-
-
-
-
- Step 2: Explore
-
-
-
- alert('Action pressed')} />
- alert('Share pressed')}
- />
-
- alert('Delete pressed')}
- />
-
-
-
-
-
- {`Tap the Explore tab to learn more about what's included in this starter app.`}
-
-
-
- Step 3: Get a fresh start
-
- {`When you're ready, run `}
- npm run reset-project to get a fresh{' '}
- app directory. This will move the current{' '}
- app to{' '}
- app-example.
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- titleContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- gap: 8,
- },
- stepContainer: {
- gap: 8,
- marginBottom: 8,
- },
- reactLogo: {
- height: 178,
- width: 290,
- bottom: 0,
- left: 0,
- position: 'absolute',
- },
-});
diff --git a/app/_layout.tsx b/app/_layout.tsx
index f518c9b..620ea20 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -1,24 +1,31 @@
-import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
-import { Stack } from 'expo-router';
-import { StatusBar } from 'expo-status-bar';
-import 'react-native-reanimated';
+import { ApolloProvider } from "@apollo/client";
+import { Icon, Label, NativeTabs } from "expo-router/unstable-native-tabs";
+import { useTranslation } from "react-i18next";
+import { Provider } from "react-redux";
+import { PersistGate } from "redux-persist/integration/react";
+import { client } from "../graphql/client";
+import { persistor, store } from "../redux/store";
+import "../translations/i18n";
-import { useColorScheme } from '@/hooks/use-color-scheme';
-
-export const unstable_settings = {
- anchor: '(tabs)',
-};
-
-export default function RootLayout() {
- const colorScheme = useColorScheme();
+export default function TabLayout() {
+ const { t } = useTranslation();
return (
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/app/index.tsx b/app/index.tsx
new file mode 100644
index 0000000..127e318
--- /dev/null
+++ b/app/index.tsx
@@ -0,0 +1,5 @@
+import { Redirect } from "expo-router";
+
+export default function Index() {
+ return ;
+}
diff --git a/app/jobs/[jobId].tsx b/app/jobs/[jobId].tsx
new file mode 100644
index 0000000..ff52b6a
--- /dev/null
+++ b/app/jobs/[jobId].tsx
@@ -0,0 +1,20 @@
+import { useLocalSearchParams } from "expo-router";
+import { StyleSheet, Text, View } from "react-native";
+
+export default function JobDetail() {
+ const params = useLocalSearchParams();
+
+ return (
+
+ Job Details for Job ID: {JSON.stringify(params)}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+});
diff --git a/app/jobs/_layout.tsx b/app/jobs/_layout.tsx
new file mode 100644
index 0000000..9724f86
--- /dev/null
+++ b/app/jobs/_layout.tsx
@@ -0,0 +1,18 @@
+import { Stack } from "expo-router";
+
+function JobsStack() {
+ return (
+
+
+
+
+ );
+}
+
+export default JobsStack;
diff --git a/app/jobs/index.tsx b/app/jobs/index.tsx
new file mode 100644
index 0000000..3523ff2
--- /dev/null
+++ b/app/jobs/index.tsx
@@ -0,0 +1,24 @@
+import { Link } from "expo-router";
+import { StyleSheet, Text, View } from "react-native";
+
+export default function Tab() {
+ return (
+
+ Jobs Screen.
+
+ Go to detail
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+});
diff --git a/app/modal.tsx b/app/modal.tsx
deleted file mode 100644
index 6dfbc1a..0000000
--- a/app/modal.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Link } from 'expo-router';
-import { StyleSheet } from 'react-native';
-
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-
-export default function ModalScreen() {
- return (
-
- This is a modal
-
- Go to home screen
-
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center',
- padding: 20,
- },
- link: {
- marginTop: 15,
- paddingVertical: 15,
- },
-});
diff --git a/app/settings.tsx b/app/settings.tsx
new file mode 100644
index 0000000..2aa5299
--- /dev/null
+++ b/app/settings.tsx
@@ -0,0 +1,17 @@
+import { StyleSheet, Text, View } from 'react-native';
+
+export default function Tab() {
+ return (
+
+ Tab [Home|Settings]
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+});
diff --git a/redux/user/user.sagas.js b/redux/user/user.sagas.js
index 8b1bb79..32f34c4 100644
--- a/redux/user/user.sagas.js
+++ b/redux/user/user.sagas.js
@@ -1,7 +1,6 @@
//import * as Analytics from "expo-firebase-analytics";//JF:commenting out the firebase analytics portion
import { signInWithEmailAndPassword, signOut } from "firebase/auth";
import { all, call, put, takeLatest } from "redux-saga/effects";
-import * as Sentry from '@sentry/react-native';
import { logImEXEvent } from "../../firebase/firebase.analytics";
import {
auth,
@@ -108,8 +107,8 @@ export function* onSignInSuccess() {
export function* signInSuccessSaga({ payload }) {
try {
// Analytics.setUserId(payload.email);//JF:commenting out the firebase analytics portion
- //Sentry.setUser({ email: payload.email });
-
+
+
const shop = yield client.query({ query: QUERY_BODYSHOP });
logImEXEvent("imexmobile_sign_in_success", payload);
@@ -123,7 +122,7 @@ export function* signInSuccessSaga({ payload }) {
// );
} catch (error) {
console.log("UH-OH. Couldn't get shop details.", error);
- Sentry.captureException(error);
+
}
}
diff --git a/util/document-upload.utility.js b/util/document-upload.utility.js
index 0e5a592..1922f8d 100644
--- a/util/document-upload.utility.js
+++ b/util/document-upload.utility.js
@@ -1,4 +1,4 @@
-import * as Sentry from "@sentry/react-native";
+
import axios from "axios";
import * as MediaLibrary from "expo-media-library";
import env from "../env";
@@ -6,12 +6,11 @@ import { client } from "../graphql/client";
import { INSERT_NEW_DOCUMENT } from "../graphql/documents.queries";
import { axiosAuthInterceptorId } from "./CleanAxios";
//import { splitClient } from "../components/screen-main/screen-main.component";
-import { File } from "expo-file-system";
//Context: currentUserEmail, bodyshop, jobid, invoiceid
//Required to prevent headers from getting set and rejected from Cloudinary.
-var cleanAxios = axios.create();
+let cleanAxios = axios.create();
cleanAxios.interceptors.request.eject(axiosAuthInterceptorId);
export const handleUpload = async (ev, context) => {
@@ -49,7 +48,7 @@ export const handleUpload = async (ev, context) => {
} catch (error) {
console.log("Error creating upload promise", error.message, error.stack);
if (onError) onError(error.message);
- Sentry.captureException(error);
+
return {
success: false,
error: error.message,
@@ -91,7 +90,7 @@ export const uploadToImgproxy = async (
const { presignedUrl: preSignedUploadUrlToS3, key: s3Key } =
signedURLResponse.data.signedUrls[0];
- var options = {
+ let options = {
headers: {
"Content-Type": fileType,
"Content-Length": file.size,
@@ -133,7 +132,7 @@ export const uploadToImgproxy = async (
} catch (error) {
console.log("Error uploading to S3", error.message, error.stack);
if (onError) onError(error.message);
- Sentry.captureException(error);
+
return {
success: false,
error: error.message,
diff --git a/util/local-document-upload.utility.js b/util/local-document-upload.utility.js
index 7d29b6a..8ce80f3 100644
--- a/util/local-document-upload.utility.js
+++ b/util/local-document-upload.utility.js
@@ -1,8 +1,8 @@
import axios from "axios";
-import { store } from "../redux/store";
-import mime from "mime";
import * as MediaLibrary from "expo-media-library";
-import * as Sentry from "@sentry/react-native";
+import mime from "mime";
+import { store } from "../redux/store";
+
axios.interceptors.request.use(
function (config) {
@@ -96,14 +96,12 @@ export const handleLocalUpload = async ({
});
}
} catch (error) {
- Sentry.captureException(error);
console.log("Error uploading documents:", error.message);
onError && onError({ error: error.message });
}
} catch (error) {
console.log("Uncaught error", error);
- Sentry.captureException(error);
onError && onError({ error: error.message });
}