@stoker-platform/web-app 0.5.194 → 0.5.196

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @stoker-platform/web-app
2
2
 
3
+ ## 0.5.196
4
+
5
+ ### Patch Changes
6
+
7
+ - fix: fix image loading spinner issue
8
+
9
+ ## 0.5.195
10
+
11
+ ### Patch Changes
12
+
13
+ - fix: fix infinite scroll stale records issue
14
+
3
15
  ## 0.5.194
4
16
 
5
17
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stoker-platform/web-app",
3
- "version": "0.5.194",
3
+ "version": "0.5.196",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "scripts": {
@@ -375,9 +375,6 @@ function Collection({
375
375
  }, [serverList])
376
376
 
377
377
  useEffect(() => {
378
- if (isAssigning !== undefined) {
379
- setBackToStartKey((prev) => prev + 1)
380
- }
381
378
  if (!relationList || !isInitialized) return
382
379
  setFilters((prev) => {
383
380
  let next = prev
@@ -397,7 +394,7 @@ function Collection({
397
394
  }
398
395
  return next
399
396
  })
400
- }, [isAssigning])
397
+ }, [isAssigning, isInitialized])
401
398
 
402
399
  // This is to ensure that the optimistic list is set in cases where cached documents exactly match the downloaded server documents
403
400
  // In this case, the cache-only snapshot listener does not fire a second time when the cache has loaded because there is no change to the list
package/src/Images.tsx CHANGED
@@ -53,31 +53,36 @@ interface RowImageProps {
53
53
 
54
54
  const RowImage = memo(
55
55
  ({ src, alt }: RowImageProps) => {
56
- const [isLoaded, setIsLoaded] = useState(false)
56
+ const imgRef = useRef<HTMLImageElement | null>(null)
57
+ const [loadedSrc, setLoadedSrc] = useState<string | null>(null)
57
58
  const [showSpinner, setShowSpinner] = useState(false)
59
+ const isLoaded = loadedSrc === src
58
60
 
59
61
  useEffect(() => {
60
- setIsLoaded(false)
62
+ if (imgRef.current?.complete && imgRef.current.naturalWidth > 0) {
63
+ setLoadedSrc(src)
64
+ setShowSpinner(false)
65
+ return
66
+ }
61
67
  setShowSpinner(false)
62
68
  const timer = setTimeout(() => {
63
- if (!isLoaded) setShowSpinner(true)
69
+ setShowSpinner(true)
64
70
  }, 500)
65
71
  return () => clearTimeout(timer)
66
72
  }, [src])
67
73
 
68
- useEffect(() => {
69
- if (isLoaded) setShowSpinner(false)
70
- }, [isLoaded])
71
74
  return (
72
75
  <>
73
76
  <img
77
+ key={src}
78
+ ref={imgRef}
74
79
  alt={alt}
75
80
  className={cn(
76
81
  "max-w-full max-h-full object-contain rounded-md ease-in-out duration-300 transition-opacity-transform hover:scale-95",
77
82
  { "opacity-0": !isLoaded, "opacity-100": isLoaded },
78
83
  )}
79
84
  src={getSafeUrl(src)}
80
- onLoad={() => setIsLoaded(true)}
85
+ onLoad={() => setLoadedSrc(src)}
81
86
  />
82
87
  {!isLoaded && showSpinner && (
83
88
  <div className="absolute inset-0 flex items-center justify-center">
@@ -370,6 +375,8 @@ export const Images = memo(
370
375
  const [orderByField, setOrderByField] = useState<string | undefined>(undefined)
371
376
  const [orderByDirection, setOrderByDirection] = useState<"asc" | "desc" | undefined>(undefined)
372
377
 
378
+ const infiniteLoaderRef = useRef<InfiniteLoader>(null)
379
+
373
380
  const backToStart = useCallback(
374
381
  (
375
382
  latestConstraints?: QueryConstraint[],
@@ -377,6 +384,7 @@ export const Images = memo(
377
384
  latestOrderByDirection?: "asc" | "desc",
378
385
  ) => {
379
386
  return new Promise<void>((resolve) => {
387
+ infiniteLoaderRef.current?.resetloadMoreItemsCache()
380
388
  setServerList({})
381
389
  setList({})
382
390
  const newQuery = {
@@ -659,6 +667,7 @@ export const Images = memo(
659
667
 
660
668
  useEffect(() => {
661
669
  setIsFirstLoad(true)
670
+ setPrevIds(new Set())
662
671
  }, [filters, orderByField, orderByDirection])
663
672
 
664
673
  useEffect(() => {
@@ -838,6 +847,7 @@ export const Images = memo(
838
847
  >
839
848
  {!formList && (meta?.title || collectionTitle) && <Meta />}
840
849
  <InfiniteLoader
850
+ ref={infiniteLoaderRef}
841
851
  isItemLoaded={(index) => index < itemCount}
842
852
  itemCount={100000}
843
853
  loadMoreItems={loadMoreItems}