All dependecy upgrades + linting fixes.

This commit is contained in:
Patrick Fic
2020-02-06 17:07:15 -08:00
parent 5e65fb3b54
commit b86586241a
15 changed files with 2128 additions and 1154 deletions

View File

@@ -1,5 +1,7 @@
React App: React App:
React Hooks are used for Authentication ONLY to ensure the correct web token is passed.
Yarn Dependency Management:
To force upgrades for some packages: yarn upgrade-interactive --latest
GraphQL API: GraphQL API:
Hasura is hosted on another dyno. Several environmental variables are required, including disabling the console. Hasura is hosted on another dyno. Several environmental variables are required, including disabling the console.
@@ -9,4 +11,4 @@ To Start Hasura CLI:
npx hasura console --admin-secret Dev-BodyShopAppBySnaptSoftware! npx hasura console --admin-secret Dev-BodyShopAppBySnaptSoftware!
Migrating to Staging: Migrating to Staging:
npx hasura migrate apply --up 10 --endpoint https://bodyshop-staging-db.herokuapp.com/ --admin-secret Staging-BodyShopAppBySnaptSoftware! npx hasura migrate apply --up 10 --endpoint https://bodyshop-staging-db.herokuapp.com/ --admin-secret Staging-BodyShopAppBySnaptSoftware!

View File

