Skip to content

Commit f28323a

Browse files
committed
Add loading indicator to related items button
1 parent 5d454a4 commit f28323a

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/components/result/GenericResultView.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { useCallback, useContext, useEffect, useMemo } from "react"
1+
import { useCallback, useContext, useEffect, useMemo, useState } from "react"
22
import { RFS_GlobalModalContext } from "@/components/RFS_GlobalModalContext"
33
import { FairDOSearchContext } from "@/components/FairDOSearchContext"
44
import { useStore } from "zustand/index"
55
import { resultCache } from "@/lib/ResultCache"
66
import { autoUnwrap, autoUnwrapArray, toArray } from "@/components/result/utils"
77
import { DateTime } from "luxon"
8-
import { ChevronDown, Download, GitFork, ImageOff, Microscope, Pencil, PlusIcon, SearchIcon } from "lucide-react"
8+
import { ChevronDown, Download, GitFork, ImageOff, LoaderCircle, Microscope, Pencil, PlusIcon, SearchIcon } from "lucide-react"
99
import { Badge } from "@/components/ui/badge"
1010
import { Button } from "@/components/ui/button"
1111
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
@@ -123,6 +123,7 @@ export function GenericResultView({
123123
const { openRelationGraph } = useContext(RFS_GlobalModalContext)
124124
const { searchTerm, elasticConnector, searchFor } = useContext(FairDOSearchContext)
125125
const addToResultCache = useStore(resultCache, (s) => s.set)
126+
const [loadingRelatedItems, setLoadingRelatedItems] = useState(false)
126127

127128
const getField = useCallback(
128129
(field: string) => {
@@ -277,8 +278,10 @@ export function GenericResultView({
277278

278279
const showRelatedItemsGraph = useCallback(async () => {
279280
if (!pid) return
281+
setLoadingRelatedItems(true)
280282
if (isMetadataFor) await fetchRelatedItems(isMetadataFor.join(" "), isMetadataFor.length)
281283
if (hasMetadata) await fetchRelatedItems(hasMetadata.join(" "), hasMetadata.length)
284+
setLoadingRelatedItems(false)
282285

283286
openRelationGraph(hasMetadata ?? [], pid, isMetadataFor ?? [])
284287
}, [fetchRelatedItems, hasMetadata, isMetadataFor, openRelationGraph, pid])
@@ -368,8 +371,19 @@ export function GenericResultView({
368371
<div className="rfs-mt-8 rfs-flex rfs-flex-col rfs-flex-wrap rfs-justify-end rfs-gap-2 md:rfs-flex-row md:rfs-items-center md:rfs-gap-4">
369372
{showRelatedItemsButton && (
370373
<div className="rfs-flex rfs-items-center">
371-
<Button className="rfs-grow rfs-rounded-r-none" size="sm" variant="secondary" onClick={showRelatedItemsGraph}>
372-
<GitFork className="rfs-mr-1 rfs-size-4" /> Show Related Items
374+
<Button
375+
className="rfs-grow rfs-rounded-r-none"
376+
disabled={loadingRelatedItems}
377+
size="sm"
378+
variant="secondary"
379+
onClick={showRelatedItemsGraph}
380+
>
381+
{loadingRelatedItems ? (
382+
<LoaderCircle className="rfs-mr-1 rfs-size-4 rfs-animate-spin" />
383+
) : (
384+
<GitFork className="rfs-mr-1 rfs-size-4" />
385+
)}
386+
Show Related Items
373387
</Button>
374388
<Button
375389
className="rfs-rounded-l-none rfs-border-l rfs-border-l-border rfs-text-xs rfs-font-bold"

0 commit comments

Comments
 (0)