From e8a3d50e1144711d16a153f222eb9b9db58cd5c9 Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Sun, 8 Sep 2024 11:59:43 +0530 Subject: [PATCH] feat: lazy load images in potential albums and missing locations Signed-off-by: Varun Raj --- bun.lockb | Bin 383385 -> 387559 bytes package.json | 1 + .../PotentialAlbumsAssets.tsx | 2 + .../MissingLocationAssets.tsx | 2 + src/components/layouts/RootLayout.tsx | 29 ++++--- src/components/people/PeopleFilters.tsx | 1 + src/components/shared/common/AssetFilter.tsx | 57 +++++++++++++ src/components/ui/combobox.tsx | 78 ++++++++++++++++++ src/components/ui/lazy-image.tsx | 44 ++++++++++ src/config/rQuery.ts | 5 ++ src/config/routes.ts | 5 +- src/contexts/ExifFiltersContext.tsx | 19 +++++ src/handlers/api/common.handler.ts | 6 +- src/pages/assets/missing-locations.tsx | 2 + 14 files changed, 236 insertions(+), 15 deletions(-) create mode 100644 src/components/shared/common/AssetFilter.tsx create mode 100644 src/components/ui/combobox.tsx create mode 100644 src/components/ui/lazy-image.tsx create mode 100644 src/config/rQuery.ts create mode 100644 src/contexts/ExifFiltersContext.tsx diff --git a/bun.lockb b/bun.lockb index 5a977a2545971ebbd55aebe89ad3a265c9d0b44e..e7f248c8988b90bebe2769fe067041a7a70439e4 100755 GIT binary patch delta 76813 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