@@ -4,39 +4,39 @@
"private": true, "private": true,
"proxy": "https://localhost:5000", "proxy": "https://localhost:5000",
"dependencies": { "dependencies": {
"antd": "^3.26.0", "antd": "^3.26.8",
"apollo-boost": "^0.4.4", "apollo-boost": "^0.4.4",
"apollo-link-context": "^1.0.19", "apollo-link-context": "^1.0.19",
"apollo-link-error": "^1.1.12", "apollo-link-error": "^1.1.12",
"apollo-link-logger": "^1.2.3", "apollo-link-logger": "^1.2.3",
"apollo-link-ws": "^1.0.19", "apollo-link-ws": "^1.0.19",
"axios": "^0.19.1", "axios": "^0.19.2",
"chart.js": "^2.9.3", "chart.js": "^2.9.3",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"firebase": "^7.5.0", "firebase": "^7.8.1",
"graphql": "^14.5.8", "graphql": "^14.6.0",
"i18next": "^19.0.2", "i18next": "^19.1.0",
"node-sass": "^4.13.0", "node-sass": "^4.13.1",
"react": "^16.12.0", "react": "^16.12.0",
"react-apollo": "^3.1.3", "react-apollo": "^3.1.3",
"react-big-calendar": "^0.23.0", "react-big-calendar": "^0.23.0",
"react-chartjs-2": "^2.8.0", "react-chartjs-2": "^2.9.0",
"react-dom": "^16.12.0", "react-dom": "^16.12.0",
"react-i18next": "^11.2.7", "react-i18next": "^11.3.1",
"react-icons": "^3.8.0", "react-icons": "^3.9.0",
"react-image-file-resizer": "^0.2.1", "react-image-file-resizer": "^0.2.1",
"react-moment": "^0.9.7", "react-moment": "^0.9.7",
"react-number-format": "^4.3.1", "react-number-format": "^4.3.1",
"react-redux": "^7.1.3", "react-redux": "^7.1.3",
"react-router-dom": "^5.1.2", "react-router-dom": "^5.1.2",
"react-scripts": "3.2.0", "react-scripts": "3.3.1",
"react-trello": "^2.2.3", "react-trello": "^2.2.3",
"redux": "^4.0.5", "redux": "^4.0.5",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"redux-saga": "^1.1.3", "redux-saga": "^1.1.3",
"reselect": "^4.0.0", "reselect": "^4.0.0",
"styled-components": "^4.4.1", "styled-components": "^5.0.1",
"subscriptions-transport-ws": "^0.9.16" "subscriptions-transport-ws": "^0.9.16"
}, },
"scripts": { "scripts": {

View File

@@ -10,45 +10,45 @@ export default function JobDetailCardsInsuranceComponent({ loading, data }) {
<CardTemplate loading={loading} title={t("jobs.labels.cards.insurance")}> <CardTemplate loading={loading} title={t("jobs.labels.cards.insurance")}>
{data ? ( {data ? (
<span> <span>
<div>{data?.ins_co_nm || t("general.labels.unknown")}</div> <div>{data.ins_co_nm || t("general.labels.unknown")}</div>
<div>{data?.clm_no || t("general.labels.unknown")}</div> <div>{data.clm_no || t("general.labels.unknown")}</div>
<div> <div>
{t("jobs.labels.cards.filehandler")} {t("jobs.labels.cards.filehandler")}
{data?.ins_ea ? ( {data.ins_ea ? (
<a href={`mailto:${data.ins_ea}`}> <a href={`mailto:${data.ins_ea}`}>
<div>{`${data?.ins_ct_fn || ""} ${data?.ins_ct_ln || ""}`}</div> <div>{`${data.ins_ct_fn || ""} ${data.ins_ct_ln || ""}`}</div>
</a> </a>
) : ( ) : (
<div>{`${data?.ins_ct_fn || ""} ${data?.ins_ct_ln || ""}`}</div> <div>{`${data.ins_ct_fn || ""} ${data.ins_ct_ln || ""}`}</div>
)} )}
{data?.ins_ph1 ? ( {data.ins_ph1 ? (
<PhoneFormatter>{data?.ins_ph1}</PhoneFormatter> <PhoneFormatter>{data.ins_ph1}</PhoneFormatter>
) : null} ) : null}
</div> </div>
<div> <div>
{t("jobs.labels.cards.appraiser")} {t("jobs.labels.cards.appraiser")}
{data?.est_ea ? ( {data.est_ea ? (
<a href={`mailto:${data.est_ea}`}> <a href={`mailto:${data.est_ea}`}>
<div>{`${data?.ins_ct_fn || ""} ${data?.ins_ct_ln || ""}`}</div> <div>{`${data.ins_ct_fn || ""} ${data.ins_ct_ln || ""}`}</div>
</a> </a>
) : ( ) : (
<div>{`${data?.ins_ct_fn || ""} ${data?.ins_ct_ln || ""}`}</div> <div>{`${data.ins_ct_fn || ""} ${data.ins_ct_ln || ""}`}</div>
)} )}
</div> </div>
<div> <div>
{t("jobs.labels.cards.estimator")} {t("jobs.labels.cards.estimator")}
{data?.est_ea ? ( {data.est_ea ? (
<a href={`mailto:${data.est_ea}`}> <a href={`mailto:${data.est_ea}`}>
<div>{`${data?.est_ct_fn || ""} ${data?.est_ct_ln || ""}`}</div> <div>{`${data.est_ct_fn || ""} ${data.est_ct_ln || ""}`}</div>
</a> </a>
) : ( ) : (
<div>{`${data?.est_ct_fn || ""} ${data?.est_ct_ln || ""}`}</div> <div>{`${data.est_ct_fn || ""} ${data.est_ct_ln || ""}`}</div>
)} )}
{data?.est_ph1 ? ( {data.est_ph1 ? (
<PhoneFormatter>{data?.est_ph1}</PhoneFormatter> <PhoneFormatter>{data.est_ph1}</PhoneFormatter>
) : null} ) : null}
</div> </div>
</span> </span>
) : null} ) : null}

View File

@@ -22,7 +22,7 @@ export default function JobDetailCardsNotesComponent({ loading, data }) {
<List <List
size='small' size='small'
bordered bordered
dataSource={data?.notes} dataSource={data.notes}
renderItem={item => ( renderItem={item => (
<List.Item> <List.Item>
{item.critical ? ( {item.critical ? (

View File

@@ -9,7 +9,7 @@ export default function JobDetailCardsVehicleComponent({ loading, data }) {
<CardTemplate <CardTemplate
loading={loading} loading={loading}
title={t("jobs.labels.cards.vehicle")} title={t("jobs.labels.cards.vehicle")}
extraLink={data?.vehicle ? `/manage/vehicles/${data?.vehicle?.id}` : null} extraLink={data.vehicle ? `/manage/vehicles/${data.vehicle.id}` : null}
> >
{data ? ( {data ? (
<span> <span>

View File

@@ -52,24 +52,28 @@ export default function JobLinesContainer({ jobId, form }) {
? searchText ? searchText
? data.joblines.filter( ? data.joblines.filter(
jl => jl =>
jl.unq_seq (jl.unq_seq || "")
?.toString() .toString()
.toLowerCase() .toLowerCase()
.includes(searchText.toLowerCase()) || .includes(searchText.toLowerCase()) ||
jl.line_desc (jl.line_desc || "")
?.toLowerCase() .toLowerCase()
.includes(searchText.toLowerCase()) || .includes(searchText.toLowerCase()) ||
jl.part_type (jl.part_type || "")
?.toLowerCase() .toLowerCase()
.includes(searchText.toLowerCase()) || .includes(searchText.toLowerCase()) ||
jl.oem_partno (jl.oem_partno || "")
?.toLowerCase() .toLowerCase()
.includes(searchText.toLowerCase()) || .includes(searchText.toLowerCase()) ||
jl.op_code_desc (jl.op_code_desc || "")
?.toLowerCase() .toLowerCase()
.includes(searchText.toLowerCase()) || .includes(searchText.toLowerCase()) ||
jl.db_price?.toString().includes(searchText.toLowerCase()) || (jl.db_price || "")
jl.act_price?.toString().includes(searchText.toLowerCase()) .toString()
.includes(searchText.toLowerCase()) ||
(jl.act_price || "")
.toString()
.includes(searchText.toLowerCase())
) )
: data.joblines : data.joblines
: null : null

View File

@@ -41,9 +41,7 @@ export default connect(
jobId={jobId} jobId={jobId}
currentUser={currentUser} currentUser={currentUser}
shopId={ shopId={
shopData.data?.bodyshops[0]?.id shopData.data.bodyshops[0].id ? shopData.data.bodyshops[0].id : "error"
? shopData.data?.bodyshops[0]?.id
: "error"
} }
/> />
); );

View File

@@ -121,11 +121,11 @@ export default withRouter(function JobsList({
key: "plate_no", key: "plate_no",
width: "8%", width: "8%",
ellipsis: true, ellipsis: true,
sorter: (a, b) => alphaSort(a.vehicle?.plate_no, b.vehicle?.plate_no), sorter: (a, b) => alphaSort(a.vehicle.plate_no, b.vehicle.plate_no),
sortOrder: sortOrder:
state.sortedInfo.columnKey === "plate_no" && state.sortedInfo.order, state.sortedInfo.columnKey === "plate_no" && state.sortedInfo.order,
render: (text, record) => { render: (text, record) => {
return record.vehicle?.plate_no ? ( return record.vehicle.plate_no ? (
<span>{record.vehicle.plate_no}</span> <span>{record.vehicle.plate_no}</span>
) : ( ) : (
t("general.labels.unknown") t("general.labels.unknown")

View File

@@ -14,7 +14,7 @@ export default function NoteUpsertModalComponent({
return ( return (
<Modal <Modal
title={noteState?.id ? t("notes.actions.edit") : t("notes.actions.new")} title={noteState.id ? t("notes.actions.edit") : t("notes.actions.new")}
visible={visible} visible={visible}
okText={t("general.labels.save")} okText={t("general.labels.save")}
onOk={() => { onOk={() => {
@@ -22,7 +22,8 @@ export default function NoteUpsertModalComponent({
}} }}
onCancel={() => { onCancel={() => {
changeVisibility(false); changeVisibility(false);
}}> }}
>
<div> <div>
{t("notes.fields.critical")} {t("notes.fields.critical")}
<Switch <Switch

View File

@@ -27,11 +27,6 @@ export default connect(
bodyshop, bodyshop,
refetch refetch
}) { }) {
const existingAppointments = useQuery(QUERY_APPOINTMENTS_BY_JOBID, {
variables: { jobid: jobId },
fetchPolicy: "network-only",
skip: !jobId
});
const [scheduleModalVisible, setscheduleModalVisible] = scheduleModalState; const [scheduleModalVisible, setscheduleModalVisible] = scheduleModalState;
const [appData, setAppData] = useState({ jobid: jobId, start: null }); const [appData, setAppData] = useState({ jobid: jobId, start: null });
const [insertAppointment] = useMutation(INSERT_APPOINTMENT); const [insertAppointment] = useMutation(INSERT_APPOINTMENT);
@@ -44,6 +39,12 @@ export default connect(
const [formData, setFormData] = useState({ notifyCustomer: false }); const [formData, setFormData] = useState({ notifyCustomer: false });
const { t } = useTranslation(); const { t } = useTranslation();
const existingAppointments = useQuery(QUERY_APPOINTMENTS_BY_JOBID, {
variables: { jobid: jobId },
fetchPolicy: "network-only",
skip: !scheduleModalVisible
});
return ( return (
<ScheduleJobModalComponent <ScheduleJobModalComponent
existingAppointments={existingAppointments} existingAppointments={existingAppointments}

View File

@@ -19,7 +19,7 @@ const errorLink = onError(
} }
} }
if (networkError) { if (networkError) {
if (networkError?.message.includes("JWTExpired")) { if (networkError.message.includes("JWTExpired")) {
expired = true; expired = true;
} }
} }

View File

@@ -1,17 +1,16 @@
import { BackTop, Layout, notification } from "antd"; import { BackTop, Layout, notification } from "antd";
import React, { lazy, Suspense, useEffect } from "react"; import React, { lazy, Suspense, useEffect } from "react";
import { useQuery } from "react-apollo";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
//This page will handle all routing for the entire application. //This page will handle all routing for the entire application.
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Route } from "react-router"; import { Route } from "react-router";
import { createStructuredSelector } from "reselect";
import { useQuery } from "react-apollo";
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
import ErrorBoundary from "../../components/error-boundary/error-boundary.component"; import ErrorBoundary from "../../components/error-boundary/error-boundary.component";
import FooterComponent from "../../components/footer/footer.component"; import FooterComponent from "../../components/footer/footer.component";
//Component Imports //Component Imports
import HeaderContainer from "../../components/header/header.container"; import HeaderContainer from "../../components/header/header.container";
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component"; import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
//const WhiteBoardPage = lazy(() => import("../white-board/white-board.page")); //const WhiteBoardPage = lazy(() => import("../white-board/white-board.page"));
import { setBodyshop } from "../../redux/user/user.actions"; import { setBodyshop } from "../../redux/user/user.actions";
import "./manage.page.styles.scss"; import "./manage.page.styles.scss";

File diff suppressed because it is too large Load Diff

View File

@@ -17,14 +17,14 @@
}, },
"dependencies": { "dependencies": {
"apollo-cache-persist": "^0.1.1", "apollo-cache-persist": "^0.1.1",
"aws-sdk": "^2.603.0", "aws-sdk": "^2.613.0",
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"compression": "^1.7.4", "compression": "^1.7.4",
"cors": "2.8.5", "cors": "2.8.5",
"dotenv": "7.0.0", "dotenv": "8.2.0",
"express": "^4.16.4", "express": "^4.16.4",
"express-sslify": "^1.2.0", "express-sslify": "^1.2.0",
"firebase-tools": "^7.9.0" "firebase-tools": "^7.12.1"
}, },
"devDependencies": { "devDependencies": {
"concurrently": "^4.0.1", "concurrently": "^4.0.1",

View File

@@ -386,10 +386,10 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
aws-sdk@^2.603.0: aws-sdk@^2.613.0:
version "2.603.0" version "2.613.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.603.0.tgz#0920756d2666f4fcfa7233841ef35cd04da81348" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.613.0.tgz#f0d4c99f0df7ee8227d331dde19d5251b31a5da7"
integrity sha512-+VlskUDLZLQDDlaVa0Tb02aEFEWcKkTfTew1SGYwce9hUrKcR33IX4e9kM6MyI7UeLQAl0v8dagTniP67UrTQw== integrity sha512-FYLaVtC/AlrcnjsPw1JhAsKd6yapr918Mk0jAcw3yFZp1sI2V0Um+2pmijLFsV+nNRxFlCVJRhhFWB5GK6yALA==
dependencies: dependencies:
buffer "4.9.1" buffer "4.9.1"
events "1.1.1" events "1.1.1"
@@ -1092,10 +1092,10 @@ dot-prop@^4.1.0:
dependencies: dependencies:
is-obj "^1.0.0" is-obj "^1.0.0"
dotenv@7.0.0: dotenv@8.2.0:
version "7.0.0" version "8.2.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
dotenv@^6.1.0: dotenv@^6.1.0:
version "6.2.0" version "6.2.0"
@@ -1548,10 +1548,10 @@ find-up@^3.0.0:
dependencies: dependencies:
locate-path "^3.0.0" locate-path "^3.0.0"
firebase-tools@^7.9.0: firebase-tools@^7.12.1:
version "7.9.0" version "7.12.1"
resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-7.9.0.tgz#32661980943f5ebbb2d82c126762c468ae0cff9c" resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-7.12.1.tgz#af78bbc446ae46d722938bd8009c351d52ec01f3"
integrity sha512-dYxuFflaPAkic2KQyPJ6spox8KzlQRb4Xyk6oVDorBV0YmBIJ3VQhJYbwSZwwDlbCmiPiMXNBM26JUifp09Qfw== integrity sha512-4cfHltsfUzKyt03OH9JUYrCPsq0OIZ9i54IzJRjJgs68NJDLrhUislBipw5Am0QgF8QDYpzz8wLTH56fNgmx8g==
dependencies: dependencies:
"@google-cloud/pubsub" "^1.1.5" "@google-cloud/pubsub" "^1.1.5"
JSONStream "^1.2.1" JSONStream "^1.2.1"
@@ -1574,6 +1574,7 @@ firebase-tools@^7.9.0:
fs-extra "^0.23.1" fs-extra "^0.23.1"
glob "^7.1.2" glob "^7.1.2"
google-auto-auth "^0.7.2" google-auto-auth "^0.7.2"
google-gax "~1.12.0"
inquirer "~6.3.1" inquirer "~6.3.1"
jsonschema "^1.0.2" jsonschema "^1.0.2"
jsonwebtoken "^8.2.1" jsonwebtoken "^8.2.1"
@@ -1587,7 +1588,7 @@ firebase-tools@^7.9.0:
portfinder "^1.0.23" portfinder "^1.0.23"
progress "^2.0.3" progress "^2.0.3"
request "^2.87.0" request "^2.87.0"
semver "^5.0.3" semver "^5.7.1"
superstatic "^6.0.1" superstatic "^6.0.1"
tar "^4.3.0" tar "^4.3.0"
tcp-port-used "^1.0.1" tcp-port-used "^1.0.1"
@@ -1843,7 +1844,7 @@ google-auto-auth@^0.7.2:
google-auth-library "^0.10.0" google-auth-library "^0.10.0"
request "^2.79.0" request "^2.79.0"
google-gax@^1.7.5: google-gax@^1.7.5, google-gax@~1.12.0:
version "1.12.0" version "1.12.0"
resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-1.12.0.tgz#f926f7e6abda245db38ecbebbbf58daaf3a8f687" resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-1.12.0.tgz#f926f7e6abda245db38ecbebbbf58daaf3a8f687"
integrity sha512-BeeoxVO6y9K20gUsexUwptutd0PfrTItrA02JWwwstlBIOAcvgFp86MHWufQsnrkPVhxBjHXq65aIkSejtJjDg== integrity sha512-BeeoxVO6y9K20gUsexUwptutd0PfrTItrA02JWwwstlBIOAcvgFp86MHWufQsnrkPVhxBjHXq65aIkSejtJjDg==
@@ -3508,7 +3509,7 @@ semver-diff@^2.0.0:
dependencies: dependencies:
semver "^5.0.3" semver "^5.0.3"
"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
version "5.7.1" version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==