Added selected header navigation BOD-164
This commit is contained in:
@@ -26,7 +26,10 @@ import {
|
|||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { selectRecentItems } from "../../redux/application/application.selectors";
|
import {
|
||||||
|
selectRecentItems,
|
||||||
|
selectSelectedHeader,
|
||||||
|
} from "../../redux/application/application.selectors";
|
||||||
import { setModalContext } from "../../redux/modals/modals.actions";
|
import { setModalContext } from "../../redux/modals/modals.actions";
|
||||||
import { signOutStart } from "../../redux/user/user.actions";
|
import { signOutStart } from "../../redux/user/user.actions";
|
||||||
import { selectCurrentUser } from "../../redux/user/user.selectors";
|
import { selectCurrentUser } from "../../redux/user/user.selectors";
|
||||||
@@ -36,6 +39,7 @@ import "./header.styles.scss";
|
|||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
currentUser: selectCurrentUser,
|
currentUser: selectCurrentUser,
|
||||||
recentItems: selectRecentItems,
|
recentItems: selectRecentItems,
|
||||||
|
selectedHeader: selectSelectedHeader,
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
@@ -51,6 +55,7 @@ const mapDispatchToProps = (dispatch) => ({
|
|||||||
function Header({
|
function Header({
|
||||||
handleMenuClick,
|
handleMenuClick,
|
||||||
currentUser,
|
currentUser,
|
||||||
|
selectedHeader,
|
||||||
signOutStart,
|
signOutStart,
|
||||||
setInvoiceEnterContext,
|
setInvoiceEnterContext,
|
||||||
setTimeTicketContext,
|
setTimeTicketContext,
|
||||||
@@ -64,7 +69,7 @@ function Header({
|
|||||||
mode="horizontal"
|
mode="horizontal"
|
||||||
theme="dark"
|
theme="dark"
|
||||||
className="header-main-menu"
|
className="header-main-menu"
|
||||||
selectedKeys={["home"]}
|
selectedKeys={[selectedHeader]}
|
||||||
onClick={handleMenuClick}
|
onClick={handleMenuClick}
|
||||||
>
|
>
|
||||||
<Menu.Item key="home">
|
<Menu.Item key="home">
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
max-height: 3.5rem;
|
max-height: 3.5rem;
|
||||||
}
|
}
|
||||||
.header-main-menu {
|
.header-main-menu {
|
||||||
width: 80vw;
|
//width: 95vw;
|
||||||
float: left;
|
//float: left;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const JobSearchSelect = ({ value, onChange, onBlur, disabled }, ref) => {
|
|||||||
const [option, setOption] = useState(value);
|
const [option, setOption] = useState(value);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (value === option) {
|
if (value === option && value) {
|
||||||
callIdSearch({ variables: { id: value } });
|
callIdSearch({ variables: { id: value } });
|
||||||
}
|
}
|
||||||
}, [value, option, callIdSearch]);
|
}, [value, option, callIdSearch]);
|
||||||
@@ -46,7 +46,7 @@ const JobSearchSelect = ({ value, onChange, onBlur, disabled }, ref) => {
|
|||||||
const handleSelect = (value) => {
|
const handleSelect = (value) => {
|
||||||
setOption(value);
|
setOption(value);
|
||||||
if (value !== option && onChange) {
|
if (value !== option && onChange) {
|
||||||
onChange(option);
|
onChange(value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -69,6 +69,7 @@ const JobSearchSelect = ({ value, onChange, onBlur, disabled }, ref) => {
|
|||||||
filterOption={false}
|
filterOption={false}
|
||||||
onSearch={handleSearch}
|
onSearch={handleSearch}
|
||||||
// onChange={setOption}
|
// onChange={setOption}
|
||||||
|
onChange={handleSelect}
|
||||||
onSelect={handleSelect}
|
onSelect={handleSelect}
|
||||||
notFoundContent={loading ? <LoadingOutlined /> : <Empty />}
|
notFoundContent={loading ? <LoadingOutlined /> : <Empty />}
|
||||||
onBlur={onBlur}
|
onBlur={onBlur}
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import AccountingPayablesTable from "../../components/accounting-payables-table/accounting-payables-table.component";
|
import AccountingPayablesTable from "../../components/accounting-payables-table/accounting-payables-table.component";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import { QUERY_INVOICES_FOR_EXPORT } from "../../graphql/accounting.queries";
|
import { QUERY_INVOICES_FOR_EXPORT } from "../../graphql/accounting.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -15,19 +18,25 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
export function AccountingPayablesContainer({ bodyshop, setBreadcrumbs }) {
|
export function AccountingPayablesContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.accounting-payables");
|
document.title = t("titles.accounting-payables");
|
||||||
|
setSelectedHeader("payables");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/accounting/payables",
|
link: "/manage/accounting/payables",
|
||||||
label: t("titles.bc.accounting-payables"),
|
label: t("titles.bc.accounting-payables"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const { loading, error, data } = useQuery(QUERY_INVOICES_FOR_EXPORT);
|
const { loading, error, data } = useQuery(QUERY_INVOICES_FOR_EXPORT);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import AccountingPaymentsTable from "../../components/accounting-payments-table/accounting-payments-table.component";
|
import AccountingPaymentsTable from "../../components/accounting-payments-table/accounting-payments-table.component";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import { QUERY_PAYMENTS_FOR_EXPORT } from "../../graphql/accounting.queries";
|
import { QUERY_PAYMENTS_FOR_EXPORT } from "../../graphql/accounting.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
@@ -16,19 +19,25 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
export function AccountingPaymentsContainer({ bodyshop, setBreadcrumbs }) {
|
export function AccountingPaymentsContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.accounting-payments");
|
document.title = t("titles.accounting-payments");
|
||||||
|
setSelectedHeader("payments");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/accounting/payments",
|
link: "/manage/accounting/payments",
|
||||||
label: t("titles.bc.accounting-payments"),
|
label: t("titles.bc.accounting-payments"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const { loading, error, data } = useQuery(QUERY_PAYMENTS_FOR_EXPORT);
|
const { loading, error, data } = useQuery(QUERY_PAYMENTS_FOR_EXPORT);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import AccountingReceivablesTable from "../../components/accounting-receivables-table/accounting-receivables-table.component";
|
import AccountingReceivablesTable from "../../components/accounting-receivables-table/accounting-receivables-table.component";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import { QUERY_JOBS_FOR_EXPORT } from "../../graphql/accounting.queries";
|
import { QUERY_JOBS_FOR_EXPORT } from "../../graphql/accounting.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
@@ -16,19 +19,25 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
export function AccountingReceivablesContainer({ bodyshop, setBreadcrumbs }) {
|
export function AccountingReceivablesContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.accounting-receivables");
|
document.title = t("titles.accounting-receivables");
|
||||||
|
setSelectedHeader("receivables");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/accounting/receivables",
|
link: "/manage/accounting/receivables",
|
||||||
label: t("titles.bc.accounting-receivables"),
|
label: t("titles.bc.accounting-receivables"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const { loading, error, data } = useQuery(QUERY_JOBS_FOR_EXPORT, {
|
const { loading, error, data } = useQuery(QUERY_JOBS_FOR_EXPORT, {
|
||||||
variables: {
|
variables: {
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ import { useHistory, useLocation } from "react-router-dom";
|
|||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { INSERT_NEW_CONTRACT } from "../../graphql/cccontracts.queries";
|
import { INSERT_NEW_CONTRACT } from "../../graphql/cccontracts.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import ContractCreatePageComponent from "./contract-create.page.component";
|
import ContractCreatePageComponent from "./contract-create.page.component";
|
||||||
|
|
||||||
@@ -16,9 +19,14 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs }) {
|
export function ContractCreatePageContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
@@ -70,6 +78,7 @@ export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.contracts-create");
|
document.title = t("titles.contracts-create");
|
||||||
|
setSelectedHeader("newcontract");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
||||||
{
|
{
|
||||||
@@ -81,7 +90,7 @@ export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.contracts-create"),
|
label: t("titles.bc.contracts-create"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="contracts:create">
|
<RbacWrapper action="contracts:create">
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
addRecentItem,
|
addRecentItem,
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
} from "../../redux/application/application.actions";
|
} from "../../redux/application/application.actions";
|
||||||
import { CreateRecentItem } from "../../utils/create-recent-item";
|
import { CreateRecentItem } from "../../utils/create-recent-item";
|
||||||
import ContractDetailPageComponent from "./contract-detail.page.component";
|
import ContractDetailPageComponent from "./contract-detail.page.component";
|
||||||
@@ -24,9 +25,14 @@ import NotFound from "../../components/not-found/not-found.component";
|
|||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function ContractDetailPageContainer({ setBreadcrumbs, addRecentItem }) {
|
export function ContractDetailPageContainer({
|
||||||
|
setBreadcrumbs,
|
||||||
|
addRecentItem,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [updateContract] = useMutation(UPDATE_CONTRACT);
|
const [updateContract] = useMutation(UPDATE_CONTRACT);
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
@@ -37,6 +43,7 @@ export function ContractDetailPageContainer({ setBreadcrumbs, addRecentItem }) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setSelectedHeader("contracts");
|
||||||
document.title = loading
|
document.title = loading
|
||||||
? t("titles.app")
|
? t("titles.app")
|
||||||
: error
|
: error
|
||||||
@@ -76,7 +83,16 @@ export function ContractDetailPageContainer({ setBreadcrumbs, addRecentItem }) {
|
|||||||
`/manage/courtesycars/contracts/${contractId}`
|
`/manage/courtesycars/contracts/${contractId}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}, [t, data, error, loading, setBreadcrumbs, addRecentItem, contractId]);
|
}, [
|
||||||
|
t,
|
||||||
|
data,
|
||||||
|
error,
|
||||||
|
loading,
|
||||||
|
setBreadcrumbs,
|
||||||
|
addRecentItem,
|
||||||
|
contractId,
|
||||||
|
setSelectedHeader,
|
||||||
|
]);
|
||||||
|
|
||||||
const handleFinish = async (values) => {
|
const handleFinish = async (values) => {
|
||||||
const result = await updateContract({
|
const result = await updateContract({
|
||||||
|
|||||||
@@ -4,7 +4,10 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import { QUERY_ACTIVE_CONTRACTS_PAGINATED } from "../../graphql/cccontracts.queries";
|
import { QUERY_ACTIVE_CONTRACTS_PAGINATED } from "../../graphql/cccontracts.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import ContractsPageComponent from "./contracts.page.component";
|
import ContractsPageComponent from "./contracts.page.component";
|
||||||
import queryString from "query-string";
|
import queryString from "query-string";
|
||||||
import { useLocation } from "react-router-dom";
|
import { useLocation } from "react-router-dom";
|
||||||
@@ -13,12 +16,12 @@ import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function ContractsPageContainer({ setBreadcrumbs }) {
|
export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { page, sortcolumn, sortorder, start, end } = searchParams;
|
const { page, sortcolumn, sortorder, start, end } = searchParams;
|
||||||
console.log("ContractsPageContainer -> searchParams", searchParams);
|
|
||||||
|
|
||||||
const { loading, error, data, refetch } = useQuery(
|
const { loading, error, data, refetch } = useQuery(
|
||||||
QUERY_ACTIVE_CONTRACTS_PAGINATED,
|
QUERY_ACTIVE_CONTRACTS_PAGINATED,
|
||||||
@@ -46,7 +49,7 @@ export function ContractsPageContainer({ setBreadcrumbs }) {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.contracts");
|
document.title = t("titles.contracts");
|
||||||
|
setSelectedHeader("contracts");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
||||||
{
|
{
|
||||||
@@ -54,7 +57,7 @@ export function ContractsPageContainer({ setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.contracts"),
|
label: t("titles.bc.contracts"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [setBreadcrumbs, t]);
|
}, [setBreadcrumbs, t, setSelectedHeader]);
|
||||||
|
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import { INSERT_NEW_COURTESY_CAR } from "../../graphql/courtesy-car.queries";
|
|||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import CourtesyCarCreateComponent from "./courtesy-car-create.page.component";
|
import CourtesyCarCreateComponent from "./courtesy-car-create.page.component";
|
||||||
import { useHistory } from "react-router-dom";
|
import { useHistory } from "react-router-dom";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -16,8 +19,13 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs }) {
|
export function CourtesyCarCreateContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [insertCourtesyCar] = useMutation(INSERT_NEW_COURTESY_CAR);
|
const [insertCourtesyCar] = useMutation(INSERT_NEW_COURTESY_CAR);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@@ -37,6 +45,7 @@ export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setSelectedHeader("courtesycarsall");
|
||||||
document.title = t("titles.courtesycars-create");
|
document.title = t("titles.courtesycars-create");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
||||||
@@ -45,12 +54,12 @@ export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.courtesycars-new"),
|
label: t("titles.bc.courtesycars-new"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="courtesycar:create">
|
<RbacWrapper action="courtesycar:create">
|
||||||
<Form form={form} autoComplete="new-password" onFinish={handleFinish}>
|
<Form form={form} autoComplete="new-password" onFinish={handleFinish}>
|
||||||
<CourtesyCarCreateComponent />
|
<CourtesyCarCreateComponent form={form} />
|
||||||
</Form>
|
</Form>
|
||||||
</RbacWrapper>
|
</RbacWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { QUERY_CC_BY_PK, UPDATE_CC } from "../../graphql/courtesy-car.queries";
|
|||||||
import {
|
import {
|
||||||
addRecentItem,
|
addRecentItem,
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
} from "../../redux/application/application.actions";
|
} from "../../redux/application/application.actions";
|
||||||
import { CreateRecentItem } from "../../utils/create-recent-item";
|
import { CreateRecentItem } from "../../utils/create-recent-item";
|
||||||
import CourtesyCarDetailPageComponent from "./courtesy-car-detail.page.component";
|
import CourtesyCarDetailPageComponent from "./courtesy-car-detail.page.component";
|
||||||
@@ -22,10 +23,12 @@ import { useLocation } from "react-router-dom";
|
|||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
export function CourtesyCarDetailPageContainer({
|
export function CourtesyCarDetailPageContainer({
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
addRecentItem,
|
addRecentItem,
|
||||||
|
setSelectedHeader,
|
||||||
}) {
|
}) {
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { page, sortcolumn, sortorder } = searchParams;
|
const { page, sortcolumn, sortorder } = searchParams;
|
||||||
@@ -53,6 +56,8 @@ export function CourtesyCarDetailPageContainer({
|
|||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setSelectedHeader("courtesycarsall");
|
||||||
|
|
||||||
document.title = loading
|
document.title = loading
|
||||||
? t("titles.app")
|
? t("titles.app")
|
||||||
: error
|
: error
|
||||||
@@ -89,7 +94,16 @@ export function CourtesyCarDetailPageContainer({
|
|||||||
`/manage/courtesycars/${ccId}`
|
`/manage/courtesycars/${ccId}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}, [t, data, error, loading, setBreadcrumbs, ccId, addRecentItem]);
|
}, [
|
||||||
|
t,
|
||||||
|
data,
|
||||||
|
error,
|
||||||
|
loading,
|
||||||
|
setBreadcrumbs,
|
||||||
|
ccId,
|
||||||
|
addRecentItem,
|
||||||
|
setSelectedHeader,
|
||||||
|
]);
|
||||||
|
|
||||||
const handleFinish = async (values) => {
|
const handleFinish = async (values) => {
|
||||||
setSaveLoading(true);
|
setSaveLoading(true);
|
||||||
|
|||||||
@@ -5,23 +5,31 @@ import { connect } from "react-redux";
|
|||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { QUERY_ALL_CC } from "../../graphql/courtesy-car.queries";
|
import { QUERY_ALL_CC } from "../../graphql/courtesy-car.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import CourtesyCarsPageComponent from "./courtesy-cars.page.component";
|
import CourtesyCarsPageComponent from "./courtesy-cars.page.component";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function CourtesyCarsPageContainer({ setBreadcrumbs }) {
|
export function CourtesyCarsPageContainer({
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { loading, error, data, refetch } = useQuery(QUERY_ALL_CC);
|
const { loading, error, data, refetch } = useQuery(QUERY_ALL_CC);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.courtesycars");
|
document.title = t("titles.courtesycars");
|
||||||
|
setSelectedHeader("courtesycarsall");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
{ link: "/manage/courtesycars", label: t("titles.bc.courtesycars") },
|
||||||
]);
|
]);
|
||||||
}, [setBreadcrumbs, t]);
|
}, [setBreadcrumbs, t, setSelectedHeader]);
|
||||||
|
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="courtesycar:list">
|
<RbacWrapper action="courtesycar:list">
|
||||||
|
|||||||
@@ -6,26 +6,31 @@ import { connect } from "react-redux";
|
|||||||
import { useLocation } from "react-router-dom";
|
import { useLocation } from "react-router-dom";
|
||||||
import InvoiceDetailEditContainer from "../../components/invoice-detail-edit/invoice-detail-edit.container";
|
import InvoiceDetailEditContainer from "../../components/invoice-detail-edit/invoice-detail-edit.container";
|
||||||
import { QUERY_ALL_INVOICES_PAGINATED } from "../../graphql/invoices.queries";
|
import { QUERY_ALL_INVOICES_PAGINATED } from "../../graphql/invoices.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import InvoicesPageComponent from "./invoices.page.component";
|
import InvoicesPageComponent from "./invoices.page.component";
|
||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function InvoicesPageContainer({ setBreadcrumbs }) {
|
export function InvoicesPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { page, sortcolumn, sortorder, search } = searchParams;
|
const { page, sortcolumn, sortorder, search } = searchParams;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.invoices-list");
|
document.title = t("titles.invoices-list");
|
||||||
|
setSelectedHeader("invoices");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/invoices", label: t("titles.bc.invoices-list") },
|
{ link: "/manage/invoices", label: t("titles.bc.invoices-list") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const { loading, error, data, refetch } = useQuery(
|
const { loading, error, data, refetch } = useQuery(
|
||||||
QUERY_ALL_INVOICES_PAGINATED,
|
QUERY_ALL_INVOICES_PAGINATED,
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import AlertComponent from "../../components/alert/alert.component";
|
import AlertComponent from "../../components/alert/alert.component";
|
||||||
import JobsListPaginated from "../../components/jobs-list-paginated/jobs-list-paginated.component";
|
import JobsListPaginated from "../../components/jobs-list-paginated/jobs-list-paginated.component";
|
||||||
import { QUERY_ALL_JOBS_PAGINATED } from "../../graphql/jobs.queries";
|
import { QUERY_ALL_JOBS_PAGINATED } from "../../graphql/jobs.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -17,9 +20,10 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function AllJobs({ setBreadcrumbs }) {
|
export function AllJobs({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { page, sortcolumn, sortorder, search } = searchParams;
|
const { page, sortcolumn, sortorder, search } = searchParams;
|
||||||
|
|
||||||
@@ -43,8 +47,9 @@ export function AllJobs({ setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobs-all");
|
document.title = t("titles.jobs-all");
|
||||||
|
setSelectedHeader("alljobs");
|
||||||
setBreadcrumbs([{ link: "/manage/jobs", label: t("titles.bc.jobs-all") }]);
|
setBreadcrumbs([{ link: "/manage/jobs", label: t("titles.bc.jobs-all") }]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -9,12 +9,19 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsAvailablePageContainer({ setBreadcrumbs }) {
|
export function JobsAvailablePageContainer({
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
|
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
@@ -22,10 +29,11 @@ export function JobsAvailablePageContainer({ setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobsavailable");
|
document.title = t("titles.jobsavailable");
|
||||||
|
setSelectedHeader("availablejobs");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/available", label: t("titles.bc.availablejobs") },
|
{ link: "/manage/available", label: t("titles.bc.availablejobs") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="jobs:available-list">
|
<RbacWrapper action="jobs:available-list">
|
||||||
|
|||||||
@@ -8,22 +8,27 @@ import LoadingSpinner from "../../components/loading-spinner/loading-spinner.com
|
|||||||
import NotFound from "../../components/not-found/not-found.component";
|
import NotFound from "../../components/not-found/not-found.component";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { QUERY_JOB_CLOSE_DETAILS } from "../../graphql/jobs.queries";
|
import { QUERY_JOB_CLOSE_DETAILS } from "../../graphql/jobs.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import JobsCloseComponent from "./jobs-close.component";
|
import JobsCloseComponent from "./jobs-close.component";
|
||||||
import { Result } from "antd";
|
import { Result } from "antd";
|
||||||
import JobCalculateTotals from "../../components/job-calculate-totals/job-calculate-totals.component";
|
import JobCalculateTotals from "../../components/job-calculate-totals/job-calculate-totals.component";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsCloseContainer({ setBreadcrumbs }) {
|
export function JobsCloseContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { jobId } = useParams();
|
const { jobId } = useParams();
|
||||||
const { loading, error, data } = useQuery(QUERY_JOB_CLOSE_DETAILS, {
|
const { loading, error, data } = useQuery(QUERY_JOB_CLOSE_DETAILS, {
|
||||||
variables: { id: jobId },
|
variables: { id: jobId },
|
||||||
});
|
});
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setSelectedHeader("activejobs");
|
||||||
document.title = t("titles.jobs-close", {
|
document.title = t("titles.jobs-close", {
|
||||||
number: data ? data.jobs_by_pk && data.jobs_by_pk.ro_number : null,
|
number: data ? data.jobs_by_pk && data.jobs_by_pk.ro_number : null,
|
||||||
});
|
});
|
||||||
@@ -44,7 +49,7 @@ export function JobsCloseContainer({ setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.jobs-close"),
|
label: t("titles.bc.jobs-close"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [setBreadcrumbs, t, jobId, data]);
|
}, [setBreadcrumbs, t, jobId, data, setSelectedHeader]);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ import { connect } from "react-redux";
|
|||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -17,8 +20,9 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
function JobsCreateContainer({ bodyshop, setBreadcrumbs }) {
|
function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const contextState = useState({
|
const contextState = useState({
|
||||||
vehicle: { new: false, search: "", selectedid: null, vehicleObj: null },
|
vehicle: { new: false, search: "", selectedid: null, vehicleObj: null },
|
||||||
@@ -46,6 +50,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobs-create");
|
document.title = t("titles.jobs-create");
|
||||||
|
setSelectedHeader("availablejobs");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/available", label: t("titles.bc.availablejobs") },
|
{ link: "/manage/available", label: t("titles.bc.availablejobs") },
|
||||||
{
|
{
|
||||||
@@ -53,7 +58,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.jobs-new"),
|
label: t("titles.bc.jobs-new"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const runInsertJob = (job) => {
|
const runInsertJob = (job) => {
|
||||||
insertJob({ variables: { job: job } })
|
insertJob({ variables: { job: job } })
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import AlertComponent from "../../components/alert/alert.component";
|
|||||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import { QUERY_DELIVER_CHECKLIST } from "../../graphql/bodyshop.queries";
|
import { QUERY_DELIVER_CHECKLIST } from "../../graphql/bodyshop.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import JobchecklistComponent from "../../components/job-checklist/job-checklist.component";
|
import JobchecklistComponent from "../../components/job-checklist/job-checklist.component";
|
||||||
|
|
||||||
@@ -18,9 +21,14 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsDeliverContainer({ bodyshop, setBreadcrumbs }) {
|
export function JobsDeliverContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { jobId } = useParams();
|
const { jobId } = useParams();
|
||||||
const { loading, error, data } = useQuery(QUERY_DELIVER_CHECKLIST, {
|
const { loading, error, data } = useQuery(QUERY_DELIVER_CHECKLIST, {
|
||||||
@@ -29,6 +37,7 @@ export function JobsDeliverContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobs-deliver");
|
document.title = t("titles.jobs-deliver");
|
||||||
|
setSelectedHeader("activejobs");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/jobs", label: t("titles.bc.jobs") },
|
{ link: "/manage/jobs", label: t("titles.bc.jobs") },
|
||||||
{
|
{
|
||||||
@@ -42,7 +51,7 @@ export function JobsDeliverContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.jobs-deliver"),
|
label: t("titles.bc.jobs-deliver"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs, jobId, data]);
|
}, [t, setBreadcrumbs, jobId, data, setSelectedHeader]);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import AlertComponent from "../../components/alert/alert.component";
|
|||||||
import JobChecklist from "../../components/job-checklist/job-checklist.component";
|
import JobChecklist from "../../components/job-checklist/job-checklist.component";
|
||||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||||
import { QUERY_INTAKE_CHECKLIST } from "../../graphql/bodyshop.queries";
|
import { QUERY_INTAKE_CHECKLIST } from "../../graphql/bodyshop.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
@@ -18,9 +21,14 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsIntakeContainer({ bodyshop, setBreadcrumbs }) {
|
export function JobsIntakeContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { jobId } = useParams();
|
const { jobId } = useParams();
|
||||||
|
|
||||||
@@ -30,6 +38,7 @@ export function JobsIntakeContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobs-intake");
|
document.title = t("titles.jobs-intake");
|
||||||
|
setSelectedHeader("activejobs");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/jobs", label: t("titles.bc.jobs") },
|
{ link: "/manage/jobs", label: t("titles.bc.jobs") },
|
||||||
{
|
{
|
||||||
@@ -45,7 +54,7 @@ export function JobsIntakeContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
label: t("titles.bc.jobs-intake"),
|
label: t("titles.bc.jobs-intake"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs, jobId, data]);
|
}, [t, setBreadcrumbs, jobId, data, setSelectedHeader]);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|||||||
@@ -3,22 +3,27 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import JobDetailCards from "../../components/job-detail-cards/job-detail-cards.component";
|
import JobDetailCards from "../../components/job-detail-cards/job-detail-cards.component";
|
||||||
import JobsList from "../../components/jobs-list/jobs-list.component";
|
import JobsList from "../../components/jobs-list/jobs-list.component";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function JobsPage({ setBreadcrumbs }) {
|
export function JobsPage({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.jobs");
|
document.title = t("titles.jobs");
|
||||||
|
setSelectedHeader("activejobs");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/jobs", label: t("titles.bc.jobs-active") },
|
{ link: "/manage/jobs", label: t("titles.bc.jobs-active") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="jobs:list-active">
|
<RbacWrapper action="jobs:list-active">
|
||||||
|
|||||||
@@ -1,20 +1,25 @@
|
|||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
import OwnersPageComponent from "./owners.page.component";
|
import OwnersPageComponent from "./owners.page.component";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function OwnersPageContainer({ setBreadcrumbs }) {
|
export function OwnersPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.owners");
|
document.title = t("titles.owners");
|
||||||
|
setSelectedHeader("owners");
|
||||||
setBreadcrumbs([{ link: "/manage/owners", label: t("titles.bc.owners") }]);
|
setBreadcrumbs([{ link: "/manage/owners", label: t("titles.bc.owners") }]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="owners:list">
|
<RbacWrapper action="owners:list">
|
||||||
|
|||||||
@@ -10,7 +10,10 @@ import AlertComponent from "../../components/alert/alert.component";
|
|||||||
import CsiResponseFormContainer from "../../components/csi-response-form/csi-response-form.container";
|
import CsiResponseFormContainer from "../../components/csi-response-form/csi-response-form.container";
|
||||||
import CsiResponseListPaginated from "../../components/csi-response-list-paginated/csi-response-list-paginated.component";
|
import CsiResponseListPaginated from "../../components/csi-response-list-paginated/csi-response-list-paginated.component";
|
||||||
import { QUERY_CSI_RESPONSE_PAGINATED } from "../../graphql/csi.queries";
|
import { QUERY_CSI_RESPONSE_PAGINATED } from "../../graphql/csi.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -19,9 +22,14 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function ShopCsiContainer({ bodyshop, setBreadcrumbs }) {
|
export function ShopCsiContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
@@ -49,6 +57,7 @@ export function ShopCsiContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.shop-csi");
|
document.title = t("titles.shop-csi");
|
||||||
|
setSelectedHeader("shop-csi");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/shop",
|
link: "/manage/shop",
|
||||||
@@ -56,7 +65,7 @@ export function ShopCsiContainer({ bodyshop, setBreadcrumbs }) {
|
|||||||
},
|
},
|
||||||
{ link: "/manage/shop/csi", label: t("titles.bc.shop-csi") },
|
{ link: "/manage/shop/csi", label: t("titles.bc.shop-csi") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs, bodyshop.shopname]);
|
}, [t, setBreadcrumbs, bodyshop.shopname, setSelectedHeader]);
|
||||||
|
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import ShopTemplateEditor from "../../components/shop-template-editor/shop-template-editor.container";
|
import ShopTemplateEditor from "../../components/shop-template-editor/shop-template-editor.container";
|
||||||
import ShopTemplatesListContainer from "../../components/shop-templates-list/shop-templates-list.container";
|
import ShopTemplatesListContainer from "../../components/shop-templates-list/shop-templates-list.container";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -14,13 +17,19 @@ const mapStateToProps = createStructuredSelector({
|
|||||||
});
|
});
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function ShopTemplatesContainer({ setBreadcrumbs, bodyshop }) {
|
export function ShopTemplatesContainer({
|
||||||
|
setBreadcrumbs,
|
||||||
|
bodyshop,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const drawerVisibility = useState(false);
|
const drawerVisibility = useState(false);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.shop-templates");
|
document.title = t("titles.shop-templates");
|
||||||
|
setSelectedHeader("shop-templates");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/shop",
|
link: "/manage/shop",
|
||||||
@@ -28,7 +37,7 @@ export function ShopTemplatesContainer({ setBreadcrumbs, bodyshop }) {
|
|||||||
},
|
},
|
||||||
{ link: "/manage/shop/templates", label: t("titles.bc.shop-templates") },
|
{ link: "/manage/shop/templates", label: t("titles.bc.shop-templates") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs, bodyshop.shopname]);
|
}, [t, setBreadcrumbs, bodyshop.shopname, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="shop:templates">
|
<RbacWrapper action="shop:templates">
|
||||||
|
|||||||
@@ -3,11 +3,38 @@ import { useTranslation } from "react-i18next";
|
|||||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||||
import ShopVendorPageComponent from "./shop-vendor.page.component";
|
import ShopVendorPageComponent from "./shop-vendor.page.component";
|
||||||
|
|
||||||
export default function ShopVendorPageContainer() {
|
import { connect } from "react-redux";
|
||||||
|
import { createStructuredSelector } from "reselect";
|
||||||
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
|
const mapStateToProps = createStructuredSelector({
|
||||||
|
bodyshop: selectBodyshop,
|
||||||
|
});
|
||||||
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
|
});
|
||||||
|
|
||||||
|
export function ShopVendorPageContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.shop_vendors");
|
document.title = t("titles.shop_vendors");
|
||||||
}, [t]);
|
setSelectedHeader("shop-vendors");
|
||||||
|
setBreadcrumbs([
|
||||||
|
{
|
||||||
|
link: "/manage/shop",
|
||||||
|
label: t("titles.bc.shop", { shopname: bodyshop.shopname }),
|
||||||
|
},
|
||||||
|
{ link: "/manage/shop/vendors", label: t("titles.bc.shop-vendors") },
|
||||||
|
]);
|
||||||
|
}, [t, bodyshop.shopname, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RbacWrapper action="shop:vendors">
|
<RbacWrapper action="shop:vendors">
|
||||||
@@ -15,3 +42,7 @@ export default function ShopVendorPageContainer() {
|
|||||||
</RbacWrapper>
|
</RbacWrapper>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
mapDispatchToProps
|
||||||
|
)(ShopVendorPageContainer);
|
||||||
|
|||||||
@@ -12,25 +12,34 @@ import TimeTicketsDatesSelector from "../../components/ticket-tickets-dates-sele
|
|||||||
import TimeTicketList from "../../components/time-ticket-list/time-ticket-list.component";
|
import TimeTicketList from "../../components/time-ticket-list/time-ticket-list.component";
|
||||||
import TimeTicketsSummary from "../../components/time-tickets-summary/time-tickets-summary.component";
|
import TimeTicketsSummary from "../../components/time-tickets-summary/time-tickets-summary.component";
|
||||||
import { QUERY_TIME_TICKETS_IN_RANGE } from "../../graphql/timetickets.queries";
|
import { QUERY_TIME_TICKETS_IN_RANGE } from "../../graphql/timetickets.queries";
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({});
|
const mapStateToProps = createStructuredSelector({});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function TimeTicketsContainer({ bodyshop, setBreadcrumbs }) {
|
export function TimeTicketsContainer({
|
||||||
|
bodyshop,
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.timetickets");
|
document.title = t("titles.timetickets");
|
||||||
|
setSelectedHeader("timetickets");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{
|
{
|
||||||
link: "/manage/timetickets",
|
link: "/manage/timetickets",
|
||||||
label: t("titles.bc.timetickets"),
|
label: t("titles.bc.timetickets"),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
const searchParams = queryString.parse(useLocation().search);
|
const searchParams = queryString.parse(useLocation().search);
|
||||||
const { start, end } = searchParams;
|
const { start, end } = searchParams;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import {
|
import {
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
addRecentItem,
|
addRecentItem,
|
||||||
|
setSelectedHeader,
|
||||||
} from "../../redux/application/application.actions";
|
} from "../../redux/application/application.actions";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { CreateRecentItem } from "../../utils/create-recent-item";
|
import { CreateRecentItem } from "../../utils/create-recent-item";
|
||||||
@@ -16,12 +17,14 @@ import NotFound from "../../components/not-found/not-found.component";
|
|||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
addRecentItem: (item) => dispatch(addRecentItem(item)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function VehicleDetailContainer({
|
export function VehicleDetailContainer({
|
||||||
match,
|
match,
|
||||||
setBreadcrumbs,
|
setBreadcrumbs,
|
||||||
addRecentItem,
|
addRecentItem,
|
||||||
|
setSelectedHeader,
|
||||||
}) {
|
}) {
|
||||||
const { vehId } = match.params;
|
const { vehId } = match.params;
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@@ -40,6 +43,8 @@ export function VehicleDetailContainer({
|
|||||||
} ${data.vehicles_by_pk && data.vehicles_by_pk.v_model_desc}`
|
} ${data.vehicles_by_pk && data.vehicles_by_pk.v_model_desc}`
|
||||||
: "",
|
: "",
|
||||||
});
|
});
|
||||||
|
setSelectedHeader("vehicles");
|
||||||
|
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/vehicles", label: t("titles.bc.vehicles") },
|
{ link: "/manage/vehicles", label: t("titles.bc.vehicles") },
|
||||||
{
|
{
|
||||||
@@ -62,7 +67,7 @@ export function VehicleDetailContainer({
|
|||||||
`/manage/vehicles/${vehId}`
|
`/manage/vehicles/${vehId}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}, [t, data, setBreadcrumbs, vehId, addRecentItem]);
|
}, [t, data, setBreadcrumbs, vehId, addRecentItem, setSelectedHeader]);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||||
|
|||||||
@@ -3,20 +3,25 @@ import VehiclesPageComponent from "./vehicles.page.component";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
|
|
||||||
import { setBreadcrumbs } from "../../redux/application/application.actions";
|
import {
|
||||||
|
setBreadcrumbs,
|
||||||
|
setSelectedHeader,
|
||||||
|
} from "../../redux/application/application.actions";
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)),
|
||||||
|
setSelectedHeader: (key) => dispatch(setSelectedHeader(key)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export function VehiclesPageContainer({ setBreadcrumbs }) {
|
export function VehiclesPageContainer({ setBreadcrumbs, setSelectedHeader }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = t("titles.vehicles");
|
document.title = t("titles.vehicles");
|
||||||
|
setSelectedHeader("vehicles");
|
||||||
setBreadcrumbs([
|
setBreadcrumbs([
|
||||||
{ link: "/manage/vehicles", label: t("titles.bc.vehicles") },
|
{ link: "/manage/vehicles", label: t("titles.bc.vehicles") },
|
||||||
]);
|
]);
|
||||||
}, [t, setBreadcrumbs]);
|
}, [t, setBreadcrumbs, setSelectedHeader]);
|
||||||
|
|
||||||
return <VehiclesPageComponent />;
|
return <VehiclesPageComponent />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,3 +33,8 @@ export const addRecentItem = (item) => ({
|
|||||||
type: ApplicationActionTypes.ADD_RECENT_ITEM,
|
type: ApplicationActionTypes.ADD_RECENT_ITEM,
|
||||||
payload: item,
|
payload: item,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setSelectedHeader = (key) => ({
|
||||||
|
type: ApplicationActionTypes.SET_SELECTED_HEADER,
|
||||||
|
payload: key,
|
||||||
|
});
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ const INITIAL_STATE = {
|
|||||||
loading: false,
|
loading: false,
|
||||||
breadcrumbs: [],
|
breadcrumbs: [],
|
||||||
recentItems: [],
|
recentItems: [],
|
||||||
|
selectedHeader: "home",
|
||||||
scheduleLoad: {
|
scheduleLoad: {
|
||||||
load: {},
|
load: {},
|
||||||
calculating: false,
|
calculating: false,
|
||||||
@@ -13,6 +14,11 @@ const INITIAL_STATE = {
|
|||||||
|
|
||||||
const applicationReducer = (state = INITIAL_STATE, action) => {
|
const applicationReducer = (state = INITIAL_STATE, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
case ApplicationActionTypes.SET_SELECTED_HEADER:
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
selectedHeader: action.payload,
|
||||||
|
};
|
||||||
case ApplicationActionTypes.ADD_RECENT_ITEM:
|
case ApplicationActionTypes.ADD_RECENT_ITEM:
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
|
|||||||
@@ -26,3 +26,8 @@ export const selectScheduleLoadCalculating = createSelector(
|
|||||||
[selectApplication],
|
[selectApplication],
|
||||||
(application) => application.scheduleLoad.calculating
|
(application) => application.scheduleLoad.calculating
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const selectSelectedHeader = createSelector(
|
||||||
|
[selectApplication],
|
||||||
|
(application) => application.selectedHeader
|
||||||
|
);
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ const ApplicationActionTypes = {
|
|||||||
CALCULATE_SCHEDULE_LOAD_SUCCESS: "CALCULATE_SCHEDULE_LOAD_SUCCESS",
|
CALCULATE_SCHEDULE_LOAD_SUCCESS: "CALCULATE_SCHEDULE_LOAD_SUCCESS",
|
||||||
CALCULATE_SCHEDULE_LOAD_FAILURE: "CALCULATE_SCHEDULE_LOAD_FAILURE",
|
CALCULATE_SCHEDULE_LOAD_FAILURE: "CALCULATE_SCHEDULE_LOAD_FAILURE",
|
||||||
ADD_RECENT_ITEM: "ADD_RECENT_ITEM",
|
ADD_RECENT_ITEM: "ADD_RECENT_ITEM",
|
||||||
|
SET_SELECTED_HEADER: "SET_SELECTED_HEADER",
|
||||||
};
|
};
|
||||||
export default ApplicationActionTypes;
|
export default ApplicationActionTypes;
|
||||||
|
|||||||
Reference in New Issue
Block a user