diff --git a/electron/decoder/decoder.js b/electron/decoder/decoder.js
index 209645e..21c873b 100644
--- a/electron/decoder/decoder.js
+++ b/electron/decoder/decoder.js
@@ -29,9 +29,12 @@ async function DecodeEstimate(filePath) {
returnValue = { ERROR: "Vehicle mileage is less than 20,000kms." };
} else if (!accepted_ins_co.includes(job.INS_CO_NM)) {
returnValue = {
- ERROR: `Insurance Company Name is not valid for RPS. (${job.INS_CO_NM})`,
+ ERROR: `Insurance Company Name is not valid for RPS. (${
+ job.INS_CO_NM || "No name set"
+ })`,
};
- } else if (!job.clm_no) {
+ } else if (!job.CLM_NO) {
+ log.info("Job ignored. No claim #. " + job.clm_no);
returnValue = {
ERROR: `An unique claim number must be set for all jobs sent to RPS.`,
};
diff --git a/electron/main.js b/electron/main.js
index 832b244..06e3178 100644
--- a/electron/main.js
+++ b/electron/main.js
@@ -44,6 +44,7 @@ var menu = Menu.buildFromTemplate([
label: "Clear Settings",
click() {
store.reset("filePaths");
+ mainWindow.webContents.session.clearStorageData();
},
},
{
diff --git a/firebase/functions/index.js b/firebase/functions/index.js
index 367f916..aacd3d5 100644
--- a/firebase/functions/index.js
+++ b/firebase/functions/index.js
@@ -7,7 +7,7 @@ exports.processSignUp = functions.auth.user().onCreate((user) => {
// Check if user meets role criteria:
// Your custom logic here: to decide what roles and other `x-hasura-*` should the user get
let customClaims;
- if (user.email && user.email.indexOf("@thinkimex.com") !== -1) {
+ if (user.email && user.email.indexOf("@admin.imex.online") !== -1) {
customClaims = {
"https://hasura.io/jwt/claims": {
"x-hasura-default-role": "admin",
diff --git a/src/components/atoms/delete-job/delete-job.atom.jsx b/src/components/atoms/delete-job/delete-job.atom.jsx
new file mode 100644
index 0000000..c1407a9
--- /dev/null
+++ b/src/components/atoms/delete-job/delete-job.atom.jsx
@@ -0,0 +1,46 @@
+import { DeleteFilled } from "@ant-design/icons";
+import { useMutation } from "@apollo/client";
+import { Button, message, Popconfirm } from "antd";
+import React, { useState } from "react";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { DELETE_JOB } from "../../../graphql/jobs.queries";
+import { setSelectedJobId } from "../../../redux/application/application.actions";
+const mapStateToProps = createStructuredSelector({
+ //currentUser: selectCurrentUser
+});
+const mapDispatchToProps = (dispatch) => ({
+ setSelectedJobId: (id) => dispatch(setSelectedJobId(id)),
+});
+export function DeleteJobAtom({ setSelectedJobId, jobId }) {
+ const [deleteJob] = useMutation(DELETE_JOB);
+ const [loading, setLoading] = useState(false);
+ const handleDelete = async () => {
+ setLoading(true);
+ const result = await deleteJob({
+ variables: { jobId: jobId },
+ });
+
+ if (result.errors) {
+ message.error(result.errors.toString());
+ } else {
+ message.success("Job deleted.");
+ setSelectedJobId(null);
+ }
+ setLoading(false);
+ };
+
+ return (
+
+ );
+}
+export default connect(mapStateToProps, mapDispatchToProps)(DeleteJobAtom);
diff --git a/src/components/organisms/jobs-detail/jobs-detail.organism.jsx b/src/components/organisms/jobs-detail/jobs-detail.organism.jsx
index e05f725..ea971ed 100644
--- a/src/components/organisms/jobs-detail/jobs-detail.organism.jsx
+++ b/src/components/organisms/jobs-detail/jobs-detail.organism.jsx
@@ -6,6 +6,7 @@ import { createStructuredSelector } from "reselect";
import { QUERY_JOB_BY_PK } from "../../../graphql/jobs.queries";
import { setSelectedJobTargetPc } from "../../../redux/application/application.actions";
import { selectSelectedJobId } from "../../../redux/application/application.selectors";
+import { DeleteJobAtom } from "../../atoms/delete-job/delete-job.atom";
import ErrorResultAtom from "../../atoms/error-result/error-result.atom";
import JobsPartsGraphAtom from "../../atoms/jobs-parts-graph/jobs-parts-graph.atom";
import JobsDetailDescriptionMolecule from "../../molecules/jobs-detail-description/jobs-detail-description.molecule";
@@ -77,6 +78,7 @@ export function JobsDetailOrganism({ selectedJobId, setSelectedJobTargetPc }) {
loading={loading}
/>
+
);
}
diff --git a/src/components/pages/jobs/jobs.page.jsx b/src/components/pages/jobs/jobs.page.jsx
index f2ef40c..160ae86 100644
--- a/src/components/pages/jobs/jobs.page.jsx
+++ b/src/components/pages/jobs/jobs.page.jsx
@@ -1,4 +1,4 @@
-import { Col, Row, Tabs } from "antd";
+import { Col, Row, Tabs, Grid } from "antd";
import React from "react";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -10,10 +10,27 @@ const mapStateToProps = createStructuredSelector({});
const mapDispatchToProps = (dispatch) => ({});
export function JobsPage() {
+ const selectedBreakpoint = Object.entries(Grid.useBreakpoint())
+ .filter((screen) => !!screen[1])
+ .slice(-1)[0];
+
+ const bpoints = {
+ xs: { l: 12, r: 12 },
+ sm: { l: 10, r: 14 },
+ md: { l: 10, r: 14 },
+ lg: { l: 8, r: 16 },
+ xl: { l: 6, r: 18 },
+ xxl: { l: 5, r: 19 },
+ };
+
+ const selectedSpans = selectedBreakpoint
+ ? bpoints[selectedBreakpoint[0]]
+ : { l: 18, r: 6 };
+
return (
-
+
@@ -23,7 +40,7 @@ export function JobsPage() {
-
+
diff --git a/src/components/pages/routes/routes.page.jsx b/src/components/pages/routes/routes.page.jsx
index 30e2638..cf05db8 100644
--- a/src/components/pages/routes/routes.page.jsx
+++ b/src/components/pages/routes/routes.page.jsx
@@ -6,14 +6,26 @@ import { createStructuredSelector } from "reselect";
import SiderMenuOrganism from "../../organisms/sider-menu/sider-menu.organism";
import Jobs from "../jobs/jobs.page";
import SettingsPage from "../settings/settings.page";
-
-const mapStateToProps = createStructuredSelector({});
+import { selectBodyshop } from "../../../redux/user/user.selectors";
+import ErrorResultAtom from "../../atoms/error-result/error-result.atom";
+const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop });
const mapDispatchToProps = (dispatch) => ({});
-export function RoutesPage() {
+export function RoutesPage({ bodyshop }) {
+ if (bodyshop === false)
+ return (
+
+ );
return (
-
+
diff --git a/src/components/pages/sign-in/sign-in.page.jsx b/src/components/pages/sign-in/sign-in.page.jsx
index 40952f2..26087bc 100644
--- a/src/components/pages/sign-in/sign-in.page.jsx
+++ b/src/components/pages/sign-in/sign-in.page.jsx
@@ -2,7 +2,6 @@ import { LockOutlined, UserOutlined } from "@ant-design/icons";
import { Alert, Button, Form, Input, Typography } from "antd";
import React from "react";
import { connect } from "react-redux";
-import { Link } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import ImEXOnlineLogo from "../../../assets/logo192.png";
import { emailSignInStart } from "../../../redux/user/user.actions";
@@ -58,9 +57,6 @@ export function SignInPage({ emailSignInStart, signInError, loginLoading }) {
Login
-
-
-
);
}
diff --git a/src/graphql/jobs.queries.js b/src/graphql/jobs.queries.js
index c378d31..0528fbf 100644
--- a/src/graphql/jobs.queries.js
+++ b/src/graphql/jobs.queries.js
@@ -172,3 +172,11 @@ export const UPDATE_JOB = gql`
}
}
`;
+
+export const DELETE_JOB = gql`
+ mutation DELETE_JOB($jobId: uuid!) {
+ delete_jobs_by_pk(id: $jobId) {
+ id
+ }
+ }
+`;
diff --git a/src/redux/user/user.sagas.js b/src/redux/user/user.sagas.js
index 77b4075..9880553 100644
--- a/src/redux/user/user.sagas.js
+++ b/src/redux/user/user.sagas.js
@@ -36,17 +36,19 @@ export function* signInWithEmail({ payload: { email, password } }) {
mutation: UPSERT_USER,
variables: { authEmail: user.email, authToken: user.uid },
});
- console.log("function*signInWithEmail -> result", result);
-
- yield put(
- signInSuccess({
- uid: user.uid,
- email: user.email,
- displayName: user.displayName,
- photoURL: user.photoURL,
- authorized: true,
- })
- );
+ if (!result.errors) {
+ yield put(
+ signInSuccess({
+ uid: user.uid,
+ email: user.email,
+ displayName: user.displayName,
+ photoURL: user.photoURL,
+ authorized: true,
+ })
+ );
+ } else {
+ yield put(signInFailure(JSON.stringify(result.errors)));
+ }
} catch (error) {
yield put(signInFailure(error));
}
@@ -100,6 +102,7 @@ export function* updateUserDetails(userDetails) {
} catch (error) {
//yield put(signOutFailure(error.message));
//TODO error handling
+ console.log(error);
}
}
@@ -111,13 +114,17 @@ export function* signInSuccessSaga({ payload }) {
//Query for the Correct Bodyshop
const shop = yield client.query({ query: QUERY_BODYSHOP });
-
- yield put(setBodyshop(shop.data.bodyshops[0]));
- ipcRenderer.send(
- ipcTypes.default.app.toMain.setAcceptableInsCoNm,
- shop.data.bodyshops[0].accepted_ins_co
- );
- ipcRenderer.send(ipcTypes.default.fileWatcher.toMain.start);
+ if (shop.data.bodyshops.length > 0) {
+ yield put(setBodyshop(shop.data.bodyshops[0]));
+ ipcRenderer.send(
+ ipcTypes.default.app.toMain.setAcceptableInsCoNm,
+ shop.data.bodyshops[0].accepted_ins_co
+ );
+ ipcRenderer.send(ipcTypes.default.fileWatcher.toMain.start);
+ } else {
+ console.log("No bodyshop has been associated.");
+ yield put(setBodyshop(false));
+ }
// LogRocket.identify(payload.email);
// if (!payload.email.includes("@imex.")) yield put(setInstanceId(payload.uid));
// yield logImEXEvent("redux_sign_in_success");