Skip to content

Commit 46d3db1

Browse files
authored
Merge pull request #90 from weng-lab/search-fixes
Hide cached searches Added iCRE flag option
2 parents 2792403 + cb717bf commit 46d3db1

File tree

5 files changed

+198
-179
lines changed

5 files changed

+198
-179
lines changed

src/components/Autocomplete/Autocomplete.tsx

+58-40
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ import {
1717
} from "@mui/material";
1818
import { Autocomplete } from "@mui/material";
1919
import { GenomeSearchProps, Result } from "./types";
20-
import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-query";
20+
import {
21+
QueryClient,
22+
QueryClientProvider,
23+
useQuery,
24+
} from "@tanstack/react-query";
2125

2226
/**
2327
* An autocomplete search component for genomic landmarks such as genes, SNPs, ICRs, and CCRs.
@@ -31,6 +35,7 @@ import { QueryClient, QueryClientProvider, useQuery } from "@tanstack/react-quer
3135
const Search: React.FC<GenomeSearchProps> = ({
3236
queries,
3337
assembly,
38+
showiCREFlag,
3439
geneLimit,
3540
snpLimit,
3641
icreLimit,
@@ -43,13 +48,6 @@ const Search: React.FC<GenomeSearchProps> = ({
4348
slotProps,
4449
...autocompleteProps
4550
}) => {
46-
// Boolean flags for each query
47-
const searchGene = queries.includes("Gene");
48-
const searchSnp = queries.includes("SNP");
49-
const searchICRE = queries.includes("iCRE");
50-
const searchCCRE = queries.includes("cCRE");
51-
const searchCoordinate = queries.includes("Coordinate");
52-
5351
// State variables
5452
const [inputValue, setInputValue] = useState("");
5553
const [selection, setSelection] = useState<Result>({} as Result);
@@ -58,6 +56,12 @@ const Search: React.FC<GenomeSearchProps> = ({
5856
);
5957
const [isLoading, setIsLoading] = useState(false);
6058

59+
const searchGene = queries.includes("Gene");
60+
const searchSnp = queries.includes("SNP");
61+
const searchICRE = queries.includes("iCRE");
62+
const searchCCRE = queries.includes("cCRE");
63+
const searchCoordinate = queries.includes("Coordinate");
64+
6165
const {
6266
data: icreData,
6367
refetch: refetchICREs,
@@ -74,7 +78,7 @@ const Search: React.FC<GenomeSearchProps> = ({
7478
isFetching: ccreFetching,
7579
} = useQuery({
7680
queryKey: ["ccres", inputValue],
77-
queryFn: () => getCCREs(inputValue, assembly, ccreLimit || 3),
81+
queryFn: () => getCCREs(inputValue, assembly, ccreLimit || 3, showiCREFlag || false),
7882
enabled: false,
7983
});
8084

@@ -130,31 +134,44 @@ const Search: React.FC<GenomeSearchProps> = ({
130134
useEffect(() => {
131135
if (isLoading) return;
132136
const resultsList = [];
133-
if (geneData) {
137+
if (geneData && searchGene) {
134138
resultsList.push(...geneResultList(geneData.data.gene, geneLimit || 3));
135139
}
136-
if (icreData && inputValue.toLowerCase().startsWith("eh")) {
140+
if (icreData && searchICRE && inputValue.toLowerCase().startsWith("eh")) {
137141
resultsList.push(
138142
...icreResultList(icreData.data.iCREQuery, icreLimit || 3)
139143
);
140144
}
141-
if (ccreData && inputValue.toLowerCase().startsWith("eh")) {
145+
if (ccreData && searchCCRE && inputValue.toLowerCase().startsWith("eh")) {
146+
console.log(ccreData.data.cCREAutocompleteQuery)
142147
resultsList.push(
143-
...ccreResultList(ccreData.data.cCREQuery, ccreLimit || 3)
148+
...ccreResultList(ccreData.data.cCREAutocompleteQuery, ccreLimit || 3)
144149
);
145150
}
146-
if (snpData && inputValue.toLowerCase().startsWith("rs")) {
151+
if (snpData && searchSnp && inputValue.toLowerCase().startsWith("rs")) {
147152
resultsList.push(
148153
...snpResultList(snpData.data.snpAutocompleteQuery, snpLimit || 3)
149154
);
150155
}
151-
if (searchCoordinate && isDomain(inputValue)) {
156+
if (isDomain(inputValue) && searchCoordinate) {
152157
resultsList.push(...getCoordinates(inputValue, assembly));
153158
}
154159

155160
if (resultsList.length === 0) setResults(null);
156161
else setResults(resultsList);
157-
}, [isLoading, icreData, ccreData, geneData, snpData]);
162+
}, [
163+
isLoading,
164+
icreData,
165+
ccreData,
166+
geneData,
167+
snpData,
168+
searchGene,
169+
searchICRE,
170+
searchCCRE,
171+
searchSnp,
172+
searchCoordinate,
173+
inputValue,
174+
]);
158175

159176
// Handle submit
160177
const onSubmit = useCallback(() => {
@@ -184,10 +201,10 @@ const Search: React.FC<GenomeSearchProps> = ({
184201
return (
185202
<Box
186203
display="flex"
187-
flexDirection="row"
204+
flexDirection="row"
188205
gap={2}
189206
style={{ ...style }}
190-
sx={{ ...sx}}
207+
sx={{ ...sx }}
191208
{...slotProps?.box}
192209
>
193210
<Autocomplete
@@ -256,31 +273,32 @@ const Search: React.FC<GenomeSearchProps> = ({
256273
*/
257274
function renderGroup(params: any, inputValue: string) {
258275
// Sort items within each group by title match relevance
259-
const sortedOptions = Array.isArray(params.children) && !isDomain(inputValue)
260-
? params.children.sort((a: any, b: any) => {
261-
const aTitle = (
262-
a.props?.children?.props?.children?.[0]?.props?.children || ""
263-
).toLowerCase();
264-
const bTitle = (
265-
b.props?.children?.props?.children?.[0]?.props?.children || ""
266-
).toLowerCase();
267-
const query = inputValue.toLowerCase();
268-
// Exact matches first
269-
if (aTitle === query && bTitle !== query) return -1;
270-
if (bTitle === query && aTitle !== query) return 1;
276+
const sortedOptions =
277+
Array.isArray(params.children) && !isDomain(inputValue)
278+
? params.children.sort((a: any, b: any) => {
279+
const aTitle = (
280+
a.props?.children?.props?.children?.[0]?.props?.children || ""
281+
).toLowerCase();
282+
const bTitle = (
283+
b.props?.children?.props?.children?.[0]?.props?.children || ""
284+
).toLowerCase();
285+
const query = inputValue.toLowerCase();
286+
// Exact matches first
287+
if (aTitle === query && bTitle !== query) return -1;
288+
if (bTitle === query && aTitle !== query) return 1;
271289

272-
// Starts with query second
273-
if (aTitle.startsWith(query) && !bTitle.startsWith(query)) return -1;
274-
if (bTitle.startsWith(query) && !aTitle.startsWith(query)) return 1;
290+
// Starts with query second
291+
if (aTitle.startsWith(query) && !bTitle.startsWith(query)) return -1;
292+
if (bTitle.startsWith(query) && !aTitle.startsWith(query)) return 1;
275293

276-
// Contains query third
277-
if (aTitle.includes(query) && !bTitle.includes(query)) return -1;
278-
if (bTitle.includes(query) && !aTitle.includes(query)) return 1;
294+
// Contains query third
295+
if (aTitle.includes(query) && !bTitle.includes(query)) return -1;
296+
if (bTitle.includes(query) && !aTitle.includes(query)) return 1;
279297

280-
// Alphabetical order for equal relevance
281-
return aTitle.localeCompare(bTitle);
282-
})
283-
: params.children;
298+
// Alphabetical order for equal relevance
299+
return aTitle.localeCompare(bTitle);
300+
})
301+
: params.children;
284302

285303
return (
286304
<div key={params.key}>

0 commit comments

Comments
 (0)