Fixed searching on all jobs page BOD-81

This commit is contained in:
Patrick Fic
2020-05-29 09:35:35 -07:00
parent a98e007141
commit c1aaf8b284
19 changed files with 100 additions and 56 deletions

View File

@@ -9,14 +9,8 @@ import PhoneFormatter from "../../utils/PhoneFormatter";
import { alphaSort } from "../../utils/sorters";
import StartChatButton from "../chat-open-button/chat-open-button.component";
import { useHistory } from "react-router-dom";
export default function JobsList({
searchTextState,
refetch,
loading,
jobs,
total,
}) {
export default function JobsList({ refetch, loading, jobs, total }) {
const search = queryString.parse(useLocation().search);
const { page, sortcolumn, sortorder } = search;
const history = useHistory();
@@ -26,8 +20,6 @@ export default function JobsList({
});
const { t } = useTranslation();
const setSearchText = searchTextState[1];
const columns = [
{
title: t("jobs.fields.ro_number"),
@@ -195,8 +187,9 @@ export default function JobsList({
</Button>
<Input.Search
placeholder={t("general.labels.search")}
onChange={(e) => {
setSearchText(e.target.value);
onSearch={(value) => {
search.search = value;
history.push({ search: queryString.stringify(search) });
}}
enterButton
/>

View File

@@ -694,20 +694,21 @@ export const QUERY_ALL_JOB_FIELDS = gql`
export const QUERY_ALL_JOBS_PAGINATED = gql`
query QUERY_ALL_JOBS_PAGINATED(
$search: String
$offset: Int
$limit: Int
$order: [jobs_order_by!]!
) {
jobs(offset: $offset, limit: $limit, order_by: $order) {
search_jobs(
args: { search: $search }
offset: $offset
limit: $limit
order_by: $order
) {
ownr_fn
ownr_ln
ownr_ph1
ownr_ea
owner {
id
allow_text_message
preferred_contact
}
plate_no
plate_st
v_vin
@@ -743,7 +744,7 @@ export const QUERY_ALL_JOBS_PAGINATED = gql`
ded_amt
vehicleid
}
jobs_aggregate {
search_jobs_aggregate(args: { search: $search }) {
aggregate {
count(distinct: true)
}

View File

@@ -20,11 +20,12 @@ const mapDispatchToProps = (dispatch) => ({
});
export function AllJobs({ bodyshop, setBreadcrumbs }) {
const search = queryString.parse(useLocation().search);
const { page, sortcolumn, sortorder } = search;
const searchParams = queryString.parse(useLocation().search);
const { page, sortcolumn, sortorder, search } = searchParams;
const { loading, error, data, refetch } = useQuery(QUERY_ALL_JOBS_PAGINATED, {
variables: {
search: search || "",
offset: page ? (page - 1) * 25 : 0,
limit: 25,
order: [
@@ -45,48 +46,15 @@ export function AllJobs({ bodyshop, setBreadcrumbs }) {
setBreadcrumbs([{ link: "/manage/jobs", label: t("titles.bc.jobs-all") }]);
}, [t, setBreadcrumbs]);
const searchTextState = useState("");
const searchText = searchTextState[0];
if (error) return <AlertComponent message={error.message} type='error' />;
return (
<div>
<JobsListPaginated
searchTextState={searchTextState}
refetch={refetch}
loading={loading}
searchParams={search}
total={data ? data.jobs_aggregate.aggregate.count : 0}
jobs={
data
? searchText === ""
? data.jobs
: data.jobs.filter(
(j) =>
(j.ro_number || "")
.toString()
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.ownr_fn || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.ownr_ln || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.clm_no || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.plate_no || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.v_model_desc || "")
.toLowerCase()
.includes(searchText.toLowerCase()) ||
(j.v_make_desc || "")
.toLowerCase()
.includes(searchText.toLowerCase())
)
: null
}
searchParams={searchParams}
total={data ? data.search_jobs_aggregate.aggregate.count : 0}
jobs={data ? data.search_jobs : []}
/>
</div>
);

View File

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

View File

@@ -0,0 +1,8 @@
- args:
cascade: true
read_only: false
sql: "CREATE INDEX idx_job_search ON jobs USING GIN ((ownr_fn || ' ' || ownr_ln
|| ' ' || ownr_co_nm\r\n|| ' ' || ro_number \r\n|| ' ' || est_number \r\n||
' ' || clm_no \r\n|| ' ' || ownr_ph1 \r\n|| ' ' || ownr_ea \r\n|| ' ' || plate_no
)\r\n gin_trgm_ops);"
type: run_sql

View File

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

View File

@@ -0,0 +1,12 @@
- args:
cascade: true
read_only: false
sql: "CREATE\r\nOR REPLACE FUNCTION public.search_jobs(search text) RETURNS SETOF
jobs LANGUAGE sql STABLE AS $function$\r\nSELECT\r\n *\r\nFROM\r\n jobs\r\nWHERE\r\n
\ search <% (ownr_fn || ' ' || ownr_ln || ' ' || ownr_co_nm\r\n|| ' ' || ro_number
\r\n|| ' ' || est_number \r\n|| ' ' || clm_no \r\n|| ' ' || ownr_ph1 \r\n||
' ' || ownr_ea \r\n|| ' ' || plate_no)\r\nORDER BY\r\n similarity(\r\n search,\r\n
\ (ownr_fn || ' ' || ownr_ln || ' ' || ownr_co_nm\r\n|| ' ' || ro_number
\r\n|| ' ' || est_number \r\n|| ' ' || clm_no \r\n|| ' ' || ownr_ph1 \r\n||
' ' || ownr_ea \r\n|| ' ' || plate_no)\r\n ) DESC\r\n$function$;"
type: run_sql

View File

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

View File

@@ -0,0 +1,5 @@
- args:
cascade: true
read_only: false
sql: drop index idx_job_search;
type: run_sql

View File

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

View File

@@ -0,0 +1,12 @@
- args:
cascade: true
read_only: false
sql: "CREATE INDEX idx_jobs_ownrfn ON jobs\r\nUSING GIN (ownr_fn gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_ownrln ON jobs\r\nUSING GIN (ownr_ln gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_estnumber ON jobs\r\nUSING GIN (cast (est_number as text) gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_ronumber ON jobs\r\nUSING GIN (ro_number gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_clmno ON jobs\r\nUSING GIN (clm_no gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_plateno ON jobs\r\nUSING GIN (plate_no gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_vmakedesc ON jobs\r\nUSING GIN (v_make_desc gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_jobs_vmodeldesc ON jobs\r\nUSING GIN (v_model_desc gin_trgm_ops);"
type: run_sql

View File

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

View File

@@ -0,0 +1,10 @@
- args:
cascade: true
read_only: false
sql: "CREATE OR REPLACE FUNCTION public.search_jobs(search text)\r\n RETURNS SETOF
jobs\r\n LANGUAGE sql\r\n STABLE\r\nAS $function$\r\nSELECT\r\n *\r\nFROM\r\n
\ jobs\r\nWHERE\r\n search <% (ownr_fn) OR\r\n search <% (ownr_ln) OR\r\n
\ search <% (cast(est_number as text)) OR\r\n search <% (ro_number) OR\r\n
\ search <% (clm_no) OR\r\n search <% (plate_no) OR\r\n search <% (v_make_desc)
OR\r\n search <% (v_model_desc) \r\n\r\n$function$;"
type: run_sql

View File

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

View File

@@ -0,0 +1,11 @@
- args:
cascade: true
read_only: false
sql: "CREATE OR REPLACE FUNCTION public.search_jobs(search text)\r\n RETURNS SETOF
jobs\r\n LANGUAGE plpgsql\r\n STABLE\r\nAS $function$\r\n\r\nBEGIN\r\n if search
= '' then\r\n return query select * from jobs j ;\r\n else \r\n return
query SELECT\r\n *\r\nFROM\r\n jobs\r\nWHERE\r\n search <% (ownr_fn) OR\r\n
\ search <% (ownr_ln) OR\r\n search <% (cast(est_number as text)) OR\r\n search
<% (ro_number) OR\r\n search <% (clm_no) OR\r\n search <% (plate_no) OR\r\n
\ search <% (v_make_desc) OR\r\n search <% (v_model_desc) ;\r\n end if;\r\n\r\n\tEND\r\n\r\n\r\n$function$;"
type: run_sql

View File

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

View File

@@ -0,0 +1,7 @@
- args:
cascade: true
read_only: false
sql: "CREATE INDEX idx_owners_ownrfn ON owners\r\nUSING GIN (ownr_fn gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_owners_ownrln ON owners\r\nUSING GIN (ownr_ln gin_trgm_ops);\r\n\r\nCREATE
INDEX idx_owners_estnumber ON owners\r\nUSING GIN (ownr_co_nm gin_trgm_ops);"
type: run_sql

View File

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

View File

@@ -0,0 +1,9 @@
- args:
cascade: true
read_only: false
sql: "CREATE OR REPLACE FUNCTION public.search_owner(search text)\r\n RETURNS
SETOF owners\r\n LANGUAGE plpgsql\r\n STABLE\r\nAS $function$\r\n\r\nBEGIN\r\n
\ if search = '' then\r\n return query select * from owners ;\r\n else \r\n
\ return query SELECT\r\n *\r\nFROM\r\n owners\r\nWHERE\r\n search <% (ownr_fn)
OR\r\n search <% (ownr_ln) OR\r\n search <% (ownr_co_nm) ;\r\n end if;\r\n\r\n\tEND\r\n$function$;"
type: run_sql