@@ -4,39 +4,60 @@ import { REFETCH_INTERVAL } from "consts/index";
44import { useGraphqlBatcher } from "context/GraphqlBatcher" ;
55
66import { graphql } from "src/graphql" ;
7- import { EvidencesQuery } from "src/graphql/graphql" ;
7+ import { EvidenceDetailsFragment , EvidencesQuery } from "src/graphql/graphql" ;
88export type { EvidencesQuery } ;
99
10+ export const evidenceFragment = graphql ( `
11+ fragment EvidenceDetails on ClassicEvidence {
12+ id
13+ evidence
14+ sender {
15+ id
16+ }
17+ timestamp
18+ name
19+ description
20+ fileURI
21+ fileTypeExtension
22+ evidenceIndex
23+ }
24+ ` ) ;
25+
1026const evidencesQuery = graphql ( `
1127 query Evidences($evidenceGroupID: String) {
12- evidences(where: { evidenceGroup: $evidenceGroupID }, orderBy: timestamp, orderDirection: desc) {
13- id
14- evidence
15- sender {
16- id
17- }
18- timestamp
19- name
20- description
21- fileURI
22- fileTypeExtension
28+ evidences(where: { evidenceGroup: $evidenceGroupID }, orderBy: timestamp, orderDirection: asc) {
29+ ...EvidenceDetails
2330 }
2431 }
2532` ) ;
2633
27- export const useEvidences = ( evidenceGroup ?: string ) => {
34+ const evidenceSearchQuery = graphql ( `
35+ query EvidenceSearch($keywords: String!, $evidenceGroupID: String) {
36+ evidenceSearch(text: $keywords, where: { evidenceGroup: $evidenceGroupID }) {
37+ ...EvidenceDetails
38+ }
39+ }
40+ ` ) ;
41+
42+ export const useEvidences = ( evidenceGroup ?: string , keywords ?: string ) => {
2843 const isEnabled = evidenceGroup !== undefined ;
2944 const { graphqlBatcher } = useGraphqlBatcher ( ) ;
3045
31- return useQuery < EvidencesQuery > ( {
32- queryKey : [ `evidencesQuery${ evidenceGroup } ` ] ,
46+ const document = keywords ? evidenceSearchQuery : evidencesQuery ;
47+ return useQuery < { evidences : EvidenceDetailsFragment [ ] } > ( {
48+ queryKey : [
49+ keywords ? `evidenceSearchQuery${ evidenceGroup } -${ keywords } ` : `evidencesQuery${ evidenceGroup } ` ,
50+ ] ,
3351 enabled : isEnabled ,
3452 refetchInterval : REFETCH_INTERVAL ,
35- queryFn : async ( ) =>
36- await graphqlBatcher . fetch ( {
53+ queryFn : async ( ) => {
54+ const result = await graphqlBatcher . fetch ( {
3755 id : crypto . randomUUID ( ) ,
38- document : evidencesQuery ,
39- variables : { evidenceGroupID : evidenceGroup ?. toString ( ) } ,
40- } ) ,
56+ document : document ,
57+ variables : { evidenceGroupID : evidenceGroup ?. toString ( ) , keywords : keywords } ,
58+ } ) ;
59+
60+ return keywords ? { evidences : [ ...result . evidenceSearch ] } : result ;
61+ } ,
4162 } ) ;
4263} ;
0 commit comments