import { GET_JOB_BY_PK } from "@/graphql/jobs.queries"; import { selectBodyshop } from "@/redux/user/user.selectors"; import { useQuery } from "@apollo/client"; import { useLocalSearchParams } from "expo-router"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { RefreshControl, ScrollView, StyleSheet, View } from "react-native"; import { ActivityIndicator, Card, Chip, Text } from "react-native-paper"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import DataLabelComponent from "../data-label/data-label"; import ErrorDisplay from "../error/error-display"; import { JobStatusSelector } from "../job-status-selector/job-status-selector"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({}); export default connect(mapStateToProps, mapDispatchToProps)(JobTombstone); function JobTombstone({ bodyshop }) { const { jobId } = useLocalSearchParams(); const { loading, error, data, refetch } = useQuery(GET_JOB_BY_PK, { variables: { id: jobId, }, skip: !jobId, }); const { t } = useTranslation(); const onRefresh = async () => { return refetch(); }; const [availableStatuses, setAvailableStatuses] = useState([]); const job = data?.jobs_by_pk; useEffect(() => { if (!job || !bodyshop) return; const { md_ro_statuses } = bodyshop; const { pre_production_statuses, production_statuses, post_production_statuses, statuses, default_invoiced, default_exported, } = md_ro_statuses; // Handle non-parts entry scenarios based on job status if (pre_production_statuses.includes(job.status)) { setAvailableStatuses(pre_production_statuses); } else if (production_statuses.includes(job.status)) { setAvailableStatuses(production_statuses); } else if (post_production_statuses.includes(job.status)) { // Filter out invoiced and exported statuses for post-production setAvailableStatuses( post_production_statuses.filter( (status) => status !== default_invoiced && status !== default_exported ) ); } else { // Default to all statuses if no specific restrictions apply console.log( "Status didn't match any restrictions. Allowing all status changes." ); setAvailableStatuses(statuses); } }, [job, bodyshop, setAvailableStatuses]); if (loading) { return ; } if (error) { return ; } if (!data.jobs_by_pk) { return ( Job is not defined. ); } return ( } > } /> {job.inproduction && ( {t("objects.jobs.labels.inproduction")} } /> )} {job.inproduction && job.production_vars && !!job.production_vars.note && ( {job.production_vars.note}} /> )} ); } const localStyles = StyleSheet.create({ twoColumnCard: { display: "flex", flexDirection: "row" }, twoColumnCardColumn: { flex: 1 }, status: { textAlign: "center", flexDirection: "row", justifyContent: "center", }, inproduction: { textAlign: "center", flexDirection: "row", justifyContent: "center", }, });