diff --git a/client/src/components/jobs-list-paginated/jobs-list-paginated.component.jsx b/client/src/components/jobs-list-paginated/jobs-list-paginated.component.jsx index 95d048b36..b0e809ffb 100644 --- a/client/src/components/jobs-list-paginated/jobs-list-paginated.component.jsx +++ b/client/src/components/jobs-list-paginated/jobs-list-paginated.component.jsx @@ -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({ { - setSearchText(e.target.value); + onSearch={(value) => { + search.search = value; + history.push({ search: queryString.stringify(search) }); }} enterButton /> diff --git a/client/src/graphql/jobs.queries.js b/client/src/graphql/jobs.queries.js index fcd7ed13c..53a71f187 100644 --- a/client/src/graphql/jobs.queries.js +++ b/client/src/graphql/jobs.queries.js @@ -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) } diff --git a/client/src/pages/jobs-all/jobs-all.container.jsx b/client/src/pages/jobs-all/jobs-all.container.jsx index fece00f3b..2cd772d4e 100644 --- a/client/src/pages/jobs-all/jobs-all.container.jsx +++ b/client/src/pages/jobs-all/jobs-all.container.jsx @@ -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 ; return (
- (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 : []} />
); diff --git a/hasura/migrations/1590765528126_run_sql_migration/down.yaml b/hasura/migrations/1590765528126_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590765528126_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590765528126_run_sql_migration/up.yaml b/hasura/migrations/1590765528126_run_sql_migration/up.yaml new file mode 100644 index 000000000..8929a2bce --- /dev/null +++ b/hasura/migrations/1590765528126_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590765808875_run_sql_migration/down.yaml b/hasura/migrations/1590765808875_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590765808875_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590765808875_run_sql_migration/up.yaml b/hasura/migrations/1590765808875_run_sql_migration/up.yaml new file mode 100644 index 000000000..10e83981e --- /dev/null +++ b/hasura/migrations/1590765808875_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590766570195_run_sql_migration/down.yaml b/hasura/migrations/1590766570195_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590766570195_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590766570195_run_sql_migration/up.yaml b/hasura/migrations/1590766570195_run_sql_migration/up.yaml new file mode 100644 index 000000000..d4bc49864 --- /dev/null +++ b/hasura/migrations/1590766570195_run_sql_migration/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: true + read_only: false + sql: drop index idx_job_search; + type: run_sql diff --git a/hasura/migrations/1590766913775_run_sql_migration/down.yaml b/hasura/migrations/1590766913775_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590766913775_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590766913775_run_sql_migration/up.yaml b/hasura/migrations/1590766913775_run_sql_migration/up.yaml new file mode 100644 index 000000000..cb3cc4253 --- /dev/null +++ b/hasura/migrations/1590766913775_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590767016519_run_sql_migration/down.yaml b/hasura/migrations/1590767016519_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590767016519_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590767016519_run_sql_migration/up.yaml b/hasura/migrations/1590767016519_run_sql_migration/up.yaml new file mode 100644 index 000000000..d51c130c6 --- /dev/null +++ b/hasura/migrations/1590767016519_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590768879487_run_sql_migration/down.yaml b/hasura/migrations/1590768879487_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590768879487_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590768879487_run_sql_migration/up.yaml b/hasura/migrations/1590768879487_run_sql_migration/up.yaml new file mode 100644 index 000000000..b65680f48 --- /dev/null +++ b/hasura/migrations/1590768879487_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590769637626_run_sql_migration/down.yaml b/hasura/migrations/1590769637626_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590769637626_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590769637626_run_sql_migration/up.yaml b/hasura/migrations/1590769637626_run_sql_migration/up.yaml new file mode 100644 index 000000000..a5db35a75 --- /dev/null +++ b/hasura/migrations/1590769637626_run_sql_migration/up.yaml @@ -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 diff --git a/hasura/migrations/1590769674755_run_sql_migration/down.yaml b/hasura/migrations/1590769674755_run_sql_migration/down.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/hasura/migrations/1590769674755_run_sql_migration/down.yaml @@ -0,0 +1 @@ +[] diff --git a/hasura/migrations/1590769674755_run_sql_migration/up.yaml b/hasura/migrations/1590769674755_run_sql_migration/up.yaml new file mode 100644 index 000000000..044fe69ee --- /dev/null +++ b/hasura/migrations/1590769674755_run_sql_migration/up.yaml @@ -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