Timetickets Fixes

This commit is contained in:
Patrick Fic
2023-08-04 15:36:16 -07:00
parent 31735b947a
commit a07d28670d
8 changed files with 77 additions and 87 deletions

View File

@@ -32,7 +32,7 @@
] ]
}, },
"splash": { "splash": {
"image": "./assets/RomeSplash.png", "image": "./assets/RomeOnlineIcon.png",
"backgroundColor": "#efefef" "backgroundColor": "#efefef"
}, },
"notification": { "notification": {
@@ -42,9 +42,7 @@
"fallbackToCacheTimeout": 0, "fallbackToCacheTimeout": 0,
"url": "https://u.expo.dev/df105e21-a07f-4425-af10-2200a7704a48" "url": "https://u.expo.dev/df105e21-a07f-4425-af10-2200a7704a48"
}, },
"assetBundlePatterns": [ "assetBundlePatterns": ["**/*"],
"**/*"
],
"web": { "web": {
"favicon": "./assets/RomeIcon.png", "favicon": "./assets/RomeIcon.png",
"config": { "config": {

BIN
assets/RomeOnlineIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -18,7 +18,7 @@ import ErrorDisplay from "../error-display/error-display.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
currentEmployee: selectCurrentEmployee, currentEmployee: selectCurrentEmployee,
signingIn: selectSigningIn, signingIn: selectSigningIn,
signingError: selectSignInError, signinError: selectSignInError,
}); });
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
@@ -27,7 +27,7 @@ const mapDispatchToProps = (dispatch) => ({
}); });
export function EmployeeSignIn({ export function EmployeeSignIn({
signingError, signinError,
signingIn, signingIn,
employeeSignInStart, employeeSignInStart,
}) { }) {
@@ -46,40 +46,45 @@ export function EmployeeSignIn({
onSubmit={formSubmit} onSubmit={formSubmit}
> >
{({ handleChange, handleBlur, handleSubmit, values }) => { {({ handleChange, handleBlur, handleSubmit, values }) => {
const signingErrorMsg = signingError ? (<ErrorDisplay errorMessage={signingError} />) : null; return (
return( <View>
<View> <TextInput
<TextInput label={t("employeesignin.fields.employeeid")}
label={t("employeesignin.fields.employeeid")} mode="outlined"
mode="outlined" autoCapitalize="none"
autoCapitalize="none" keyboardType="default"
keyboardType="default" autoComplete="off"
onChangeText={handleChange("employeeId")} onChangeText={handleChange("employeeId")}
onBlur={handleBlur("employeeId")} onBlur={handleBlur("employeeId")}
value={values.employeeId} value={values.employeeId}
style={[localStyles.input]} textContentType={"none"}
/> style={localStyles.item}
<TextInput />
label={t("employeesignin.fields.pin")} <TextInput
mode="outlined" label={t("employeesignin.fields.pin")}
secureTextEntry={true} mode="outlined"
onChangeText={handleChange("pin")} secureTextEntry={true}
onBlur={handleBlur("pin")} autoComplete="off"
value={values.pin} onChangeText={handleChange("pin")}
style={[localStyles.input]} onBlur={handleBlur("pin")}
textContentType={"none"} value={values.pin}
/> textContentType={"none"}
{signingErrorMsg} style={localStyles.item}
<Button />
mode="outlined" <Button
loading={signingIn} mode="outlined"
onPress={handleSubmit} loading={signingIn}
> onPress={handleSubmit}
<Text>{t("employeesignin.actions.employeesignin")}</Text> style={localStyles.item}
</Button> >
</View> <Text>{t("employeesignin.actions.employeesignin")}</Text>
) </Button>
}} {signinError ? (
<ErrorDisplay errorMessage={signinError} />
) : null}
</View>
);
}}
</Formik> </Formik>
</View> </View>
</View> </View>
@@ -91,10 +96,12 @@ const localStyles = StyleSheet.create({
display: "flex", display: "flex",
flex: 1, flex: 1,
}, },
item: {
marginTop: 12,
marginBottom: 12,
},
signInContainer: { signInContainer: {
flex: 1, flex: 1,
},
input: {
margin: 12, margin: 12,
}, },
}); });

View File

