hds-web 1.15.7 → 1.15.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,126 @@
1
+ import algoliasearch from "algoliasearch/lite";
2
+ import React, { useRef, useState } from "react";
3
+ import { InstantSearch, connectStateResults, Index } from "react-instantsearch-dom";
4
+ import SearchBox from "./searchbox";
5
+ import SearchResults from "./searchresults";
6
+ import { INDEX_TYPES } from "./constants";
7
+ import SearchFooter from "./searchfooter";
8
+ import { Typography } from '../../foundation/Typography'
9
+
10
+
11
+ const algoliaClient = algoliasearch(
12
+ process.env.ALGOLIA_APP_ID,
13
+ process.env.ALGOLIA_SEARCH_KEY
14
+ );
15
+
16
+ const searchClient = {
17
+ ...algoliaClient,
18
+ search(requests) {
19
+ if (requests.every(({ params }) => !params.query)) {
20
+ return Promise.resolve({
21
+ results: requests.map(() => ({
22
+ hits: [],
23
+ nbHits: 0,
24
+ nbPages: 0,
25
+ processingTimeMS: 0,
26
+ })),
27
+ });
28
+ }
29
+
30
+ return algoliaClient.search(requests);
31
+ },
32
+ };
33
+
34
+ const AllResults = ({ allSearchResults, children, indices, searchState, searching }) => {
35
+ if (!searchState?.query) return null;
36
+
37
+ const hasResults =
38
+ allSearchResults && Object.values(allSearchResults).some(results => results.nbHits > 0);
39
+ return !hasResults ? (
40
+ <div>
41
+ <div>
42
+ {searching ? (
43
+ <span>
44
+ Searching for "<em>{searchState?.query}</em>"
45
+ </span>
46
+ ) : (
47
+ <span>
48
+ No results for "<em>{searchState?.query}</em>"
49
+ </span>
50
+ )}
51
+ </div>
52
+ {indices.map(index => (
53
+ <Index indexName={index.name} key={index.name} />
54
+ ))}
55
+ <SearchFooter />
56
+ </div>
57
+ ) : (
58
+ children
59
+ );
60
+ };
61
+
62
+ const CustomAllResults = connectStateResults(AllResults);
63
+
64
+ const IndexTypeFilter = ({ activeIndexTypes, setActiveIndexTypes }) => {
65
+ const handleOnChange = indexType => ({ target }) => {
66
+ setActiveIndexTypes(prevState => ({
67
+ ...prevState,
68
+ [indexType]: target.checked,
69
+ }));
70
+ };
71
+
72
+ return (
73
+ <div className="tb-m:min-w-[150px] static tb-m:sticky top-[96px] self-start">
74
+ <Typography textStyle="h6" as="h6" className="text-neutral-700 uppercase">Filter</Typography>
75
+ <ul className="flex tb-m:block">
76
+ {Object.values(INDEX_TYPES).map(index => (
77
+ <li key={index} className="flex items-center py-3 mr-4 tb-m:mr-0">
78
+ <input
79
+ type="checkbox"
80
+ id={"algolia_index_type_" + index}
81
+ name={"algolia_index_type_" + index}
82
+ value={index}
83
+ checked={activeIndexTypes[index]}
84
+ onChange={handleOnChange(index)}
85
+ className="mr-2 focus:outline-none"
86
+ />
87
+ <label htmlFor={"algolia_index_type_" + index}>{index}</label>
88
+ </li>
89
+ ))}
90
+ </ul>
91
+ </div>
92
+ );
93
+ };
94
+
95
+ export default function SearchWrapper({ indices }) {
96
+ const defaultIndexTypesState = Object.values(INDEX_TYPES).reduce((a, c) => {
97
+ a[c] = true;
98
+ return a;
99
+ }, {});
100
+ const wrapperRef = useRef(null);
101
+ const [activeIndexTypes, setActiveIndexTypes] = useState(defaultIndexTypesState);
102
+ return (
103
+ <InstantSearch
104
+ searchClient={searchClient}
105
+ indexName={indices[0].name}
106
+ onSearchStateChange={() => setActiveIndexTypes(defaultIndexTypesState)}
107
+ >
108
+ <SearchBox />
109
+ <CustomAllResults indices={indices}>
110
+ <div className="tb-m:flex">
111
+ <IndexTypeFilter
112
+ activeIndexTypes={activeIndexTypes}
113
+ setActiveIndexTypes={setActiveIndexTypes}
114
+ />
115
+ <SearchResults
116
+ id="search-results"
117
+ indices={indices}
118
+ wrapperRef={wrapperRef}
119
+ activeIndexTypes={activeIndexTypes}
120
+ className="search-results"
121
+ />
122
+ </div>
123
+ </CustomAllResults>
124
+ </InstantSearch>
125
+ );
126
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './Translations';
2
2
  export * from './Media';
3
3
  export * from './Effects';
4
+ export * from './AlgoliaSearch';
@@ -827,6 +827,10 @@ select{
827
827
  visibility: hidden;
828
828
  }
829
829
 
830
+ .static{
831
+ position: static;
832
+ }
833
+
830
834
  .fixed{
831
835
  position: fixed;
832
836
  }
@@ -886,6 +890,10 @@ select{
886
890
  right: -44px;
887
891
  }
888
892
 
893
+ .-top-20{
894
+ top: -5rem;
895
+ }
896
+
889
897
  .bottom-0{
890
898
  bottom: 0px;
891
899
  }
@@ -970,6 +978,10 @@ select{
970
978
  right: 0.5rem;
971
979
  }
972
980
 
981
+ .right-4{
982
+ right: 1rem;
983
+ }
984
+
973
985
  .right-8{
974
986
  right: 2rem;
975
987
  }
@@ -994,6 +1006,10 @@ select{
994
1006
  top: 0.5rem;
995
1007
  }
996
1008
 
1009
+ .top-4{
1010
+ top: 1rem;
1011
+ }
1012
+
997
1013
  .top-5{
998
1014
  top: 1.25rem;
999
1015
  }
@@ -1022,6 +1038,10 @@ select{
1022
1038
  top: 72px;
1023
1039
  }
1024
1040
 
1041
+ .top-\[96px\]{
1042
+ top: 96px;
1043
+ }
1044
+
1025
1045
  .isolate{
1026
1046
  isolation: isolate;
1027
1047
  }
@@ -1050,6 +1070,10 @@ select{
1050
1070
  z-index: 50;
1051
1071
  }
1052
1072
 
1073
+ .z-\[10000\]{
1074
+ z-index: 10000;
1075
+ }
1076
+
1053
1077
  .z-\[100\]{
1054
1078
  z-index: 100;
1055
1079
  }
@@ -1058,6 +1082,10 @@ select{
1058
1082
  z-index: 10;
1059
1083
  }
1060
1084
 
1085
+ .z-\[11\]{
1086
+ z-index: 11;
1087
+ }
1088
+
1061
1089
  .z-\[1\]{
1062
1090
  z-index: 1;
1063
1091
  }
@@ -1082,6 +1110,10 @@ select{
1082
1110
  grid-column: span 4 / span 4;
1083
1111
  }
1084
1112
 
1113
+ .clear-both{
1114
+ clear: both;
1115
+ }
1116
+
1085
1117
  .-m-1{
1086
1118
  margin: -0.25rem;
1087
1119
  }
@@ -1102,6 +1134,10 @@ select{
1102
1134
  margin: -0.75rem;
1103
1135
  }
1104
1136
 
1137
+ .m-1{
1138
+ margin: 0.25rem;
1139
+ }
1140
+
1105
1141
  .m-2{
1106
1142
  margin: 0.5rem;
1107
1143
  }
@@ -2654,6 +2690,10 @@ select{
2654
2690
  border-width: 1.5px;
2655
2691
  }
2656
2692
 
2693
+ .border-\[3px\]{
2694
+ border-width: 3px;
2695
+ }
2696
+
2657
2697
  .border-x{
2658
2698
  border-left-width: 1px;
2659
2699
  border-right-width: 1px;
@@ -3201,11 +3241,21 @@ select{
3201
3241
  border-bottom-color: rgb(157 164 174 / var(--tw-border-opacity));
3202
3242
  }
3203
3243
 
3244
+ .border-t-blue-500{
3245
+ --tw-border-opacity: 1;
3246
+ border-top-color: rgb(57 112 253 / var(--tw-border-opacity));
3247
+ }
3248
+
3204
3249
  .border-t-neutral-150{
3205
3250
  --tw-border-opacity: 1;
3206
3251
  border-top-color: rgb(236 237 240 / var(--tw-border-opacity));
3207
3252
  }
3208
3253
 
3254
+ .border-t-neutral-200{
3255
+ --tw-border-opacity: 1;
3256
+ border-top-color: rgb(229 231 235 / var(--tw-border-opacity));
3257
+ }
3258
+
3209
3259
  .bg-amber-100{
3210
3260
  --tw-bg-opacity: 1;
3211
3261
  background-color: rgb(255 243 212 / var(--tw-bg-opacity));
@@ -6457,6 +6507,10 @@ select{
6457
6507
  text-align: right;
6458
6508
  }
6459
6509
 
6510
+ .indent-5{
6511
+ text-indent: 1.25rem;
6512
+ }
6513
+
6460
6514
  .font-petrona{
6461
6515
  font-family: Petrona, serif;
6462
6516
  }
@@ -9462,6 +9516,11 @@ select{
9462
9516
  color: rgb(30 86 227 / var(--tw-text-opacity));
9463
9517
  }
9464
9518
 
9519
+ .hover\:text-blue-700:hover{
9520
+ --tw-text-opacity: 1;
9521
+ color: rgb(13 65 198 / var(--tw-text-opacity));
9522
+ }
9523
+
9465
9524
  .hover\:text-neutral-0:hover{
9466
9525
  --tw-text-opacity: 1;
9467
9526
  color: rgb(255 255 255 / var(--tw-text-opacity));
@@ -10002,10 +10061,6 @@ select{
10002
10061
  }
10003
10062
 
10004
10063
  @media (min-width: 400px){
10005
- .mb-m\:block{
10006
- display: block;
10007
- }
10008
-
10009
10064
  .mb-m\:flex{
10010
10065
  display: flex;
10011
10066
  }
@@ -10343,11 +10398,41 @@ select{
10343
10398
  border-right-color: rgb(236 237 240 / var(--tw-border-opacity));
10344
10399
  }
10345
10400
 
10401
+ .tb\:bg-amber-500{
10402
+ --tw-bg-opacity: 1;
10403
+ background-color: rgb(224 121 0 / var(--tw-bg-opacity));
10404
+ }
10405
+
10406
+ .tb\:bg-blue-500{
10407
+ --tw-bg-opacity: 1;
10408
+ background-color: rgb(57 112 253 / var(--tw-bg-opacity));
10409
+ }
10410
+
10411
+ .tb\:bg-cyan-500{
10412
+ --tw-bg-opacity: 1;
10413
+ background-color: rgb(14 150 178 / var(--tw-bg-opacity));
10414
+ }
10415
+
10416
+ .tb\:bg-green-500{
10417
+ --tw-bg-opacity: 1;
10418
+ background-color: rgb(14 165 120 / var(--tw-bg-opacity));
10419
+ }
10420
+
10346
10421
  .tb\:bg-neutral-150{
10347
10422
  --tw-bg-opacity: 1;
10348
10423
  background-color: rgb(236 237 240 / var(--tw-bg-opacity));
10349
10424
  }
10350
10425
 
10426
+ .tb\:bg-pink-500{
10427
+ --tw-bg-opacity: 1;
10428
+ background-color: rgb(225 58 124 / var(--tw-bg-opacity));
10429
+ }
10430
+
10431
+ .tb\:bg-purple-500{
10432
+ --tw-bg-opacity: 1;
10433
+ background-color: rgb(140 73 250 / var(--tw-bg-opacity));
10434
+ }
10435
+
10351
10436
  .tb\:p-0{
10352
10437
  padding: 0px;
10353
10438
  }
@@ -10706,6 +10791,11 @@ select{
10706
10791
  text-transform: uppercase;
10707
10792
  }
10708
10793
 
10794
+ .tb\:text-neutral-0{
10795
+ --tw-text-opacity: 1;
10796
+ color: rgb(255 255 255 / var(--tw-text-opacity));
10797
+ }
10798
+
10709
10799
  .tb\:shadow{
10710
10800
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
10711
10801
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
@@ -10815,6 +10905,23 @@ select{
10815
10905
  }
10816
10906
 
10817
10907
  @media (min-width: 800px){
10908
+ .tb-m\:sticky{
10909
+ position: -webkit-sticky;
10910
+ position: sticky;
10911
+ }
10912
+
10913
+ .tb-m\:-top-20{
10914
+ top: -5rem;
10915
+ }
10916
+
10917
+ .tb-m\:mr-0{
10918
+ margin-right: 0px;
10919
+ }
10920
+
10921
+ .tb-m\:block{
10922
+ display: block;
10923
+ }
10924
+
10818
10925
  .tb-m\:flex{
10819
10926
  display: flex;
10820
10927
  }
@@ -10823,6 +10930,10 @@ select{
10823
10930
  width: 50%;
10824
10931
  }
10825
10932
 
10933
+ .tb-m\:min-w-\[150px\]{
10934
+ min-width: 150px;
10935
+ }
10936
+
10826
10937
  .tb-m\:snap-start{
10827
10938
  scroll-snap-align: start;
10828
10939
  }
@@ -10839,6 +10950,11 @@ select{
10839
10950
  border-top-width: 0px;
10840
10951
  }
10841
10952
 
10953
+ .tb-m\:py-9{
10954
+ padding-top: 2.25rem;
10955
+ padding-bottom: 2.25rem;
10956
+ }
10957
+
10842
10958
  .tb-m\:pb-0{
10843
10959
  padding-bottom: 0px;
10844
10960
  }
@@ -10846,6 +10962,10 @@ select{
10846
10962
  .tb-m\:pt-0{
10847
10963
  padding-top: 0px;
10848
10964
  }
10965
+
10966
+ .tb-m\:pt-16{
10967
+ padding-top: 4rem;
10968
+ }
10849
10969
  }
10850
10970
 
10851
10971
  @media (min-width: 905px){