Skip to content

Commit 5a0a2ce

Browse files
committed
review feedback
1 parent 1f10016 commit 5a0a2ce

File tree

6 files changed

+97
-21
lines changed

6 files changed

+97
-21
lines changed

.vscode/launch.json.example

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "lldb",
9+
"request": "attach",
10+
"name": "Attach to 'remote_server'",
11+
"program": "${workspaceFolder}/server/target/debug/remote_server",
12+
"cwd": "${workspaceFolder}/server"
13+
},
14+
{
15+
"type": "lldb",
16+
"request": "launch",
17+
"name": "Launch 'remote_server'",
18+
"program": "${workspaceFolder}/server/target/debug/remote_server",
19+
// "cargo": {
20+
// "args": ["build", "--bin=remote_server", "--package=server"],
21+
// "filter": {
22+
// "name": "remote_server",
23+
// "kind": "bin"
24+
// }
25+
// },
26+
"args": [],
27+
"cwd": "${workspaceFolder}/server"
28+
// "preLaunchTask": "cargo"
29+
},
30+
{
31+
"type": "lldb",
32+
"request": "launch",
33+
"name": "Debug unit tests in executable 'remote_server'",
34+
"cargo": {
35+
"args": ["test", "--no-run", "--bin=remote_server", "--package=server"],
36+
"filter": {
37+
"name": "remote_server",
38+
"kind": "bin"
39+
}
40+
},
41+
"args": [],
42+
"cwd": "${workspaceFolder}/server"
43+
},
44+
{
45+
"type": "lldb",
46+
"request": "launch",
47+
"name": "Debug executable 'report_builder'",
48+
"cargo": {
49+
"args": ["build", "--bin=report_builder", "--package=report_builder"],
50+
"filter": {
51+
"name": "report_builder",
52+
"kind": "bin"
53+
}
54+
},
55+
"args": [],
56+
"cwd": "${workspaceFolder}/server"
57+
},
58+
{
59+
"type": "lldb",
60+
"request": "launch",
61+
"name": "Debug unit tests in executable 'report_builder'",
62+
"cargo": {
63+
"args": ["test", "--no-run", "--bin=report_builder", "--package=report_builder"],
64+
"filter": {
65+
"name": "report_builder",
66+
"kind": "bin"
67+
}
68+
},
69+
"args": [],
70+
"cwd": "${workspaceFolder}/server"
71+
}
72+
]
73+
}

client/packages/common/src/hooks/useUrlQuery/useUrlQuery.ts

+17-17
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,19 @@ interface UrlQueryObject {
44
[key: string]: string | number | boolean;
55
}
66

7-
// here you can override the parsers for specific query params
8-
// an example is the filter, which must allow filtering by numeric codes
9-
// if this is parsed as numeric, the query param changes filter=0300 to filter=300
10-
// which then does not match against codes, as the filter is usually a 'startsWith'
11-
const DefaultParsers: Record<
12-
string,
13-
(value: string) => string | boolean | number
14-
> = {
15-
filter: (value: string) => value,
16-
};
17-
18-
export const useUrlQuery = () => {
7+
interface useUrlQueryProps {
8+
// an array of keys - the values of which should not be parsed before returning
9+
// by default the value of parameters will be coerced to a number if !isNaN
10+
// and to boolean if 'true' or 'false'. Specify keys here if you wish to opt out of this
11+
skipParse?: string[];
12+
}
13+
export const useUrlQuery = ({ skipParse = [] }: useUrlQueryProps) => {
1914
const [searchParams, setSearchParams] = useSearchParams();
2015

2116
const updateQuery = (values: UrlQueryObject, overwrite = false) => {
2217
const newQueryObject = overwrite
2318
? {}
24-
: { ...parseSearchParams(searchParams) };
19+
: { ...parseSearchParams(searchParams, skipParse) };
2520
Object.entries(values).forEach(([key, value]) => {
2621
if (!value) delete newQueryObject[key];
2722
else newQueryObject[key] = value;
@@ -34,15 +29,20 @@ export const useUrlQuery = () => {
3429
);
3530
};
3631

37-
return { urlQuery: parseSearchParams(searchParams), updateQuery };
32+
return {
33+
urlQuery: parseSearchParams(searchParams, skipParse),
34+
updateQuery,
35+
};
3836
};
3937

4038
// Coerces url params to appropriate type
41-
const parseSearchParams = (searchParams: URLSearchParams) =>
39+
const parseSearchParams = (
40+
searchParams: URLSearchParams,
41+
skipParse: string[]
42+
) =>
4243
Object.fromEntries(
4344
Array.from(searchParams.entries()).map(([key, value]) => {
44-
const parser = DefaultParsers[key]; // written out longhand to avoid TS complaint
45-
if (parser) return [key, parser(value)];
45+
if (skipParse.includes(key)) return [key, value];
4646
if (!isNaN(Number(value))) return [key, Number(value)];
4747
if (value === 'true') return [key, true];
4848
if (value === 'false') return [key, false];

client/packages/common/src/hooks/useUrlQuery/useUrlQueryParams.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ export const useUrlQueryParams = ({
1919
initialSortKey,
2020
filterCondition = 'like',
2121
}: UrlQueryParams = {}) => {
22-
const { urlQuery, updateQuery } = useUrlQuery();
22+
// do not coerce the filter parameter if the user enters a numeric value
23+
// if this is parsed as numeric, the query param changes filter=0300 to filter=300
24+
// which then does not match against codes, as the filter is usually a 'startsWith'
25+
const { urlQuery, updateQuery } = useUrlQuery({ skipParse: ['filter'] });
2326

2427
useEffect(() => {
2528
if (!initialSortKey) return;

client/packages/requisitions/src/RequestRequisition/api/hooks/line/useRequestLines.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useHideOverStocked } from '../index';
55
import { useRequestFields } from '../document/useRequestFields';
66

77
const useItemFilter = () => {
8-
const { urlQuery, updateQuery } = useUrlQuery();
8+
const { urlQuery, updateQuery } = useUrlQuery({});
99
return {
1010
itemFilter: urlQuery.itemName ?? '',
1111
setItemFilter: (itemFilter: string) =>

client/packages/requisitions/src/ResponseRequisition/api/hooks/line/useResponseLines.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ interface UseResponseLinesController
2020
}
2121

2222
const useItemFilter = () => {
23-
const { urlQuery, updateQuery } = useUrlQuery();
23+
const { urlQuery, updateQuery } = useUrlQuery({});
2424
return {
2525
itemFilter: urlQuery.itemName ?? '',
2626
setItemFilter: (itemFilter: string) =>

client/packages/system/src/Stock/ListView/ListView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { useStock } from '../api';
1616
import { StockRow } from '../types';
1717

1818
const StockListComponent: FC = () => {
19-
const { urlQuery, updateQuery } = useUrlQuery();
19+
const { urlQuery, updateQuery } = useUrlQuery({ skipParse: ['filter'] });
2020
const {
2121
updatePaginationQuery,
2222
updateSortQuery,

0 commit comments

Comments
 (0)