update crm and create new customer
parent
831fa8e0ab
commit
4746e3e892
File diff suppressed because it is too large
Load Diff
|
@ -4,6 +4,7 @@
|
|||
"private": true,
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^5.0.1",
|
||||
"@mdxeditor/editor": "^1.13.2",
|
||||
"@testing-library/jest-dom": "^5.16.5",
|
||||
"@testing-library/react": "^13.4.0",
|
||||
"@testing-library/user-event": "^13.5.0",
|
||||
|
|
|
@ -277,6 +277,7 @@
|
|||
"notes": "Notes"
|
||||
},
|
||||
"buttonNew": "New",
|
||||
"buttonUndo": "Undo",
|
||||
"tabs": {
|
||||
"dealInfo": "Deal Info",
|
||||
"activities": "Activities",
|
||||
|
|
|
@ -67,3 +67,7 @@
|
|||
content: unset;
|
||||
}
|
||||
}
|
||||
|
||||
.mdx-editor {
|
||||
background: #f4f5f4;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { Route, Routes } from "react-router-dom";
|
||||
import { Constants, hasOnePermission, hasPermission } from "../../utils";
|
||||
import { useAppContext } from "../../Contexts/AppContext";
|
||||
import { Suspense, lazy } from "react";
|
||||
import { Spin } from "antd";
|
||||
import { lazy } from "react";
|
||||
import { MySupsenseFallback } from "../MySupsenseFallback";
|
||||
|
||||
// Lazy-loaded components
|
||||
const Dashboard = lazy(() => import("../../Pages/Dashboard"));
|
||||
|
@ -25,30 +25,6 @@ const Consoles = lazy(() => import("../../Pages/Consoles"));
|
|||
const RoboticsRobots = lazy(() => import("../../Pages/Robotics/Robots"));
|
||||
const Crm = lazy(() => import("../../Pages/Crm"));
|
||||
|
||||
function SuspenseFallback({ children }) {
|
||||
return (
|
||||
<Suspense
|
||||
fallback={
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
flexDirection: "row",
|
||||
justifyContent: "center",
|
||||
alignContent: "center",
|
||||
alignItems: "center",
|
||||
textAlign: "center",
|
||||
height: "98.3vh",
|
||||
}}
|
||||
>
|
||||
<Spin size="large" />
|
||||
</div>
|
||||
}
|
||||
>
|
||||
{children}
|
||||
</Suspense>
|
||||
);
|
||||
}
|
||||
|
||||
export default function AppRoutes({ userSession, setUserSession }) {
|
||||
const appContext = useAppContext();
|
||||
|
||||
|
@ -59,9 +35,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path="/"
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<Dashboard />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
|
@ -72,9 +48,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.EQUIPMENT_DOCUMENTATION}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<EquipmentDocumentationOverview />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -86,9 +62,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.EQUIPMENT_DOCUMENTATION_VIEW}:paramStockId`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<ViewEquipmentDocumentations />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -100,11 +76,11 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.EQUIPMENT_DOCUMENTATION_VIEW}:paramStockId/edit/:paramDocumentationId`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<ViewEquipmentDocumentations
|
||||
isEditEquipmentDocumentationModalOpen={true}
|
||||
/>
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -116,11 +92,11 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.EQUIPMENT_DOCUMENTATION_VIEW}:paramStockId/create`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<ViewEquipmentDocumentations
|
||||
isCreateEquipmentDocumentationModalOpen={true}
|
||||
/>
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -128,18 +104,18 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.GROUP_TASKS}:paramCategory`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<GroupTasks isGroupTasksViewModalOpen={false} />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.GROUP_TASKS}:paramCategory/view/:paramGroupTaskId`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<GroupTasks isGroupTasksViewModalOpen={true} />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
|
@ -150,9 +126,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.GROUP_TASKS_HISTORY}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<GroupTasksHistory />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -160,30 +136,30 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.SCANNERS}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<Scanners />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
<Route
|
||||
path={Constants.ROUTE_PATHS.USERS}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<AllUsers />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
<Route
|
||||
path={Constants.ROUTE_PATHS.USER_PROFILE}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<UserProfile
|
||||
userSession={userSession}
|
||||
setUserSession={setUserSession}
|
||||
/>
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
|
||||
|
@ -197,9 +173,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.ADMIN_AREA_ROLES}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<AdminAreaRoles />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -211,9 +187,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.ADMIN_AREA_LOGS}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<AdminAreaLogs />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -230,9 +206,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.ADMIN_AREA_MANAGE}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<AdminAreaManage />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -244,9 +220,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.CONSOLES}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<Consoles />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -258,9 +234,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={Constants.ROUTE_PATHS.ROBOTICS_ROBOTS}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<RoboticsRobots />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -274,9 +250,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path={`${Constants.ROUTE_PATHS.CRM}:paramType/:paramDealPhase`}
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<Crm />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
@ -284,9 +260,9 @@ export default function AppRoutes({ userSession, setUserSession }) {
|
|||
<Route
|
||||
path="*"
|
||||
element={
|
||||
<SuspenseFallback>
|
||||
<MySupsenseFallback>
|
||||
<PageNotFound />
|
||||
</SuspenseFallback>
|
||||
</MySupsenseFallback>
|
||||
}
|
||||
/>
|
||||
</Routes>
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
import { Spin } from "antd";
|
||||
import { Suspense } from "react";
|
||||
|
||||
export function MySupsenseFallback({ children }) {
|
||||
return (
|
||||
<Suspense
|
||||
fallback={
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
flexDirection: "row",
|
||||
justifyContent: "center",
|
||||
alignContent: "center",
|
||||
alignItems: "center",
|
||||
textAlign: "center",
|
||||
height: "98.3vh",
|
||||
}}
|
||||
>
|
||||
<Spin size="large" />
|
||||
</div>
|
||||
}
|
||||
>
|
||||
{children}
|
||||
</Suspense>
|
||||
);
|
||||
}
|
|
@ -8,6 +8,7 @@ const preview = {
|
|||
openDrawerCustomerId: null,
|
||||
currentDrawerCustomer: null,
|
||||
currentDrawerCustomerRef: null,
|
||||
changedDrawerCustomerFieldsRef: null,
|
||||
};
|
||||
|
||||
const CrmContext = createContext(preview);
|
||||
|
@ -24,8 +25,9 @@ export function CrmProvider({ children }) {
|
|||
const openDrawerCustomerId = useRef(null);
|
||||
// will be used to store the customer object that is currently being viewed in the drawer
|
||||
const [currentDrawerCustomer, setCurrentDrawerCustomer] = useState(null);
|
||||
// will be set on drawer open and used to check if the customer has changed
|
||||
// will be used to store the customer updated object that is currently being viewed in the drawer
|
||||
const currentDrawerCustomerRef = useRef(null);
|
||||
const changedDrawerCustomerFieldsRef = useRef([]);
|
||||
|
||||
return (
|
||||
<CrmContext.Provider
|
||||
|
@ -41,6 +43,7 @@ export function CrmProvider({ children }) {
|
|||
currentDrawerCustomer,
|
||||
setCurrentDrawerCustomer,
|
||||
currentDrawerCustomerRef,
|
||||
changedDrawerCustomerFieldsRef,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
|
|
@ -49,6 +49,7 @@ export const ReceivedMessagesCommands = {
|
|||
AdminAreaManageLogManagerServerConnectionAdded: 45,
|
||||
AdminAreaManageLogManagerServerConnectionRemoved: 46,
|
||||
CrmCustomerUpdated: 47,
|
||||
CrmCustomerCreated: 48,
|
||||
};
|
||||
|
||||
// commands sent to the backend server
|
||||
|
@ -1030,14 +1031,27 @@ export function handleWebSocketMessage(
|
|||
);
|
||||
break;
|
||||
case ReceivedMessagesCommands.CrmCustomerUpdated:
|
||||
console.log("CrmCustomerUpdated", body);
|
||||
|
||||
console.log("current", crmContext.currentDrawerCustomerRef.current);
|
||||
|
||||
// update drawer customer if it is the same customer
|
||||
if (crmContext.currentDrawerCustomerRef.current !== null) {
|
||||
if (crmContext.currentDrawerCustomerRef.current.Id === body.Id) {
|
||||
crmContext.setCurrentDrawerCustomer(body);
|
||||
for (const property in body) {
|
||||
if (
|
||||
crmContext.changedDrawerCustomerFieldsRef.current.includes(
|
||||
property
|
||||
)
|
||||
)
|
||||
continue;
|
||||
|
||||
if (body[property] !== undefined && property !== "Id") {
|
||||
crmContext.setCurrentDrawerCustomer((obj) => {
|
||||
const newObj = { ...obj };
|
||||
|
||||
newObj[property] = body[property];
|
||||
|
||||
return newObj;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1048,13 +1062,23 @@ export function handleWebSocketMessage(
|
|||
const arrIndex = arr.findIndex((customer) => customer.Id === body.Id);
|
||||
|
||||
if (arrIndex !== -1) {
|
||||
newArr[arrIndex] = body;
|
||||
// only update the changed properties and if the property exists
|
||||
for (const property in body) {
|
||||
if (body[property] !== undefined && property !== "Id") {
|
||||
newArr[arrIndex][property] = body[property];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return newArr;
|
||||
});
|
||||
|
||||
break;
|
||||
case ReceivedMessagesCommands.CrmCustomerCreated:
|
||||
console.log("test");
|
||||
|
||||
crmContext.setCustomers((arr) => [...arr, body]);
|
||||
break;
|
||||
|
||||
default:
|
||||
console.error("unknown command", cmd);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue