Skip to content

Commit 8844b4b

Browse files
committed
Expect array on some more fields
1 parent 3502119 commit 8844b4b

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

src/components/result/GenericResultView.tsx

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,16 @@ export function GenericResultView({
123123
const getField = useCallback(
124124
(field: string) => {
125125
try {
126-
return autoUnwrap(
126+
const value = autoUnwrap(
127127
z
128128
.string()
129-
.or(z.object({ raw: z.string() }))
129+
.or(z.number())
130+
.or(z.object({ raw: z.string().or(z.number()) }))
130131
.optional()
131132
.parse(result[field])
132133
)
134+
135+
return value ? value + "" : undefined
133136
} catch (e) {
134137
console.warn(`Parsing field ${field} failed`, e)
135138
return undefined
@@ -141,14 +144,17 @@ export function GenericResultView({
141144
const getArrayField = useCallback(
142145
(field: string) => {
143146
try {
144-
return autoUnwrapArray(
147+
const value = autoUnwrapArray<string | number>(
145148
z
146149
.string()
147150
.array()
151+
.or(z.number().array())
148152
.or(z.object({ raw: z.string().array() }))
153+
.or(z.object({ raw: z.number().array() }))
149154
.optional()
150155
.parse(result[field])
151156
)
157+
return value ? value.map((v) => v + "") : []
152158
} catch (e) {
153159
console.warn(`Parsing array field ${field} failed`, e)
154160
return []
@@ -179,12 +185,14 @@ export function GenericResultView({
179185
}, [getField, pidField])
180186

181187
const title = useMemo(() => {
182-
return getField(titleField ?? "name")
183-
}, [getField, titleField])
188+
const maybeArray = getArrayOrSingleField(titleField ?? "name")
189+
return Array.isArray(maybeArray) ? maybeArray.join(", ") : maybeArray
190+
}, [getArrayOrSingleField, titleField])
184191

185192
const description = useMemo(() => {
186-
return getField(descriptionField ?? "description")
187-
}, [descriptionField, getField])
193+
const maybeArray = getArrayOrSingleField(descriptionField ?? "description")
194+
return Array.isArray(maybeArray) ? maybeArray.join("\n\r") : maybeArray
195+
}, [descriptionField, getArrayOrSingleField])
188196

189197
const doLocation = useMemo(() => {
190198
const value = getField(digitalObjectLocationField ?? "digitalObjectLocation")
@@ -203,8 +211,9 @@ export function GenericResultView({
203211
}, [getArrayOrSingleField, imageField])
204212

205213
const identifier = useMemo(() => {
206-
return getField(additionalIdentifierField ?? "identifier")
207-
}, [getField, additionalIdentifierField])
214+
const maybeArray = getArrayOrSingleField(additionalIdentifierField ?? "identifier")
215+
return Array.isArray(maybeArray) ? maybeArray.join(" - ") : maybeArray
216+
}, [getArrayOrSingleField, additionalIdentifierField])
208217

209218
const isMetadataFor = useMemo(() => {
210219
const val = getArrayOrSingleField(relatedItemPidsField ?? "isMetadataFor")

src/components/result/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export function autoUnwrap(item?: string | { raw?: string }) {
1+
export function autoUnwrap<E>(item?: E | { raw?: E }) {
22
if (!item) {
33
return undefined
44
} else if (typeof item === "string") {
@@ -10,7 +10,7 @@ export function autoUnwrap(item?: string | { raw?: string }) {
1010
}
1111
}
1212

13-
export function autoUnwrapArray(item?: string[] | { raw?: string[] }) {
13+
export function autoUnwrapArray<E>(item?: E[] | { raw?: E[] }) {
1414
if (!item) {
1515
return []
1616
}

src/stories/FairDOElasticSearch.stories.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,27 @@ const demoConfig: FairDOConfig = {
3434
label: "Source",
3535
prettyPrintURLs: true
3636
},
37+
{
38+
key: "NMR_Method.keyword",
39+
label: "NMR Method",
40+
usePidResolver: true
41+
},
42+
{
43+
key: "Pulse_Sequence_Name.keyword",
44+
label: "Pulse Sequence Name"
45+
},
46+
{
47+
key: "Acquisition_Nucleus.keyword",
48+
label: "Acquisition Nucleus"
49+
},
3750
{
3851
key: "licenseURL.keyword",
3952
label: "License",
4053
prettyPrintURLs: true
4154
},
4255
{
43-
key: "NMR_Method.keyword",
44-
label: "NMR Method",
56+
key: "digitalObjectType.keyword",
57+
label: "File Type",
4558
usePidResolver: true
4659
}
4760
],
@@ -153,7 +166,7 @@ export const GenericResultRenderer: Story = {
153166
parentItemPidField="hasMetadata"
154167
relatedItemPidsField="isMetadataFor"
155168
pidField="pid"
156-
relatedItemsPrefetch={{ prefetchAmount: 20, searchFields: { pid: {}, isMetadataFor: {}, hasMetadata: {} } }}
169+
relatedItemsPrefetch={{ searchFields: { pid: {}, isMetadataFor: {}, hasMetadata: {} } }}
157170
showOpenInFairDoScope
158171
/>
159172
)
@@ -199,7 +212,7 @@ export const CompoundSlider: Story = {
199212
parentItemPidField="hasMetadata"
200213
relatedItemPidsField="isMetadataFor"
201214
pidField="pid"
202-
relatedItemsPrefetch={{ prefetchAmount: 20, searchFields: { pid: {}, isMetadataFor: {}, hasMetadata: {} } }}
215+
relatedItemsPrefetch={{ searchFields: { pid: {}, isMetadataFor: {}, hasMetadata: {} } }}
203216
showOpenInFairDoScope
204217
/>
205218
)

0 commit comments

Comments
 (0)