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, Button, Card, Menu, Text, useTheme, } from "react-native-paper"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import DataLabelComponent from "../data-label/data-label"; 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 [visible, setVisible] = useState(false); const openMenu = () => setVisible(true); const closeMenu = () => setVisible(false); console.log("JobTombstone render", visible); const theme = useTheme(); const { t } = useTranslation(); const onRefresh = async () => { return refetch(); }; const [availableStatuses, setAvailableStatuses] = useState([]); 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 (!data.jobs_by_pk) { return ( Job is not defined. ); } const job = data.jobs_by_pk; return ( } > {job.status} {job.status}} > {availableStatuses.map((status) => ( {}} title={status} /> ))} {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", }, });