1
- import { useTranslation } from "next-i18next"
1
+ import { TFunction , useTranslation } from "next-i18next"
2
2
import {
3
3
CurrentRefinements ,
4
4
Hits ,
@@ -10,7 +10,7 @@ import {
10
10
import { currentGeneralCourt } from "functions/src/shared"
11
11
import styled from "styled-components"
12
12
import TypesenseInstantSearchAdapter from "typesense-instantsearch-adapter"
13
- import { Col , Row } from "../../bootstrap"
13
+ import { Col , Container , Row , Spinner } from "../../bootstrap"
14
14
import { NoResults } from "../NoResults"
15
15
import { ResultCount } from "../ResultCount"
16
16
import { SearchContainer } from "../SearchContainer"
@@ -21,7 +21,7 @@ import { useBillRefinements } from "./useBillRefinements"
21
21
import { SortBy , SortByWithConfigurationItem } from "../SortBy"
22
22
import { getServerConfig , VirtualFilters } from "../common"
23
23
import { useBillSort } from "./useBillSort"
24
- import { FC } from "react"
24
+ import { FC , useState } from "react"
25
25
26
26
const searchClient = new TypesenseInstantSearchAdapter ( {
27
27
server : getServerConfig ( ) ,
@@ -100,6 +100,47 @@ const useSearchStatus = () => {
100
100
}
101
101
}
102
102
103
+ const StyledLoadingContainer = styled ( Container ) `
104
+ background-color: white;
105
+ display: flex;
106
+ height: 300px;
107
+ justify-content: center;
108
+ align-items: center;
109
+ `
110
+
111
+ const Results = ( {
112
+ status,
113
+ t
114
+ } : {
115
+ status : ReturnType < typeof useSearchStatus >
116
+ t : TFunction
117
+ } ) => {
118
+ const [ isLoadingBillDetails , setIsLoadingBillDetails ] = useState ( false )
119
+
120
+ if ( isLoadingBillDetails ) {
121
+ return (
122
+ < StyledLoadingContainer >
123
+ < Spinner animation = "border" className = "mx-auto" />
124
+ </ StyledLoadingContainer >
125
+ )
126
+ } else if ( status === "empty" ) {
127
+ return (
128
+ < NoResults >
129
+ { t ( "zero_results" ) }
130
+ < br />
131
+ < b > { t ( "another_term" ) } </ b >
132
+ </ NoResults >
133
+ )
134
+ } else {
135
+ return (
136
+ < Hits
137
+ hitComponent = { BillHit }
138
+ onClick = { ( ) => setIsLoadingBillDetails ( true ) }
139
+ />
140
+ )
141
+ }
142
+ }
143
+
103
144
const Layout : FC <
104
145
React . PropsWithChildren < { items : SortByWithConfigurationItem [ ] } >
105
146
> = ( { items } ) => {
@@ -128,15 +169,7 @@ const Layout: FC<
128
169
excludedAttributes = { [ "nextHearingAt" ] }
129
170
transformItems = { extractLastSegmentOfRefinements }
130
171
/>
131
- { status === "empty" ? (
132
- < NoResults >
133
- { t ( "zero_results" ) }
134
- < br />
135
- < b > { t ( "another_term" ) } </ b >
136
- </ NoResults >
137
- ) : (
138
- < Hits hitComponent = { BillHit } />
139
- ) }
172
+ < Results status = { status } t = { t } />
140
173
< Pagination className = "mx-auto mt-2 mb-3" />
141
174
</ Col >
142
175
</ Row >
0 commit comments