@@ -1,18 +1,20 @@
import React, { useEffect, useRef } from "react"; import { Ionicons } from "@expo/vector-icons";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { NavigationContainer } from "@react-navigation/native";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import i18n from "i18next"; import i18n from "i18next";
import moment from "moment"; import moment from "moment";
import React, { useEffect, useRef } from "react";
import { AppState } from "react-native"; import { AppState } from "react-native";
import { Button } from "react-native-paper"; import { Button } from "react-native-paper";
import { Ionicons } from "@expo/vector-icons";
import { NavigationContainer } from "@react-navigation/native";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import { logImEXEvent } from "../../firebase/firebase.analytics"; import { logImEXEvent } from "../../firebase/firebase.analytics";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { setCameraJob, setCameraJobId } from "../../redux/app/app.actions"; import { setCameraJob, setCameraJobId } from "../../redux/app/app.actions";
import { employeeSignOut } from "../../redux/employee/employee.actions";
import { selectCurrentEmployee } from "../../redux/employee/employee.selectors";
import { import {
checkUserSession, checkUserSession,
emailSignInStart, emailSignInStart,
@@ -22,8 +24,6 @@ import {
selectBodyshop, selectBodyshop,
selectCurrentUser, selectCurrentUser,
} from "../../redux/user/user.selectors"; } from "../../redux/user/user.selectors";
import { employeeSignOut } from "../../redux/employee/employee.actions";
import { selectCurrentEmployee } from "../../redux/employee/employee.selectors";
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";
@@ -32,12 +32,11 @@ import ScreenSettingsComponent from "../screen-settings/screen-settings.componen
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";
import SignOutButton from "../Buttons/employee-sign-out-button.component";
import EmployeeSignIn from "../screen-employee-sign-in/screen-employee-sign-in.component"; import EmployeeSignIn from "../screen-employee-sign-in/screen-employee-sign-in.component";
import ScreenTimeTicketBrowser from "../screen-time-ticket-browser/screen-time-ticket-browser.component"; import ScreenTimeTicketBrowser from "../screen-time-ticket-browser/screen-time-ticket-browser.component";
import SignOutButton from "../Buttons/employee-sign-out-button.component";
import AddTimeTicketButton from "../Buttons/create-time-ticket-button.component";
import ScreenTimeTicketCreate from "../time-ticket/screen-time-ticket-create.component";
import ScreenTimeTicketClockoffComponent from "../time-ticket/screen-time-ticket-clockoff.component"; import ScreenTimeTicketClockoffComponent from "../time-ticket/screen-time-ticket-clockoff.component";
import ScreenTimeTicketCreate from "../time-ticket/screen-time-ticket-create.component";
const ActiveJobStack = createNativeStackNavigator(); const ActiveJobStack = createNativeStackNavigator();
const MoreStack = createNativeStackNavigator(); const MoreStack = createNativeStackNavigator();
@@ -160,6 +159,8 @@ const TimeTicketBrowserStackNavigator = connect(
name="TimeTicketBrowser" name="TimeTicketBrowser"
options={{ options={{
title: i18n.t("timeticketbrowser.titles.timeticketbrowsertab"), title: i18n.t("timeticketbrowser.titles.timeticketbrowsertab"),
// eslint-disable-next-line react/display-name
headerRight: () => <SignOutButton style={{ margin: 8 }} />,
}} }}
component={ScreenTimeTicketBrowser} component={ScreenTimeTicketBrowser}
/> />

View File

@@ -21,7 +21,7 @@ export default function ScreenSettingsComponent() {
> >
<Title> <Title>
{t("settings.labels.version", { {t("settings.labels.version", {
number: `${Constants.manifest.version}-${Constants.manifest.extra.expover}`, number: `${Constants.expoConfig.version}-${Constants.expoConfig.extra.expover}`,
})} })}
</Title> </Title>

View File

@@ -5,7 +5,7 @@ import { Image, StyleSheet, Text, View } from "react-native";
import { Button, TextInput, Title } from "react-native-paper"; import { Button, TextInput, Title } from "react-native-paper";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import Logo from "../../assets/logo192.png"; import Logo from "../../assets/RomeOnlineIcon.png";
import { emailSignInStart } from "../../redux/user/user.actions"; import { emailSignInStart } from "../../redux/user/user.actions";
import { import {
selectCurrentUser, selectCurrentUser,

View File

@@ -2,7 +2,7 @@ import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { ActivityIndicator, Image, StyleSheet, View } from "react-native"; import { ActivityIndicator, Image, StyleSheet, View } from "react-native";
import { Title, Subheading, Divider } from "react-native-paper"; import { Title, Subheading, Divider } from "react-native-paper";
import Logo from "../../assets/logo192.png"; import Logo from "../../assets/RomeOnlineIcon.png";
import SignOutButton from "../sign-out-button/sign-out-button.component"; import SignOutButton from "../sign-out-button/sign-out-button.component";
export default function ScreenSplash({ noAccess }) { export default function ScreenSplash({ noAccess }) {

View File

@@ -1,18 +1,10 @@
import React, { useCallback, useState, useRef } from "react";
import moment from "moment"; import moment from "moment";
import { import React, { useCallback, useState } from "react";
View, import { FlatList, RefreshControl, StyleSheet, Text, View } from "react-native";
Text,
StyleSheet,
ScrollView,
RefreshControl,
FlatList,
} from "react-native";
import { import {
ActivityIndicator, ActivityIndicator,
Button, Button,
Card, Card,
Headline,
Subheading, Subheading,
} from "react-native-paper"; } from "react-native-paper";
import styles from "../styles"; import styles from "../styles";
@@ -24,37 +16,37 @@ import { createStructuredSelector } from "reselect";
import { employeeGetRatesStart } from "../../redux/employee/employee.actions"; import { employeeGetRatesStart } from "../../redux/employee/employee.actions";
import { import {
selectCurrentEmployee, selectCurrentEmployee,
selectRates,
selectGettingRates,
selectSignInError,
selectEmployeeFullName, selectEmployeeFullName,
selectGettingRates,
selectRates,
selectSignInError,
} from "../../redux/employee/employee.selectors"; } from "../../redux/employee/employee.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
import CostCenterSelect from "../Selects/select-cost-center"; import { useMutation, useQuery } from "@apollo/client";
import ErrorDisplay from "../error-display/error-display.component"; import {
INSERT_NEW_TIME_TICKET,
QUERY_ACTIVE_TIME_TICKETS,
} from "../../graphql/timetickets.queries";
import { import {
selectCurrentTimeTicketJob, selectCurrentTimeTicketJob,
selectCurrentTimeTicketJobId, selectCurrentTimeTicketJobId,
} from "../../redux/timetickets/timetickets.selectors"; } from "../../redux/timetickets/timetickets.selectors";
import { INSERT_NEW_TIME_TICKET } from "../../graphql/timetickets.queries"; import CostCenterSelect from "../Selects/select-cost-center";
import { useMutation, useQuery } from "@apollo/client"; import ErrorDisplay from "../error-display/error-display.component";
import { QUERY_ACTIVE_TIME_TICKETS } from "../../graphql/timetickets.queries";
// import EmployeeClockedInList from "../time-ticket-lists/employee-clockedin-list.component"; // import EmployeeClockedInList from "../time-ticket-lists/employee-clockedin-list.component";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import ClockedinListItem from "../time-ticket-items/clockedin-list-item.component"; import ClockedinListItem from "../time-ticket-items/clockedin-list-item.component";
import SignOutButton from "../Buttons/employee-sign-out-button.component";
import AddTimeTicketButton from "../Buttons/create-time-ticket-button.component";
import KeyboardAvoidingComponent from "../keyboards/KeyboardAvoidingComponent";
import JobSearchAndSelectModal from "../Modals/JobSearchAndSelectModal";
import { useNavigation } from "@react-navigation/native"; import { useNavigation } from "@react-navigation/native";
import JobSearchAndSelectModal from "../Modals/JobSearchAndSelectModal";
import KeyboardAvoidingComponent from "../keyboards/KeyboardAvoidingComponent";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
currentEmployee: selectCurrentEmployee, currentEmployee: selectCurrentEmployee,
loaderGettingRates: selectGettingRates, loaderGettingRates: selectGettingRates,
signingError: selectSignInError, signinError: selectSignInError,
currentBodyshop: selectBodyshop, currentBodyshop: selectBodyshop,
currentRatesNCostCenters: selectRates, currentRatesNCostCenters: selectRates,
currentSelectedTimeTicketJobId: selectCurrentTimeTicketJobId, currentSelectedTimeTicketJobId: selectCurrentTimeTicketJobId,
@@ -68,14 +60,9 @@ const mapDispatchToProps = (dispatch) => ({
}); });
export function ScreenTimeTicketBrowser({ export function ScreenTimeTicketBrowser({
loaderGettingRates,
currentEmployee, currentEmployee,
employeeGetRatesStart,
signingError,
currentBodyshop, currentBodyshop,
currentRatesNCostCenters, currentRatesNCostCenters,
currentSelectedTimeTicketJob,
currentSelectedTimeTicketJobId,
currentEmployeeFullName, currentEmployeeFullName,
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -198,7 +185,6 @@ export function ScreenTimeTicketBrowser({
<Card style={localStyles.localCardStyle}> <Card style={localStyles.localCardStyle}>
<Card.Title <Card.Title
title={t("timeticketbrowser.labels.loggedinemployee")} title={t("timeticketbrowser.labels.loggedinemployee")}
right={(props) => <SignOutButton style={{margin:8}}/>}
/> />
<Card.Content> <Card.Content>
{currentEmployeeFullName && ( {currentEmployeeFullName && (
@@ -226,9 +212,7 @@ export function ScreenTimeTicketBrowser({
icon="plus" icon="plus"
style={{ margin: 8 }} style={{ margin: 8 }}
> >
<Text > <Text>{t("timeticketbrowser.actions.ticket")}</Text>
{t("timeticketbrowser.actions.ticket")}
</Text>
</Button> </Button>
{/* <Button {/* <Button
mode="outlined" mode="outlined"