diff --git a/components/Modals/JobSearchAndSelectModal.jsx b/components/Modals/JobSearchAndSelectModal.jsx new file mode 100644 index 0000000..24fafd1 --- /dev/null +++ b/components/Modals/JobSearchAndSelectModal.jsx @@ -0,0 +1,210 @@ +import { useQuery } from "@apollo/client"; +import { Ionicons } from "@expo/vector-icons"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { FlatList, RefreshControl, View } from "react-native"; +import { Button, List, Modal, Portal, Searchbar } from "react-native-paper"; +import { connect } from "react-redux"; +// import { createStructuredSelector } from "reselect"; +import { QUERY_ALL_ACTIVE_JOBS } from "../../graphql/jobs.queries"; +// import { setCameraJob, setCameraJobId } from "../../redux/app/app.actions"; +// import { +// selectCurrentCameraJob, +// selectCurrentCameraJobId, +// } from "../../redux/app/app.selectors"; +// import { selectBodyshop } from "../../redux/user/user.selectors"; +import ErrorDisplay from "../error-display/error-display.component"; +import LoadingDisplay from "../loading-display/loading-display.component"; + +// const mapStateToProps = createStructuredSelector({ +// cameraJobId: selectCurrentCameraJobId, +// cameraJob: selectCurrentCameraJob, +// }); + +// const mapDispatchToProps = (dispatch) => ({ +// setCameraJobId: (id) => dispatch(setCameraJobId(id)), +// setCameraJob: (job) => dispatch(setCameraJob(job)), +// }); + +export function JobSearchAndSelectModal( + props, +// cameraJobId, +// setCameraJobId, +// cameraJob, +// setCameraJob, +) { + const jobSrchNotExported = + props?.notExported !== undefined ? props.notExported : true; + const jobSrchNotInvoiced = + props?.notInvoiced !== undefined ? props.notInvoiced : false; + const jobSrchConvertedOnly = + props?.convertedOnly !== undefined ? props.convertedOnly : false; + + const jobSrchCurrentValue = props?.currentValue !== undefined ? props.currentValue : { id: "temp", ro_number: "Temporary Storage" }; + const jobSrchOnSetCurrentValue = props?.onSetCurrentValue !== undefined ? props.onSetCurrentValue : (e) => { console.info("onSetCurrentValue was called",e);}; + const jobSrchCurrentValueId = props?.currentValueId !== undefined ? props.currentValueId : "temp"; + const jobSrchOnSetCurrentValueId = props?.onSetCurrentValueId !== undefined ? props.onSetCurrentValueId : () => { console.info("onSetCurrentValueId was called"); }; + + console.log(" "); + console.log("*****JobSearchAndSelectModal*****"); + console.log("props:", props);//works +// console.log("notExported:", jobSrchNotExported);//works +// console.log("notInvoiced:", jobSrchNotInvoiced);//works +// console.log("convertedOnly:", jobSrchConvertedOnly);//works + console.log("jobSrchCurrentValue:", jobSrchCurrentValue); //{"id": "temp", "ro_number": "Temporary Storage"} + console.log("jobSrchOnSetCurrentValue:", jobSrchOnSetCurrentValue); + console.log("jobSrchCurrentValueId:", jobSrchCurrentValueId); //temp will be currentValue + console.log("jobSrchOnSetCurrentValueId:", jobSrchOnSetCurrentValueId); // will be onSetCurrentValue + + + const { loading, error, data, refetch } = useQuery(QUERY_ALL_ACTIVE_JOBS, { + fetchPolicy: "cache-and-network", + variables: { + statuses: false || ["Open", "Open*"], + }, + }); + const { t } = useTranslation(); + const [visible, setVisible] = React.useState(false); + const [searchQuery, setSearchQuery] = React.useState(""); + if (loading) return ; + if (error) return ; + + const showModal = () => setVisible(true); + const hideModal = () => setVisible(false); + + const onRefresh = async () => { + console.log("onRefresh was called"); + return refetch(); + }; + + const onChangeSearch = (query) => setSearchQuery(query); + + const jobs = data + ? searchQuery === "" + ? data.jobs + : data.jobs.filter( + (j) => + (j.ro_number || "") + .toString() + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.ownr_co_nm || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.ownr_fn || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.ownr_ln || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.plate_no || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.v_model_desc || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) || + (j.v_make_desc || "") + .toLowerCase() + .includes(searchQuery.toLowerCase()) + ) + : []; + + return ( + <> + + + + + + + + } + data={[{ id: "temp", ro_number: "Temporary Storage" }, ...jobs]} + keyExtractor={(item) => item.id} + renderItem={(object) => ( + { + //setCameraJob(object.item); + //setCameraJobId(object.item.id); + jobSrchOnSetCurrentValue(object.item); + jobSrchOnSetCurrentValueId(object.item.id); + hideModal(); + setSearchQuery(""); + }} + left={() => { + if (object.item.id !== jobSrchCurrentValueId) return null; + return ( + + ); + }} + titleStyle={{ + ...(object.item.id === jobSrchCurrentValueId + ? { color: "dodgerblue" } + : {}), + }} + title={`${ + object.item.ro_number ? `${object.item.ro_number} ` : `` + }${object.item.ownr_fn || ""} ${object.item.ownr_ln || ""} ${ + object.item.ownr_co_nm || "" + } ${ + object.item.v_model_yr ? `- ${object.item.v_model_yr}` : "" + } ${ + object.item.v_make_desc ? `- ${object.item.v_make_desc}` : "" + } ${ + object.item.v_model_desc + ? `- ${object.item.v_model_desc}` + : "" + }`} + key={object.item.id} + /> + )} + /> + + + + + ); +} + +export default connect(null, null)(JobSearchAndSelectModal);