changes for the antd v5 components
This commit is contained in:
@@ -18,24 +18,39 @@ export function BreadCrumbs({ breadcrumbs, bodyshop }) {
|
|||||||
return (
|
return (
|
||||||
<Row className="breadcrumb-container">
|
<Row className="breadcrumb-container">
|
||||||
<Col xs={24} sm={24} md={16}>
|
<Col xs={24} sm={24} md={16}>
|
||||||
<Breadcrumb separator=">">
|
<Breadcrumb
|
||||||
<Breadcrumb.Item>
|
separator=">"
|
||||||
<Link to={`/manage`}>
|
items={[
|
||||||
<HomeFilled />{" "}
|
{
|
||||||
{(bodyshop && bodyshop.shopname && `(${bodyshop.shopname})`) ||
|
title: (
|
||||||
""}
|
<Link to={`/manage`}>
|
||||||
</Link>
|
<HomeFilled />{" "}
|
||||||
</Breadcrumb.Item>
|
{(bodyshop &&
|
||||||
{breadcrumbs.map((item) =>
|
bodyshop.shopname &&
|
||||||
item.link ? (
|
`(${bodyshop.shopname})`) ||
|
||||||
<Breadcrumb.Item key={item.label}>
|
""}
|
||||||
<Link to={item.link}>{item.label} </Link>
|
</Link>
|
||||||
</Breadcrumb.Item>
|
),
|
||||||
) : (
|
},
|
||||||
<Breadcrumb.Item key={item.label}>{item.label}</Breadcrumb.Item>
|
...breadcrumbs.map((item) =>
|
||||||
)
|
item.link
|
||||||
)}
|
? {
|
||||||
</Breadcrumb>
|
title: (
|
||||||
|
<Link key={item.label} to={item.link}>
|
||||||
|
{item.label}{" "}
|
||||||
|
</Link>
|
||||||
|
),
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
title: (
|
||||||
|
<React.Fragment key={item.label}>
|
||||||
|
{item.label}
|
||||||
|
</React.Fragment>
|
||||||
|
),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
]}
|
||||||
|
></Breadcrumb>
|
||||||
</Col>
|
</Col>
|
||||||
<Col xs={24} sm={24} md={8}>
|
<Col xs={24} sm={24} md={8}>
|
||||||
<GlobalSearch />
|
<GlobalSearch />
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import Icon, { SyncOutlined } from "@ant-design/icons";
|
import Icon, { SyncOutlined } from "@ant-design/icons";
|
||||||
import { gql, useMutation, useQuery } from "@apollo/client";
|
import { gql, useMutation, useQuery } from "@apollo/client";
|
||||||
import { PageHeader } from '@ant-design/pro-layout';
|
import { PageHeader } from "@ant-design/pro-layout";
|
||||||
import { Button, Dropdown, Menu, notification, Space } from "antd";
|
import { Button, Dropdown, Menu, notification, Space } from "antd";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
@@ -139,7 +139,7 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
|
|||||||
<Button onClick={() => refetch()}>
|
<Button onClick={() => refetch()}>
|
||||||
<SyncOutlined />
|
<SyncOutlined />
|
||||||
</Button>
|
</Button>
|
||||||
<Dropdown overlay={addComponentOverlay} trigger={["click"]}>
|
<Dropdown menu={addComponentOverlay} trigger={["click"]}>
|
||||||
<Button>{t("dashboard.actions.addcomponent")}</Button>
|
<Button>{t("dashboard.actions.addcomponent")}</Button>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
</Space>
|
</Space>
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ export function EmailOverlayComponent({
|
|||||||
label={
|
label={
|
||||||
<Space>
|
<Space>
|
||||||
{t("emails.fields.to")}
|
{t("emails.fields.to")}
|
||||||
<Dropdown overlay={menu}>
|
<Dropdown menu={menu}>
|
||||||
<a
|
<a
|
||||||
className="ant-dropdown-link"
|
className="ant-dropdown-link"
|
||||||
href=" #"
|
href=" #"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
useApolloClient,
|
useApolloClient,
|
||||||
useLazyQuery,
|
useLazyQuery,
|
||||||
useMutation,
|
useMutation,
|
||||||
useQuery
|
useQuery,
|
||||||
} from "@apollo/client";
|
} from "@apollo/client";
|
||||||
import { useTreatments } from "@splitsoftware/splitio-react";
|
import { useTreatments } from "@splitsoftware/splitio-react";
|
||||||
import { Col, notification, Row } from "antd";
|
import { Col, notification, Row } from "antd";
|
||||||
@@ -20,7 +20,7 @@ import { logImEXEvent } from "../../firebase/firebase.utils";
|
|||||||
import {
|
import {
|
||||||
DELETE_AVAILABLE_JOB,
|
DELETE_AVAILABLE_JOB,
|
||||||
QUERY_AVAILABLE_JOBS,
|
QUERY_AVAILABLE_JOBS,
|
||||||
QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK
|
QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK,
|
||||||
} from "../../graphql/available-jobs.queries";
|
} from "../../graphql/available-jobs.queries";
|
||||||
import { INSERT_NEW_JOB, UPDATE_JOB } from "../../graphql/jobs.queries";
|
import { INSERT_NEW_JOB, UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||||
import { INSERT_NEW_NOTE } from "../../graphql/notes.queries";
|
import { INSERT_NEW_NOTE } from "../../graphql/notes.queries";
|
||||||
@@ -28,7 +28,7 @@ import { SEARCH_VEHICLE_BY_VIN } from "../../graphql/vehicles.queries";
|
|||||||
import { insertAuditTrail } from "../../redux/application/application.actions";
|
import { insertAuditTrail } from "../../redux/application/application.actions";
|
||||||
import {
|
import {
|
||||||
selectBodyshop,
|
selectBodyshop,
|
||||||
selectCurrentUser
|
selectCurrentUser,
|
||||||
} from "../../redux/user/user.selectors";
|
} from "../../redux/user/user.selectors";
|
||||||
import confirmDialog from "../../utils/asyncConfirm";
|
import confirmDialog from "../../utils/asyncConfirm";
|
||||||
import AuditTrailMapping from "../../utils/AuditTrailMappings";
|
import AuditTrailMapping from "../../utils/AuditTrailMappings";
|
||||||
@@ -363,7 +363,7 @@ export function JobsAvailableContainer({
|
|||||||
owner={owner}
|
owner={owner}
|
||||||
selectedOwner={selectedOwner}
|
selectedOwner={selectedOwner}
|
||||||
setSelectedOwner={setSelectedOwner}
|
setSelectedOwner={setSelectedOwner}
|
||||||
visible={ownerModalVisible}
|
open={ownerModalVisible}
|
||||||
onOk={onOwnerFindModalOk}
|
onOk={onOwnerFindModalOk}
|
||||||
onCancel={onOwnerModalCancel}
|
onCancel={onOwnerModalCancel}
|
||||||
/>
|
/>
|
||||||
@@ -373,7 +373,7 @@ export function JobsAvailableContainer({
|
|||||||
selectedJob={selectedJob}
|
selectedJob={selectedJob}
|
||||||
setSelectedJob={setSelectedJob}
|
setSelectedJob={setSelectedJob}
|
||||||
importOptionsState={importOptionsState}
|
importOptionsState={importOptionsState}
|
||||||
visible={jobModalVisible}
|
open={jobModalVisible}
|
||||||
onOk={onJobFindModalOk}
|
onOk={onJobFindModalOk}
|
||||||
onCancel={onJobModalCancel}
|
onCancel={onJobModalCancel}
|
||||||
modalSearchState={modalSearchState}
|
modalSearchState={modalSearchState}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export default connect(
|
|||||||
variables: {
|
variables: {
|
||||||
statuses: bodyshop.md_ro_statuses.active_statuses || ["Open"],
|
statuses: bodyshop.md_ro_statuses.active_statuses || ["Open"],
|
||||||
},
|
},
|
||||||
skip: !modalProps.visible,
|
skip: !modalProps.open,
|
||||||
fetchPolicy: "network-only",
|
fetchPolicy: "network-only",
|
||||||
nextFetchPolicy: "network-only",
|
nextFetchPolicy: "network-only",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -30,13 +30,13 @@ export default function OwnerFindModalContainer({
|
|||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (modalProps.visible && owner) {
|
if (modalProps.open && owner) {
|
||||||
const s = OwnerNameDisplayFunction(owner, true);
|
const s = OwnerNameDisplayFunction(owner, true);
|
||||||
|
|
||||||
setSearchText(s.trim());
|
setSearchText(s.trim());
|
||||||
callSearchowners({ variables: { search: s.trim() } });
|
callSearchowners({ variables: { search: s.trim() } });
|
||||||
}
|
}
|
||||||
}, [callSearchowners, modalProps.visible, owner]);
|
}, [callSearchowners, modalProps.open, owner]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ export default function PartsOrderModalPriceChange({ form, field }) {
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<Dropdown overlay={menu} trigger="click">
|
<Dropdown menu={menu} trigger="click">
|
||||||
<Space>
|
<Space>
|
||||||
%
|
%
|
||||||
<DownOutlined />
|
<DownOutlined />
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export default function ProductionListDate({
|
|||||||
style={{
|
style={{
|
||||||
height: "19px",
|
height: "19px",
|
||||||
}}
|
}}
|
||||||
overlay={
|
menu={
|
||||||
<Card style={{ padding: "1rem" }} onClick={(e) => e.stopPropagation()}>
|
<Card style={{ padding: "1rem" }} onClick={(e) => e.stopPropagation()}>
|
||||||
<FormDatePicker
|
<FormDatePicker
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ export function ProductionLastContacted({ currentUser, record }) {
|
|||||||
style={{
|
style={{
|
||||||
height: "19px",
|
height: "19px",
|
||||||
}}
|
}}
|
||||||
overlay={
|
menu={
|
||||||
<Card
|
<Card
|
||||||
style={{ padding: "1rem" }}
|
style={{ padding: "1rem" }}
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ export default function ScoreboardEntryEdit({ entry }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Dropdown open={visible} overlay={popContent}>
|
<Dropdown open={visible} menu={popContent}>
|
||||||
<Button
|
<Button
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ export function ShopTemplateAddComponent({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dropdown overlay={menu}>
|
<Dropdown menu={menu}>
|
||||||
<span>
|
<span>
|
||||||
{t("bodyshop.actions.addtemplate")} <DownOutlined />
|
{t("bodyshop.actions.addtemplate")} <DownOutlined />
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export default function TimeTicketsDatesSelector() {
|
|||||||
end ? moment(end) : moment().endOf("week"),
|
end ? moment(end) : moment().endOf("week"),
|
||||||
]}
|
]}
|
||||||
format="MM/DD/YYYY"
|
format="MM/DD/YYYY"
|
||||||
ranges={DatePickerRanges}
|
presets={DatePickerRanges}
|
||||||
onCalendarChange={handleChange}
|
onCalendarChange={handleChange}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { PageHeader } from '@ant-design/pro-layout';
|
import { PageHeader } from "@ant-design/pro-layout";
|
||||||
import { Button, Result, Space, Steps } from "antd";
|
import { Button, Result, Space, Steps } from "antd";
|
||||||
import React, { useContext, useState } from "react";
|
import React, { useContext, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
@@ -19,16 +19,11 @@ export default function JobsCreateComponent({ form }) {
|
|||||||
{
|
{
|
||||||
title: t("jobs.labels.create.vehicleinfo"),
|
title: t("jobs.labels.create.vehicleinfo"),
|
||||||
content: <JobsCreateVehicleInfoContainer form={form} />,
|
content: <JobsCreateVehicleInfoContainer form={form} />,
|
||||||
validation:
|
|
||||||
!!state.vehicle.new ||
|
|
||||||
!!state.vehicle.selectedid ||
|
|
||||||
!!state.vehicle.none,
|
|
||||||
error: t("vehicles.errors.selectexistingornew"),
|
error: t("vehicles.errors.selectexistingornew"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t("jobs.labels.create.ownerinfo"),
|
title: t("jobs.labels.create.ownerinfo"),
|
||||||
content: <JobsCreateOwnerInfoContainer />,
|
content: <JobsCreateOwnerInfoContainer />,
|
||||||
validation: !!state.owner.new || !!state.owner.selectedid,
|
|
||||||
error: t("owners.errors.selectexistingornew"),
|
error: t("owners.errors.selectexistingornew"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -43,7 +38,6 @@ export default function JobsCreateComponent({ form }) {
|
|||||||
const prev = () => {
|
const prev = () => {
|
||||||
setPageIndex(pageIndex - 1);
|
setPageIndex(pageIndex - 1);
|
||||||
};
|
};
|
||||||
const { Step } = Steps;
|
|
||||||
|
|
||||||
const ProgressButtons = ({ top }) => {
|
const ProgressButtons = ({ top }) => {
|
||||||
return (
|
return (
|
||||||
@@ -80,31 +74,23 @@ export default function JobsCreateComponent({ form }) {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
{top && (
|
{top && (
|
||||||
<Steps current={pageIndex}>
|
<Steps
|
||||||
{steps.map((item, idx) => (
|
current={pageIndex}
|
||||||
<Step
|
onChange={(idx) => {
|
||||||
key={item.title}
|
form
|
||||||
title={item.title}
|
.validateFields()
|
||||||
style={{
|
.then((r) => {
|
||||||
cursor: "pointer",
|
if (steps[pageIndex].validation) {
|
||||||
fontWeight: idx === pageIndex && "bolder",
|
setErrorMessage(null);
|
||||||
}}
|
setPageIndex(idx);
|
||||||
onClick={() => {
|
} else {
|
||||||
form
|
setErrorMessage(steps[pageIndex].error);
|
||||||
.validateFields()
|
}
|
||||||
.then((r) => {
|
})
|
||||||
if (steps[pageIndex].validation) {
|
.catch((error) => console.log("error", error));
|
||||||
setErrorMessage(null);
|
}}
|
||||||
setPageIndex(idx);
|
items={steps}
|
||||||
} else {
|
/>
|
||||||
setErrorMessage(steps[pageIndex].error);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</Steps>
|
|
||||||
)}
|
)}
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -54,32 +54,29 @@ export function ScoreboardContainer({ setBreadcrumbs, setSelectedHeader }) {
|
|||||||
search: queryString.stringify(searchParams),
|
search: queryString.stringify(searchParams),
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
>
|
items={[
|
||||||
<Tabs.TabPane
|
{
|
||||||
tab={
|
key: "sb",
|
||||||
<span>
|
label: (
|
||||||
<Icon component={FaShieldAlt} />
|
<span>
|
||||||
{t("scoreboard.labels.jobs")}
|
<Icon component={FaShieldAlt} />
|
||||||
</span>
|
{t("scoreboard.labels.jobs")}
|
||||||
}
|
</span>
|
||||||
destroyInactiveTabPane
|
),
|
||||||
key="sb"
|
children: <ScoreboardDisplay />,
|
||||||
>
|
},
|
||||||
<ScoreboardDisplay />
|
{
|
||||||
</Tabs.TabPane>
|
key: "tickets",
|
||||||
<Tabs.TabPane
|
label: (
|
||||||
tab={
|
<span>
|
||||||
<span>
|
<FieldTimeOutlined />
|
||||||
<FieldTimeOutlined />
|
{t("scoreboard.labels.timetickets")}
|
||||||
{t("scoreboard.labels.timetickets")}
|
</span>
|
||||||
</span>
|
),
|
||||||
}
|
children: <ScoreboardTimeTickets />,
|
||||||
destroyInactiveTabPane
|
},
|
||||||
key="tickets"
|
]}
|
||||||
>
|
></Tabs>
|
||||||
<ScoreboardTimeTickets />
|
|
||||||
</Tabs.TabPane>
|
|
||||||
</Tabs>
|
|
||||||
</RbacWrapper>
|
</RbacWrapper>
|
||||||
</FeatureWrapper>
|
</FeatureWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user