Skip to content

Commit ce20670

Browse files
committed
Fix date_time facet, add date_time_no_millis facet
1 parent 68e374b commit ce20670

File tree

4 files changed

+186
-140
lines changed

4 files changed

+186
-140
lines changed

src/config/FairDOConfig.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,12 @@ export interface FairDONumericRangeFacetConfig extends FairDOCoreFacetConfig {
3030
* Date range facet that automatically renders available options
3131
*/
3232
export interface FairDODateRangeFacetConfig extends FairDOCoreFacetConfig {
33-
type: "date_time" | "date_year"
34-
}
35-
36-
export interface FairDOSliderFacetConfig extends FairDOCoreFacetConfig {
37-
type: "min-max-slider"
33+
type: "date_time" | "date_year" | "date_time_no_millis"
3834
}
3935

4036
export type FairDODefaultFacetConfig = FairDOCoreFacetConfig
4137

42-
export type FairDOFacetConfig = FairDONumericRangeFacetConfig | FairDODefaultFacetConfig | FairDODateRangeFacetConfig | FairDOSliderFacetConfig
38+
export type FairDOFacetConfig = FairDONumericRangeFacetConfig | FairDODefaultFacetConfig | FairDODateRangeFacetConfig
4339

4440
export interface FairDOIndexConfig {
4541
/**

src/config/FairDOConfigBuilder.ts

Lines changed: 15 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import type { FacetConfiguration, FilterValueRange, SearchDriverOptions, SearchFieldConfiguration, SearchQuery } from "@elastic/search-ui"
1+
import type { FacetConfiguration, SearchDriverOptions, SearchFieldConfiguration, SearchQuery } from "@elastic/search-ui"
22
import type { FairDOConfig, FairDODateRangeFacetConfig, FairDOFacetConfig, FairDONumericRangeFacetConfig } from "./FairDOConfig"
33
import ElasticsearchAPIConnector from "@elastic/search-ui-elasticsearch-connector"
44
import { parseStringValueToNumber } from "./helpers"
5-
import { DateTime, Duration } from "luxon"
5+
import { DateRangeBuilder } from "@/config/date/DateRangeBuilder"
66

77
export class FairDOConfigBuilder {
88
private readonly config: FairDOConfig
@@ -73,26 +73,13 @@ export class FairDOConfigBuilder {
7373
return acc
7474
}, allSearchFields)
7575

76-
// build result fields for current index
77-
allResultFields = (index.resultFields || []).reduce(
78-
// accumulate from index.resultFields
79-
(acc, n) => {
80-
// initialize accumulator if acc is not available, yet
81-
acc = acc || {}
82-
// set n-element (n is resultFieldKey) in acc to result object to obtain raw value
83-
acc[n] = {
84-
raw: {}
85-
/* snippet: {
86-
size: 100,
87-
fallback: true
88-
} */
89-
}
90-
// return current acc to next iteration
91-
return acc
92-
},
93-
// set initial value to already collected fields
94-
allResultFields
95-
)
76+
allResultFields = (index.resultFields || []).reduce((acc, n) => {
77+
acc = acc || {}
78+
acc[n] = {
79+
raw: {}
80+
}
81+
return acc
82+
}, allResultFields)
9683
}
9784

