IO-233 Added vehicle search & selection on form.

This commit is contained in:
Patrick Fic
2021-08-23 10:40:10 -07:00
parent 8bfd0a1c16
commit 3ca6791939
8 changed files with 83 additions and 47 deletions

View File

@@ -4,7 +4,9 @@ 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 { useLazyQuery } from "@apollo/client";
import { SEARCH_DMS_VEHICLES } from "../../graphql/dms.queries";
import AlertComponent from "../alert/alert.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser //currentUser: selectCurrentUser
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
@@ -12,76 +14,75 @@ const mapStateToProps = createStructuredSelector({
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language)) //setUserLanguage: language => dispatch(setUserLanguage(language))
}); });
export default connect(mapStateToProps, mapDispatchToProps)(DmsCdkMakes); export default connect(mapStateToProps, mapDispatchToProps)(DmsCdkVehicles);
export function DmsCdkMakes({ bodyshop, form, socket }) { export function DmsCdkVehicles({ bodyshop, form, socket, job }) {
const [makesList, setMakesList] = useState([]);
const [searchText, setSearchText] = useState("");
const [loading, setLoading] = useState(false);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [selectedModel, setSelectedModel] = useState(null); const [selectedModel, setSelectedModel] = useState(null);
const { t } = useTranslation(); const { t } = useTranslation();
const [callSearch, { loading, error, data }] =
useLazyQuery(SEARCH_DMS_VEHICLES);
const columns = [ const columns = [
{ {
title: t("jobs.fields.dms.makeFullName"), title: t("jobs.fields.dms.make"),
dataIndex: "makeFullName", dataIndex: "make",
key: "makeFullName", key: "make",
}, },
{ {
title: t("jobs.fields.dms.modelFullName"), title: t("jobs.fields.dms.model"),
dataIndex: "modelFullName", dataIndex: "model",
key: "modelFullName", key: "model",
}, },
{ {
title: t("jobs.fields.dms.makeCode"), title: t("jobs.fields.dms.makecode"),
dataIndex: "makeCode", dataIndex: "makecode",
key: "makeCode", key: "makecode",
}, },
{ {
title: t("jobs.fields.dms.modelCode"), title: t("jobs.fields.dms.modelcode"),
dataIndex: "modelCode", dataIndex: "modelcode",
key: "modelCode", key: "modelcode",
}, },
]; ];
const filteredMakes = console.log(
searchText !== "" && searchText "🚀 ~ file: dms-cdk-makes.component.jsx ~ line 95 ~ selectedModel",
? makesList.filter( selectedModel
(make) => );
searchText
.split(" ")
.some((v) =>
make.makeFullName.toLowerCase().includes(v.toLowerCase())
) ||
searchText
.split(" ")
.some((v) =>
make.modelFullName.toLowerCase().includes(v.toLowerCase())
)
)
: makesList;
return ( return (
<div> <div>
<Modal width={"90%"} visible={visible} onCancel={() => setVisible(false)}> <Modal
width={"90%"}
visible={visible}
onCancel={() => setVisible(false)}
onOk={() => {
form.setFieldsValue({
dms_make: selectedModel.makecode,
dms_model: selectedModel.modelcode,
});
setVisible(false);
}}
>
{error && <AlertComponent error={error.message} />}
<Table <Table
title={() => ( title={() => (
<Input.Search <Input.Search
onSearch={(val) => setSearchText(val)} onSearch={(val) => callSearch({ variables: { search: val } })}
placeholder={t("general.labels.search")} placeholder={t("general.labels.search")}
/> />
)} )}
columns={columns} columns={columns}
loading={loading} loading={loading}
id="id" rowKey="id"
dataSource={filteredMakes} dataSource={data ? data.search_dms_vehicles : []}
onRow={(record) => { onRow={(record) => {
return { return {
onClick: setSelectedModel(record), onClick: () => setSelectedModel(record),
}; };
}} }}
rowSelection={{ rowSelection={{
onSelect: (record, selected, ...props) => { onSelect: (record) => {
setSelectedModel(record); setSelectedModel(record);
}, },
@@ -93,9 +94,14 @@ export function DmsCdkMakes({ bodyshop, form, socket }) {
<Button <Button
onClick={() => { onClick={() => {
setVisible(true); setVisible(true);
callSearch({
variables: {
search: job && job.v_model_desc && job.v_model_desc.substr(0, 3),
},
});
}} }}
> >
{t("jobs.actions.dms.selectmakemodel")} {t("jobs.actions.dms.getmakes")}
</Button> </Button>
</div> </div>
); );

View File

@@ -111,7 +111,7 @@ export function DmsPostForm({ bodyshop, socket, job }) {
}, },
]} ]}
> >
<Input /> <Input disabled />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="dms_model" name="dms_model"
@@ -122,9 +122,9 @@ export function DmsPostForm({ bodyshop, socket, job }) {
}, },
]} ]}
> >
<Input /> <Input disabled />
</Form.Item> </Form.Item>
<DmsCdkMakes form={form} socket={socket} /> <DmsCdkMakes form={form} socket={socket} job={job} />
<DmsCdkMakesRefetch /> <DmsCdkMakesRefetch />
</LayoutFormRow> </LayoutFormRow>

View File

@@ -0,0 +1,13 @@
import { gql } from "@apollo/client";
export const SEARCH_DMS_VEHICLES = gql`
query SEARCH_DMS_VEHICLES($search: String) {
search_dms_vehicles(args: { search: $search }) {
id
make
makecode
model
modelcode
}
}
`;

View File

@@ -1888,6 +1888,7 @@ export const QUERY_JOB_EXPORT_DMS = gql`
job_totals job_totals
kmin kmin
kmout kmout
v_model_desc
} }
} }
`; `;

View File

@@ -103,8 +103,6 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
if (!jobId || !bodyshop.cdk_dealerid) return <Result status="404" />; if (!jobId || !bodyshop.cdk_dealerid) return <Result status="404" />;
const dmsType = determineDmsType(bodyshop);
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" />;
@@ -112,6 +110,7 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
<div> <div>
<Row gutter={32}> <Row gutter={32}>
<Col span={18}> <Col span={18}>
{data && data.jobs_by_pk.ro_number}
<DmsAllocationsSummary socket={socket} jobId={jobId} /> <DmsAllocationsSummary socket={socket} jobId={jobId} />
<DmsPostForm <DmsPostForm
socket={socket} socket={socket}

View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1,13 @@
- args:
cascade: true
read_only: false
sql: CREATE OR REPLACE FUNCTION public.search_dms_vehicles(search text)RETURNS
SETOF dms_vehicles LANGUAGE plpgsql STABLE AS $FUNCTION$ BEGIN IF search=''
THEN RETURN query SELECT*FROM dms_vehicles;ELSE RETURN query SELECT*FROM dms_vehicles
WHERE make ILIKE'%'||search||'%' OR model ILIKE'%'||search||'%' ORDER BY make
ILIKE'%'||search||'%' OR NULL,model ILIKE'%'||search||'%' OR NULL;END IF;END$FUNCTION$;
type: run_sql
- args:
name: search_dms_vehicles
schema: public
type: track_function

View File

@@ -4642,6 +4642,9 @@ functions:
- function: - function:
schema: public schema: public
name: search_cccontracts name: search_cccontracts
- function:
schema: public
name: search_dms_vehicles
- function: - function:
schema: public schema: public
name: search_exportlog name: search_exportlog