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