IO-1550 Resolve production diff bug.

This commit is contained in:
Patrick Fic
2021-12-08 17:39:58 -08:00
parent 58848481c9
commit 2c793c25ee
3 changed files with 106 additions and 8 deletions

View File

@@ -4,6 +4,7 @@ import React, { useEffect, useState } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { import {
QUERY_EXACT_JOBS_IN_PRODUCTION,
QUERY_EXACT_JOB_IN_PRODUCTION, QUERY_EXACT_JOB_IN_PRODUCTION,
QUERY_JOBS_IN_PRODUCTION, QUERY_JOBS_IN_PRODUCTION,
SUBSCRIPTION_JOBS_IN_PRODUCTION, SUBSCRIPTION_JOBS_IN_PRODUCTION,
@@ -42,16 +43,23 @@ export function ProductionBoardKanbanContainer({ bodyshop, currentUser }) {
if (!updatedJobs || joblist.length === 0) return; if (!updatedJobs || joblist.length === 0) return;
const jobDiff = _.differenceWith( const jobDiff = _.differenceWith(
updatedJobs.jobs,
joblist, joblist,
updatedJobs.jobs,
(a, b) => a.id === b.id && a.updated_at === b.updated_at (a, b) => a.id === b.id && a.updated_at === b.updated_at
); );
jobDiff.forEach((job) => { jobDiff.forEach((job) => {
getUpdatedJobData(job.id); getUpdatedJobData(job.id);
}); });
if (jobDiff.length > 1) {
getUpdatedJobsData(jobDiff.map((j) => j.id));
} else if (jobDiff.length === 1) {
jobDiff.forEach((job) => {
getUpdatedJobData(job.id);
});
}
setJoblist(updatedJobs); setJoblist(updatedJobs.jobs);
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [updatedJobs]); }, [updatedJobs]);
@@ -61,6 +69,12 @@ export function ProductionBoardKanbanContainer({ bodyshop, currentUser }) {
variables: { id: jobId }, variables: { id: jobId },
}); });
}; };
const getUpdatedJobsData = async (jobIds) => {
client.query({
query: QUERY_EXACT_JOBS_IN_PRODUCTION,
variables: { ids: jobIds },
});
};
const { loading: associationSettingsLoading, data: associationSettings } = const { loading: associationSettingsLoading, data: associationSettings } =
useQuery(QUERY_KANBAN_SETTINGS, { useQuery(QUERY_KANBAN_SETTINGS, {

View File

@@ -1,6 +1,7 @@
import { useApolloClient, useQuery, useSubscription } from "@apollo/client"; import { useApolloClient, useQuery, useSubscription } from "@apollo/client";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { import {
QUERY_EXACT_JOBS_IN_PRODUCTION,
QUERY_EXACT_JOB_IN_PRODUCTION, QUERY_EXACT_JOB_IN_PRODUCTION,
QUERY_JOBS_IN_PRODUCTION, QUERY_JOBS_IN_PRODUCTION,
SUBSCRIPTION_JOBS_IN_PRODUCTION, SUBSCRIPTION_JOBS_IN_PRODUCTION,
@@ -31,16 +32,22 @@ export default function ProductionListTableContainer() {
if (!updatedJobs || joblist.length === 0) return; if (!updatedJobs || joblist.length === 0) return;
const jobDiff = _.differenceWith( const jobDiff = _.differenceWith(
updatedJobs.jobs,
joblist, joblist,
updatedJobs.jobs,
(a, b) => a.id === b.id && a.updated_at === b.updated_at (a, b) => a.id === b.id && a.updated_at === b.updated_at
); );
console.log(jobDiff);
if (jobDiff.length > 1) {
getUpdatedJobsData(jobDiff.map((j) => j.id));
} else if (jobDiff.length === 1) {
console.log("length was 1");
jobDiff.forEach((job) => {
console.log("Job ", job);
getUpdatedJobData(job.id);
});
}
jobDiff.forEach((job) => { setJoblist(updatedJobs.jobs);
getUpdatedJobData(job.id);
});
setJoblist(updatedJobs);
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [updatedJobs]); }, [updatedJobs]);
@@ -50,6 +57,12 @@ export default function ProductionListTableContainer() {
variables: { id: jobId }, variables: { id: jobId },
}); });
}; };
const getUpdatedJobsData = async (jobIds) => {
client.query({
query: QUERY_EXACT_JOBS_IN_PRODUCTION,
variables: { ids: jobIds },
});
};
return ( return (
<ProductionListTable <ProductionListTable

View File

@@ -185,6 +185,77 @@ export const QUERY_EXACT_JOB_IN_PRODUCTION = gql`
} }
`; `;
export const QUERY_EXACT_JOBS_IN_PRODUCTION = gql`
query QUERY_EXACT_JOBS_IN_PRODUCTION($ids: [uuid!]!) {
jobs(where: { id: { _in: $ids } }) {
id
status
ro_number
ownr_fn
ownr_ln
ownr_co_nm
v_model_yr
v_model_desc
clm_no
v_make_desc
v_color
plate_no
actual_in
scheduled_completion
scheduled_delivery
date_last_contacted
date_next_contact
ins_co_nm
clm_total
ownr_ph1
ownr_ph2
special_coverage_policy
owner_owing
production_vars
kanbanparent
alt_transport
employee_body
employee_refinish
employee_prep
employee_csr
labhrs: joblines_aggregate(
where: {
_and: [{ mod_lbr_ty: { _neq: "LAR" } }, { removed: { _eq: false } }]
}
) {
aggregate {
sum {
mod_lb_hrs
}
}
}
larhrs: joblines_aggregate(
where: {
_and: [{ mod_lbr_ty: { _eq: "LAR" } }, { removed: { _eq: false } }]
}
) {
aggregate {
sum {
mod_lb_hrs
}
}
}
subletLines: joblines(
where: {
_and: { part_type: { _in: ["PAS", "PASL"] }, removed: { _eq: false } }
}
order_by: { line_no: asc }
) {
id
line_desc
sublet_ignored
sublet_completed
jobid
}
}
}
`;
export const QUERY_JOBS_IN_PRODUCTION = gql` export const QUERY_JOBS_IN_PRODUCTION = gql`
query QUERY_JOBS_IN_PRODUCTION { query QUERY_JOBS_IN_PRODUCTION {
jobs(where: { inproduction: { _eq: true } }) { jobs(where: { inproduction: { _eq: true } }) {