0Mn4 zBk_M3zpN%|RgQJ9YIQ|xWob5HTy>q>e*32y)-mJRcLTFbwK>L}?5ziTa~|}5dq$Vw;Rhd$%xt6$ z*;8>%sT93qH9lS8SJv0RgiFQDYB*^fL8io^+tb%%%~9*`c!`dg)n?HihD25@EKzNK zhg~T$+Tta~nK8@Oj_mm;Rl&3IF>^DkcanC!DUm93<)XV?XC051h$conb2Mcm6?nJz z_wg}jGpqU=u`Je<_}=AFtwQ%~0r3*AGph(BoEfqhI*Mc|T+;R1n@i&*@|iK6vcE~4 zF^~I;_!wsvbyCvSH6@O|h{!X1MRUFjV0orJG1;(eu~&(`=k9fG9Us#_i*iI^**8eY ze3m{(jeCou2K^K-u_TLXBoaGJiC!I-y}vMhPt|ydV_DSLD6K|;ZJx%c`kYWEv1`{3 zEL!jXT{&H{9Q$t6oq8a;D&hx`xHD(Kv!zvD?2DHO%B;LMQI?LTgtPwfol9qI9~v)_ zWZmi7$7NQbl6Ed>rFJK18+vreTz+tT+9c~vPaBFkT|by3@5&cNw;j_NKQntM-|D zD&xor^%eb%hZOSs;^XgNJVsWgqc`5FEor?{<~6465&ph;zRzlxMLrEr`g{B*)}qwf zEn3M&$t$~z66ri~6@r6*_76&p61JmcSN}0FlHD$kAFiA}{Z2NuWYytU*5yrJRctG} zr$#n8SOO$2Mkd#8`P8JXypYOM�}eHOyCaRLoZH4va@as>3#(81hhPW8kM7Y zhWGBJu8mjyc4$>vd-X6bk1bpJxa;5y??U_b)-y`i;QjSdLzn&Dbg^;Y9$DehlZNHz zz6k9*SdZ5x-1FR8WOm_TGd|#$_pof8iVf;`*f6x=ym3&OL%dL%a6s9Xz0O51;;h z!Um`<=iGAn$Del%LrcO_A9=sClxPX-+Plx7u0Fw?J9iBopfdlWIr9GNQhz=F1Ty`7 zN+{O@TK={l<&We?*RWTfWs^~tt^>MKxX?aby7ms~9M-3Q*Uo)HyYvqY4(+3V<*HAo zULk`*`V8cwN?ix2ywRFhX5(8&s5K6J{8gi?S^?F@?v^G!SK~FRr%`T&cIBGv=H{wm zCc6Ekww7`$tMW~8TbT1-YDpA-t}1PCD_rZ5YHqvk-`0)> e?Ydve?L~9dd#YQ?T~Xh<^>N)5J;m*E-Twh9n_gW2 delta 73715 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 diff --git a/package.json b/package.json index da657a3..d4f94f3 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "react-day-picker": "9.0.8", "react-dom": "^18", "react-grid-gallery": "^1.0.1", + "react-query": "^3.39.3", "recharts": "^2.12.7", "sass": "^1.77.8", "tailwind-merge": "^2.5.2", diff --git a/src/components/albums/potential-albums/PotentialAlbumsAssets.tsx b/src/components/albums/potential-albums/PotentialAlbumsAssets.tsx index ba4d894..2818863 100644 --- a/src/components/albums/potential-albums/PotentialAlbumsAssets.tsx +++ b/src/components/albums/potential-albums/PotentialAlbumsAssets.tsx @@ -9,6 +9,7 @@ import Captions from "yet-another-react-lightbox/plugins/captions"; import { CalendarArrowDown, CalendarArrowUp, Hourglass } from "lucide-react"; import Video from "yet-another-react-lightbox/plugins/video"; import { useConfig } from "@/contexts/ConfigContext"; +import LazyImage from "@/components/ui/lazy-image"; export default function PotentialAlbumsAssets() { const { exImmichUrl } = useConfig(); @@ -123,6 +124,7 @@ export default function PotentialAlbumsAssets() { onClick={handleClick} enableImageSelection={true} onSelect={handleSelect} + thumbnailImageComponent={LazyImage} tagStyle={{ color: "white", fontSize: "12px", diff --git a/src/components/assets/missing-location/MissingLocationAssets.tsx b/src/components/assets/missing-location/MissingLocationAssets.tsx index 7acda77..6b58ace 100644 --- a/src/components/assets/missing-location/MissingLocationAssets.tsx +++ b/src/components/assets/missing-location/MissingLocationAssets.tsx @@ -18,6 +18,7 @@ import { listMissingLocationAssets } from "@/handlers/api/asset.handler"; import { formatDate, parseDate } from "@/helpers/date.helper"; import { addDays } from "date-fns"; import { useConfig } from "@/contexts/ConfigContext"; +import LazyImage from "@/components/ui/lazy-image"; export default function MissingLocationAssets() { const { exImmichUrl } = useConfig(); @@ -125,6 +126,7 @@ export default function MissingLocationAssets() { onClick={handleClick} enableImageSelection={true} onSelect={handleSelect} + thumbnailImageComponent={LazyImage} tagStyle={{ color: "white", fontSize: "12px", diff --git a/src/components/layouts/RootLayout.tsx b/src/components/layouts/RootLayout.tsx index 91ff2b5..3eab240 100644 --- a/src/components/layouts/RootLayout.tsx +++ b/src/components/layouts/RootLayout.tsx @@ -10,11 +10,14 @@ import { ArrowRight, TriangleAlert } from "lucide-react"; import Link from "next/link"; import { LoginForm } from "../auth/LoginForm"; import { useConfig } from "@/contexts/ConfigContext"; +import { queryClient } from "@/config/rQuery"; +import { QueryClientProvider } from "react-query"; type RootLayoutProps = { children: ReactNode; }; + export default function RootLayout({ children }: RootLayoutProps) { const { immichURL, exImmichUrl } = useConfig(); const [user, setUser] = useState(null); @@ -34,9 +37,7 @@ export default function RootLayout({ children }: RootLayoutProps) { .finally(() => setLoading(false)); }; - const handleLoginCompletion = (user: IUser) => { - setUser(user); - } + const handleLoginCompletion = (user: IUser) => setUser(user); useEffect(() => { fetchData(); @@ -86,15 +87,17 @@ export default function RootLayout({ children }: RootLayoutProps) { if (!user) return ; return ( - -

