- Make sure subscription and initial query only grab jobs that have statuses that are on the board
Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
@@ -37,7 +37,7 @@ const mapDispatchToProps = (dispatch) => ({
|
||||
)
|
||||
});
|
||||
|
||||
function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTrail, associationSettings }) {
|
||||
function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTrail, associationSettings, statuses }) {
|
||||
const [boardLanes, setBoardLanes] = useState({ lanes: [] });
|
||||
const [filter, setFilter] = useState({ search: "", employeeId: null });
|
||||
const [loading, setLoading] = useState(true);
|
||||
@@ -57,11 +57,7 @@ function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTr
|
||||
|
||||
useEffect(() => {
|
||||
setIsMoving(true);
|
||||
const newBoardData = createBoardData(
|
||||
[...bodyshop.md_ro_statuses.production_statuses, ...(bodyshop.md_ro_statuses.additional_board_statuses || [])],
|
||||
data,
|
||||
filter
|
||||
);
|
||||
const newBoardData = createBoardData(statuses, data, filter);
|
||||
|
||||
newBoardData.lanes = newBoardData.lanes.map((lane) => ({
|
||||
...lane,
|
||||
@@ -140,17 +136,6 @@ function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTr
|
||||
|
||||
const newChildCardNewParent = newChildCard ? draggableId : null;
|
||||
|
||||
console.log({
|
||||
oldChildCard,
|
||||
newChildCard,
|
||||
oldChildCardNewParent,
|
||||
newChildCardNewParent,
|
||||
movedCardNewKanbanParent,
|
||||
sameColumnTransfer,
|
||||
movedCardWillBeFirst,
|
||||
movedCardWillBeLast
|
||||
});
|
||||
|
||||
try {
|
||||
const update = await client.mutate({
|
||||
mutation: generate_UPDATE_JOB_KANBAN(
|
||||
@@ -164,6 +149,8 @@ function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTr
|
||||
)
|
||||
});
|
||||
|
||||
// TODO (Note): This is causing the subscription to fire
|
||||
|
||||
insertAuditTrail({
|
||||
jobid: draggableId,
|
||||
operation: AuditTrailMapping.jobstatuschange(targetLane.id),
|
||||
@@ -187,7 +174,7 @@ function ProductionBoardKanbanComponent({ data, bodyshop, refetch, insertAuditTr
|
||||
setIsMoving(false);
|
||||
}
|
||||
},
|
||||
[boardLanes, client, getCardByID, insertAuditTrail, isMoving, t]
|
||||
[boardLanes, client, getCardByID, isMoving, t]
|
||||
);
|
||||
|
||||
const totalHrs = useMemo(
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { useQuery, useSubscription } from "@apollo/client";
|
||||
import React, { useEffect, useMemo } from "react";
|
||||
import { useQuery, useSubscription } from "@apollo/client";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { QUERY_JOBS_IN_PRODUCTION, SUBSCRIPTION_JOBS_IN_PRODUCTION } from "../../graphql/jobs.queries";
|
||||
import {
|
||||
QUERY_JOBS_IN_PRODUCTION_WITH_STATUSES,
|
||||
SUBSCRIPTION_JOBS_IN_PRODUCTION_WITH_STATUSES
|
||||
} from "../../graphql/jobs.queries";
|
||||
import { QUERY_KANBAN_SETTINGS } from "../../graphql/user.queries";
|
||||
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
|
||||
import ProductionBoardKanbanComponent from "./production-board-kanban.component";
|
||||
@@ -13,14 +16,26 @@ const mapStateToProps = createStructuredSelector({
|
||||
});
|
||||
|
||||
function ProductionBoardKanbanContainer({ bodyshop, currentUser }) {
|
||||
const { refetch, loading, data } = useQuery(QUERY_JOBS_IN_PRODUCTION, {
|
||||
const combinedStatuses = useMemo(
|
||||
() => [
|
||||
...bodyshop.md_ro_statuses.production_statuses,
|
||||
...(bodyshop.md_ro_statuses.additional_board_statuses || [])
|
||||
],
|
||||
[bodyshop.md_ro_statuses.production_statuses, bodyshop.md_ro_statuses.additional_board_statuses]
|
||||
);
|
||||
|
||||
const { refetch, loading, data } = useQuery(QUERY_JOBS_IN_PRODUCTION_WITH_STATUSES, {
|
||||
variables: { statuses: combinedStatuses },
|
||||
pollInterval: 3600000,
|
||||
fetchPolicy: "network-only",
|
||||
nextFetchPolicy: "network-only",
|
||||
onError: (error) => console.error(`Error fetching jobs in production: ${error.message}`)
|
||||
});
|
||||
|
||||
const { data: updatedJobs } = useSubscription(SUBSCRIPTION_JOBS_IN_PRODUCTION);
|
||||
const { data: updatedJobs } = useSubscription(SUBSCRIPTION_JOBS_IN_PRODUCTION_WITH_STATUSES, {
|
||||
variables: { statuses: combinedStatuses },
|
||||
onError: (error) => console.error(`Error subscribing to jobs in production: ${error.message}`)
|
||||
});
|
||||
|
||||
const { loading: associationSettingsLoading, data: associationSettings } = useQuery(QUERY_KANBAN_SETTINGS, {
|
||||
variables: { email: currentUser.email },
|
||||
@@ -28,10 +43,10 @@ function ProductionBoardKanbanContainer({ bodyshop, currentUser }) {
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (updatedJobs) {
|
||||
if (updatedJobs && data) {
|
||||
refetch().catch((err) => console.error(`Error re-fetching jobs in production: ${err.message}`));
|
||||
}
|
||||
}, [updatedJobs, refetch]);
|
||||
}, [updatedJobs, data, refetch]);
|
||||
|
||||
const filteredAssociationSettings = useMemo(() => {
|
||||
return associationSettings?.associations[0] || null;
|
||||
@@ -43,6 +58,8 @@ function ProductionBoardKanbanContainer({ bodyshop, currentUser }) {
|
||||
data={data ? data.jobs : []}
|
||||
refetch={refetch}
|
||||
associationSettings={filteredAssociationSettings}
|
||||
bodyshop={bodyshop}
|
||||
statuses={combinedStatuses}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -28,9 +28,10 @@ const sortByParentId = (arr) => {
|
||||
};
|
||||
|
||||
// Function to create board data based on statuses and jobs, with optional filtering
|
||||
export const createBoardData = (AllStatuses, Jobs, filter) => {
|
||||
export const createBoardData = (statuses, Jobs, filter) => {
|
||||
const { search, employeeId } = filter;
|
||||
const lanes = AllStatuses.map((status) => ({
|
||||
|
||||
const lanes = statuses.map((status) => ({
|
||||
id: status,
|
||||
title: status,
|
||||
cards: []
|
||||
|
||||
Reference in New Issue
Block a user