Merge branch 'feature/IO-2776-cdk-fortellis' into feature/Reynolds-and-Reynolds-DMS-API-Integration

This commit is contained in:
Dave
2025-09-25 12:08:05 -04:00
82 changed files with 1749 additions and 1077 deletions

View File

@@ -18,6 +18,7 @@ import { pageLimit } from "../../utils/config";
import { alphaSort, dateSort } from "../../utils/sorters";
import useLocalStorage from "../../utils/useLocalStorage";
import { QUERY_ALL_VENDORS } from "../../graphql/vendors.queries";
import { logImEXEvent } from "../../firebase/firebase.utils";
const mapDispatchToProps = (dispatch) => ({
setBillEnterContext: (context) => dispatch(setModalContext({ context: context, modal: "billEnter" }))
@@ -185,6 +186,7 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte
search.sortorder = sorter.order;
}
history({ search: queryString.stringify(search) });
logImEXEvent("bills_list_sort_filter", { pagination, filters, sorter });
};
useEffect(() => {
@@ -207,6 +209,7 @@ export function BillsListPage({ loading, data, refetch, total, setBillEnterConte
search: value || search.search,
index: "bills"
});
logImEXEvent("bills_search", { search: value || search.search, results: searchData?.data?.hits?.hits?.length });
setOpenSearchResults(searchData.data.hits.hits.map((s) => s._source));
} catch (error) {
console.log("Error while fetching search results", error);

View File

@@ -15,6 +15,7 @@ import InstanceRenderManager from "../../utils/instanceRenderMgr";
import ContractCreatePageComponent from "./contract-create.page.component";
import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
import { logImEXEvent } from "../../firebase/firebase.utils.js";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
@@ -57,6 +58,7 @@ export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs, setSelec
if (!result.errors) {
//Update the courtesy car to have the damage.
logImEXEvent("courtesy_car_contract_created", {});
notification["success"]({
message: t("contracts.successes.saved")
});

View File

@@ -14,7 +14,7 @@ import InstanceRenderManager from "../../utils/instanceRenderMgr";
import JobsCreateComponent from "./jobs-create.component";
import JobCreateContext from "./jobs-create.context";
import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
import { logImEXEvent } from "../../firebase/firebase.utils";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
@@ -70,6 +70,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
label: t("titles.bc.jobs-new")
}
]);
logImEXEvent("manual_job_create_start", {});
}, [t, setBreadcrumbs, setSelectedHeader]);
const runInsertJob = (job) => {
@@ -81,6 +82,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
error: null,
newJobId: resp.data.insert_jobs.returning[0].id
});
logImEXEvent("manual_job_create_completed", {});
})
.catch((error) => {
notification["error"]({

View File

@@ -20,7 +20,12 @@ import LoadingSpinner from "../../components/loading-spinner/loading-spinner.com
import PartnerPingComponent from "../../components/partner-ping/partner-ping.component";
import ShopSubStatusComponent from "../../components/shop-sub-status/shop-sub-status.component";
import UpdateAlert from "../../components/update-alert/update-alert.component";
import { selectBodyshop, selectInstanceConflict, selectPartsManagementOnly } from "../../redux/user/user.selectors";
import {
selectBodyshop,
selectCurrentUser,
selectInstanceConflict,
selectPartsManagementOnly
} from "../../redux/user/user.selectors";
import InstanceRenderManager from "../../utils/instanceRenderMgr.js";
import useAlertsNotifications from "../../hooks/useAlertsNotifications.jsx";
import { selectDarkMode } from "../../redux/application/application.selectors.js";
@@ -109,10 +114,11 @@ const mapStateToProps = createStructuredSelector({
conflict: selectInstanceConflict,
bodyshop: selectBodyshop,
partsManagementOnly: selectPartsManagementOnly,
isDarkMode: selectDarkMode
isDarkMode: selectDarkMode,
currentUser: selectCurrentUser
});
export function Manage({ conflict, bodyshop, partsManagementOnly, isDarkMode }) {
export function Manage({ conflict, bodyshop, partsManagementOnly, isDarkMode, currentUser }) {
const { t } = useTranslation();
const [chatVisible] = useState(false);
const didMount = useRef(false);
@@ -588,7 +594,7 @@ export function Manage({ conflict, bodyshop, partsManagementOnly, isDarkMode })
return (
<>
<ChatAffixContainer bodyshop={bodyshop} chatVisible={chatVisible} />
<ChatAffixContainer bodyshop={bodyshop} currentUser={currentUser} chatVisible={chatVisible} />
<Layout style={{ minHeight: "100vh" }} className="layout-container">
<UpdateAlert />
<HeaderContainer />