Added tech routing paths and basic structure of landing page + sign in + reducers BOD-95

This commit is contained in:
Patrick Fic
2020-06-29 13:39:17 -07:00
parent 0009f7d3bb
commit 2edfadce3a
24 changed files with 662 additions and 24 deletions

View File

@@ -0,0 +1,70 @@
import { BackTop, Layout } from "antd";
import React, { lazy, Suspense, useEffect } from "react";
import { useTranslation } from "react-i18next";
import { Route, Switch } from "react-router-dom";
import ErrorBoundary from "../../components/error-boundary/error-boundary.component";
import FcmNotification from "../../components/fcm-notification/fcm-notification.component";
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
import TechHeader from "../../components/tech-header/tech-header.component";
import TechSider from "../../components/tech-sider/tech-sider.component";
import "./tech.page.styles.scss";
const ManageRootPage = lazy(() =>
import("../manage-root/manage-root.page.container")
);
const JobsPage = lazy(() => import("../jobs/jobs.page"));
const TimeTicketModalContainer = lazy(() =>
import("../../components/time-ticket-modal/time-ticket-modal.container")
);
const PrintCenterModalContainer = lazy(() =>
import("../../components/print-center-modal/print-center-modal.container")
);
const TechLogin = lazy(() =>
import("../../components/tech-login/tech-login.component")
);
const { Content } = Layout;
export default function TechPage({ match }) {
const { t } = useTranslation();
useEffect(() => {
document.title = t("titles.app");
}, [t]);
return (
<Layout className='tech-layout-container'>
<TechSider />
<Layout>
<TechHeader />
<Content className='tech-content-container'>
<FcmNotification />
<ErrorBoundary>
<Suspense
fallback={
<LoadingSpinner message={t("general.labels.loadingapp")} />
}>
<TimeTicketModalContainer />
<PrintCenterModalContainer />
<Switch>
<Route
exact
path={`${match.path}`}
component={ManageRootPage}
/>
<Route
exact
path={`${match.path}/login`}
component={TechLogin}
/>
</Switch>
</Suspense>
</ErrorBoundary>
<BackTop />
</Content>
</Layout>
</Layout>
);
}

View File

@@ -0,0 +1,30 @@
import { useQuery } from "@apollo/react-hooks";
import React, { useEffect } from "react";
import { connect } from "react-redux";
import AlertComponent from "../../components/alert/alert.component";
import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries";
import { setBodyshop } from "../../redux/user/user.actions";
import TechPage from "./tech.page.component";
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
import { useTranslation } from "react-i18next";
const mapDispatchToProps = (dispatch) => ({
setBodyshop: (bs) => dispatch(setBodyshop(bs)),
});
export function TechPageContainer({ setBodyshop, match }) {
const { loading, error, data } = useQuery(QUERY_BODYSHOP, {
fetchPolicy: "network-only",
});
const { t } = useTranslation();
useEffect(() => {
if (data) setBodyshop(data.bodyshops[0]);
}, [data, setBodyshop]);
if (loading)
return <LoadingSpinner message={t("general.labels.loadingshop")} />;
if (error) return <AlertComponent message={error.message} type='error' />;
return <TechPage match={match} />;
}
export default connect(null, mapDispatchToProps)(TechPageContainer);

View File

@@ -0,0 +1,9 @@
.tech-content-container {
overflow-y: auto;
padding: 1rem;
background: #fff;
}
.tech-layout-container {
height: 100vh;
}