Code Cleanup & Minor Bug Fixes

This commit is contained in:
Patrick Fic
2021-03-09 16:31:43 -08:00
parent b45ed8ad17
commit 3e1dd78c85
10 changed files with 49 additions and 188 deletions

7
App.js
View File

@@ -19,7 +19,7 @@ Sentry.init({
dsn: dsn:
"https://8d6c3de1940a4e4f8b81cf4d2150bdea@o492140.ingest.sentry.io/5558869", "https://8d6c3de1940a4e4f8b81cf4d2150bdea@o492140.ingest.sentry.io/5558869",
enableInExpoDevelopment: true, enableInExpoDevelopment: true,
debug: true, // Sentry will try to print out useful debugging information if something goes wrong with sending an event. Set this to `false` in production. // debug: true, // Sentry will try to print out useful debugging information if something goes wrong with sending an event. Set this to `false` in production.
}); });
Sentry.Native.nativeCrash(); Sentry.Native.nativeCrash();
@@ -38,11 +38,6 @@ export default class App extends React.Component {
...Ionicons.font, ...Ionicons.font,
}); });
this.setState({ isReady: true }); this.setState({ isReady: true });
// await FileSystem.makeDirectoryAsync(
// FileSystem.documentDirectory + "photos"
// ).catch((e) => {
// console.log(e, "Directory already exists");
// });
} }
render() { render() {

View File

@@ -1,7 +1,7 @@
import { Ionicons } from "@expo/vector-icons"; import { Ionicons } from "@expo/vector-icons";
import { useNavigation } from "@react-navigation/native"; import { useNavigation } from "@react-navigation/native";
import { Body, H3, Icon, ListItem, Right } from "native-base"; import { Body, H3, Icon, ListItem, Right } from "native-base";
import React from "react"; import React, { useRef } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Animated, Text } from "react-native"; import { Animated, Text } from "react-native";
import { TouchableOpacity } from "react-native-gesture-handler"; import { TouchableOpacity } from "react-native-gesture-handler";
@@ -11,9 +11,7 @@ import { createStructuredSelector } from "reselect";
import { setCameraJob, setCameraJobId } from "../../redux/app/app.actions"; import { setCameraJob, setCameraJobId } from "../../redux/app/app.actions";
import styles from "../styles"; import styles from "../styles";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({});
//currentUser: selectCurrentUser
});
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
setCameraJobId: (id) => dispatch(setCameraJobId(id)), setCameraJobId: (id) => dispatch(setCameraJobId(id)),
setCameraJob: (job) => dispatch(setCameraJob(job)), setCameraJob: (job) => dispatch(setCameraJob(job)),
@@ -22,34 +20,7 @@ const mapDispatchToProps = (dispatch) => ({
export function JobListItem({ setCameraJob, setCameraJobId, item }) { export function JobListItem({ setCameraJob, setCameraJobId, item }) {
const { t } = useTranslation(); const { t } = useTranslation();
const navigation = useNavigation(); const navigation = useNavigation();
const _swipeableRow = useRef(null);
// useEffect(() => {
// (async () => {
// if (Platform.OS !== "web") {
// const {
// status,
// } = await ImagePicker.requestMediaLibraryPermissionsAsync();
// if (status !== "granted") {
// alert("Sorry, we need camera roll permissions to make this work!");
// }
// }
// })();
// }, []);
// const pickImage = async () => {
// let result = await ImagePicker.launchImageLibraryAsync({
// mediaTypes: ImagePicker.MediaTypeOptions.All,
// allowsEditing: true,
// aspect: [4, 3],
// quality: 1,
// });
// console.log(result);
// if (!result.cancelled) {
// // setImage(result.uri);
// }
// };
const RenderRightAction = (progress, dragX) => { const RenderRightAction = (progress, dragX) => {
const scale = dragX.interpolate({ const scale = dragX.interpolate({
@@ -64,51 +35,19 @@ export function JobListItem({ setCameraJob, setCameraJobId, item }) {
setCameraJobId(item.id); setCameraJobId(item.id);
setCameraJob(item); setCameraJob(item);
navigation.navigate("MediaBrowserTab"); navigation.navigate("MediaBrowserTab");
_swipeableRow.current.close();
}} }}
> >
<Animated.View <Animated.View
style={{ style={{
// color: "white",
// paddingHorizontal: 10,
// fontWeight: "600",
transform: [{ scale }], transform: [{ scale }],
}} }}
> >
<Ionicons name="ios-camera" size={24} color="white" /> <Ionicons name="ios-camera" size={64} color="white" />
</Animated.View> </Animated.View>
</TouchableOpacity> </TouchableOpacity>
); );
}; };
// const RenderLeftAction = (progress, dragX) => {
// const scale = dragX.interpolate({
// inputRange: [0, 100],
// outputRange: [0, 1],
// extrapolate: "clamp",
// });
// return (
// <TouchableOpacity
// style={[styles.swipe_view, styles.swipe_view_blue]}
// onPress={() => {
// setCameraJobId(item.id);
// setCameraJob(item);
// navigation.push("MediaBrowser");
// //pickImage(item.id);
// }}
// >
// <Animated.Text
// style={{
// // color: "white",
// // paddingHorizontal: 10,
// // fontWeight: "600",
// transform: [{ scale }],
// }}
// >
// Add
// </Animated.Text>
// </TouchableOpacity>
// );
// };
const onPress = () => { const onPress = () => {
navigation.push("JobDetail", { navigation.push("JobDetail", {
@@ -119,8 +58,9 @@ export function JobListItem({ setCameraJob, setCameraJobId, item }) {
return ( return (
<Swipeable <Swipeable
// renderLeftActions={RenderLeftAction} ref={_swipeableRow}
renderRightActions={RenderRightAction} renderRightActions={RenderRightAction}
shouldCancelWhenOutside
> >
<TouchableOpacity onPress={onPress}> <TouchableOpacity onPress={onPress}>
<ListItem> <ListItem>

View File

@@ -2,16 +2,15 @@ import { useQuery } from "@apollo/client";
import { Tab, Tabs } from "native-base"; import { Tab, Tabs } from "native-base";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Text } from "react-native";
import { GET_JOB_BY_PK } from "../../graphql/jobs.queries"; import { GET_JOB_BY_PK } from "../../graphql/jobs.queries";
import ErrorDisplay from "../error-display/error-display.component"; import ErrorDisplay from "../error-display/error-display.component";
import JobTombstone from "../job-tombstone/job-tombstone.component";
import LoadingDisplay from "../loading-display/loading-display.component";
import JobNotes from "../job-notes/job-notes.component";
import JobDocuments from "../job-documents/job-documents.component"; import JobDocuments from "../job-documents/job-documents.component";
import JobLines from "../job-lines/job-lines.component"; import JobLines from "../job-lines/job-lines.component";
import JobNotes from "../job-notes/job-notes.component";
import JobTombstone from "../job-tombstone/job-tombstone.component";
import LoadingDisplay from "../loading-display/loading-display.component";
export default function ScreenJobDetail({ navigation, route, ...restProps }) { export default function ScreenJobDetail({ route }) {
const { const {
params: { jobId }, params: { jobId },
} = route; } = route;

View File

@@ -4,6 +4,7 @@ import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack"; import { createStackNavigator } from "@react-navigation/stack";
import i18n from "i18next"; import i18n from "i18next";
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { SafeAreaView } from "react-native-safe-area-context";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { import {
@@ -15,21 +16,14 @@ import {
selectBodyshop, selectBodyshop,
selectCurrentUser, selectCurrentUser,
} from "../../redux/user/user.selectors"; } from "../../redux/user/user.selectors";
//import ScreenCamera from "../screen-camera/screen-camera";
import ScreenJobDetail from "../screen-job-detail/screen-job-detail.component"; import ScreenJobDetail from "../screen-job-detail/screen-job-detail.component";
import ScreenJobList from "../screen-job-list/screen-job-list.component"; import ScreenJobList from "../screen-job-list/screen-job-list.component";
import ScreenMediaBrowser from "../screen-media-browser/screen-media-browser.component"; import ScreenMediaBrowser from "../screen-media-browser/screen-media-browser.component";
//import ScreenMediaCache from "../screen-media-cache/screen-media-cache.component";
//import ScreenMessagingConversation from "../screen-messaging-conversation/screen-messaging-conversation.component";
//import ScreenMessagingList from "../screen-messaging-list/screen-messaging-list.component";
import ScreenSettingsComponent from "../screen-settings/screen-settings.component"; import ScreenSettingsComponent from "../screen-settings/screen-settings.component";
import ScreenSignIn from "../screen-sign-in/screen-sign-in.component"; import ScreenSignIn from "../screen-sign-in/screen-sign-in.component";
import ScreenSplash from "../screen-splash/screen-splash.component"; import ScreenSplash from "../screen-splash/screen-splash.component";
const JobStack = createStackNavigator(); const JobStack = createStackNavigator();
//const CameraStack = createStackNavigator();
//const MessagingStack = createStackNavigator();
//const MediaCacheStack = createStackNavigator();
const MoreStack = createStackNavigator(); const MoreStack = createStackNavigator();
const BottomTabs = createBottomTabNavigator(); const BottomTabs = createBottomTabNavigator();
const MediaBrowserStack = createStackNavigator(); const MediaBrowserStack = createStackNavigator();
@@ -64,38 +58,9 @@ const JobStackNavigator = () => (
i18n.t("joblist.labels.detail"), i18n.t("joblist.labels.detail"),
})} })}
/> />
{/* <JobStack.Screen
name="MediaBrowser"
component={ScreenMediaBrowser}
// options={({ route }) => ({
// title:
// (route.params && route.params.title) ||
// i18n.t("joblist.labels.detail"),
// })}
/> */}
</JobStack.Navigator> </JobStack.Navigator>
); );
// const CameraStackNavigator = () => (
// <CameraStack.Navigator initialRouteName="TabCameraScreen">
// <CameraStack.Screen
// name="TabCameraScreen"
// options={{ headerShown: false }}
// component={ScreenCamera}
// />
// </CameraStack.Navigator>
// );
// const MediaCacheStackNavigator = () => (
// <MediaCacheStack.Navigator initialRouteName="TabMediaCache">
// <MediaCacheStack.Screen
// name="MediaCache"
// options={{ title: i18n.t("mediacache.titles.mediacachetab") }}
// component={ScreenMediaCache}
// />
// </MediaCacheStack.Navigator>
// );
const MediaBrowserStackNavigator = () => ( const MediaBrowserStackNavigator = () => (
<MediaBrowserStack.Navigator initialRouteName="MediaBrowser"> <MediaBrowserStack.Navigator initialRouteName="MediaBrowser">
<MediaBrowserStack.Screen <MediaBrowserStack.Screen
@@ -106,19 +71,6 @@ const MediaBrowserStackNavigator = () => (
</MediaBrowserStack.Navigator> </MediaBrowserStack.Navigator>
); );
// const MessagingStackNavigator = () => (
// <MessagingStack.Navigator>
// <MessagingStack.Screen
// name="MessagingList"
// component={ScreenMessagingList}
// />
// <MessagingStack.Screen
// name="MessagingConversation"
// component={ScreenMessagingConversation}
// />
// </MessagingStack.Navigator>
// );
const MoreStackNavigator = () => ( const MoreStackNavigator = () => (
<MoreStack.Navigator> <MoreStack.Navigator>
<MoreStack.Screen <MoreStack.Screen
@@ -139,16 +91,9 @@ const BottomTabsNavigator = () => (
let iconName; let iconName;
if (route.name === "JobTab") { if (route.name === "JobTab") {
iconName = "ios-list"; iconName = "ios-list";
} else if (route.name === "MessagingTab") {
iconName = "ios-chatboxes";
} else if (route.name === "MoreTab") { } else if (route.name === "MoreTab") {
iconName = "ios-settings"; iconName = "ios-settings";
} else if (route.name === "CameraTab") { } else if (route.name === "MediaBrowserTab") {
iconName = "ios-camera";
} else if (
route.name === "MediaCacheTab" ||
route.name === "MediaBrowserTab"
) {
iconName = "ios-photos"; iconName = "ios-photos";
} else { } else {
//iconName = "customerservice"; //iconName = "customerservice";
@@ -172,20 +117,6 @@ const BottomTabsNavigator = () => (
options={{ title: i18n.t("mediabrowser.titles.mediabrowsertab") }} options={{ title: i18n.t("mediabrowser.titles.mediabrowsertab") }}
component={MediaBrowserStackNavigator} component={MediaBrowserStackNavigator}
/> />
{/* <BottomTabs.Screen
name="MediaCacheTab"
options={{ title: i18n.t("mediacache.titles.mediacachetab") }}
component={MediaCacheStackNavigator}
/> */}
{/* <BottomTabs.Screen
name="CameraTab"
options={{ title: i18n.t("camera.titles.cameratab") }}
component={CameraStackNavigator}
/> <BottomTabs.Screen
name="MessagingTab"
options={{ title: i18n.t("messaging.titles.messagingtab") }}
component={MessagingStackNavigator}
/> */}
<BottomTabs.Screen <BottomTabs.Screen
name="MoreTab" name="MoreTab"
options={{ title: i18n.t("more.titles.moretab") }} options={{ title: i18n.t("more.titles.moretab") }}
@@ -204,6 +135,7 @@ export function ScreenMainComponent({
}, [checkUserSession]); }, [checkUserSession]);
return ( return (
<SafeAreaView style={{ flex: 1 }}>
<NavigationContainer> <NavigationContainer>
{currentUser.authorized === null ? ( {currentUser.authorized === null ? (
<ScreenSplash /> <ScreenSplash />
@@ -217,6 +149,7 @@ export function ScreenMainComponent({
<ScreenSignIn /> <ScreenSignIn />
)} )}
</NavigationContainer> </NavigationContainer>
</SafeAreaView>
); );
} }
export default connect( export default connect(

View File

@@ -3,6 +3,7 @@ import { AssetsSelector } from "expo-images-picker";
import * as MediaLibrary from "expo-media-library"; import * as MediaLibrary from "expo-media-library";
import _ from "lodash"; import _ from "lodash";
import { H3 } from "native-base"; import { H3 } from "native-base";
import plimit from "p-limit";
import React, { useCallback, useState } from "react"; import React, { useCallback, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { StyleSheet, Text, View } from "react-native"; import { StyleSheet, Text, View } from "react-native";
@@ -20,7 +21,6 @@ import { handleUpload } from "../../util/document-upload.utility";
import CameraSelectJob from "../camera-select-job/camera-select-job.component"; import CameraSelectJob from "../camera-select-job/camera-select-job.component";
import UploadDeleteSwitch from "../upload-delete-switch/upload-delete-switch.component"; import UploadDeleteSwitch from "../upload-delete-switch/upload-delete-switch.component";
import UploadProgress from "../upload-progress/upload-progress.component"; import UploadProgress from "../upload-progress/upload-progress.component";
import plimit from "p-limit";
const limit = plimit(2); const limit = plimit(2);
@@ -31,7 +31,6 @@ const mapStateToProps = createStructuredSelector({
deleteAfterUpload: selectDeleteAfterUpload, deleteAfterUpload: selectDeleteAfterUpload,
}); });
export default connect(mapStateToProps, null)(ImageBrowserScreen);
export function ImageBrowserScreen({ export function ImageBrowserScreen({
currentUser, currentUser,
bodyshop, bodyshop,
@@ -49,6 +48,7 @@ export function ImageBrowserScreen({
const forceRerender = useCallback(() => { const forceRerender = useCallback(() => {
setTick((tick) => tick + 1); setTick((tick) => tick + 1);
}, []); }, []);
async function handleOnSuccess(uri, id) { async function handleOnSuccess(uri, id) {
console.log("Succesful upload!", uri); console.log("Succesful upload!", uri);
if (deleteAfterUpload) { if (deleteAfterUpload) {
@@ -70,9 +70,6 @@ export function ImageBrowserScreen({
//Appears to work for android. //Appears to work for android.
//iOS provides the filename, android doe snot. //iOS provides the filename, android doe snot.
filename = p.filename || p.uri.split("/").pop(); filename = p.filename || p.uri.split("/").pop();
//File name for ios
actions.push( actions.push(
limit( limit(
handleUpload( handleUpload(
@@ -130,7 +127,7 @@ export function ImageBrowserScreen({
//maxSelections: 5, //maxSelections: 5,
margin: 3, margin: 3,
portraitCols: 4, portraitCols: 4,
landscapeCols: 5, landscapeCols: 6,
widgetWidth: 100, widgetWidth: 100,
widgetBgColor: "white", widgetBgColor: "white",
selectedBgColor: "#adadad", selectedBgColor: "#adadad",
@@ -209,3 +206,5 @@ const styles = StyleSheet.create({
function handleOnError(...props) { function handleOnError(...props) {
console.log("HandleOnError", props); console.log("HandleOnError", props);
} }
export default connect(mapStateToProps, null)(ImageBrowserScreen);

View File

@@ -1,15 +1,12 @@
import React from "react"; import React from "react";
import { View, Text, SafeAreaView, Button } from "react-native"; import { Button, View } from "react-native";
import SignOutButton from "../sign-out-button/sign-out-button.component";
import { purgeStoredState } from "redux-persist"; import { purgeStoredState } from "redux-persist";
import SignOutButton from "../sign-out-button/sign-out-button.component";
export default function ScreenSettingsComponent() { export default function ScreenSettingsComponent() {
return ( return (
<SafeAreaView>
<View> <View>
<Text>The settings Screen</Text>
<SignOutButton /> <SignOutButton />
<Button title="Purge State" onPress={() => purgeStoredState()} /> <Button title="Purge State" onPress={() => purgeStoredState()} />
</View> </View>
</SafeAreaView>
); );
} }

View File

@@ -17,8 +17,8 @@ export default StyleSheet.create({
alignItems: "center", alignItems: "center",
justifyContent: "center", justifyContent: "center",
width: 100, width: 100,
marginTop: 5, // marginTop: 5,
marginBottom: 5, //marginBottom: 5,
}, },
swipe_view_blue: { swipe_view_blue: {
backgroundColor: "dodgerblue", backgroundColor: "dodgerblue",

View File

@@ -7,19 +7,19 @@ import { toggleDeleteAfterUpload } from "../../redux/app/app.actions";
import { selectDeleteAfterUpload } from "../../redux/app/app.selectors"; import { selectDeleteAfterUpload } from "../../redux/app/app.selectors";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser
deleteAfterUpload: selectDeleteAfterUpload, deleteAfterUpload: selectDeleteAfterUpload,
}); });
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
toggleDeleteAfterUpload: () => dispatch(toggleDeleteAfterUpload()), toggleDeleteAfterUpload: () => dispatch(toggleDeleteAfterUpload()),
}); });
export default connect(mapStateToProps, mapDispatchToProps)(UploadDeleteSwitch);
export function UploadDeleteSwitch({ export function UploadDeleteSwitch({
deleteAfterUpload, deleteAfterUpload,
toggleDeleteAfterUpload, toggleDeleteAfterUpload,
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<View style={styles.container}> <View style={styles.container}>
<Text style={styles.text}> <Text style={styles.text}>
@@ -47,3 +47,4 @@ const styles = StyleSheet.create({
flex: 1, flex: 1,
}, },
}); });
export default connect(mapStateToProps, mapDispatchToProps)(UploadDeleteSwitch);

View File

@@ -8,10 +8,8 @@ import userReducer from "./user/user.reducer";
const persistConfig = { const persistConfig = {
key: "root", key: "root",
storage: AsyncStorage, storage: AsyncStorage,
whitelist: ["photos"], // whitelist: ["photos"],
blacklist: ["user", "app"], blacklist: ["user"],
// whitelist: ["messaging", "tech", "application"],
// blacklist: ["user", "email", "modals"],
}; };
const rootReducer = combineReducers({ const rootReducer = combineReducers({

View File

@@ -1,8 +1,7 @@
import { createStore, applyMiddleware, compose } from "redux"; import { applyMiddleware, compose, createStore } from "redux";
import { persistStore } from "redux-persist"; import { persistStore } from "redux-persist";
import { createLogger } from "redux-logger"; //import { createLogger } from "redux-logger";
import createSagaMiddleware from "redux-saga"; import createSagaMiddleware from "redux-saga";
import rootReducer from "./root.reducer"; import rootReducer from "./root.reducer";
import rootSaga from "./root.saga"; import rootSaga from "./root.saga";
@@ -35,4 +34,4 @@ sagaMiddleWare.run(rootSaga);
export const persistor = persistStore(store); export const persistor = persistStore(store);
export default { store, persistStore }; export default { store };