- -
{children}
- -
- + + +
+ +
{children}
+ +
+
+
); } diff --git a/src/components/people/PeopleFilters.tsx b/src/components/people/PeopleFilters.tsx index a36de1f..232ba81 100644 --- a/src/components/people/PeopleFilters.tsx +++ b/src/components/people/PeopleFilters.tsx @@ -14,6 +14,7 @@ import { } from "../ui/dropdown-menu"; import { Input } from "../ui/input"; import { IPersonListFilters } from "@/handlers/api/people.handler"; +import AssetFilter from "../shared/common/AssetFilter"; export function PeopleFilters() { const router = useRouter(); diff --git a/src/components/shared/common/AssetFilter.tsx b/src/components/shared/common/AssetFilter.tsx new file mode 100644 index 0000000..bff8f0e --- /dev/null +++ b/src/components/shared/common/AssetFilter.tsx @@ -0,0 +1,57 @@ +import { Combobox } from '@/components/ui/combobox'; +import { getFilters } from '@/handlers/api/common.handler'; +import React, { useMemo, useState } from 'react' +import { useQuery } from 'react-query'; + +const fields = [ + "make", + "model", + "lensModel", + "city", + "state", + "country", + "projectionType", + "colorspace", + "bitsPerSample", + "rating", +]; + +const formattedFields = fields.map(field => ({ + label: field.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase()), + value: field +})); + + +export default function AssetFilter() { + const [selectedField, setSelectedField] = useState(null); + + const { data } = useQuery('filters', getFilters) + + + const options = useMemo(() => { + if (!selectedField) return formattedFields; + const { filters } = data; + + if (!filters) return formattedFields; + const field = filters[selectedField]; + if (!field) return []; + return field.map((value: string) => ({ + label: value, + value + })); + }, [selectedField, data]); + + return ( + { + if (!selectedField) setSelectedField(value); + + }} + onOpenChange={(open) => { + if (!open) setSelectedField(null); + }} + /> + ) +} diff --git a/src/components/ui/combobox.tsx b/src/components/ui/combobox.tsx new file mode 100644 index 0000000..b7fd690 --- /dev/null +++ b/src/components/ui/combobox.tsx @@ -0,0 +1,78 @@ +"use client" + +import * as React from "react" +import { Check, Filter } from "lucide-react" + +import { cn } from "@/lib/utils" +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, +} from "@/components/ui/command" +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover" + + +export interface IComboBoxOption { label: string; value: string } + +export interface IComboBoxProps { + options: IComboBoxOption[] + onSelect?: (value: string) => void + onOpenChange?: (open: boolean) => void + closeOnSelect?: boolean +} + +export function Combobox( + { options, onSelect, onOpenChange, closeOnSelect }: IComboBoxProps +) { + const [open, setOpen] = React.useState(false) + const [value, setValue] = React.useState("") + + return ( + { + setOpen(openState) + onOpenChange?.(openState) + }}> + + + + + + + + No framework found. + + {options.map((option) => ( + { + setValue(currentValue === value ? "" : currentValue) + onSelect?.(currentValue) + if (closeOnSelect) { + setOpen(false) + } + }} + > + + {option.label.trim()} + + ))} + + + + + + ) +} diff --git a/src/components/ui/lazy-image.tsx b/src/components/ui/lazy-image.tsx new file mode 100644 index 0000000..9027779 --- /dev/null +++ b/src/components/ui/lazy-image.tsx @@ -0,0 +1,44 @@ +/* eslint-disable @next/next/no-img-element */ +import React, { useEffect } from 'react' +import { Image, ImageExtended, ThumbnailImageProps } from 'react-grid-gallery' + +interface LazyImageProps extends ThumbnailImageProps> {} + +export default function LazyImage( + props: LazyImageProps +) { + const [isVisible, setIsVisible] = React.useState(false) + const imageRef = React.useRef(null) + + const setupObserver = () => { + const observer = new IntersectionObserver((entries) => { + + entries.forEach((entry) => { + if (entry.isIntersecting) { + setIsVisible(true) + observer.disconnect() + } + }) + }) + + if (imageRef.current) { + observer.observe(imageRef.current) + } + return observer + } + + useEffect(() => { + const observer = setupObserver() + return () => { + observer?.disconnect() + } + }, []) + + if (!isVisible) return ( +
+ ) + + return ( + {props.imageProps.alt + ) +} diff --git a/src/config/rQuery.ts b/src/config/rQuery.ts new file mode 100644 index 0000000..3118e51 --- /dev/null +++ b/src/config/rQuery.ts @@ -0,0 +1,5 @@ +import { + QueryClient, +} from 'react-query' + +export const queryClient = new QueryClient() \ No newline at end of file diff --git a/src/config/routes.ts b/src/config/routes.ts index 4aa8025..1cb02e1 100644 --- a/src/config/routes.ts +++ b/src/config/routes.ts @@ -34,4 +34,7 @@ export const ASSET_VIDEO_PATH = (id: string) => BASE_PROXY_ENDPOINT + "/asset/vi // Location -export const SEARCH_PLACES_PATH = BASE_PROXY_ENDPOINT + "/search/places"; \ No newline at end of file +export const SEARCH_PLACES_PATH = BASE_PROXY_ENDPOINT + "/search/places"; + +// Common +export const GET_FILTERS = BASE_API_ENDPOINT + "/filters/asset-filters"; \ No newline at end of file diff --git a/src/contexts/ExifFiltersContext.tsx b/src/contexts/ExifFiltersContext.tsx new file mode 100644 index 0000000..fe8efec --- /dev/null +++ b/src/contexts/ExifFiltersContext.tsx @@ -0,0 +1,19 @@ +import { createContext, useContext } from "react"; + +type FilterValue = string | string[] | number | number[] | undefined; + +interface ExifFiltersType { + updateContext: (key: string, value: FilterValue) => void; + [key: string]: FilterValue | ((key: string, value: FilterValue) => void); +} + +const ExifFilters = createContext({ + updateContext: () => {}, +}); + +export default ExifFilters; + +export const useExifFilters = () => { + const context = useContext(ExifFilters) as ExifFiltersType; + return context; +} \ No newline at end of file diff --git a/src/handlers/api/common.handler.ts b/src/handlers/api/common.handler.ts index c2ba640..3626e32 100644 --- a/src/handlers/api/common.handler.ts +++ b/src/handlers/api/common.handler.ts @@ -1,4 +1,4 @@ -import { SEARCH_PLACES_PATH } from "@/config/routes"; +import { GET_FILTERS, SEARCH_PLACES_PATH } from "@/config/routes"; import API from "@/lib/api"; import { IPlace } from "@/types/common"; @@ -6,3 +6,7 @@ export const searchPlaces = async (name: string): Promise => { return API.get(SEARCH_PLACES_PATH, { name }); } + +export const getFilters = async () => { + return API.get(GET_FILTERS); +} \ No newline at end of file diff --git a/src/pages/assets/missing-locations.tsx b/src/pages/assets/missing-locations.tsx index 8654509..ea5def3 100644 --- a/src/pages/assets/missing-locations.tsx +++ b/src/pages/assets/missing-locations.tsx @@ -5,6 +5,7 @@ import MissingLocationAssets from "@/components/assets/missing-location/MissingL import MissingLocationDates from "@/components/assets/missing-location/MissingLocationDates"; import TagMissingLocationDialog from "@/components/assets/missing-location/TagMissingLocationDialog/TagMissingLocationDialog"; import PageLayout from "@/components/layouts/PageLayout"; +import AssetFilter from "@/components/shared/common/AssetFilter"; import Header from "@/components/shared/Header"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; @@ -48,6 +49,7 @@ export default function MissingLocations() { leftComponent="Missing Location" rightComponent={ <> + {config.selectedIds.length} Selected