Minor adjustments and fixes
This commit is contained in:
@@ -1283,6 +1283,48 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>loadingshop</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>loggingin</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>na</name>
|
<name>na</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import React, { lazy, Suspense, useEffect } from "react";
|
import React, { lazy, Suspense, useEffect } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Route, Switch } from "react-router-dom";
|
import { Route, Switch } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
@@ -33,7 +34,7 @@ export default connect(
|
|||||||
checkUserSession();
|
checkUserSession();
|
||||||
return () => {};
|
return () => {};
|
||||||
}, [checkUserSession]);
|
}, [checkUserSession]);
|
||||||
|
const { t } = useTranslation();
|
||||||
if (currentUser && currentUser.language)
|
if (currentUser && currentUser.language)
|
||||||
i18next.changeLanguage(currentUser.language, (err, t) => {
|
i18next.changeLanguage(currentUser.language, (err, t) => {
|
||||||
if (err)
|
if (err)
|
||||||
@@ -41,8 +42,7 @@ export default connect(
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (currentUser.authorized === null) {
|
if (currentUser.authorized === null) {
|
||||||
//TODO: Translate this.
|
return <LoadingSpinner message={t("general.labels.loggingin")} />;
|
||||||
return <LoadingSpinner message="Waiting for Current Auth to persist." />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -50,15 +50,15 @@ export default connect(
|
|||||||
<Switch>
|
<Switch>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<Suspense fallback={<LoadingSpinner />}>
|
<Suspense fallback={<LoadingSpinner />}>
|
||||||
<Route exact path="/" component={LandingPage} />
|
<Route exact path='/' component={LandingPage} />
|
||||||
<Route exact path="/unauthorized" component={Unauthorized} />
|
<Route exact path='/unauthorized' component={Unauthorized} />
|
||||||
|
|
||||||
<Route exact path="/signin" component={SignInPage} />
|
<Route exact path='/signin' component={SignInPage} />
|
||||||
|
|
||||||
<PrivateRoute
|
<PrivateRoute
|
||||||
//isAuthorized={HookCurrentUser.data.currentUser ? true : false}
|
//isAuthorized={HookCurrentUser.data.currentUser ? true : false}
|
||||||
isAuthorized={currentUser.authorized}
|
isAuthorized={currentUser.authorized}
|
||||||
path="/manage"
|
path='/manage'
|
||||||
component={ManagePage}
|
component={ManagePage}
|
||||||
/>
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export default connect(
|
|||||||
|
|
||||||
const tombstoneTitle = (
|
const tombstoneTitle = (
|
||||||
<div>
|
<div>
|
||||||
<Avatar size="large" alt="Vehicle Image" src={CarImage} />
|
<Avatar size='large' alt='Vehicle Image' src={CarImage} />
|
||||||
{`${t("jobs.fields.ro_number")} ${
|
{`${t("jobs.fields.ro_number")} ${
|
||||||
job.ro_number ? job.ro_number : t("general.labels.na")
|
job.ro_number ? job.ro_number : t("general.labels.na")
|
||||||
}`}
|
}`}
|
||||||
@@ -54,8 +54,7 @@ export default connect(
|
|||||||
<Menu
|
<Menu
|
||||||
onClick={e => {
|
onClick={e => {
|
||||||
updateJobStatus(e.key);
|
updateJobStatus(e.key);
|
||||||
}}
|
}}>
|
||||||
>
|
|
||||||
{bodyshop.md_ro_statuses.statuses.map(item => (
|
{bodyshop.md_ro_statuses.statuses.map(item => (
|
||||||
<Menu.Item key={item}>{item}</Menu.Item>
|
<Menu.Item key={item}>{item}</Menu.Item>
|
||||||
))}
|
))}
|
||||||
@@ -63,24 +62,23 @@ export default connect(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const menuExtra = [
|
const menuExtra = [
|
||||||
<Dropdown overlay={statusmenu} key="changestatus">
|
<Dropdown overlay={statusmenu} key='changestatus'>
|
||||||
<Button>
|
<Button>
|
||||||
{t("jobs.actions.changestatus")} <Icon type="down" />
|
{t("jobs.actions.changestatus")} <Icon type='down' />
|
||||||
</Button>
|
</Button>
|
||||||
</Dropdown>,
|
</Dropdown>,
|
||||||
<Badge key="schedule" count={job.appointments_aggregate.aggregate.count}>
|
<Badge key='schedule' count={job.appointments_aggregate.aggregate.count}>
|
||||||
<Button
|
<Button
|
||||||
//TODO: Enabled logic based on status.
|
//TODO: Enabled logic based on status.
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setscheduleModalVisible(true);
|
setscheduleModalVisible(true);
|
||||||
}}
|
}}>
|
||||||
>
|
|
||||||
{t("jobs.actions.schedule")}
|
{t("jobs.actions.schedule")}
|
||||||
</Button>
|
</Button>
|
||||||
</Badge>,
|
</Badge>,
|
||||||
<Button
|
<Button
|
||||||
key="convert"
|
key='convert'
|
||||||
type="dashed"
|
type='dashed'
|
||||||
disabled={job.converted}
|
disabled={job.converted}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
mutationConvertJob({
|
mutationConvertJob({
|
||||||
@@ -92,16 +90,14 @@ export default connect(
|
|||||||
message: t("jobs.successes.converted")
|
message: t("jobs.successes.converted")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}}
|
}}>
|
||||||
>
|
|
||||||
{t("jobs.actions.convert")}
|
{t("jobs.actions.convert")}
|
||||||
</Button>,
|
</Button>,
|
||||||
<Button
|
<Button
|
||||||
type="primary"
|
type='primary'
|
||||||
key="submit"
|
key='submit'
|
||||||
htmlType="button"
|
htmlType='button'
|
||||||
onClick={handleSubmit}
|
onClick={handleSubmit}>
|
||||||
>
|
|
||||||
{t("general.labels.save")}
|
{t("general.labels.save")}
|
||||||
</Button>
|
</Button>
|
||||||
];
|
];
|
||||||
@@ -114,9 +110,9 @@ export default connect(
|
|||||||
title={tombstoneTitle}
|
title={tombstoneTitle}
|
||||||
//subTitle={tombstoneSubtitle}
|
//subTitle={tombstoneSubtitle}
|
||||||
tags={
|
tags={
|
||||||
<span key="job-status">
|
<span key='job-status'>
|
||||||
{job.status ? <Tag color="blue">{job.status}</Tag> : null}
|
{job.status ? <Tag color='blue'>{job.status}</Tag> : null}
|
||||||
<Tag color="red">
|
<Tag color='red'>
|
||||||
{job.owner ? (
|
{job.owner ? (
|
||||||
<Link to={`/manage/owners/${job.owner.id}`}>
|
<Link to={`/manage/owners/${job.owner.id}`}>
|
||||||
{`${job.ownr_co_nm || ""}${job.ownr_fn || ""} ${job.ownr_ln ||
|
{`${job.ownr_co_nm || ""}${job.ownr_fn || ""} ${job.ownr_ln ||
|
||||||
@@ -126,7 +122,7 @@ export default connect(
|
|||||||
t("jobs.errors.noowner")
|
t("jobs.errors.noowner")
|
||||||
)}
|
)}
|
||||||
</Tag>
|
</Tag>
|
||||||
<Tag color="green">
|
<Tag color='green'>
|
||||||
{job.vehicle ? (
|
{job.vehicle ? (
|
||||||
<Link to={`/manage/vehicles/${job.vehicle.id}`}>
|
<Link to={`/manage/vehicles/${job.vehicle.id}`}>
|
||||||
{job.vehicle.v_model_yr || t("general.labels.na")}{" "}
|
{job.vehicle.v_model_yr || t("general.labels.na")}{" "}
|
||||||
@@ -140,11 +136,10 @@ export default connect(
|
|||||||
<BarcodePopup value={job.id} />
|
<BarcodePopup value={job.id} />
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
extra={menuExtra}
|
extra={menuExtra}>
|
||||||
>
|
<Descriptions size='small' column={5}>
|
||||||
<Descriptions size="small" column={5}>
|
|
||||||
<Descriptions.Item label={t("jobs.fields.repairtotal")}>
|
<Descriptions.Item label={t("jobs.fields.repairtotal")}>
|
||||||
<CurrencyFormatter>{job.claim_total}</CurrencyFormatter>
|
<CurrencyFormatter>{job.clm_total}</CurrencyFormatter>
|
||||||
</Descriptions.Item>
|
</Descriptions.Item>
|
||||||
|
|
||||||
<Descriptions.Item label={t("jobs.fields.customerowing")}>
|
<Descriptions.Item label={t("jobs.fields.customerowing")}>
|
||||||
@@ -157,7 +152,7 @@ export default connect(
|
|||||||
|
|
||||||
<Descriptions.Item label={t("jobs.fields.scheduled_completion")}>
|
<Descriptions.Item label={t("jobs.fields.scheduled_completion")}>
|
||||||
{job.scheduled_completion ? (
|
{job.scheduled_completion ? (
|
||||||
<Moment format="MM/DD/YYYY">{job.scheduled_completion}</Moment>
|
<Moment format='MM/DD/YYYY'>{job.scheduled_completion}</Moment>
|
||||||
) : null}
|
) : null}
|
||||||
</Descriptions.Item>
|
</Descriptions.Item>
|
||||||
|
|
||||||
|
|||||||
@@ -33,13 +33,14 @@ const errorLink = onError(
|
|||||||
console.log("Got the new token.", token);
|
console.log("Got the new token.", token);
|
||||||
window.localStorage.setItem("token", token);
|
window.localStorage.setItem("token", token);
|
||||||
|
|
||||||
// const oldHeaders = operation.getContext().headers;
|
const oldHeaders = operation.getContext().headers;
|
||||||
// operation.setContext({
|
operation.setContext({
|
||||||
// headers: {
|
headers: {
|
||||||
// ...oldHeaders,
|
...oldHeaders,
|
||||||
// authorization: token ? `Bearer ${token}` : ""
|
authorization: token ? `Bearer ${token}` : ""
|
||||||
// }
|
}
|
||||||
// });
|
});
|
||||||
|
console.log(operation.getContext());
|
||||||
// console.log("forward", forward);
|
// console.log("forward", forward);
|
||||||
// console.log("operation", operation);
|
// console.log("operation", operation);
|
||||||
return forward(operation);
|
return forward(operation);
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ export const QUERY_ALL_OPEN_JOBS = gql`
|
|||||||
scheduled_delivery
|
scheduled_delivery
|
||||||
status
|
status
|
||||||
updated_at
|
updated_at
|
||||||
clm_total
|
|
||||||
ded_amt
|
ded_amt
|
||||||
vehicle {
|
vehicle {
|
||||||
id
|
id
|
||||||
@@ -108,6 +107,7 @@ export const GET_JOB_BY_PK = gql`
|
|||||||
converted
|
converted
|
||||||
est_number
|
est_number
|
||||||
ro_number
|
ro_number
|
||||||
|
clm_total
|
||||||
vehicle {
|
vehicle {
|
||||||
id
|
id
|
||||||
plate_no
|
plate_no
|
||||||
|
|||||||
@@ -36,8 +36,7 @@ function JobsDetailPageContainer({ match, form }) {
|
|||||||
refetch();
|
refetch();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
//TODO Error handling.
|
notification[error]({ message: t("jobs.errors.saving") });
|
||||||
console.log("error", error);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -70,7 +69,6 @@ function JobsDetailPageContainer({ match, form }) {
|
|||||||
notification["success"]({
|
notification["success"]({
|
||||||
message: t("jobs.successes.savetitle")
|
message: t("jobs.successes.savetitle")
|
||||||
});
|
});
|
||||||
//TODO: Better way to reset the field decorators?
|
|
||||||
refetch().then(r => form.resetFields());
|
refetch().then(r => form.resetFields());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -78,7 +76,7 @@ function JobsDetailPageContainer({ match, form }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (loading) return <SpinComponent />;
|
if (loading) return <SpinComponent />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type='error' />;
|
||||||
|
|
||||||
return data.jobs_by_pk ? (
|
return data.jobs_by_pk ? (
|
||||||
<JobDetailFormContext.Provider value={form}>
|
<JobDetailFormContext.Provider value={form}>
|
||||||
@@ -94,7 +92,7 @@ function JobsDetailPageContainer({ match, form }) {
|
|||||||
/>
|
/>
|
||||||
</JobDetailFormContext.Provider>
|
</JobDetailFormContext.Provider>
|
||||||
) : (
|
) : (
|
||||||
<AlertComponent message={t("jobs.errors.noaccess")} type="error" />
|
<AlertComponent message={t("jobs.errors.noaccess")} type='error' />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
export default Form.create({ name: "JobsDetailPageContainer" })(
|
export default Form.create({ name: "JobsDetailPageContainer" })(
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
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";
|
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
|
||||||
import { setBodyshop } from "../../redux/user/user.actions";
|
import { setBodyshop } from "../../redux/user/user.actions";
|
||||||
import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors";
|
import {
|
||||||
|
selectBodyshop,
|
||||||
|
selectCurrentUser
|
||||||
|
} from "../../redux/user/user.selectors";
|
||||||
import ManagePage from "./manage.page";
|
import ManagePage from "./manage.page";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -33,12 +36,10 @@ export default connect(
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (data) setBodyshop(data.bodyshops[0]);
|
if (data) setBodyshop(data.bodyshops[0]);
|
||||||
return () => {
|
return () => {};
|
||||||
//
|
|
||||||
};
|
|
||||||
}, [data, setBodyshop]);
|
}, [data, setBodyshop]);
|
||||||
|
|
||||||
//TODO Translate later.
|
if (!bodyshop)
|
||||||
if (!bodyshop) return <LoadingSpinner message="Loading bodyshop data." />;
|
return <LoadingSpinner message={t("general.labels.loadingshop")} />;
|
||||||
return <ManagePage match={match} />;
|
return <ManagePage match={match} />;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -106,6 +106,8 @@
|
|||||||
"in": "In",
|
"in": "In",
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"loadingapp": "Loading Bodyshop.app",
|
"loadingapp": "Loading Bodyshop.app",
|
||||||
|
"loadingshop": "Loading shop data...",
|
||||||
|
"loggingin": "Logging you in...",
|
||||||
"na": "N/A",
|
"na": "N/A",
|
||||||
"out": "Out",
|
"out": "Out",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
|
|||||||
@@ -106,6 +106,8 @@
|
|||||||
"in": "en",
|
"in": "en",
|
||||||
"loading": "Cargando...",
|
"loading": "Cargando...",
|
||||||
"loadingapp": "Cargando Bodyshop.app",
|
"loadingapp": "Cargando Bodyshop.app",
|
||||||
|
"loadingshop": "Cargando datos de la tienda ...",
|
||||||
|
"loggingin": "Iniciando sesión ...",
|
||||||
"na": "N / A",
|
"na": "N / A",
|
||||||
"out": "Afuera",
|
"out": "Afuera",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
|
|||||||
@@ -106,6 +106,8 @@
|
|||||||
"in": "dans",
|
"in": "dans",
|
||||||
"loading": "Chargement...",
|
"loading": "Chargement...",
|
||||||
"loadingapp": "Chargement de Bodyshop.app",
|
"loadingapp": "Chargement de Bodyshop.app",
|
||||||
|
"loadingshop": "Chargement des données de la boutique ...",
|
||||||
|
"loggingin": "Vous connecter ...",
|
||||||
"na": "N / A",
|
"na": "N / A",
|
||||||
"out": "En dehors",
|
"out": "En dehors",
|
||||||
"save": "sauvegarder",
|
"save": "sauvegarder",
|
||||||
|
|||||||
Reference in New Issue
Block a user