Timetickets Fixes
This commit is contained in:
6
app.json
6
app.json
@@ -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
BIN
assets/RomeOnlineIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
@@ -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,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 }) {
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user