9885
return {
@@ -115,20 +102,13 @@ export class FairDOConfigBuilder {
115102
type: "range",
116103
ranges: facetRanges
117104
}
118-
} else if ("type" in n && (n.type === "date_time" || n.type === "date_year")) {
105+
} else if ("type" in n && (n.type === "date_time" || n.type === "date_year" || n.type === "date_time_no_millis")) {
119106
const facetRanges = this.buildDateRangeFacet(n)
120107
acc[n.key] = {
121108
...n,
122109
type: "range",
123110
ranges: facetRanges
124111
}
125-
} else if ("type" in n && n.type === "min-max-slider") {
126-
// TODO work out how to get slider min and max values
127-
acc[n.key] = {
128-
...n,
129-
type: "value",
130-
size: 100
131-
}
132112
} else {
133113
// no specific range facet, use default arguments
134114
acc[n.key] = {
@@ -173,114 +153,17 @@ export class FairDOConfigBuilder {
173153
}
174154

175155
buildDateRangeFacet(facetConfig: FairDODateRangeFacetConfig) {
176-
let ranges: FilterValueRange[] = []
177-
const getDate = (minus: number) =>
178-
DateTime.now()
179-
.minus(Duration.fromObject({ years: minus }))
180-
.toFormat("yyyy")
181-
182156
if (facetConfig.type === "date_year") {
183-
ranges = [
184-
{
185-
from: DateTime.now().toFormat("yyyy"),
186-
name: "This Year"
187-
},
188-
{
189-
from: getDate(2),
190-
to: getDate(1),
191-
name: "Last Year"
192-
},
193-
{
194-
from: getDate(3),
195-
to: getDate(2),
196-
name: "2 years ago"
197-
},
198-
{
199-
from: getDate(4),
200-
to: getDate(3),
201-
name: "3 years ago"
202-
},
203-
{
204-
from: getDate(5),
205-
to: getDate(4),
206-
name: "4 years ago"
207-
},
208-
{
209-
from: getDate(6),
210-
to: getDate(5),
211-
name: "5 years ago"
212-
},
213-
{
214-
from: getDate(10),
215-
to: getDate(6),
216-
name: "10 years ago"
217-
},
218-
{
219-
to: getDate(11),
220-
name: "Older"
221-
}
222-
]
157+
return DateRangeBuilder.dateYears()
223158
} else if (facetConfig.type === "date_time") {
224-
ranges = [
225-
{
226-
from: DateTime.now().startOf("year").toFormat("YYYY-MM-DDTHH:mm:ss"),
227-
to: DateTime.now().endOf("year").toFormat("YYYY-MM-DDTHH:mm:ss"),
228-
name: "This Year"
229-
},
230-
{
231-
from: DateTime.now()
232-
.minus(Duration.fromObject({ years: 1 }))
233-
.startOf("year")
234-
.toFormat("YYYY-MM-DDTHH:mm:ss"),
235-
to: DateTime.now()
236-
.minus(Duration.fromObject({ years: 1 }))
237-
.endOf("year")
238-
.toFormat("YYYY-MM-DDTHH:mm:ss"),
239-
name: "Last Year"
240-
},
241-
{
242-
from: DateTime.now()
243-
.minus(Duration.fromObject({ years: 2 }))
244-
.startOf("year")
245-
.toFormat("YYYY-MM-DDTHH:mm:ss"),
246-
to: DateTime.now()
247-
.minus(Duration.fromObject({ years: 2 }))
248-
.endOf("year")
249-
.toFormat("YYYY-MM-DDTHH:mm:ss"),
250-
name: "2 years ago"
251-
},
252-
{
253-
to: DateTime.now()
254-
.minus(Duration.fromObject({ years: 3 }))
255-
.endOf("year")
256-
.toFormat("YYYY-MM-DDTHH:mm:ss"),
257-
name: "Older"
258-
}
259-
]
159+
return DateRangeBuilder.dateTimes()
160+
} else if (facetConfig.type === "date_time_no_millis") {
161+
return DateRangeBuilder.dateTimesNoMillis()
260162
}
261-
262-
return ranges
263163
}
264164

265165
getAutocompleteQueryConfig() {
266-
/* const querySuggestFields = getConfig().querySuggestFields
267-
if (
268-
!querySuggestFields ||
269-
!Array.isArray(querySuggestFields) ||
270-
querySuggestFields.length === 0
271-
) {
272-
return {}
273-
}
274-
275-
return {
276-
suggestions: {
277-
types: {
278-
documents: {
279-
fields: getConfig().querySuggestFields
280-
}
281-
}
282-
}
283-
} */
166+
// Currently not supported
284167
return {}
285168
}
286169
}

src/config/date/DateRangeBuilder.ts

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import { DateTime, Duration } from "luxon"
2+
3+
export class DateRangeBuilder {
4+
static dateYears() {
5+
const getDate = (minus: number) =>
6+
DateTime.now()
7+
.minus(Duration.fromObject({ years: minus }))
8+
.toFormat("yyyy")
9+
10+
return [
11+
{
12+
from: DateTime.now().toFormat("yyyy"),
13+
name: "This Year"
14+
},
15+
{
16+
from: getDate(2),
17+
to: getDate(1),
18+
name: "Last Year"
19+
},
20+
{
21+
from: getDate(3),
22+
to: getDate(2),
23+
name: "2 years ago"
24+
},
25+
{
26+
from: getDate(4),
27+
to: getDate(3),
28+
name: "3 years ago"
29+
},
30+
{
31+
from: getDate(5),
32+
to: getDate(4),
33+
name: "4 years ago"
34+
},
35+
{
36+
from: getDate(6),
37+
to: getDate(5),
38+
name: "5 years ago"
39+
},
40+
{
41+
from: getDate(10),
42+
to: getDate(6),
43+
name: "6 - 10 years ago"
44+
},
45+
{
46+
to: getDate(11),
47+
name: "Older"
48+
}
49+
]
50+
}
51+
52+
static dateTimes() {
53+
const format = (d: DateTime<true>) => d.toISO({ extendedZone: false })
54+
return this.rawDateTime(format)
55+
}
56+
57+
static dateTimesNoMillis() {
58+
const format = (d: DateTime<true>) => d.startOf("second").toISO({ extendedZone: false, suppressMilliseconds: true })
59+
return this.rawDateTime(format)
60+
}
61+
62+
private static rawDateTime(format: (d: DateTime<true>) => string) {
63+
return [
64+
{
65+
from: format(DateTime.now()),
66+
to: format(DateTime.now().minus(Duration.fromObject({ days: 7 }))),
67+
name: "Last 7 Days"
68+
},
69+
{
70+
from: format(DateTime.now()),
71+
to: format(DateTime.now().minus(Duration.fromObject({ weeks: 4 }))),
72+
name: "Last 4 Weeks"
73+
},
74+
{
75+
from: format(DateTime.now().startOf("year")),
76+
to: format(DateTime.now().endOf("year")),
77+
name: "This Year"
78+
},
79+
{
80+
from: format(
81+
DateTime.now()
82+
.minus(Duration.fromObject({ years: 1 }))
83+
.startOf("year")
84+
),
85+
to: format(
86+
DateTime.now()
87+
.minus(Duration.fromObject({ years: 1 }))
88+
.endOf("year")
89+
),
90+
name: "Last Year"
91+
},
92+
{
93+
from: format(
94+
DateTime.now()
95+
.minus(Duration.fromObject({ years: 2 }))
96+
.startOf("year")
97+
),
98+
to: format(
99+
DateTime.now()
100+
.minus(Duration.fromObject({ years: 2 }))
101+
.endOf("year")
102+
),
103+
name: "2 years ago"
104+
},
105+
{
106+
from: format(
107+
DateTime.now()
108+
.minus(Duration.fromObject({ years: 3 }))
109+
.startOf("year")
110+
),
111+
to: format(
112+
DateTime.now()
113+
.minus(Duration.fromObject({ years: 3 }))
114+
.endOf("year")
115+
),
116+
name: "3 years ago"
117+
},
118+
{
119+
from: format(
120+
DateTime.now()
121+
.minus(Duration.fromObject({ years: 4 }))
122+
.startOf("year")
123+
),
124+
to: format(
125+
DateTime.now()
126+
.minus(Duration.fromObject({ years: 4 }))
127+
.endOf("year")
128+
),
129+
name: "4 years ago"
130+
},
131+
{
132+
from: format(
133+
DateTime.now()
134+
.minus(Duration.fromObject({ years: 5 }))
135+
.startOf("year")
136+
),
137+
to: format(
138+
DateTime.now()
139+
.minus(Duration.fromObject({ years: 5 }))
140+
.endOf("year")
141+
),
142+
name: "5 years ago"
143+
},
144+
{
145+
from: format(
146+
DateTime.now()
147+
.minus(Duration.fromObject({ years: 10 }))
148+
.startOf("year")
149+
),
150+
to: format(
151+
DateTime.now()
152+
.minus(Duration.fromObject({ years: 6 }))
153+
.endOf("year")
154+
),
155+
name: "6 - 10 years ago"
156+
},
157+
{
158+
to: format(
159+
DateTime.now()
160+
.minus(Duration.fromObject({ years: 11 }))
161+
.endOf("year")
162+
),
163+
name: "Older"
164+
}
165+
]
166+
}
167+
}

src/stories/FairDOElasticSearch.stories.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ const demoConfig: FairDOConfig = {
7777
{
7878
key: "dateCreatedRfc3339",
7979
label: "Created",
80-
type: "date_year"
80+
type: "date_time"
8181
},
8282
{
8383
key: "dateModified",
8484
label: "Last modified",
85-
type: "date_year"
85+
type: "date_time"
8686
},
8787
{
8888
key: "licenseURL.keyword",

0 commit comments

Comments
 (0)