diff --git a/src/components/assets/missing-location/MissingLocationAssets.tsx b/src/components/assets/missing-location/MissingLocationAssets.tsx
index 2971187..400b37a 100644
--- a/src/components/assets/missing-location/MissingLocationAssets.tsx
+++ b/src/components/assets/missing-location/MissingLocationAssets.tsx
@@ -20,10 +20,13 @@ import { addDays } from "date-fns";
import { useConfig } from "@/contexts/ConfigContext";
import LazyGridImage from "@/components/ui/lazy-grid-image";
-export default function MissingLocationAssets() {
+interface IProps {
+ groupBy: "date" | "album";
+}
+export default function MissingLocationAssets({ groupBy }: IProps) {
const { exImmichUrl } = useConfig();
- const { startDate, selectedIds, assets, updateContext } =
+ const { startDate, albumId, selectedIds, assets, updateContext } =
useMissingLocationContext();
const [loading, setLoading] = useState(false);
@@ -32,12 +35,13 @@ export default function MissingLocationAssets() {
const [index, setIndex] = useState(-1);
const fetchAssets = async () => {
- if (!startDate) return;
+ if (!startDate && !albumId) return;
setLoading(true);
updateContext({
assets: [],
});
- return listMissingLocationAssets({ startDate })
+ const filters = groupBy === "date" ? { startDate } : { albumId }
+ return listMissingLocationAssets(filters)
.then((assets) => updateContext({ assets }))
.catch(setErrorMessage)
.finally(() => setLoading(false));
@@ -88,8 +92,8 @@ export default function MissingLocationAssets() {
};
useEffect(() => {
- if (startDate) fetchAssets();
- }, [startDate]);
+ if (startDate || albumId) fetchAssets();
+ }, [startDate, albumId]);
if (loading)
return (
@@ -99,7 +103,7 @@ export default function MissingLocationAssets() {
);
- if (!startDate)
+ if (!startDate && !albumId)
return (
diff --git a/src/components/assets/missing-location/MissingLocationDateItem.tsx b/src/components/assets/missing-location/MissingLocationDateItem.tsx
index dde352b..4e4378e 100644
--- a/src/components/assets/missing-location/MissingLocationDateItem.tsx
+++ b/src/components/assets/missing-location/MissingLocationDateItem.tsx
@@ -8,24 +8,34 @@ import React, { useMemo } from "react";
interface IProps {
record: IMissingLocationDatesResponse;
onSelect: (date: string) => void;
+ groupBy: "date" | "album";
}
-export default function MissingLocationDateItem({ record, onSelect }: IProps) {
+export default function MissingLocationDateItem({ record, onSelect, groupBy }: IProps) {
const { startDate } = useMissingLocationContext()
+
const dateLabel = useMemo(() => {
- if (!record.date) return "Unknown"
- return formatDate(parseDate(record.date, "yyyy-MM-dd").toISOString(), "do MMM yyyy")
- }, [record.date])
+ if (groupBy === "album") {
+ return record.label
+ }
+ if (!record.label) return "Unknown"
+ try {
+ return formatDate(parseDate(record.label, "yyyy-MM-dd").toISOString(), "do MMM yyyy")
+ } catch (e) {
+ return record.label
+ }
+ }, [record.label, groupBy])
+
return (
onSelect(record.date)}
- key={record.date}
+ onClick={() => onSelect(record.value)}
+ key={record.label}
className={
- cn("flex gap-1 flex-col p-2 py-1 rounded-lg hover:dark:bg-zinc-800 border border-transparent hover:bg-zinc-100 px-4",
- startDate === record.date ? "bg-zinc-100 dark:bg-zinc-800 border-gray-300 dark:border-zinc-700" : "")
+ cn("flex gap-1 flex-col p-1 rounded-lg hover:dark:bg-zinc-800 border border-transparent hover:bg-zinc-100",
+ startDate === record.label ? "bg-zinc-100 dark:bg-zinc-800 border-gray-300 dark:border-zinc-700" : "")
}
>
-
{dateLabel}
+
{dateLabel}
{record.asset_count} Orphan Assets
);
diff --git a/src/components/assets/missing-location/MissingLocationDates.tsx b/src/components/assets/missing-location/MissingLocationDates.tsx
index d7c6fad..e9a24e3 100644
--- a/src/components/assets/missing-location/MissingLocationDates.tsx
+++ b/src/components/assets/missing-location/MissingLocationDates.tsx
@@ -1,6 +1,6 @@
import React, { use, useEffect, useState } from "react";
import { usePotentialAlbumContext } from "@/contexts/PotentialAlbumContext";
-import { IMissingLocationDatesResponse, listMissingLocationDates } from "@/handlers/api/asset.handler";
+import { IMissingLocationDatesResponse, listMissingLocationAlbums, listMissingLocationDates } from "@/handlers/api/asset.handler";
import MissingLocationDateItem from "./MissingLocationDateItem";
import { useMissingLocationContext } from "@/contexts/MissingLocationContext";
import { useRouter } from "next/router";
@@ -8,7 +8,11 @@ import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrig
import { Button } from "@/components/ui/button";
import { SortAsc, SortDesc } from "lucide-react";
-export default function MissingLocationDates() {
+interface IMissingLocationDatesProps {
+ groupBy: string;
+
+}
+export default function MissingLocationDates({ groupBy }: IMissingLocationDatesProps) {
const { updateContext } = useMissingLocationContext();
const router = useRouter();
const [dateRecords, setDateRecords] = React.useState<
@@ -20,7 +24,9 @@ export default function MissingLocationDates() {
const [errorMessage, setErrorMessage] = useState
(null);
const fetchData = async () => {
- return listMissingLocationDates({
+ const func = groupBy === "album" ? listMissingLocationAlbums : listMissingLocationDates
+ setDateRecords([])
+ return func({
sortBy: filters.sortBy,
sortOrder: filters.sortOrder,
})
@@ -30,23 +36,41 @@ export default function MissingLocationDates() {
};
const handleSelect = (date: string) => {
- updateContext({ startDate: date });
- router.push({
- pathname: router.pathname,
- query: { startDate: date },
- });
+ if (groupBy === "album") {
+ updateContext({ albumId: date });
+ router.push({
+ pathname: router.pathname,
+ query: {
+ ...router.query,
+ albumId: date,
+ groupBy: "album",
+ startDate: undefined
+ },
+ });
+ } else {
+ updateContext({ startDate: date });
+ router.push({
+ pathname: router.pathname,
+ query: {
+ ...router.query,
+ startDate: date,
+ groupBy: "date",
+ albumId: undefined
+ },
+ });
+ }
};
-
-
useEffect(() => {
fetchData();
- }, [filters]);
+ }, [filters, groupBy]);
return (
-
+
-
)}
-
-
- {dateRecords.map((record) => (
-
- ))}
+
+ {dateRecords.map((record) => (
+
+ ))}
+
);
}
diff --git a/src/components/assets/missing-location/TagMissingLocationDialog/TagMissingLocationDialog.tsx b/src/components/assets/missing-location/TagMissingLocationDialog/TagMissingLocationDialog.tsx
index 765796e..d2c60bb 100644
--- a/src/components/assets/missing-location/TagMissingLocationDialog/TagMissingLocationDialog.tsx
+++ b/src/components/assets/missing-location/TagMissingLocationDialog/TagMissingLocationDialog.tsx
@@ -30,14 +30,14 @@ export default function TagMissingLocationDialog({
const [mapPosition,setMapPosition] = useState
({
latitude: 48.0,
longitude: 16.0,
- name: "home1"
+ name: "home"
});
return (