Skip to content

Commit c4f1d9c

Browse files
committed
Added button to sort assets in missing locations view
1 parent b365e7d commit c4f1d9c

File tree

3 files changed

+47
-21
lines changed

3 files changed

+47
-21
lines changed

src/components/assets/missing-location/MissingLocationAssets.tsx

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import LazyGridImage from "@/components/ui/lazy-grid-image";
2323
export default function MissingLocationAssets() {
2424
const { exImmichUrl } = useConfig();
2525

26-
const { startDate, selectedIds, assets, updateContext } =
26+
const { startDate, selectedIds, assets, sortOrder, sort, updateContext } =
2727
useMissingLocationContext();
2828

2929
const [loading, setLoading] = useState(false);
@@ -44,25 +44,33 @@ export default function MissingLocationAssets() {
4444
};
4545

4646
const images = useMemo(() => {
47-
return assets.map((p) => ({
48-
...p,
49-
src: p.url as string,
50-
original: p.previewUrl as string,
51-
width: p.exifImageWidth as number,
52-
height: p.exifImageHeight as number,
53-
isSelected: selectedIds.includes(p.id),
54-
tags: [
55-
{
56-
title: "Immich Link",
57-
value: (
58-
<a href={exImmichUrl + "/photos/" + p.id} target="_blank">
59-
Open in Immich
60-
</a>
61-
),
62-
},
63-
],
64-
}));
65-
}, [assets, selectedIds]);
47+
let sortedAssets: IAsset[];
48+
49+
if (sortOrder === "desc")
50+
sortedAssets = assets.sort((a, b) => new Date(b.dateTimeOriginal).getTime() - new Date(a.dateTimeOriginal).getTime())
51+
else
52+
sortedAssets = assets.sort((a, b) => new Date(a.dateTimeOriginal).getTime() - new Date(b.dateTimeOriginal).getTime());
53+
54+
return sortedAssets.
55+
map((p) => ({
56+
...p,
57+
src: p.url as string,
58+
original: p.previewUrl as string,
59+
width: p.exifImageWidth as number,
60+
height: p.exifImageHeight as number,
61+
isSelected: selectedIds.includes(p.id),
62+
tags: [
63+
{
64+
title: "Immich Link",
65+
value: (
66+
<a href={exImmichUrl + "/photos/" + p.id} target="_blank">
67+
Open in Immich
68+
</a>
69+
),
70+
},
71+
],
72+
}));
73+
}, [assets, selectedIds, sortOrder]);
6674

6775
const slides = useMemo(
6876
() =>

src/contexts/MissingLocationContext.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export interface IMissingLocationConfig {
55
startDate?: string;
66
selectedIds: string[];
77
assets: IAsset[];
8+
sort: "fileOriginalDate";
9+
sortOrder: "asc"|"desc";
810
}
911

1012
export interface MissingLocationContext extends IMissingLocationConfig {
@@ -15,6 +17,8 @@ const MissingLocationContext = createContext<MissingLocationContext>({
1517
selectedIds: [],
1618
assets: [],
1719
updateContext: () => { },
20+
sort:"fileOriginalDate",
21+
sortOrder: "asc"
1822
});
1923

2024
export default MissingLocationContext;

src/pages/assets/missing-locations.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import MissingLocationContext, {
1313
import { updateAssets } from "@/handlers/api/asset.handler";
1414

1515
import { IPlace } from "@/types/common";
16+
import { SortDesc, SortAsc } from "lucide-react";
1617
import { useRouter } from "next/router";
1718
import React, { useMemo } from "react";
1819

@@ -25,9 +26,11 @@ export default function MissingLocations() {
2526
startDate: startDate || undefined,
2627
selectedIds: [],
2728
assets: [],
29+
sort: "fileOriginalDate",
30+
sortOrder: "asc",
2831
});
2932

30-
const selectedAssets = useMemo(() => config.assets.filter((a) => config.selectedIds.includes(a.id)), [config.assets, config.selectedIds]) ;
33+
const selectedAssets = useMemo(() => config.assets.filter((a) => config.selectedIds.includes(a.id)), [config.assets, config.selectedIds]);
3134

3235
const handleSubmit = (place: IPlace) => {
3336
return updateAssets({
@@ -42,6 +45,10 @@ export default function MissingLocations() {
4245
})
4346
};
4447

48+
const handleChange = (e: {sortOrder: "asc"|"desc"}) => {
49+
setConfig({ ...config, sortOrder:e.sortOrder });
50+
}
51+
4552
return (
4653
<PageLayout className="!p-0 !mb-0">
4754
<Header
@@ -77,6 +84,13 @@ export default function MissingLocations() {
7784
</Button>
7885
)}
7986
<TagMissingLocationDialog onSubmit={handleSubmit} />
87+
88+
<div>
89+
<Button variant="default" size="sm" onClick={() => handleChange({ sortOrder: config.sortOrder === "asc" ? "desc" : "asc" })}>
90+
{config.sortOrder === "asc" ? <SortAsc size={16} /> : <SortDesc size={16} />}
91+
</Button>
92+
</div>
93+
8094
<AssetsOptions assets={selectedAssets} onAdd={() => { }} />
8195
</>
8296
}

0 commit comments

Comments
 (0)