diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 57e336529..7e308cdbb 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -14077,6 +14077,27 @@ + + sync + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + viewdetail false diff --git a/client/src/components/job-sync-button/job-sync-button.component.jsx b/client/src/components/job-sync-button/job-sync-button.component.jsx new file mode 100644 index 000000000..042664c49 --- /dev/null +++ b/client/src/components/job-sync-button/job-sync-button.component.jsx @@ -0,0 +1,23 @@ +import { Button } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { SyncOutlined } from "@ant-design/icons"; +import { useHistory } from "react-router-dom"; + +export default function JobSyncButton({ job }) { + const { t } = useTranslation(); + const history = useHistory(); + const handleClick = () => { + history.push( + `/manage/available?availableJobId=${job.available_jobs[0].id}&clm_no=${job.clm_no}` + ); + }; + if (job && job.available_jobs && job.available_jobs.length > 0) + return ( + + ); + else return null; +} diff --git a/client/src/components/jobs-available-table/jobs-available-table.container.jsx b/client/src/components/jobs-available-table/jobs-available-table.container.jsx index 22a9a97c8..0e5252bc3 100644 --- a/client/src/components/jobs-available-table/jobs-available-table.container.jsx +++ b/client/src/components/jobs-available-table/jobs-available-table.container.jsx @@ -9,10 +9,10 @@ import Axios from "axios"; import Dinero from "dinero.js"; import gql from "graphql-tag"; import _ from "lodash"; -import React, { useState } from "react"; +import React, { useState, useEffect, useCallback } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; -import { useHistory } from "react-router-dom"; +import { useHistory, useLocation } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { @@ -35,6 +35,8 @@ import HeaderFields from "./jobs-available-supplement.headerfields"; import JobsAvailableTableComponent from "./jobs-available-table.component"; import moment from "moment"; import { INSERT_NEW_NOTE } from "../../graphql/notes.queries"; +import queryString from "query-string"; + const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, currentUser: selectCurrentUser, @@ -44,7 +46,7 @@ export function JobsAvailableContainer({ bodyshop, currentUser }) { const { loading, error, data, refetch } = useQuery(QUERY_AVAILABLE_JOBS, { fetchPolicy: "network-only", }); - + const { clm_no, availableJobId } = queryString.parse(useLocation().search); const history = useHistory(); const { t } = useTranslation(); @@ -302,11 +304,17 @@ export function JobsAvailableContainer({ bodyshop, currentUser }) { setOwnerModalVisible(true); }; - const addJobAsSupp = (record) => { + const addJobAsSupp = useCallback((record) => { loadEstData({ variables: { id: record.id } }); modalSearchState[1](record.clm_no); setJobModalVisible(true); - }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + if (availableJobId && clm_no) + addJobAsSupp({ id: availableJobId, clm_no: clm_no }); + }, [addJobAsSupp, availableJobId, clm_no]); if (error) return ; return ( diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx index 17a6da48b..ef59daafc 100644 --- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx +++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx @@ -9,6 +9,7 @@ import { setModalContext } from "../../redux/modals/modals.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import JobEmployeeAssignments from "../job-employee-assignments/job-employee-assignments.container"; +import JobSyncButton from "../job-sync-button/job-sync-button.component"; import JobsChangeStatus from "../jobs-change-status/jobs-change-status.component"; import JobsConvertButton from "../jobs-convert-button/jobs-convert-button.component"; import JobsDetailHeaderActions from "../jobs-detail-header-actions/jobs-detail-header-actions.component"; @@ -47,7 +48,7 @@ export function JobsDetailHeader({ const menuExtra = (
- +